@claude-flow/plugin-gastown-bridge 0.1.3 → 0.1.4

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 (60) hide show
  1. package/dist/bd-bridge-C9wTbkhi.d.cts +318 -0
  2. package/dist/bd-bridge-C9wTbkhi.d.ts +318 -0
  3. package/dist/bridges.cjs +1 -1
  4. package/dist/bridges.d.cts +13 -612
  5. package/dist/bridges.d.ts +13 -612
  6. package/dist/bridges.js +1 -1
  7. package/dist/chunk-2KNTWGUX.js +12 -0
  8. package/dist/chunk-2KNTWGUX.js.map +1 -0
  9. package/dist/chunk-46PJFOMY.cjs +11 -0
  10. package/dist/chunk-46PJFOMY.cjs.map +1 -0
  11. package/dist/chunk-7UPWLRZX.js +11 -0
  12. package/dist/chunk-7UPWLRZX.js.map +1 -0
  13. package/dist/chunk-7VD5N6NG.cjs +11 -0
  14. package/dist/chunk-7VD5N6NG.cjs.map +1 -0
  15. package/dist/chunk-EBOVUTYL.js +12 -0
  16. package/dist/chunk-EBOVUTYL.js.map +1 -0
  17. package/dist/chunk-I2TLUPMJ.cjs +12 -0
  18. package/dist/chunk-I2TLUPMJ.cjs.map +1 -0
  19. package/dist/chunk-Q7MLH722.cjs +11 -0
  20. package/dist/chunk-Q7MLH722.cjs.map +1 -0
  21. package/dist/chunk-QFMFM7NE.cjs +13 -0
  22. package/dist/chunk-QFMFM7NE.cjs.map +1 -0
  23. package/dist/chunk-SUKPSMVK.cjs +12 -0
  24. package/dist/chunk-SUKPSMVK.cjs.map +1 -0
  25. package/dist/chunk-TGFYZY3C.js +11 -0
  26. package/dist/chunk-TGFYZY3C.js.map +1 -0
  27. package/dist/chunk-U74VYTRV.js +11 -0
  28. package/dist/chunk-U74VYTRV.js.map +1 -0
  29. package/dist/chunk-UJ56JMNG.js +13 -0
  30. package/dist/chunk-UJ56JMNG.js.map +1 -0
  31. package/dist/convoy.cjs +2 -0
  32. package/dist/convoy.cjs.map +1 -0
  33. package/dist/convoy.d.cts +6 -0
  34. package/dist/convoy.d.ts +6 -0
  35. package/dist/convoy.js +2 -0
  36. package/dist/convoy.js.map +1 -0
  37. package/dist/formula.cjs +2 -0
  38. package/dist/formula.cjs.map +1 -0
  39. package/dist/formula.d.cts +317 -0
  40. package/dist/formula.d.ts +317 -0
  41. package/dist/formula.js +2 -0
  42. package/dist/formula.js.map +1 -0
  43. package/dist/gt-bridge-B7hZz5vC.d.cts +291 -0
  44. package/dist/gt-bridge-B7hZz5vC.d.ts +291 -0
  45. package/dist/index-BzkAx4ho.d.ts +785 -0
  46. package/dist/index-CGJs8eMa.d.cts +785 -0
  47. package/dist/index.cjs +8 -9
  48. package/dist/index.cjs.map +1 -1
  49. package/dist/index.d.cts +17 -2241
  50. package/dist/index.d.ts +17 -2241
  51. package/dist/index.js +8 -9
  52. package/dist/index.js.map +1 -1
  53. package/dist/types-CMoOZXrm.d.cts +1146 -0
  54. package/dist/types-CMoOZXrm.d.ts +1146 -0
  55. package/dist/wasm-loader.js +1 -1
  56. package/package.json +16 -18
  57. package/dist/chunk-IBKUMYUL.js +0 -14
  58. package/dist/chunk-IBKUMYUL.js.map +0 -1
  59. package/dist/chunk-JF2GA7QE.cjs +0 -14
  60. package/dist/chunk-JF2GA7QE.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors.ts","../src/memory/pool.ts","../src/memory/arena.ts","../src/memory/monitor.ts","../src/memory/lazy.ts","../src/memory/index.ts"],"names":["GasTownErrorCode","GasTownError","_GasTownError","message","code","context","cause","str","BeadsError","_BeadsError","beadId","reason","rawOutput","truncated","ValidationError","_ValidationError","constraints","sanitized","name","convoyId","field","detected","errors","allConstraints","e","CLIExecutionError","_CLIExecutionError","details","sanitizedArgs","arg","truncatedStderr","command","args","timeoutMs","exitCode","stderr","durationMs","FormulaError","_FormulaError","formulaName","ConvoyError","_ConvoyError","isGasTownError","error","isValidationError","isCLIExecutionError","isBeadsError","wrapError","getErrorMessage","ObjectPool","factory","options","obj","objects","count","toCreate","i","total","PooledBead","source","PooledStep","PooledFormula","PooledConvoy","PooledMolecule","key","beadPool","formulaPool","stepPool","convoyPool","moleculePool","allPools","getAllPoolStats","getTotalMemorySaved","pool","clearAllPools","preWarmAllPools","getPoolEfficiencySummary","stats","poolEntries","totalHits","sum","s","totalMisses","totalMemory","totalInUse","totalAvailable","Arena","config","sizeBytes","type","results","allocation","memoryFreed","scopedArena","arena","withArena","fn","withArenaSync","ArenaManager","saved","arenaStats","arenaManager","MemoryMonitor","EventEmitter","memUsage","poolSummary","arenaMemory","bytes","callback","index","usage","level","beforeStats","afterStats","oldest","newest","timeDiff","trend","getMemoryUsage","setMemoryLimit","onPressure","monitor","defaultMonitor","onMemoryPressure","getDefaultMonitor","disposeDefaultMonitor","MemoryBudgetManager","totalLimit","limit","used","budget","b","memoryBudget","Lazy","startTime","value","lazySingletons","getLazySingleton","lazy","disposeLazySingleton","disposeAllLazySingletons","promises","LazyModule","importer","LazyBridge","bridge","LazyWasm","loader","module","LazyObserver","createLazyProperty","state","initializeMemorySystem","getSystemMemoryStats","getMemoryReport","triggerMemoryCleanup","shutdownMemorySystem","isMemorySystemInitialized","getMemoryMonitor","acquireBead","releaseBead","bead","acquireStep","releaseStep","step","acquireFormula","releaseFormula","formula","acquireConvoy","releaseConvoy","convoy","acquireMolecule","releaseMolecule","molecule"],"mappings":"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","file":"chunk-TGFYZY3C.js","sourcesContent":["/**\n * Gas Town Bridge Plugin - Typed Error Classes\n *\n * Provides a hierarchy of typed error classes for the Gas Town Bridge Plugin:\n * - GasTownError: Base error class for all Gas Town errors\n * - BeadsError: Errors related to bead operations\n * - ValidationError: Input validation failures\n * - CLIExecutionError: CLI command execution failures\n *\n * All errors include:\n * - Typed error codes for programmatic handling\n * - Stack traces for debugging\n * - Contextual information about the failure\n *\n * @module gastown-bridge/errors\n * @version 0.1.0\n */\n\n// ============================================================================\n// Error Codes\n// ============================================================================\n\n/**\n * Gas Town error codes enumeration\n */\nexport const GasTownErrorCode = {\n // General errors\n UNKNOWN: 'GT_UNKNOWN',\n INITIALIZATION_FAILED: 'GT_INITIALIZATION_FAILED',\n NOT_INITIALIZED: 'GT_NOT_INITIALIZED',\n CONFIGURATION_ERROR: 'GT_CONFIGURATION_ERROR',\n\n // Validation errors\n VALIDATION_FAILED: 'GT_VALIDATION_FAILED',\n INVALID_INPUT: 'GT_INVALID_INPUT',\n INVALID_BEAD_ID: 'GT_INVALID_BEAD_ID',\n INVALID_FORMULA_NAME: 'GT_INVALID_FORMULA_NAME',\n INVALID_CONVOY_ID: 'GT_INVALID_CONVOY_ID',\n INVALID_ARGUMENTS: 'GT_INVALID_ARGUMENTS',\n COMMAND_INJECTION_DETECTED: 'GT_COMMAND_INJECTION_DETECTED',\n PATH_TRAVERSAL_DETECTED: 'GT_PATH_TRAVERSAL_DETECTED',\n\n // Beads errors\n BEAD_NOT_FOUND: 'GT_BEAD_NOT_FOUND',\n BEAD_CREATE_FAILED: 'GT_BEAD_CREATE_FAILED',\n BEAD_UPDATE_FAILED: 'GT_BEAD_UPDATE_FAILED',\n BEAD_DELETE_FAILED: 'GT_BEAD_DELETE_FAILED',\n BEAD_PARSE_FAILED: 'GT_BEAD_PARSE_FAILED',\n\n // Formula errors\n FORMULA_NOT_FOUND: 'GT_FORMULA_NOT_FOUND',\n FORMULA_PARSE_FAILED: 'GT_FORMULA_PARSE_FAILED',\n FORMULA_COOK_FAILED: 'GT_FORMULA_COOK_FAILED',\n FORMULA_INVALID_TYPE: 'GT_FORMULA_INVALID_TYPE',\n\n // Convoy errors\n CONVOY_NOT_FOUND: 'GT_CONVOY_NOT_FOUND',\n CONVOY_CREATE_FAILED: 'GT_CONVOY_CREATE_FAILED',\n\n // CLI errors\n CLI_NOT_FOUND: 'GT_CLI_NOT_FOUND',\n CLI_TIMEOUT: 'GT_CLI_TIMEOUT',\n CLI_EXECUTION_FAILED: 'GT_CLI_EXECUTION_FAILED',\n CLI_INVALID_OUTPUT: 'GT_CLI_INVALID_OUTPUT',\n\n // WASM errors\n WASM_NOT_AVAILABLE: 'GT_WASM_NOT_AVAILABLE',\n WASM_EXECUTION_FAILED: 'GT_WASM_EXECUTION_FAILED',\n\n // Sync errors\n SYNC_FAILED: 'GT_SYNC_FAILED',\n SYNC_CONFLICT: 'GT_SYNC_CONFLICT',\n\n // Graph errors\n DEPENDENCY_CYCLE: 'GT_DEPENDENCY_CYCLE',\n GRAPH_ERROR: 'GT_GRAPH_ERROR',\n} as const;\n\nexport type GasTownErrorCodeType = (typeof GasTownErrorCode)[keyof typeof GasTownErrorCode];\n\n// ============================================================================\n// Base Error Class\n// ============================================================================\n\n/**\n * Base error class for all Gas Town Bridge errors\n *\n * @example\n * ```typescript\n * throw new GasTownError(\n * 'Failed to initialize plugin',\n * GasTownErrorCode.INITIALIZATION_FAILED,\n * { configPath: '/path/to/config' }\n * );\n * ```\n */\nexport class GasTownError extends Error {\n /** Error code for programmatic handling */\n readonly code: GasTownErrorCodeType;\n\n /** Timestamp when error occurred */\n readonly timestamp: Date;\n\n /** Additional context about the error */\n readonly context?: Record<string, unknown>;\n\n /** Original error if this wraps another error */\n readonly cause?: Error;\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.UNKNOWN,\n context?: Record<string, unknown>,\n cause?: Error\n ) {\n super(message);\n this.name = 'GasTownError';\n this.code = code;\n this.timestamp = new Date();\n this.context = context;\n this.cause = cause;\n\n // Maintain proper stack trace in V8 environments\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, GasTownError);\n }\n }\n\n /**\n * Convert error to JSON for logging/serialization\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n timestamp: this.timestamp.toISOString(),\n context: this.context,\n cause: this.cause?.message,\n stack: this.stack,\n };\n }\n\n /**\n * Create a human-readable string representation\n */\n toString(): string {\n let str = `[${this.code}] ${this.message}`;\n if (this.context) {\n str += ` | Context: ${JSON.stringify(this.context)}`;\n }\n if (this.cause) {\n str += ` | Caused by: ${this.cause.message}`;\n }\n return str;\n }\n}\n\n// ============================================================================\n// Beads Error Class\n// ============================================================================\n\n/**\n * Error class for bead-related operations\n *\n * @example\n * ```typescript\n * throw new BeadsError(\n * 'Bead not found',\n * GasTownErrorCode.BEAD_NOT_FOUND,\n * { beadId: 'gt-abc12' }\n * );\n * ```\n */\nexport class BeadsError extends GasTownError {\n /** Bead ID if applicable */\n readonly beadId?: string;\n\n /** Operation being performed */\n readonly operation?: string;\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.BEAD_NOT_FOUND,\n context?: Record<string, unknown>,\n cause?: Error\n ) {\n super(message, code, context, cause);\n this.name = 'BeadsError';\n\n // Extract beadId from context if present\n if (context?.beadId && typeof context.beadId === 'string') {\n this.beadId = context.beadId;\n }\n if (context?.operation && typeof context.operation === 'string') {\n this.operation = context.operation;\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BeadsError);\n }\n }\n\n /**\n * Create a BeadsError for a not found scenario\n */\n static notFound(beadId: string): BeadsError {\n return new BeadsError(\n `Bead not found: ${beadId}`,\n GasTownErrorCode.BEAD_NOT_FOUND,\n { beadId, operation: 'get' }\n );\n }\n\n /**\n * Create a BeadsError for a create failure\n */\n static createFailed(reason: string, cause?: Error): BeadsError {\n return new BeadsError(\n `Failed to create bead: ${reason}`,\n GasTownErrorCode.BEAD_CREATE_FAILED,\n { operation: 'create' },\n cause\n );\n }\n\n /**\n * Create a BeadsError for a parse failure\n */\n static parseFailed(rawOutput: string, cause?: Error): BeadsError {\n // Truncate raw output for safety\n const truncated = rawOutput.length > 200 ? rawOutput.slice(0, 200) + '...' : rawOutput;\n return new BeadsError(\n 'Failed to parse bead output',\n GasTownErrorCode.BEAD_PARSE_FAILED,\n { operation: 'parse', outputLength: rawOutput.length, outputPreview: truncated },\n cause\n );\n }\n}\n\n// ============================================================================\n// Validation Error Class\n// ============================================================================\n\n/**\n * Validation constraint that was violated\n */\nexport interface ValidationConstraint {\n /** Field or parameter that failed validation */\n field: string;\n /** Expected constraint (e.g., \"alphanumeric\", \"max-length:64\") */\n constraint: string;\n /** Actual value (sanitized for logging) */\n actual?: string;\n /** Expected value or pattern */\n expected?: string;\n}\n\n/**\n * Error class for input validation failures\n *\n * @example\n * ```typescript\n * throw new ValidationError(\n * 'Invalid bead ID format',\n * GasTownErrorCode.INVALID_BEAD_ID,\n * [{ field: 'beadId', constraint: 'alphanumeric', actual: 'abc;rm -rf' }]\n * );\n * ```\n */\nexport class ValidationError extends GasTownError {\n /** Validation constraints that were violated */\n readonly constraints: ValidationConstraint[];\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.VALIDATION_FAILED,\n constraints: ValidationConstraint[] = [],\n cause?: Error\n ) {\n super(message, code, { constraints }, cause);\n this.name = 'ValidationError';\n this.constraints = constraints;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ValidationError);\n }\n }\n\n /**\n * Create a ValidationError for an invalid bead ID\n */\n static invalidBeadId(beadId: string): ValidationError {\n // Sanitize the bead ID for safe logging\n const sanitized = beadId.replace(/[^\\w\\s-]/g, '?').slice(0, 32);\n return new ValidationError(\n 'Invalid bead ID format',\n GasTownErrorCode.INVALID_BEAD_ID,\n [{\n field: 'beadId',\n constraint: 'alphanumeric with gt- prefix',\n actual: sanitized,\n expected: 'gt-{4-16 alphanumeric} or numeric',\n }]\n );\n }\n\n /**\n * Create a ValidationError for an invalid formula name\n */\n static invalidFormulaName(name: string): ValidationError {\n const sanitized = name.replace(/[^\\w\\s-]/g, '?').slice(0, 32);\n return new ValidationError(\n 'Invalid formula name format',\n GasTownErrorCode.INVALID_FORMULA_NAME,\n [{\n field: 'formulaName',\n constraint: 'alphanumeric with dash/underscore, starting with letter',\n actual: sanitized,\n expected: '[a-zA-Z][a-zA-Z0-9_-]{0,63}',\n }]\n );\n }\n\n /**\n * Create a ValidationError for an invalid convoy ID\n */\n static invalidConvoyId(convoyId: string): ValidationError {\n const sanitized = convoyId.replace(/[^\\w\\s-]/g, '?').slice(0, 32);\n return new ValidationError(\n 'Invalid convoy ID format',\n GasTownErrorCode.INVALID_CONVOY_ID,\n [{\n field: 'convoyId',\n constraint: 'UUID format',\n actual: sanitized,\n expected: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',\n }]\n );\n }\n\n /**\n * Create a ValidationError for command injection attempt\n */\n static commandInjection(field: string, detected: string): ValidationError {\n // Never include the actual malicious content\n return new ValidationError(\n `Command injection detected in ${field}`,\n GasTownErrorCode.COMMAND_INJECTION_DETECTED,\n [{\n field,\n constraint: 'no shell metacharacters',\n actual: '[REDACTED]',\n expected: 'safe characters only',\n }]\n );\n }\n\n /**\n * Create a ValidationError for path traversal attempt\n */\n static pathTraversal(field: string): ValidationError {\n return new ValidationError(\n `Path traversal detected in ${field}`,\n GasTownErrorCode.PATH_TRAVERSAL_DETECTED,\n [{\n field,\n constraint: 'no parent directory references',\n actual: '[REDACTED]',\n expected: 'safe path characters only',\n }]\n );\n }\n\n /**\n * Combine multiple validation errors\n */\n static combine(errors: ValidationError[]): ValidationError {\n const allConstraints = errors.flatMap(e => e.constraints);\n return new ValidationError(\n `Multiple validation errors: ${errors.map(e => e.message).join('; ')}`,\n GasTownErrorCode.VALIDATION_FAILED,\n allConstraints\n );\n }\n}\n\n// ============================================================================\n// CLI Execution Error Class\n// ============================================================================\n\n/**\n * Error class for CLI command execution failures\n *\n * @example\n * ```typescript\n * throw new CLIExecutionError(\n * 'gt command failed',\n * GasTownErrorCode.CLI_EXECUTION_FAILED,\n * { command: 'gt', args: ['beads', 'list'], exitCode: 1, stderr: 'error message' }\n * );\n * ```\n */\nexport class CLIExecutionError extends GasTownError {\n /** CLI command that was executed */\n readonly command: string;\n\n /** Arguments passed to the command (sanitized) */\n readonly args: string[];\n\n /** Exit code from the process */\n readonly exitCode?: number;\n\n /** Standard error output (truncated) */\n readonly stderr?: string;\n\n /** Execution duration in milliseconds */\n readonly durationMs?: number;\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.CLI_EXECUTION_FAILED,\n details: {\n command: string;\n args?: string[];\n exitCode?: number;\n stderr?: string;\n durationMs?: number;\n },\n cause?: Error\n ) {\n // Sanitize args for context\n const sanitizedArgs = (details.args ?? []).map(arg =>\n arg.length > 50 ? arg.slice(0, 50) + '...' : arg\n );\n\n // Truncate stderr for safety\n const truncatedStderr = details.stderr && details.stderr.length > 500\n ? details.stderr.slice(0, 500) + '...'\n : details.stderr;\n\n super(message, code, {\n command: details.command,\n args: sanitizedArgs,\n exitCode: details.exitCode,\n durationMs: details.durationMs,\n }, cause);\n\n this.name = 'CLIExecutionError';\n this.command = details.command;\n this.args = sanitizedArgs;\n this.exitCode = details.exitCode;\n this.stderr = truncatedStderr;\n this.durationMs = details.durationMs;\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CLIExecutionError);\n }\n }\n\n /**\n * Create a CLIExecutionError for command not found\n */\n static notFound(command: string): CLIExecutionError {\n return new CLIExecutionError(\n `CLI command not found: ${command}`,\n GasTownErrorCode.CLI_NOT_FOUND,\n { command }\n );\n }\n\n /**\n * Create a CLIExecutionError for timeout\n */\n static timeout(command: string, args: string[], timeoutMs: number): CLIExecutionError {\n return new CLIExecutionError(\n `CLI command timed out after ${timeoutMs}ms`,\n GasTownErrorCode.CLI_TIMEOUT,\n { command, args, durationMs: timeoutMs }\n );\n }\n\n /**\n * Create a CLIExecutionError for execution failure\n */\n static failed(\n command: string,\n args: string[],\n exitCode: number,\n stderr: string,\n durationMs?: number\n ): CLIExecutionError {\n return new CLIExecutionError(\n `CLI command failed with exit code ${exitCode}`,\n GasTownErrorCode.CLI_EXECUTION_FAILED,\n { command, args, exitCode, stderr, durationMs }\n );\n }\n\n /**\n * Create a CLIExecutionError for invalid output\n */\n static invalidOutput(command: string, reason: string): CLIExecutionError {\n return new CLIExecutionError(\n `CLI command produced invalid output: ${reason}`,\n GasTownErrorCode.CLI_INVALID_OUTPUT,\n { command }\n );\n }\n}\n\n// ============================================================================\n// Formula Error Class\n// ============================================================================\n\n/**\n * Error class for formula-related operations\n */\nexport class FormulaError extends GasTownError {\n /** Formula name if applicable */\n readonly formulaName?: string;\n\n /** Formula type if applicable */\n readonly formulaType?: string;\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.FORMULA_PARSE_FAILED,\n context?: Record<string, unknown>,\n cause?: Error\n ) {\n super(message, code, context, cause);\n this.name = 'FormulaError';\n\n if (context?.formulaName && typeof context.formulaName === 'string') {\n this.formulaName = context.formulaName;\n }\n if (context?.formulaType && typeof context.formulaType === 'string') {\n this.formulaType = context.formulaType;\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, FormulaError);\n }\n }\n\n /**\n * Create a FormulaError for not found\n */\n static notFound(formulaName: string): FormulaError {\n return new FormulaError(\n `Formula not found: ${formulaName}`,\n GasTownErrorCode.FORMULA_NOT_FOUND,\n { formulaName }\n );\n }\n\n /**\n * Create a FormulaError for parse failure\n */\n static parseFailed(formulaName: string, reason: string, cause?: Error): FormulaError {\n return new FormulaError(\n `Failed to parse formula ${formulaName}: ${reason}`,\n GasTownErrorCode.FORMULA_PARSE_FAILED,\n { formulaName, parseError: reason },\n cause\n );\n }\n\n /**\n * Create a FormulaError for cook failure\n */\n static cookFailed(formulaName: string, reason: string, cause?: Error): FormulaError {\n return new FormulaError(\n `Failed to cook formula ${formulaName}: ${reason}`,\n GasTownErrorCode.FORMULA_COOK_FAILED,\n { formulaName, cookError: reason },\n cause\n );\n }\n}\n\n// ============================================================================\n// Convoy Error Class\n// ============================================================================\n\n/**\n * Error class for convoy-related operations\n */\nexport class ConvoyError extends GasTownError {\n /** Convoy ID if applicable */\n readonly convoyId?: string;\n\n constructor(\n message: string,\n code: GasTownErrorCodeType = GasTownErrorCode.CONVOY_NOT_FOUND,\n context?: Record<string, unknown>,\n cause?: Error\n ) {\n super(message, code, context, cause);\n this.name = 'ConvoyError';\n\n if (context?.convoyId && typeof context.convoyId === 'string') {\n this.convoyId = context.convoyId;\n }\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ConvoyError);\n }\n }\n\n /**\n * Create a ConvoyError for not found\n */\n static notFound(convoyId: string): ConvoyError {\n return new ConvoyError(\n `Convoy not found: ${convoyId}`,\n GasTownErrorCode.CONVOY_NOT_FOUND,\n { convoyId }\n );\n }\n\n /**\n * Create a ConvoyError for create failure\n */\n static createFailed(reason: string, cause?: Error): ConvoyError {\n return new ConvoyError(\n `Failed to create convoy: ${reason}`,\n GasTownErrorCode.CONVOY_CREATE_FAILED,\n { operation: 'create' },\n cause\n );\n }\n}\n\n// ============================================================================\n// Error Utilities\n// ============================================================================\n\n/**\n * Type guard for GasTownError\n */\nexport function isGasTownError(error: unknown): error is GasTownError {\n return error instanceof GasTownError;\n}\n\n/**\n * Type guard for ValidationError\n */\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\n/**\n * Type guard for CLIExecutionError\n */\nexport function isCLIExecutionError(error: unknown): error is CLIExecutionError {\n return error instanceof CLIExecutionError;\n}\n\n/**\n * Type guard for BeadsError\n */\nexport function isBeadsError(error: unknown): error is BeadsError {\n return error instanceof BeadsError;\n}\n\n/**\n * Wrap an unknown error as a GasTownError\n */\nexport function wrapError(error: unknown, code?: GasTownErrorCodeType): GasTownError {\n if (error instanceof GasTownError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new GasTownError(\n error.message,\n code ?? GasTownErrorCode.UNKNOWN,\n undefined,\n error\n );\n }\n\n return new GasTownError(\n String(error),\n code ?? GasTownErrorCode.UNKNOWN\n );\n}\n\n/**\n * Extract error message safely\n */\nexport function getErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n}\n","/**\n * Object Pooling for Gas Town Bridge Plugin\n *\n * Provides high-performance object pooling to minimize GC pressure\n * and reduce memory allocations for frequently created objects.\n *\n * Target: 75% memory reduction, <10MB heap for 10k beads\n *\n * Pooled object types:\n * - Bead: Git-backed issue tracking objects\n * - Formula: TOML-defined workflow definitions\n * - Step: Individual workflow steps\n * - Convoy: Work-order tracking containers\n * - Molecule: Generated work units\n *\n * @module gastown-bridge/memory/pool\n */\n\nimport type {\n Bead,\n Formula,\n Step,\n Convoy,\n CookedFormula,\n FormulaType,\n BeadStatus,\n ConvoyStatus,\n} from '../types.js';\n\nimport type { Molecule } from '../formula/executor.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Poolable object interface - objects that can be reset and reused\n */\nexport interface Poolable {\n /** Reset object to initial state for reuse */\n reset?(): void;\n}\n\n/**\n * Pool statistics for monitoring\n */\nexport interface PoolStats {\n /** Total objects created (including pooled) */\n created: number;\n /** Objects currently in pool (available) */\n available: number;\n /** Objects currently in use */\n inUse: number;\n /** Number of times pool was empty on acquire */\n misses: number;\n /** Number of successful pool acquisitions */\n hits: number;\n /** Peak pool size reached */\n peakSize: number;\n /** Memory saved (estimated bytes) */\n memorySaved: number;\n}\n\n/**\n * Pool configuration\n */\nexport interface PoolConfig {\n /** Initial pool size */\n initialSize?: number;\n /** Maximum pool size (0 = unlimited) */\n maxSize?: number;\n /** Estimated object size in bytes (for memory tracking) */\n objectSizeBytes?: number;\n /** Whether to pre-warm the pool */\n preWarm?: boolean;\n}\n\n// ============================================================================\n// Generic Object Pool Implementation\n// ============================================================================\n\n/**\n * High-performance generic object pool\n *\n * Uses a simple array-based free list for O(1) acquire/release.\n * Supports both factory functions and prototype-based object creation.\n *\n * @example\n * ```typescript\n * const beadPool = new ObjectPool<PooledBead>({\n * factory: () => new PooledBead(),\n * reset: (bead) => bead.reset(),\n * initialSize: 100,\n * maxSize: 10000,\n * });\n *\n * const bead = beadPool.acquire();\n * // ... use bead ...\n * beadPool.release(bead);\n * ```\n */\nexport class ObjectPool<T extends object> {\n private pool: T[] = [];\n private factory: () => T;\n private resetFn?: (obj: T) => void;\n private config: Required<PoolConfig>;\n private stats: PoolStats = {\n created: 0,\n available: 0,\n inUse: 0,\n misses: 0,\n hits: 0,\n peakSize: 0,\n memorySaved: 0,\n };\n\n constructor(\n factory: () => T,\n options?: PoolConfig & { reset?: (obj: T) => void }\n ) {\n this.factory = factory;\n this.resetFn = options?.reset;\n this.config = {\n initialSize: options?.initialSize ?? 0,\n maxSize: options?.maxSize ?? 0,\n objectSizeBytes: options?.objectSizeBytes ?? 256,\n preWarm: options?.preWarm ?? false,\n };\n\n if (this.config.preWarm && this.config.initialSize > 0) {\n this.preWarm(this.config.initialSize);\n }\n }\n\n /**\n * Acquire an object from the pool\n *\n * Returns a pooled object if available, otherwise creates a new one.\n * O(1) operation using array pop.\n */\n acquire(): T {\n let obj: T;\n\n if (this.pool.length > 0) {\n obj = this.pool.pop()!;\n this.stats.hits++;\n this.stats.available--;\n } else {\n obj = this.factory();\n this.stats.created++;\n this.stats.misses++;\n }\n\n this.stats.inUse++;\n if (this.stats.inUse > this.stats.peakSize) {\n this.stats.peakSize = this.stats.inUse;\n }\n\n return obj;\n }\n\n /**\n * Release an object back to the pool\n *\n * Resets the object and returns it to the pool for reuse.\n * O(1) operation using array push.\n *\n * @param obj - Object to release\n */\n release(obj: T): void {\n // Reset the object\n if (this.resetFn) {\n this.resetFn(obj);\n } else if ('reset' in obj && typeof (obj as Poolable).reset === 'function') {\n (obj as Poolable).reset!();\n }\n\n // Check if pool is at max capacity\n if (this.config.maxSize > 0 && this.pool.length >= this.config.maxSize) {\n // Let GC handle it - pool is full\n this.stats.inUse--;\n return;\n }\n\n this.pool.push(obj);\n this.stats.available++;\n this.stats.inUse--;\n this.stats.memorySaved += this.config.objectSizeBytes;\n }\n\n /**\n * Release multiple objects at once (batch operation)\n */\n releaseAll(objects: T[]): void {\n for (const obj of objects) {\n this.release(obj);\n }\n }\n\n /**\n * Pre-warm the pool with objects\n */\n preWarm(count: number): void {\n const toCreate = Math.min(\n count,\n this.config.maxSize > 0 ? this.config.maxSize - this.pool.length : count\n );\n\n for (let i = 0; i < toCreate; i++) {\n const obj = this.factory();\n this.stats.created++;\n this.pool.push(obj);\n this.stats.available++;\n }\n }\n\n /**\n * Clear the pool and release all objects\n */\n clear(): void {\n this.pool.length = 0;\n this.stats.available = 0;\n }\n\n /**\n * Get pool statistics\n */\n getStats(): Readonly<PoolStats> {\n return { ...this.stats };\n }\n\n /**\n * Get current pool size\n */\n get size(): number {\n return this.pool.length;\n }\n\n /**\n * Get hit rate (percentage of successful pool acquisitions)\n */\n get hitRate(): number {\n const total = this.stats.hits + this.stats.misses;\n return total > 0 ? (this.stats.hits / total) * 100 : 0;\n }\n}\n\n// ============================================================================\n// Pooled Object Classes\n// ============================================================================\n\n/**\n * Pooled Bead object with reset capability\n */\nexport class PooledBead implements Bead, Poolable {\n id = '';\n title = '';\n description = '';\n status: BeadStatus = 'open';\n priority = 0;\n labels: string[] = [];\n createdAt: Date = new Date();\n updatedAt: Date = new Date();\n parentId?: string;\n assignee?: string;\n rig?: string;\n blockedBy?: string[];\n blocks?: string[];\n\n reset(): void {\n this.id = '';\n this.title = '';\n this.description = '';\n this.status = 'open';\n this.priority = 0;\n this.labels.length = 0;\n this.createdAt = new Date();\n this.updatedAt = new Date();\n this.parentId = undefined;\n this.assignee = undefined;\n this.rig = undefined;\n this.blockedBy = undefined;\n this.blocks = undefined;\n }\n\n /**\n * Initialize from a Bead-like object\n */\n initFrom(source: Partial<Bead>): this {\n this.id = source.id ?? '';\n this.title = source.title ?? '';\n this.description = source.description ?? '';\n this.status = source.status ?? 'open';\n this.priority = source.priority ?? 0;\n this.labels = source.labels ? [...source.labels] : [];\n this.createdAt = source.createdAt ?? new Date();\n this.updatedAt = source.updatedAt ?? new Date();\n this.parentId = source.parentId;\n this.assignee = source.assignee;\n this.rig = source.rig;\n this.blockedBy = source.blockedBy ? [...source.blockedBy] : undefined;\n this.blocks = source.blocks ? [...source.blocks] : undefined;\n return this;\n }\n}\n\n/**\n * Pooled Step object with reset capability\n */\nexport class PooledStep implements Step, Poolable {\n id = '';\n title = '';\n description = '';\n needs?: string[];\n duration?: number;\n requires?: string[];\n metadata?: Record<string, unknown>;\n\n reset(): void {\n this.id = '';\n this.title = '';\n this.description = '';\n this.needs = undefined;\n this.duration = undefined;\n this.requires = undefined;\n this.metadata = undefined;\n }\n\n initFrom(source: Partial<Step>): this {\n this.id = source.id ?? '';\n this.title = source.title ?? '';\n this.description = source.description ?? '';\n this.needs = source.needs ? [...source.needs] : undefined;\n this.duration = source.duration;\n this.requires = source.requires ? [...source.requires] : undefined;\n this.metadata = source.metadata ? { ...source.metadata } : undefined;\n return this;\n }\n}\n\n/**\n * Pooled Formula object with reset capability\n */\nexport class PooledFormula implements Formula, Poolable {\n name = '';\n description = '';\n type: FormulaType = 'workflow';\n version = 1;\n steps?: Step[];\n legs?: Formula['legs'];\n vars?: Formula['vars'];\n metadata?: Formula['metadata'];\n\n reset(): void {\n this.name = '';\n this.description = '';\n this.type = 'workflow';\n this.version = 1;\n this.steps = undefined;\n this.legs = undefined;\n this.vars = undefined;\n this.metadata = undefined;\n }\n\n initFrom(source: Partial<Formula>): this {\n this.name = source.name ?? '';\n this.description = source.description ?? '';\n this.type = source.type ?? 'workflow';\n this.version = source.version ?? 1;\n this.steps = source.steps ? [...source.steps] : undefined;\n this.legs = source.legs ? [...source.legs] : undefined;\n this.vars = source.vars ? { ...source.vars } : undefined;\n this.metadata = source.metadata ? { ...source.metadata } : undefined;\n return this;\n }\n}\n\n/**\n * Pooled Convoy object with reset capability\n */\nexport class PooledConvoy implements Convoy, Poolable {\n id = '';\n name = '';\n trackedIssues: string[] = [];\n status: ConvoyStatus = 'active';\n startedAt: Date = new Date();\n completedAt?: Date;\n progress = { total: 0, closed: 0, inProgress: 0, blocked: 0 };\n formula?: string;\n description?: string;\n\n reset(): void {\n this.id = '';\n this.name = '';\n this.trackedIssues.length = 0;\n this.status = 'active';\n this.startedAt = new Date();\n this.completedAt = undefined;\n this.progress = { total: 0, closed: 0, inProgress: 0, blocked: 0 };\n this.formula = undefined;\n this.description = undefined;\n }\n\n initFrom(source: Partial<Convoy>): this {\n this.id = source.id ?? '';\n this.name = source.name ?? '';\n this.trackedIssues = source.trackedIssues ? [...source.trackedIssues] : [];\n this.status = source.status ?? 'active';\n this.startedAt = source.startedAt ?? new Date();\n this.completedAt = source.completedAt;\n this.progress = source.progress ? { ...source.progress } : { total: 0, closed: 0, inProgress: 0, blocked: 0 };\n this.formula = source.formula;\n this.description = source.description;\n return this;\n }\n}\n\n/**\n * Pooled Molecule object with reset capability\n */\nexport class PooledMolecule implements Molecule, Poolable {\n id = '';\n formulaName = '';\n title = '';\n description = '';\n type: FormulaType = 'workflow';\n sourceId = '';\n agent?: string;\n dependencies: string[] = [];\n order = 0;\n metadata: Record<string, unknown> = {};\n createdAt: Date = new Date();\n\n reset(): void {\n this.id = '';\n this.formulaName = '';\n this.title = '';\n this.description = '';\n this.type = 'workflow';\n this.sourceId = '';\n this.agent = undefined;\n this.dependencies.length = 0;\n this.order = 0;\n // Clear metadata object by resetting to empty object\n for (const key of Object.keys(this.metadata)) {\n delete this.metadata[key];\n }\n this.createdAt = new Date();\n }\n\n initFrom(source: Partial<Molecule>): this {\n this.id = source.id ?? '';\n this.formulaName = source.formulaName ?? '';\n this.title = source.title ?? '';\n this.description = source.description ?? '';\n this.type = source.type ?? 'workflow';\n this.sourceId = source.sourceId ?? '';\n this.agent = source.agent;\n this.dependencies = source.dependencies ? [...source.dependencies] : [];\n this.order = source.order ?? 0;\n this.metadata = source.metadata ? { ...source.metadata } : {};\n this.createdAt = source.createdAt ?? new Date();\n return this;\n }\n}\n\n// ============================================================================\n// Pre-configured Pool Instances\n// ============================================================================\n\n/**\n * Global Bead pool - optimized for 10k beads target\n * Estimated size per bead: ~512 bytes\n */\nexport const beadPool = new ObjectPool<PooledBead>(\n () => new PooledBead(),\n {\n initialSize: 100,\n maxSize: 10000,\n objectSizeBytes: 512,\n preWarm: false, // Lazy initialization\n }\n);\n\n/**\n * Global Formula pool\n * Estimated size per formula: ~1KB\n */\nexport const formulaPool = new ObjectPool<PooledFormula>(\n () => new PooledFormula(),\n {\n initialSize: 10,\n maxSize: 500,\n objectSizeBytes: 1024,\n preWarm: false,\n }\n);\n\n/**\n * Global Step pool\n * Estimated size per step: ~256 bytes\n */\nexport const stepPool = new ObjectPool<PooledStep>(\n () => new PooledStep(),\n {\n initialSize: 50,\n maxSize: 5000,\n objectSizeBytes: 256,\n preWarm: false,\n }\n);\n\n/**\n * Global Convoy pool\n * Estimated size per convoy: ~768 bytes\n */\nexport const convoyPool = new ObjectPool<PooledConvoy>(\n () => new PooledConvoy(),\n {\n initialSize: 10,\n maxSize: 200,\n objectSizeBytes: 768,\n preWarm: false,\n }\n);\n\n/**\n * Global Molecule pool\n * Estimated size per molecule: ~384 bytes\n */\nexport const moleculePool = new ObjectPool<PooledMolecule>(\n () => new PooledMolecule(),\n {\n initialSize: 50,\n maxSize: 5000,\n objectSizeBytes: 384,\n preWarm: false,\n }\n);\n\n// ============================================================================\n// Pool Management\n// ============================================================================\n\n/**\n * All managed pools\n */\nconst allPools = {\n bead: beadPool,\n formula: formulaPool,\n step: stepPool,\n convoy: convoyPool,\n molecule: moleculePool,\n} as const;\n\nexport type PoolType = keyof typeof allPools;\n\n/**\n * Get statistics for all pools\n */\nexport function getAllPoolStats(): Record<PoolType, PoolStats> {\n return {\n bead: beadPool.getStats(),\n formula: formulaPool.getStats(),\n step: stepPool.getStats(),\n convoy: convoyPool.getStats(),\n molecule: moleculePool.getStats(),\n };\n}\n\n/**\n * Get total memory saved across all pools\n */\nexport function getTotalMemorySaved(): number {\n return Object.values(allPools).reduce(\n (total, pool) => total + pool.getStats().memorySaved,\n 0\n );\n}\n\n/**\n * Clear all pools\n */\nexport function clearAllPools(): void {\n for (const pool of Object.values(allPools)) {\n pool.clear();\n }\n}\n\n/**\n * Pre-warm all pools with default sizes\n */\nexport function preWarmAllPools(): void {\n beadPool.preWarm(100);\n formulaPool.preWarm(10);\n stepPool.preWarm(50);\n convoyPool.preWarm(10);\n moleculePool.preWarm(50);\n}\n\n/**\n * Get a summary of pool efficiency\n */\nexport function getPoolEfficiencySummary(): {\n totalHitRate: number;\n totalMemorySavedKB: number;\n totalObjectsInUse: number;\n totalObjectsAvailable: number;\n} {\n const stats = getAllPoolStats();\n const poolEntries = Object.values(stats);\n\n const totalHits = poolEntries.reduce((sum, s) => sum + s.hits, 0);\n const totalMisses = poolEntries.reduce((sum, s) => sum + s.misses, 0);\n const totalMemory = poolEntries.reduce((sum, s) => sum + s.memorySaved, 0);\n const totalInUse = poolEntries.reduce((sum, s) => sum + s.inUse, 0);\n const totalAvailable = poolEntries.reduce((sum, s) => sum + s.available, 0);\n\n return {\n totalHitRate: totalHits + totalMisses > 0\n ? (totalHits / (totalHits + totalMisses)) * 100\n : 0,\n totalMemorySavedKB: totalMemory / 1024,\n totalObjectsInUse: totalInUse,\n totalObjectsAvailable: totalAvailable,\n };\n}\n\nexport default ObjectPool;\n","/**\n * Arena Allocator for Gas Town Bridge Plugin\n *\n * Provides bulk memory allocation with single-operation deallocation.\n * Ideal for batch operations where many objects are created and then\n * discarded together (e.g., convoy graph operations, formula parsing).\n *\n * Benefits:\n * - O(1) reset/clear operation\n * - Reduced GC pressure for batch operations\n * - Better memory locality\n * - Predictable memory usage\n *\n * @module gastown-bridge/memory/arena\n */\n\nimport {\n ObjectPool,\n type PoolStats,\n PooledBead,\n PooledStep,\n PooledFormula,\n PooledConvoy,\n PooledMolecule,\n} from './pool.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Arena statistics\n */\nexport interface ArenaStats {\n /** Total allocations since creation */\n totalAllocations: number;\n /** Current allocations (not yet reset) */\n currentAllocations: number;\n /** Number of reset operations */\n resetCount: number;\n /** Peak allocations before reset */\n peakAllocations: number;\n /** Estimated memory in use (bytes) */\n memoryUsed: number;\n /** Total memory saved via bulk reset (bytes) */\n memorySaved: number;\n}\n\n/**\n * Arena configuration\n */\nexport interface ArenaConfig {\n /** Name for debugging */\n name?: string;\n /** Initial capacity hint */\n initialCapacity?: number;\n /** Maximum allocations before forced reset */\n maxAllocations?: number;\n /** Enable automatic pool return on reset */\n returnToPool?: boolean;\n}\n\n/**\n * Tracked allocation with type info\n */\ninterface TrackedAllocation<T> {\n object: T;\n type: string;\n sizeBytes: number;\n}\n\n// ============================================================================\n// Arena Implementation\n// ============================================================================\n\n/**\n * Arena Allocator\n *\n * Manages bulk allocations that are reset together. Uses underlying\n * object pools when available for maximum efficiency.\n *\n * @example\n * ```typescript\n * const arena = new Arena('convoy-analysis');\n *\n * // Allocate objects for batch operation\n * const beads = arena.allocateMany('bead', 100);\n * const steps = arena.allocateMany('step', 50);\n *\n * // Process...\n *\n * // Single O(1) reset clears everything\n * arena.reset();\n * ```\n */\nexport class Arena {\n private name: string;\n private config: Required<ArenaConfig>;\n private allocations: TrackedAllocation<unknown>[] = [];\n private stats: ArenaStats = {\n totalAllocations: 0,\n currentAllocations: 0,\n resetCount: 0,\n peakAllocations: 0,\n memoryUsed: 0,\n memorySaved: 0,\n };\n\n // Type-specific pools for arena allocations\n private beadPool: ObjectPool<PooledBead>;\n private stepPool: ObjectPool<PooledStep>;\n private formulaPool: ObjectPool<PooledFormula>;\n private convoyPool: ObjectPool<PooledConvoy>;\n private moleculePool: ObjectPool<PooledMolecule>;\n\n constructor(name?: string, config?: ArenaConfig) {\n this.name = name ?? config?.name ?? 'arena';\n this.config = {\n name: this.name,\n initialCapacity: config?.initialCapacity ?? 100,\n maxAllocations: config?.maxAllocations ?? 0,\n returnToPool: config?.returnToPool ?? true,\n };\n\n // Create arena-specific pools (separate from global pools)\n this.beadPool = new ObjectPool(() => new PooledBead(), {\n initialSize: 0,\n maxSize: 10000,\n objectSizeBytes: 512,\n });\n\n this.stepPool = new ObjectPool(() => new PooledStep(), {\n initialSize: 0,\n maxSize: 5000,\n objectSizeBytes: 256,\n });\n\n this.formulaPool = new ObjectPool(() => new PooledFormula(), {\n initialSize: 0,\n maxSize: 500,\n objectSizeBytes: 1024,\n });\n\n this.convoyPool = new ObjectPool(() => new PooledConvoy(), {\n initialSize: 0,\n maxSize: 200,\n objectSizeBytes: 768,\n });\n\n this.moleculePool = new ObjectPool(() => new PooledMolecule(), {\n initialSize: 0,\n maxSize: 5000,\n objectSizeBytes: 384,\n });\n\n // Pre-allocate array capacity\n if (this.config.initialCapacity > 0) {\n this.allocations = new Array(this.config.initialCapacity);\n this.allocations.length = 0;\n }\n }\n\n /**\n * Allocate an object from the arena\n *\n * Uses pooled objects when available for the given type.\n */\n allocate<T>(factory: () => T, sizeBytes = 256): T {\n this.checkMaxAllocations();\n\n const obj = factory();\n this.trackAllocation(obj, 'generic', sizeBytes);\n return obj;\n }\n\n /**\n * Allocate a typed object from the arena pools\n */\n allocateTyped<K extends AllocatableType>(type: K): TypeMap[K] {\n this.checkMaxAllocations();\n\n let obj: TypeMap[K];\n let sizeBytes: number;\n\n switch (type) {\n case 'bead':\n obj = this.beadPool.acquire() as TypeMap[K];\n sizeBytes = 512;\n break;\n case 'step':\n obj = this.stepPool.acquire() as TypeMap[K];\n sizeBytes = 256;\n break;\n case 'formula':\n obj = this.formulaPool.acquire() as TypeMap[K];\n sizeBytes = 1024;\n break;\n case 'convoy':\n obj = this.convoyPool.acquire() as TypeMap[K];\n sizeBytes = 768;\n break;\n case 'molecule':\n obj = this.moleculePool.acquire() as TypeMap[K];\n sizeBytes = 384;\n break;\n default:\n throw new Error(`Unknown allocatable type: ${type}`);\n }\n\n this.trackAllocation(obj, type, sizeBytes);\n return obj;\n }\n\n /**\n * Allocate multiple typed objects\n */\n allocateMany<K extends AllocatableType>(type: K, count: number): TypeMap[K][] {\n const results: TypeMap[K][] = new Array(count);\n for (let i = 0; i < count; i++) {\n results[i] = this.allocateTyped(type);\n }\n return results;\n }\n\n /**\n * Reset the arena, returning all objects to their pools\n *\n * This is an O(n) operation where n is the number of allocations,\n * but it's a single operation instead of n individual deallocations.\n */\n reset(): void {\n if (this.config.returnToPool) {\n // Return objects to their respective pools\n for (const allocation of this.allocations) {\n this.returnToPool(allocation);\n }\n }\n\n // Track stats before reset\n const memoryFreed = this.stats.memoryUsed;\n this.stats.memorySaved += memoryFreed;\n this.stats.resetCount++;\n\n if (this.stats.currentAllocations > this.stats.peakAllocations) {\n this.stats.peakAllocations = this.stats.currentAllocations;\n }\n\n // Clear allocations array (reuse the array itself)\n this.allocations.length = 0;\n this.stats.currentAllocations = 0;\n this.stats.memoryUsed = 0;\n }\n\n /**\n * Get arena statistics\n */\n getStats(): Readonly<ArenaStats> {\n return { ...this.stats };\n }\n\n /**\n * Get current allocation count\n */\n get allocationCount(): number {\n return this.stats.currentAllocations;\n }\n\n /**\n * Get arena name\n */\n get arenaName(): string {\n return this.name;\n }\n\n /**\n * Dispose the arena and all its resources\n */\n dispose(): void {\n this.reset();\n this.beadPool.clear();\n this.stepPool.clear();\n this.formulaPool.clear();\n this.convoyPool.clear();\n this.moleculePool.clear();\n }\n\n // =========================================================================\n // Private Methods\n // =========================================================================\n\n private trackAllocation<T>(obj: T, type: string, sizeBytes: number): void {\n this.allocations.push({ object: obj, type, sizeBytes });\n this.stats.totalAllocations++;\n this.stats.currentAllocations++;\n this.stats.memoryUsed += sizeBytes;\n }\n\n private checkMaxAllocations(): void {\n if (\n this.config.maxAllocations > 0 &&\n this.stats.currentAllocations >= this.config.maxAllocations\n ) {\n // Auto-reset when limit reached\n console.warn(`[${this.name}] Max allocations reached, auto-resetting`);\n this.reset();\n }\n }\n\n private returnToPool(allocation: TrackedAllocation<unknown>): void {\n switch (allocation.type) {\n case 'bead':\n this.beadPool.release(allocation.object as PooledBead);\n break;\n case 'step':\n this.stepPool.release(allocation.object as PooledStep);\n break;\n case 'formula':\n this.formulaPool.release(allocation.object as PooledFormula);\n break;\n case 'convoy':\n this.convoyPool.release(allocation.object as PooledConvoy);\n break;\n case 'molecule':\n this.moleculePool.release(allocation.object as PooledMolecule);\n break;\n // Generic objects are not pooled\n }\n }\n}\n\n// ============================================================================\n// Type Mapping\n// ============================================================================\n\n/**\n * Allocatable type names\n */\nexport type AllocatableType = 'bead' | 'step' | 'formula' | 'convoy' | 'molecule';\n\n/**\n * Type map for allocatable types\n */\nexport interface TypeMap {\n bead: PooledBead;\n step: PooledStep;\n formula: PooledFormula;\n convoy: PooledConvoy;\n molecule: PooledMolecule;\n}\n\n// ============================================================================\n// Scoped Arena\n// ============================================================================\n\n/**\n * Scoped arena that auto-resets when disposed\n *\n * Useful for RAII-style memory management with try/finally patterns.\n *\n * @example\n * ```typescript\n * using arena = scopedArena('batch-operation');\n * const beads = arena.allocateMany('bead', 100);\n * // ... process beads ...\n * // Arena automatically resets when scope exits\n * ```\n */\nexport function scopedArena(name: string, config?: ArenaConfig): Arena & Disposable {\n const arena = new Arena(name, config);\n return Object.assign(arena, {\n [Symbol.dispose](): void {\n arena.reset();\n },\n });\n}\n\n/**\n * Execute a function with a scoped arena\n *\n * The arena is automatically reset after the function completes.\n */\nexport async function withArena<T>(\n name: string,\n fn: (arena: Arena) => T | Promise<T>,\n config?: ArenaConfig\n): Promise<T> {\n const arena = new Arena(name, config);\n try {\n return await fn(arena);\n } finally {\n arena.reset();\n }\n}\n\n/**\n * Synchronous version of withArena\n */\nexport function withArenaSync<T>(\n name: string,\n fn: (arena: Arena) => T,\n config?: ArenaConfig\n): T {\n const arena = new Arena(name, config);\n try {\n return fn(arena);\n } finally {\n arena.reset();\n }\n}\n\n// ============================================================================\n// Arena Pool Manager\n// ============================================================================\n\n/**\n * Manages multiple arenas for different operation types\n */\nexport class ArenaManager {\n private arenas: Map<string, Arena> = new Map();\n private stats = {\n totalArenas: 0,\n activeArenas: 0,\n totalMemorySaved: 0,\n };\n\n /**\n * Get or create an arena by name\n */\n getArena(name: string, config?: ArenaConfig): Arena {\n let arena = this.arenas.get(name);\n if (!arena) {\n arena = new Arena(name, config);\n this.arenas.set(name, arena);\n this.stats.totalArenas++;\n this.stats.activeArenas++;\n }\n return arena;\n }\n\n /**\n * Reset a specific arena\n */\n resetArena(name: string): void {\n const arena = this.arenas.get(name);\n if (arena) {\n const saved = arena.getStats().memoryUsed;\n arena.reset();\n this.stats.totalMemorySaved += saved;\n }\n }\n\n /**\n * Reset all arenas\n */\n resetAll(): void {\n for (const arena of this.arenas.values()) {\n const saved = arena.getStats().memoryUsed;\n arena.reset();\n this.stats.totalMemorySaved += saved;\n }\n }\n\n /**\n * Dispose an arena\n */\n disposeArena(name: string): void {\n const arena = this.arenas.get(name);\n if (arena) {\n arena.dispose();\n this.arenas.delete(name);\n this.stats.activeArenas--;\n }\n }\n\n /**\n * Dispose all arenas\n */\n disposeAll(): void {\n for (const arena of this.arenas.values()) {\n arena.dispose();\n }\n this.arenas.clear();\n this.stats.activeArenas = 0;\n }\n\n /**\n * Get manager statistics\n */\n getStats(): typeof this.stats & { arenaStats: Record<string, ArenaStats> } {\n const arenaStats: Record<string, ArenaStats> = {};\n for (const [name, arena] of this.arenas) {\n arenaStats[name] = arena.getStats();\n }\n return { ...this.stats, arenaStats };\n }\n}\n\n/**\n * Global arena manager instance\n */\nexport const arenaManager = new ArenaManager();\n\nexport default Arena;\n","/**\n * Memory Monitoring for Gas Town Bridge Plugin\n *\n * Provides comprehensive memory monitoring, limits, and pressure callbacks.\n * Integrates with object pools and arena allocators to track memory usage.\n *\n * Target: <10MB heap for 10k beads\n *\n * Features:\n * - Real-time memory usage tracking\n * - Configurable memory limits\n * - Memory pressure callbacks\n * - Automatic cleanup triggers\n * - Integration with V8 GC hooks (when available)\n *\n * @module gastown-bridge/memory/monitor\n */\n\nimport { EventEmitter } from 'events';\nimport {\n getAllPoolStats,\n getPoolEfficiencySummary,\n clearAllPools,\n type PoolStats,\n} from './pool.js';\nimport { arenaManager } from './arena.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Memory statistics snapshot\n */\nexport interface MemoryStats {\n /** Heap memory used (bytes) */\n heapUsed: number;\n /** Heap memory total (bytes) */\n heapTotal: number;\n /** External memory (bytes) */\n external: number;\n /** Array buffers memory (bytes) */\n arrayBuffers: number;\n /** RSS (Resident Set Size) in bytes */\n rss: number;\n /** Pool memory stats */\n pools: {\n totalMemorySaved: number;\n hitRate: number;\n objectsInUse: number;\n objectsAvailable: number;\n };\n /** Arena memory stats */\n arenas: {\n activeArenas: number;\n totalMemoryUsed: number;\n totalMemorySaved: number;\n };\n /** Timestamp of snapshot */\n timestamp: Date;\n /** Whether under memory pressure */\n underPressure: boolean;\n}\n\n/**\n * Memory pressure levels\n */\nexport type MemoryPressureLevel = 'none' | 'low' | 'medium' | 'high' | 'critical';\n\n/**\n * Memory pressure callback\n */\nexport type MemoryPressureCallback = (\n level: MemoryPressureLevel,\n stats: MemoryStats\n) => void;\n\n/**\n * Memory monitor configuration\n */\nexport interface MemoryMonitorConfig {\n /** Memory limit in bytes (0 = no limit) */\n memoryLimit?: number;\n /** Low pressure threshold (0-1 of limit) */\n lowPressureThreshold?: number;\n /** Medium pressure threshold (0-1 of limit) */\n mediumPressureThreshold?: number;\n /** High pressure threshold (0-1 of limit) */\n highPressureThreshold?: number;\n /** Critical pressure threshold (0-1 of limit) */\n criticalPressureThreshold?: number;\n /** Polling interval in ms (0 = manual only) */\n pollInterval?: number;\n /** Enable automatic cleanup on pressure */\n autoCleanup?: boolean;\n /** Enable GC hints when available */\n gcHints?: boolean;\n}\n\n/**\n * Memory monitor events\n */\nexport interface MemoryMonitorEvents {\n 'pressure:none': (stats: MemoryStats) => void;\n 'pressure:low': (stats: MemoryStats) => void;\n 'pressure:medium': (stats: MemoryStats) => void;\n 'pressure:high': (stats: MemoryStats) => void;\n 'pressure:critical': (stats: MemoryStats) => void;\n 'limit:exceeded': (stats: MemoryStats) => void;\n 'cleanup:triggered': (beforeStats: MemoryStats, afterStats: MemoryStats) => void;\n 'snapshot': (stats: MemoryStats) => void;\n}\n\n// ============================================================================\n// Memory Monitor Implementation\n// ============================================================================\n\n/**\n * Memory Monitor\n *\n * Tracks memory usage and triggers pressure callbacks when thresholds\n * are exceeded. Integrates with object pools and arenas.\n *\n * @example\n * ```typescript\n * const monitor = new MemoryMonitor({\n * memoryLimit: 10 * 1024 * 1024, // 10MB\n * pollInterval: 1000,\n * autoCleanup: true,\n * });\n *\n * monitor.onMemoryPressure((level, stats) => {\n * console.log(`Memory pressure: ${level}`, stats);\n * });\n *\n * monitor.start();\n * ```\n */\nexport class MemoryMonitor extends EventEmitter {\n private config: Required<MemoryMonitorConfig>;\n private pollTimer?: ReturnType<typeof setInterval>;\n private pressureCallbacks: MemoryPressureCallback[] = [];\n private lastPressureLevel: MemoryPressureLevel = 'none';\n private running = false;\n\n // Historical stats for trend analysis\n private statsHistory: MemoryStats[] = [];\n private maxHistorySize = 60; // 1 minute at 1s intervals\n\n constructor(config?: MemoryMonitorConfig) {\n super();\n this.config = {\n memoryLimit: config?.memoryLimit ?? 0,\n lowPressureThreshold: config?.lowPressureThreshold ?? 0.5,\n mediumPressureThreshold: config?.mediumPressureThreshold ?? 0.7,\n highPressureThreshold: config?.highPressureThreshold ?? 0.85,\n criticalPressureThreshold: config?.criticalPressureThreshold ?? 0.95,\n pollInterval: config?.pollInterval ?? 0,\n autoCleanup: config?.autoCleanup ?? false,\n gcHints: config?.gcHints ?? true,\n };\n }\n\n /**\n * Get current memory usage statistics\n */\n getMemoryUsage(): MemoryStats {\n const memUsage = process.memoryUsage();\n const poolSummary = getPoolEfficiencySummary();\n const arenaStats = arenaManager.getStats();\n\n // Calculate arena memory\n let arenaMemory = 0;\n for (const stats of Object.values(arenaStats.arenaStats)) {\n arenaMemory += stats.memoryUsed;\n }\n\n const stats: MemoryStats = {\n heapUsed: memUsage.heapUsed,\n heapTotal: memUsage.heapTotal,\n external: memUsage.external,\n arrayBuffers: memUsage.arrayBuffers,\n rss: memUsage.rss,\n pools: {\n totalMemorySaved: poolSummary.totalMemorySavedKB * 1024,\n hitRate: poolSummary.totalHitRate,\n objectsInUse: poolSummary.totalObjectsInUse,\n objectsAvailable: poolSummary.totalObjectsAvailable,\n },\n arenas: {\n activeArenas: arenaStats.activeArenas,\n totalMemoryUsed: arenaMemory,\n totalMemorySaved: arenaStats.totalMemorySaved,\n },\n timestamp: new Date(),\n underPressure: this.lastPressureLevel !== 'none',\n };\n\n return stats;\n }\n\n /**\n * Set memory limit\n */\n setMemoryLimit(bytes: number): void {\n this.config.memoryLimit = bytes;\n }\n\n /**\n * Get current memory limit\n */\n getMemoryLimit(): number {\n return this.config.memoryLimit;\n }\n\n /**\n * Register a memory pressure callback\n */\n onMemoryPressure(callback: MemoryPressureCallback): () => void {\n this.pressureCallbacks.push(callback);\n return () => {\n const index = this.pressureCallbacks.indexOf(callback);\n if (index !== -1) {\n this.pressureCallbacks.splice(index, 1);\n }\n };\n }\n\n /**\n * Check current pressure level\n */\n checkPressure(): MemoryPressureLevel {\n if (this.config.memoryLimit === 0) {\n return 'none';\n }\n\n const stats = this.getMemoryUsage();\n const usage = stats.heapUsed / this.config.memoryLimit;\n\n if (usage >= this.config.criticalPressureThreshold) {\n return 'critical';\n }\n if (usage >= this.config.highPressureThreshold) {\n return 'high';\n }\n if (usage >= this.config.mediumPressureThreshold) {\n return 'medium';\n }\n if (usage >= this.config.lowPressureThreshold) {\n return 'low';\n }\n return 'none';\n }\n\n /**\n * Start monitoring\n */\n start(): void {\n if (this.running) return;\n this.running = true;\n\n if (this.config.pollInterval > 0) {\n this.pollTimer = setInterval(() => {\n this.poll();\n }, this.config.pollInterval);\n }\n }\n\n /**\n * Stop monitoring\n */\n stop(): void {\n this.running = false;\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = undefined;\n }\n }\n\n /**\n * Manual poll (also called automatically if pollInterval > 0)\n */\n poll(): void {\n const stats = this.getMemoryUsage();\n const level = this.checkPressure();\n\n // Add to history\n this.statsHistory.push(stats);\n if (this.statsHistory.length > this.maxHistorySize) {\n this.statsHistory.shift();\n }\n\n // Emit snapshot event\n this.emit('snapshot', stats);\n\n // Check for pressure level changes\n if (level !== this.lastPressureLevel) {\n this.lastPressureLevel = level;\n stats.underPressure = level !== 'none';\n\n // Emit pressure event\n this.emit(`pressure:${level}`, stats);\n\n // Call callbacks\n for (const callback of this.pressureCallbacks) {\n try {\n callback(level, stats);\n } catch (error) {\n console.error('[MemoryMonitor] Pressure callback error:', error);\n }\n }\n\n // Auto cleanup on high/critical pressure\n if (this.config.autoCleanup && (level === 'high' || level === 'critical')) {\n this.triggerCleanup();\n }\n }\n\n // Check if limit exceeded\n if (this.config.memoryLimit > 0 && stats.heapUsed > this.config.memoryLimit) {\n this.emit('limit:exceeded', stats);\n }\n }\n\n /**\n * Trigger memory cleanup\n */\n triggerCleanup(): void {\n const beforeStats = this.getMemoryUsage();\n\n // Clear object pools\n clearAllPools();\n\n // Reset all arenas\n arenaManager.resetAll();\n\n // Request GC if available and hints enabled\n if (this.config.gcHints && typeof global.gc === 'function') {\n global.gc();\n }\n\n const afterStats = this.getMemoryUsage();\n this.emit('cleanup:triggered', beforeStats, afterStats);\n }\n\n /**\n * Get memory trend (bytes/second)\n */\n getMemoryTrend(): number {\n if (this.statsHistory.length < 2) {\n return 0;\n }\n\n const oldest = this.statsHistory[0];\n const newest = this.statsHistory[this.statsHistory.length - 1];\n const timeDiff = newest.timestamp.getTime() - oldest.timestamp.getTime();\n\n if (timeDiff === 0) return 0;\n\n const memoryDiff = newest.heapUsed - oldest.heapUsed;\n return (memoryDiff / timeDiff) * 1000; // bytes per second\n }\n\n /**\n * Estimate time until limit reached (ms)\n */\n estimateTimeToLimit(): number | null {\n if (this.config.memoryLimit === 0) {\n return null;\n }\n\n const trend = this.getMemoryTrend();\n if (trend <= 0) {\n return null; // Memory is stable or decreasing\n }\n\n const stats = this.getMemoryUsage();\n const remaining = this.config.memoryLimit - stats.heapUsed;\n return (remaining / trend) * 1000;\n }\n\n /**\n * Get pool-specific statistics\n */\n getPoolStats(): Record<string, PoolStats> {\n return getAllPoolStats();\n }\n\n /**\n * Get historical stats\n */\n getHistory(): MemoryStats[] {\n return [...this.statsHistory];\n }\n\n /**\n * Clear historical stats\n */\n clearHistory(): void {\n this.statsHistory.length = 0;\n }\n\n /**\n * Check if running\n */\n isRunning(): boolean {\n return this.running;\n }\n\n /**\n * Get configuration\n */\n getConfig(): Readonly<Required<MemoryMonitorConfig>> {\n return { ...this.config };\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<MemoryMonitorConfig>): void {\n Object.assign(this.config, config);\n\n // Restart polling if interval changed\n if (config.pollInterval !== undefined && this.running) {\n this.stop();\n this.start();\n }\n }\n}\n\n// ============================================================================\n// Convenience Functions\n// ============================================================================\n\n/**\n * Get current memory usage (simple API)\n */\nexport function getMemoryUsage(): MemoryStats {\n const monitor = new MemoryMonitor();\n return monitor.getMemoryUsage();\n}\n\n/**\n * Set a memory limit and callback (simple API)\n */\nexport function setMemoryLimit(\n bytes: number,\n onPressure?: MemoryPressureCallback\n): MemoryMonitor {\n const monitor = new MemoryMonitor({\n memoryLimit: bytes,\n pollInterval: 1000,\n autoCleanup: true,\n });\n\n if (onPressure) {\n monitor.onMemoryPressure(onPressure);\n }\n\n monitor.start();\n return monitor;\n}\n\n/**\n * Simple pressure callback registration (uses default monitor)\n */\nlet defaultMonitor: MemoryMonitor | null = null;\n\nexport function onMemoryPressure(callback: MemoryPressureCallback): () => void {\n if (!defaultMonitor) {\n defaultMonitor = new MemoryMonitor({\n memoryLimit: 10 * 1024 * 1024, // 10MB default\n pollInterval: 1000,\n autoCleanup: true,\n });\n defaultMonitor.start();\n }\n\n return defaultMonitor.onMemoryPressure(callback);\n}\n\n/**\n * Get the default monitor instance\n */\nexport function getDefaultMonitor(): MemoryMonitor | null {\n return defaultMonitor;\n}\n\n/**\n * Stop and dispose the default monitor\n */\nexport function disposeDefaultMonitor(): void {\n if (defaultMonitor) {\n defaultMonitor.stop();\n defaultMonitor = null;\n }\n}\n\n// ============================================================================\n// Memory Budget\n// ============================================================================\n\n/**\n * Memory budget for component-level tracking\n */\nexport interface MemoryBudget {\n name: string;\n allocated: number;\n used: number;\n limit: number;\n}\n\n/**\n * Memory budget manager\n */\nexport class MemoryBudgetManager {\n private budgets: Map<string, MemoryBudget> = new Map();\n private totalLimit: number;\n\n constructor(totalLimit: number = 10 * 1024 * 1024) {\n this.totalLimit = totalLimit;\n }\n\n /**\n * Allocate a budget for a component\n */\n allocateBudget(name: string, limit: number): boolean {\n const currentTotal = this.getTotalAllocated();\n if (currentTotal + limit > this.totalLimit) {\n return false;\n }\n\n this.budgets.set(name, {\n name,\n allocated: limit,\n used: 0,\n limit,\n });\n return true;\n }\n\n /**\n * Update usage for a budget\n */\n updateUsage(name: string, used: number): void {\n const budget = this.budgets.get(name);\n if (budget) {\n budget.used = used;\n }\n }\n\n /**\n * Check if a budget is exceeded\n */\n isExceeded(name: string): boolean {\n const budget = this.budgets.get(name);\n return budget ? budget.used > budget.limit : false;\n }\n\n /**\n * Get budget for a component\n */\n getBudget(name: string): MemoryBudget | undefined {\n return this.budgets.get(name);\n }\n\n /**\n * Get all budgets\n */\n getAllBudgets(): MemoryBudget[] {\n return Array.from(this.budgets.values());\n }\n\n /**\n * Get total allocated budget\n */\n getTotalAllocated(): number {\n return Array.from(this.budgets.values()).reduce((sum, b) => sum + b.allocated, 0);\n }\n\n /**\n * Get total used\n */\n getTotalUsed(): number {\n return Array.from(this.budgets.values()).reduce((sum, b) => sum + b.used, 0);\n }\n\n /**\n * Free a budget\n */\n freeBudget(name: string): void {\n this.budgets.delete(name);\n }\n\n /**\n * Get total limit\n */\n getTotalLimit(): number {\n return this.totalLimit;\n }\n\n /**\n * Set total limit\n */\n setTotalLimit(limit: number): void {\n this.totalLimit = limit;\n }\n}\n\n/**\n * Global memory budget manager for 10MB target\n */\nexport const memoryBudget = new MemoryBudgetManager(10 * 1024 * 1024);\n\n// Pre-allocate budgets for major components\nmemoryBudget.allocateBudget('beads', 5 * 1024 * 1024); // 5MB for beads\nmemoryBudget.allocateBudget('formulas', 1 * 1024 * 1024); // 1MB for formulas\nmemoryBudget.allocateBudget('convoys', 1 * 1024 * 1024); // 1MB for convoys\nmemoryBudget.allocateBudget('wasm', 2 * 1024 * 1024); // 2MB for WASM\nmemoryBudget.allocateBudget('misc', 1 * 1024 * 1024); // 1MB for misc\n\nexport default MemoryMonitor;\n","/**\n * Lazy Loading Utilities for Gas Town Bridge Plugin\n *\n * Provides lazy initialization patterns to defer resource loading\n * until first use, reducing initial memory footprint and startup time.\n *\n * Features:\n * - Lazy WASM module loading\n * - Deferred convoy observer initialization\n * - Lazy bridge initialization\n * - Resource cleanup on idle\n *\n * @module gastown-bridge/memory/lazy\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Lazy value state\n */\nexport type LazyState = 'uninitialized' | 'initializing' | 'initialized' | 'error' | 'disposed';\n\n/**\n * Lazy initialization options\n */\nexport interface LazyOptions<T> {\n /** Factory function to create the value */\n factory: () => T | Promise<T>;\n /** Optional cleanup function */\n cleanup?: (value: T) => void | Promise<void>;\n /** Auto-dispose after idle time (ms, 0 = never) */\n idleTimeout?: number;\n /** Error handler */\n onError?: (error: Error) => void;\n /** Name for debugging */\n name?: string;\n}\n\n/**\n * Lazy loader statistics\n */\nexport interface LazyStats {\n name: string;\n state: LazyState;\n initCount: number;\n disposeCount: number;\n errorCount: number;\n lastInitTime?: Date;\n lastAccessTime?: Date;\n initDurationMs?: number;\n}\n\n// ============================================================================\n// Lazy Value Implementation\n// ============================================================================\n\n/**\n * Lazy value wrapper with automatic initialization\n *\n * @example\n * ```typescript\n * const lazyWasm = new Lazy({\n * name: 'wasm-module',\n * factory: async () => await loadWasmModule(),\n * cleanup: (wasm) => wasm.dispose(),\n * idleTimeout: 60000, // Auto-dispose after 1 minute of inactivity\n * });\n *\n * // First access triggers initialization\n * const wasm = await lazyWasm.get();\n *\n * // Check if initialized without triggering\n * if (lazyWasm.isInitialized()) { ... }\n *\n * // Manual disposal\n * await lazyWasm.dispose();\n * ```\n */\nexport class Lazy<T> {\n private value?: T;\n private state: LazyState = 'uninitialized';\n private initPromise?: Promise<T>;\n private idleTimer?: ReturnType<typeof setTimeout>;\n private options: Required<LazyOptions<T>>;\n private stats: LazyStats;\n\n constructor(options: LazyOptions<T>) {\n this.options = {\n factory: options.factory,\n cleanup: options.cleanup ?? (() => {}),\n idleTimeout: options.idleTimeout ?? 0,\n onError: options.onError ?? console.error,\n name: options.name ?? 'lazy-value',\n };\n\n this.stats = {\n name: this.options.name,\n state: 'uninitialized',\n initCount: 0,\n disposeCount: 0,\n errorCount: 0,\n };\n }\n\n /**\n * Get the lazy value, initializing if necessary\n */\n async get(): Promise<T> {\n this.resetIdleTimer();\n\n if (this.state === 'initialized' && this.value !== undefined) {\n this.stats.lastAccessTime = new Date();\n return this.value;\n }\n\n if (this.state === 'initializing' && this.initPromise) {\n return this.initPromise;\n }\n\n if (this.state === 'error') {\n // Retry on error\n this.state = 'uninitialized';\n }\n\n if (this.state === 'disposed') {\n // Re-initialize after disposal\n this.state = 'uninitialized';\n }\n\n return this.initialize();\n }\n\n /**\n * Get synchronously (throws if not initialized)\n */\n getSync(): T {\n if (this.state !== 'initialized' || this.value === undefined) {\n throw new Error(`Lazy value '${this.options.name}' not initialized`);\n }\n this.resetIdleTimer();\n this.stats.lastAccessTime = new Date();\n return this.value;\n }\n\n /**\n * Check if initialized\n */\n isInitialized(): boolean {\n return this.state === 'initialized' && this.value !== undefined;\n }\n\n /**\n * Get current state\n */\n getState(): LazyState {\n return this.state;\n }\n\n /**\n * Initialize without returning value\n */\n async initialize(): Promise<T> {\n if (this.state === 'initialized' && this.value !== undefined) {\n return this.value;\n }\n\n this.state = 'initializing';\n this.stats.state = 'initializing';\n const startTime = Date.now();\n\n this.initPromise = (async () => {\n try {\n const value = await this.options.factory();\n this.value = value;\n this.state = 'initialized';\n this.stats.state = 'initialized';\n this.stats.initCount++;\n this.stats.lastInitTime = new Date();\n this.stats.lastAccessTime = new Date();\n this.stats.initDurationMs = Date.now() - startTime;\n return value;\n } catch (error) {\n this.state = 'error';\n this.stats.state = 'error';\n this.stats.errorCount++;\n this.options.onError(error as Error);\n throw error;\n } finally {\n this.initPromise = undefined;\n }\n })();\n\n return this.initPromise;\n }\n\n /**\n * Dispose the lazy value\n */\n async dispose(): Promise<void> {\n this.clearIdleTimer();\n\n if (this.value !== undefined) {\n try {\n await this.options.cleanup(this.value);\n } catch (error) {\n this.options.onError(error as Error);\n }\n }\n\n this.value = undefined;\n this.state = 'disposed';\n this.stats.state = 'disposed';\n this.stats.disposeCount++;\n }\n\n /**\n * Get statistics\n */\n getStats(): Readonly<LazyStats> {\n return { ...this.stats };\n }\n\n // =========================================================================\n // Private Methods\n // =========================================================================\n\n private resetIdleTimer(): void {\n this.clearIdleTimer();\n\n if (this.options.idleTimeout > 0) {\n this.idleTimer = setTimeout(() => {\n this.dispose().catch(this.options.onError);\n }, this.options.idleTimeout);\n }\n }\n\n private clearIdleTimer(): void {\n if (this.idleTimer) {\n clearTimeout(this.idleTimer);\n this.idleTimer = undefined;\n }\n }\n}\n\n// ============================================================================\n// Lazy Singleton Pattern\n// ============================================================================\n\n/**\n * Lazy singleton registry\n */\nconst lazySingletons = new Map<string, Lazy<unknown>>();\n\n/**\n * Get or create a lazy singleton\n */\nexport function getLazySingleton<T>(\n key: string,\n options: LazyOptions<T>\n): Lazy<T> {\n let lazy = lazySingletons.get(key) as Lazy<T> | undefined;\n if (!lazy) {\n lazy = new Lazy({ ...options, name: options.name ?? key });\n lazySingletons.set(key, lazy as Lazy<unknown>);\n }\n return lazy;\n}\n\n/**\n * Dispose a lazy singleton\n */\nexport async function disposeLazySingleton(key: string): Promise<void> {\n const lazy = lazySingletons.get(key);\n if (lazy) {\n await lazy.dispose();\n lazySingletons.delete(key);\n }\n}\n\n/**\n * Dispose all lazy singletons\n */\nexport async function disposeAllLazySingletons(): Promise<void> {\n const promises: Promise<void>[] = [];\n for (const lazy of lazySingletons.values()) {\n promises.push(lazy.dispose());\n }\n await Promise.all(promises);\n lazySingletons.clear();\n}\n\n// ============================================================================\n// Lazy Module Loader\n// ============================================================================\n\n/**\n * Lazy module loader for dynamic imports\n *\n * @example\n * ```typescript\n * const wasmLoader = new LazyModule(() => import('./wasm-loader.js'));\n * const { parseFormula } = await wasmLoader.get();\n * ```\n */\nexport class LazyModule<T> {\n private lazy: Lazy<T>;\n\n constructor(\n importer: () => Promise<T>,\n options?: Omit<LazyOptions<T>, 'factory'>\n ) {\n this.lazy = new Lazy({\n ...options,\n factory: importer,\n });\n }\n\n /**\n * Get the module\n */\n async get(): Promise<T> {\n return this.lazy.get();\n }\n\n /**\n * Check if loaded\n */\n isLoaded(): boolean {\n return this.lazy.isInitialized();\n }\n\n /**\n * Dispose module\n */\n async dispose(): Promise<void> {\n return this.lazy.dispose();\n }\n}\n\n// ============================================================================\n// Lazy Bridge\n// ============================================================================\n\n/**\n * Lazy bridge wrapper for Gas Town bridges\n *\n * Defers bridge initialization until first use.\n */\nexport class LazyBridge<T extends { initialize?: () => Promise<void> }> {\n private lazy: Lazy<T>;\n\n constructor(\n factory: () => T | Promise<T>,\n options?: Omit<LazyOptions<T>, 'factory'>\n ) {\n this.lazy = new Lazy({\n ...options,\n factory: async () => {\n const bridge = await factory();\n if (bridge.initialize) {\n await bridge.initialize();\n }\n return bridge;\n },\n });\n }\n\n /**\n * Get the bridge\n */\n async get(): Promise<T> {\n return this.lazy.get();\n }\n\n /**\n * Check if initialized\n */\n isInitialized(): boolean {\n return this.lazy.isInitialized();\n }\n\n /**\n * Dispose bridge\n */\n async dispose(): Promise<void> {\n return this.lazy.dispose();\n }\n\n /**\n * Get stats\n */\n getStats(): LazyStats {\n return this.lazy.getStats();\n }\n}\n\n// ============================================================================\n// Lazy WASM Loader\n// ============================================================================\n\n/**\n * Lazy WASM module loader with caching\n */\nexport class LazyWasm<T> {\n private lazy: Lazy<T>;\n private cached: T | null = null;\n\n constructor(\n loader: () => Promise<T>,\n options?: {\n name?: string;\n idleTimeout?: number;\n onError?: (error: Error) => void;\n }\n ) {\n this.lazy = new Lazy({\n factory: async () => {\n // Check cache first\n if (this.cached) {\n return this.cached;\n }\n const module = await loader();\n this.cached = module;\n return module;\n },\n cleanup: () => {\n // WASM modules are typically not disposable\n // but we can clear the cache reference\n this.cached = null;\n },\n name: options?.name ?? 'lazy-wasm',\n idleTimeout: options?.idleTimeout ?? 0,\n onError: options?.onError ?? console.error,\n });\n }\n\n /**\n * Get the WASM module\n */\n async get(): Promise<T> {\n return this.lazy.get();\n }\n\n /**\n * Check if loaded\n */\n isLoaded(): boolean {\n return this.lazy.isInitialized();\n }\n\n /**\n * Clear cache (module will be reloaded on next access)\n */\n clearCache(): void {\n this.cached = null;\n }\n\n /**\n * Get stats\n */\n getStats(): LazyStats {\n return this.lazy.getStats();\n }\n}\n\n// ============================================================================\n// Lazy Observer\n// ============================================================================\n\n/**\n * Lazy observer pattern for convoy watching\n *\n * Defers observer creation until first watch request.\n */\nexport class LazyObserver<T> {\n private lazy: Lazy<T>;\n private watchCount = 0;\n\n constructor(\n factory: () => T | Promise<T>,\n options?: Omit<LazyOptions<T>, 'factory'>\n ) {\n this.lazy = new Lazy({\n ...options,\n factory,\n });\n }\n\n /**\n * Start watching (initializes observer if needed)\n */\n async watch(): Promise<T> {\n this.watchCount++;\n return this.lazy.get();\n }\n\n /**\n * Stop watching (disposes observer if no more watchers)\n */\n async unwatch(): Promise<void> {\n this.watchCount--;\n if (this.watchCount <= 0) {\n this.watchCount = 0;\n await this.lazy.dispose();\n }\n }\n\n /**\n * Get current watch count\n */\n getWatchCount(): number {\n return this.watchCount;\n }\n\n /**\n * Check if active\n */\n isActive(): boolean {\n return this.lazy.isInitialized() && this.watchCount > 0;\n }\n\n /**\n * Force dispose\n */\n async dispose(): Promise<void> {\n this.watchCount = 0;\n return this.lazy.dispose();\n }\n}\n\n// ============================================================================\n// Lazy Initialization Decorators (for future use)\n// ============================================================================\n\n/**\n * Decorator metadata storage\n */\nconst lazyMetadata = new WeakMap<object, Map<string | symbol, Lazy<unknown>>>();\n\n/**\n * Get or create lazy value for a property\n */\nfunction getOrCreateLazy<T>(\n target: object,\n propertyKey: string | symbol,\n factory: () => T | Promise<T>\n): Lazy<T> {\n let map = lazyMetadata.get(target);\n if (!map) {\n map = new Map();\n lazyMetadata.set(target, map);\n }\n\n let lazy = map.get(propertyKey) as Lazy<T> | undefined;\n if (!lazy) {\n lazy = new Lazy({ factory, name: String(propertyKey) });\n map.set(propertyKey, lazy as Lazy<unknown>);\n }\n\n return lazy;\n}\n\n/**\n * Create a lazy property getter\n */\nexport function createLazyProperty<T>(\n factory: () => T | Promise<T>,\n options?: Omit<LazyOptions<T>, 'factory'>\n): { get: () => Promise<T>; isInitialized: () => boolean } {\n const lazy = new Lazy({ ...options, factory });\n return {\n get: () => lazy.get(),\n isInitialized: () => lazy.isInitialized(),\n };\n}\n\nexport default Lazy;\n","/**\n * Memory Management Module for Gas Town Bridge Plugin\n *\n * Provides comprehensive memory optimization through:\n * - Object pooling for frequently allocated objects (Bead, Formula, Step, Convoy, Molecule)\n * - Arena allocators for batch operations with O(1) reset\n * - Memory monitoring with pressure callbacks\n * - Lazy loading for deferred resource initialization\n *\n * Target: 75% memory reduction, <10MB heap for 10k beads\n *\n * @module gastown-bridge/memory\n */\n\n// ============================================================================\n// Object Pooling\n// ============================================================================\n\nexport {\n // Core pool class\n ObjectPool,\n type Poolable,\n type PoolStats,\n type PoolConfig,\n\n // Pooled object classes\n PooledBead,\n PooledStep,\n PooledFormula,\n PooledConvoy,\n PooledMolecule,\n\n // Pre-configured pool instances\n beadPool,\n formulaPool,\n stepPool,\n convoyPool,\n moleculePool,\n\n // Pool management utilities\n type PoolType,\n getAllPoolStats,\n getTotalMemorySaved,\n clearAllPools,\n preWarmAllPools,\n getPoolEfficiencySummary,\n} from './pool.js';\n\n// ============================================================================\n// Arena Allocator\n// ============================================================================\n\nexport {\n // Core arena class\n Arena,\n type ArenaStats,\n type ArenaConfig,\n type AllocatableType,\n type TypeMap,\n\n // Scoped arena utilities\n scopedArena,\n withArena,\n withArenaSync,\n\n // Arena management\n ArenaManager,\n arenaManager,\n} from './arena.js';\n\n// ============================================================================\n// Memory Monitoring\n// ============================================================================\n\nexport {\n // Core monitor class\n MemoryMonitor,\n type MemoryStats,\n type MemoryPressureLevel,\n type MemoryPressureCallback,\n type MemoryMonitorConfig,\n type MemoryMonitorEvents,\n\n // Convenience functions\n getMemoryUsage,\n setMemoryLimit,\n onMemoryPressure,\n getDefaultMonitor,\n disposeDefaultMonitor,\n\n // Memory budget management\n MemoryBudgetManager,\n type MemoryBudget,\n memoryBudget,\n} from './monitor.js';\n\n// ============================================================================\n// Lazy Loading\n// ============================================================================\n\nexport {\n // Core lazy class\n Lazy,\n type LazyState,\n type LazyOptions,\n type LazyStats,\n\n // Singleton management\n getLazySingleton,\n disposeLazySingleton,\n disposeAllLazySingletons,\n\n // Specialized lazy loaders\n LazyModule,\n LazyBridge,\n LazyWasm,\n LazyObserver,\n\n // Utilities\n createLazyProperty,\n} from './lazy.js';\n\n// ============================================================================\n// Integrated Memory Management\n// ============================================================================\n\nimport {\n clearAllPools,\n preWarmAllPools,\n getAllPoolStats,\n getPoolEfficiencySummary,\n} from './pool.js';\nimport { arenaManager } from './arena.js';\nimport { MemoryMonitor, type MemoryStats } from './monitor.js';\nimport { disposeAllLazySingletons } from './lazy.js';\n\n/**\n * Memory system configuration\n */\nexport interface MemorySystemConfig {\n /** Memory limit in bytes (default: 10MB) */\n memoryLimit?: number;\n /** Enable auto-cleanup on pressure */\n autoCleanup?: boolean;\n /** Pre-warm pools on init */\n preWarmPools?: boolean;\n /** Polling interval for monitor (ms) */\n pollInterval?: number;\n}\n\n/**\n * Memory system state\n */\nexport interface MemorySystemState {\n initialized: boolean;\n monitor: MemoryMonitor | null;\n config: MemorySystemConfig;\n}\n\nconst state: MemorySystemState = {\n initialized: false,\n monitor: null,\n config: {},\n};\n\n/**\n * Initialize the memory management system\n *\n * @example\n * ```typescript\n * import { initializeMemorySystem, getSystemMemoryStats } from './memory/index.js';\n *\n * await initializeMemorySystem({\n * memoryLimit: 10 * 1024 * 1024, // 10MB\n * autoCleanup: true,\n * preWarmPools: true,\n * });\n *\n * // Monitor memory usage\n * const stats = getSystemMemoryStats();\n * console.log('Heap used:', stats.heapUsed);\n * ```\n */\nexport function initializeMemorySystem(config?: MemorySystemConfig): void {\n if (state.initialized) {\n console.warn('[memory] Memory system already initialized');\n return;\n }\n\n state.config = {\n memoryLimit: config?.memoryLimit ?? 10 * 1024 * 1024, // 10MB default\n autoCleanup: config?.autoCleanup ?? true,\n preWarmPools: config?.preWarmPools ?? false,\n pollInterval: config?.pollInterval ?? 5000,\n };\n\n // Create and start monitor\n state.monitor = new MemoryMonitor({\n memoryLimit: state.config.memoryLimit,\n autoCleanup: state.config.autoCleanup,\n pollInterval: state.config.pollInterval,\n });\n state.monitor.start();\n\n // Pre-warm pools if requested\n if (state.config.preWarmPools) {\n preWarmAllPools();\n }\n\n state.initialized = true;\n console.log('[memory] Memory system initialized', {\n limit: `${(state.config.memoryLimit! / (1024 * 1024)).toFixed(2)}MB`,\n autoCleanup: state.config.autoCleanup,\n preWarmed: state.config.preWarmPools,\n });\n}\n\n/**\n * Get system memory statistics\n */\nexport function getSystemMemoryStats(): MemoryStats | null {\n return state.monitor?.getMemoryUsage() ?? null;\n}\n\n/**\n * Get comprehensive memory report\n */\nexport function getMemoryReport(): {\n system: MemoryStats | null;\n pools: ReturnType<typeof getAllPoolStats>;\n poolEfficiency: ReturnType<typeof getPoolEfficiencySummary>;\n arenas: ReturnType<typeof arenaManager.getStats>;\n config: MemorySystemConfig;\n} {\n return {\n system: getSystemMemoryStats(),\n pools: getAllPoolStats(),\n poolEfficiency: getPoolEfficiencySummary(),\n arenas: arenaManager.getStats(),\n config: state.config,\n };\n}\n\n/**\n * Trigger manual memory cleanup\n */\nexport function triggerMemoryCleanup(): void {\n // Clear all object pools\n clearAllPools();\n\n // Reset all arenas\n arenaManager.resetAll();\n\n // Dispose lazy singletons\n disposeAllLazySingletons().catch(console.error);\n\n // Trigger monitor cleanup\n state.monitor?.triggerCleanup();\n\n console.log('[memory] Manual cleanup completed');\n}\n\n/**\n * Shutdown the memory system\n */\nexport async function shutdownMemorySystem(): Promise<void> {\n if (!state.initialized) return;\n\n // Stop monitor\n state.monitor?.stop();\n state.monitor = null;\n\n // Clear pools\n clearAllPools();\n\n // Dispose arenas\n arenaManager.disposeAll();\n\n // Dispose lazy singletons\n await disposeAllLazySingletons();\n\n state.initialized = false;\n console.log('[memory] Memory system shut down');\n}\n\n/**\n * Check if memory system is initialized\n */\nexport function isMemorySystemInitialized(): boolean {\n return state.initialized;\n}\n\n/**\n * Get memory system monitor\n */\nexport function getMemoryMonitor(): MemoryMonitor | null {\n return state.monitor;\n}\n\n// ============================================================================\n// Quick-access utilities for common operations\n// ============================================================================\n\nimport {\n beadPool,\n stepPool,\n formulaPool,\n convoyPool,\n moleculePool,\n PooledBead,\n PooledStep,\n PooledFormula,\n PooledConvoy,\n PooledMolecule,\n} from './pool.js';\n\n/**\n * Acquire a pooled bead\n */\nexport function acquireBead(): PooledBead {\n return beadPool.acquire();\n}\n\n/**\n * Release a pooled bead\n */\nexport function releaseBead(bead: PooledBead): void {\n beadPool.release(bead);\n}\n\n/**\n * Acquire a pooled step\n */\nexport function acquireStep(): PooledStep {\n return stepPool.acquire();\n}\n\n/**\n * Release a pooled step\n */\nexport function releaseStep(step: PooledStep): void {\n stepPool.release(step);\n}\n\n/**\n * Acquire a pooled formula\n */\nexport function acquireFormula(): PooledFormula {\n return formulaPool.acquire();\n}\n\n/**\n * Release a pooled formula\n */\nexport function releaseFormula(formula: PooledFormula): void {\n formulaPool.release(formula);\n}\n\n/**\n * Acquire a pooled convoy\n */\nexport function acquireConvoy(): PooledConvoy {\n return convoyPool.acquire();\n}\n\n/**\n * Release a pooled convoy\n */\nexport function releaseConvoy(convoy: PooledConvoy): void {\n convoyPool.release(convoy);\n}\n\n/**\n * Acquire a pooled molecule\n */\nexport function acquireMolecule(): PooledMolecule {\n return moleculePool.acquire();\n}\n\n/**\n * Release a pooled molecule\n */\nexport function releaseMolecule(molecule: PooledMolecule): void {\n moleculePool.release(molecule);\n}\n"]}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @claude-flow/plugin-gastown-bridge v0.1.4
3
+ *
4
+ * WASM-accelerated Gas Town orchestration for Claude Flow V3
5
+ * Bundle optimized: <100KB gzipped total
6
+ *
7
+ * @license MIT
8
+ * @copyright 2024 rUv
9
+ */
10
+ var u=class{cache=new Map;head=null;tail=null;currentSize=0;maxSize;maxEntries;ttlMs;onEvict;constructor(e={}){this.maxSize=e.maxSize??50*1024*1024,this.maxEntries=e.maxEntries??1e3,this.ttlMs=e.ttlMs??0,this.onEvict=e.onEvict;}get(e){let t=this.cache.get(e);if(t){if(this.ttlMs>0&&Date.now()-t.createdAt>this.ttlMs){this.delete(e);return}return this.moveToFront(t),t.accessCount++,t.value}}set(e,t,i){let r=i??this.estimateSize(t),s=this.cache.get(e);if(s){this.currentSize-=s.size,s.value=t,s.size=r,s.createdAt=Date.now(),this.currentSize+=r,this.moveToFront(s);return}for(;(this.cache.size>=this.maxEntries||this.currentSize+r>this.maxSize)&&this.tail;)this.evictLRU();let o={key:e,value:t,prev:null,next:this.head,size:r,createdAt:Date.now(),accessCount:1};this.head&&(this.head.prev=o),this.head=o,this.tail||(this.tail=o),this.cache.set(e,o),this.currentSize+=r;}has(e){let t=this.cache.get(e);return t?this.ttlMs>0&&Date.now()-t.createdAt>this.ttlMs?(this.delete(e),false):true:false}delete(e){let t=this.cache.get(e);return t?(this.removeNode(t),this.cache.delete(e),this.currentSize-=t.size,true):false}clear(){if(this.onEvict)for(let[e,t]of this.cache)this.onEvict(e,t.value);this.cache.clear(),this.head=null,this.tail=null,this.currentSize=0;}stats(){let e=0;for(let t of this.cache.values())e+=t.accessCount;return {entries:this.cache.size,sizeBytes:this.currentSize,maxEntries:this.maxEntries,maxSizeBytes:this.maxSize,hitRate:this.cache.size>0?e/this.cache.size:0}}keys(){return this.cache.keys()}get size(){return this.cache.size}moveToFront(e){e!==this.head&&(this.removeNode(e),e.prev=null,e.next=this.head,this.head&&(this.head.prev=e),this.head=e,this.tail||(this.tail=e));}removeNode(e){e.prev?e.prev.next=e.next:this.head=e.next,e.next?e.next.prev=e.prev:this.tail=e.prev;}evictLRU(){if(!this.tail)return;let e=this.tail;this.removeNode(e),this.cache.delete(e.key),this.currentSize-=e.size,this.onEvict&&this.onEvict(e.key,e.value);}estimateSize(e){return e==null?8:typeof e=="string"?e.length*2:typeof e=="number"?8:typeof e=="boolean"?4:ArrayBuffer.isView(e)?e.byteLength:Array.isArray(e)?e.reduce((t,i)=>t+this.estimateSize(i),64):typeof e=="object"?JSON.stringify(e).length*2:64}},l=class{astCache;hashCache=new Map;constructor(e=500){this.astCache=new u({maxEntries:e,ttlMs:300*1e3});}get(e){let t=this.hashContent(e);return this.astCache.get(t)}set(e,t){let i=this.hashContent(e);this.astCache.set(i,t);}has(e){let t=this.hashContent(e);return this.astCache.has(t)}clear(){this.astCache.clear(),this.hashCache.clear();}stats(){let e=this.astCache.stats();return {entries:e.entries,sizeBytes:e.sizeBytes}}hashContent(e){let t=this.hashCache.get(e);if(t)return t;let i=2166136261;for(let s=0;s<e.length;s++)i^=e.charCodeAt(s),i=i*16777619>>>0;let r=i.toString(36);if(this.hashCache.set(e,r),this.hashCache.size>1e4){let s=this.hashCache.keys().next().value;s&&this.hashCache.delete(s);}return r}};var d=class{pending=new Map;timeoutMs;constructor(e=3e4){this.timeoutMs=e;}async dedupe(e,t){let i=this.pending.get(e);if(i)return new Promise((n,a)=>{i.resolvers.push({resolve:n,reject:a});});let r=[],s=(async()=>{try{let n=await t();for(let{resolve:a}of r)a(n);return n}catch(n){for(let{reject:a}of r)a(n);throw n}finally{this.pending.delete(e);}})(),o={promise:s,resolvers:r,startedAt:Date.now()};return this.pending.set(e,o),setTimeout(()=>{let n=this.pending.get(e);if(n===o){this.pending.delete(e);for(let{reject:a}of n.resolvers)a(new Error(`Request timed out after ${this.timeoutMs}ms`));}},this.timeoutMs),s}get pendingCount(){return this.pending.size}clear(){for(let[e,t]of this.pending)for(let{reject:i}of t.resolvers)i(new Error("Deduplicator cleared"));this.pending.clear();}},c=class{preloadQueue=[];loaded=new Map;errors=new Map;isPreloading=false;preloadPromise=null;register(e,t,i=0){this.loaded.has(e)||(this.preloadQueue.push({name:e,loader:t,priority:i}),this.preloadQueue.sort((r,s)=>s.priority-r.priority));}async startPreload(){if(!(this.isPreloading||this.preloadQueue.length===0)){this.isPreloading=true,this.preloadPromise=this.runPreload();try{await this.preloadPromise;}finally{this.isPreloading=false,this.preloadPromise=null;}}}get(e){return this.loaded.get(e)}isLoaded(e){return this.loaded.has(e)}getError(e){return this.errors.get(e)}status(){return {queued:this.preloadQueue.length,loaded:this.loaded.size,errors:this.errors.size,isPreloading:this.isPreloading}}async waitForPreload(){this.preloadPromise&&await this.preloadPromise;}async runPreload(){for(;this.preloadQueue.length>0;){let e=this.preloadQueue.shift();if(!e)break;await this.scheduleIdleTask(async()=>{try{let t=await e.loader();this.loaded.set(e.name,t);}catch(t){this.errors.set(e.name,t);}});}}scheduleIdleTask(e){return new Promise(t=>{typeof requestIdleCallback<"u"?requestIdleCallback(async()=>{await e(),t();}):typeof setImmediate<"u"?setImmediate(async()=>{await e(),t();}):setTimeout(async()=>{await e(),t();},0);})}};var m=class{constructor(e,t=100){this.emit=e;this.debounceMs=t;}emit;debounceMs;pending=null;timeoutId=null;lastEmitTime=0;update(e){this.pending=e;let i=Date.now()-this.lastEmitTime;if(i>=this.debounceMs){this.flush();return}this.timeoutId||(this.timeoutId=setTimeout(()=>{this.flush();},this.debounceMs-i));}flush(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.pending!==null&&(this.emit(this.pending),this.pending=null,this.lastEmitTime=Date.now());}cancel(){this.timeoutId&&(clearTimeout(this.timeoutId),this.timeoutId=null),this.pending=null;}};export{u as a,l as b,d as c,c as d,m as e};//# sourceMappingURL=chunk-U74VYTRV.js.map
11
+ //# sourceMappingURL=chunk-U74VYTRV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cache.ts"],"names":["LRUCache","options","key","node","value","sizeBytes","size","existing","totalAccess","evicted","acc","v","FormulaASTCache","maxEntries","content","hash","ast","cacheStats","cached","i","hashStr","first","BatchDeduplicator","timeoutMs","executor","resolve","reject","resolvers","promise","result","error","pendingRequest","req","ModulePreloader","name","loader","priority","a","b","item","module","task","DebouncedEmitter","emit","debounceMs","timeSinceLastEmit"],"mappings":";;;;;;;;;AA+CO,IAAMA,CAAAA,CAAN,KAAqB,CACT,KAAA,CAA+B,IAAI,GAAA,CAC5C,IAAA,CAA6B,IAAA,CAC7B,IAAA,CAA6B,IAAA,CAC7B,WAAA,CAAc,CAAA,CAEL,OAAA,CACA,WACA,KAAA,CACA,OAAA,CAEjB,WAAA,CAAYC,CAAAA,CAKR,EAAC,CAAG,CACN,IAAA,CAAK,QAAUA,CAAAA,CAAQ,OAAA,EAAW,EAAA,CAAK,IAAA,CAAO,KAC9C,IAAA,CAAK,UAAA,CAAaA,CAAAA,CAAQ,UAAA,EAAc,IACxC,IAAA,CAAK,KAAA,CAAQA,CAAAA,CAAQ,KAAA,EAAS,CAAA,CAC9B,IAAA,CAAK,OAAA,CAAUA,CAAAA,CAAQ,QACzB,CAKA,GAAA,CAAIC,CAAAA,CAAuB,CACzB,IAAMC,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAID,CAAG,CAAA,CAC/B,GAAKC,CAAAA,CAGL,CAAA,GAAI,IAAA,CAAK,KAAA,CAAQ,CAAA,EAAK,IAAA,CAAK,KAAI,CAAIA,CAAAA,CAAK,SAAA,CAAY,IAAA,CAAK,MAAO,CAC9D,IAAA,CAAK,MAAA,CAAOD,CAAG,EACf,MACF,CAGA,OAAA,IAAA,CAAK,WAAA,CAAYC,CAAI,CAAA,CACrBA,CAAAA,CAAK,WAAA,EAAA,CACEA,EAAK,KAAA,CACd,CAKA,GAAA,CAAID,CAAAA,CAAQE,CAAAA,CAAUC,CAAAA,CAA0B,CAC9C,IAAMC,EAAOD,CAAAA,EAAa,IAAA,CAAK,YAAA,CAAaD,CAAK,CAAA,CAG3CG,CAAAA,CAAW,IAAA,CAAK,KAAA,CAAM,IAAIL,CAAG,CAAA,CACnC,GAAIK,CAAAA,CAAU,CACZ,IAAA,CAAK,WAAA,EAAeA,CAAAA,CAAS,IAAA,CAC7BA,EAAS,KAAA,CAAQH,CAAAA,CACjBG,CAAAA,CAAS,IAAA,CAAOD,CAAAA,CAChBC,CAAAA,CAAS,SAAA,CAAY,IAAA,CAAK,KAAI,CAC9B,IAAA,CAAK,WAAA,EAAeD,CAAAA,CACpB,KAAK,WAAA,CAAYC,CAAQ,CAAA,CACzB,MACF,CAGA,KAAA,CACG,IAAA,CAAK,KAAA,CAAM,IAAA,EAAQ,IAAA,CAAK,UAAA,EAAc,IAAA,CAAK,WAAA,CAAcD,EAAO,IAAA,CAAK,OAAA,GACtE,IAAA,CAAK,IAAA,EAEL,KAAK,QAAA,EAAS,CAIhB,IAAMH,CAAAA,CAAsB,CAC1B,GAAA,CAAAD,CAAAA,CACA,KAAA,CAAAE,CAAAA,CACA,IAAA,CAAM,IAAA,CACN,IAAA,CAAM,IAAA,CAAK,KACX,IAAA,CAAAE,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CACpB,WAAA,CAAa,CACf,EAGI,IAAA,CAAK,IAAA,GACP,IAAA,CAAK,IAAA,CAAK,IAAA,CAAOH,CAAAA,CAAAA,CAEnB,IAAA,CAAK,IAAA,CAAOA,EACP,IAAA,CAAK,IAAA,GACR,IAAA,CAAK,IAAA,CAAOA,GAGd,IAAA,CAAK,KAAA,CAAM,GAAA,CAAID,CAAAA,CAAKC,CAAI,CAAA,CACxB,IAAA,CAAK,WAAA,EAAeG,EACtB,CAKA,GAAA,CAAIJ,CAAAA,CAAiB,CACnB,IAAMC,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAID,CAAG,CAAA,CAC/B,OAAKC,CAAAA,CAGD,IAAA,CAAK,MAAQ,CAAA,EAAK,IAAA,CAAK,GAAA,EAAI,CAAIA,CAAAA,CAAK,SAAA,CAAY,IAAA,CAAK,KAAA,EACvD,KAAK,MAAA,CAAOD,CAAG,CAAA,CACR,KAAA,EAGF,KARW,KASpB,CAKA,MAAA,CAAOA,CAAAA,CAAiB,CACtB,IAAMC,CAAAA,CAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAID,CAAG,CAAA,CAC/B,OAAKC,GAEL,IAAA,CAAK,UAAA,CAAWA,CAAI,CAAA,CACpB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOD,CAAG,EACrB,IAAA,CAAK,WAAA,EAAeC,CAAAA,CAAK,IAAA,CAClB,IAAA,EALW,KAMpB,CAKA,KAAA,EAAc,CACZ,GAAI,IAAA,CAAK,OAAA,CACP,IAAA,GAAW,CAACD,CAAAA,CAAKC,CAAI,CAAA,GAAK,IAAA,CAAK,MAC7B,IAAA,CAAK,OAAA,CAAQD,CAAAA,CAAKC,CAAAA,CAAK,KAAK,CAAA,CAGhC,IAAA,CAAK,KAAA,CAAM,OAAM,CACjB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,KAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,WAAA,CAAc,EACrB,CAKA,KAAA,EAME,CACA,IAAIK,CAAAA,CAAc,CAAA,CAClB,IAAA,IAAWL,CAAAA,IAAQ,KAAK,KAAA,CAAM,MAAA,EAAO,CACnCK,CAAAA,EAAeL,EAAK,WAAA,CAGtB,OAAO,CACL,OAAA,CAAS,KAAK,KAAA,CAAM,IAAA,CACpB,SAAA,CAAW,IAAA,CAAK,WAAA,CAChB,UAAA,CAAY,IAAA,CAAK,UAAA,CACjB,aAAc,IAAA,CAAK,OAAA,CACnB,OAAA,CAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAO,CAAA,CAAIK,CAAAA,CAAc,KAAK,KAAA,CAAM,IAAA,CAAO,CACjE,CACF,CAKA,IAAA,EAA4B,CAC1B,OAAO,KAAK,KAAA,CAAM,IAAA,EACpB,CAKA,IAAI,IAAA,EAAe,CACjB,OAAO,IAAA,CAAK,MAAM,IACpB,CAIQ,WAAA,CAAYL,CAAAA,CAA2B,CACzCA,CAAAA,GAAS,IAAA,CAAK,IAAA,GAGlB,KAAK,UAAA,CAAWA,CAAI,CAAA,CAGpBA,CAAAA,CAAK,KAAO,IAAA,CACZA,CAAAA,CAAK,IAAA,CAAO,IAAA,CAAK,KACb,IAAA,CAAK,IAAA,GACP,IAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAAA,CAEnB,IAAA,CAAK,IAAA,CAAOA,EACP,IAAA,CAAK,IAAA,GACR,IAAA,CAAK,IAAA,CAAOA,IAEhB,CAEQ,UAAA,CAAWA,CAAAA,CAA2B,CACxCA,EAAK,IAAA,CACPA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAEtB,IAAA,CAAK,IAAA,CAAOA,EAAK,IAAA,CAGfA,CAAAA,CAAK,IAAA,CACPA,CAAAA,CAAK,IAAA,CAAK,IAAA,CAAOA,CAAAA,CAAK,IAAA,CAEtB,KAAK,IAAA,CAAOA,CAAAA,CAAK,KAErB,CAEQ,QAAA,EAAiB,CACvB,GAAI,CAAC,KAAK,IAAA,CAAM,OAEhB,IAAMM,CAAAA,CAAU,KAAK,IAAA,CACrB,IAAA,CAAK,UAAA,CAAWA,CAAO,EACvB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAOA,CAAAA,CAAQ,GAAG,CAAA,CAC7B,IAAA,CAAK,WAAA,EAAeA,EAAQ,IAAA,CAExB,IAAA,CAAK,OAAA,EACP,IAAA,CAAK,QAAQA,CAAAA,CAAQ,GAAA,CAAKA,CAAAA,CAAQ,KAAK,EAE3C,CAEQ,YAAA,CAAaL,CAAAA,CAAkB,CACrC,OAAIA,CAAAA,EAAU,IAAA,CAAoC,CAAA,CAC9C,OAAOA,CAAAA,EAAU,QAAA,CAAiBA,CAAAA,CAAM,MAAA,CAAS,EACjD,OAAOA,CAAAA,EAAU,QAAA,CAAiB,CAAA,CAClC,OAAOA,CAAAA,EAAU,SAAA,CAAkB,CAAA,CACnC,WAAA,CAAY,MAAA,CAAOA,CAAK,CAAA,CAAUA,CAAAA,CAAM,WACxC,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CACdA,CAAAA,CAAM,MAAA,CAAO,CAACM,CAAAA,CAAKC,IAAMD,CAAAA,CAAM,IAAA,CAAK,YAAA,CAAaC,CAAC,CAAA,CAAG,EAAE,CAAA,CAE5D,OAAOP,GAAU,QAAA,CACZ,IAAA,CAAK,SAAA,CAAUA,CAAK,EAAE,MAAA,CAAS,CAAA,CAEjC,EACT,CACF,EAYaQ,CAAAA,CAAN,KAAsB,CAGV,QAAA,CACA,SAAA,CAAiC,IAAI,GAAA,CAEtD,WAAA,CAAYC,EAAa,GAAA,CAAK,CAC5B,IAAA,CAAK,QAAA,CAAW,IAAIb,CAAAA,CAA0B,CAC5C,UAAA,CAAAa,CAAAA,CACA,MAAO,GAAA,CAAS,GAClB,CAAC,EACH,CAKA,GAAA,CAAIC,CAAAA,CAAsC,CACxC,IAAMC,CAAAA,CAAO,IAAA,CAAK,WAAA,CAAYD,CAAO,EACrC,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIC,CAAI,CAC/B,CAKA,GAAA,CAAID,CAAAA,CAAiBE,CAAAA,CAAoB,CACvC,IAAMD,CAAAA,CAAO,KAAK,WAAA,CAAYD,CAAO,CAAA,CACrC,IAAA,CAAK,SAAS,GAAA,CAAIC,CAAAA,CAAMC,CAAG,EAC7B,CAKA,GAAA,CAAIF,CAAAA,CAA0B,CAC5B,IAAMC,CAAAA,CAAO,IAAA,CAAK,WAAA,CAAYD,CAAO,EACrC,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAIC,CAAI,CAC/B,CAKA,KAAA,EAAc,CACZ,KAAK,QAAA,CAAS,KAAA,EAAM,CACpB,IAAA,CAAK,SAAA,CAAU,KAAA,GACjB,CAKA,OAAgD,CAC9C,IAAME,CAAAA,CAAa,IAAA,CAAK,SAAS,KAAA,EAAM,CACvC,OAAO,CACL,QAASA,CAAAA,CAAW,OAAA,CACpB,SAAA,CAAWA,CAAAA,CAAW,SACxB,CACF,CAGQ,WAAA,CAAYH,EAAyB,CAC3C,IAAMI,CAAAA,CAAS,IAAA,CAAK,UAAU,GAAA,CAAIJ,CAAO,CAAA,CACzC,GAAII,EAAQ,OAAOA,CAAAA,CAGnB,IAAIH,CAAAA,CAAO,UAAA,CACX,IAAA,IAASI,CAAAA,CAAI,CAAA,CAAGA,EAAIL,CAAAA,CAAQ,MAAA,CAAQK,CAAAA,EAAAA,CAClCJ,CAAAA,EAAQD,CAAAA,CAAQ,UAAA,CAAWK,CAAC,CAAA,CAC5BJ,EAAQA,CAAAA,CAAO,QAAA,GAAc,CAAA,CAG/B,IAAMK,CAAAA,CAAUL,CAAAA,CAAK,QAAA,CAAS,EAAE,EAIhC,GAHA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAID,EAASM,CAAO,CAAA,CAG/B,IAAA,CAAK,SAAA,CAAU,KAAO,GAAA,CAAO,CAC/B,IAAMC,CAAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA,CACvCA,CAAAA,EAAO,IAAA,CAAK,UAAU,MAAA,CAAOA,CAAK,EACxC,CAEA,OAAOD,CACT,CACF,EAiHO,IAAME,CAAAA,CAAN,KAA2B,CACxB,OAAA,CAA0C,IAAI,GAAA,CACrC,SAAA,CAEjB,WAAA,CAAYC,CAAAA,CAAY,IAAO,CAC7B,IAAA,CAAK,SAAA,CAAYA,EACnB,CAKA,MAAM,MAAA,CAAOrB,CAAAA,CAAasB,CAAAA,CAAwC,CAEhE,IAAMjB,CAAAA,CAAW,IAAA,CAAK,QAAQ,GAAA,CAAIL,CAAG,CAAA,CACrC,GAAIK,CAAAA,CAEF,OAAO,IAAI,OAAA,CAAW,CAACkB,CAAAA,CAASC,CAAAA,GAAW,CACzCnB,CAAAA,CAAS,SAAA,CAAU,IAAA,CAAK,CAAE,OAAA,CAAAkB,EAAS,MAAA,CAAAC,CAAO,CAAC,EAC7C,CAAC,CAAA,CAIH,IAAIC,CAAAA,CAA4C,GAE1CC,CAAAA,CAAAA,CAAW,SAAY,CAC3B,GAAI,CACF,IAAMC,CAAAA,CAAS,MAAML,GAAS,CAG9B,IAAA,GAAW,CAAE,OAAA,CAAAC,CAAQ,CAAA,GAAKE,CAAAA,CACxBF,CAAAA,CAAQI,CAAM,EAGhB,OAAOA,CACT,CAAA,MAASC,CAAAA,CAAO,CAEd,IAAA,GAAW,CAAE,MAAA,CAAAJ,CAAO,CAAA,GAAKC,CAAAA,CACvBD,CAAAA,CAAOI,CAAK,EAEd,MAAMA,CACR,CAAA,OAAE,CACA,KAAK,OAAA,CAAQ,MAAA,CAAO5B,CAAG,EACzB,CACF,CAAA,GAAG,CAEG6B,CAAAA,CAAoC,CACxC,OAAA,CAAAH,CAAAA,CACA,SAAA,CAAAD,CAAAA,CACA,SAAA,CAAW,IAAA,CAAK,GAAA,EAClB,EAEA,OAAA,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAIzB,CAAAA,CAAK6B,CAAc,CAAA,CAGpC,UAAA,CAAW,IAAM,CACf,IAAMC,CAAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,IAAI9B,CAAG,CAAA,CAChC,GAAI8B,CAAAA,GAAQD,EAAgB,CAC1B,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO7B,CAAG,CAAA,CACvB,IAAA,GAAW,CAAE,OAAAwB,CAAO,CAAA,GAAKM,CAAAA,CAAI,SAAA,CAC3BN,EAAO,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAA,CAAK,SAAS,CAAA,EAAA,CAAI,CAAC,EAEnE,CACF,CAAA,CAAG,IAAA,CAAK,SAAS,CAAA,CAEVE,CACT,CAKA,IAAI,YAAA,EAAuB,CACzB,OAAO,IAAA,CAAK,OAAA,CAAQ,IACtB,CAKA,OAAc,CACZ,IAAA,GAAW,CAAC1B,CAAAA,CAAK8B,CAAG,CAAA,GAAK,IAAA,CAAK,OAAA,CAC5B,OAAW,CAAE,MAAA,CAAAN,CAAO,CAAA,GAAKM,EAAI,SAAA,CAC3BN,CAAAA,CAAO,IAAI,KAAA,CAAM,sBAAsB,CAAC,CAAA,CAG5C,IAAA,CAAK,OAAA,CAAQ,KAAA,GACf,CACF,CAAA,CAWaO,EAAN,KAAsB,CACV,YAAA,CAIZ,GAEY,MAAA,CAA+B,IAAI,GAAA,CACnC,MAAA,CAA6B,IAAI,GAAA,CAC1C,YAAA,CAAe,KAAA,CACf,cAAA,CAAuC,IAAA,CAK/C,QAAA,CACEC,CAAAA,CACAC,CAAAA,CACAC,EAAW,CAAA,CACL,CACF,IAAA,CAAK,MAAA,CAAO,IAAIF,CAAI,CAAA,GAExB,IAAA,CAAK,YAAA,CAAa,KAAK,CAAE,IAAA,CAAAA,CAAAA,CAAM,MAAA,CAAAC,CAAAA,CAAQ,QAAA,CAAAC,CAAS,CAAC,EACjD,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,CAACC,EAAGC,CAAAA,GAAMA,CAAAA,CAAE,QAAA,CAAWD,CAAAA,CAAE,QAAQ,CAAA,EAC1D,CAKA,MAAM,YAAA,EAA8B,CAClC,GAAI,EAAA,IAAA,CAAK,YAAA,EAAgB,KAAK,YAAA,CAAa,MAAA,GAAW,CAAA,CAAA,CAEtD,CAAA,IAAA,CAAK,YAAA,CAAe,IAAA,CACpB,IAAA,CAAK,cAAA,CAAiB,KAAK,UAAA,EAAW,CAEtC,GAAI,CACF,MAAM,IAAA,CAAK,eACb,CAAA,OAAE,CACA,IAAA,CAAK,YAAA,CAAe,KAAA,CACpB,IAAA,CAAK,eAAiB,KACxB,CAAA,CACF,CAKA,GAAA,CAAOH,EAA6B,CAClC,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,CAAI,CAC7B,CAKA,SAASA,CAAAA,CAAuB,CAC9B,OAAO,IAAA,CAAK,OAAO,GAAA,CAAIA,CAAI,CAC7B,CAKA,SAASA,CAAAA,CAAiC,CACxC,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,CAAI,CAC7B,CAKA,MAAA,EAKE,CACA,OAAO,CACL,OAAQ,IAAA,CAAK,YAAA,CAAa,MAAA,CAC1B,MAAA,CAAQ,KAAK,MAAA,CAAO,IAAA,CACpB,MAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,CACpB,YAAA,CAAc,IAAA,CAAK,YACrB,CACF,CAKA,MAAM,cAAA,EAAgC,CAChC,IAAA,CAAK,cAAA,EACP,MAAM,KAAK,eAEf,CAEA,MAAc,UAAA,EAA4B,CACxC,KAAO,IAAA,CAAK,YAAA,CAAa,OAAS,CAAA,EAAG,CACnC,IAAMK,CAAAA,CAAO,KAAK,YAAA,CAAa,KAAA,EAAM,CACrC,GAAI,CAACA,CAAAA,CAAM,MAGX,MAAM,IAAA,CAAK,gBAAA,CAAiB,SAAY,CACtC,GAAI,CACF,IAAMC,CAAAA,CAAS,MAAMD,CAAAA,CAAK,QAAO,CACjC,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,EAAK,IAAA,CAAMC,CAAM,EACnC,CAAA,MAASV,CAAAA,CAAO,CACd,IAAA,CAAK,MAAA,CAAO,IAAIS,CAAAA,CAAK,IAAA,CAAMT,CAAc,EAC3C,CACF,CAAC,EACH,CACF,CAEQ,iBAAiBW,CAAAA,CAA0C,CACjE,OAAO,IAAI,OAAA,CAAShB,CAAAA,EAAY,CAC1B,OAAO,oBAAwB,GAAA,CACjC,mBAAA,CAAoB,SAAY,CAC9B,MAAMgB,CAAAA,EAAK,CACXhB,CAAAA,GACF,CAAC,CAAA,CACQ,OAAO,YAAA,CAAiB,GAAA,CACjC,YAAA,CAAa,SAAY,CACvB,MAAMgB,CAAAA,EAAK,CACXhB,CAAAA,GACF,CAAC,CAAA,CAED,UAAA,CAAW,SAAY,CACrB,MAAMgB,CAAAA,EAAK,CACXhB,CAAAA,GACF,CAAA,CAAG,CAAC,EAER,CAAC,CACH,CACF,EAqNO,IAAMiB,CAAAA,CAAN,KAA0B,CAK/B,WAAA,CACmBC,CAAAA,CACAC,CAAAA,CAAqB,IACtC,CAFiB,IAAA,CAAA,IAAA,CAAAD,CAAAA,CACA,IAAA,CAAA,UAAA,CAAAC,EAChB,CAFgB,IAAA,CACA,UAAA,CANX,QAAoB,IAAA,CACpB,SAAA,CAAmC,IAAA,CACnC,YAAA,CAAe,EAUvB,MAAA,CAAOxC,CAAAA,CAAgB,CACrB,IAAA,CAAK,QAAUA,CAAAA,CAGf,IAAMyC,CAAAA,CADM,IAAA,CAAK,GAAA,EAAI,CACW,IAAA,CAAK,YAAA,CAGrC,GAAIA,CAAAA,EAAqB,IAAA,CAAK,UAAA,CAAY,CACxC,KAAK,KAAA,EAAM,CACX,MACF,CAGK,KAAK,SAAA,GACR,IAAA,CAAK,SAAA,CAAY,UAAA,CAAW,IAAM,CAChC,IAAA,CAAK,KAAA,GACP,CAAA,CAAG,IAAA,CAAK,UAAA,CAAaA,CAAiB,GAE1C,CAKA,KAAA,EAAc,CACR,IAAA,CAAK,YACP,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA,CAC3B,IAAA,CAAK,SAAA,CAAY,IAAA,CAAA,CAGf,IAAA,CAAK,UAAY,IAAA,GACnB,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CACtB,IAAA,CAAK,OAAA,CAAU,IAAA,CACf,KAAK,YAAA,CAAe,IAAA,CAAK,GAAA,EAAI,EAEjC,CAKA,MAAA,EAAe,CACT,IAAA,CAAK,YACP,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA,CAC3B,KAAK,SAAA,CAAY,IAAA,CAAA,CAEnB,IAAA,CAAK,OAAA,CAAU,KACjB,CACF","file":"chunk-U74VYTRV.js","sourcesContent":["/**\n * Gas Town Bridge Plugin - Unified Cache System\n *\n * High-performance caching with:\n * - O(1) LRU cache with Map + doubly linked list\n * - WeakMap for formula AST caching (GC-friendly)\n * - Result memoization for expensive operations\n * - Batch deduplication for concurrent requests\n *\n * Performance targets:\n * - 50% memory reduction via eviction\n * - 3x faster cold start via preloading\n *\n * @module gastown-bridge/cache\n * @version 0.1.0\n */\n\n// ============================================================================\n// LRU Cache Implementation - O(1) get/set\n// ============================================================================\n\n/**\n * Doubly linked list node for LRU tracking\n */\ninterface LRUNode<K, V> {\n key: K;\n value: V;\n prev: LRUNode<K, V> | null;\n next: LRUNode<K, V> | null;\n size: number;\n createdAt: number;\n accessCount: number;\n}\n\n/**\n * LRU Cache with O(1) operations\n *\n * Uses Map for O(1) lookups and doubly linked list for O(1) eviction.\n * Supports TTL, size limits, and access tracking.\n *\n * @example\n * ```typescript\n * const cache = new LRUCache<string, Formula>({ maxSize: 1000, ttlMs: 60000 });\n * cache.set('formula-1', parsedFormula);\n * const formula = cache.get('formula-1');\n * ```\n */\nexport class LRUCache<K, V> {\n private readonly cache: Map<K, LRUNode<K, V>> = new Map();\n private head: LRUNode<K, V> | null = null;\n private tail: LRUNode<K, V> | null = null;\n private currentSize = 0;\n\n private readonly maxSize: number;\n private readonly maxEntries: number;\n private readonly ttlMs: number;\n private readonly onEvict?: (key: K, value: V) => void;\n\n constructor(options: {\n maxSize?: number;\n maxEntries?: number;\n ttlMs?: number;\n onEvict?: (key: K, value: V) => void;\n } = {}) {\n this.maxSize = options.maxSize ?? 50 * 1024 * 1024; // 50MB default\n this.maxEntries = options.maxEntries ?? 1000;\n this.ttlMs = options.ttlMs ?? 0; // 0 = no TTL\n this.onEvict = options.onEvict;\n }\n\n /**\n * Get value from cache - O(1)\n */\n get(key: K): V | undefined {\n const node = this.cache.get(key);\n if (!node) return undefined;\n\n // Check TTL\n if (this.ttlMs > 0 && Date.now() - node.createdAt > this.ttlMs) {\n this.delete(key);\n return undefined;\n }\n\n // Move to front (most recently used)\n this.moveToFront(node);\n node.accessCount++;\n return node.value;\n }\n\n /**\n * Set value in cache - O(1)\n */\n set(key: K, value: V, sizeBytes?: number): void {\n const size = sizeBytes ?? this.estimateSize(value);\n\n // Check if key exists - update in place\n const existing = this.cache.get(key);\n if (existing) {\n this.currentSize -= existing.size;\n existing.value = value;\n existing.size = size;\n existing.createdAt = Date.now();\n this.currentSize += size;\n this.moveToFront(existing);\n return;\n }\n\n // Evict if necessary\n while (\n (this.cache.size >= this.maxEntries || this.currentSize + size > this.maxSize) &&\n this.tail\n ) {\n this.evictLRU();\n }\n\n // Create new node\n const node: LRUNode<K, V> = {\n key,\n value,\n prev: null,\n next: this.head,\n size,\n createdAt: Date.now(),\n accessCount: 1,\n };\n\n // Insert at front\n if (this.head) {\n this.head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n\n this.cache.set(key, node);\n this.currentSize += size;\n }\n\n /**\n * Check if key exists - O(1)\n */\n has(key: K): boolean {\n const node = this.cache.get(key);\n if (!node) return false;\n\n // Check TTL\n if (this.ttlMs > 0 && Date.now() - node.createdAt > this.ttlMs) {\n this.delete(key);\n return false;\n }\n\n return true;\n }\n\n /**\n * Delete from cache - O(1)\n */\n delete(key: K): boolean {\n const node = this.cache.get(key);\n if (!node) return false;\n\n this.removeNode(node);\n this.cache.delete(key);\n this.currentSize -= node.size;\n return true;\n }\n\n /**\n * Clear all entries\n */\n clear(): void {\n if (this.onEvict) {\n for (const [key, node] of this.cache) {\n this.onEvict(key, node.value);\n }\n }\n this.cache.clear();\n this.head = null;\n this.tail = null;\n this.currentSize = 0;\n }\n\n /**\n * Get cache stats\n */\n stats(): {\n entries: number;\n sizeBytes: number;\n maxEntries: number;\n maxSizeBytes: number;\n hitRate: number;\n } {\n let totalAccess = 0;\n for (const node of this.cache.values()) {\n totalAccess += node.accessCount;\n }\n\n return {\n entries: this.cache.size,\n sizeBytes: this.currentSize,\n maxEntries: this.maxEntries,\n maxSizeBytes: this.maxSize,\n hitRate: this.cache.size > 0 ? totalAccess / this.cache.size : 0,\n };\n }\n\n /**\n * Get all keys (for iteration)\n */\n keys(): IterableIterator<K> {\n return this.cache.keys();\n }\n\n /**\n * Get size\n */\n get size(): number {\n return this.cache.size;\n }\n\n // Private methods\n\n private moveToFront(node: LRUNode<K, V>): void {\n if (node === this.head) return;\n\n // Remove from current position\n this.removeNode(node);\n\n // Insert at front\n node.prev = null;\n node.next = this.head;\n if (this.head) {\n this.head.prev = node;\n }\n this.head = node;\n if (!this.tail) {\n this.tail = node;\n }\n }\n\n private removeNode(node: LRUNode<K, V>): void {\n if (node.prev) {\n node.prev.next = node.next;\n } else {\n this.head = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n } else {\n this.tail = node.prev;\n }\n }\n\n private evictLRU(): void {\n if (!this.tail) return;\n\n const evicted = this.tail;\n this.removeNode(evicted);\n this.cache.delete(evicted.key);\n this.currentSize -= evicted.size;\n\n if (this.onEvict) {\n this.onEvict(evicted.key, evicted.value);\n }\n }\n\n private estimateSize(value: V): number {\n if (value === null || value === undefined) return 8;\n if (typeof value === 'string') return value.length * 2;\n if (typeof value === 'number') return 8;\n if (typeof value === 'boolean') return 4;\n if (ArrayBuffer.isView(value)) return value.byteLength;\n if (Array.isArray(value)) {\n return value.reduce((acc, v) => acc + this.estimateSize(v), 64);\n }\n if (typeof value === 'object') {\n return JSON.stringify(value).length * 2;\n }\n return 64;\n }\n}\n\n// ============================================================================\n// Formula AST Cache with WeakMap (GC-friendly)\n// ============================================================================\n\n/**\n * Formula AST cache using WeakMap for automatic GC\n *\n * Stores parsed ASTs keyed by source string reference.\n * When the source string is no longer referenced, the AST is GC'd.\n */\nexport class FormulaASTCache {\n // Use a Map with string keys since TOML content is the key\n // WeakMap only works with object keys\n private readonly astCache: LRUCache<string, unknown>;\n private readonly hashCache: Map<string, string> = new Map();\n\n constructor(maxEntries = 500) {\n this.astCache = new LRUCache<string, unknown>({\n maxEntries,\n ttlMs: 5 * 60 * 1000, // 5 minute TTL\n });\n }\n\n /**\n * Get cached AST for formula content\n */\n get(content: string): unknown | undefined {\n const hash = this.hashContent(content);\n return this.astCache.get(hash);\n }\n\n /**\n * Cache AST for formula content\n */\n set(content: string, ast: unknown): void {\n const hash = this.hashContent(content);\n this.astCache.set(hash, ast);\n }\n\n /**\n * Check if content has cached AST\n */\n has(content: string): boolean {\n const hash = this.hashContent(content);\n return this.astCache.has(hash);\n }\n\n /**\n * Clear cache\n */\n clear(): void {\n this.astCache.clear();\n this.hashCache.clear();\n }\n\n /**\n * Get stats\n */\n stats(): { entries: number; sizeBytes: number } {\n const cacheStats = this.astCache.stats();\n return {\n entries: cacheStats.entries,\n sizeBytes: cacheStats.sizeBytes,\n };\n }\n\n // Simple hash for content deduplication\n private hashContent(content: string): string {\n const cached = this.hashCache.get(content);\n if (cached) return cached;\n\n // FNV-1a hash\n let hash = 2166136261;\n for (let i = 0; i < content.length; i++) {\n hash ^= content.charCodeAt(i);\n hash = (hash * 16777619) >>> 0;\n }\n\n const hashStr = hash.toString(36);\n this.hashCache.set(content, hashStr);\n\n // Limit hash cache size\n if (this.hashCache.size > 10000) {\n const first = this.hashCache.keys().next().value;\n if (first) this.hashCache.delete(first);\n }\n\n return hashStr;\n }\n}\n\n// ============================================================================\n// Result Cache for WASM Operations\n// ============================================================================\n\n/**\n * Result cache for expensive WASM operations\n *\n * Caches:\n * - Formula parse results\n * - Cook results\n * - Graph analysis results (topo sort, cycle detection)\n */\nexport class ResultCache {\n readonly formulas: LRUCache<string, unknown>;\n readonly cooked: LRUCache<string, unknown>;\n readonly beads: LRUCache<string, unknown>;\n readonly convoys: LRUCache<string, unknown>;\n readonly graphs: LRUCache<string, unknown>;\n\n constructor(options: {\n maxFormulaEntries?: number;\n maxCookedEntries?: number;\n maxBeadEntries?: number;\n maxConvoyEntries?: number;\n maxGraphEntries?: number;\n } = {}) {\n this.formulas = new LRUCache({\n maxEntries: options.maxFormulaEntries ?? 200,\n ttlMs: 10 * 60 * 1000, // 10 min\n });\n\n this.cooked = new LRUCache({\n maxEntries: options.maxCookedEntries ?? 500,\n ttlMs: 5 * 60 * 1000, // 5 min\n });\n\n this.beads = new LRUCache({\n maxEntries: options.maxBeadEntries ?? 1000,\n ttlMs: 60 * 1000, // 1 min - beads change frequently\n });\n\n this.convoys = new LRUCache({\n maxEntries: options.maxConvoyEntries ?? 100,\n ttlMs: 30 * 1000, // 30 sec - convoys update often\n });\n\n this.graphs = new LRUCache({\n maxEntries: options.maxGraphEntries ?? 100,\n ttlMs: 2 * 60 * 1000, // 2 min\n });\n }\n\n /**\n * Clear all caches\n */\n clearAll(): void {\n this.formulas.clear();\n this.cooked.clear();\n this.beads.clear();\n this.convoys.clear();\n this.graphs.clear();\n }\n\n /**\n * Get combined stats\n */\n stats(): Record<string, { entries: number; sizeBytes: number }> {\n return {\n formulas: this.formulas.stats(),\n cooked: this.cooked.stats(),\n beads: this.beads.stats(),\n convoys: this.convoys.stats(),\n graphs: this.graphs.stats(),\n };\n }\n}\n\n// ============================================================================\n// Batch Deduplication for Concurrent Requests\n// ============================================================================\n\n/**\n * Pending request tracker for batch deduplication\n */\ninterface PendingRequest<T> {\n promise: Promise<T>;\n resolvers: Array<{\n resolve: (value: T) => void;\n reject: (error: unknown) => void;\n }>;\n startedAt: number;\n}\n\n/**\n * Batch deduplicator for concurrent identical requests\n *\n * When multiple callers request the same operation simultaneously,\n * only one actual execution occurs and all callers receive the same result.\n *\n * @example\n * ```typescript\n * const dedup = new BatchDeduplicator<Formula>();\n *\n * // These concurrent calls will only execute once\n * const [r1, r2, r3] = await Promise.all([\n * dedup.dedupe('formula-1', () => parseFormula(content)),\n * dedup.dedupe('formula-1', () => parseFormula(content)),\n * dedup.dedupe('formula-1', () => parseFormula(content)),\n * ]);\n * ```\n */\nexport class BatchDeduplicator<T> {\n private pending: Map<string, PendingRequest<T>> = new Map();\n private readonly timeoutMs: number;\n\n constructor(timeoutMs = 30000) {\n this.timeoutMs = timeoutMs;\n }\n\n /**\n * Deduplicate concurrent requests for the same key\n */\n async dedupe(key: string, executor: () => Promise<T>): Promise<T> {\n // Check for existing pending request\n const existing = this.pending.get(key);\n if (existing) {\n // Join existing request\n return new Promise<T>((resolve, reject) => {\n existing.resolvers.push({ resolve, reject });\n });\n }\n\n // Create new pending request\n let resolvers: PendingRequest<T>['resolvers'] = [];\n\n const promise = (async () => {\n try {\n const result = await executor();\n\n // Resolve all waiters\n for (const { resolve } of resolvers) {\n resolve(result);\n }\n\n return result;\n } catch (error) {\n // Reject all waiters\n for (const { reject } of resolvers) {\n reject(error);\n }\n throw error;\n } finally {\n this.pending.delete(key);\n }\n })();\n\n const pendingRequest: PendingRequest<T> = {\n promise,\n resolvers,\n startedAt: Date.now(),\n };\n\n this.pending.set(key, pendingRequest);\n\n // Set timeout to prevent stuck requests\n setTimeout(() => {\n const req = this.pending.get(key);\n if (req === pendingRequest) {\n this.pending.delete(key);\n for (const { reject } of req.resolvers) {\n reject(new Error(`Request timed out after ${this.timeoutMs}ms`));\n }\n }\n }, this.timeoutMs);\n\n return promise;\n }\n\n /**\n * Get number of pending requests\n */\n get pendingCount(): number {\n return this.pending.size;\n }\n\n /**\n * Clear all pending requests (reject with error)\n */\n clear(): void {\n for (const [key, req] of this.pending) {\n for (const { reject } of req.resolvers) {\n reject(new Error('Deduplicator cleared'));\n }\n }\n this.pending.clear();\n }\n}\n\n// ============================================================================\n// Preloader for Idle-Time Module Loading\n// ============================================================================\n\n/**\n * Idle-time module preloader\n *\n * Preloads WASM modules and other resources during browser/Node idle time.\n */\nexport class ModulePreloader {\n private readonly preloadQueue: Array<{\n name: string;\n loader: () => Promise<unknown>;\n priority: number;\n }> = [];\n\n private readonly loaded: Map<string, unknown> = new Map();\n private readonly errors: Map<string, Error> = new Map();\n private isPreloading = false;\n private preloadPromise: Promise<void> | null = null;\n\n /**\n * Register a module for preloading\n */\n register(\n name: string,\n loader: () => Promise<unknown>,\n priority = 0\n ): void {\n if (this.loaded.has(name)) return;\n\n this.preloadQueue.push({ name, loader, priority });\n this.preloadQueue.sort((a, b) => b.priority - a.priority);\n }\n\n /**\n * Start preloading during idle time\n */\n async startPreload(): Promise<void> {\n if (this.isPreloading || this.preloadQueue.length === 0) return;\n\n this.isPreloading = true;\n this.preloadPromise = this.runPreload();\n\n try {\n await this.preloadPromise;\n } finally {\n this.isPreloading = false;\n this.preloadPromise = null;\n }\n }\n\n /**\n * Get preloaded module\n */\n get<T>(name: string): T | undefined {\n return this.loaded.get(name) as T | undefined;\n }\n\n /**\n * Check if module is loaded\n */\n isLoaded(name: string): boolean {\n return this.loaded.has(name);\n }\n\n /**\n * Get loading error if any\n */\n getError(name: string): Error | undefined {\n return this.errors.get(name);\n }\n\n /**\n * Get preload status\n */\n status(): {\n queued: number;\n loaded: number;\n errors: number;\n isPreloading: boolean;\n } {\n return {\n queued: this.preloadQueue.length,\n loaded: this.loaded.size,\n errors: this.errors.size,\n isPreloading: this.isPreloading,\n };\n }\n\n /**\n * Wait for preloading to complete\n */\n async waitForPreload(): Promise<void> {\n if (this.preloadPromise) {\n await this.preloadPromise;\n }\n }\n\n private async runPreload(): Promise<void> {\n while (this.preloadQueue.length > 0) {\n const item = this.preloadQueue.shift();\n if (!item) break;\n\n // Use requestIdleCallback in browser, setImmediate in Node\n await this.scheduleIdleTask(async () => {\n try {\n const module = await item.loader();\n this.loaded.set(item.name, module);\n } catch (error) {\n this.errors.set(item.name, error as Error);\n }\n });\n }\n }\n\n private scheduleIdleTask(task: () => Promise<void>): Promise<void> {\n return new Promise((resolve) => {\n if (typeof requestIdleCallback !== 'undefined') {\n requestIdleCallback(async () => {\n await task();\n resolve();\n });\n } else if (typeof setImmediate !== 'undefined') {\n setImmediate(async () => {\n await task();\n resolve();\n });\n } else {\n setTimeout(async () => {\n await task();\n resolve();\n }, 0);\n }\n });\n }\n}\n\n// ============================================================================\n// Connection Pool for CLI Execution\n// ============================================================================\n\n/**\n * Pooled resource wrapper\n */\ninterface PooledResource<T> {\n resource: T;\n inUse: boolean;\n createdAt: number;\n lastUsedAt: number;\n useCount: number;\n}\n\n/**\n * Generic connection/resource pool\n *\n * Manages a pool of reusable resources like CLI processes or connections.\n */\nexport class ResourcePool<T> {\n private pool: PooledResource<T>[] = [];\n private waitQueue: Array<{\n resolve: (resource: T) => void;\n reject: (error: Error) => void;\n timeoutId: NodeJS.Timeout;\n }> = [];\n\n private readonly create: () => Promise<T>;\n private readonly destroy: (resource: T) => Promise<void>;\n private readonly validate: (resource: T) => boolean;\n\n private readonly minSize: number;\n private readonly maxSize: number;\n private readonly acquireTimeoutMs: number;\n private readonly idleTimeoutMs: number;\n\n constructor(options: {\n create: () => Promise<T>;\n destroy: (resource: T) => Promise<void>;\n validate?: (resource: T) => boolean;\n minSize?: number;\n maxSize?: number;\n acquireTimeoutMs?: number;\n idleTimeoutMs?: number;\n }) {\n this.create = options.create;\n this.destroy = options.destroy;\n this.validate = options.validate ?? (() => true);\n this.minSize = options.minSize ?? 1;\n this.maxSize = options.maxSize ?? 10;\n this.acquireTimeoutMs = options.acquireTimeoutMs ?? 5000;\n this.idleTimeoutMs = options.idleTimeoutMs ?? 60000;\n\n // Start idle cleanup timer\n setInterval(() => this.cleanupIdle(), this.idleTimeoutMs / 2);\n }\n\n /**\n * Acquire a resource from the pool\n */\n async acquire(): Promise<T> {\n // Try to find an available resource\n for (const pooled of this.pool) {\n if (!pooled.inUse && this.validate(pooled.resource)) {\n pooled.inUse = true;\n pooled.lastUsedAt = Date.now();\n pooled.useCount++;\n return pooled.resource;\n }\n }\n\n // Create new resource if under max\n if (this.pool.length < this.maxSize) {\n const resource = await this.create();\n const pooled: PooledResource<T> = {\n resource,\n inUse: true,\n createdAt: Date.now(),\n lastUsedAt: Date.now(),\n useCount: 1,\n };\n this.pool.push(pooled);\n return resource;\n }\n\n // Wait for available resource\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n const index = this.waitQueue.findIndex((w) => w.resolve === resolve);\n if (index !== -1) {\n this.waitQueue.splice(index, 1);\n }\n reject(new Error('Acquire timeout'));\n }, this.acquireTimeoutMs);\n\n this.waitQueue.push({ resolve, reject, timeoutId });\n });\n }\n\n /**\n * Release a resource back to the pool\n */\n release(resource: T): void {\n const pooled = this.pool.find((p) => p.resource === resource);\n if (!pooled) return;\n\n pooled.inUse = false;\n pooled.lastUsedAt = Date.now();\n\n // Check if anyone is waiting\n if (this.waitQueue.length > 0) {\n const waiter = this.waitQueue.shift();\n if (waiter && this.validate(resource)) {\n clearTimeout(waiter.timeoutId);\n pooled.inUse = true;\n pooled.useCount++;\n waiter.resolve(resource);\n }\n }\n }\n\n /**\n * Execute with automatic acquire/release\n */\n async withResource<R>(fn: (resource: T) => Promise<R>): Promise<R> {\n const resource = await this.acquire();\n try {\n return await fn(resource);\n } finally {\n this.release(resource);\n }\n }\n\n /**\n * Get pool stats\n */\n stats(): {\n total: number;\n inUse: number;\n available: number;\n waiting: number;\n } {\n const inUse = this.pool.filter((p) => p.inUse).length;\n return {\n total: this.pool.length,\n inUse,\n available: this.pool.length - inUse,\n waiting: this.waitQueue.length,\n };\n }\n\n /**\n * Shutdown the pool\n */\n async shutdown(): Promise<void> {\n // Reject all waiters\n for (const waiter of this.waitQueue) {\n clearTimeout(waiter.timeoutId);\n waiter.reject(new Error('Pool shutdown'));\n }\n this.waitQueue = [];\n\n // Destroy all resources\n for (const pooled of this.pool) {\n try {\n await this.destroy(pooled.resource);\n } catch {\n // Ignore destruction errors\n }\n }\n this.pool = [];\n }\n\n private async cleanupIdle(): Promise<void> {\n const now = Date.now();\n const toRemove: PooledResource<T>[] = [];\n\n for (const pooled of this.pool) {\n if (\n !pooled.inUse &&\n now - pooled.lastUsedAt > this.idleTimeoutMs &&\n this.pool.length > this.minSize\n ) {\n toRemove.push(pooled);\n }\n }\n\n for (const pooled of toRemove) {\n const index = this.pool.indexOf(pooled);\n if (index !== -1) {\n this.pool.splice(index, 1);\n try {\n await this.destroy(pooled.resource);\n } catch {\n // Ignore\n }\n }\n }\n }\n}\n\n// ============================================================================\n// Debounced Progress Updates\n// ============================================================================\n\n/**\n * Debounced update emitter\n *\n * Batches rapid updates and emits at most once per interval.\n */\nexport class DebouncedEmitter<T> {\n private pending: T | null = null;\n private timeoutId: NodeJS.Timeout | null = null;\n private lastEmitTime = 0;\n\n constructor(\n private readonly emit: (value: T) => void,\n private readonly debounceMs: number = 100\n ) {}\n\n /**\n * Schedule an update (debounced)\n */\n update(value: T): void {\n this.pending = value;\n\n const now = Date.now();\n const timeSinceLastEmit = now - this.lastEmitTime;\n\n // If enough time has passed, emit immediately\n if (timeSinceLastEmit >= this.debounceMs) {\n this.flush();\n return;\n }\n\n // Otherwise, schedule for later\n if (!this.timeoutId) {\n this.timeoutId = setTimeout(() => {\n this.flush();\n }, this.debounceMs - timeSinceLastEmit);\n }\n }\n\n /**\n * Flush pending update immediately\n */\n flush(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n\n if (this.pending !== null) {\n this.emit(this.pending);\n this.pending = null;\n this.lastEmitTime = Date.now();\n }\n }\n\n /**\n * Cancel pending update\n */\n cancel(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n this.pending = null;\n }\n}\n\n// ============================================================================\n// Lazy Parser - Parse on Access\n// ============================================================================\n\n/**\n * Lazy value wrapper - computes value on first access\n */\nexport class Lazy<T> {\n private computed = false;\n private value: T | undefined;\n private error: Error | undefined;\n\n constructor(private readonly factory: () => T) {}\n\n /**\n * Get the value (computes on first access)\n */\n get(): T {\n if (!this.computed) {\n try {\n this.value = this.factory();\n } catch (e) {\n this.error = e as Error;\n }\n this.computed = true;\n }\n\n if (this.error) {\n throw this.error;\n }\n\n return this.value!;\n }\n\n /**\n * Check if value has been computed\n */\n get isComputed(): boolean {\n return this.computed;\n }\n\n /**\n * Reset to uncomputed state\n */\n reset(): void {\n this.computed = false;\n this.value = undefined;\n this.error = undefined;\n }\n}\n\n/**\n * Async lazy value wrapper\n */\nexport class AsyncLazy<T> {\n private promise: Promise<T> | null = null;\n private value: T | undefined;\n private resolved = false;\n\n constructor(private readonly factory: () => Promise<T>) {}\n\n /**\n * Get the value (computes on first access)\n */\n async get(): Promise<T> {\n if (this.resolved) {\n return this.value!;\n }\n\n if (!this.promise) {\n this.promise = this.factory().then((v) => {\n this.value = v;\n this.resolved = true;\n return v;\n });\n }\n\n return this.promise;\n }\n\n /**\n * Check if value has been resolved\n */\n get isResolved(): boolean {\n return this.resolved;\n }\n\n /**\n * Reset to uncomputed state\n */\n reset(): void {\n this.promise = null;\n this.value = undefined;\n this.resolved = false;\n }\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport default {\n LRUCache,\n FormulaASTCache,\n ResultCache,\n BatchDeduplicator,\n ModulePreloader,\n ResourcePool,\n DebouncedEmitter,\n Lazy,\n AsyncLazy,\n};\n"]}
@@ -0,0 +1,13 @@
1
+ import {g}from'./chunk-EBOVUTYL.js';import {a,c as c$1}from'./chunk-U74VYTRV.js';import {execFile}from'child_process';import {promisify}from'util';import {z}from'zod';/**
2
+ * @claude-flow/plugin-gastown-bridge v0.1.4
3
+ *
4
+ * WASM-accelerated Gas Town orchestration for Claude Flow V3
5
+ * Bundle optimized: <100KB gzipped total
6
+ *
7
+ * @license MIT
8
+ * @copyright 2024 rUv
9
+ */
10
+ var L=promisify(execFile),A=new a({maxEntries:200,ttlMs:30*1e3}),C=new a({maxEntries:500,ttlMs:300*1e3}),P=new c$1,b=new a({maxEntries:500,ttlMs:60*1e3});function k(s){let e=2166136261;for(let t of s){for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=e*16777619>>>0;e^=255;}return e.toString(36)}var S=z.string().max(1024,"String too long").refine(s=>!/[;&|`$(){}><\n\r\0]/.test(s),"String contains shell metacharacters"),_=z.string().min(1,"Identifier cannot be empty").max(64,"Identifier too long").regex(/^[a-zA-Z][a-zA-Z0-9_-]*$/,"Invalid identifier format"),M=z.number().positive("Gas price must be positive").max(1e6,"Gas price exceeds maximum"),F=z.number().int("Gas limit must be an integer").positive("Gas limit must be positive").max(3e7,"Gas limit exceeds maximum"),R=z.string().regex(/^0x[a-fA-F0-9]{64}$/,"Invalid transaction hash format"),B=z.string().regex(/^0x[a-fA-F0-9]{40}$/,"Invalid address format"),U=z.enum(["mainnet","goerli","sepolia","polygon","arbitrum","optimism","base","local"]),O=z.string().max(512,"Argument too long").refine(s=>!s.includes("\0"),"Argument contains null byte").refine(s=>!/[;&|`$(){}><]/.test(s),"Argument contains shell metacharacters"),c=class extends Error{constructor(t,n,i,r,a){super(t);this.code=n;this.command=i;this.args=r;this.cause=a;this.name="GtBridgeError";}code;command;args;cause},$={debug:(s,e)=>console.debug(`[gt-bridge] ${s}`,e??""),info:(s,e)=>console.info(`[gt-bridge] ${s}`,e??""),warn:(s,e)=>console.warn(`[gt-bridge] ${s}`,e??""),error:(s,e)=>console.error(`[gt-bridge] ${s}`,e??"")},V=new Set(["estimate","status","network","price","tx","simulate","decode","encode","help","version","config"]),I=class s{config;logger;initialized=false;static CACHEABLE_COMMANDS=new Set(["version","status","price","decode","help","config"]);static STATIC_COMMANDS=new Set(["version","help","decode"]);constructor(e,t){this.config={gtPath:e?.gtPath??"gt",cwd:e?.cwd??process.cwd(),timeout:e?.timeout??3e4,maxBuffer:e?.maxBuffer??10*1024*1024,env:e?.env??process.env,defaultNetwork:e?.defaultNetwork??"mainnet"},this.logger=t??$;}async initialize(){try{let e=await this.execGt(["version"]);if(!e.success)throw new c("Failed to verify gt installation","COMMAND_NOT_FOUND","gt",["version"]);this.initialized=!0,this.logger.info("Gas Town bridge initialized",{gtPath:this.config.gtPath,version:e.data});}catch(e){throw e instanceof c?e:new c("Failed to initialize Gas Town bridge","COMMAND_NOT_FOUND","gt",["version"],e)}}async execGt(e,t=false){let n=Date.now(),i=this.validateAndSanitizeArgs(e),r=i[0];if(r&&!V.has(r))throw new c(`Command not allowed: ${r}`,"INVALID_ARGUMENT","gt",i);let a=k(i),m=!t&&r&&s.CACHEABLE_COMMANDS.has(r),o=r&&s.STATIC_COMMANDS.has(r);if(m){let g=o?C.get(a):A.get(a);if(g)return this.logger.debug("Cache hit for gt command",{command:r}),{...g,durationMs:0}}return P.dedupe(a,async()=>{try{this.logger.debug("Executing gt command",{command:"gt",args:i});let{stdout:g,stderr:l}=await L(this.config.gtPath,i,{cwd:this.config.cwd,env:this.config.env,timeout:this.config.timeout,maxBuffer:this.config.maxBuffer,shell:!1,windowsHide:!0}),d=Date.now()-n;l&&l.trim()&&this.logger.warn("gt stderr output",{stderr:l});let y={success:!0,data:g.trim(),command:"gt",args:i,durationMs:d};return m&&y.success&&(o?C.set(a,y):A.set(a,y)),y}catch(g){let l=Date.now()-n,d=g;if(d.killed)throw new c("Command execution timed out","TIMEOUT","gt",i);if(d.code==="ENOENT")throw new c(`gt executable not found at: ${this.config.gtPath}`,"COMMAND_NOT_FOUND","gt",i);return {success:false,error:d.stderr||d.message,command:"gt",args:i,durationMs:l}}})}parseGtOutput(e){if(!e||e.trim()==="")throw new c("Empty output from gt command","INVALID_OUTPUT");let t=k([e]),n=b.get(t);if(n!==void 0)return n;try{let i=JSON.parse(e);return b.set(t,i),i}catch{let i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(i)try{let r=JSON.parse(i[0]);return b.set(t,r),r}catch{throw new c("Failed to parse gt output as JSON","INVALID_OUTPUT")}throw new c("Output is not valid JSON","INVALID_OUTPUT")}}async estimateGas(e){this.ensureInitialized();let t=B.parse(e.to),n=e.network??this.config.defaultNetwork,i=["estimate","--to",t,"--network",n,"--json"];if(e.data){let a=S.parse(e.data);i.push("--data",a);}if(e.value){let a=S.parse(e.value);i.push("--value",a);}if(e.from){let a=B.parse(e.from);i.push("--from",a);}let r=await this.execGt(i);if(!r.success||!r.data)throw new c(r.error??"Gas estimation failed","EXECUTION_FAILED","gt",i);return this.parseGtOutput(r.data)}async getTxStatus(e,t){this.ensureInitialized();let i=["tx","status",R.parse(e),"--network",t??this.config.defaultNetwork,"--json"],r=await this.execGt(i);if(!r.success||!r.data)throw new c(r.error??"Failed to get transaction status","EXECUTION_FAILED","gt",i);return this.parseGtOutput(r.data)}async getNetworkStatus(e){this.ensureInitialized();let t=["network","status","--network",e??this.config.defaultNetwork,"--json"],n=await this.execGt(t);if(!n.success||!n.data)throw new c(n.error??"Failed to get network status","NETWORK_ERROR","gt",t);return this.parseGtOutput(n.data)}async getGasPrice(e){this.ensureInitialized();let t=["price","--network",e??this.config.defaultNetwork,"--json"],n=await this.execGt(t);if(!n.success||!n.data)throw new c(n.error??"Failed to get gas price","EXECUTION_FAILED","gt",t);return this.parseGtOutput(n.data)}async simulate(e){this.ensureInitialized();let t=B.parse(e.to),n=S.parse(e.data),i=e.network??this.config.defaultNetwork,r=["simulate","--to",t,"--data",n,"--network",i,"--json"];e.value&&r.push("--value",S.parse(e.value)),e.from&&r.push("--from",B.parse(e.from)),e.blockNumber!==void 0&&r.push("--block",String(e.blockNumber));let a=await this.execGt(r);if(!a.success||!a.data)throw new c(a.error??"Transaction simulation failed","EXECUTION_FAILED","gt",r);return this.parseGtOutput(a.data)}async decode(e,t){this.ensureInitialized();let i=["decode",S.parse(e),"--json"];if(t){let a=S.parse(t);i.push("--abi",a);}let r=await this.execGt(i);if(!r.success||!r.data)throw new c(r.error??"Failed to decode transaction data","EXECUTION_FAILED","gt",i);return this.parseGtOutput(r.data)}validateAndSanitizeArgs(e){return e.map((t,n)=>{try{return O.parse(t)}catch(i){throw new c(`Invalid argument at index ${n}: ${t}`,"VALIDATION_ERROR","gt",e,i)}})}ensureInitialized(){if(!this.initialized)throw new c("Gas Town bridge not initialized. Call initialize() first.","EXECUTION_FAILED")}isInitialized(){return this.initialized}getConfig(){return {...this.config}}getCacheStats(){return {resultCache:A.stats(),staticCache:C.stats(),parsedCache:b.stats()}}clearCaches(){A.clear(),C.clear(),b.clear();}};function K(s,e){return new I(s,e)}var w=new a({maxEntries:500,ttlMs:30*1e3}),T=new a({maxEntries:200,ttlMs:10*1e3});new c$1;function x(s){let e=2166136261;for(let t of s){for(let n=0;n<t.length;n++)e^=t.charCodeAt(n),e=e*16777619>>>0;e^=255;}return e.toString(36)}var j=z.enum(["beads-wins","agentdb-wins","newest-wins","merge","manual"]),H=z.enum(["to-agentdb","from-agentdb","bidirectional"]),X=z.enum(["pending","in-progress","completed","failed","conflict"]),J=z.object({key:z.string(),value:z.unknown(),namespace:z.string().optional(),metadata:z.record(z.unknown()).optional(),embedding:z.array(z.number()).optional(),createdAt:z.string().datetime().optional(),updatedAt:z.string().datetime().optional(),version:z.number().optional()}),h=class extends Error{constructor(t,n,i,r){super(t);this.code=n;this.details=i;this.cause=r;this.name="SyncBridgeError";}code;details;cause},q={debug:(s,e)=>console.debug(`[sync-bridge] ${s}`,e??""),info:(s,e)=>console.info(`[sync-bridge] ${s}`,e??""),warn:(s,e)=>console.warn(`[sync-bridge] ${s}`,e??""),error:(s,e)=>console.error(`[sync-bridge] ${s}`,e??"")},E=class{bdBridge;agentDB;config;logger;initialized=false;syncState;conflicts=new Map;constructor(e,t,n){this.agentDB=e,this.config={beadsBridge:t?.beadsBridge??{},agentdbNamespace:t?.agentdbNamespace??"beads",conflictStrategy:t?.conflictStrategy??"newest-wins",batchSize:t?.batchSize??100,preserveEmbeddings:t?.preserveEmbeddings??true,syncMetadata:t?.syncMetadata??true},this.logger=n??q,this.bdBridge=g(this.config.beadsBridge,{debug:(i,r)=>this.logger.debug(`[bd] ${i}`,r),info:(i,r)=>this.logger.info(`[bd] ${i}`,r),warn:(i,r)=>this.logger.warn(`[bd] ${i}`,r),error:(i,r)=>this.logger.error(`[bd] ${i}`,r)}),this.syncState={lastSyncTime:new Date(0).toISOString(),pendingConflicts:[],version:1};}async initialize(){try{await this.bdBridge.initialize();let e=await this.agentDB.retrieve("_sync_state",this.config.agentdbNamespace);if(e?.value){let t=e.value;this.syncState={lastSyncTime:t.lastSyncTime??new Date(0).toISOString(),lastBeadId:t.lastBeadId,lastAgentDBKey:t.lastAgentDBKey,pendingConflicts:t.pendingConflicts??[],version:(t.version??0)+1};}this.initialized=!0,this.logger.info("Sync bridge initialized",{namespace:this.config.agentdbNamespace,conflictStrategy:this.config.conflictStrategy,syncState:this.syncState});}catch(e){throw new h("Failed to initialize sync bridge","NOT_INITIALIZED",void 0,e)}}async syncToAgentDB(e){this.ensureInitialized();let t=Date.now(),n={success:true,direction:"to-agentdb",synced:0,created:0,updated:0,deleted:0,conflicts:0,errors:[],durationMs:0,timestamp:new Date().toISOString()};this.logger.info(`Starting sync to AgentDB: ${e.length} beads`);for(let i=0;i<e.length;i+=this.config.batchSize){let a=e.slice(i,i+this.config.batchSize).map(async o=>{let g=this.beadToKey(o),l=x([g,this.config.agentdbNamespace]);if(w.has(l))return {bead:o,key:g,existing:w.get(l)};let d=await this.agentDB.retrieve(g,this.config.agentdbNamespace);return w.set(l,d),{bead:o,key:g,existing:d}}),m=await Promise.all(a);for(let{bead:o,key:g,existing:l}of m)try{if(l){let y=x([o.id,o.content,l.key]),D=T.get(y);if(D===void 0&&(D=await this.detectConflict(o,l),T.set(y,D)),D&&!await this.resolveConflict(o,l)){n.conflicts++;continue}n.updated++;}else n.created++;await this.agentDB.store(g,this.beadToAgentDBValue(o),this.config.agentdbNamespace,this.buildMetadata(o));let d=x([g,this.config.agentdbNamespace]);w.delete(d),n.synced++;}catch(d){n.errors.push({id:o.id,error:d instanceof Error?d.message:String(d)}),this.logger.error(`Failed to sync bead ${o.id}`,{error:d});}}return this.syncState.lastSyncTime=n.timestamp,e.length>0&&(this.syncState.lastBeadId=e[e.length-1]?.id),await this.saveSyncState(),n.durationMs=Date.now()-t,n.success=n.errors.length===0&&n.conflicts===0,this.logger.info("Sync to AgentDB complete",{synced:n.synced,created:n.created,updated:n.updated,conflicts:n.conflicts,errors:n.errors.length,durationMs:n.durationMs}),n}async syncFromAgentDB(){this.ensureInitialized();let e=Date.now(),t=[];this.logger.info("Starting sync from AgentDB");try{let n=0,i=!0;for(;i;){let a=await this.agentDB.list(this.config.agentdbNamespace,this.config.batchSize,n);if(a.length===0){i=!1;continue}for(let m of a)if(m.key!=="_sync_state")try{let o=this.agentDBToBead(m);o&&t.push(o);}catch(o){this.logger.warn(`Failed to convert AgentDB entry to bead: ${m.key}`,{error:o instanceof Error?o.message:String(o)});}n+=a.length,i=a.length===this.config.batchSize;}this.syncState.lastSyncTime=new Date().toISOString(),await this.saveSyncState();let r=Date.now()-e;return this.logger.info("Sync from AgentDB complete",{beads:t.length,durationMs:r}),t}catch(n){throw new h("Failed to sync from AgentDB","SYNC_FAILED",void 0,n)}}async syncBidirectional(){this.ensureInitialized(),this.logger.info("Starting bidirectional sync");let e=await this.bdBridge.listBeads({after:this.syncState.lastSyncTime}),t=await this.syncToAgentDB(e),n=await this.syncFromAgentDB();return {toAgentDB:t,fromAgentDB:n}}getPendingConflicts(){return Array.from(this.conflicts.values()).filter(e=>e.resolution==="pending"||!e.resolution)}async resolveConflictManually(e,t,n){let i=this.conflicts.get(e);if(!i)throw new h(`No conflict found for bead: ${e}`,"VALIDATION_ERROR");let r=this.beadToKey(i.beadData);switch(t){case "beads":await this.agentDB.store(r,this.beadToAgentDBValue(i.beadData),this.config.agentdbNamespace,this.buildMetadata(i.beadData));break;case "agentdb":break;case "merged":if(!n)throw new h("Merged data required for merge resolution","VALIDATION_ERROR");let m={...i.beadData,...n};await this.agentDB.store(r,this.beadToAgentDBValue(m),this.config.agentdbNamespace,this.buildMetadata(m));break}i.resolution=t,i.resolvedAt=new Date().toISOString();let a=this.syncState.pendingConflicts.indexOf(e);a!==-1&&(this.syncState.pendingConflicts.splice(a,1),await this.saveSyncState()),this.logger.info(`Conflict resolved for bead ${e}`,{resolution:t});}getSyncState(){return {...this.syncState}}async getSyncStats(){return this.ensureInitialized(),{agentdbCount:(await this.agentDB.getNamespaceStats(this.config.agentdbNamespace)).count,lastSyncTime:this.syncState.lastSyncTime,pendingConflicts:this.syncState.pendingConflicts.length,syncVersion:this.syncState.version}}beadToKey(e){return `bead:${e.id}`}beadToAgentDBValue(e){let t={id:e.id,type:e.type,content:e.content,timestamp:e.timestamp,parentId:e.parentId,threadId:e.threadId,agentId:e.agentId,tags:e.tags,hash:e.hash};return this.config.preserveEmbeddings&&e.embedding&&(t.embedding=e.embedding),this.config.syncMetadata&&e.metadata&&(t.metadata=e.metadata),t}buildMetadata(e){return {beadType:e.type,threadId:e.threadId,agentId:e.agentId,syncedAt:new Date().toISOString(),syncVersion:this.syncState.version}}agentDBToBead(e){if(!e.value||typeof e.value!="object")return null;let t=e.value;return !t.id||!t.type||!t.content?null:{id:String(t.id),type:t.type,content:String(t.content),timestamp:t.timestamp,parentId:t.parentId,threadId:t.threadId,agentId:t.agentId,tags:t.tags,metadata:t.metadata,embedding:t.embedding,hash:t.hash}}async detectConflict(e,t){if(!t.value||typeof t.value!="object")return false;let n=t.value;if(n.content===e.content)return false;let i=e.timestamp?new Date(e.timestamp).getTime():0,r=t.updatedAt?new Date(t.updatedAt).getTime():0;return i>r?false:r>i&&n.content!==e.content}async resolveConflict(e,t){let n={beadId:e.id,beadData:e,agentdbData:t,conflictType:"update"};switch(this.config.conflictStrategy){case "beads-wins":return n.resolution="beads",this.conflicts.set(e.id,n),true;case "agentdb-wins":return n.resolution="agentdb",this.conflicts.set(e.id,n),false;case "newest-wins":{let i=e.timestamp?new Date(e.timestamp).getTime():0,r=t.updatedAt?new Date(t.updatedAt).getTime():0;return i>=r?(n.resolution="beads",this.conflicts.set(e.id,n),true):(n.resolution="agentdb",this.conflicts.set(e.id,n),false)}case "merge":{let i=t.value,r={...e,content:`${e.content}
11
+ ---
12
+ ${i.content}`,metadata:{...e.metadata,merged:true,mergedAt:new Date().toISOString()}};return n.beadData=r,n.resolution="merged",this.conflicts.set(e.id,n),true}case "manual":return n.resolution="pending",this.conflicts.set(e.id,n),this.syncState.pendingConflicts.push(e.id),false;default:return false}}async saveSyncState(){try{await this.agentDB.store("_sync_state",this.syncState,this.config.agentdbNamespace,{type:"sync-state"});}catch(e){this.logger.error("Failed to save sync state",{error:e instanceof Error?e.message:String(e)});}}ensureInitialized(){if(!this.initialized)throw new h("Sync bridge not initialized. Call initialize() first.","NOT_INITIALIZED")}isInitialized(){return this.initialized}getBeadsBridge(){return this.bdBridge}getCacheStats(){return {agentDBLookupCache:w.stats(),conflictCache:T.stats()}}clearCaches(){w.clear(),T.clear();}};function Z(s,e,t){return new E(s,e,t)}export{S as a,_ as b,M as c,F as d,R as e,B as f,U as g,O as h,c as i,I as j,K as k,j as l,H as m,X as n,J as o,h as p,E as q,Z as r};//# sourceMappingURL=chunk-UJ56JMNG.js.map
13
+ //# sourceMappingURL=chunk-UJ56JMNG.js.map