1 line
618 KiB
Plaintext
1 line
618 KiB
Plaintext
{"version":3,"sources":["../src/types.ts","../src/errors.ts","../src/memory/pool.ts","../src/memory/arena.ts","../src/memory/monitor.ts","../src/memory/lazy.ts","../src/memory/index.ts","../src/formula/executor.ts","../src/convoy/tracker.ts","../src/convoy/observer.ts","../src/wasm-loader.ts","../src/mcp-tools.ts","../src/validators.ts","../src/sanitizers.ts","../src/index.ts"],"names":["DEFAULT_CONFIG","GasTownErrorCodes","BeadStatusSchema","z","BeadSchema","CreateBeadOptionsSchema","FormulaTypeSchema","StepSchema","LegSchema","VarSchema","SynthesisSchema","TemplateSchema","AspectSchema","FormulaSchema","ConvoyStatusSchema","ConvoyProgressSchema","ConvoySchema","CreateConvoyOptionsSchema","GasTownAgentRoleSchema","SlingTargetSchema","SlingOptionsSchema","SyncDirectionSchema","GasTownConfigSchema","validateBead","input","validateCreateBeadOptions","validateFormula","validateConvoy","validateCreateConvoyOptions","validateSlingOptions","validateConfig","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","stepResultCache","LRUCache","cookCache","cookDedup","BatchDeduplicator","fetchDedup","WorkStealingQueue","numWorkers","item","minQueue","minLen","len","workerId","ownQueue","victimId","victimQueue","q","hashKey","parts","hash","part","defaultLogger","msg","meta","JsFallbackWasmLoader","content","lines","description","version","steps","vars","currentSection","currentStep","line","trimmed","sectionMatch","kvMatch","substituteVars","text","match","varName","cookedSteps","cookedLegs","leg","formulas","varsArray","stepMap","inDegree","adjacency","dep","adj","queue","degree","stepId","sorted","current","neighbor","newDegree","visited","recStack","dfs","path","cycle","FormulaExecutor","gtBridge","wasmLoader","logger","executionId","randomUUID","abortController","signal","cooked","legs","totalSteps","progress","progressEmitter","DebouncedEmitter","p","orderedSteps","previousResults","maxParallel","stepDeps","stepById","stepIndex","completed","inProgress","workQueue","getReadySteps","ready","deps","d","readySteps","batchSize","batch","resolve","batchPromises","idx","result","failedResult","batchResults","emitter","varKeys","varValues","k","cacheKey","cached","cookedFormula","molecules","moleculeIdMap","orderedLegs","a","moleculeId","pooledMol","dependencies","need","depMoleculeId","stepCacheKey","cachedResult","depResult","stepResult","controller","missing","varDef","signals","createFormulaExecutor","ConvoyIdSchema","IssueIdsSchema","ConvoyTracker","issues","validatedOptions","verifiedIssues","uuidv4","now","store","existingSet","newIssues","id","updatedIssues","updatedConvoy","removeSet","remainingIssues","removedIssues","previousProgress","previousStatus","completedConvoy","cancelledConvoy","pausedConvoy","resumedConvoy","status","convoys","issueIds","beads","beadMap","closed","blocked","issueId","blockerId","blocker","verified","cliBead","timer","extra","event","createConvoyTracker","ConvoyObserver","initialInterval","interval","callbacks","mergedCallback","allComplete","cb","openIssues","inProgressIssues","hasCycles","cycleIssues","readyIssues","blockedIssues","wasmResult","jsResult","wasmNodes","resultJson","watcher","currentState","stateChanged","batchKey","uncachedIds","fetchPromises","pooledBead","beadsJson","cycleJson","readyJson","readyIds","levelsJson","levels","levelMap","levelStr","ids","closedSet","convoySet","blockers","internalBlockers","convoyIssues","changed","createConvoyObserver","createLazyConvoyObserver","observer","getLazyObserverStats","lazyObserver","wasmAvailable","performanceLog","lazyFormulaWasm","isWasmAvailable","lazyGnnWasm","formulaParseCache","topoSortCache","astCache","FormulaASTCache","parseDedup","graphDedup","modulePreloader","ModulePreloader","hashContent","hashCookKey","varsStr","v","hashGraphKey","nodes","edges","nodesStr","edgesStr","hasInstantiate","hasCompile","hasModule","recordTiming","operation","usedWasm","timing","getPerformanceLog","clearPerformanceLog","loadFormulaWasm","loadGnnWasm","isFormulaWasmLoaded","isGnnWasmLoaded","getWasmLazyStats","parseTomlFallback","cookFormulaFallback","substituteObject","topoSortFallback","graph","node","edge","hasCycle","cycleNodes","n","detectCyclesFallback","WHITE","GRAY","BLACK","colors","cycleStart","criticalPathFallback","weights","topoResult","weightMap","w","reverseGraph","earliest","maxPredecessor","pred","predEnd","latest","reverseSorted","totalDuration","successors","minSuccessor","succ","slack","criticalNodes","nodeSlack","parseFormula","wasmModule","cookFormula","cookBatch","topoSort","detectCycles","criticalPath","parsed","preloadWasmModules","formulaResult","gnnResult","getWasmVersions","formulaModule","gnnModule","resetWasmCache","scheduleIdlePreload","getCacheStats","parseCacheStats","cookCacheStats","topoSortCacheStats","astCacheStats","preloaderStatus","clearAllCaches","wasm_loader_default","BeadsCreateInputSchema","BeadsReadyInputSchema","BeadsShowInputSchema","BeadsDepInputSchema","BeadsSyncInputSchema","ConvoyCreateInputSchema","ConvoyStatusInputSchema","ConvoyTrackInputSchema","FormulaListInputSchema","FormulaCookInputSchema","FormulaExecuteInputSchema","FormulaCreateInputSchema","SlingInputSchema","AgentsInputSchema","MailInputSchema","WasmParseFormulaInputSchema","WasmResolveDepsInputSchema","WasmCookBatchInputSchema","WasmMatchPatternInputSchema","WasmOptimizeConvoyInputSchema","beadsCreateTool","validated","errorMessage","beadsReadyTool","beadsShowTool","dependents","beadsDepTool","beadsSyncTool","syncService","pulled","pushed","conflicts","pullResult","pushResult","convoyCreateTool","convoyStatusTool","convoyTrackTool","formulaListTool","formulaCookTool","wasmUsed","formulaWasm","formulaExecuteTool","beads_created","formulaCreateTool","mappedSteps","slingTool","agentsTool","mailTool","messages","sent_id","wasmParseFormulaTool","wasmStart","ast","wasmDuration","wasmResolveDepsTool","depWasm","resolution","wasmCookBatchTool","wasmMatchPatternTool","matches","wasmOptimizeConvoyTool","optimization","gasTownBridgeTools","toolHandlers","toolCategories","getTool","t","getToolsByLayer","layer","SHELL_METACHARACTERS","PATH_TRAVERSAL_PATTERNS","BEAD_ID_PATTERN","FORMULA_NAME_PATTERN","UUID_PATTERN","CONVOY_HASH_PATTERN","MAX_LENGTHS","BeadIdSchema","val","FormulaNameSchema","GtArgumentSchema","GtArgsSchema","SafeStringSchema","RigNameSchema","PrioritySchema","LabelsSchema","validateBeadId","validateFormulaName","validateConvoyId","validateGtArgs","containsShellMetacharacters","containsPathTraversal","isSafeArgument","isValidBeadId","isValidFormulaName","isValidConvoyId","MAX_OUTPUT_SIZE","SENSITIVE_FIELD_PATTERNS","REDACTED_FIELDS","RawBeadSchema","RawFormulaSchema","RawConvoySchema","sanitizeBeadOutput","raw","redactSensitiveFields","data","sanitizeString","l","parseDate","sanitizeFormulaOutput","r","sanitizeMetadata","sanitizeVarsFromRaw","sanitizePath","sanitizeConvoyOutput","sanitizeBeadsListOutput","maxLength","date","metadata","sanitizedKey","DEFAULT_PLUGIN_CONFIG","GuppAdapterStub","_options","_beads","createPluginLogger","currentLevel","log","msgLevel","prefix","WasmLoaderAdapter","GasTownBridgePlugin","_context","tool","base","override","versions","exec","promisify","execAsync","createGtBridge","createBdBridge","stubAgentDB","createSyncBridge","storage","namespace","ns","_query","entries","offset","values","lastUpdated","toolContext","zodSchema","schema","shape","properties","required","typeName","jsonType","pluginContext","gasTownConfig","gt","bd","tracker","opts","bdOpts","_rig","_labels","action","child","parent","_detailed","_type","_includeBuiltin","_formula","_vars","_targetAgent","_dryRun","_opts","target","priority","_role","_includeInactive","to","subject","body","mailId","m","sync","_namespace","allBeads","_validate","_isContent","_continueOnError","parsedFormulas","f","simpleSimilarity","query","candidates","threshold","candidate","strategy","_constraints","executionOrder","setA","setB","intersection","x","union","payload","activeConvoys","createGasTownBridgePlugin","src_default"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Gas Town Bridge Plugin - Type Definitions\n *\n * Core types for Gas Town integration including:\n * - Beads: Git-backed issue tracking with graph semantics\n * - Formulas: TOML-defined workflows (convoy, workflow, expansion, aspect)\n * - Convoys: Work-order tracking for slung work\n * - Steps/Legs: Workflow components\n * - Variables: Template substitution\n *\n * @module gastown-bridge/types\n * @version 0.1.0\n */\n\nimport { z } from 'zod';\n\n// ============================================================================\n// Bead Types (matching Gas Town's beads.db schema)\n// ============================================================================\n\n/**\n * Bead status enumeration\n */\nexport type BeadStatus = 'open' | 'in_progress' | 'closed';\n\n/**\n * Bead - Git-backed issue with graph semantics\n */\nexport interface Bead {\n /** Unique identifier (e.g., \"gt-abc12\") */\n readonly id: string;\n /** Issue title */\n readonly title: string;\n /** Issue description */\n readonly description: string;\n /** Current status */\n readonly status: BeadStatus;\n /** Priority (0 = highest) */\n readonly priority: number;\n /** Issue labels */\n readonly labels: string[];\n /** Parent bead ID (for epics) */\n readonly parentId?: string;\n /** Creation timestamp */\n readonly createdAt: Date;\n /** Last update timestamp */\n readonly updatedAt: Date;\n /** Assigned agent/user */\n readonly assignee?: string;\n /** Gas Town rig name */\n readonly rig?: string;\n /** Blocking beads (dependencies) */\n readonly blockedBy?: string[];\n /** Beads this blocks */\n readonly blocks?: string[];\n}\n\n/**\n * Options for creating a new bead\n */\nexport interface CreateBeadOptions {\n readonly title: string;\n readonly description?: string;\n readonly priority?: number;\n readonly labels?: string[];\n readonly parent?: string;\n readonly rig?: string;\n readonly assignee?: string;\n}\n\n/**\n * Bead dependency relationship\n */\nexport interface BeadDependency {\n readonly child: string;\n readonly parent: string;\n readonly type: 'blocks' | 'relates' | 'duplicates';\n}\n\n// ============================================================================\n// Formula Types (matching Gas Town's formula/types.go)\n// ============================================================================\n\n/**\n * Formula type enumeration\n */\nexport type FormulaType = 'convoy' | 'workflow' | 'expansion' | 'aspect';\n\n/**\n * Workflow step definition\n */\nexport interface Step {\n /** Step identifier */\n readonly id: string;\n /** Step title */\n readonly title: string;\n /** Step description */\n readonly description: string;\n /** Dependencies - step IDs that must complete first */\n readonly needs?: string[];\n /** Estimated duration in minutes */\n readonly duration?: number;\n /** Required capabilities */\n readonly requires?: string[];\n /** Step metadata */\n readonly metadata?: Record<string, unknown>;\n}\n\n/**\n * Convoy leg definition\n */\nexport interface Leg {\n /** Leg identifier */\n readonly id: string;\n /** Leg title */\n readonly title: string;\n /** Focus area */\n readonly focus: string;\n /** Leg description */\n readonly description: string;\n /** Assigned agent type */\n readonly agent?: string;\n /** Leg sequence order */\n readonly order?: number;\n}\n\n/**\n * Formula variable definition\n */\nexport interface Var {\n /** Variable name */\n readonly name: string;\n /** Variable description */\n readonly description?: string;\n /** Default value */\n readonly default?: string;\n /** Whether the variable is required */\n readonly required?: boolean;\n /** Validation pattern (regex) */\n readonly pattern?: string;\n /** Allowed values */\n readonly enum?: string[];\n}\n\n/**\n * Synthesis definition (convoy result combination)\n */\nexport interface Synthesis {\n /** Synthesis strategy */\n readonly strategy: 'merge' | 'sequential' | 'parallel';\n /** Output format */\n readonly format?: string;\n /** Synthesis description */\n readonly description?: string;\n}\n\n/**\n * Template for expansion formulas\n */\nexport interface Template {\n /** Template name */\n readonly name: string;\n /** Template content with variable placeholders */\n readonly content: string;\n /** Output path pattern */\n readonly outputPath?: string;\n}\n\n/**\n * Aspect definition for cross-cutting concerns\n */\nexport interface Aspect {\n /** Aspect name */\n readonly name: string;\n /** Pointcut expression */\n readonly pointcut: string;\n /** Advice to apply */\n readonly advice: string;\n /** Aspect type */\n readonly type: 'before' | 'after' | 'around';\n}\n\n/**\n * Formula - TOML-defined workflow specification\n */\nexport interface Formula {\n /** Formula name */\n readonly name: string;\n /** Formula description */\n readonly description: string;\n /** Formula type */\n readonly type: FormulaType;\n /** Formula version */\n readonly version: number;\n\n // Convoy-specific fields\n /** Convoy legs */\n readonly legs?: Leg[];\n /** Synthesis configuration */\n readonly synthesis?: Synthesis;\n\n // Workflow-specific fields\n /** Workflow steps */\n readonly steps?: Step[];\n /** Variable definitions */\n readonly vars?: Record<string, Var>;\n\n // Expansion-specific fields\n /** Expansion templates */\n readonly templates?: Template[];\n\n // Aspect-specific fields\n /** Cross-cutting aspects */\n readonly aspects?: Aspect[];\n\n /** Formula metadata */\n readonly metadata?: Record<string, unknown>;\n}\n\n/**\n * Cooked formula with variables substituted\n */\nexport interface CookedFormula extends Formula {\n /** When the formula was cooked */\n readonly cookedAt: Date;\n /** Variables used for cooking */\n readonly cookedVars: Record<string, string>;\n /** Original (uncooked) formula name */\n readonly originalName: string;\n}\n\n// ============================================================================\n// Convoy Types\n// ============================================================================\n\n/**\n * Convoy status enumeration\n */\nexport type ConvoyStatus = 'active' | 'landed' | 'failed' | 'paused';\n\n/**\n * Convoy progress tracking\n */\nexport interface ConvoyProgress {\n /** Total issues tracked */\n readonly total: number;\n /** Closed issues */\n readonly closed: number;\n /** In-progress issues */\n readonly inProgress: number;\n /** Blocked issues */\n readonly blocked: number;\n}\n\n/**\n * Convoy - Work order tracking for slung work\n */\nexport interface Convoy {\n /** Convoy identifier */\n readonly id: string;\n /** Convoy name */\n readonly name: string;\n /** Tracked issue IDs */\n readonly trackedIssues: string[];\n /** Convoy status */\n readonly status: ConvoyStatus;\n /** Start timestamp */\n readonly startedAt: Date;\n /** Completion timestamp */\n readonly completedAt?: Date;\n /** Progress tracking */\n readonly progress: ConvoyProgress;\n /** Formula used to create convoy */\n readonly formula?: string;\n /** Description */\n readonly description?: string;\n}\n\n/**\n * Options for creating a convoy\n */\nexport interface CreateConvoyOptions {\n readonly name: string;\n readonly issues: string[];\n readonly description?: string;\n readonly formula?: string;\n}\n\n// ============================================================================\n// Agent Types (Gas Town specific)\n// ============================================================================\n\n/**\n * Gas Town agent role\n */\nexport type GasTownAgentRole =\n | 'mayor'\n | 'polecat'\n | 'refinery'\n | 'witness'\n | 'deacon'\n | 'dog'\n | 'crew';\n\n/**\n * Gas Town agent\n */\nexport interface GasTownAgent {\n /** Agent name */\n readonly name: string;\n /** Agent role */\n readonly role: GasTownAgentRole;\n /** Rig assignment */\n readonly rig?: string;\n /** Current status */\n readonly status: 'active' | 'idle' | 'busy';\n /** Agent capabilities */\n readonly capabilities?: string[];\n}\n\n// ============================================================================\n// Sling Types\n// ============================================================================\n\n/**\n * Sling target type\n */\nexport type SlingTarget = 'polecat' | 'crew' | 'mayor';\n\n/**\n * Sling operation options\n */\nexport interface SlingOptions {\n readonly beadId: string;\n readonly target: SlingTarget;\n readonly formula?: string;\n readonly priority?: number;\n}\n\n// ============================================================================\n// Mail Types\n// ============================================================================\n\n/**\n * Gas Town mail message\n */\nexport interface GasTownMail {\n readonly id: string;\n readonly from: string;\n readonly to: string;\n readonly subject: string;\n readonly body: string;\n readonly sentAt: Date;\n readonly read: boolean;\n}\n\n// ============================================================================\n// Sync Types\n// ============================================================================\n\n/**\n * Sync direction\n */\nexport type SyncDirection = 'pull' | 'push' | 'both';\n\n/**\n * Sync result\n */\nexport interface SyncResult {\n readonly direction: SyncDirection;\n readonly pulled: number;\n readonly pushed: number;\n readonly errors: string[];\n readonly timestamp: Date;\n}\n\n// ============================================================================\n// Graph Types (for dependency resolution)\n// ============================================================================\n\n/**\n * Dependency graph for beads\n */\nexport interface BeadGraph {\n readonly nodes: string[];\n readonly edges: Array<[string, string]>;\n}\n\n/**\n * Topological sort result\n */\nexport interface TopoSortResult {\n readonly sorted: string[];\n readonly hasCycle: boolean;\n readonly cycleNodes?: string[];\n}\n\n/**\n * Critical path result\n */\nexport interface CriticalPathResult {\n readonly path: string[];\n readonly totalDuration: number;\n readonly slack: Map<string, number>;\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Gas Town Bridge plugin configuration\n */\nexport interface GasTownConfig {\n /** Path to Gas Town installation */\n readonly townRoot: string;\n\n /** Enable Beads sync with AgentDB */\n readonly enableBeadsSync: boolean;\n /** Sync interval in milliseconds */\n readonly syncInterval: number;\n\n /** Enable native formula parsing (WASM) */\n readonly nativeFormulas: boolean;\n\n /** Enable convoy tracking */\n readonly enableConvoys: boolean;\n\n /** Auto-create beads from Claude Flow tasks */\n readonly autoCreateBeads: boolean;\n\n /** Enable GUPP integration */\n readonly enableGUPP: boolean;\n /** GUPP check interval in milliseconds */\n readonly guppCheckInterval: number;\n\n /** CLI timeout in milliseconds */\n readonly cliTimeout: number;\n}\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG: GasTownConfig = {\n townRoot: '~/gt',\n enableBeadsSync: true,\n syncInterval: 60000,\n nativeFormulas: true,\n enableConvoys: true,\n autoCreateBeads: false,\n enableGUPP: false,\n guppCheckInterval: 5000,\n cliTimeout: 30000,\n};\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\n/**\n * Gas Town Bridge error codes\n */\nexport const GasTownErrorCodes = {\n CLI_NOT_FOUND: 'GT_CLI_NOT_FOUND',\n CLI_TIMEOUT: 'GT_CLI_TIMEOUT',\n CLI_ERROR: 'GT_CLI_ERROR',\n BEAD_NOT_FOUND: 'GT_BEAD_NOT_FOUND',\n CONVOY_NOT_FOUND: 'GT_CONVOY_NOT_FOUND',\n FORMULA_NOT_FOUND: 'GT_FORMULA_NOT_FOUND',\n FORMULA_PARSE_ERROR: 'GT_FORMULA_PARSE_ERROR',\n WASM_NOT_INITIALIZED: 'GT_WASM_NOT_INITIALIZED',\n SYNC_ERROR: 'GT_SYNC_ERROR',\n DEPENDENCY_CYCLE: 'GT_DEPENDENCY_CYCLE',\n INVALID_SLING_TARGET: 'GT_INVALID_SLING_TARGET',\n} as const;\n\nexport type GasTownErrorCode = (typeof GasTownErrorCodes)[keyof typeof GasTownErrorCodes];\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\n/**\n * Bead status schema\n */\nexport const BeadStatusSchema = z.enum(['open', 'in_progress', 'closed']);\n\n/**\n * Bead schema\n */\nexport const BeadSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n status: BeadStatusSchema,\n priority: z.number().int().min(0),\n labels: z.array(z.string()),\n parentId: z.string().optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n assignee: z.string().optional(),\n rig: z.string().optional(),\n blockedBy: z.array(z.string()).optional(),\n blocks: z.array(z.string()).optional(),\n});\n\n/**\n * Create bead options schema\n */\nexport const CreateBeadOptionsSchema = z.object({\n title: z.string().min(1),\n description: z.string().optional(),\n priority: z.number().int().min(0).optional(),\n labels: z.array(z.string()).optional(),\n parent: z.string().optional(),\n rig: z.string().optional(),\n assignee: z.string().optional(),\n});\n\n/**\n * Formula type schema\n */\nexport const FormulaTypeSchema = z.enum(['convoy', 'workflow', 'expansion', 'aspect']);\n\n/**\n * Step schema\n */\nexport const StepSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n description: z.string(),\n needs: z.array(z.string()).optional(),\n duration: z.number().optional(),\n requires: z.array(z.string()).optional(),\n metadata: z.record(z.unknown()).optional(),\n});\n\n/**\n * Leg schema\n */\nexport const LegSchema = z.object({\n id: z.string().min(1),\n title: z.string().min(1),\n focus: z.string(),\n description: z.string(),\n agent: z.string().optional(),\n order: z.number().optional(),\n});\n\n/**\n * Variable schema\n */\nexport const VarSchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n default: z.string().optional(),\n required: z.boolean().optional(),\n pattern: z.string().optional(),\n enum: z.array(z.string()).optional(),\n});\n\n/**\n * Synthesis schema\n */\nexport const SynthesisSchema = z.object({\n strategy: z.enum(['merge', 'sequential', 'parallel']),\n format: z.string().optional(),\n description: z.string().optional(),\n});\n\n/**\n * Template schema\n */\nexport const TemplateSchema = z.object({\n name: z.string().min(1),\n content: z.string(),\n outputPath: z.string().optional(),\n});\n\n/**\n * Aspect schema\n */\nexport const AspectSchema = z.object({\n name: z.string().min(1),\n pointcut: z.string(),\n advice: z.string(),\n type: z.enum(['before', 'after', 'around']),\n});\n\n/**\n * Formula schema\n */\nexport const FormulaSchema = z.object({\n name: z.string().min(1),\n description: z.string(),\n type: FormulaTypeSchema,\n version: z.number().int().min(1),\n legs: z.array(LegSchema).optional(),\n synthesis: SynthesisSchema.optional(),\n steps: z.array(StepSchema).optional(),\n vars: z.record(VarSchema).optional(),\n templates: z.array(TemplateSchema).optional(),\n aspects: z.array(AspectSchema).optional(),\n metadata: z.record(z.unknown()).optional(),\n});\n\n/**\n * Convoy status schema\n */\nexport const ConvoyStatusSchema = z.enum(['active', 'landed', 'failed', 'paused']);\n\n/**\n * Convoy progress schema\n */\nexport const ConvoyProgressSchema = z.object({\n total: z.number().int().min(0),\n closed: z.number().int().min(0),\n inProgress: z.number().int().min(0),\n blocked: z.number().int().min(0),\n});\n\n/**\n * Convoy schema\n */\nexport const ConvoySchema = z.object({\n id: z.string().min(1),\n name: z.string().min(1),\n trackedIssues: z.array(z.string()),\n status: ConvoyStatusSchema,\n startedAt: z.coerce.date(),\n completedAt: z.coerce.date().optional(),\n progress: ConvoyProgressSchema,\n formula: z.string().optional(),\n description: z.string().optional(),\n});\n\n/**\n * Create convoy options schema\n */\nexport const CreateConvoyOptionsSchema = z.object({\n name: z.string().min(1),\n issues: z.array(z.string()).min(1),\n description: z.string().optional(),\n formula: z.string().optional(),\n});\n\n/**\n * Gas Town agent role schema\n */\nexport const GasTownAgentRoleSchema = z.enum([\n 'mayor',\n 'polecat',\n 'refinery',\n 'witness',\n 'deacon',\n 'dog',\n 'crew',\n]);\n\n/**\n * Sling target schema\n */\nexport const SlingTargetSchema = z.enum(['polecat', 'crew', 'mayor']);\n\n/**\n * Sling options schema\n */\nexport const SlingOptionsSchema = z.object({\n beadId: z.string().min(1),\n target: SlingTargetSchema,\n formula: z.string().optional(),\n priority: z.number().int().min(0).optional(),\n});\n\n/**\n * Sync direction schema\n */\nexport const SyncDirectionSchema = z.enum(['pull', 'push', 'both']);\n\n/**\n * Configuration schema\n */\nexport const GasTownConfigSchema = z.object({\n townRoot: z.string().default('~/gt'),\n enableBeadsSync: z.boolean().default(true),\n syncInterval: z.number().int().positive().default(60000),\n nativeFormulas: z.boolean().default(true),\n enableConvoys: z.boolean().default(true),\n autoCreateBeads: z.boolean().default(false),\n enableGUPP: z.boolean().default(false),\n guppCheckInterval: z.number().int().positive().default(5000),\n cliTimeout: z.number().int().positive().default(30000),\n});\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validate bead\n */\nexport function validateBead(input: unknown): Bead {\n return BeadSchema.parse(input) as Bead;\n}\n\n/**\n * Validate create bead options\n */\nexport function validateCreateBeadOptions(input: unknown): CreateBeadOptions {\n return CreateBeadOptionsSchema.parse(input);\n}\n\n/**\n * Validate formula\n */\nexport function validateFormula(input: unknown): Formula {\n return FormulaSchema.parse(input) as Formula;\n}\n\n/**\n * Validate convoy\n */\nexport function validateConvoy(input: unknown): Convoy {\n return ConvoySchema.parse(input) as Convoy;\n}\n\n/**\n * Validate create convoy options\n */\nexport function validateCreateConvoyOptions(input: unknown): CreateConvoyOptions {\n return CreateConvoyOptionsSchema.parse(input);\n}\n\n/**\n * Validate sling options\n */\nexport function validateSlingOptions(input: unknown): SlingOptions {\n return SlingOptionsSchema.parse(input);\n}\n\n/**\n * Validate configuration\n */\nexport function validateConfig(input: unknown): GasTownConfig {\n return GasTownConfigSchema.parse(input);\n}\n\n// ============================================================================\n// Additional Types for MCP Tools\n// ============================================================================\n\n/**\n * Dependency action type\n */\nexport type DepAction = 'add' | 'remove';\n\n/**\n * Convoy action type\n */\nexport type ConvoyAction = 'create' | 'track' | 'land' | 'pause' | 'resume';\n\n/**\n * Mail action type\n */\nexport type MailAction = 'send' | 'read' | 'list';\n\n/**\n * Agent role type (alias for GasTownAgentRole)\n */\nexport type AgentRole = GasTownAgentRole;\n\n/**\n * Target agent type (alias for SlingTarget)\n */\nexport type TargetAgent = SlingTarget;\n\n/**\n * Convoy strategy type\n */\nexport type ConvoyStrategy = 'parallel' | 'serial' | 'hybrid' | 'fastest' | 'balanced' | 'throughput' | 'minimal_context_switches';\n\n/**\n * Dependency action type (for graph operations)\n */\nexport type DependencyAction = 'topo_sort' | 'cycle_detect' | 'critical_path';\n\n/**\n * Formula AST (Abstract Syntax Tree) - alias for Formula\n */\nexport type FormulaAST = Formula;\n\n/**\n * Dependency resolution result\n */\nexport interface DependencyResolution {\n readonly action: DependencyAction;\n readonly sorted?: string[];\n readonly hasCycle?: boolean;\n readonly cycleNodes?: string[];\n readonly criticalPath?: string[];\n readonly totalDuration?: number;\n}\n\n/**\n * Pattern match result\n */\nexport interface PatternMatch {\n readonly index: number;\n readonly candidate: string;\n readonly similarity: number;\n}\n\n/**\n * Convoy optimization result\n */\nexport interface ConvoyOptimization {\n readonly convoyId: string;\n readonly strategy: string;\n readonly executionOrder: string[];\n readonly parallelGroups: string[][];\n readonly estimatedDuration: number;\n}\n\n// ============================================================================\n// Interface Types for MCP Tools\n// ============================================================================\n\n/**\n * Gas Town Bridge interface\n */\nexport interface IGasTownBridge {\n createBead(opts: CreateBeadOptions): Promise<Bead>;\n getReady(limit?: number, rig?: string, labels?: string[]): Promise<Bead[]>;\n showBead(beadId: string): Promise<{ bead: Bead; dependencies: string[]; dependents: string[] }>;\n manageDependency(action: DepAction, child: string, parent: string): Promise<void>;\n createConvoy(opts: CreateConvoyOptions): Promise<Convoy>;\n getConvoyStatus(convoyId?: string, detailed?: boolean): Promise<Convoy[]>;\n trackConvoy(convoyId: string, action: 'add' | 'remove', issues: string[]): Promise<void>;\n listFormulas(type?: FormulaType, includeBuiltin?: boolean): Promise<Array<{ name: string; type: FormulaType; description: string; builtin: boolean }>>;\n cookFormula(formula: Formula | string, vars: Record<string, string>): Promise<CookedFormula>;\n executeFormula(formula: Formula | string, vars: Record<string, string>, targetAgent?: string, dryRun?: boolean): Promise<{ beads_created: string[] }>;\n createFormula(opts: { name: string; type: FormulaType; steps?: Step[]; vars?: Record<string, unknown>; description?: string }): Promise<{ path: string }>;\n sling(beadId: string, target: SlingTarget, formula?: string, priority?: number): Promise<void>;\n listAgents(rig?: string, role?: AgentRole, includeInactive?: boolean): Promise<GasTownAgent[]>;\n sendMail(to: string, subject: string, body: string): Promise<string>;\n readMail(mailId: string): Promise<GasTownMail>;\n listMail(limit?: number): Promise<GasTownMail[]>;\n}\n\n/**\n * Beads sync service interface\n */\nexport interface IBeadsSyncService {\n pullBeads(rig?: string, namespace?: string): Promise<{ synced: number; conflicts: number }>;\n pushTasks(namespace?: string): Promise<{ pushed: number; conflicts: number }>;\n}\n\n/**\n * Formula WASM interface\n */\nexport interface IFormulaWasm {\n isInitialized(): boolean;\n initialize(): Promise<void>;\n parseFormula(content: string, validate?: boolean): Promise<Formula>;\n cookFormula(formula: Formula | string, vars: Record<string, string>, isContent?: boolean): Promise<CookedFormula>;\n cookBatch(formulas: Array<{ name: string; content: string }>, vars: Record<string, string>[], continueOnError?: boolean): Promise<{ cooked: CookedFormula[]; errors: Array<{ index: number; error: string }> }>;\n}\n\n/**\n * Dependency WASM interface\n */\nexport interface IDependencyWasm {\n isInitialized(): boolean;\n initialize(): Promise<void>;\n resolveDependencies(beads: Array<{ id: string; dependencies?: string[] }>, action: DependencyAction): Promise<DependencyResolution>;\n matchPatterns(query: string, candidates: string[], k: number, threshold: number): Promise<PatternMatch[]>;\n optimizeConvoy(convoy: { id: string; trackedIssues: string[] }, strategy: ConvoyStrategy, constraints?: unknown): Promise<ConvoyOptimization>;\n}\n","/**\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","/**\n * Gas Town Formula Executor - Hybrid WASM/CLI Implementation\n *\n * Provides formula execution with:\n * - WASM acceleration for parsing and cooking (352x faster)\n * - CLI bridge fallback for I/O operations\n * - Progress tracking with event emission\n * - Step dependency resolution\n * - Molecule generation from cooked formulas\n * - Cancellation support\n *\n * @module v3/plugins/gastown-bridge/formula/executor\n */\n\nimport { EventEmitter } from 'events';\nimport { randomUUID } from 'crypto';\n\nimport type {\n Formula,\n CookedFormula,\n Step,\n Leg,\n Var,\n FormulaType,\n} from '../types.js';\n\nimport {\n GasTownError,\n GasTownErrorCode,\n FormulaError,\n} from '../errors.js';\n\nimport type { GtBridge, GtResult } from '../bridges/gt-bridge.js';\n\nimport {\n stepPool,\n formulaPool,\n moleculePool,\n PooledStep,\n PooledFormula,\n PooledMolecule,\n withArenaSync,\n} from '../memory/index.js';\n\nimport {\n LRUCache,\n BatchDeduplicator,\n DebouncedEmitter,\n} from '../cache.js';\n\n// ============================================================================\n// Performance Caches & Deduplication\n// ============================================================================\n\n/** Step result cache for memoization */\nconst stepResultCache = new LRUCache<string, StepResult>({\n maxEntries: 500,\n ttlMs: 5 * 60 * 1000, // 5 min TTL\n});\n\n/** Formula cook cache */\nconst cookCache = new LRUCache<string, CookedFormula>({\n maxEntries: 200,\n ttlMs: 10 * 60 * 1000, // 10 min TTL\n});\n\n/** Deduplicator for concurrent cook requests */\nconst cookDedup = new BatchDeduplicator<CookedFormula>();\n\n/** Deduplicator for concurrent formula fetch requests */\nconst fetchDedup = new BatchDeduplicator<Formula>();\n\n/**\n * Work stealing queue for parallel execution\n */\ninterface WorkItem {\n step: Step;\n context: StepContext;\n options: ExecuteOptions;\n priority: number;\n}\n\n/**\n * Work stealing queue for load balancing across parallel workers\n */\nclass WorkStealingQueue {\n private queues: WorkItem[][] = [];\n private nextQueueId = 0;\n\n constructor(private readonly numWorkers: number) {\n for (let i = 0; i < numWorkers; i++) {\n this.queues.push([]);\n }\n }\n\n /** Enqueue work to least-loaded queue */\n enqueue(item: WorkItem): void {\n // Find queue with least items\n let minQueue = 0;\n let minLen = this.queues[0]?.length ?? 0;\n for (let i = 1; i < this.queues.length; i++) {\n const len = this.queues[i]?.length ?? 0;\n if (len < minLen) {\n minLen = len;\n minQueue = i;\n }\n }\n this.queues[minQueue]?.push(item);\n }\n\n /** Dequeue from own queue or steal from others */\n dequeue(workerId: number): WorkItem | undefined {\n // Try own queue first\n const ownQueue = this.queues[workerId];\n if (ownQueue && ownQueue.length > 0) {\n return ownQueue.shift();\n }\n\n // Try to steal from other queues (round-robin)\n for (let i = 1; i < this.queues.length; i++) {\n const victimId = (workerId + i) % this.queues.length;\n const victimQueue = this.queues[victimId];\n if (victimQueue && victimQueue.length > 1) {\n // Steal from the back (LIFO stealing)\n return victimQueue.pop();\n }\n }\n\n return undefined;\n }\n\n /** Check if all queues are empty */\n isEmpty(): boolean {\n return this.queues.every(q => q.length === 0);\n }\n\n /** Get total pending items */\n get size(): number {\n return this.queues.reduce((sum, q) => sum + q.length, 0);\n }\n}\n\n/**\n * Hash function for cache keys (FNV-1a)\n */\nfunction hashKey(parts: string[]): string {\n let hash = 2166136261;\n for (const part of parts) {\n for (let i = 0; i < part.length; i++) {\n hash ^= part.charCodeAt(i);\n hash = (hash * 16777619) >>> 0;\n }\n hash ^= 0xff; // separator\n }\n return hash.toString(36);\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * WASM loader interface for formula operations\n */\nexport interface IWasmLoader {\n /** Check if WASM is initialized */\n isInitialized(): boolean;\n\n /** Parse TOML formula content to AST */\n parseFormula(content: string): Formula;\n\n /** Cook formula with variable substitution */\n cookFormula(formula: Formula, vars: Record<string, string>): CookedFormula;\n\n /** Batch cook multiple formulas */\n batchCook(formulas: Formula[], varsArray: Record<string, string>[]): CookedFormula[];\n\n /** Resolve step dependencies (topological sort) */\n resolveStepDependencies(steps: Step[]): Step[];\n\n /** Detect cycles in step dependencies */\n detectCycle(steps: Step[]): { hasCycle: boolean; cycleSteps?: string[] };\n}\n\n/**\n * Execution options\n */\nexport interface ExecuteOptions {\n /** Target agent for execution */\n targetAgent?: string;\n\n /** Whether to run in dry-run mode (no actual execution) */\n dryRun?: boolean;\n\n /** Timeout per step in milliseconds */\n stepTimeout?: number;\n\n /** Maximum parallel steps */\n maxParallel?: number;\n\n /** Abort signal for cancellation */\n signal?: AbortSignal;\n\n /** Custom step handler */\n stepHandler?: (step: Step, context: StepContext) => Promise<StepResult>;\n}\n\n/**\n * Step execution context\n */\nexport interface StepContext {\n /** Execution ID */\n executionId: string;\n\n /** Formula being executed */\n formula: CookedFormula;\n\n /** Current step index */\n stepIndex: number;\n\n /** Total steps */\n totalSteps: number;\n\n /** Variables available to the step */\n variables: Record<string, string>;\n\n /** Results from previous steps */\n previousResults: Map<string, StepResult>;\n\n /** Abort signal */\n signal?: AbortSignal;\n\n /** Execution start time */\n startTime: Date;\n}\n\n/**\n * Step execution result\n */\nexport interface StepResult {\n /** Step ID */\n stepId: string;\n\n /** Whether step succeeded */\n success: boolean;\n\n /** Step output data */\n output?: unknown;\n\n /** Error message if failed */\n error?: string;\n\n /** Duration in milliseconds */\n durationMs: number;\n\n /** Step metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Molecule - Generated work unit from cooked formula\n */\nexport interface Molecule {\n /** Unique molecule ID */\n id: string;\n\n /** Parent formula name */\n formulaName: string;\n\n /** Molecule title */\n title: string;\n\n /** Molecule description */\n description: string;\n\n /** Molecule type (from formula type) */\n type: FormulaType;\n\n /** Associated step or leg */\n sourceId: string;\n\n /** Assigned agent */\n agent?: string;\n\n /** Dependencies (other molecule IDs) */\n dependencies: string[];\n\n /** Execution order */\n order: number;\n\n /** Molecule metadata */\n metadata: Record<string, unknown>;\n\n /** Creation timestamp */\n createdAt: Date;\n}\n\n/**\n * Execution progress\n */\nexport interface ExecutionProgress {\n /** Execution ID */\n executionId: string;\n\n /** Formula name */\n formulaName: string;\n\n /** Current status */\n status: 'pending' | 'running' | 'completed' | 'failed' | 'cancelled';\n\n /** Total steps/legs */\n totalSteps: number;\n\n /** Completed steps */\n completedSteps: number;\n\n /** Failed steps */\n failedSteps: number;\n\n /** Current step being executed */\n currentStep?: string;\n\n /** Start time */\n startTime: Date;\n\n /** End time (if completed) */\n endTime?: Date;\n\n /** Step results */\n stepResults: StepResult[];\n\n /** Error message (if failed) */\n error?: string;\n\n /** Progress percentage (0-100) */\n percentage: number;\n}\n\n/**\n * Executor events\n */\nexport interface ExecutorEvents {\n 'execution:start': (executionId: string, formula: CookedFormula) => void;\n 'execution:progress': (progress: ExecutionProgress) => void;\n 'execution:complete': (executionId: string, results: StepResult[]) => void;\n 'execution:error': (executionId: string, error: Error) => void;\n 'execution:cancelled': (executionId: string) => void;\n 'step:start': (executionId: string, step: Step) => void;\n 'step:complete': (executionId: string, result: StepResult) => void;\n 'step:error': (executionId: string, stepId: string, error: Error) => void;\n 'molecule:created': (molecule: Molecule) => void;\n}\n\n/**\n * Logger interface\n */\nexport interface ExecutorLogger {\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, meta?: Record<string, unknown>) => void;\n}\n\n// ============================================================================\n// Default Logger\n// ============================================================================\n\nconst defaultLogger: ExecutorLogger = {\n debug: (msg, meta) => console.debug(`[formula-executor] ${msg}`, meta ?? ''),\n info: (msg, meta) => console.info(`[formula-executor] ${msg}`, meta ?? ''),\n warn: (msg, meta) => console.warn(`[formula-executor] ${msg}`, meta ?? ''),\n error: (msg, meta) => console.error(`[formula-executor] ${msg}`, meta ?? ''),\n};\n\n// ============================================================================\n// JavaScript Fallback Implementation\n// ============================================================================\n\n/**\n * JavaScript fallback for WASM operations\n * Used when WASM is not available\n */\nclass JsFallbackWasmLoader implements IWasmLoader {\n isInitialized(): boolean {\n return true; // JS fallback is always available\n }\n\n parseFormula(content: string): Formula {\n // Basic TOML parsing simulation\n // In production, use a proper TOML parser\n try {\n const lines = content.split('\\n');\n\n // Use mutable objects during parsing, then cast to readonly\n let name = 'parsed-formula';\n let description = '';\n let type: FormulaType = 'workflow';\n let version = 1;\n const steps: Array<{ id: string; title: string; description: string; needs?: string[] }> = [];\n const vars: Record<string, Var> = {};\n\n let currentSection = '';\n let currentStep: { id: string; title: string; description: string; needs?: string[] } | null = null;\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip empty lines and comments\n if (!trimmed || trimmed.startsWith('#')) continue;\n\n // Section headers\n if (trimmed.startsWith('[')) {\n if (currentStep && currentStep.id) {\n steps.push(currentStep);\n }\n\n const sectionMatch = trimmed.match(/\\[(\\w+)(?:\\.(\\w+))?\\]/);\n if (sectionMatch) {\n currentSection = sectionMatch[1];\n if (sectionMatch[2]) {\n currentStep = { id: sectionMatch[2], title: '', description: '' };\n } else {\n currentStep = null;\n }\n }\n continue;\n }\n\n // Key-value pairs\n const kvMatch = trimmed.match(/^(\\w+)\\s*=\\s*\"?([^\"]*)\"?$/);\n if (kvMatch) {\n const [, key, value] = kvMatch;\n\n if (currentSection === 'formula') {\n if (key === 'name') name = value;\n else if (key === 'description') description = value;\n else if (key === 'type') type = value as FormulaType;\n else if (key === 'version') version = parseInt(value, 10);\n } else if (currentStep) {\n if (key === 'title') currentStep.title = value;\n else if (key === 'description') currentStep.description = value;\n else if (key === 'needs') {\n currentStep.needs = value.split(',').map(s => s.trim());\n }\n }\n }\n }\n\n // Add last step\n if (currentStep && currentStep.id) {\n steps.push(currentStep);\n }\n\n // Return immutable formula\n const formula: Formula = {\n name,\n description,\n type,\n version,\n steps: steps as Step[],\n vars,\n };\n return formula;\n } catch (error) {\n throw FormulaError.parseFailed('js-parse', 'Failed to parse formula content', error as Error);\n }\n }\n\n cookFormula(formula: Formula, vars: Record<string, string>): CookedFormula {\n const substituteVars = (text: string): string => {\n return text.replace(/\\{\\{(\\w+)\\}\\}/g, (match, varName) => {\n return vars[varName] ?? match;\n });\n };\n\n const cookedSteps = formula.steps?.map(step => ({\n ...step,\n title: substituteVars(step.title),\n description: substituteVars(step.description),\n }));\n\n const cookedLegs = formula.legs?.map(leg => ({\n ...leg,\n title: substituteVars(leg.title),\n description: substituteVars(leg.description),\n focus: substituteVars(leg.focus),\n }));\n\n return {\n ...formula,\n steps: cookedSteps,\n legs: cookedLegs,\n cookedAt: new Date(),\n cookedVars: { ...vars },\n originalName: formula.name,\n };\n }\n\n batchCook(formulas: Formula[], varsArray: Record<string, string>[]): CookedFormula[] {\n return formulas.map((formula, index) => {\n const vars = varsArray[index] ?? {};\n return this.cookFormula(formula, vars);\n });\n }\n\n resolveStepDependencies(steps: Step[]): Step[] {\n // Topological sort using Kahn's algorithm\n const stepMap = new Map<string, Step>();\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n // Initialize\n for (const step of steps) {\n stepMap.set(step.id, step);\n inDegree.set(step.id, 0);\n adjacency.set(step.id, []);\n }\n\n // Build graph\n for (const step of steps) {\n if (step.needs) {\n for (const dep of step.needs) {\n if (stepMap.has(dep)) {\n const adj = adjacency.get(dep);\n if (adj) adj.push(step.id);\n inDegree.set(step.id, (inDegree.get(step.id) ?? 0) + 1);\n }\n }\n }\n }\n\n // Find all nodes with no incoming edges\n const queue: string[] = [];\n inDegree.forEach((degree, stepId) => {\n if (degree === 0) {\n queue.push(stepId);\n }\n });\n\n const sorted: Step[] = [];\n while (queue.length > 0) {\n const current = queue.shift()!;\n const step = stepMap.get(current);\n if (step) {\n sorted.push(step);\n }\n\n for (const neighbor of adjacency.get(current) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) {\n queue.push(neighbor);\n }\n }\n }\n\n // Check for cycle (not all nodes processed)\n if (sorted.length !== steps.length) {\n throw new GasTownError(\n 'Cycle detected in step dependencies',\n GasTownErrorCode.DEPENDENCY_CYCLE,\n { sortedCount: sorted.length, totalCount: steps.length }\n );\n }\n\n return sorted;\n }\n\n detectCycle(steps: Step[]): { hasCycle: boolean; cycleSteps?: string[] } {\n const visited = new Set<string>();\n const recStack = new Set<string>();\n const stepMap = new Map<string, Step>();\n\n for (const step of steps) {\n stepMap.set(step.id, step);\n }\n\n const dfs = (stepId: string, path: string[]): string[] | null => {\n visited.add(stepId);\n recStack.add(stepId);\n\n const step = stepMap.get(stepId);\n if (step?.needs) {\n for (const dep of step.needs) {\n if (!visited.has(dep)) {\n const cycle = dfs(dep, [...path, dep]);\n if (cycle) return cycle;\n } else if (recStack.has(dep)) {\n return [...path, dep];\n }\n }\n }\n\n recStack.delete(stepId);\n return null;\n };\n\n for (const step of steps) {\n if (!visited.has(step.id)) {\n const cycle = dfs(step.id, [step.id]);\n if (cycle) {\n return { hasCycle: true, cycleSteps: cycle };\n }\n }\n }\n\n return { hasCycle: false };\n }\n}\n\n// ============================================================================\n// Formula Executor Implementation\n// ============================================================================\n\n/**\n * Hybrid Formula Executor\n *\n * Uses WASM for fast parsing and cooking operations,\n * falls back to CLI bridge for I/O operations.\n *\n * @example\n * ```typescript\n * const executor = new FormulaExecutor(gtBridge, wasmLoader);\n *\n * // Full execution\n * const results = await executor.execute('my-formula', { feature: 'auth' });\n *\n * // Just cook (WASM-accelerated)\n * const cooked = await executor.cook('my-formula', { feature: 'auth' });\n *\n * // Generate molecules\n * const molecules = await executor.generateMolecules(cooked);\n * ```\n */\nexport class FormulaExecutor extends EventEmitter {\n private readonly gtBridge: GtBridge;\n private readonly wasmLoader: IWasmLoader;\n private readonly logger: ExecutorLogger;\n private readonly jsFallback: JsFallbackWasmLoader;\n\n /** Active executions for progress tracking */\n private readonly executions: Map<string, ExecutionProgress> = new Map();\n\n /** Cancellation controllers */\n private readonly cancellations: Map<string, AbortController> = new Map();\n\n /** Debounced progress emitters per execution */\n private readonly progressEmitters: Map<string, DebouncedEmitter<ExecutionProgress>> = new Map();\n\n /** Default max parallel workers */\n private readonly defaultMaxParallel = 4;\n\n constructor(\n gtBridge: GtBridge,\n wasmLoader?: IWasmLoader,\n logger?: ExecutorLogger\n ) {\n super();\n this.gtBridge = gtBridge;\n this.wasmLoader = wasmLoader ?? new JsFallbackWasmLoader();\n this.logger = logger ?? defaultLogger;\n this.jsFallback = new JsFallbackWasmLoader();\n }\n\n // ============================================================================\n // Public API\n // ============================================================================\n\n /**\n * Execute a formula with full lifecycle\n *\n * @param formulaName - Name of the formula to execute\n * @param vars - Variables for substitution\n * @param options - Execution options\n * @returns Array of step results\n */\n async execute(\n formulaName: string,\n vars: Record<string, string>,\n options: ExecuteOptions = {}\n ): Promise<StepResult[]> {\n const executionId = randomUUID();\n const abortController = new AbortController();\n\n // Register cancellation controller\n this.cancellations.set(executionId, abortController);\n\n // Merge signals\n const signal = options.signal\n ? this.mergeSignals(options.signal, abortController.signal)\n : abortController.signal;\n\n try {\n // Step 1: Fetch and cook the formula\n this.logger.info('Starting formula execution', { executionId, formulaName });\n const cooked = await this.cook(formulaName, vars);\n\n // Initialize progress tracking\n const steps = cooked.steps ?? [];\n const legs = cooked.legs ?? [];\n const totalSteps = steps.length || legs.length;\n\n const progress: ExecutionProgress = {\n executionId,\n formulaName,\n status: 'running',\n totalSteps,\n completedSteps: 0,\n failedSteps: 0,\n startTime: new Date(),\n stepResults: [],\n percentage: 0,\n };\n\n this.executions.set(executionId, progress);\n this.emit('execution:start', executionId, cooked);\n\n // Create debounced progress emitter (100ms debounce)\n const progressEmitter = new DebouncedEmitter<ExecutionProgress>(\n (p) => this.emit('execution:progress', p),\n 100\n );\n this.progressEmitters.set(executionId, progressEmitter);\n\n // Step 2: Resolve dependencies and get execution order\n const orderedSteps = this.getOrderedExecutionUnits(cooked);\n\n // Step 3: Execute steps with parallel execution where deps allow\n const results: StepResult[] = [];\n const previousResults = new Map<string, StepResult>();\n const maxParallel = options.maxParallel ?? this.defaultMaxParallel;\n\n // Use parallel execution with work stealing if enabled\n if (maxParallel > 1 && orderedSteps.length > 1) {\n // Build dependency graph for parallel execution\n const stepDeps = new Map<string, Set<string>>();\n const stepById = new Map<string, Step>();\n const stepIndex = new Map<string, number>();\n\n for (let i = 0; i < orderedSteps.length; i++) {\n const step = orderedSteps[i];\n stepById.set(step.id, step);\n stepIndex.set(step.id, i);\n stepDeps.set(step.id, new Set(step.needs ?? []));\n }\n\n // Track completed steps\n const completed = new Set<string>();\n const inProgress = new Set<string>();\n\n // Work stealing queue\n const workQueue = new WorkStealingQueue(maxParallel);\n\n // Find steps that can run (no dependencies)\n const getReadySteps = (): Step[] => {\n const ready: Step[] = [];\n for (const step of orderedSteps) {\n if (completed.has(step.id) || inProgress.has(step.id)) continue;\n const deps = stepDeps.get(step.id);\n if (!deps || [...deps].every(d => completed.has(d))) {\n ready.push(step);\n }\n }\n return ready;\n };\n\n // Execute in parallel waves\n while (completed.size < orderedSteps.length) {\n // Check for cancellation\n if (signal.aborted) {\n progress.status = 'cancelled';\n this.emit('execution:cancelled', executionId);\n throw new GasTownError(\n 'Execution cancelled',\n GasTownErrorCode.UNKNOWN,\n { executionId }\n );\n }\n\n const readySteps = getReadySteps();\n if (readySteps.length === 0 && inProgress.size === 0) {\n // Deadlock - should not happen with valid DAG\n break;\n }\n\n // Limit parallel execution\n const batchSize = Math.min(readySteps.length, maxParallel - inProgress.size);\n const batch = readySteps.slice(0, batchSize);\n\n if (batch.length === 0) {\n // Wait for in-progress steps to complete\n await new Promise(resolve => setTimeout(resolve, 10));\n continue;\n }\n\n // Mark as in progress\n for (const step of batch) {\n inProgress.add(step.id);\n }\n\n // Execute batch in parallel\n const batchPromises = batch.map(async (step) => {\n const idx = stepIndex.get(step.id) ?? 0;\n progress.currentStep = step.id;\n\n const context: StepContext = {\n executionId,\n formula: cooked,\n stepIndex: idx,\n totalSteps: orderedSteps.length,\n variables: cooked.cookedVars,\n previousResults,\n signal,\n startTime: progress.startTime,\n };\n\n this.emit('step:start', executionId, step);\n\n try {\n const result = await this.runStep(step, context, options);\n previousResults.set(step.id, result);\n completed.add(step.id);\n inProgress.delete(step.id);\n\n if (result.success) {\n progress.completedSteps++;\n } else {\n progress.failedSteps++;\n }\n\n progress.stepResults.push(result);\n progress.percentage = Math.round((completed.size / orderedSteps.length) * 100);\n\n this.emit('step:complete', executionId, result);\n progressEmitter.update({ ...progress });\n\n return result;\n } catch (error) {\n const failedResult: StepResult = {\n stepId: step.id,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n durationMs: 0,\n };\n\n previousResults.set(step.id, failedResult);\n completed.add(step.id); // Mark as completed (failed)\n inProgress.delete(step.id);\n progress.failedSteps++;\n progress.stepResults.push(failedResult);\n\n this.emit('step:error', executionId, step.id, error as Error);\n progressEmitter.update({ ...progress });\n\n // Continue or fail based on step configuration\n if (!step.metadata?.continueOnError) {\n throw error;\n }\n\n return failedResult;\n }\n });\n\n const batchResults = await Promise.all(batchPromises);\n results.push(...batchResults);\n }\n\n // Flush final progress\n progressEmitter.flush();\n } else {\n // Sequential execution (original behavior)\n for (let i = 0; i < orderedSteps.length; i++) {\n // Check for cancellation\n if (signal.aborted) {\n progress.status = 'cancelled';\n this.emit('execution:cancelled', executionId);\n throw new GasTownError(\n 'Execution cancelled',\n GasTownErrorCode.UNKNOWN,\n { executionId }\n );\n }\n\n const step = orderedSteps[i];\n progress.currentStep = step.id;\n\n const context: StepContext = {\n executionId,\n formula: cooked,\n stepIndex: i,\n totalSteps: orderedSteps.length,\n variables: cooked.cookedVars,\n previousResults,\n signal,\n startTime: progress.startTime,\n };\n\n this.emit('step:start', executionId, step);\n\n try {\n const result = await this.runStep(step, context, options);\n results.push(result);\n previousResults.set(step.id, result);\n\n if (result.success) {\n progress.completedSteps++;\n } else {\n progress.failedSteps++;\n }\n\n progress.stepResults.push(result);\n progress.percentage = Math.round(((i + 1) / orderedSteps.length) * 100);\n\n this.emit('step:complete', executionId, result);\n progressEmitter.update({ ...progress });\n } catch (error) {\n const failedResult: StepResult = {\n stepId: step.id,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n durationMs: 0,\n };\n\n results.push(failedResult);\n previousResults.set(step.id, failedResult);\n progress.failedSteps++;\n progress.stepResults.push(failedResult);\n\n this.emit('step:error', executionId, step.id, error as Error);\n\n // Continue or fail based on step configuration\n if (!step.metadata?.continueOnError) {\n throw error;\n }\n }\n }\n\n // Flush final progress\n progressEmitter.flush();\n }\n\n // Step 4: Complete execution\n progress.status = progress.failedSteps > 0 ? 'failed' : 'completed';\n progress.endTime = new Date();\n progress.percentage = 100;\n\n this.emit('execution:complete', executionId, results);\n this.logger.info('Formula execution completed', {\n executionId,\n formulaName,\n completed: progress.completedSteps,\n failed: progress.failedSteps,\n });\n\n return results;\n } catch (error) {\n const progress = this.executions.get(executionId);\n if (progress) {\n progress.status = 'failed';\n progress.endTime = new Date();\n progress.error = error instanceof Error ? error.message : String(error);\n }\n\n this.emit('execution:error', executionId, error as Error);\n throw error;\n } finally {\n this.cancellations.delete(executionId);\n // Cleanup progress emitter\n const emitter = this.progressEmitters.get(executionId);\n if (emitter) {\n emitter.cancel();\n this.progressEmitters.delete(executionId);\n }\n }\n }\n\n /**\n * Cook a formula with variable substitution (WASM-accelerated)\n *\n * @param formulaName - Name of the formula or TOML content\n * @param vars - Variables for substitution\n * @returns Cooked formula with substituted variables\n */\n async cook(\n formulaName: string,\n vars: Record<string, string>\n ): Promise<CookedFormula> {\n this.logger.debug('Cooking formula', { formulaName, varsCount: Object.keys(vars).length });\n\n // Generate cache key from formula name and vars\n const varKeys = Object.keys(vars).sort();\n const varValues = varKeys.map(k => vars[k]);\n const cacheKey = hashKey([formulaName, ...varKeys, ...varValues]);\n\n // Check cook cache first\n const cached = cookCache.get(cacheKey);\n if (cached) {\n this.logger.debug('Cook cache hit', { formulaName });\n return cached;\n }\n\n // Use deduplication for concurrent identical requests\n return cookDedup.dedupe(cacheKey, async () => {\n try {\n // Determine if formulaName is content or a name to fetch\n let formula: Formula;\n\n if (formulaName.includes('[') || formulaName.includes('=')) {\n // Looks like TOML content, parse directly\n formula = this.parseFormula(formulaName);\n } else {\n // Fetch formula from CLI with deduplication\n formula = await fetchDedup.dedupe(formulaName, () => this.fetchFormula(formulaName));\n }\n\n // Validate required variables\n this.validateVariables(formula, vars);\n\n // Cook using WASM if available, otherwise JS fallback\n const loader = this.wasmLoader.isInitialized() ? this.wasmLoader : this.jsFallback;\n const cooked = loader.cookFormula(formula, vars);\n\n // Cache the result\n cookCache.set(cacheKey, cooked);\n\n this.logger.debug('Formula cooked successfully', {\n formulaName,\n wasmAccelerated: this.wasmLoader.isInitialized(),\n });\n\n return cooked;\n } catch (error) {\n if (error instanceof GasTownError) throw error;\n\n throw FormulaError.cookFailed(\n formulaName,\n error instanceof Error ? error.message : String(error),\n error as Error\n );\n }\n });\n }\n\n /**\n * Generate molecules from a cooked formula\n *\n * Molecules are executable work units derived from formula steps/legs.\n * Uses object pooling for reduced allocations.\n *\n * @param cookedFormula - The cooked formula to generate molecules from\n * @returns Array of molecules\n */\n async generateMolecules(cookedFormula: CookedFormula): Promise<Molecule[]> {\n this.logger.debug('Generating molecules', { formulaName: cookedFormula.name });\n\n const molecules: Molecule[] = [];\n const moleculeIdMap = new Map<string, string>();\n\n // Generate molecules based on formula type\n if (cookedFormula.type === 'convoy' && cookedFormula.legs) {\n // Convoy: Generate from legs\n const orderedLegs = [...cookedFormula.legs].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n\n for (let i = 0; i < orderedLegs.length; i++) {\n const leg = orderedLegs[i];\n const moleculeId = `mol-${cookedFormula.name}-${leg.id}-${randomUUID().slice(0, 8)}`;\n moleculeIdMap.set(leg.id, moleculeId);\n\n // Use pooled molecule for reduced allocations\n const pooledMol = moleculePool.acquire() as PooledMolecule;\n pooledMol.id = moleculeId;\n pooledMol.formulaName = cookedFormula.name;\n pooledMol.title = leg.title;\n pooledMol.description = leg.description;\n pooledMol.type = cookedFormula.type;\n pooledMol.sourceId = leg.id;\n pooledMol.agent = leg.agent;\n pooledMol.dependencies = i > 0 ? [moleculeIdMap.get(orderedLegs[i - 1].id)!] : [];\n pooledMol.order = i;\n pooledMol.metadata = {\n focus: leg.focus,\n legOrder: leg.order,\n };\n pooledMol.createdAt = new Date();\n\n // Create plain molecule for return (avoid pool reference issues)\n const molecule: Molecule = {\n id: pooledMol.id,\n formulaName: pooledMol.formulaName,\n title: pooledMol.title,\n description: pooledMol.description,\n type: pooledMol.type,\n sourceId: pooledMol.sourceId,\n agent: pooledMol.agent,\n dependencies: [...pooledMol.dependencies],\n order: pooledMol.order,\n metadata: { ...pooledMol.metadata },\n createdAt: pooledMol.createdAt,\n };\n\n // Release pooled molecule back to pool\n moleculePool.release(pooledMol);\n\n molecules.push(molecule);\n this.emit('molecule:created', molecule);\n }\n } else if (cookedFormula.steps) {\n // Workflow/Expansion/Aspect: Generate from steps\n const orderedSteps = this.resolveStepDependencies(cookedFormula.steps);\n\n for (let i = 0; i < orderedSteps.length; i++) {\n const step = orderedSteps[i];\n const moleculeId = `mol-${cookedFormula.name}-${step.id}-${randomUUID().slice(0, 8)}`;\n moleculeIdMap.set(step.id, moleculeId);\n\n // Map step dependencies to molecule IDs\n const dependencies: string[] = [];\n if (step.needs) {\n for (const need of step.needs) {\n const depMoleculeId = moleculeIdMap.get(need);\n if (depMoleculeId) {\n dependencies.push(depMoleculeId);\n }\n }\n }\n\n // Use pooled molecule for reduced allocations\n const pooledMol = moleculePool.acquire() as PooledMolecule;\n pooledMol.id = moleculeId;\n pooledMol.formulaName = cookedFormula.name;\n pooledMol.title = step.title;\n pooledMol.description = step.description;\n pooledMol.type = cookedFormula.type;\n pooledMol.sourceId = step.id;\n pooledMol.agent = undefined;\n pooledMol.dependencies = dependencies;\n pooledMol.order = i;\n pooledMol.metadata = {\n duration: step.duration,\n requires: step.requires,\n ...step.metadata,\n };\n pooledMol.createdAt = new Date();\n\n // Create plain molecule for return (avoid pool reference issues)\n const molecule: Molecule = {\n id: pooledMol.id,\n formulaName: pooledMol.formulaName,\n title: pooledMol.title,\n description: pooledMol.description,\n type: pooledMol.type,\n sourceId: pooledMol.sourceId,\n agent: pooledMol.agent,\n dependencies: [...pooledMol.dependencies],\n order: pooledMol.order,\n metadata: { ...pooledMol.metadata },\n createdAt: pooledMol.createdAt,\n };\n\n // Release pooled molecule back to pool\n moleculePool.release(pooledMol);\n\n molecules.push(molecule);\n this.emit('molecule:created', molecule);\n }\n }\n\n this.logger.info('Molecules generated', {\n formulaName: cookedFormula.name,\n count: molecules.length,\n });\n\n return molecules;\n }\n\n /**\n * Run a single step\n *\n * @param step - Step to execute\n * @param context - Execution context\n * @param options - Execution options\n * @returns Step result\n */\n async runStep(\n step: Step,\n context: StepContext,\n options: ExecuteOptions = {}\n ): Promise<StepResult> {\n const startTime = Date.now();\n\n this.logger.debug('Running step', {\n stepId: step.id,\n executionId: context.executionId,\n });\n\n // Generate cache key for step result memoization\n // Only cache if step is deterministic (no side effects indicator)\n const isCacheable = step.metadata?.cacheable !== false && !step.metadata?.hasSideEffects;\n const stepCacheKey = isCacheable\n ? hashKey([\n step.id,\n context.formula.name,\n JSON.stringify(context.variables),\n JSON.stringify(step.needs ?? []),\n ])\n : null;\n\n // Check step result cache\n if (stepCacheKey) {\n const cachedResult = stepResultCache.get(stepCacheKey);\n if (cachedResult) {\n this.logger.debug('Step cache hit', { stepId: step.id });\n return {\n ...cachedResult,\n metadata: { ...cachedResult.metadata, fromCache: true },\n };\n }\n }\n\n try {\n // Check for cancellation\n if (context.signal?.aborted) {\n throw new GasTownError('Step cancelled', GasTownErrorCode.UNKNOWN);\n }\n\n // Check dependencies are satisfied\n if (step.needs) {\n for (const dep of step.needs) {\n const depResult = context.previousResults.get(dep);\n if (!depResult || !depResult.success) {\n throw new GasTownError(\n `Dependency not satisfied: ${dep}`,\n GasTownErrorCode.UNKNOWN,\n { stepId: step.id, dependency: dep }\n );\n }\n }\n }\n\n // Use custom step handler if provided\n if (options.stepHandler) {\n const result = await options.stepHandler(step, context);\n if (stepCacheKey && result.success) {\n stepResultCache.set(stepCacheKey, result);\n }\n return result;\n }\n\n // Dry run mode\n if (options.dryRun) {\n return {\n stepId: step.id,\n success: true,\n output: { dryRun: true, step },\n durationMs: Date.now() - startTime,\n metadata: { dryRun: true },\n };\n }\n\n // Default execution via CLI\n const result = await this.executeStepViaCli(step, context, options);\n\n const stepResult: StepResult = {\n stepId: step.id,\n success: true,\n output: result,\n durationMs: Date.now() - startTime,\n };\n\n // Cache successful result\n if (stepCacheKey) {\n stepResultCache.set(stepCacheKey, stepResult);\n }\n\n return stepResult;\n } catch (error) {\n return {\n stepId: step.id,\n success: false,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startTime,\n };\n }\n }\n\n /**\n * Get execution progress\n *\n * @param executionId - Execution ID to get progress for\n * @returns Execution progress or undefined\n */\n getProgress(executionId: string): ExecutionProgress | undefined {\n return this.executions.get(executionId);\n }\n\n /**\n * Cancel an execution\n *\n * @param executionId - Execution ID to cancel\n * @returns Whether cancellation was initiated\n */\n cancel(executionId: string): boolean {\n const controller = this.cancellations.get(executionId);\n if (controller) {\n controller.abort();\n return true;\n }\n return false;\n }\n\n /**\n * List all active executions\n */\n getActiveExecutions(): ExecutionProgress[] {\n return Array.from(this.executions.values()).filter(\n e => e.status === 'running' || e.status === 'pending'\n );\n }\n\n /**\n * Check if WASM is available for acceleration\n */\n isWasmAvailable(): boolean {\n return this.wasmLoader.isInitialized();\n }\n\n /**\n * Get cache statistics for performance monitoring\n */\n getCacheStats(): {\n stepResultCache: { entries: number; sizeBytes: number };\n cookCache: { entries: number; sizeBytes: number };\n } {\n return {\n stepResultCache: stepResultCache.stats(),\n cookCache: cookCache.stats(),\n };\n }\n\n /**\n * Clear all executor caches\n */\n clearCaches(): void {\n stepResultCache.clear();\n cookCache.clear();\n }\n\n // ============================================================================\n // Private Methods\n // ============================================================================\n\n /**\n * Parse formula content using WASM or JS fallback\n */\n private parseFormula(content: string): Formula {\n const loader = this.wasmLoader.isInitialized() ? this.wasmLoader : this.jsFallback;\n return loader.parseFormula(content);\n }\n\n /**\n * Fetch formula from CLI\n */\n private async fetchFormula(formulaName: string): Promise<Formula> {\n // Check if bridge is initialized\n if (!this.gtBridge.isInitialized()) {\n throw new GasTownError(\n 'GtBridge not initialized',\n GasTownErrorCode.NOT_INITIALIZED\n );\n }\n\n // Fetch formula via CLI (would be: gt formula show <name> --json)\n // For now, simulate with a placeholder\n // In production, this would call: this.gtBridge.execGt(['formula', 'show', formulaName, '--json'])\n this.logger.debug('Fetching formula from CLI', { formulaName });\n\n // Simulated formula for demonstration\n const formula: Formula = {\n name: formulaName,\n description: `Formula: ${formulaName}`,\n type: 'workflow',\n version: 1,\n steps: [\n {\n id: 'init',\n title: 'Initialize',\n description: 'Initialize the workflow',\n },\n {\n id: 'process',\n title: 'Process',\n description: 'Process the data',\n needs: ['init'],\n },\n {\n id: 'finalize',\n title: 'Finalize',\n description: 'Finalize the workflow',\n needs: ['process'],\n },\n ],\n vars: {},\n };\n\n return formula;\n }\n\n /**\n * Validate required variables are provided\n */\n private validateVariables(formula: Formula, vars: Record<string, string>): void {\n if (!formula.vars) return;\n\n const missing: string[] = [];\n\n for (const [name, varDef] of Object.entries(formula.vars)) {\n if (varDef.required && !(name in vars) && !varDef.default) {\n missing.push(name);\n }\n }\n\n if (missing.length > 0) {\n throw new GasTownError(\n `Missing required variables: ${missing.join(', ')}`,\n GasTownErrorCode.INVALID_ARGUMENTS,\n { missing }\n );\n }\n }\n\n /**\n * Resolve step dependencies using WASM or JS fallback\n */\n private resolveStepDependencies(steps: Step[]): Step[] {\n const loader = this.wasmLoader.isInitialized() ? this.wasmLoader : this.jsFallback;\n return loader.resolveStepDependencies(steps);\n }\n\n /**\n * Get ordered execution units (steps or legs) from formula\n */\n private getOrderedExecutionUnits(formula: CookedFormula): Step[] {\n if (formula.type === 'convoy' && formula.legs) {\n // Convert legs to steps for unified execution\n const legs = [...formula.legs].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n return legs.map((leg, index) => ({\n id: leg.id,\n title: leg.title,\n description: leg.description,\n needs: index > 0 ? [legs[index - 1].id] : undefined,\n metadata: { agent: leg.agent, focus: leg.focus },\n }));\n }\n\n if (formula.steps) {\n return this.resolveStepDependencies(formula.steps);\n }\n\n return [];\n }\n\n /**\n * Execute step via CLI bridge\n */\n private async executeStepViaCli(\n step: Step,\n context: StepContext,\n options: ExecuteOptions\n ): Promise<unknown> {\n // Build CLI command for step execution\n const args = [\n 'formula',\n 'step',\n step.id,\n '--execution-id', context.executionId,\n '--json',\n ];\n\n if (options.targetAgent) {\n args.push('--agent', options.targetAgent);\n }\n\n if (options.stepTimeout) {\n args.push('--timeout', String(options.stepTimeout));\n }\n\n // Execute via bridge\n const result = await this.gtBridge.execGt(args);\n\n if (!result.success) {\n throw new GasTownError(\n `Step execution failed: ${result.error}`,\n GasTownErrorCode.CLI_EXECUTION_FAILED,\n { stepId: step.id, error: result.error }\n );\n }\n\n return result.data ? JSON.parse(result.data) : null;\n }\n\n /**\n * Merge multiple abort signals\n */\n private mergeSignals(...signals: AbortSignal[]): AbortSignal {\n const controller = new AbortController();\n\n for (const signal of signals) {\n if (signal.aborted) {\n controller.abort();\n break;\n }\n\n signal.addEventListener('abort', () => controller.abort(), { once: true });\n }\n\n return controller.signal;\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a new FormulaExecutor instance\n */\nexport function createFormulaExecutor(\n gtBridge: GtBridge,\n wasmLoader?: IWasmLoader,\n logger?: ExecutorLogger\n): FormulaExecutor {\n return new FormulaExecutor(gtBridge, wasmLoader, logger);\n}\n\nexport default FormulaExecutor;\n","/**\n * Convoy Tracker\n *\n * Manages convoy lifecycle including creation, modification, progress\n * tracking, and completion. Convoys are work-order groups that track\n * related beads (issues) through their lifecycle.\n *\n * Features:\n * - Create and manage convoy groups\n * - Add/remove beads to convoys\n * - Track progress and status changes\n * - Event emission for status transitions\n * - Integration with bd-bridge for bead operations\n *\n * @module gastown-bridge/convoy/tracker\n */\n\nimport { EventEmitter } from 'events';\nimport { z } from 'zod';\nimport { v4 as uuidv4 } from 'uuid';\nimport type {\n Convoy,\n ConvoyStatus,\n ConvoyProgress,\n CreateConvoyOptions,\n Bead,\n BeadStatus,\n} from '../types.js';\nimport {\n ConvoySchema,\n CreateConvoyOptionsSchema,\n} from '../types.js';\nimport { BdBridge, type BeadQuery } from '../bridges/bd-bridge.js';\nimport { ConvoyError, GasTownErrorCode, wrapError } from '../errors.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Convoy event types\n */\nexport type ConvoyEventType =\n | 'convoy:created'\n | 'convoy:started'\n | 'convoy:progressed'\n | 'convoy:completed'\n | 'convoy:cancelled'\n | 'convoy:paused'\n | 'convoy:resumed'\n | 'convoy:issue:added'\n | 'convoy:issue:removed'\n | 'convoy:issue:updated';\n\n/**\n * Convoy event payload\n */\nexport interface ConvoyEvent {\n /** Event type */\n type: ConvoyEventType;\n /** Convoy ID */\n convoyId: string;\n /** Convoy name */\n convoyName: string;\n /** Event timestamp */\n timestamp: Date;\n /** Previous status (for status change events) */\n previousStatus?: ConvoyStatus;\n /** Current status */\n status: ConvoyStatus;\n /** Progress at time of event */\n progress: ConvoyProgress;\n /** Issue IDs affected (for issue events) */\n issues?: string[];\n /** Cancellation reason (for cancelled events) */\n reason?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Convoy tracker configuration\n */\nexport interface ConvoyTrackerConfig {\n /** BD bridge instance for bead operations */\n bdBridge: BdBridge;\n /** Auto-update progress on issue changes */\n autoUpdateProgress?: boolean;\n /** Progress update interval in milliseconds */\n progressUpdateInterval?: number;\n /** Enable persistent storage */\n persistConvoys?: boolean;\n /** Storage path for convoy data */\n storagePath?: string;\n}\n\n/**\n * Internal convoy storage\n */\ninterface ConvoyStore {\n convoy: Convoy;\n createdAt: Date;\n updatedAt: Date;\n metadata: Record<string, unknown>;\n}\n\n/**\n * Logger interface\n */\nexport interface ConvoyLogger {\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, meta?: Record<string, unknown>) => void;\n}\n\n// ============================================================================\n// Default Logger\n// ============================================================================\n\nconst defaultLogger: ConvoyLogger = {\n debug: (msg, meta) => console.debug(`[convoy-tracker] ${msg}`, meta ?? ''),\n info: (msg, meta) => console.info(`[convoy-tracker] ${msg}`, meta ?? ''),\n warn: (msg, meta) => console.warn(`[convoy-tracker] ${msg}`, meta ?? ''),\n error: (msg, meta) => console.error(`[convoy-tracker] ${msg}`, meta ?? ''),\n};\n\n// ============================================================================\n// Validation Schemas\n// ============================================================================\n\n/**\n * Convoy ID schema\n */\nconst ConvoyIdSchema = z.string()\n .uuid('Invalid convoy ID format');\n\n/**\n * Issue ID array schema\n */\nconst IssueIdsSchema = z.array(z.string().min(1))\n .min(1, 'At least one issue ID required');\n\n// ============================================================================\n// Convoy Tracker Implementation\n// ============================================================================\n\n/**\n * Convoy Tracker\n *\n * Manages convoy lifecycle and tracks progress of grouped work.\n *\n * @example\n * ```typescript\n * const tracker = new ConvoyTracker({\n * bdBridge: await createBdBridge().initialize(),\n * });\n *\n * // Create a convoy\n * const convoy = await tracker.create(\n * 'Sprint 1',\n * ['gt-abc12', 'gt-def34', 'gt-ghi56'],\n * 'First sprint tasks'\n * );\n *\n * // Monitor progress\n * tracker.on('convoy:progressed', (event) => {\n * console.log(`Progress: ${event.progress.closed}/${event.progress.total}`);\n * });\n *\n * // Check status\n * const status = await tracker.getStatus(convoy.id);\n * ```\n */\nexport class ConvoyTracker extends EventEmitter {\n private bdBridge: BdBridge;\n private convoys: Map<string, ConvoyStore> = new Map();\n private logger: ConvoyLogger;\n private config: Required<Omit<ConvoyTrackerConfig, 'bdBridge'>>;\n private progressTimers: Map<string, NodeJS.Timeout> = new Map();\n\n constructor(config: ConvoyTrackerConfig, logger?: ConvoyLogger) {\n super();\n this.bdBridge = config.bdBridge;\n this.logger = logger ?? defaultLogger;\n this.config = {\n autoUpdateProgress: config.autoUpdateProgress ?? true,\n progressUpdateInterval: config.progressUpdateInterval ?? 30000,\n persistConvoys: config.persistConvoys ?? false,\n storagePath: config.storagePath ?? './data/convoys',\n };\n }\n\n /**\n * Create a new convoy\n *\n * @param name - Convoy name\n * @param issues - Issue IDs to include\n * @param description - Optional description\n * @returns Created convoy\n */\n async create(\n name: string,\n issues: string[],\n description?: string\n ): Promise<Convoy> {\n // Validate inputs\n const validatedOptions = CreateConvoyOptionsSchema.parse({\n name,\n issues,\n description,\n });\n\n // Verify issues exist\n const verifiedIssues = await this.verifyIssues(validatedOptions.issues);\n if (verifiedIssues.length === 0) {\n throw ConvoyError.createFailed('No valid issues found');\n }\n\n // Calculate initial progress\n const progress = await this.calculateProgress(verifiedIssues);\n\n // Create convoy\n const convoyId = uuidv4();\n const now = new Date();\n\n const convoy: Convoy = {\n id: convoyId,\n name: validatedOptions.name,\n trackedIssues: verifiedIssues,\n status: 'active',\n startedAt: now,\n progress,\n description: validatedOptions.description,\n };\n\n // Store convoy\n this.convoys.set(convoyId, {\n convoy,\n createdAt: now,\n updatedAt: now,\n metadata: {},\n });\n\n // Emit creation event\n this.emitConvoyEvent('convoy:created', convoy);\n\n // Start progress tracking if enabled\n if (this.config.autoUpdateProgress) {\n this.startProgressTracking(convoyId);\n }\n\n this.logger.info('Convoy created', {\n convoyId,\n name,\n issueCount: verifiedIssues.length,\n });\n\n return convoy;\n }\n\n /**\n * Add issues to an existing convoy\n *\n * @param convoyId - Convoy ID\n * @param issues - Issue IDs to add\n * @returns Updated convoy\n */\n async addIssues(convoyId: string, issues: string[]): Promise<Convoy> {\n // Validate inputs\n ConvoyIdSchema.parse(convoyId);\n IssueIdsSchema.parse(issues);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n // Verify issues\n const verifiedIssues = await this.verifyIssues(issues);\n if (verifiedIssues.length === 0) {\n throw new ConvoyError(\n 'No valid issues to add',\n GasTownErrorCode.CONVOY_CREATE_FAILED,\n { convoyId, issues }\n );\n }\n\n // Add new issues (avoid duplicates)\n const existingSet = new Set(store.convoy.trackedIssues);\n const newIssues = verifiedIssues.filter(id => !existingSet.has(id));\n\n if (newIssues.length === 0) {\n return store.convoy;\n }\n\n // Update convoy\n const updatedIssues = [...store.convoy.trackedIssues, ...newIssues];\n const progress = await this.calculateProgress(updatedIssues);\n\n const updatedConvoy: Convoy = {\n ...store.convoy,\n trackedIssues: updatedIssues,\n progress,\n };\n\n store.convoy = updatedConvoy;\n store.updatedAt = new Date();\n\n // Emit event\n this.emitConvoyEvent('convoy:issue:added', updatedConvoy, {\n issues: newIssues,\n });\n\n this.logger.info('Issues added to convoy', {\n convoyId,\n addedCount: newIssues.length,\n totalCount: updatedIssues.length,\n });\n\n return updatedConvoy;\n }\n\n /**\n * Remove issues from a convoy\n *\n * @param convoyId - Convoy ID\n * @param issues - Issue IDs to remove\n * @returns Updated convoy\n */\n async removeIssues(convoyId: string, issues: string[]): Promise<Convoy> {\n // Validate inputs\n ConvoyIdSchema.parse(convoyId);\n IssueIdsSchema.parse(issues);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n // Remove issues\n const removeSet = new Set(issues);\n const remainingIssues = store.convoy.trackedIssues.filter(\n id => !removeSet.has(id)\n );\n\n if (remainingIssues.length === store.convoy.trackedIssues.length) {\n return store.convoy;\n }\n\n // Recalculate progress\n const progress = remainingIssues.length > 0\n ? await this.calculateProgress(remainingIssues)\n : { total: 0, closed: 0, inProgress: 0, blocked: 0 };\n\n const updatedConvoy: Convoy = {\n ...store.convoy,\n trackedIssues: remainingIssues,\n progress,\n };\n\n store.convoy = updatedConvoy;\n store.updatedAt = new Date();\n\n // Emit event\n const removedIssues = issues.filter(id =>\n store.convoy.trackedIssues.includes(id) && !remainingIssues.includes(id)\n );\n\n this.emitConvoyEvent('convoy:issue:removed', updatedConvoy, {\n issues: removedIssues,\n });\n\n this.logger.info('Issues removed from convoy', {\n convoyId,\n removedCount: removedIssues.length,\n remainingCount: remainingIssues.length,\n });\n\n return updatedConvoy;\n }\n\n /**\n * Get convoy status\n *\n * @param convoyId - Convoy ID\n * @returns Convoy with updated progress\n */\n async getStatus(convoyId: string): Promise<Convoy> {\n ConvoyIdSchema.parse(convoyId);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n // Refresh progress\n const progress = await this.calculateProgress(store.convoy.trackedIssues);\n const previousProgress = store.convoy.progress;\n\n // Check if progress changed\n if (\n progress.closed !== previousProgress.closed ||\n progress.inProgress !== previousProgress.inProgress ||\n progress.blocked !== previousProgress.blocked\n ) {\n const updatedConvoy: Convoy = {\n ...store.convoy,\n progress,\n };\n\n store.convoy = updatedConvoy;\n store.updatedAt = new Date();\n\n this.emitConvoyEvent('convoy:progressed', updatedConvoy);\n }\n\n return store.convoy;\n }\n\n /**\n * Mark convoy as complete\n *\n * @param convoyId - Convoy ID\n * @returns Completed convoy\n */\n async complete(convoyId: string): Promise<Convoy> {\n ConvoyIdSchema.parse(convoyId);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n if (store.convoy.status === 'landed') {\n return store.convoy;\n }\n\n const previousStatus = store.convoy.status;\n const now = new Date();\n\n const completedConvoy: Convoy = {\n ...store.convoy,\n status: 'landed',\n completedAt: now,\n };\n\n store.convoy = completedConvoy;\n store.updatedAt = now;\n\n // Stop progress tracking\n this.stopProgressTracking(convoyId);\n\n // Emit event\n this.emitConvoyEvent('convoy:completed', completedConvoy, {\n previousStatus,\n });\n\n this.logger.info('Convoy completed', {\n convoyId,\n name: completedConvoy.name,\n duration: now.getTime() - completedConvoy.startedAt.getTime(),\n });\n\n return completedConvoy;\n }\n\n /**\n * Cancel a convoy\n *\n * @param convoyId - Convoy ID\n * @param reason - Cancellation reason\n * @returns Cancelled convoy\n */\n async cancel(convoyId: string, reason?: string): Promise<Convoy> {\n ConvoyIdSchema.parse(convoyId);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n if (store.convoy.status === 'failed' || store.convoy.status === 'landed') {\n return store.convoy;\n }\n\n const previousStatus = store.convoy.status;\n const now = new Date();\n\n const cancelledConvoy: Convoy = {\n ...store.convoy,\n status: 'failed',\n completedAt: now,\n };\n\n store.convoy = cancelledConvoy;\n store.updatedAt = now;\n store.metadata.cancellationReason = reason;\n\n // Stop progress tracking\n this.stopProgressTracking(convoyId);\n\n // Emit event\n this.emitConvoyEvent('convoy:cancelled', cancelledConvoy, {\n previousStatus,\n reason,\n });\n\n this.logger.info('Convoy cancelled', {\n convoyId,\n name: cancelledConvoy.name,\n reason,\n });\n\n return cancelledConvoy;\n }\n\n /**\n * Pause a convoy\n *\n * @param convoyId - Convoy ID\n * @returns Paused convoy\n */\n async pause(convoyId: string): Promise<Convoy> {\n ConvoyIdSchema.parse(convoyId);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n if (store.convoy.status !== 'active') {\n return store.convoy;\n }\n\n const previousStatus = store.convoy.status;\n\n const pausedConvoy: Convoy = {\n ...store.convoy,\n status: 'paused',\n };\n\n store.convoy = pausedConvoy;\n store.updatedAt = new Date();\n\n // Stop progress tracking while paused\n this.stopProgressTracking(convoyId);\n\n // Emit event\n this.emitConvoyEvent('convoy:paused', pausedConvoy, {\n previousStatus,\n });\n\n this.logger.info('Convoy paused', {\n convoyId,\n name: pausedConvoy.name,\n });\n\n return pausedConvoy;\n }\n\n /**\n * Resume a paused convoy\n *\n * @param convoyId - Convoy ID\n * @returns Resumed convoy\n */\n async resume(convoyId: string): Promise<Convoy> {\n ConvoyIdSchema.parse(convoyId);\n\n const store = this.convoys.get(convoyId);\n if (!store) {\n throw ConvoyError.notFound(convoyId);\n }\n\n if (store.convoy.status !== 'paused') {\n return store.convoy;\n }\n\n const previousStatus = store.convoy.status;\n\n const resumedConvoy: Convoy = {\n ...store.convoy,\n status: 'active',\n };\n\n store.convoy = resumedConvoy;\n store.updatedAt = new Date();\n\n // Resume progress tracking\n if (this.config.autoUpdateProgress) {\n this.startProgressTracking(convoyId);\n }\n\n // Emit event\n this.emitConvoyEvent('convoy:resumed', resumedConvoy, {\n previousStatus,\n });\n\n this.logger.info('Convoy resumed', {\n convoyId,\n name: resumedConvoy.name,\n });\n\n return resumedConvoy;\n }\n\n /**\n * List all convoys\n *\n * @param status - Optional status filter\n * @returns Array of convoys\n */\n listConvoys(status?: ConvoyStatus): Convoy[] {\n const convoys = Array.from(this.convoys.values())\n .map(store => store.convoy);\n\n if (status) {\n return convoys.filter(convoy => convoy.status === status);\n }\n\n return convoys;\n }\n\n /**\n * Get convoy by ID\n *\n * @param convoyId - Convoy ID\n * @returns Convoy or undefined\n */\n getConvoy(convoyId: string): Convoy | undefined {\n return this.convoys.get(convoyId)?.convoy;\n }\n\n /**\n * Delete a convoy\n *\n * @param convoyId - Convoy ID\n * @returns True if deleted\n */\n deleteConvoy(convoyId: string): boolean {\n this.stopProgressTracking(convoyId);\n return this.convoys.delete(convoyId);\n }\n\n /**\n * Calculate progress for a set of issues\n */\n private async calculateProgress(issueIds: string[]): Promise<ConvoyProgress> {\n if (issueIds.length === 0) {\n return { total: 0, closed: 0, inProgress: 0, blocked: 0 };\n }\n\n try {\n // Fetch beads\n const beads = await this.fetchBeads(issueIds);\n const beadMap = new Map(beads.map(b => [b.id, b]));\n\n let closed = 0;\n let inProgress = 0;\n let blocked = 0;\n\n for (const issueId of issueIds) {\n const bead = beadMap.get(issueId);\n if (!bead) continue;\n\n if (bead.status === 'closed') {\n closed++;\n } else if (bead.status === 'in_progress') {\n inProgress++;\n }\n\n // Check if blocked\n if (bead.blockedBy && bead.blockedBy.length > 0) {\n const hasOpenBlocker = bead.blockedBy.some(blockerId => {\n const blocker = beadMap.get(blockerId);\n return blocker && blocker.status !== 'closed';\n });\n if (hasOpenBlocker) {\n blocked++;\n }\n }\n }\n\n return {\n total: issueIds.length,\n closed,\n inProgress,\n blocked,\n };\n } catch (error) {\n this.logger.warn('Failed to calculate progress', {\n issueIds,\n error: error instanceof Error ? error.message : String(error),\n });\n\n return {\n total: issueIds.length,\n closed: 0,\n inProgress: 0,\n blocked: 0,\n };\n }\n }\n\n /**\n * Verify issues exist\n */\n private async verifyIssues(issueIds: string[]): Promise<string[]> {\n const verified: string[] = [];\n\n for (const id of issueIds) {\n try {\n await this.bdBridge.getBead(id);\n verified.push(id);\n } catch {\n this.logger.warn('Issue not found', { issueId: id });\n }\n }\n\n return verified;\n }\n\n /**\n * Fetch beads by IDs\n */\n private async fetchBeads(issueIds: string[]): Promise<Bead[]> {\n const beads: Bead[] = [];\n\n for (const id of issueIds) {\n try {\n const cliBead = await this.bdBridge.getBead(id);\n // Convert CLI bead to Gas Town bead\n beads.push({\n id: cliBead.id,\n title: cliBead.content.slice(0, 100),\n description: cliBead.content,\n status: this.mapBeadStatus(cliBead.type),\n priority: 0,\n labels: cliBead.tags ?? [],\n createdAt: cliBead.timestamp ? new Date(cliBead.timestamp) : new Date(),\n updatedAt: new Date(),\n blockedBy: cliBead.parentId ? [cliBead.parentId] : [],\n });\n } catch {\n // Skip invalid beads\n }\n }\n\n return beads;\n }\n\n /**\n * Map CLI bead type to Gas Town status\n */\n private mapBeadStatus(type: string): BeadStatus {\n switch (type) {\n case 'closed':\n return 'closed';\n case 'in_progress':\n case 'response':\n case 'code':\n return 'in_progress';\n default:\n return 'open';\n }\n }\n\n /**\n * Start progress tracking timer\n */\n private startProgressTracking(convoyId: string): void {\n if (this.progressTimers.has(convoyId)) {\n return;\n }\n\n const timer = setInterval(async () => {\n try {\n await this.getStatus(convoyId);\n } catch (error) {\n this.logger.warn('Progress tracking error', {\n convoyId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }, this.config.progressUpdateInterval);\n\n this.progressTimers.set(convoyId, timer);\n }\n\n /**\n * Stop progress tracking timer\n */\n private stopProgressTracking(convoyId: string): void {\n const timer = this.progressTimers.get(convoyId);\n if (timer) {\n clearInterval(timer);\n this.progressTimers.delete(convoyId);\n }\n }\n\n /**\n * Emit convoy event\n */\n private emitConvoyEvent(\n type: ConvoyEventType,\n convoy: Convoy,\n extra?: Partial<ConvoyEvent>\n ): void {\n const event: ConvoyEvent = {\n type,\n convoyId: convoy.id,\n convoyName: convoy.name,\n timestamp: new Date(),\n status: convoy.status,\n progress: convoy.progress,\n ...extra,\n };\n\n this.emit(type, event);\n this.emit('convoy:*', event);\n }\n\n /**\n * Clean up resources\n */\n dispose(): void {\n for (const [convoyId, timer] of this.progressTimers) {\n clearInterval(timer);\n }\n this.progressTimers.clear();\n this.removeAllListeners();\n }\n}\n\n/**\n * Create a new convoy tracker instance\n */\nexport function createConvoyTracker(\n config: ConvoyTrackerConfig,\n logger?: ConvoyLogger\n): ConvoyTracker {\n return new ConvoyTracker(config, logger);\n}\n\nexport default ConvoyTracker;\n","/**\n * Convoy Observer\n *\n * Monitors convoy completion by observing issue state changes\n * and detecting when all tracked issues are complete. Uses\n * WASM-accelerated graph analysis for dependency resolution.\n *\n * Features:\n * - Watch convoys for completion\n * - Detect blocking issues\n * - Identify ready-to-work issues\n * - WASM-accelerated dependency graph analysis\n * - Configurable polling intervals\n *\n * @module gastown-bridge/convoy/observer\n */\n\nimport { EventEmitter } from 'events';\nimport { z } from 'zod';\nimport type {\n Convoy,\n ConvoyProgress,\n Bead,\n BeadStatus,\n BeadGraph,\n TopoSortResult,\n} from '../types.js';\nimport { BdBridge } from '../bridges/bd-bridge.js';\nimport { ConvoyTracker } from './tracker.js';\nimport { ConvoyError, GasTownErrorCode, GasTownError } from '../errors.js';\nimport { LRUCache, DebouncedEmitter, BatchDeduplicator } from '../cache.js';\nimport {\n beadPool,\n PooledBead,\n LazyObserver,\n type LazyStats,\n} from '../memory/index.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * WASM graph module interface\n */\nexport interface WasmGraphModule {\n /** Check if dependency graph has cycles */\n has_cycle(beadsJson: string): boolean;\n /** Find nodes participating in cycles */\n find_cycle_nodes(beadsJson: string): string;\n /** Get beads with no unresolved dependencies */\n get_ready_beads(beadsJson: string): string;\n /** Compute execution levels for parallel processing */\n compute_levels(beadsJson: string): string;\n /** Topological sort of beads */\n topo_sort(beadsJson: string): string;\n /** Critical path analysis */\n critical_path(beadsJson: string): string;\n}\n\n/**\n * Bead node for WASM operations\n */\ninterface WasmBeadNode {\n id: string;\n title: string;\n status: string;\n priority: number;\n blocked_by: string[];\n blocks: string[];\n duration?: number;\n}\n\n/**\n * Completion callback signature\n */\nexport type CompletionCallback = (convoy: Convoy, allComplete: boolean) => void;\n\n/**\n * Observer watch handle\n */\nexport interface WatchHandle {\n /** Convoy ID being watched */\n convoyId: string;\n /** Stop watching */\n stop(): void;\n /** Check if still watching */\n isActive(): boolean;\n}\n\n/**\n * Observer configuration\n */\nexport interface ConvoyObserverConfig {\n /** BD bridge instance */\n bdBridge: BdBridge;\n /** Convoy tracker instance */\n tracker: ConvoyTracker;\n /** Optional WASM graph module */\n wasmModule?: WasmGraphModule;\n /** Initial polling interval in milliseconds */\n pollInterval?: number;\n /** Maximum poll attempts before giving up */\n maxPollAttempts?: number;\n /** Enable WASM acceleration (falls back to JS if unavailable) */\n useWasm?: boolean;\n /** Enable exponential backoff for polling */\n useExponentialBackoff?: boolean;\n /** Maximum backoff interval in milliseconds */\n maxBackoffInterval?: number;\n /** Backoff multiplier (default: 1.5) */\n backoffMultiplier?: number;\n /** Enable delta-based updates (only emit on changes) */\n deltaUpdatesOnly?: boolean;\n /** Debounce interval for progress updates in milliseconds */\n progressDebounceMs?: number;\n}\n\n/**\n * Blocker information\n */\nexport interface BlockerInfo {\n /** Issue ID that is blocked */\n blockedIssue: string;\n /** Issue IDs that are blocking */\n blockers: string[];\n /** True if blockers are from within the convoy */\n internalBlockers: boolean;\n}\n\n/**\n * Ready issue information\n */\nexport interface ReadyIssueInfo {\n /** Issue ID */\n id: string;\n /** Issue title */\n title: string;\n /** Priority */\n priority: number;\n /** Execution level (for parallel processing) */\n level: number;\n}\n\n/**\n * Completion check result\n */\nexport interface CompletionCheckResult {\n /** True if all issues are complete */\n allComplete: boolean;\n /** Progress statistics */\n progress: ConvoyProgress;\n /** Issues that are still open */\n openIssues: string[];\n /** Issues that are in progress */\n inProgressIssues: string[];\n /** Issues that are blocked */\n blockedIssues: BlockerInfo[];\n /** Issues ready to work on */\n readyIssues: ReadyIssueInfo[];\n /** True if there are dependency cycles */\n hasCycles: boolean;\n /** Issues involved in cycles */\n cycleIssues: string[];\n}\n\n/**\n * Logger interface\n */\nexport interface ObserverLogger {\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, meta?: Record<string, unknown>) => void;\n}\n\n// ============================================================================\n// Default Logger\n// ============================================================================\n\nconst defaultLogger: ObserverLogger = {\n debug: (msg, meta) => console.debug(`[convoy-observer] ${msg}`, meta ?? ''),\n info: (msg, meta) => console.info(`[convoy-observer] ${msg}`, meta ?? ''),\n warn: (msg, meta) => console.warn(`[convoy-observer] ${msg}`, meta ?? ''),\n error: (msg, meta) => console.error(`[convoy-observer] ${msg}`, meta ?? ''),\n};\n\n// ============================================================================\n// Validation Schemas\n// ============================================================================\n\nconst ConvoyIdSchema = z.string().uuid('Invalid convoy ID format');\n\n// ============================================================================\n// Convoy Observer Implementation\n// ============================================================================\n\n/**\n * Convoy Observer\n *\n * Monitors convoys for completion and provides dependency analysis.\n *\n * @example\n * ```typescript\n * const observer = new ConvoyObserver({\n * bdBridge,\n * tracker,\n * pollInterval: 5000,\n * useWasm: true,\n * });\n *\n * // Watch for completion\n * const handle = observer.watch(convoyId, (convoy, complete) => {\n * if (complete) {\n * console.log('Convoy complete!');\n * }\n * });\n *\n * // Check blockers\n * const blockers = await observer.getBlockers(convoyId);\n *\n * // Get ready issues\n * const ready = await observer.getReadyIssues(convoyId);\n *\n * // Stop watching\n * handle.stop();\n * ```\n */\nexport class ConvoyObserver extends EventEmitter {\n private bdBridge: BdBridge;\n private tracker: ConvoyTracker;\n private wasmModule?: WasmGraphModule;\n private logger: ObserverLogger;\n private config: Required<Omit<ConvoyObserverConfig, 'bdBridge' | 'tracker' | 'wasmModule'>>;\n private watchers: Map<string, {\n timer: NodeJS.Timeout;\n callback: CompletionCallback;\n attempts: number;\n currentInterval: number;\n lastState: string | null;\n }> = new Map();\n\n // Performance optimization caches\n private readonly beadCache: LRUCache<string, Bead>;\n private readonly completionCache: LRUCache<string, CompletionCheckResult>;\n private readonly fetchDedup: BatchDeduplicator<Bead[]>;\n private readonly progressEmitters: Map<string, DebouncedEmitter<ConvoyProgress>>;\n\n // Subscription batching\n private pendingSubscriptions: Map<string, Set<CompletionCallback>> = new Map();\n private subscriptionFlushTimer: NodeJS.Timeout | null = null;\n\n constructor(config: ConvoyObserverConfig, logger?: ObserverLogger) {\n super();\n this.bdBridge = config.bdBridge;\n this.tracker = config.tracker;\n this.wasmModule = config.wasmModule;\n this.logger = logger ?? defaultLogger;\n this.config = {\n pollInterval: config.pollInterval ?? 10000,\n maxPollAttempts: config.maxPollAttempts ?? 0, // 0 = unlimited\n useWasm: config.useWasm ?? true,\n useExponentialBackoff: config.useExponentialBackoff ?? true,\n maxBackoffInterval: config.maxBackoffInterval ?? 60000, // 1 minute max\n backoffMultiplier: config.backoffMultiplier ?? 1.5,\n deltaUpdatesOnly: config.deltaUpdatesOnly ?? true,\n progressDebounceMs: config.progressDebounceMs ?? 500,\n };\n\n // Initialize performance caches\n this.beadCache = new LRUCache<string, Bead>({\n maxEntries: 1000,\n ttlMs: 30 * 1000, // 30 seconds (beads change frequently)\n });\n\n this.completionCache = new LRUCache<string, CompletionCheckResult>({\n maxEntries: 100,\n ttlMs: 5 * 1000, // 5 seconds (completion state changes)\n });\n\n this.fetchDedup = new BatchDeduplicator<Bead[]>(30000);\n this.progressEmitters = new Map();\n }\n\n /**\n * Watch a convoy for completion\n *\n * @param convoyId - Convoy ID to watch\n * @param callback - Called on each check with completion status\n * @returns Watch handle to stop watching\n */\n watch(convoyId: string, callback: CompletionCallback): WatchHandle {\n ConvoyIdSchema.parse(convoyId);\n\n // Stop existing watcher if any\n this.stopWatching(convoyId);\n\n const initialInterval = this.config.pollInterval;\n\n // Create initial polling timer (will be rescheduled with backoff)\n const scheduleNextPoll = (interval: number): NodeJS.Timeout => {\n return setTimeout(async () => {\n await this.pollConvoyWithBackoff(convoyId, callback);\n }, interval);\n };\n\n const timer = scheduleNextPoll(initialInterval);\n\n this.watchers.set(convoyId, {\n timer,\n callback,\n attempts: 0,\n currentInterval: initialInterval,\n lastState: null,\n });\n\n // Create debounced progress emitter for this convoy\n this.progressEmitters.set(\n convoyId,\n new DebouncedEmitter<ConvoyProgress>(\n (progress) => this.emit('progress', convoyId, progress),\n this.config.progressDebounceMs\n )\n );\n\n // Immediate first check\n this.pollConvoyWithBackoff(convoyId, callback);\n\n this.logger.info('Started watching convoy', { convoyId, interval: initialInterval });\n\n return {\n convoyId,\n stop: () => this.stopWatching(convoyId),\n isActive: () => this.watchers.has(convoyId),\n };\n }\n\n /**\n * Batch subscribe to multiple convoys\n * Subscriptions are batched and flushed together for efficiency\n *\n * @param convoyId - Convoy ID to watch\n * @param callback - Callback for completion status\n */\n batchSubscribe(convoyId: string, callback: CompletionCallback): void {\n if (!this.pendingSubscriptions.has(convoyId)) {\n this.pendingSubscriptions.set(convoyId, new Set());\n }\n this.pendingSubscriptions.get(convoyId)!.add(callback);\n\n // Flush after a short delay to batch multiple subscriptions\n if (!this.subscriptionFlushTimer) {\n this.subscriptionFlushTimer = setTimeout(() => {\n this.flushSubscriptions();\n }, 50); // 50ms batching window\n }\n }\n\n /**\n * Flush pending subscriptions\n */\n private flushSubscriptions(): void {\n this.subscriptionFlushTimer = null;\n\n for (const [convoyId, callbacks] of this.pendingSubscriptions) {\n // Create a merged callback that calls all registered callbacks\n const mergedCallback: CompletionCallback = (convoy, allComplete) => {\n for (const cb of callbacks) {\n try {\n cb(convoy, allComplete);\n } catch (error) {\n this.logger.error('Subscription callback error', {\n convoyId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n };\n\n this.watch(convoyId, mergedCallback);\n }\n\n this.pendingSubscriptions.clear();\n this.logger.debug('Flushed subscription batch', {\n convoys: this.pendingSubscriptions.size,\n });\n }\n\n /**\n * Check if all issues in a convoy are complete\n *\n * @param convoyId - Convoy ID\n * @returns Completion check result with detailed status\n */\n async checkCompletion(convoyId: string): Promise<CompletionCheckResult> {\n ConvoyIdSchema.parse(convoyId);\n\n const convoy = this.tracker.getConvoy(convoyId);\n if (!convoy) {\n throw ConvoyError.notFound(convoyId);\n }\n\n // Fetch all beads\n const beads = await this.fetchBeads(convoy.trackedIssues);\n const beadMap = new Map(beads.map(b => [b.id, b]));\n\n // Calculate progress\n const openIssues: string[] = [];\n const inProgressIssues: string[] = [];\n let closed = 0;\n\n for (const issueId of convoy.trackedIssues) {\n const bead = beadMap.get(issueId);\n if (!bead) continue;\n\n if (bead.status === 'closed') {\n closed++;\n } else if (bead.status === 'in_progress') {\n inProgressIssues.push(issueId);\n } else {\n openIssues.push(issueId);\n }\n }\n\n // Use WASM for graph analysis if available\n let hasCycles = false;\n let cycleIssues: string[] = [];\n let readyIssues: ReadyIssueInfo[] = [];\n let blockedIssues: BlockerInfo[] = [];\n\n if (this.config.useWasm && this.wasmModule) {\n try {\n const wasmResult = this.analyzeWithWasm(beads);\n hasCycles = wasmResult.hasCycles;\n cycleIssues = wasmResult.cycleIssues;\n readyIssues = wasmResult.readyIssues;\n blockedIssues = wasmResult.blockedIssues;\n } catch (error) {\n this.logger.warn('WASM analysis failed, falling back to JS', {\n error: error instanceof Error ? error.message : String(error),\n });\n const jsResult = this.analyzeWithJS(beads, convoy.trackedIssues);\n hasCycles = jsResult.hasCycles;\n cycleIssues = jsResult.cycleIssues;\n readyIssues = jsResult.readyIssues;\n blockedIssues = jsResult.blockedIssues;\n }\n } else {\n const jsResult = this.analyzeWithJS(beads, convoy.trackedIssues);\n hasCycles = jsResult.hasCycles;\n cycleIssues = jsResult.cycleIssues;\n readyIssues = jsResult.readyIssues;\n blockedIssues = jsResult.blockedIssues;\n }\n\n const progress: ConvoyProgress = {\n total: convoy.trackedIssues.length,\n closed,\n inProgress: inProgressIssues.length,\n blocked: blockedIssues.length,\n };\n\n return {\n allComplete: closed === convoy.trackedIssues.length,\n progress,\n openIssues,\n inProgressIssues,\n blockedIssues,\n readyIssues,\n hasCycles,\n cycleIssues,\n };\n }\n\n /**\n * Get blockers for all issues in a convoy\n *\n * @param convoyId - Convoy ID\n * @returns Array of blocker information\n */\n async getBlockers(convoyId: string): Promise<BlockerInfo[]> {\n const result = await this.checkCompletion(convoyId);\n return result.blockedIssues;\n }\n\n /**\n * Get issues ready to work on (no unresolved dependencies)\n *\n * @param convoyId - Convoy ID\n * @returns Array of ready issue information\n */\n async getReadyIssues(convoyId: string): Promise<ReadyIssueInfo[]> {\n const result = await this.checkCompletion(convoyId);\n return result.readyIssues;\n }\n\n /**\n * Get execution order for convoy issues\n *\n * @param convoyId - Convoy ID\n * @returns Ordered array of issue IDs\n */\n async getExecutionOrder(convoyId: string): Promise<string[]> {\n ConvoyIdSchema.parse(convoyId);\n\n const convoy = this.tracker.getConvoy(convoyId);\n if (!convoy) {\n throw ConvoyError.notFound(convoyId);\n }\n\n const beads = await this.fetchBeads(convoy.trackedIssues);\n\n if (this.config.useWasm && this.wasmModule) {\n try {\n const wasmNodes = this.beadsToWasmNodes(beads);\n const resultJson = this.wasmModule.topo_sort(JSON.stringify(wasmNodes));\n const result: TopoSortResult = JSON.parse(resultJson);\n\n if (result.hasCycle) {\n throw new GasTownError(\n 'Cannot compute execution order: dependency cycle detected',\n GasTownErrorCode.DEPENDENCY_CYCLE,\n { cycleNodes: result.cycleNodes }\n );\n }\n\n return result.sorted;\n } catch (error) {\n if (error instanceof GasTownError) throw error;\n this.logger.warn('WASM topo sort failed, falling back to JS', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n // JavaScript fallback using Kahn's algorithm\n return this.topoSortJS(beads);\n }\n\n /**\n * Stop watching a convoy\n */\n stopWatching(convoyId: string): void {\n const watcher = this.watchers.get(convoyId);\n if (watcher) {\n clearTimeout(watcher.timer);\n this.watchers.delete(convoyId);\n\n // Clean up progress emitter\n const emitter = this.progressEmitters.get(convoyId);\n if (emitter) {\n emitter.flush(); // Emit any pending updates\n this.progressEmitters.delete(convoyId);\n }\n\n // Invalidate completion cache for this convoy\n this.completionCache.delete(convoyId);\n\n this.logger.info('Stopped watching convoy', { convoyId });\n }\n }\n\n /**\n * Stop all watchers\n */\n stopAll(): void {\n for (const [convoyId, watcher] of this.watchers) {\n clearTimeout(watcher.timer);\n }\n this.watchers.clear();\n\n // Clean up all progress emitters\n for (const emitter of this.progressEmitters.values()) {\n emitter.flush();\n }\n this.progressEmitters.clear();\n\n // Clear all caches\n this.beadCache.clear();\n this.completionCache.clear();\n this.fetchDedup.clear();\n\n // Clear pending subscriptions\n if (this.subscriptionFlushTimer) {\n clearTimeout(this.subscriptionFlushTimer);\n this.subscriptionFlushTimer = null;\n }\n this.pendingSubscriptions.clear();\n\n this.logger.info('Stopped all convoy watchers');\n }\n\n /**\n * Set WASM module\n */\n setWasmModule(module: WasmGraphModule): void {\n this.wasmModule = module;\n this.logger.info('WASM module set');\n }\n\n /**\n * Check if WASM is available\n */\n isWasmAvailable(): boolean {\n return !!this.wasmModule;\n }\n\n // =========================================================================\n // Private Methods\n // =========================================================================\n\n /**\n * Poll convoy for completion with exponential backoff\n */\n private async pollConvoyWithBackoff(\n convoyId: string,\n callback: CompletionCallback\n ): Promise<void> {\n const watcher = this.watchers.get(convoyId);\n if (!watcher) return;\n\n try {\n const convoy = this.tracker.getConvoy(convoyId);\n if (!convoy) {\n this.stopWatching(convoyId);\n return;\n }\n\n // Skip if already complete\n if (convoy.status === 'landed' || convoy.status === 'failed') {\n callback(convoy, convoy.status === 'landed');\n this.stopWatching(convoyId);\n return;\n }\n\n const result = await this.checkCompletion(convoyId);\n\n // Delta-based updates: only emit if state changed\n const currentState = JSON.stringify({\n allComplete: result.allComplete,\n progress: result.progress,\n openIssues: result.openIssues.length,\n inProgress: result.inProgressIssues.length,\n blocked: result.blockedIssues.length,\n });\n\n const stateChanged = watcher.lastState !== currentState;\n watcher.lastState = currentState;\n\n if (this.config.deltaUpdatesOnly && !stateChanged) {\n // No state change - increase backoff interval\n if (this.config.useExponentialBackoff) {\n watcher.currentInterval = Math.min(\n watcher.currentInterval * this.config.backoffMultiplier,\n this.config.maxBackoffInterval\n );\n }\n } else {\n // State changed - reset to initial interval and call callback\n watcher.currentInterval = this.config.pollInterval;\n callback(convoy, result.allComplete);\n\n // Emit debounced progress update\n const emitter = this.progressEmitters.get(convoyId);\n if (emitter) {\n emitter.update(result.progress);\n }\n }\n\n watcher.attempts++;\n\n // Check max attempts\n if (\n this.config.maxPollAttempts > 0 &&\n watcher.attempts >= this.config.maxPollAttempts\n ) {\n this.logger.warn('Max poll attempts reached', {\n convoyId,\n attempts: watcher.attempts,\n });\n this.stopWatching(convoyId);\n return;\n }\n\n // Schedule next poll with current interval (possibly backed off)\n clearTimeout(watcher.timer);\n watcher.timer = setTimeout(async () => {\n await this.pollConvoyWithBackoff(convoyId, callback);\n }, watcher.currentInterval);\n\n } catch (error) {\n this.logger.error('Poll error', {\n convoyId,\n error: error instanceof Error ? error.message : String(error),\n });\n\n // On error, increase backoff more aggressively\n if (this.config.useExponentialBackoff) {\n watcher.currentInterval = Math.min(\n watcher.currentInterval * (this.config.backoffMultiplier * 1.5),\n this.config.maxBackoffInterval\n );\n }\n\n // Schedule retry with backed-off interval\n clearTimeout(watcher.timer);\n watcher.timer = setTimeout(async () => {\n await this.pollConvoyWithBackoff(convoyId, callback);\n }, watcher.currentInterval);\n }\n }\n\n /**\n * Legacy poll convoy method (without backoff)\n * @deprecated Use pollConvoyWithBackoff instead\n */\n private async pollConvoy(\n convoyId: string,\n callback: CompletionCallback\n ): Promise<void> {\n return this.pollConvoyWithBackoff(convoyId, callback);\n }\n\n /**\n * Fetch beads by IDs with caching, batch deduplication, and object pooling.\n * Uses PooledBead from memory module for reduced allocations.\n */\n private async fetchBeads(issueIds: string[]): Promise<Bead[]> {\n // Create a batch key for deduplication\n const batchKey = issueIds.sort().join(',');\n\n return this.fetchDedup.dedupe(batchKey, async () => {\n const beads: Bead[] = [];\n const uncachedIds: string[] = [];\n\n // Check cache first for each bead\n for (const id of issueIds) {\n const cached = this.beadCache.get(id);\n if (cached) {\n beads.push(cached);\n } else {\n uncachedIds.push(id);\n }\n }\n\n // Fetch uncached beads in parallel (batch of 10)\n const batchSize = 10;\n for (let i = 0; i < uncachedIds.length; i += batchSize) {\n const batch = uncachedIds.slice(i, i + batchSize);\n const fetchPromises = batch.map(async (id) => {\n try {\n const cliBead = await this.bdBridge.getBead(id);\n\n // Use pooled bead for reduced allocations\n const pooledBead = beadPool.acquire() as PooledBead;\n pooledBead.id = cliBead.id;\n pooledBead.title = cliBead.content.slice(0, 100);\n pooledBead.description = cliBead.content;\n pooledBead.status = this.mapBeadStatus(cliBead.type);\n pooledBead.priority = 0;\n pooledBead.labels = cliBead.tags ?? [];\n pooledBead.createdAt = cliBead.timestamp ? new Date(cliBead.timestamp) : new Date();\n pooledBead.updatedAt = new Date();\n pooledBead.blockedBy = cliBead.parentId ? [cliBead.parentId] : [];\n pooledBead.blocks = [];\n\n // Convert to plain Bead object for caching (avoid pool reference issues)\n const bead: Bead = {\n id: pooledBead.id,\n title: pooledBead.title,\n description: pooledBead.description,\n status: pooledBead.status,\n priority: pooledBead.priority,\n labels: pooledBead.labels,\n createdAt: pooledBead.createdAt,\n updatedAt: pooledBead.updatedAt,\n blockedBy: pooledBead.blockedBy,\n blocks: pooledBead.blocks,\n };\n\n // Release pooled bead back to pool\n beadPool.release(pooledBead);\n\n // Cache the bead\n this.beadCache.set(id, bead);\n return bead;\n } catch {\n // Skip invalid beads\n return null;\n }\n });\n\n const results = await Promise.all(fetchPromises);\n beads.push(...results.filter((b): b is Bead => b !== null));\n }\n\n return beads;\n });\n }\n\n /**\n * Map CLI bead type to Gas Town status\n */\n private mapBeadStatus(type: string): BeadStatus {\n switch (type) {\n case 'closed':\n return 'closed';\n case 'in_progress':\n case 'response':\n case 'code':\n return 'in_progress';\n default:\n return 'open';\n }\n }\n\n /**\n * Convert beads to WASM node format\n */\n private beadsToWasmNodes(beads: Bead[]): WasmBeadNode[] {\n return beads.map(bead => ({\n id: bead.id,\n title: bead.title,\n status: bead.status,\n priority: bead.priority,\n blocked_by: bead.blockedBy ?? [],\n blocks: bead.blocks ?? [],\n duration: undefined,\n }));\n }\n\n /**\n * Analyze dependencies with WASM\n */\n private analyzeWithWasm(beads: Bead[]): {\n hasCycles: boolean;\n cycleIssues: string[];\n readyIssues: ReadyIssueInfo[];\n blockedIssues: BlockerInfo[];\n } {\n if (!this.wasmModule) {\n throw new Error('WASM module not available');\n }\n\n const wasmNodes = this.beadsToWasmNodes(beads);\n const beadsJson = JSON.stringify(wasmNodes);\n\n // Check for cycles\n const hasCycles = this.wasmModule.has_cycle(beadsJson);\n let cycleIssues: string[] = [];\n if (hasCycles) {\n const cycleJson = this.wasmModule.find_cycle_nodes(beadsJson);\n cycleIssues = JSON.parse(cycleJson);\n }\n\n // Get ready beads\n const readyJson = this.wasmModule.get_ready_beads(beadsJson);\n const readyIds: string[] = JSON.parse(readyJson);\n\n // Get execution levels\n const levelsJson = this.wasmModule.compute_levels(beadsJson);\n const levels: Record<string, string[]> = JSON.parse(levelsJson);\n\n // Build level map\n const levelMap = new Map<string, number>();\n for (const [levelStr, ids] of Object.entries(levels)) {\n const level = parseInt(levelStr, 10);\n for (const id of ids) {\n levelMap.set(id, level);\n }\n }\n\n // Build ready issues with level info\n const beadMap = new Map(beads.map(b => [b.id, b]));\n const readyIssues: ReadyIssueInfo[] = readyIds.map(id => {\n const bead = beadMap.get(id)!;\n return {\n id,\n title: bead.title,\n priority: bead.priority,\n level: levelMap.get(id) ?? 0,\n };\n });\n\n // Find blocked issues\n const closedSet = new Set(\n beads.filter(b => b.status === 'closed').map(b => b.id)\n );\n const convoySet = new Set(beads.map(b => b.id));\n\n const blockedIssues: BlockerInfo[] = beads\n .filter(bead => {\n if (bead.status === 'closed') return false;\n const blockers = bead.blockedBy ?? [];\n return blockers.some(blockerId => !closedSet.has(blockerId));\n })\n .map(bead => {\n const blockers = (bead.blockedBy ?? []).filter(\n id => !closedSet.has(id)\n );\n const internalBlockers = blockers.every(id => convoySet.has(id));\n return {\n blockedIssue: bead.id,\n blockers,\n internalBlockers,\n };\n });\n\n return { hasCycles, cycleIssues, readyIssues, blockedIssues };\n }\n\n /**\n * Analyze dependencies with JavaScript (fallback)\n */\n private analyzeWithJS(beads: Bead[], convoyIssues: string[]): {\n hasCycles: boolean;\n cycleIssues: string[];\n readyIssues: ReadyIssueInfo[];\n blockedIssues: BlockerInfo[];\n } {\n const beadMap = new Map(beads.map(b => [b.id, b]));\n const convoySet = new Set(convoyIssues);\n const closedSet = new Set(\n beads.filter(b => b.status === 'closed').map(b => b.id)\n );\n\n // Simple cycle detection using DFS\n const hasCycles = this.detectCyclesJS(beads);\n const cycleIssues: string[] = hasCycles\n ? this.findCycleNodesJS(beads)\n : [];\n\n // Find ready issues (no unresolved blockers)\n const readyIssues: ReadyIssueInfo[] = beads\n .filter(bead => {\n if (bead.status === 'closed') return false;\n const blockers = bead.blockedBy ?? [];\n return blockers.every(id => closedSet.has(id));\n })\n .map((bead, index) => ({\n id: bead.id,\n title: bead.title,\n priority: bead.priority,\n level: 0, // Simplified - no level computation in JS fallback\n }));\n\n // Find blocked issues\n const blockedIssues: BlockerInfo[] = beads\n .filter(bead => {\n if (bead.status === 'closed') return false;\n const blockers = bead.blockedBy ?? [];\n return blockers.some(id => !closedSet.has(id));\n })\n .map(bead => {\n const blockers = (bead.blockedBy ?? []).filter(\n id => !closedSet.has(id)\n );\n const internalBlockers = blockers.every(id => convoySet.has(id));\n return {\n blockedIssue: bead.id,\n blockers,\n internalBlockers,\n };\n });\n\n return { hasCycles, cycleIssues, readyIssues, blockedIssues };\n }\n\n /**\n * Detect cycles using DFS (JavaScript)\n */\n private detectCyclesJS(beads: Bead[]): boolean {\n const visited = new Set<string>();\n const recStack = new Set<string>();\n const beadMap = new Map(beads.map(b => [b.id, b]));\n\n const dfs = (id: string): boolean => {\n visited.add(id);\n recStack.add(id);\n\n const bead = beadMap.get(id);\n if (bead) {\n for (const blockerId of bead.blockedBy ?? []) {\n if (!visited.has(blockerId)) {\n if (dfs(blockerId)) return true;\n } else if (recStack.has(blockerId)) {\n return true;\n }\n }\n }\n\n recStack.delete(id);\n return false;\n };\n\n for (const bead of beads) {\n if (!visited.has(bead.id)) {\n if (dfs(bead.id)) return true;\n }\n }\n\n return false;\n }\n\n /**\n * Find nodes in cycles (JavaScript)\n */\n private findCycleNodesJS(beads: Bead[]): string[] {\n // Simplified - just return all nodes that might be in cycles\n const inDegree = new Map<string, number>();\n const beadMap = new Map(beads.map(b => [b.id, b]));\n\n for (const bead of beads) {\n inDegree.set(bead.id, (bead.blockedBy ?? []).length);\n }\n\n // Remove nodes with no incoming edges iteratively\n let changed = true;\n while (changed) {\n changed = false;\n for (const [id, degree] of inDegree) {\n if (degree === 0) {\n inDegree.delete(id);\n // Decrease degree of nodes blocked by this one\n for (const bead of beads) {\n if (bead.blockedBy?.includes(id)) {\n const current = inDegree.get(bead.id) ?? 0;\n if (current > 0) {\n inDegree.set(bead.id, current - 1);\n changed = true;\n }\n }\n }\n changed = true;\n }\n }\n }\n\n // Remaining nodes are in cycles\n return Array.from(inDegree.keys());\n }\n\n /**\n * Topological sort using Kahn's algorithm (JavaScript)\n */\n private topoSortJS(beads: Bead[]): string[] {\n const beadMap = new Map(beads.map(b => [b.id, b]));\n const inDegree = new Map<string, number>();\n const result: string[] = [];\n\n // Initialize in-degrees\n for (const bead of beads) {\n inDegree.set(bead.id, (bead.blockedBy ?? []).length);\n }\n\n // Queue nodes with no dependencies\n const queue: string[] = [];\n for (const [id, degree] of inDegree) {\n if (degree === 0) {\n queue.push(id);\n }\n }\n\n while (queue.length > 0) {\n const id = queue.shift()!;\n result.push(id);\n\n // Find nodes blocked by this one and decrease their in-degree\n for (const bead of beads) {\n if (bead.blockedBy?.includes(id)) {\n const current = inDegree.get(bead.id) ?? 0;\n const newDegree = current - 1;\n inDegree.set(bead.id, newDegree);\n if (newDegree === 0) {\n queue.push(bead.id);\n }\n }\n }\n }\n\n // If we couldn't process all nodes, there's a cycle\n if (result.length !== beads.length) {\n throw new GasTownError(\n 'Cannot compute execution order: dependency cycle detected',\n GasTownErrorCode.DEPENDENCY_CYCLE\n );\n }\n\n return result;\n }\n\n /**\n * Clean up resources\n */\n dispose(): void {\n this.stopAll();\n this.removeAllListeners();\n }\n}\n\n/**\n * Create a new convoy observer instance\n */\nexport function createConvoyObserver(\n config: ConvoyObserverConfig,\n logger?: ObserverLogger\n): ConvoyObserver {\n return new ConvoyObserver(config, logger);\n}\n\n/**\n * Create a lazy-initialized convoy observer.\n * The observer is only created when first accessed (via watch() or checkCompletion()).\n * Useful for deferring initialization until convoy monitoring is actually needed.\n *\n * @example\n * ```typescript\n * const lazyObserver = createLazyConvoyObserver(config);\n *\n * // Observer is NOT created yet\n * console.log(lazyObserver.getWatchCount()); // 0\n *\n * // First watch triggers observer creation\n * const observer = await lazyObserver.watch();\n * const handle = observer.watch(convoyId, callback);\n *\n * // When done, unwatch to potentially dispose\n * await lazyObserver.unwatch();\n * ```\n */\nexport function createLazyConvoyObserver(\n config: ConvoyObserverConfig,\n logger?: ObserverLogger\n): LazyObserver<ConvoyObserver> {\n return new LazyObserver<ConvoyObserver>(\n () => new ConvoyObserver(config, logger),\n {\n name: 'convoy-observer',\n cleanup: (observer) => {\n observer.dispose();\n },\n }\n );\n}\n\n/**\n * Get lazy observer statistics\n */\nexport function getLazyObserverStats(\n lazyObserver: LazyObserver<ConvoyObserver>\n): {\n isActive: boolean;\n watchCount: number;\n} {\n return {\n isActive: lazyObserver.isActive(),\n watchCount: lazyObserver.getWatchCount(),\n };\n}\n\nexport default ConvoyObserver;\n","/**\n * Gas Town Bridge Plugin - WASM Loader\n *\n * Provides lazy-loading and caching for WASM modules with graceful\n * JavaScript fallback. Includes typed wrapper functions for all WASM exports\n * and performance timing for benchmarks.\n *\n * WASM Modules:\n * - gastown-formula-wasm: TOML parsing and formula cooking (352x faster)\n * - ruvector-gnn-wasm: Graph operations and neural network (150x faster)\n *\n * @module gastown-bridge/wasm-loader\n * @version 0.1.0\n */\n\nimport type {\n Formula,\n TopoSortResult,\n CriticalPathResult,\n} from './types.js';\n\nimport {\n LRUCache,\n FormulaASTCache,\n BatchDeduplicator,\n ModulePreloader,\n} from './cache.js';\n\nimport {\n LazyWasm,\n type LazyStats,\n} from './memory/lazy.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Performance timing result\n */\nexport interface PerformanceTiming {\n /** Operation name */\n readonly operation: string;\n /** Duration in milliseconds */\n readonly durationMs: number;\n /** Whether WASM was used */\n readonly usedWasm: boolean;\n /** Timestamp when operation started */\n readonly startedAt: number;\n}\n\n/**\n * WASM module exports for gastown-formula-wasm\n */\ninterface FormulaWasmExports {\n /** Initialize the WASM module */\n default?: () => Promise<void>;\n /** Parse TOML content to Formula AST */\n parse_toml: (content: string) => string;\n /** Cook a formula with variable substitution */\n cook_formula: (formulaJson: string, varsJson: string) => string;\n /** Batch cook multiple formulas */\n cook_batch: (formulasJson: string, varsArrayJson: string) => string;\n /** Get WASM version */\n version: () => string;\n}\n\n/**\n * WASM module exports for ruvector-gnn-wasm\n */\ninterface GnnWasmExports {\n /** Initialize the WASM module */\n default?: () => Promise<void>;\n /** Topological sort of dependency graph */\n topo_sort: (nodesJson: string, edgesJson: string) => string;\n /** Detect cycles in dependency graph */\n detect_cycles: (nodesJson: string, edgesJson: string) => string;\n /** Calculate critical path */\n critical_path: (nodesJson: string, edgesJson: string, weightsJson: string) => string;\n /** Get WASM version */\n version: () => string;\n}\n\n/**\n * Graph edge representation\n */\nexport interface GraphEdge {\n readonly from: string;\n readonly to: string;\n}\n\n/**\n * Node weight for critical path calculation\n */\nexport interface NodeWeight {\n readonly nodeId: string;\n readonly weight: number;\n}\n\n/**\n * Cycle detection result\n */\nexport interface CycleDetectionResult {\n readonly hasCycle: boolean;\n readonly cycleNodes: string[];\n}\n\n// ============================================================================\n// Module Cache - Lazy Loading with LazyWasm\n// ============================================================================\n\n/** WASM availability flag */\nlet wasmAvailable: boolean | null = null;\n/** Performance timings log */\nconst performanceLog: PerformanceTiming[] = [];\n\n/**\n * Lazy loader for gastown-formula-wasm module.\n * Only loads WASM when first accessed, not during startup.\n * Supports idle timeout for memory cleanup.\n */\nconst lazyFormulaWasm = new LazyWasm<FormulaWasmExports>(\n async () => {\n if (!isWasmAvailable()) {\n throw new Error('WASM not available');\n }\n const module = await import('gastown-formula-wasm') as unknown as FormulaWasmExports;\n if (typeof module.default === 'function') {\n await module.default();\n }\n return module;\n },\n {\n name: 'gastown-formula-wasm',\n idleTimeout: 5 * 60 * 1000, // 5 minutes idle timeout for memory cleanup\n onError: (error) => {\n console.debug('[WASM Loader] gastown-formula-wasm load error:', error);\n },\n }\n);\n\n/**\n * Lazy loader for ruvector-gnn-wasm module.\n * Only loads WASM when first accessed, not during startup.\n * Supports idle timeout for memory cleanup.\n */\nconst lazyGnnWasm = new LazyWasm<GnnWasmExports>(\n async () => {\n if (!isWasmAvailable()) {\n throw new Error('WASM not available');\n }\n const module = await import('ruvector-gnn-wasm') as unknown as GnnWasmExports;\n if (typeof module.default === 'function') {\n await module.default();\n }\n return module;\n },\n {\n name: 'ruvector-gnn-wasm',\n idleTimeout: 5 * 60 * 1000, // 5 minutes idle timeout for memory cleanup\n onError: (error) => {\n console.debug('[WASM Loader] ruvector-gnn-wasm load error:', error);\n },\n }\n);\n\n// ============================================================================\n// Performance Caches - LRU with O(1) operations\n// ============================================================================\n\n/** LRU cache for parsed formulas (max 1000 entries) */\nconst formulaParseCache = new LRUCache<string, Formula>({\n maxEntries: 1000,\n ttlMs: 10 * 60 * 1000, // 10 min TTL\n});\n\n/** LRU cache for cooked formulas */\nconst cookCache = new LRUCache<string, Formula>({\n maxEntries: 500,\n ttlMs: 5 * 60 * 1000, // 5 min TTL\n});\n\n/** LRU cache for topo sort results */\nconst topoSortCache = new LRUCache<string, TopoSortResult>({\n maxEntries: 200,\n ttlMs: 2 * 60 * 1000, // 2 min TTL\n});\n\n/** Formula AST cache using WeakMap-like behavior */\nconst astCache = new FormulaASTCache(500);\n\n/** Batch deduplicator for concurrent parse requests */\nconst parseDedup = new BatchDeduplicator<Formula>();\n\n/** Batch deduplicator for concurrent cook requests */\nconst cookDedup = new BatchDeduplicator<Formula>();\n\n/** Batch deduplicator for concurrent graph operations */\nconst graphDedup = new BatchDeduplicator<TopoSortResult>();\n\n/** Module preloader for idle-time loading */\nconst modulePreloader = new ModulePreloader();\n\n// ============================================================================\n// Hash Functions for Cache Keys\n// ============================================================================\n\n/**\n * FNV-1a hash for content strings (fast, low collision)\n */\nfunction hashContent(content: string): string {\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 return hash.toString(36);\n}\n\n/**\n * Hash for cook operation key (formula + vars)\n */\nfunction hashCookKey(formula: Formula, vars: Record<string, string>): string {\n const varsStr = Object.entries(vars).sort().map(([k, v]) => `${k}=${v}`).join('|');\n return `${formula.name}:${formula.version}:${hashContent(varsStr)}`;\n}\n\n/**\n * Hash for graph operation key (nodes + edges)\n */\nfunction hashGraphKey(nodes: string[], edges: GraphEdge[]): string {\n const nodesStr = nodes.sort().join(',');\n const edgesStr = edges.map(e => `${e.from}->${e.to}`).sort().join(',');\n return hashContent(`${nodesStr}|${edgesStr}`);\n}\n\n// ============================================================================\n// WASM Availability Check\n// ============================================================================\n\n/**\n * Check if WASM is available in the current environment.\n *\n * @returns True if WASM is supported, false otherwise\n *\n * @example\n * ```typescript\n * if (isWasmAvailable()) {\n * console.log('WASM acceleration enabled');\n * } else {\n * console.log('Using JavaScript fallback');\n * }\n * ```\n */\nexport function isWasmAvailable(): boolean {\n if (wasmAvailable !== null) {\n return wasmAvailable;\n }\n\n try {\n // Check for WebAssembly global\n if (typeof WebAssembly === 'undefined') {\n wasmAvailable = false;\n return false;\n }\n\n // Check for required WebAssembly features\n const hasInstantiate = typeof WebAssembly.instantiate === 'function';\n const hasCompile = typeof WebAssembly.compile === 'function';\n const hasModule = typeof WebAssembly.Module === 'function';\n\n wasmAvailable = hasInstantiate && hasCompile && hasModule;\n return wasmAvailable;\n } catch {\n wasmAvailable = false;\n return false;\n }\n}\n\n// ============================================================================\n// Performance Timing\n// ============================================================================\n\n/**\n * Record a performance timing\n */\nfunction recordTiming(\n operation: string,\n startTime: number,\n usedWasm: boolean\n): PerformanceTiming {\n const timing: PerformanceTiming = {\n operation,\n durationMs: performance.now() - startTime,\n usedWasm,\n startedAt: startTime,\n };\n performanceLog.push(timing);\n\n // Keep only last 1000 entries\n if (performanceLog.length > 1000) {\n performanceLog.shift();\n }\n\n return timing;\n}\n\n/**\n * Get performance log for benchmarking.\n *\n * @returns Array of performance timing records\n *\n * @example\n * ```typescript\n * const timings = getPerformanceLog();\n * const avgWasmTime = timings\n * .filter(t => t.usedWasm)\n * .reduce((acc, t) => acc + t.durationMs, 0) / timings.length;\n * ```\n */\nexport function getPerformanceLog(): readonly PerformanceTiming[] {\n return [...performanceLog];\n}\n\n/**\n * Clear performance log.\n */\nexport function clearPerformanceLog(): void {\n performanceLog.length = 0;\n}\n\n// ============================================================================\n// WASM Module Loaders - Using LazyWasm for deferred loading\n// ============================================================================\n\n/**\n * Lazy-load the gastown-formula-wasm module.\n * Uses LazyWasm for true lazy loading - only loads when first accessed.\n * Includes idle timeout for automatic memory cleanup.\n *\n * @returns The loaded WASM module exports, or null if unavailable\n *\n * @example\n * ```typescript\n * const formulaWasm = await loadFormulaWasm();\n * if (formulaWasm) {\n * const result = formulaWasm.parse_toml(tomlContent);\n * }\n * ```\n */\nexport async function loadFormulaWasm(): Promise<FormulaWasmExports | null> {\n if (!isWasmAvailable()) {\n return null;\n }\n\n try {\n return await lazyFormulaWasm.get();\n } catch (error) {\n // Module not available, will use JS fallback\n console.debug('[WASM Loader] gastown-formula-wasm not available:', error);\n return null;\n }\n}\n\n/**\n * Lazy-load the ruvector-gnn-wasm module.\n * Uses LazyWasm for true lazy loading - only loads when first accessed.\n * Includes idle timeout for automatic memory cleanup.\n *\n * @returns The loaded WASM module exports, or null if unavailable\n *\n * @example\n * ```typescript\n * const gnnWasm = await loadGnnWasm();\n * if (gnnWasm) {\n * const result = gnnWasm.topo_sort(nodesJson, edgesJson);\n * }\n * ```\n */\nexport async function loadGnnWasm(): Promise<GnnWasmExports | null> {\n if (!isWasmAvailable()) {\n return null;\n }\n\n try {\n return await lazyGnnWasm.get();\n } catch (error) {\n // Module not available, will use JS fallback\n console.debug('[WASM Loader] ruvector-gnn-wasm not available:', error);\n return null;\n }\n}\n\n/**\n * Check if formula WASM module is currently loaded.\n * Does not trigger loading.\n */\nexport function isFormulaWasmLoaded(): boolean {\n return lazyFormulaWasm.isLoaded();\n}\n\n/**\n * Check if GNN WASM module is currently loaded.\n * Does not trigger loading.\n */\nexport function isGnnWasmLoaded(): boolean {\n return lazyGnnWasm.isLoaded();\n}\n\n/**\n * Get lazy loading statistics for WASM modules.\n */\nexport function getWasmLazyStats(): {\n formulaWasm: LazyStats;\n gnnWasm: LazyStats;\n} {\n return {\n formulaWasm: lazyFormulaWasm.getStats(),\n gnnWasm: lazyGnnWasm.getStats(),\n };\n}\n\n// ============================================================================\n// JavaScript Fallback Implementations\n// ============================================================================\n\n/**\n * JavaScript fallback for TOML parsing.\n * Simple implementation for basic formula parsing.\n */\nfunction parseTomlFallback(content: string): Formula {\n // Basic TOML parsing fallback\n // In production, use a proper TOML parser like @iarna/toml\n const lines = content.split('\\n');\n const result: Record<string, unknown> = {};\n let currentSection = '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip comments and empty lines\n if (trimmed.startsWith('#') || trimmed === '') {\n continue;\n }\n\n // Section header\n const sectionMatch = trimmed.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n currentSection = sectionMatch[1];\n if (!result[currentSection]) {\n result[currentSection] = {};\n }\n continue;\n }\n\n // Key-value pair\n const kvMatch = trimmed.match(/^([^=]+)=(.+)$/);\n if (kvMatch) {\n const key = kvMatch[1].trim();\n let value: unknown = kvMatch[2].trim();\n\n // Parse value type\n if (value === 'true') {\n value = true;\n } else if (value === 'false') {\n value = false;\n } else if (/^\\d+$/.test(value as string)) {\n value = parseInt(value as string, 10);\n } else if (/^\\d+\\.\\d+$/.test(value as string)) {\n value = parseFloat(value as string);\n } else if ((value as string).startsWith('\"') && (value as string).endsWith('\"')) {\n value = (value as string).slice(1, -1);\n }\n\n if (currentSection) {\n (result[currentSection] as Record<string, unknown>)[key] = value;\n } else {\n result[key] = value;\n }\n }\n }\n\n // Transform to Formula shape\n return {\n name: (result['name'] as string) || 'unknown',\n description: (result['description'] as string) || '',\n type: (result['type'] as Formula['type']) || 'workflow',\n version: (result['version'] as number) || 1,\n steps: result['steps'] as Formula['steps'],\n legs: result['legs'] as Formula['legs'],\n vars: result['vars'] as Formula['vars'],\n metadata: result['metadata'] as Formula['metadata'],\n };\n}\n\n/**\n * JavaScript fallback for variable substitution in formula.\n */\nfunction cookFormulaFallback(\n formula: Formula,\n vars: Record<string, string>\n): Formula {\n const substituteVars = (text: string): string => {\n let result = text;\n for (const [key, value] of Object.entries(vars)) {\n // Replace {{var}} and ${var} patterns\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, 'g'), value);\n }\n return result;\n };\n\n const substituteObject = <T>(obj: T): T => {\n if (typeof obj === 'string') {\n return substituteVars(obj) as T;\n }\n if (Array.isArray(obj)) {\n return obj.map(substituteObject) as T;\n }\n if (obj !== null && typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = substituteObject(value);\n }\n return result as T;\n }\n return obj;\n };\n\n return {\n ...substituteObject(formula),\n cookedAt: new Date(),\n cookedVars: vars,\n originalName: formula.name,\n } as Formula;\n}\n\n/**\n * JavaScript fallback for topological sort.\n * Uses Kahn's algorithm.\n */\nfunction topoSortFallback(\n nodes: string[],\n edges: GraphEdge[]\n): TopoSortResult {\n const inDegree = new Map<string, number>();\n const graph = new Map<string, string[]>();\n\n // Initialize\n for (const node of nodes) {\n inDegree.set(node, 0);\n graph.set(node, []);\n }\n\n // Build graph\n for (const edge of edges) {\n graph.get(edge.from)?.push(edge.to);\n inDegree.set(edge.to, (inDegree.get(edge.to) || 0) + 1);\n }\n\n // Find nodes with no incoming edges\n const queue: string[] = [];\n for (const [node, degree] of inDegree) {\n if (degree === 0) {\n queue.push(node);\n }\n }\n\n const sorted: string[] = [];\n\n while (queue.length > 0) {\n const node = queue.shift()!;\n sorted.push(node);\n\n for (const neighbor of graph.get(node) || []) {\n const newDegree = (inDegree.get(neighbor) || 0) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) {\n queue.push(neighbor);\n }\n }\n }\n\n // Check for cycle\n const hasCycle = sorted.length !== nodes.length;\n const cycleNodes = hasCycle\n ? nodes.filter((n) => !sorted.includes(n))\n : undefined;\n\n return {\n sorted,\n hasCycle,\n cycleNodes,\n };\n}\n\n/**\n * JavaScript fallback for cycle detection.\n * Uses DFS with coloring.\n */\nfunction detectCyclesFallback(\n nodes: string[],\n edges: GraphEdge[]\n): CycleDetectionResult {\n const graph = new Map<string, string[]>();\n const WHITE = 0; // Unvisited\n const GRAY = 1; // In current path\n const BLACK = 2; // Visited\n\n // Initialize\n for (const node of nodes) {\n graph.set(node, []);\n }\n\n // Build graph\n for (const edge of edges) {\n graph.get(edge.from)?.push(edge.to);\n }\n\n const colors = new Map<string, number>();\n for (const node of nodes) {\n colors.set(node, WHITE);\n }\n\n const cycleNodes: string[] = [];\n\n const dfs = (node: string, path: string[]): boolean => {\n colors.set(node, GRAY);\n path.push(node);\n\n for (const neighbor of graph.get(node) || []) {\n if (colors.get(neighbor) === GRAY) {\n // Found cycle - extract cycle nodes\n const cycleStart = path.indexOf(neighbor);\n cycleNodes.push(...path.slice(cycleStart));\n return true;\n }\n if (colors.get(neighbor) === WHITE) {\n if (dfs(neighbor, path)) {\n return true;\n }\n }\n }\n\n colors.set(node, BLACK);\n path.pop();\n return false;\n };\n\n for (const node of nodes) {\n if (colors.get(node) === WHITE) {\n if (dfs(node, [])) {\n break;\n }\n }\n }\n\n return {\n hasCycle: cycleNodes.length > 0,\n cycleNodes: [...new Set(cycleNodes)],\n };\n}\n\n/**\n * JavaScript fallback for critical path calculation.\n * Uses longest path algorithm on DAG.\n */\nfunction criticalPathFallback(\n nodes: string[],\n edges: GraphEdge[],\n weights: NodeWeight[]\n): CriticalPathResult {\n // First, do topological sort\n const topoResult = topoSortFallback(nodes, edges);\n\n if (topoResult.hasCycle) {\n return {\n path: [],\n totalDuration: 0,\n slack: new Map(),\n };\n }\n\n const weightMap = new Map<string, number>();\n for (const w of weights) {\n weightMap.set(w.nodeId, w.weight);\n }\n\n const graph = new Map<string, string[]>();\n const reverseGraph = new Map<string, string[]>();\n\n for (const node of nodes) {\n graph.set(node, []);\n reverseGraph.set(node, []);\n }\n\n for (const edge of edges) {\n graph.get(edge.from)?.push(edge.to);\n reverseGraph.get(edge.to)?.push(edge.from);\n }\n\n // Forward pass: calculate earliest start times\n const earliest = new Map<string, number>();\n for (const node of topoResult.sorted) {\n let maxPredecessor = 0;\n for (const pred of reverseGraph.get(node) || []) {\n const predEnd = (earliest.get(pred) || 0) + (weightMap.get(pred) || 0);\n maxPredecessor = Math.max(maxPredecessor, predEnd);\n }\n earliest.set(node, maxPredecessor);\n }\n\n // Backward pass: calculate latest start times\n const latest = new Map<string, number>();\n const reverseSorted = [...topoResult.sorted].reverse();\n const totalDuration = Math.max(\n ...nodes.map((n) => (earliest.get(n) || 0) + (weightMap.get(n) || 0))\n );\n\n for (const node of reverseSorted) {\n const successors = graph.get(node) || [];\n if (successors.length === 0) {\n latest.set(node, totalDuration - (weightMap.get(node) || 0));\n } else {\n let minSuccessor = Infinity;\n for (const succ of successors) {\n minSuccessor = Math.min(minSuccessor, latest.get(succ) || 0);\n }\n latest.set(node, minSuccessor - (weightMap.get(node) || 0));\n }\n }\n\n // Calculate slack and find critical path\n const slack = new Map<string, number>();\n const criticalNodes: string[] = [];\n\n for (const node of nodes) {\n const nodeSlack = (latest.get(node) || 0) - (earliest.get(node) || 0);\n slack.set(node, nodeSlack);\n if (nodeSlack === 0) {\n criticalNodes.push(node);\n }\n }\n\n // Order critical nodes by topological order\n const path = topoResult.sorted.filter((n) => criticalNodes.includes(n));\n\n return {\n path,\n totalDuration,\n slack,\n };\n}\n\n// ============================================================================\n// Public API - Formula Operations\n// ============================================================================\n\n/**\n * Parse TOML formula content to a Formula object.\n * Uses WASM if available (352x faster), falls back to JavaScript.\n *\n * @param content - TOML string content to parse\n * @returns Parsed Formula object\n *\n * @example\n * ```typescript\n * const formula = await parseFormula(`\n * name = \"my-workflow\"\n * type = \"workflow\"\n * version = 1\n *\n * [[steps]]\n * id = \"step-1\"\n * title = \"First step\"\n * `);\n * ```\n */\nexport async function parseFormula(content: string): Promise<Formula> {\n const startTime = performance.now();\n const cacheKey = hashContent(content);\n\n // Check LRU cache first (O(1) lookup)\n const cached = formulaParseCache.get(cacheKey);\n if (cached) {\n recordTiming('parseFormula:cache-hit', startTime, false);\n return cached;\n }\n\n // Use batch deduplication for concurrent requests\n return parseDedup.dedupe(cacheKey, async () => {\n const wasmModule = await loadFormulaWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.parse_toml(content);\n const result = JSON.parse(resultJson) as Formula;\n formulaParseCache.set(cacheKey, result);\n recordTiming('parseFormula', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] parse_toml failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const result = parseTomlFallback(content);\n formulaParseCache.set(cacheKey, result);\n recordTiming('parseFormula', startTime, false);\n return result;\n });\n}\n\n/**\n * Cook a formula by substituting variables.\n * Uses WASM if available (352x faster), falls back to JavaScript.\n *\n * @param formula - Formula to cook\n * @param vars - Variables to substitute\n * @returns Cooked formula with variables substituted\n *\n * @example\n * ```typescript\n * const cooked = await cookFormula(formula, {\n * projectName: 'my-project',\n * author: 'developer'\n * });\n * ```\n */\nexport async function cookFormula(\n formula: Formula,\n vars: Record<string, string>\n): Promise<Formula> {\n const startTime = performance.now();\n const cacheKey = hashCookKey(formula, vars);\n\n // Check LRU cache first (O(1) lookup)\n const cached = cookCache.get(cacheKey);\n if (cached) {\n recordTiming('cookFormula:cache-hit', startTime, false);\n return cached;\n }\n\n // Use batch deduplication for concurrent requests\n return cookDedup.dedupe(cacheKey, async () => {\n const wasmModule = await loadFormulaWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.cook_formula(\n JSON.stringify(formula),\n JSON.stringify(vars)\n );\n const result = JSON.parse(resultJson) as Formula;\n cookCache.set(cacheKey, result);\n recordTiming('cookFormula', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] cook_formula failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const result = cookFormulaFallback(formula, vars);\n cookCache.set(cacheKey, result);\n recordTiming('cookFormula', startTime, false);\n return result;\n });\n}\n\n/**\n * Batch cook multiple formulas with corresponding variables.\n * Uses WASM if available (352x faster), falls back to JavaScript.\n *\n * @param formulas - Array of formulas to cook\n * @param varsArray - Array of variable objects (one per formula)\n * @returns Array of cooked formulas\n *\n * @example\n * ```typescript\n * const cooked = await cookBatch(\n * [formula1, formula2],\n * [{ name: 'a' }, { name: 'b' }]\n * );\n * ```\n */\nexport async function cookBatch(\n formulas: Formula[],\n varsArray: Record<string, string>[]\n): Promise<Formula[]> {\n const startTime = performance.now();\n\n if (formulas.length !== varsArray.length) {\n throw new Error('formulas and varsArray must have the same length');\n }\n\n const wasmModule = await loadFormulaWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.cook_batch(\n JSON.stringify(formulas),\n JSON.stringify(varsArray)\n );\n const result = JSON.parse(resultJson) as Formula[];\n recordTiming('cookBatch', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] cook_batch failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const results = await Promise.all(\n formulas.map((formula, i) => cookFormula(formula, varsArray[i]))\n );\n recordTiming('cookBatch', startTime, false);\n return results;\n}\n\n// ============================================================================\n// Public API - Graph Operations\n// ============================================================================\n\n/**\n * Perform topological sort on a dependency graph.\n * Uses WASM if available (150x faster), falls back to JavaScript.\n *\n * @param nodes - Array of node identifiers\n * @param edges - Array of edges (from -> to dependencies)\n * @returns Topological sort result with sorted order and cycle detection\n *\n * @example\n * ```typescript\n * const result = await topoSort(\n * ['a', 'b', 'c'],\n * [{ from: 'a', to: 'b' }, { from: 'b', to: 'c' }]\n * );\n * console.log(result.sorted); // ['a', 'b', 'c']\n * ```\n */\nexport async function topoSort(\n nodes: string[],\n edges: GraphEdge[]\n): Promise<TopoSortResult> {\n const startTime = performance.now();\n const cacheKey = hashGraphKey(nodes, edges);\n\n // Check LRU cache first (O(1) lookup)\n const cached = topoSortCache.get(cacheKey);\n if (cached) {\n recordTiming('topoSort:cache-hit', startTime, false);\n return cached;\n }\n\n // Use batch deduplication for concurrent requests\n return graphDedup.dedupe(cacheKey, async () => {\n const wasmModule = await loadGnnWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.topo_sort(\n JSON.stringify(nodes),\n JSON.stringify(edges)\n );\n const result = JSON.parse(resultJson) as TopoSortResult;\n topoSortCache.set(cacheKey, result);\n recordTiming('topoSort', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] topo_sort failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const result = topoSortFallback(nodes, edges);\n topoSortCache.set(cacheKey, result);\n recordTiming('topoSort', startTime, false);\n return result;\n });\n}\n\n/**\n * Detect cycles in a dependency graph.\n * Uses WASM if available (150x faster), falls back to JavaScript.\n *\n * @param nodes - Array of node identifiers\n * @param edges - Array of edges (from -> to dependencies)\n * @returns Cycle detection result\n *\n * @example\n * ```typescript\n * const result = await detectCycles(\n * ['a', 'b', 'c'],\n * [{ from: 'a', to: 'b' }, { from: 'b', to: 'a' }]\n * );\n * console.log(result.hasCycle); // true\n * console.log(result.cycleNodes); // ['a', 'b']\n * ```\n */\nexport async function detectCycles(\n nodes: string[],\n edges: GraphEdge[]\n): Promise<CycleDetectionResult> {\n const startTime = performance.now();\n\n const wasmModule = await loadGnnWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.detect_cycles(\n JSON.stringify(nodes),\n JSON.stringify(edges)\n );\n const result = JSON.parse(resultJson) as CycleDetectionResult;\n recordTiming('detectCycles', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] detect_cycles failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const result = detectCyclesFallback(nodes, edges);\n recordTiming('detectCycles', startTime, false);\n return result;\n}\n\n/**\n * Calculate the critical path through a weighted dependency graph.\n * Uses WASM if available (150x faster), falls back to JavaScript.\n *\n * @param nodes - Array of node identifiers\n * @param edges - Array of edges (from -> to dependencies)\n * @param weights - Array of node weights (durations)\n * @returns Critical path result with path, duration, and slack times\n *\n * @example\n * ```typescript\n * const result = await criticalPath(\n * ['a', 'b', 'c'],\n * [{ from: 'a', to: 'b' }, { from: 'b', to: 'c' }],\n * [\n * { nodeId: 'a', weight: 5 },\n * { nodeId: 'b', weight: 3 },\n * { nodeId: 'c', weight: 2 }\n * ]\n * );\n * console.log(result.path); // ['a', 'b', 'c']\n * console.log(result.totalDuration); // 10\n * ```\n */\nexport async function criticalPath(\n nodes: string[],\n edges: GraphEdge[],\n weights: NodeWeight[]\n): Promise<CriticalPathResult> {\n const startTime = performance.now();\n\n const wasmModule = await loadGnnWasm();\n\n if (wasmModule) {\n try {\n const resultJson = wasmModule.critical_path(\n JSON.stringify(nodes),\n JSON.stringify(edges),\n JSON.stringify(weights)\n );\n const parsed = JSON.parse(resultJson);\n // Convert slack array back to Map\n const result: CriticalPathResult = {\n path: parsed.path,\n totalDuration: parsed.totalDuration,\n slack: new Map(Object.entries(parsed.slack).map(([k, v]) => [k, v as number])),\n };\n recordTiming('criticalPath', startTime, true);\n return result;\n } catch (error) {\n console.warn('[WASM Loader] critical_path failed, using fallback:', error);\n }\n }\n\n // JavaScript fallback\n const result = criticalPathFallback(nodes, edges, weights);\n recordTiming('criticalPath', startTime, false);\n return result;\n}\n\n// ============================================================================\n// Module Management\n// ============================================================================\n\n/**\n * Preload all WASM modules.\n * Call this during initialization for best performance.\n *\n * @returns Object indicating which modules were loaded\n *\n * @example\n * ```typescript\n * const status = await preloadWasmModules();\n * console.log(status);\n * // { formulaWasm: true, gnnWasm: true }\n * ```\n */\nexport async function preloadWasmModules(): Promise<{\n formulaWasm: boolean;\n gnnWasm: boolean;\n}> {\n const [formulaResult, gnnResult] = await Promise.all([\n loadFormulaWasm(),\n loadGnnWasm(),\n ]);\n\n return {\n formulaWasm: formulaResult !== null,\n gnnWasm: gnnResult !== null,\n };\n}\n\n/**\n * Get WASM module versions.\n *\n * @returns Object with version strings, or null if module not loaded\n */\nexport async function getWasmVersions(): Promise<{\n formulaWasm: string | null;\n gnnWasm: string | null;\n}> {\n const formulaModule = await loadFormulaWasm();\n const gnnModule = await loadGnnWasm();\n\n return {\n formulaWasm: formulaModule?.version?.() ?? null,\n gnnWasm: gnnModule?.version?.() ?? null,\n };\n}\n\n/**\n * Reset the WASM module cache.\n * Clears lazy loader cache and forces reload on next access.\n * Useful for testing or when modules need to be reloaded.\n */\nexport function resetWasmCache(): void {\n // Clear the lazy loaders' internal cache\n lazyFormulaWasm.clearCache();\n lazyGnnWasm.clearCache();\n wasmAvailable = null;\n}\n\n/**\n * Schedule idle-time preloading of WASM modules.\n * Uses requestIdleCallback in browser, setImmediate in Node.\n * Does not block the main thread.\n *\n * @example\n * ```typescript\n * // Call during app initialization\n * scheduleIdlePreload();\n * ```\n */\nexport function scheduleIdlePreload(): void {\n // Register WASM modules for preloading\n modulePreloader.register('gastown-formula-wasm', async () => {\n return loadFormulaWasm();\n }, 10); // High priority\n\n modulePreloader.register('ruvector-gnn-wasm', async () => {\n return loadGnnWasm();\n }, 5); // Medium priority\n\n // Start preloading during idle time\n modulePreloader.startPreload().catch((error) => {\n console.debug('[WASM Loader] Idle preload error:', error);\n });\n}\n\n/**\n * Get cache statistics for performance monitoring.\n *\n * @returns Object with cache stats for each cache type\n *\n * @example\n * ```typescript\n * const stats = getCacheStats();\n * console.log(`Parse cache: ${stats.parseCache.entries} entries`);\n * console.log(`Cook cache hit rate: ${stats.cookCache.hitRate}`);\n * ```\n */\nexport function getCacheStats(): {\n parseCache: { entries: number; sizeBytes: number; hitRate: number };\n cookCache: { entries: number; sizeBytes: number; hitRate: number };\n topoSortCache: { entries: number; sizeBytes: number; hitRate: number };\n astCache: { entries: number; sizeBytes: number };\n preloader: { queued: number; loaded: number; errors: number; isPreloading: boolean };\n deduplicator: { parsePending: number; cookPending: number; graphPending: number };\n} {\n const parseCacheStats = formulaParseCache.stats();\n const cookCacheStats = cookCache.stats();\n const topoSortCacheStats = topoSortCache.stats();\n const astCacheStats = astCache.stats();\n const preloaderStatus = modulePreloader.status();\n\n return {\n parseCache: {\n entries: parseCacheStats.entries,\n sizeBytes: parseCacheStats.sizeBytes,\n hitRate: parseCacheStats.hitRate,\n },\n cookCache: {\n entries: cookCacheStats.entries,\n sizeBytes: cookCacheStats.sizeBytes,\n hitRate: cookCacheStats.hitRate,\n },\n topoSortCache: {\n entries: topoSortCacheStats.entries,\n sizeBytes: topoSortCacheStats.sizeBytes,\n hitRate: topoSortCacheStats.hitRate,\n },\n astCache: {\n entries: astCacheStats.entries,\n sizeBytes: astCacheStats.sizeBytes,\n },\n preloader: preloaderStatus,\n deduplicator: {\n parsePending: parseDedup.pendingCount,\n cookPending: cookDedup.pendingCount,\n graphPending: graphDedup.pendingCount,\n },\n };\n}\n\n/**\n * Clear all result caches.\n * Useful for testing or when formulas have been modified.\n */\nexport function clearAllCaches(): void {\n formulaParseCache.clear();\n cookCache.clear();\n topoSortCache.clear();\n astCache.clear();\n parseDedup.clear();\n cookDedup.clear();\n graphDedup.clear();\n}\n\n// ============================================================================\n// Export Summary\n// ============================================================================\n\nexport default {\n // Availability\n isWasmAvailable,\n\n // Formula operations\n loadFormulaWasm,\n parseFormula,\n cookFormula,\n cookBatch,\n\n // Graph operations\n loadGnnWasm,\n topoSort,\n detectCycles,\n criticalPath,\n\n // Module management\n preloadWasmModules,\n getWasmVersions,\n resetWasmCache,\n\n // Lazy loading status\n isFormulaWasmLoaded,\n isGnnWasmLoaded,\n getWasmLazyStats,\n\n // Performance optimization\n scheduleIdlePreload,\n getCacheStats,\n clearAllCaches,\n\n // Performance logging\n getPerformanceLog,\n clearPerformanceLog,\n};\n","/**\n * Gas Town Bridge Plugin - MCP Tools\n *\n * Implements 20 MCP tools for Gas Town orchestrator integration:\n *\n * Beads Integration (5 tools) - CLI Bridge:\n * 1. gt_beads_create - Create a bead/issue in Beads\n * 2. gt_beads_ready - List ready beads (no blockers)\n * 3. gt_beads_show - Show bead details\n * 4. gt_beads_dep - Manage bead dependencies\n * 5. gt_beads_sync - Sync beads with AgentDB\n *\n * Convoy Operations (3 tools) - CLI Bridge:\n * 6. gt_convoy_create - Create a convoy (work order)\n * 7. gt_convoy_status - Check convoy status\n * 8. gt_convoy_track - Add/remove issues from convoy\n *\n * Formula Engine (4 tools) - WASM Accelerated:\n * 9. gt_formula_list - List available formulas\n * 10. gt_formula_cook - Cook formula into protomolecule (352x faster)\n * 11. gt_formula_execute - Execute a formula\n * 12. gt_formula_create - Create custom formula\n *\n * Orchestration (3 tools) - CLI Bridge:\n * 13. gt_sling - Sling work to an agent\n * 14. gt_agents - List Gas Town agents\n * 15. gt_mail - Send/receive Gas Town mail\n *\n * WASM Computation (5 tools) - Pure WASM:\n * 16. gt_wasm_parse_formula - Parse TOML formula to AST\n * 17. gt_wasm_resolve_deps - Resolve dependency graph\n * 18. gt_wasm_cook_batch - Batch cook multiple formulas\n * 19. gt_wasm_match_pattern - Find similar formulas/beads\n * 20. gt_wasm_optimize_convoy - Optimize convoy execution order\n *\n * Based on ADR-043: Gas Town Bridge Plugin for Claude Flow V3\n *\n * @module v3/plugins/gastown-bridge/mcp-tools\n */\n\nimport { z } from 'zod';\nimport type {\n Bead,\n Convoy,\n Formula,\n FormulaType,\n CookedFormula,\n Step,\n Leg,\n Var,\n GasTownAgent,\n GasTownMail,\n DepAction,\n SyncDirection,\n ConvoyAction,\n MailAction,\n AgentRole,\n TargetAgent,\n ConvoyStrategy,\n DependencyAction,\n FormulaAST,\n DependencyResolution,\n PatternMatch,\n ConvoyOptimization,\n IGasTownBridge,\n IBeadsSyncService,\n IFormulaWasm,\n IDependencyWasm,\n} from './types.js';\n\n// ============================================================================\n// MCP Tool Types\n// ============================================================================\n\n/**\n * MCP Tool definition\n */\nexport interface MCPTool<TInput = unknown, TOutput = unknown> {\n /** Tool name (e.g., \"gt_beads_create\") */\n name: string;\n /** Tool description */\n description: string;\n /** Tool category */\n category: string;\n /** Tool version */\n version: string;\n /** Execution layer (cli, wasm, hybrid) */\n layer: 'cli' | 'wasm' | 'hybrid';\n /** Input schema */\n inputSchema: z.ZodType<TInput, z.ZodTypeDef, unknown>;\n /** Handler function */\n handler: (input: TInput, context: ToolContext) => Promise<MCPToolResult<TOutput>>;\n}\n\n/**\n * Tool execution context\n */\nexport interface ToolContext {\n /** Key-value store for cross-tool state */\n get<T>(key: string): T | undefined;\n set<T>(key: string, value: T): void;\n /** Bridge instances */\n bridges: {\n gastown: IGasTownBridge;\n beadsSync: IBeadsSyncService;\n formulaWasm: IFormulaWasm;\n dependencyWasm: IDependencyWasm;\n };\n /** Configuration */\n config: {\n townRoot: string;\n allowedRigs: string[];\n maxBeadsLimit: number;\n maskSecrets: boolean;\n enableWasm: boolean;\n };\n}\n\n/**\n * MCP Tool result format\n */\nexport interface MCPToolResult<T = unknown> {\n content: Array<{ type: 'text'; text: string }>;\n data?: T;\n}\n\n// ============================================================================\n// Zod Input Schemas\n// ============================================================================\n\n// --- Beads Schemas ---\n\n/**\n * Schema for gt_beads_create\n */\nexport const BeadsCreateInputSchema = z.object({\n /** Bead title */\n title: z.string().min(1).max(500).describe('Bead title'),\n /** Bead description */\n description: z.string().max(10000).optional().describe('Bead description'),\n /** Priority (0 = highest) */\n priority: z.number().int().min(0).max(10).default(2).describe('Priority (0 = highest)'),\n /** Labels for categorization */\n labels: z.array(z.string().max(50)).max(20).optional().describe('Labels for categorization'),\n /** Parent bead ID for epics */\n parent: z.string().max(50).optional().describe('Parent bead ID for epics'),\n /** Rig (repository) to create in */\n rig: z.string().max(100).optional().describe('Rig (repository) to create in'),\n});\n\nexport type BeadsCreateInput = z.infer<typeof BeadsCreateInputSchema>;\n\n/**\n * Schema for gt_beads_ready\n */\nexport const BeadsReadyInputSchema = z.object({\n /** Filter by rig */\n rig: z.string().max(100).optional().describe('Filter by rig (repository)'),\n /** Maximum beads to return */\n limit: z.number().int().min(1).max(100).default(10).describe('Maximum beads to return'),\n /** Filter by labels */\n labels: z.array(z.string().max(50)).max(10).optional().describe('Filter by labels'),\n});\n\nexport type BeadsReadyInput = z.infer<typeof BeadsReadyInputSchema>;\n\n/**\n * Schema for gt_beads_show\n */\nexport const BeadsShowInputSchema = z.object({\n /** Bead ID to show */\n bead_id: z.string().min(1).max(50).describe('Bead ID to show (e.g., \"gt-abc12\")'),\n});\n\nexport type BeadsShowInput = z.infer<typeof BeadsShowInputSchema>;\n\n/**\n * Schema for gt_beads_dep\n */\nexport const BeadsDepInputSchema = z.object({\n /** Action to perform */\n action: z.enum(['add', 'remove']).describe('Action to perform on dependency'),\n /** Child bead ID (the one that depends) */\n child: z.string().min(1).max(50).describe('Child bead ID (the one that depends)'),\n /** Parent bead ID (the dependency) */\n parent: z.string().min(1).max(50).describe('Parent bead ID (the dependency)'),\n});\n\nexport type BeadsDepInput = z.infer<typeof BeadsDepInputSchema>;\n\n/**\n * Schema for gt_beads_sync\n */\nexport const BeadsSyncInputSchema = z.object({\n /** Sync direction */\n direction: z.enum(['pull', 'push', 'both']).default('both').describe('Sync direction'),\n /** Filter by rig */\n rig: z.string().max(100).optional().describe('Filter by rig (repository)'),\n /** AgentDB namespace for sync */\n namespace: z.string().max(100).default('gastown:beads').describe('AgentDB namespace'),\n});\n\nexport type BeadsSyncInput = z.infer<typeof BeadsSyncInputSchema>;\n\n// --- Convoy Schemas ---\n\n/**\n * Schema for gt_convoy_create\n */\nexport const ConvoyCreateInputSchema = z.object({\n /** Convoy name */\n name: z.string().min(1).max(200).describe('Convoy name'),\n /** Issue IDs to track */\n issues: z.array(z.string().max(50)).min(1).max(100).describe('Issue IDs to track'),\n /** Convoy description */\n description: z.string().max(5000).optional().describe('Convoy description'),\n});\n\nexport type ConvoyCreateInput = z.infer<typeof ConvoyCreateInputSchema>;\n\n/**\n * Schema for gt_convoy_status\n */\nexport const ConvoyStatusInputSchema = z.object({\n /** Convoy ID (optional - shows all if omitted) */\n convoy_id: z.string().max(50).optional().describe('Convoy ID (shows all if omitted)'),\n /** Include detailed progress */\n detailed: z.boolean().default(false).describe('Include detailed progress'),\n});\n\nexport type ConvoyStatusInput = z.infer<typeof ConvoyStatusInputSchema>;\n\n/**\n * Schema for gt_convoy_track\n */\nexport const ConvoyTrackInputSchema = z.object({\n /** Convoy ID */\n convoy_id: z.string().min(1).max(50).describe('Convoy ID'),\n /** Action to perform */\n action: z.enum(['add', 'remove']).describe('Action to perform'),\n /** Issue IDs to add/remove */\n issues: z.array(z.string().max(50)).min(1).max(50).describe('Issue IDs to add/remove'),\n});\n\nexport type ConvoyTrackInput = z.infer<typeof ConvoyTrackInputSchema>;\n\n// --- Formula Schemas ---\n\n/**\n * Schema for gt_formula_list\n */\nexport const FormulaListInputSchema = z.object({\n /** Filter by formula type */\n type: z.enum(['convoy', 'workflow', 'expansion', 'aspect']).optional()\n .describe('Filter by formula type'),\n /** Include built-in formulas */\n include_builtin: z.boolean().default(true).describe('Include built-in formulas'),\n});\n\nexport type FormulaListInput = z.infer<typeof FormulaListInputSchema>;\n\n/**\n * Schema for gt_formula_cook\n */\nexport const FormulaCookInputSchema = z.object({\n /** Formula name or TOML content */\n formula: z.string().min(1).max(50000).describe('Formula name or TOML content'),\n /** Variables for substitution */\n vars: z.record(z.string().max(50), z.string().max(5000)).describe('Variables for substitution'),\n /** Whether formula is TOML content (vs name) */\n is_content: z.boolean().default(false).describe('Whether formula is TOML content (vs name)'),\n});\n\nexport type FormulaCookInput = z.infer<typeof FormulaCookInputSchema>;\n\n/**\n * Schema for gt_formula_execute\n */\nexport const FormulaExecuteInputSchema = z.object({\n /** Formula name */\n formula: z.string().min(1).max(200).describe('Formula name'),\n /** Variables for substitution */\n vars: z.record(z.string().max(50), z.string().max(5000)).describe('Variables for substitution'),\n /** Target agent for execution */\n target_agent: z.enum(['polecat', 'crew', 'mayor', 'refinery']).optional()\n .describe('Target agent for execution'),\n /** Dry run (don\\'t actually execute) */\n dry_run: z.boolean().default(false).describe('Dry run (don\\'t actually execute)'),\n});\n\nexport type FormulaExecuteInput = z.infer<typeof FormulaExecuteInputSchema>;\n\n/**\n * Schema for gt_formula_create\n */\nexport const FormulaCreateInputSchema = z.object({\n /** Formula name */\n name: z.string().min(1).max(100).describe('Formula name'),\n /** Formula type */\n type: z.enum(['convoy', 'workflow', 'expansion', 'aspect']).describe('Formula type'),\n /** Workflow steps */\n steps: z.array(z.object({\n id: z.string().min(1).max(50),\n title: z.string().min(1).max(200),\n description: z.string().max(5000).optional(),\n needs: z.array(z.string().max(50)).optional(),\n })).max(100).optional().describe('Workflow steps'),\n /** Variable definitions */\n vars: z.record(z.string().max(50), z.object({\n default: z.string().max(1000).optional(),\n description: z.string().max(500).optional(),\n required: z.boolean().optional(),\n })).optional().describe('Variable definitions'),\n /** Formula description */\n description: z.string().max(2000).optional().describe('Formula description'),\n});\n\nexport type FormulaCreateInput = z.infer<typeof FormulaCreateInputSchema>;\n\n// --- Orchestration Schemas ---\n\n/**\n * Schema for gt_sling\n */\nexport const SlingInputSchema = z.object({\n /** Bead ID to sling */\n bead_id: z.string().min(1).max(50).describe('Bead ID to sling'),\n /** Target agent type */\n target: z.enum(['polecat', 'crew', 'mayor']).describe('Target agent type'),\n /** Optional formula to use */\n formula: z.string().max(200).optional().describe('Optional formula to use'),\n /** Priority override */\n priority: z.number().int().min(0).max(10).optional().describe('Priority override'),\n});\n\nexport type SlingInput = z.infer<typeof SlingInputSchema>;\n\n/**\n * Schema for gt_agents\n */\nexport const AgentsInputSchema = z.object({\n /** Filter by rig */\n rig: z.string().max(100).optional().describe('Filter by rig'),\n /** Filter by role */\n role: z.enum(['mayor', 'polecat', 'refinery', 'witness', 'deacon', 'dog', 'crew']).optional()\n .describe('Filter by agent role'),\n /** Include inactive agents */\n include_inactive: z.boolean().default(false).describe('Include inactive agents'),\n});\n\nexport type AgentsInput = z.infer<typeof AgentsInputSchema>;\n\n/**\n * Schema for gt_mail\n */\nexport const MailInputSchema = z.object({\n /** Mail action */\n action: z.enum(['send', 'read', 'list']).describe('Mail action'),\n /** Recipient (for send) */\n to: z.string().max(100).optional().describe('Recipient (for send)'),\n /** Subject (for send) */\n subject: z.string().max(500).optional().describe('Subject (for send)'),\n /** Body (for send) */\n body: z.string().max(10000).optional().describe('Body (for send)'),\n /** Mail ID (for read) */\n mail_id: z.string().max(50).optional().describe('Mail ID (for read)'),\n /** Maximum messages to list */\n limit: z.number().int().min(1).max(100).default(20).describe('Maximum messages to list'),\n});\n\nexport type MailInput = z.infer<typeof MailInputSchema>;\n\n// --- WASM Schemas ---\n\n/**\n * Schema for gt_wasm_parse_formula\n */\nexport const WasmParseFormulaInputSchema = z.object({\n /** TOML content to parse */\n content: z.string().min(1).max(100000).describe('TOML content to parse'),\n /** Validate against schema */\n validate: z.boolean().default(true).describe('Validate against formula schema'),\n});\n\nexport type WasmParseFormulaInput = z.infer<typeof WasmParseFormulaInputSchema>;\n\n/**\n * Schema for gt_wasm_resolve_deps\n */\nexport const WasmResolveDepsInputSchema = z.object({\n /** Beads to analyze */\n beads: z.array(z.object({\n id: z.string().min(1).max(50),\n dependencies: z.array(z.string().max(50)).optional(),\n })).min(1).max(1000).describe('Beads to analyze'),\n /** Analysis action */\n action: z.enum(['topo_sort', 'critical_path', 'cycle_detect']).default('topo_sort')\n .describe('Analysis action'),\n});\n\nexport type WasmResolveDepsInput = z.infer<typeof WasmResolveDepsInputSchema>;\n\n/**\n * Schema for gt_wasm_cook_batch\n */\nexport const WasmCookBatchInputSchema = z.object({\n /** Formulas to cook */\n formulas: z.array(z.object({\n name: z.string().min(1).max(100),\n content: z.string().min(1).max(50000),\n })).min(1).max(50).describe('Formulas to cook'),\n /** Variables for each formula */\n vars: z.array(z.record(z.string().max(50), z.string().max(5000))).describe('Variables for each formula'),\n /** Continue on error */\n continue_on_error: z.boolean().default(false).describe('Continue on error'),\n});\n\nexport type WasmCookBatchInput = z.infer<typeof WasmCookBatchInputSchema>;\n\n/**\n * Schema for gt_wasm_match_pattern\n */\nexport const WasmMatchPatternInputSchema = z.object({\n /** Search query */\n query: z.string().min(1).max(5000).describe('Search query'),\n /** Candidate patterns to match against */\n candidates: z.array(z.string().max(50000)).min(1).max(1000).describe('Candidate patterns'),\n /** Number of results to return */\n k: z.number().int().min(1).max(100).default(10).describe('Number of results to return'),\n /** Minimum similarity threshold (0-1) */\n threshold: z.number().min(0).max(1).default(0.5).describe('Minimum similarity threshold'),\n});\n\nexport type WasmMatchPatternInput = z.infer<typeof WasmMatchPatternInputSchema>;\n\n/**\n * Schema for gt_wasm_optimize_convoy\n */\nexport const WasmOptimizeConvoyInputSchema = z.object({\n /** Convoy ID to optimize */\n convoy_id: z.string().min(1).max(50).describe('Convoy ID to optimize'),\n /** Optimization strategy */\n strategy: z.enum(['parallel', 'serial', 'hybrid']).default('hybrid')\n .describe('Optimization strategy'),\n /** Consider resource constraints */\n resource_constraints: z.object({\n max_parallel: z.number().int().min(1).max(100).optional(),\n agent_capacity: z.record(z.string(), z.number().int().min(1)).optional(),\n }).optional().describe('Resource constraints'),\n});\n\nexport type WasmOptimizeConvoyInput = z.infer<typeof WasmOptimizeConvoyInputSchema>;\n\n// ============================================================================\n// Result Types\n// ============================================================================\n\n/**\n * Result for bead creation\n */\nexport interface BeadCreateResult {\n success: boolean;\n bead: Bead;\n durationMs: number;\n}\n\n/**\n * Result for beads ready list\n */\nexport interface BeadsReadyResult {\n success: boolean;\n beads: Bead[];\n total: number;\n durationMs: number;\n}\n\n/**\n * Result for bead show\n */\nexport interface BeadShowResult {\n success: boolean;\n bead: Bead;\n dependencies: string[];\n dependents: string[];\n durationMs: number;\n}\n\n/**\n * Result for bead dependency operation\n */\nexport interface BeadDepResult {\n success: boolean;\n action: DepAction;\n child: string;\n parent: string;\n durationMs: number;\n}\n\n/**\n * Result for beads sync\n */\nexport interface BeadsSyncResult {\n success: boolean;\n direction: SyncDirection;\n pulled: number;\n pushed: number;\n conflicts: number;\n durationMs: number;\n}\n\n/**\n * Result for convoy creation\n */\nexport interface ConvoyCreateResult {\n success: boolean;\n convoy: Convoy;\n durationMs: number;\n}\n\n/**\n * Result for convoy status\n */\nexport interface ConvoyStatusResult {\n success: boolean;\n convoys: Convoy[];\n durationMs: number;\n}\n\n/**\n * Result for convoy track\n */\nexport interface ConvoyTrackResult {\n success: boolean;\n convoy_id: string;\n action: 'add' | 'remove';\n issues_modified: string[];\n durationMs: number;\n}\n\n/**\n * Result for formula list\n */\nexport interface FormulaListResult {\n success: boolean;\n formulas: Array<{\n name: string;\n type: FormulaType;\n description: string;\n builtin: boolean;\n }>;\n durationMs: number;\n}\n\n/**\n * Result for formula cook\n */\nexport interface FormulaCookResult {\n success: boolean;\n cooked: CookedFormula;\n wasmUsed: boolean;\n durationMs: number;\n}\n\n/**\n * Result for formula execute\n */\nexport interface FormulaExecuteResult {\n success: boolean;\n formula: string;\n beads_created: string[];\n target_agent?: string;\n dry_run: boolean;\n durationMs: number;\n}\n\n/**\n * Result for formula create\n */\nexport interface FormulaCreateResult {\n success: boolean;\n name: string;\n path: string;\n durationMs: number;\n}\n\n/**\n * Result for sling\n */\nexport interface SlingResult {\n success: boolean;\n bead_id: string;\n target: TargetAgent;\n formula_used?: string;\n durationMs: number;\n}\n\n/**\n * Result for agents list\n */\nexport interface AgentsResult {\n success: boolean;\n agents: GasTownAgent[];\n durationMs: number;\n}\n\n/**\n * Result for mail\n */\nexport interface MailResult {\n success: boolean;\n action: MailAction;\n messages?: GasTownMail[];\n sent_id?: string;\n durationMs: number;\n}\n\n/**\n * Result for WASM formula parse\n */\nexport interface WasmParseFormulaResult {\n success: boolean;\n ast: FormulaAST;\n wasmPerformanceMs: number;\n durationMs: number;\n}\n\n/**\n * Result for WASM dependency resolution\n */\nexport interface WasmResolveDepsResult {\n success: boolean;\n action: DependencyAction;\n result: DependencyResolution;\n wasmPerformanceMs: number;\n durationMs: number;\n}\n\n/**\n * Result for WASM batch cook\n */\nexport interface WasmCookBatchResult {\n success: boolean;\n cooked: CookedFormula[];\n errors: Array<{ index: number; error: string }>;\n wasmPerformanceMs: number;\n durationMs: number;\n}\n\n/**\n * Result for WASM pattern match\n */\nexport interface WasmMatchPatternResult {\n success: boolean;\n matches: PatternMatch[];\n wasmPerformanceMs: number;\n durationMs: number;\n}\n\n/**\n * Result for WASM convoy optimization\n */\nexport interface WasmOptimizeConvoyResult {\n success: boolean;\n optimization: ConvoyOptimization;\n wasmPerformanceMs: number;\n durationMs: number;\n}\n\n// ============================================================================\n// Tool Handlers\n// ============================================================================\n\n/**\n * MCP Tool: gt_beads_create\n *\n * Create a bead/issue in the Beads system\n */\nexport const beadsCreateTool: MCPTool<BeadsCreateInput, BeadCreateResult> = {\n name: 'gt_beads_create',\n description: 'Create a bead (issue/task) in the Gas Town Beads system with priority and labels',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: BeadsCreateInputSchema,\n handler: async (input, context): Promise<MCPToolResult<BeadCreateResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = BeadsCreateInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const bead = await bridge.createBead({\n title: validated.title,\n description: validated.description,\n priority: validated.priority,\n labels: validated.labels,\n parent: validated.parent,\n rig: validated.rig,\n });\n\n const result: BeadCreateResult = {\n success: true,\n bead,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_beads_ready\n *\n * List beads that are ready to work on (no blockers)\n */\nexport const beadsReadyTool: MCPTool<BeadsReadyInput, BeadsReadyResult> = {\n name: 'gt_beads_ready',\n description: 'List beads that are ready to work on (no unresolved dependencies)',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: BeadsReadyInputSchema,\n handler: async (input, context): Promise<MCPToolResult<BeadsReadyResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = BeadsReadyInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const limit = Math.min(validated.limit, context.config.maxBeadsLimit);\n const beads = await bridge.getReady(limit, validated.rig, validated.labels);\n\n const result: BeadsReadyResult = {\n success: true,\n beads,\n total: beads.length,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_beads_show\n *\n * Show detailed information about a specific bead\n */\nexport const beadsShowTool: MCPTool<BeadsShowInput, BeadShowResult> = {\n name: 'gt_beads_show',\n description: 'Show detailed information about a specific bead including dependencies',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: BeadsShowInputSchema,\n handler: async (input, context): Promise<MCPToolResult<BeadShowResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = BeadsShowInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const { bead, dependencies, dependents } = await bridge.showBead(validated.bead_id);\n\n const result: BeadShowResult = {\n success: true,\n bead,\n dependencies,\n dependents,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_beads_dep\n *\n * Manage bead dependencies (add/remove)\n */\nexport const beadsDepTool: MCPTool<BeadsDepInput, BeadDepResult> = {\n name: 'gt_beads_dep',\n description: 'Add or remove dependencies between beads',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: BeadsDepInputSchema,\n handler: async (input, context): Promise<MCPToolResult<BeadDepResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = BeadsDepInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n await bridge.manageDependency(validated.action, validated.child, validated.parent);\n\n const result: BeadDepResult = {\n success: true,\n action: validated.action,\n child: validated.child,\n parent: validated.parent,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_beads_sync\n *\n * Sync beads with AgentDB (bidirectional)\n */\nexport const beadsSyncTool: MCPTool<BeadsSyncInput, BeadsSyncResult> = {\n name: 'gt_beads_sync',\n description: 'Synchronize beads between Gas Town and Claude Flow AgentDB',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'hybrid',\n inputSchema: BeadsSyncInputSchema,\n handler: async (input, context): Promise<MCPToolResult<BeadsSyncResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = BeadsSyncInputSchema.parse(input);\n const syncService = context.bridges.beadsSync;\n\n let pulled = 0;\n let pushed = 0;\n let conflicts = 0;\n\n if (validated.direction === 'pull' || validated.direction === 'both') {\n const pullResult = await syncService.pullBeads(validated.rig, validated.namespace);\n pulled = pullResult.synced;\n conflicts += pullResult.conflicts;\n }\n\n if (validated.direction === 'push' || validated.direction === 'both') {\n const pushResult = await syncService.pushTasks(validated.namespace);\n pushed = pushResult.pushed;\n conflicts += pushResult.conflicts;\n }\n\n const result: BeadsSyncResult = {\n success: true,\n direction: validated.direction,\n pulled,\n pushed,\n conflicts,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_convoy_create\n *\n * Create a convoy (work order) for tracking multiple issues\n */\nexport const convoyCreateTool: MCPTool<ConvoyCreateInput, ConvoyCreateResult> = {\n name: 'gt_convoy_create',\n description: 'Create a convoy (work order) for tracking and coordinating multiple beads',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: ConvoyCreateInputSchema,\n handler: async (input, context): Promise<MCPToolResult<ConvoyCreateResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = ConvoyCreateInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const convoy = await bridge.createConvoy({\n name: validated.name,\n issues: validated.issues,\n description: validated.description,\n });\n\n const result: ConvoyCreateResult = {\n success: true,\n convoy,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_convoy_status\n *\n * Check convoy status (single or all)\n */\nexport const convoyStatusTool: MCPTool<ConvoyStatusInput, ConvoyStatusResult> = {\n name: 'gt_convoy_status',\n description: 'Check the status of one or all convoys including progress metrics',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: ConvoyStatusInputSchema,\n handler: async (input, context): Promise<MCPToolResult<ConvoyStatusResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = ConvoyStatusInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const convoys = await bridge.getConvoyStatus(validated.convoy_id, validated.detailed);\n\n const result: ConvoyStatusResult = {\n success: true,\n convoys,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_convoy_track\n *\n * Add or remove issues from a convoy\n */\nexport const convoyTrackTool: MCPTool<ConvoyTrackInput, ConvoyTrackResult> = {\n name: 'gt_convoy_track',\n description: 'Add or remove issues from an existing convoy',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: ConvoyTrackInputSchema,\n handler: async (input, context): Promise<MCPToolResult<ConvoyTrackResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = ConvoyTrackInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n await bridge.trackConvoy(validated.convoy_id, validated.action, validated.issues);\n\n const result: ConvoyTrackResult = {\n success: true,\n convoy_id: validated.convoy_id,\n action: validated.action,\n issues_modified: validated.issues,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_formula_list\n *\n * List available formulas\n */\nexport const formulaListTool: MCPTool<FormulaListInput, FormulaListResult> = {\n name: 'gt_formula_list',\n description: 'List available Gas Town formulas with optional type filter',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: FormulaListInputSchema,\n handler: async (input, context): Promise<MCPToolResult<FormulaListResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = FormulaListInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const formulas = await bridge.listFormulas(validated.type, validated.include_builtin);\n\n const result: FormulaListResult = {\n success: true,\n formulas,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_formula_cook\n *\n * Cook a formula with variable substitution (352x faster with WASM)\n */\nexport const formulaCookTool: MCPTool<FormulaCookInput, FormulaCookResult> = {\n name: 'gt_formula_cook',\n description: 'Cook a formula into a protomolecule with variable substitution (WASM accelerated)',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: FormulaCookInputSchema,\n handler: async (input, context): Promise<MCPToolResult<FormulaCookResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = FormulaCookInputSchema.parse(input);\n let wasmUsed = false;\n let cooked: CookedFormula;\n\n // Try WASM first if enabled\n if (context.config.enableWasm) {\n try {\n const formulaWasm = context.bridges.formulaWasm;\n if (formulaWasm.isInitialized()) {\n cooked = await formulaWasm.cookFormula(validated.formula, validated.vars, validated.is_content);\n wasmUsed = true;\n } else {\n // Fallback to CLI\n const bridge = context.bridges.gastown;\n cooked = await bridge.cookFormula(validated.formula, validated.vars);\n }\n } catch {\n // Fallback to CLI on WASM error\n const bridge = context.bridges.gastown;\n cooked = await bridge.cookFormula(validated.formula, validated.vars);\n }\n } else {\n const bridge = context.bridges.gastown;\n cooked = await bridge.cookFormula(validated.formula, validated.vars);\n }\n\n const result: FormulaCookResult = {\n success: true,\n cooked,\n wasmUsed,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_formula_execute\n *\n * Execute a formula (creates beads/molecules)\n */\nexport const formulaExecuteTool: MCPTool<FormulaExecuteInput, FormulaExecuteResult> = {\n name: 'gt_formula_execute',\n description: 'Execute a formula to create beads/molecules in Gas Town',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'hybrid',\n inputSchema: FormulaExecuteInputSchema,\n handler: async (input, context): Promise<MCPToolResult<FormulaExecuteResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = FormulaExecuteInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const { beads_created } = await bridge.executeFormula(\n validated.formula,\n validated.vars,\n validated.target_agent,\n validated.dry_run\n );\n\n const result: FormulaExecuteResult = {\n success: true,\n formula: validated.formula,\n beads_created,\n target_agent: validated.target_agent,\n dry_run: validated.dry_run,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_formula_create\n *\n * Create a custom formula\n */\nexport const formulaCreateTool: MCPTool<FormulaCreateInput, FormulaCreateResult> = {\n name: 'gt_formula_create',\n description: 'Create a custom formula definition',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: FormulaCreateInputSchema,\n handler: async (input, context): Promise<MCPToolResult<FormulaCreateResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = FormulaCreateInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n // Map steps to ensure description is always a string (Step type requires it)\n const mappedSteps = validated.steps?.map(s => ({\n id: s.id,\n title: s.title,\n description: s.description ?? '', // Provide default empty string\n needs: s.needs,\n }));\n\n const { path } = await bridge.createFormula({\n name: validated.name,\n type: validated.type,\n steps: mappedSteps,\n vars: validated.vars,\n description: validated.description,\n });\n\n const result: FormulaCreateResult = {\n success: true,\n name: validated.name,\n path,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_sling\n *\n * Sling work to a Gas Town agent\n */\nexport const slingTool: MCPTool<SlingInput, SlingResult> = {\n name: 'gt_sling',\n description: 'Sling (assign) a bead to a Gas Town agent for processing',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: SlingInputSchema,\n handler: async (input, context): Promise<MCPToolResult<SlingResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = SlingInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n await bridge.sling(validated.bead_id, validated.target, validated.formula, validated.priority);\n\n const result: SlingResult = {\n success: true,\n bead_id: validated.bead_id,\n target: validated.target,\n formula_used: validated.formula,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_agents\n *\n * List Gas Town agents\n */\nexport const agentsTool: MCPTool<AgentsInput, AgentsResult> = {\n name: 'gt_agents',\n description: 'List Gas Town agents with optional role and rig filters',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: AgentsInputSchema,\n handler: async (input, context): Promise<MCPToolResult<AgentsResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = AgentsInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n const agents = await bridge.listAgents(validated.rig, validated.role, validated.include_inactive);\n\n const result: AgentsResult = {\n success: true,\n agents,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_mail\n *\n * Send/receive Gas Town mail\n */\nexport const mailTool: MCPTool<MailInput, MailResult> = {\n name: 'gt_mail',\n description: 'Send, read, or list Gas Town internal mail messages',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'cli',\n inputSchema: MailInputSchema,\n handler: async (input, context): Promise<MCPToolResult<MailResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = MailInputSchema.parse(input);\n const bridge = context.bridges.gastown;\n\n let messages: GasTownMail[] | undefined;\n let sent_id: string | undefined;\n\n switch (validated.action) {\n case 'send':\n if (!validated.to || !validated.subject || !validated.body) {\n throw new Error('send action requires to, subject, and body');\n }\n sent_id = await bridge.sendMail(validated.to, validated.subject, validated.body);\n break;\n case 'read':\n if (!validated.mail_id) {\n throw new Error('read action requires mail_id');\n }\n messages = [await bridge.readMail(validated.mail_id)];\n break;\n case 'list':\n messages = await bridge.listMail(validated.limit);\n break;\n }\n\n const result: MailResult = {\n success: true,\n action: validated.action,\n messages,\n sent_id,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_wasm_parse_formula\n *\n * Parse TOML formula to AST (352x faster than JS)\n */\nexport const wasmParseFormulaTool: MCPTool<WasmParseFormulaInput, WasmParseFormulaResult> = {\n name: 'gt_wasm_parse_formula',\n description: 'Parse TOML formula content to AST using WASM (352x faster than JavaScript)',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: WasmParseFormulaInputSchema,\n handler: async (input, context): Promise<MCPToolResult<WasmParseFormulaResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = WasmParseFormulaInputSchema.parse(input);\n const formulaWasm = context.bridges.formulaWasm;\n\n if (!formulaWasm.isInitialized()) {\n await formulaWasm.initialize();\n }\n\n const wasmStart = Date.now();\n const ast = await formulaWasm.parseFormula(validated.content, validated.validate);\n const wasmDuration = Date.now() - wasmStart;\n\n const result: WasmParseFormulaResult = {\n success: true,\n ast,\n wasmPerformanceMs: wasmDuration,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_wasm_resolve_deps\n *\n * Resolve dependency graph using WASM (150x faster than JS)\n */\nexport const wasmResolveDepsTool: MCPTool<WasmResolveDepsInput, WasmResolveDepsResult> = {\n name: 'gt_wasm_resolve_deps',\n description: 'Resolve bead dependencies using WASM (topological sort, cycle detection, critical path)',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: WasmResolveDepsInputSchema,\n handler: async (input, context): Promise<MCPToolResult<WasmResolveDepsResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = WasmResolveDepsInputSchema.parse(input);\n const depWasm = context.bridges.dependencyWasm;\n\n if (!depWasm.isInitialized()) {\n await depWasm.initialize();\n }\n\n const wasmStart = Date.now();\n const resolution = await depWasm.resolveDependencies(validated.beads, validated.action);\n const wasmDuration = Date.now() - wasmStart;\n\n const result: WasmResolveDepsResult = {\n success: true,\n action: validated.action,\n result: resolution,\n wasmPerformanceMs: wasmDuration,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_wasm_cook_batch\n *\n * Batch cook multiple formulas using WASM (352x faster than JS)\n */\nexport const wasmCookBatchTool: MCPTool<WasmCookBatchInput, WasmCookBatchResult> = {\n name: 'gt_wasm_cook_batch',\n description: 'Batch cook multiple formulas using WASM for maximum performance',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: WasmCookBatchInputSchema,\n handler: async (input, context): Promise<MCPToolResult<WasmCookBatchResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = WasmCookBatchInputSchema.parse(input);\n const formulaWasm = context.bridges.formulaWasm;\n\n if (!formulaWasm.isInitialized()) {\n await formulaWasm.initialize();\n }\n\n const wasmStart = Date.now();\n const { cooked, errors } = await formulaWasm.cookBatch(\n validated.formulas,\n validated.vars,\n validated.continue_on_error\n );\n const wasmDuration = Date.now() - wasmStart;\n\n const result: WasmCookBatchResult = {\n success: errors.length === 0 || validated.continue_on_error,\n cooked,\n errors,\n wasmPerformanceMs: wasmDuration,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_wasm_match_pattern\n *\n * Find similar formulas/beads using WASM (150x-12500x faster with HNSW)\n */\nexport const wasmMatchPatternTool: MCPTool<WasmMatchPatternInput, WasmMatchPatternResult> = {\n name: 'gt_wasm_match_pattern',\n description: 'Find similar formulas or beads using HNSW pattern matching (150x-12500x faster)',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: WasmMatchPatternInputSchema,\n handler: async (input, context): Promise<MCPToolResult<WasmMatchPatternResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = WasmMatchPatternInputSchema.parse(input);\n const depWasm = context.bridges.dependencyWasm;\n\n if (!depWasm.isInitialized()) {\n await depWasm.initialize();\n }\n\n const wasmStart = Date.now();\n const matches = await depWasm.matchPatterns(\n validated.query,\n validated.candidates,\n validated.k,\n validated.threshold\n );\n const wasmDuration = Date.now() - wasmStart;\n\n const result: WasmMatchPatternResult = {\n success: true,\n matches,\n wasmPerformanceMs: wasmDuration,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n/**\n * MCP Tool: gt_wasm_optimize_convoy\n *\n * Optimize convoy execution order using WASM (150x faster than JS)\n */\nexport const wasmOptimizeConvoyTool: MCPTool<WasmOptimizeConvoyInput, WasmOptimizeConvoyResult> = {\n name: 'gt_wasm_optimize_convoy',\n description: 'Optimize convoy execution order using WASM graph algorithms',\n category: 'gastown-bridge',\n version: '0.1.0',\n layer: 'wasm',\n inputSchema: WasmOptimizeConvoyInputSchema,\n handler: async (input, context): Promise<MCPToolResult<WasmOptimizeConvoyResult>> => {\n const startTime = Date.now();\n\n try {\n const validated = WasmOptimizeConvoyInputSchema.parse(input);\n const depWasm = context.bridges.dependencyWasm;\n const bridge = context.bridges.gastown;\n\n if (!depWasm.isInitialized()) {\n await depWasm.initialize();\n }\n\n // Get convoy details\n const convoys = await bridge.getConvoyStatus(validated.convoy_id, true);\n if (convoys.length === 0) {\n throw new Error(`Convoy not found: ${validated.convoy_id}`);\n }\n\n const convoy = convoys[0];\n\n const wasmStart = Date.now();\n const optimization = await depWasm.optimizeConvoy(\n convoy,\n validated.strategy,\n validated.resource_constraints\n );\n const wasmDuration = Date.now() - wasmStart;\n\n const result: WasmOptimizeConvoyResult = {\n success: true,\n optimization,\n wasmPerformanceMs: wasmDuration,\n durationMs: Date.now() - startTime,\n };\n\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n data: result,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n success: false,\n error: errorMessage,\n durationMs: Date.now() - startTime,\n }, null, 2),\n }],\n };\n }\n },\n};\n\n// ============================================================================\n// Tool Registry\n// ============================================================================\n\n/**\n * All Gas Town Bridge MCP Tools (20 total)\n */\nexport const gasTownBridgeTools: MCPTool[] = [\n // Beads Integration (5 tools) - CLI Bridge\n beadsCreateTool as unknown as MCPTool,\n beadsReadyTool as unknown as MCPTool,\n beadsShowTool as unknown as MCPTool,\n beadsDepTool as unknown as MCPTool,\n beadsSyncTool as unknown as MCPTool,\n\n // Convoy Operations (3 tools) - CLI Bridge\n convoyCreateTool as unknown as MCPTool,\n convoyStatusTool as unknown as MCPTool,\n convoyTrackTool as unknown as MCPTool,\n\n // Formula Engine (4 tools) - WASM Accelerated\n formulaListTool as unknown as MCPTool,\n formulaCookTool as unknown as MCPTool,\n formulaExecuteTool as unknown as MCPTool,\n formulaCreateTool as unknown as MCPTool,\n\n // Orchestration (3 tools) - CLI Bridge\n slingTool as unknown as MCPTool,\n agentsTool as unknown as MCPTool,\n mailTool as unknown as MCPTool,\n\n // WASM Computation (5 tools) - Pure WASM\n wasmParseFormulaTool as unknown as MCPTool,\n wasmResolveDepsTool as unknown as MCPTool,\n wasmCookBatchTool as unknown as MCPTool,\n wasmMatchPatternTool as unknown as MCPTool,\n wasmOptimizeConvoyTool as unknown as MCPTool,\n];\n\n/**\n * Tool name to handler map\n */\nexport const toolHandlers = new Map<string, MCPTool['handler']>([\n // Beads tools\n ['gt_beads_create', beadsCreateTool.handler as MCPTool['handler']],\n ['gt_beads_ready', beadsReadyTool.handler as MCPTool['handler']],\n ['gt_beads_show', beadsShowTool.handler as MCPTool['handler']],\n ['gt_beads_dep', beadsDepTool.handler as MCPTool['handler']],\n ['gt_beads_sync', beadsSyncTool.handler as MCPTool['handler']],\n\n // Convoy tools\n ['gt_convoy_create', convoyCreateTool.handler as MCPTool['handler']],\n ['gt_convoy_status', convoyStatusTool.handler as MCPTool['handler']],\n ['gt_convoy_track', convoyTrackTool.handler as MCPTool['handler']],\n\n // Formula tools\n ['gt_formula_list', formulaListTool.handler as MCPTool['handler']],\n ['gt_formula_cook', formulaCookTool.handler as MCPTool['handler']],\n ['gt_formula_execute', formulaExecuteTool.handler as MCPTool['handler']],\n ['gt_formula_create', formulaCreateTool.handler as MCPTool['handler']],\n\n // Orchestration tools\n ['gt_sling', slingTool.handler as MCPTool['handler']],\n ['gt_agents', agentsTool.handler as MCPTool['handler']],\n ['gt_mail', mailTool.handler as MCPTool['handler']],\n\n // WASM tools\n ['gt_wasm_parse_formula', wasmParseFormulaTool.handler as MCPTool['handler']],\n ['gt_wasm_resolve_deps', wasmResolveDepsTool.handler as MCPTool['handler']],\n ['gt_wasm_cook_batch', wasmCookBatchTool.handler as MCPTool['handler']],\n ['gt_wasm_match_pattern', wasmMatchPatternTool.handler as MCPTool['handler']],\n ['gt_wasm_optimize_convoy', wasmOptimizeConvoyTool.handler as MCPTool['handler']],\n]);\n\n/**\n * Tool categories for documentation\n */\nexport const toolCategories = {\n beads: ['gt_beads_create', 'gt_beads_ready', 'gt_beads_show', 'gt_beads_dep', 'gt_beads_sync'],\n convoy: ['gt_convoy_create', 'gt_convoy_status', 'gt_convoy_track'],\n formula: ['gt_formula_list', 'gt_formula_cook', 'gt_formula_execute', 'gt_formula_create'],\n orchestration: ['gt_sling', 'gt_agents', 'gt_mail'],\n wasm: ['gt_wasm_parse_formula', 'gt_wasm_resolve_deps', 'gt_wasm_cook_batch', 'gt_wasm_match_pattern', 'gt_wasm_optimize_convoy'],\n};\n\n/**\n * Get tool by name\n */\nexport function getTool(name: string): MCPTool | undefined {\n return gasTownBridgeTools.find(t => t.name === name);\n}\n\n/**\n * Get tools by layer\n */\nexport function getToolsByLayer(layer: 'cli' | 'wasm' | 'hybrid'): MCPTool[] {\n return gasTownBridgeTools.filter(t => t.layer === layer);\n}\n\nexport default gasTownBridgeTools;\n","/**\n * Gas Town Bridge Plugin - Input Validators\n *\n * Provides comprehensive input validation for the Gas Town Bridge Plugin:\n * - validateBeadId: Validate bead IDs (alphanumeric only)\n * - validateFormulaName: Validate formula names (safe path characters)\n * - validateConvoyId: Validate convoy IDs (UUID format)\n * - validateGtArgs: Validate and escape CLI arguments\n *\n * Security Features:\n * - Allowlist-based validation (only permit known-safe patterns)\n * - Command injection prevention\n * - Path traversal prevention\n * - Null byte injection prevention\n * - Shell metacharacter blocking\n *\n * All validators follow OWASP guidelines for input validation.\n *\n * @module gastown-bridge/validators\n * @version 0.1.0\n */\n\nimport { z } from 'zod';\nimport { ValidationError, GasTownErrorCode } from './errors.js';\n\n// ============================================================================\n// Constants - Allowlists\n// ============================================================================\n\n/**\n * Shell metacharacters that are never allowed in any input\n */\nconst SHELL_METACHARACTERS = /[;&|`$(){}[\\]<>\\n\\r\\0\\\\'\"]/;\n\n/**\n * Path traversal patterns\n */\nconst PATH_TRAVERSAL_PATTERNS = [\n /\\.\\.\\//, // Unix parent directory\n /\\.\\.\\\\/, // Windows parent directory\n /%2e%2e%2f/i, // URL-encoded ../\n /%2e%2e%5c/i, // URL-encoded ..\\\n /\\x2e\\x2e\\x2f/, // Hex-encoded ../\n /\\x2e\\x2e\\x5c/, // Hex-encoded ..\\\n /~\\//, // Home directory\n /^\\/etc\\//, // Absolute /etc path\n /^\\/proc\\//, // Absolute /proc path\n /^\\/dev\\//, // Absolute /dev path\n /^C:\\\\/i, // Windows absolute path\n];\n\n/**\n * Allowed bead ID formats\n * - gt-{4-16 alphanumeric chars}\n * - Numeric IDs (1-10 digits)\n */\nconst BEAD_ID_PATTERN = /^(gt-[a-zA-Z0-9]{4,16}|\\d{1,10})$/;\n\n/**\n * Allowed formula name format\n * - Starts with letter\n * - Contains only alphanumeric, dash, underscore\n * - 1-64 characters\n */\nconst FORMULA_NAME_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]{0,63}$/;\n\n/**\n * UUID v4 pattern for convoy IDs\n */\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n/**\n * Alternative convoy ID format (conv-{hash})\n */\nconst CONVOY_HASH_PATTERN = /^conv-[a-zA-Z0-9]{4,16}$/;\n\n/**\n * Maximum lengths for inputs\n */\nconst MAX_LENGTHS = {\n beadId: 32,\n formulaName: 64,\n convoyId: 36,\n argument: 512,\n stringValue: 4096,\n arrayLength: 100,\n} as const;\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\n/**\n * Schema for bead ID validation\n */\nexport const BeadIdSchema = z.string()\n .min(1, 'Bead ID cannot be empty')\n .max(MAX_LENGTHS.beadId, `Bead ID exceeds maximum length of ${MAX_LENGTHS.beadId}`)\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Bead ID contains invalid characters'\n )\n .refine(\n (val) => !PATH_TRAVERSAL_PATTERNS.some(p => p.test(val)),\n 'Bead ID contains path traversal sequence'\n )\n .refine(\n (val) => BEAD_ID_PATTERN.test(val.trim()),\n 'Bead ID must be in format gt-{hash} or numeric'\n )\n .transform(val => val.trim());\n\n/**\n * Schema for formula name validation\n */\nexport const FormulaNameSchema = z.string()\n .min(1, 'Formula name cannot be empty')\n .max(MAX_LENGTHS.formulaName, `Formula name exceeds maximum length of ${MAX_LENGTHS.formulaName}`)\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Formula name contains invalid characters'\n )\n .refine(\n (val) => !PATH_TRAVERSAL_PATTERNS.some(p => p.test(val)),\n 'Formula name contains path traversal sequence'\n )\n .refine(\n (val) => FORMULA_NAME_PATTERN.test(val.trim()),\n 'Formula name must start with letter and contain only alphanumeric, dash, or underscore'\n )\n .transform(val => val.trim());\n\n/**\n * Schema for convoy ID validation (UUID format)\n */\nexport const ConvoyIdSchema = z.string()\n .min(1, 'Convoy ID cannot be empty')\n .max(MAX_LENGTHS.convoyId, `Convoy ID exceeds maximum length of ${MAX_LENGTHS.convoyId}`)\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Convoy ID contains invalid characters'\n )\n .refine(\n (val) => UUID_PATTERN.test(val.trim()) || CONVOY_HASH_PATTERN.test(val.trim()),\n 'Convoy ID must be a valid UUID or conv-{hash} format'\n )\n .transform(val => val.trim().toLowerCase());\n\n/**\n * Schema for a single CLI argument\n */\nexport const GtArgumentSchema = z.string()\n .max(MAX_LENGTHS.argument, `Argument exceeds maximum length of ${MAX_LENGTHS.argument}`)\n .refine(\n (val) => !val.includes('\\0'),\n 'Argument contains null byte'\n )\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Argument contains shell metacharacters'\n )\n .refine(\n (val) => !PATH_TRAVERSAL_PATTERNS.some(p => p.test(val)),\n 'Argument contains path traversal sequence'\n );\n\n/**\n * Schema for CLI arguments array\n */\nexport const GtArgsSchema = z.array(GtArgumentSchema)\n .max(MAX_LENGTHS.arrayLength, `Too many arguments (max ${MAX_LENGTHS.arrayLength})`);\n\n/**\n * Schema for safe string values\n */\nexport const SafeStringSchema = z.string()\n .max(MAX_LENGTHS.stringValue, `String exceeds maximum length of ${MAX_LENGTHS.stringValue}`)\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'String contains shell metacharacters'\n );\n\n/**\n * Schema for formula type\n */\nexport const FormulaTypeSchema = z.enum(['convoy', 'workflow', 'expansion', 'aspect']);\n\n/**\n * Schema for bead status\n */\nexport const BeadStatusSchema = z.enum(['open', 'in_progress', 'closed']);\n\n/**\n * Schema for convoy status\n */\nexport const ConvoyStatusSchema = z.enum(['active', 'landed', 'failed', 'paused']);\n\n/**\n * Schema for sling target\n */\nexport const SlingTargetSchema = z.enum(['polecat', 'crew', 'mayor']);\n\n/**\n * Schema for rig name\n */\nexport const RigNameSchema = z.string()\n .min(1, 'Rig name cannot be empty')\n .max(32, 'Rig name exceeds maximum length')\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Rig name contains invalid characters'\n )\n .refine(\n (val) => /^[a-zA-Z][a-zA-Z0-9-]{0,31}$/.test(val.trim()),\n 'Rig name must start with letter and contain only alphanumeric or dash'\n )\n .transform(val => val.trim().toLowerCase());\n\n/**\n * Schema for priority\n */\nexport const PrioritySchema = z.number()\n .int('Priority must be an integer')\n .min(0, 'Priority cannot be negative')\n .max(100, 'Priority cannot exceed 100');\n\n/**\n * Schema for labels array\n */\nexport const LabelsSchema = z.array(\n z.string()\n .max(50, 'Label exceeds maximum length')\n .refine(\n (val) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(val),\n 'Label must start with letter and contain only alphanumeric, dash, or underscore'\n )\n)\n .max(20, 'Too many labels (max 20)');\n\n// ============================================================================\n// Validation Functions\n// ============================================================================\n\n/**\n * Validate a bead ID\n *\n * Accepts:\n * - gt-{4-16 alphanumeric chars} (e.g., \"gt-abc12\", \"gt-a1b2c3d4\")\n * - Numeric IDs (e.g., \"123\", \"9999999999\")\n *\n * Rejects:\n * - Empty strings\n * - Shell metacharacters\n * - Path traversal sequences\n * - Invalid formats\n *\n * @param id - The bead ID to validate\n * @returns The validated and trimmed bead ID\n * @throws {ValidationError} If validation fails\n *\n * @example\n * ```typescript\n * const validId = validateBeadId('gt-abc12'); // Returns 'gt-abc12'\n * validateBeadId('gt-abc; rm -rf /'); // Throws ValidationError\n * ```\n */\nexport function validateBeadId(id: string): string {\n const result = BeadIdSchema.safeParse(id);\n if (!result.success) {\n const errors = result.error.errors.map(e => e.message).join('; ');\n throw ValidationError.invalidBeadId(id);\n }\n return result.data;\n}\n\n/**\n * Validate a formula name\n *\n * Accepts:\n * - Starts with letter\n * - Contains only alphanumeric, dash, underscore\n * - 1-64 characters\n *\n * Rejects:\n * - Starting with number\n * - Shell metacharacters\n * - Path traversal sequences\n *\n * @param name - The formula name to validate\n * @returns The validated and trimmed formula name\n * @throws {ValidationError} If validation fails\n *\n * @example\n * ```typescript\n * const validName = validateFormulaName('my-formula'); // Returns 'my-formula'\n * validateFormulaName('../etc/passwd'); // Throws ValidationError\n * ```\n */\nexport function validateFormulaName(name: string): string {\n const result = FormulaNameSchema.safeParse(name);\n if (!result.success) {\n throw ValidationError.invalidFormulaName(name);\n }\n return result.data;\n}\n\n/**\n * Validate a convoy ID\n *\n * Accepts:\n * - UUID v4 format (e.g., \"550e8400-e29b-41d4-a716-446655440000\")\n * - conv-{hash} format (e.g., \"conv-abc123def\")\n *\n * Rejects:\n * - Invalid UUID format\n * - Shell metacharacters\n * - Path traversal sequences\n *\n * @param id - The convoy ID to validate\n * @returns The validated and normalized convoy ID (lowercase)\n * @throws {ValidationError} If validation fails\n *\n * @example\n * ```typescript\n * const validId = validateConvoyId('550e8400-e29b-41d4-a716-446655440000');\n * validateConvoyId('not-a-uuid'); // Throws ValidationError\n * ```\n */\nexport function validateConvoyId(id: string): string {\n const result = ConvoyIdSchema.safeParse(id);\n if (!result.success) {\n throw ValidationError.invalidConvoyId(id);\n }\n return result.data;\n}\n\n/**\n * Validate and escape CLI arguments\n *\n * Validates each argument in the array:\n * - No null bytes\n * - No shell metacharacters\n * - No path traversal sequences\n * - Maximum length enforced\n *\n * @param args - Array of CLI arguments to validate\n * @returns Array of validated arguments\n * @throws {ValidationError} If any argument fails validation\n *\n * @example\n * ```typescript\n * const validArgs = validateGtArgs(['beads', 'list', '--limit', '10']);\n * validateGtArgs(['rm', '-rf', '/']); // Throws ValidationError\n * ```\n */\nexport function validateGtArgs(args: string[]): string[] {\n if (!Array.isArray(args)) {\n throw new ValidationError(\n 'Arguments must be an array',\n GasTownErrorCode.INVALID_ARGUMENTS,\n [{ field: 'args', constraint: 'array', actual: typeof args }]\n );\n }\n\n const result = GtArgsSchema.safeParse(args);\n if (!result.success) {\n const errors = result.error.errors;\n const constraints = errors.map((e, idx) => ({\n field: `args[${e.path[0] ?? idx}]`,\n constraint: 'safe CLI argument',\n actual: args[Number(e.path[0])]?.slice(0, 20) + '...',\n }));\n throw new ValidationError(\n 'Invalid CLI arguments',\n GasTownErrorCode.INVALID_ARGUMENTS,\n constraints\n );\n }\n\n return result.data;\n}\n\n// ============================================================================\n// Compound Validators\n// ============================================================================\n\n/**\n * Schema for CreateBeadOptions\n */\nexport const CreateBeadOptionsSchema = z.object({\n title: z.string()\n .min(1, 'Title cannot be empty')\n .max(256, 'Title exceeds maximum length')\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Title contains invalid characters'\n ),\n description: z.string()\n .max(4096, 'Description exceeds maximum length')\n .optional(),\n priority: PrioritySchema.optional().default(50),\n labels: LabelsSchema.optional().default([]),\n parent: BeadIdSchema.optional(),\n rig: RigNameSchema.optional(),\n assignee: z.string()\n .max(64, 'Assignee name exceeds maximum length')\n .refine(\n (val) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(val),\n 'Invalid assignee name format'\n )\n .optional(),\n});\n\n/**\n * Schema for CreateConvoyOptions\n */\nexport const CreateConvoyOptionsSchema = z.object({\n name: z.string()\n .min(1, 'Convoy name cannot be empty')\n .max(128, 'Convoy name exceeds maximum length')\n .refine(\n (val) => !SHELL_METACHARACTERS.test(val),\n 'Convoy name contains invalid characters'\n ),\n issues: z.array(BeadIdSchema)\n .min(1, 'At least one issue is required')\n .max(100, 'Too many issues (max 100)'),\n description: z.string()\n .max(4096, 'Description exceeds maximum length')\n .optional(),\n formula: FormulaNameSchema.optional(),\n});\n\n/**\n * Schema for SlingOptions\n */\nexport const SlingOptionsSchema = z.object({\n beadId: BeadIdSchema,\n target: SlingTargetSchema,\n formula: FormulaNameSchema.optional(),\n priority: PrioritySchema.optional(),\n});\n\n/**\n * Validate CreateBeadOptions\n */\nexport function validateCreateBeadOptions(options: unknown): z.infer<typeof CreateBeadOptionsSchema> {\n const result = CreateBeadOptionsSchema.safeParse(options);\n if (!result.success) {\n const errors = result.error.errors;\n const constraints = errors.map(e => ({\n field: e.path.join('.'),\n constraint: e.message,\n }));\n throw new ValidationError(\n 'Invalid bead creation options',\n GasTownErrorCode.VALIDATION_FAILED,\n constraints\n );\n }\n return result.data;\n}\n\n/**\n * Validate CreateConvoyOptions\n */\nexport function validateCreateConvoyOptions(options: unknown): z.infer<typeof CreateConvoyOptionsSchema> {\n const result = CreateConvoyOptionsSchema.safeParse(options);\n if (!result.success) {\n const errors = result.error.errors;\n const constraints = errors.map(e => ({\n field: e.path.join('.'),\n constraint: e.message,\n }));\n throw new ValidationError(\n 'Invalid convoy creation options',\n GasTownErrorCode.VALIDATION_FAILED,\n constraints\n );\n }\n return result.data;\n}\n\n/**\n * Validate SlingOptions\n */\nexport function validateSlingOptions(options: unknown): z.infer<typeof SlingOptionsSchema> {\n const result = SlingOptionsSchema.safeParse(options);\n if (!result.success) {\n const errors = result.error.errors;\n const constraints = errors.map(e => ({\n field: e.path.join('.'),\n constraint: e.message,\n }));\n throw new ValidationError(\n 'Invalid sling options',\n GasTownErrorCode.VALIDATION_FAILED,\n constraints\n );\n }\n return result.data;\n}\n\n// ============================================================================\n// Security Utilities\n// ============================================================================\n\n/**\n * Check if a string contains shell metacharacters\n */\nexport function containsShellMetacharacters(input: string): boolean {\n return SHELL_METACHARACTERS.test(input);\n}\n\n/**\n * Check if a string contains path traversal sequences\n */\nexport function containsPathTraversal(input: string): boolean {\n return PATH_TRAVERSAL_PATTERNS.some(p => p.test(input));\n}\n\n/**\n * Check if a string is safe for use in CLI arguments\n */\nexport function isSafeArgument(input: string): boolean {\n return GtArgumentSchema.safeParse(input).success;\n}\n\n/**\n * Check if a bead ID is valid\n */\nexport function isValidBeadId(id: string): boolean {\n return BeadIdSchema.safeParse(id).success;\n}\n\n/**\n * Check if a formula name is valid\n */\nexport function isValidFormulaName(name: string): boolean {\n return FormulaNameSchema.safeParse(name).success;\n}\n\n/**\n * Check if a convoy ID is valid\n */\nexport function isValidConvoyId(id: string): boolean {\n return ConvoyIdSchema.safeParse(id).success;\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n MAX_LENGTHS,\n SHELL_METACHARACTERS,\n PATH_TRAVERSAL_PATTERNS,\n BEAD_ID_PATTERN,\n FORMULA_NAME_PATTERN,\n UUID_PATTERN,\n CONVOY_HASH_PATTERN,\n};\n","/**\n * Gas Town Bridge Plugin - Output Sanitizers\n *\n * Provides output sanitization for the Gas Town Bridge Plugin:\n * - sanitizeBeadOutput: Parse and sanitize bead CLI output\n * - sanitizeFormulaOutput: Parse and sanitize formula CLI output\n * - Remove sensitive data from outputs\n *\n * Security Features:\n * - JSON parsing with validation\n * - Sensitive field redaction (tokens, keys, passwords)\n * - Output size limits to prevent DoS\n * - Type coercion and validation\n *\n * All sanitizers follow OWASP guidelines for output encoding.\n *\n * @module gastown-bridge/sanitizers\n * @version 0.1.0\n */\n\nimport { z } from 'zod';\nimport type { Bead, Formula, Convoy, BeadStatus, FormulaType, ConvoyStatus } from './types.js';\nimport { BeadsError, FormulaError, GasTownErrorCode, ConvoyError } from './errors.js';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/**\n * Maximum output sizes to prevent DoS\n */\nconst MAX_OUTPUT_SIZE = {\n single: 1024 * 1024, // 1MB for single item\n list: 10 * 1024 * 1024, // 10MB for lists\n field: 65536, // 64KB for individual fields\n} as const;\n\n/**\n * Sensitive field patterns that should be redacted\n */\nconst SENSITIVE_FIELD_PATTERNS = [\n /password/i,\n /secret/i,\n /token/i,\n /api[_-]?key/i,\n /auth[_-]?key/i,\n /private[_-]?key/i,\n /access[_-]?key/i,\n /credential/i,\n /bearer/i,\n /jwt/i,\n /session[_-]?id/i,\n];\n\n/**\n * Fields that should always be removed from output\n */\nconst REDACTED_FIELDS = new Set([\n 'password',\n 'secret',\n 'token',\n 'apiKey',\n 'api_key',\n 'authKey',\n 'auth_key',\n 'privateKey',\n 'private_key',\n 'accessKey',\n 'access_key',\n 'credential',\n 'credentials',\n 'bearer',\n 'jwt',\n 'sessionId',\n 'session_id',\n]);\n\n// ============================================================================\n// Internal Zod Schemas for Parsing\n// ============================================================================\n\n/**\n * Schema for parsing raw bead output\n */\nconst RawBeadSchema = z.object({\n id: z.string(),\n title: z.string().default(''),\n description: z.string().default(''),\n status: z.enum(['open', 'in_progress', 'closed']).default('open'),\n priority: z.number().int().min(0).default(50),\n labels: z.array(z.string()).default([]),\n parentId: z.string().optional(),\n parent_id: z.string().optional(), // Alternative casing\n createdAt: z.union([z.string(), z.date()]).optional(),\n created_at: z.union([z.string(), z.date()]).optional(), // Alternative casing\n updatedAt: z.union([z.string(), z.date()]).optional(),\n updated_at: z.union([z.string(), z.date()]).optional(), // Alternative casing\n assignee: z.string().optional(),\n rig: z.string().optional(),\n blockedBy: z.array(z.string()).optional(),\n blocked_by: z.array(z.string()).optional(), // Alternative casing\n blocks: z.array(z.string()).optional(),\n}).passthrough(); // Allow extra fields for flexibility\n\n/**\n * Schema for parsing raw formula output\n */\nconst RawFormulaSchema = z.object({\n name: z.string(),\n description: z.string().default(''),\n type: z.enum(['convoy', 'workflow', 'expansion', 'aspect']).default('workflow'),\n version: z.number().int().min(1).default(1),\n legs: z.array(z.object({\n id: z.string(),\n title: z.string().default(''),\n focus: z.string().default(''),\n description: z.string().default(''),\n agent: z.string().optional(),\n order: z.number().optional(),\n })).optional(),\n steps: z.array(z.object({\n id: z.string(),\n title: z.string().default(''),\n description: z.string().default(''),\n needs: z.array(z.string()).optional(),\n duration: z.number().optional(),\n requires: z.array(z.string()).optional(),\n metadata: z.record(z.unknown()).optional(),\n })).optional(),\n vars: z.record(z.object({\n name: z.string().default(''),\n description: z.string().optional(),\n default: z.string().optional(),\n required: z.boolean().optional(),\n pattern: z.string().optional(),\n enum: z.array(z.string()).optional(),\n })).optional(),\n synthesis: z.object({\n strategy: z.enum(['merge', 'sequential', 'parallel']).default('merge'),\n format: z.string().optional(),\n description: z.string().optional(),\n }).optional(),\n templates: z.array(z.object({\n name: z.string(),\n content: z.string(),\n outputPath: z.string().optional(),\n })).optional(),\n aspects: z.array(z.object({\n name: z.string().default(''),\n pointcut: z.string().default(''),\n advice: z.string().default(''),\n type: z.enum(['before', 'after', 'around']).default('after'),\n })).optional(),\n metadata: z.record(z.unknown()).optional(),\n}).passthrough();\n\n/**\n * Schema for parsing raw convoy output\n */\nconst RawConvoySchema = z.object({\n id: z.string(),\n name: z.string(),\n trackedIssues: z.array(z.string()).default([]),\n tracked_issues: z.array(z.string()).optional(), // Alternative casing\n status: z.enum(['active', 'landed', 'failed', 'paused']).default('active'),\n startedAt: z.union([z.string(), z.date()]).optional(),\n started_at: z.union([z.string(), z.date()]).optional(),\n completedAt: z.union([z.string(), z.date()]).optional(),\n completed_at: z.union([z.string(), z.date()]).optional(),\n progress: z.object({\n total: z.number().int().min(0).default(0),\n closed: z.number().int().min(0).default(0),\n inProgress: z.number().int().min(0).default(0),\n in_progress: z.number().int().min(0).optional(),\n blocked: z.number().int().min(0).default(0),\n }).default({ total: 0, closed: 0, inProgress: 0, blocked: 0 }),\n formula: z.string().optional(),\n description: z.string().optional(),\n}).passthrough();\n\n// ============================================================================\n// Sanitization Functions\n// ============================================================================\n\n/**\n * Sanitize raw bead output from CLI\n *\n * Parses JSON output, validates structure, redacts sensitive fields,\n * and normalizes the data to the Bead interface.\n *\n * @param raw - Raw string output from CLI\n * @returns Sanitized Bead object\n * @throws {BeadsError} If parsing or validation fails\n *\n * @example\n * ```typescript\n * const bead = sanitizeBeadOutput('{\"id\":\"gt-abc12\",\"title\":\"Test\"}');\n * console.log(bead.id); // 'gt-abc12'\n * ```\n */\nexport function sanitizeBeadOutput(raw: string): Bead {\n // Check size limit\n if (raw.length > MAX_OUTPUT_SIZE.single) {\n throw BeadsError.parseFailed(\n raw.slice(0, 100) + '...',\n new Error(`Output exceeds maximum size of ${MAX_OUTPUT_SIZE.single} bytes`)\n );\n }\n\n // Parse JSON\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n throw BeadsError.parseFailed(raw, error instanceof Error ? error : undefined);\n }\n\n // Redact sensitive fields before validation\n if (typeof parsed === 'object' && parsed !== null) {\n redactSensitiveFields(parsed as Record<string, unknown>);\n }\n\n // Validate structure\n const result = RawBeadSchema.safeParse(parsed);\n if (!result.success) {\n throw BeadsError.parseFailed(\n raw,\n new Error(result.error.errors.map(e => e.message).join('; '))\n );\n }\n\n const data = result.data;\n\n // Normalize to Bead interface\n const bead: Bead = {\n id: sanitizeString(data.id, MAX_OUTPUT_SIZE.field),\n title: sanitizeString(data.title, MAX_OUTPUT_SIZE.field),\n description: sanitizeString(data.description, MAX_OUTPUT_SIZE.field),\n status: data.status as BeadStatus,\n priority: Math.max(0, Math.min(100, data.priority)),\n labels: data.labels.map(l => sanitizeString(l, 50)).slice(0, 20),\n parentId: data.parentId ?? data.parent_id,\n createdAt: parseDate(data.createdAt ?? data.created_at) ?? new Date(),\n updatedAt: parseDate(data.updatedAt ?? data.updated_at) ?? new Date(),\n assignee: data.assignee ? sanitizeString(data.assignee, 64) : undefined,\n rig: data.rig ? sanitizeString(data.rig, 32) : undefined,\n blockedBy: (data.blockedBy ?? data.blocked_by)?.map(b => sanitizeString(b, 32)),\n blocks: data.blocks?.map(b => sanitizeString(b, 32)),\n };\n\n return bead;\n}\n\n/**\n * Sanitize raw formula output from CLI\n *\n * Parses JSON/TOML output, validates structure, redacts sensitive fields,\n * and normalizes the data to the Formula interface.\n *\n * @param raw - Raw string output from CLI\n * @returns Sanitized Formula object\n * @throws {FormulaError} If parsing or validation fails\n *\n * @example\n * ```typescript\n * const formula = sanitizeFormulaOutput('{\"name\":\"test\",\"type\":\"workflow\"}');\n * console.log(formula.name); // 'test'\n * ```\n */\nexport function sanitizeFormulaOutput(raw: string): Formula {\n // Check size limit\n if (raw.length > MAX_OUTPUT_SIZE.single) {\n throw FormulaError.parseFailed(\n 'output',\n `Output exceeds maximum size of ${MAX_OUTPUT_SIZE.single} bytes`\n );\n }\n\n // Parse JSON\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n throw FormulaError.parseFailed(\n 'output',\n 'Invalid JSON',\n error instanceof Error ? error : undefined\n );\n }\n\n // Redact sensitive fields before validation\n if (typeof parsed === 'object' && parsed !== null) {\n redactSensitiveFields(parsed as Record<string, unknown>);\n }\n\n // Validate structure\n const result = RawFormulaSchema.safeParse(parsed);\n if (!result.success) {\n throw FormulaError.parseFailed(\n 'output',\n result.error.errors.map(e => e.message).join('; ')\n );\n }\n\n const data = result.data;\n\n // Normalize to Formula interface\n const formula: Formula = {\n name: sanitizeString(data.name, 64),\n description: sanitizeString(data.description, MAX_OUTPUT_SIZE.field),\n type: data.type as FormulaType,\n version: Math.max(1, data.version),\n legs: data.legs?.map(leg => ({\n id: sanitizeString(leg.id, 64),\n title: sanitizeString(leg.title, 256),\n focus: sanitizeString(leg.focus, 256),\n description: sanitizeString(leg.description, MAX_OUTPUT_SIZE.field),\n agent: leg.agent ? sanitizeString(leg.agent, 64) : undefined,\n order: leg.order,\n })),\n steps: data.steps?.map(step => ({\n id: sanitizeString(step.id, 64),\n title: sanitizeString(step.title, 256),\n description: sanitizeString(step.description, MAX_OUTPUT_SIZE.field),\n needs: step.needs?.map(n => sanitizeString(n, 64)),\n duration: step.duration,\n requires: step.requires?.map(r => sanitizeString(r, 64)),\n metadata: step.metadata ? sanitizeMetadata(step.metadata) : undefined,\n })),\n vars: data.vars ? sanitizeVarsFromRaw(data.vars) : undefined,\n synthesis: data.synthesis ? {\n strategy: data.synthesis.strategy ?? 'merge',\n format: data.synthesis.format,\n description: data.synthesis.description,\n } : undefined,\n templates: data.templates?.map(t => ({\n name: sanitizeString(t.name, 64),\n content: sanitizeString(t.content, MAX_OUTPUT_SIZE.field),\n outputPath: t.outputPath ? sanitizePath(t.outputPath) : undefined,\n })),\n aspects: data.aspects?.map(a => ({\n name: sanitizeString(a.name ?? '', 64),\n pointcut: sanitizeString(a.pointcut ?? '', 256),\n advice: sanitizeString(a.advice ?? '', MAX_OUTPUT_SIZE.field),\n type: (a.type ?? 'after') as 'before' | 'after' | 'around',\n })),\n metadata: data.metadata ? sanitizeMetadata(data.metadata) : undefined,\n };\n\n return formula;\n}\n\n/**\n * Sanitize raw convoy output from CLI\n *\n * @param raw - Raw string output from CLI\n * @returns Sanitized Convoy object\n * @throws {ConvoyError} If parsing or validation fails\n */\nexport function sanitizeConvoyOutput(raw: string): Convoy {\n // Check size limit\n if (raw.length > MAX_OUTPUT_SIZE.single) {\n throw ConvoyError.createFailed(\n `Output exceeds maximum size of ${MAX_OUTPUT_SIZE.single} bytes`\n );\n }\n\n // Parse JSON\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n throw ConvoyError.createFailed(\n 'Invalid JSON',\n error instanceof Error ? error : undefined\n );\n }\n\n // Redact sensitive fields\n if (typeof parsed === 'object' && parsed !== null) {\n redactSensitiveFields(parsed as Record<string, unknown>);\n }\n\n // Validate structure\n const result = RawConvoySchema.safeParse(parsed);\n if (!result.success) {\n throw ConvoyError.createFailed(\n result.error.errors.map(e => e.message).join('; ')\n );\n }\n\n const data = result.data;\n\n // Normalize to Convoy interface\n const convoy: Convoy = {\n id: sanitizeString(data.id, 36),\n name: sanitizeString(data.name, 128),\n trackedIssues: (data.trackedIssues ?? data.tracked_issues ?? [])\n .map(i => sanitizeString(i, 32))\n .slice(0, 100),\n status: data.status as ConvoyStatus,\n startedAt: parseDate(data.startedAt ?? data.started_at) ?? new Date(),\n completedAt: parseDate(data.completedAt ?? data.completed_at),\n progress: {\n total: Math.max(0, data.progress.total),\n closed: Math.max(0, data.progress.closed),\n inProgress: Math.max(0, data.progress.inProgress ?? data.progress.in_progress ?? 0),\n blocked: Math.max(0, data.progress.blocked),\n },\n formula: data.formula ? sanitizeString(data.formula, 64) : undefined,\n description: data.description ? sanitizeString(data.description, MAX_OUTPUT_SIZE.field) : undefined,\n };\n\n return convoy;\n}\n\n/**\n * Sanitize a list of beads from JSONL output\n *\n * @param raw - Raw JSONL string (one JSON object per line)\n * @returns Array of sanitized Bead objects\n */\nexport function sanitizeBeadsListOutput(raw: string): Bead[] {\n // Check size limit\n if (raw.length > MAX_OUTPUT_SIZE.list) {\n throw BeadsError.parseFailed(\n raw.slice(0, 100) + '...',\n new Error(`Output exceeds maximum size of ${MAX_OUTPUT_SIZE.list} bytes`)\n );\n }\n\n const lines = raw.trim().split('\\n');\n const beads: Bead[] = [];\n const errors: string[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]?.trim();\n if (!line) continue;\n\n try {\n const bead = sanitizeBeadOutput(line);\n beads.push(bead);\n } catch (error) {\n // Collect errors but continue processing\n errors.push(`Line ${i + 1}: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n\n // Log errors if any\n if (errors.length > 0) {\n console.warn(`[sanitizers] ${errors.length} bead(s) failed to parse:`, errors.slice(0, 3));\n }\n\n return beads;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Recursively redact sensitive fields from an object\n */\nfunction redactSensitiveFields(obj: Record<string, unknown>): void {\n for (const key of Object.keys(obj)) {\n // Check if field name is sensitive\n if (REDACTED_FIELDS.has(key) || SENSITIVE_FIELD_PATTERNS.some(p => p.test(key))) {\n obj[key] = '[REDACTED]';\n continue;\n }\n\n const value = obj[key];\n\n // Recursively process nested objects\n if (typeof value === 'object' && value !== null) {\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === 'object' && item !== null) {\n redactSensitiveFields(item as Record<string, unknown>);\n }\n }\n } else {\n redactSensitiveFields(value as Record<string, unknown>);\n }\n }\n }\n}\n\n/**\n * Sanitize a string value with length limit\n */\nfunction sanitizeString(value: string | undefined | null, maxLength: number): string {\n if (value === undefined || value === null) {\n return '';\n }\n\n // Truncate to max length\n let result = String(value);\n if (result.length > maxLength) {\n result = result.slice(0, maxLength);\n }\n\n // Remove null bytes\n result = result.replace(/\\0/g, '');\n\n // Normalize whitespace\n result = result.replace(/[\\r\\n]+/g, '\\n').trim();\n\n return result;\n}\n\n/**\n * Sanitize a path value (remove traversal sequences)\n */\nfunction sanitizePath(value: string): string {\n let result = sanitizeString(value, 256);\n\n // Remove path traversal sequences\n result = result.replace(/\\.\\.\\//g, '');\n result = result.replace(/\\.\\.\\\\/g, '');\n\n // Remove leading slashes that could be absolute paths\n result = result.replace(/^[\\/\\\\]+/, '');\n\n return result;\n}\n\n/**\n * Parse a date value\n */\nfunction parseDate(value: string | Date | undefined | null): Date | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n if (value instanceof Date) {\n return isNaN(value.getTime()) ? undefined : value;\n }\n\n try {\n const date = new Date(value);\n return isNaN(date.getTime()) ? undefined : date;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Sanitize metadata object\n */\nfunction sanitizeMetadata(metadata: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(metadata)) {\n // Skip sensitive fields\n if (REDACTED_FIELDS.has(key) || SENSITIVE_FIELD_PATTERNS.some(p => p.test(key))) {\n continue;\n }\n\n // Limit key length\n const sanitizedKey = sanitizeString(key, 64);\n\n // Sanitize value based on type\n if (typeof value === 'string') {\n result[sanitizedKey] = sanitizeString(value, MAX_OUTPUT_SIZE.field);\n } else if (typeof value === 'number' || typeof value === 'boolean') {\n result[sanitizedKey] = value;\n } else if (Array.isArray(value)) {\n result[sanitizedKey] = value.slice(0, 100).map(v =>\n typeof v === 'string' ? sanitizeString(v, 256) : v\n );\n } else if (typeof value === 'object' && value !== null) {\n result[sanitizedKey] = sanitizeMetadata(value as Record<string, unknown>);\n }\n }\n\n return result;\n}\n\n/**\n * Type for Var from types.ts\n */\ninterface VarType {\n name: string;\n description?: string;\n default?: string;\n required?: boolean;\n pattern?: string;\n enum?: string[];\n}\n\n/**\n * Sanitize vars object from raw zod output (may have optional name)\n */\nfunction sanitizeVarsFromRaw(vars: Record<string, {\n name?: string;\n description?: string;\n default?: string;\n required?: boolean;\n pattern?: string;\n enum?: string[];\n}>): Record<string, VarType> {\n const result: Record<string, VarType> = {};\n\n for (const [key, value] of Object.entries(vars)) {\n // Skip sensitive fields\n if (REDACTED_FIELDS.has(key) || SENSITIVE_FIELD_PATTERNS.some(p => p.test(key))) {\n continue;\n }\n\n const sanitizedKey = sanitizeString(key, 64);\n result[sanitizedKey] = {\n name: sanitizeString(value.name ?? key, 64),\n description: value.description ? sanitizeString(value.description, 256) : undefined,\n default: value.default ? sanitizeString(value.default, 256) : undefined,\n required: value.required,\n pattern: value.pattern ? sanitizeString(value.pattern, 256) : undefined,\n enum: value.enum?.map(e => sanitizeString(e, 64)).slice(0, 20),\n };\n }\n\n return result;\n}\n\n/**\n * Sanitize vars object (typed version)\n */\nfunction sanitizeVars(vars: Record<string, VarType>): Record<string, VarType> {\n const result: Record<string, VarType> = {};\n\n for (const [key, value] of Object.entries(vars)) {\n // Skip sensitive fields\n if (REDACTED_FIELDS.has(key) || SENSITIVE_FIELD_PATTERNS.some(p => p.test(key))) {\n continue;\n }\n\n const sanitizedKey = sanitizeString(key, 64);\n result[sanitizedKey] = {\n name: sanitizeString(value.name, 64),\n description: value.description ? sanitizeString(value.description, 256) : undefined,\n default: value.default ? sanitizeString(value.default, 256) : undefined,\n required: value.required,\n pattern: value.pattern ? sanitizeString(value.pattern, 256) : undefined,\n enum: value.enum?.map(e => sanitizeString(e, 64)).slice(0, 20),\n };\n }\n\n return result;\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n MAX_OUTPUT_SIZE,\n SENSITIVE_FIELD_PATTERNS,\n REDACTED_FIELDS,\n RawBeadSchema,\n RawFormulaSchema,\n RawConvoySchema,\n redactSensitiveFields,\n sanitizeString,\n sanitizePath,\n parseDate,\n sanitizeMetadata,\n};\n","/**\n * Gas Town Bridge Plugin - Main Entry Point\n *\n * GasTownBridgePlugin class implementing the IPlugin interface:\n * - register(): Register with claude-flow plugin system\n * - initialize(): Load WASM modules, set up bridges\n * - shutdown(): Cleanup resources\n *\n * Provides integration with Steve Yegge's Gas Town orchestrator:\n * - Beads: Git-backed issue tracking with graph semantics\n * - Formulas: TOML-defined workflows (convoy, workflow, expansion, aspect)\n * - Convoys: Work-order tracking for slung work\n * - WASM: 352x faster formula parsing and graph analysis\n *\n * @module gastown-bridge\n * @version 0.1.0\n */\n\nimport { EventEmitter } from 'events';\n\nimport type {\n Bead,\n Formula,\n Convoy,\n GasTownConfig,\n CreateBeadOptions,\n CreateConvoyOptions,\n SlingOptions,\n SyncResult,\n TopoSortResult,\n CriticalPathResult,\n BeadGraph,\n FormulaType,\n CookedFormula,\n Step,\n} from './types.js';\n\nimport {\n DEFAULT_CONFIG,\n GasTownErrorCodes,\n validateConfig,\n} from './types.js';\n\n// Bridge imports\nimport { GtBridge, createGtBridge } from './bridges/gt-bridge.js';\nimport { BdBridge, createBdBridge } from './bridges/bd-bridge.js';\nimport { SyncBridge, createSyncBridge, type IAgentDBService, type AgentDBEntry } from './bridges/sync-bridge.js';\n\n// Formula executor\nimport { FormulaExecutor, createFormulaExecutor, type IWasmLoader } from './formula/executor.js';\n\n// Convoy management\nimport { ConvoyTracker, createConvoyTracker } from './convoy/tracker.js';\nimport { ConvoyObserver, createConvoyObserver, type WasmGraphModule } from './convoy/observer.js';\n\n// WASM loader\nimport {\n isWasmAvailable,\n loadFormulaWasm,\n loadGnnWasm,\n parseFormula as wasmParseFormula,\n cookFormula as wasmCookFormula,\n cookBatch as wasmCookBatch,\n topoSort as wasmTopoSort,\n detectCycles as wasmDetectCycles,\n criticalPath as wasmCriticalPath,\n preloadWasmModules,\n getWasmVersions,\n} from './wasm-loader.js';\n\n// MCP Tools\nimport {\n gasTownBridgeTools,\n toolHandlers,\n toolCategories,\n getTool,\n getToolsByLayer,\n type MCPTool,\n type ToolContext,\n type MCPToolResult,\n} from './mcp-tools.js';\n\n// Errors\nimport {\n GasTownError,\n GasTownErrorCode,\n} from './errors.js';\n\n// ============================================================================\n// Plugin Interfaces (matching claude-flow plugin system)\n// ============================================================================\n\n/**\n * Plugin context interface\n */\nexport interface PluginContext {\n get<T>(key: string): T;\n set<T>(key: string, value: T): void;\n has(key: string): boolean;\n}\n\n/**\n * MCP Tool definition for plugin interface\n */\nexport interface PluginMCPTool {\n name: string;\n description: string;\n category: string;\n version: string;\n inputSchema: {\n type: 'object';\n properties: Record<string, unknown>;\n required?: string[];\n };\n handler: (\n input: unknown,\n context: PluginContext\n ) => Promise<{ content: Array<{ type: 'text'; text: string }> }>;\n}\n\n/**\n * Hook priority type\n */\nexport type HookPriority = number;\n\n/**\n * Plugin hook definition\n */\nexport interface PluginHook {\n name: string;\n event: string;\n priority: HookPriority;\n description: string;\n handler: (context: PluginContext, payload: unknown) => Promise<unknown>;\n}\n\n/**\n * Plugin interface\n */\nexport interface IPlugin {\n readonly name: string;\n readonly version: string;\n readonly description: string;\n register(context: PluginContext): Promise<void>;\n initialize(context: PluginContext): Promise<{ success: boolean; error?: string }>;\n shutdown(context: PluginContext): Promise<{ success: boolean; error?: string }>;\n getCapabilities(): string[];\n getMCPTools(): PluginMCPTool[];\n getHooks(): PluginHook[];\n}\n\n// ============================================================================\n// Bridge Interfaces\n// ============================================================================\n\n/**\n * Gas Town CLI bridge interface\n */\nexport interface IGasTownBridge {\n gt(args: string[]): Promise<string>;\n bd(args: string[]): Promise<string>;\n createBead(opts: CreateBeadOptions): Promise<Bead>;\n getReady(limit?: number, rig?: string): Promise<Bead[]>;\n showBead(beadId: string): Promise<Bead>;\n addDep(child: string, parent: string): Promise<void>;\n removeDep(child: string, parent: string): Promise<void>;\n sling(opts: SlingOptions): Promise<void>;\n}\n\n/**\n * Formula engine interface\n */\nexport interface IFormulaEngine {\n parse(content: string): Formula;\n cook(formula: Formula, vars: Record<string, string>): Formula;\n toMolecule(formula: Formula, bridge: IGasTownBridge): Promise<string[]>;\n}\n\n/**\n * WASM bridge interface\n */\nexport interface IWasmBridge {\n initialize(): Promise<void>;\n isInitialized(): boolean;\n dispose(): Promise<void>;\n parseFormula(content: string): Formula;\n cookFormula(formula: Formula, vars: Record<string, string>): Formula;\n resolveDeps(beads: Bead[]): TopoSortResult;\n detectCycle(graph: BeadGraph): boolean;\n criticalPath(beads: Bead[], durations: Map<string, number>): CriticalPathResult;\n batchCook(formulas: Formula[], vars: Record<string, string>[]): Formula[];\n}\n\n/**\n * Sync service interface\n */\nexport interface ISyncService {\n pullBeads(rig?: string): Promise<number>;\n pushTasks(namespace: string): Promise<number>;\n sync(direction: 'pull' | 'push' | 'both', rig?: string): Promise<SyncResult>;\n}\n\n// ============================================================================\n// Configuration\n// ============================================================================\n\n/**\n * Gas Town Bridge Plugin configuration\n */\nexport interface GasTownBridgeConfig {\n /** Base Gas Town configuration */\n gastown: Partial<GasTownConfig>;\n\n /** GtBridge configuration */\n gtBridge?: {\n /** Path to gt CLI binary */\n gtPath?: string;\n /** CLI execution timeout in ms */\n timeout?: number;\n /** Working directory */\n cwd?: string;\n };\n\n /** BdBridge configuration */\n bdBridge?: {\n /** Path to bd CLI binary */\n bdPath?: string;\n /** CLI execution timeout in ms */\n timeout?: number;\n /** Working directory */\n cwd?: string;\n };\n\n /** SyncBridge configuration */\n syncBridge?: {\n /** AgentDB namespace for beads */\n namespace?: string;\n /** Sync interval in ms */\n syncInterval?: number;\n /** Enable auto-sync */\n autoSync?: boolean;\n };\n\n /** FormulaExecutor configuration */\n formulaExecutor?: {\n /** Enable WASM acceleration */\n useWasm?: boolean;\n /** Step execution timeout in ms */\n stepTimeout?: number;\n /** Maximum parallel steps */\n maxParallel?: number;\n };\n\n /** ConvoyTracker configuration */\n convoyTracker?: {\n /** Auto-update progress on issue changes */\n autoUpdateProgress?: boolean;\n /** Progress update interval in ms */\n progressUpdateInterval?: number;\n /** Enable persistent storage */\n persistConvoys?: boolean;\n /** Storage path for convoy data */\n storagePath?: string;\n };\n\n /** ConvoyObserver configuration */\n convoyObserver?: {\n /** Polling interval in ms */\n pollInterval?: number;\n /** Maximum poll attempts (0 = unlimited) */\n maxPollAttempts?: number;\n /** Enable WASM for graph analysis */\n useWasm?: boolean;\n };\n\n /** WASM configuration */\n wasm?: {\n /** Enable WASM acceleration */\n enabled?: boolean;\n /** Preload WASM modules on init */\n preload?: boolean;\n };\n\n /** GUPP (Git Universal Pull/Push) adapter configuration */\n gupp?: {\n /** Enable GUPP adapter */\n enabled?: boolean;\n /** GUPP endpoint URL */\n endpoint?: string;\n /** Authentication token */\n authToken?: string;\n };\n\n /** Logger configuration */\n logger?: {\n /** Log level */\n level?: 'debug' | 'info' | 'warn' | 'error';\n /** Enable structured logging */\n structured?: boolean;\n };\n}\n\n/**\n * Default plugin configuration\n */\nconst DEFAULT_PLUGIN_CONFIG: GasTownBridgeConfig = {\n gastown: DEFAULT_CONFIG,\n gtBridge: {\n timeout: 30000,\n },\n bdBridge: {\n timeout: 30000,\n },\n syncBridge: {\n namespace: 'gastown:beads',\n syncInterval: 60000,\n autoSync: false,\n },\n formulaExecutor: {\n useWasm: true,\n stepTimeout: 60000,\n maxParallel: 4,\n },\n convoyTracker: {\n autoUpdateProgress: true,\n progressUpdateInterval: 30000,\n persistConvoys: false,\n storagePath: './data/convoys',\n },\n convoyObserver: {\n pollInterval: 10000,\n maxPollAttempts: 0,\n useWasm: true,\n },\n wasm: {\n enabled: true,\n preload: true,\n },\n gupp: {\n enabled: false,\n },\n logger: {\n level: 'info',\n structured: false,\n },\n};\n\n// ============================================================================\n// GUPP Adapter (Stub)\n// ============================================================================\n\n/**\n * GUPP (Git Universal Pull/Push) Adapter\n *\n * Provides integration with external Git services for cross-repository\n * bead synchronization. This is a stub implementation - full implementation\n * would connect to GUPP services.\n */\nexport interface IGuppAdapter {\n /** Check if GUPP is available */\n isAvailable(): boolean;\n /** Pull beads from remote */\n pull(options?: { rig?: string; since?: Date }): Promise<Bead[]>;\n /** Push beads to remote */\n push(beads: Bead[]): Promise<{ pushed: number; errors: string[] }>;\n /** Sync with remote */\n sync(): Promise<{ pulled: number; pushed: number; conflicts: string[] }>;\n}\n\n/**\n * GUPP Adapter stub implementation\n */\nclass GuppAdapterStub implements IGuppAdapter {\n private enabled: boolean;\n private endpoint?: string;\n\n constructor(config?: GasTownBridgeConfig['gupp']) {\n this.enabled = config?.enabled ?? false;\n this.endpoint = config?.endpoint;\n }\n\n isAvailable(): boolean {\n return this.enabled && !!this.endpoint;\n }\n\n async pull(_options?: { rig?: string; since?: Date }): Promise<Bead[]> {\n if (!this.isAvailable()) {\n return [];\n }\n // Stub: Would connect to GUPP endpoint\n console.warn('[GUPP] Pull not implemented - stub adapter');\n return [];\n }\n\n async push(_beads: Bead[]): Promise<{ pushed: number; errors: string[] }> {\n if (!this.isAvailable()) {\n return { pushed: 0, errors: ['GUPP not configured'] };\n }\n // Stub: Would connect to GUPP endpoint\n console.warn('[GUPP] Push not implemented - stub adapter');\n return { pushed: 0, errors: ['Not implemented'] };\n }\n\n async sync(): Promise<{ pulled: number; pushed: number; conflicts: string[] }> {\n if (!this.isAvailable()) {\n return { pulled: 0, pushed: 0, conflicts: [] };\n }\n // Stub: Would connect to GUPP endpoint\n console.warn('[GUPP] Sync not implemented - stub adapter');\n return { pulled: 0, pushed: 0, conflicts: [] };\n }\n}\n\n// ============================================================================\n// Logger\n// ============================================================================\n\ninterface PluginLogger {\n debug: (msg: string, meta?: Record<string, unknown>) => void;\n info: (msg: string, meta?: Record<string, unknown>) => void;\n warn: (msg: string, meta?: Record<string, unknown>) => void;\n error: (msg: string, meta?: Record<string, unknown>) => void;\n}\n\nfunction createPluginLogger(config?: GasTownBridgeConfig['logger']): PluginLogger {\n const level = config?.level ?? 'info';\n const levels = { debug: 0, info: 1, warn: 2, error: 3 };\n const currentLevel = levels[level];\n\n const log = (msgLevel: keyof typeof levels, msg: string, meta?: Record<string, unknown>) => {\n if (levels[msgLevel] >= currentLevel) {\n const prefix = `[gastown-bridge:${msgLevel}]`;\n if (config?.structured) {\n console.log(JSON.stringify({ level: msgLevel, msg, ...meta, timestamp: new Date().toISOString() }));\n } else {\n console.log(`${prefix} ${msg}`, meta ?? '');\n }\n }\n };\n\n return {\n debug: (msg, meta) => log('debug', msg, meta),\n info: (msg, meta) => log('info', msg, meta),\n warn: (msg, meta) => log('warn', msg, meta),\n error: (msg, meta) => log('error', msg, meta),\n };\n}\n\n// ============================================================================\n// WASM Loader Adapter\n// ============================================================================\n\n/**\n * Adapter to make wasm-loader work with FormulaExecutor's IWasmLoader interface.\n *\n * Since the WASM functions are async but IWasmLoader expects sync methods,\n * we use synchronous JavaScript fallback implementations. The WASM modules\n * are still loaded for caching/preloading purposes but the actual operations\n * use sync fallbacks to satisfy the interface contract.\n */\nclass WasmLoaderAdapter implements IWasmLoader {\n private initialized = false;\n\n async initialize(): Promise<void> {\n try {\n // Preload WASM modules for caching (they will be used async elsewhere)\n await loadFormulaWasm();\n await loadGnnWasm();\n this.initialized = true;\n } catch {\n this.initialized = false;\n }\n }\n\n isInitialized(): boolean {\n return this.initialized && isWasmAvailable();\n }\n\n /**\n * Synchronous TOML parsing fallback (basic implementation)\n */\n parseFormula(content: string): Formula {\n // Basic TOML parsing - for full TOML support, the async WASM version is preferred\n const lines = content.split('\\n');\n const result: Record<string, unknown> = {};\n let currentSection = '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.startsWith('#') || trimmed === '') continue;\n\n const sectionMatch = trimmed.match(/^\\[([^\\]]+)\\]$/);\n if (sectionMatch) {\n currentSection = sectionMatch[1];\n if (!result[currentSection]) result[currentSection] = {};\n continue;\n }\n\n const kvMatch = trimmed.match(/^([^=]+)=(.+)$/);\n if (kvMatch) {\n const key = kvMatch[1].trim();\n let value: unknown = kvMatch[2].trim();\n\n if (value === 'true') value = true;\n else if (value === 'false') value = false;\n else if (/^\\d+$/.test(value as string)) value = parseInt(value as string, 10);\n else if (/^\\d+\\.\\d+$/.test(value as string)) value = parseFloat(value as string);\n else if ((value as string).startsWith('\"') && (value as string).endsWith('\"')) {\n value = (value as string).slice(1, -1);\n }\n\n if (currentSection) {\n (result[currentSection] as Record<string, unknown>)[key] = value;\n } else {\n result[key] = value;\n }\n }\n }\n\n return {\n name: (result['name'] as string) || 'unknown',\n description: (result['description'] as string) || '',\n type: (result['type'] as Formula['type']) || 'workflow',\n version: (result['version'] as number) || 1,\n steps: result['steps'] as Formula['steps'],\n legs: result['legs'] as Formula['legs'],\n vars: result['vars'] as Formula['vars'],\n metadata: result['metadata'] as Formula['metadata'],\n };\n }\n\n /**\n * Synchronous variable substitution\n */\n cookFormula(formula: Formula, vars: Record<string, string>): CookedFormula {\n const substituteVars = (text: string): string => {\n let result = text;\n for (const [key, value] of Object.entries(vars)) {\n result = result.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n result = result.replace(new RegExp(`\\\\$\\\\{${key}\\\\}`, 'g'), value);\n }\n return result;\n };\n\n const substituteObject = <T>(obj: T): T => {\n if (typeof obj === 'string') return substituteVars(obj) as T;\n if (Array.isArray(obj)) return obj.map(substituteObject) as T;\n if (obj !== null && typeof obj === 'object') {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = substituteObject(value);\n }\n return result as T;\n }\n return obj;\n };\n\n const cooked = substituteObject(formula);\n return {\n ...cooked,\n cookedAt: new Date(),\n cookedVars: vars,\n originalName: formula.name,\n };\n }\n\n /**\n * Synchronous batch cooking\n */\n batchCook(formulas: Formula[], varsArray: Record<string, string>[]): CookedFormula[] {\n return formulas.map((formula, i) => this.cookFormula(formula, varsArray[i] ?? {}));\n }\n\n /**\n * Synchronous topological sort using Kahn's algorithm\n */\n resolveStepDependencies(steps: Step[]): Step[] {\n const inDegree = new Map<string, number>();\n const graph = new Map<string, string[]>();\n\n for (const step of steps) {\n inDegree.set(step.id, 0);\n graph.set(step.id, []);\n }\n\n for (const step of steps) {\n for (const dep of step.needs ?? []) {\n graph.get(dep)?.push(step.id);\n inDegree.set(step.id, (inDegree.get(step.id) || 0) + 1);\n }\n }\n\n const queue: string[] = [];\n for (const [id, degree] of inDegree) {\n if (degree === 0) queue.push(id);\n }\n\n const sorted: string[] = [];\n while (queue.length > 0) {\n const id = queue.shift()!;\n sorted.push(id);\n for (const neighbor of graph.get(id) || []) {\n const newDegree = (inDegree.get(neighbor) || 0) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n if (sorted.length !== steps.length) {\n const cycleNodes = steps.filter(s => !sorted.includes(s.id)).map(s => s.id);\n throw new GasTownError(\n 'Cycle detected in step dependencies',\n GasTownErrorCode.DEPENDENCY_CYCLE,\n { cycleNodes }\n );\n }\n\n const stepMap = new Map(steps.map(s => [s.id, s]));\n return sorted.map(id => stepMap.get(id)).filter((s): s is Step => s !== undefined);\n }\n\n /**\n * Synchronous cycle detection using DFS\n */\n detectCycle(steps: Step[]): { hasCycle: boolean; cycleSteps?: string[] } {\n const WHITE = 0, GRAY = 1, BLACK = 2;\n const graph = new Map<string, string[]>();\n const colors = new Map<string, number>();\n\n for (const step of steps) {\n graph.set(step.id, step.needs ?? []);\n colors.set(step.id, WHITE);\n }\n\n const cycleNodes: string[] = [];\n\n const dfs = (id: string, path: string[]): boolean => {\n colors.set(id, GRAY);\n path.push(id);\n\n for (const dep of graph.get(id) || []) {\n if (colors.get(dep) === GRAY) {\n const cycleStart = path.indexOf(dep);\n cycleNodes.push(...path.slice(cycleStart));\n return true;\n }\n if (colors.get(dep) === WHITE && dfs(dep, path)) {\n return true;\n }\n }\n\n colors.set(id, BLACK);\n path.pop();\n return false;\n };\n\n for (const step of steps) {\n if (colors.get(step.id) === WHITE && dfs(step.id, [])) {\n break;\n }\n }\n\n return {\n hasCycle: cycleNodes.length > 0,\n cycleSteps: cycleNodes.length > 0 ? [...new Set(cycleNodes)] : undefined,\n };\n }\n}\n\n// ============================================================================\n// Plugin Implementation\n// ============================================================================\n\n/**\n * Gas Town Bridge Plugin for Claude Flow V3\n *\n * Provides integration with Gas Town orchestrator:\n * - 5 Beads MCP tools (CLI-based)\n * - 3 Convoy MCP tools\n * - 4 Formula MCP tools (WASM-accelerated)\n * - 5 WASM computation tools\n * - 3 Orchestration tools\n */\nexport class GasTownBridgePlugin extends EventEmitter implements IPlugin {\n readonly name = '@claude-flow/plugin-gastown-bridge';\n readonly version = '0.1.0';\n readonly description =\n 'Gas Town orchestrator integration with WASM-accelerated formula parsing and graph analysis';\n\n private config: GasTownBridgeConfig;\n private pluginContext: PluginContext | null = null;\n private logger: PluginLogger;\n\n // Component instances\n private gtBridge: GtBridge | null = null;\n private bdBridge: BdBridge | null = null;\n private syncBridge: SyncBridge | null = null;\n private formulaExecutor: FormulaExecutor | null = null;\n private convoyTracker: ConvoyTracker | null = null;\n private convoyObserver: ConvoyObserver | null = null;\n private wasmLoader: WasmLoaderAdapter | null = null;\n private guppAdapter: IGuppAdapter | null = null;\n\n // State\n private wasmInitialized = false;\n private cliAvailable = false;\n private initialized = false;\n\n constructor(config?: Partial<GasTownBridgeConfig>) {\n super();\n this.config = this.mergeConfig(DEFAULT_PLUGIN_CONFIG, config);\n this.logger = createPluginLogger(this.config.logger);\n }\n\n /**\n * Register the plugin with claude-flow\n */\n async register(context: PluginContext): Promise<void> {\n this.pluginContext = context;\n\n // Register plugin in context\n context.set('gastown-bridge', this);\n context.set('gt.version', this.version);\n context.set('gt.capabilities', this.getCapabilities());\n\n this.logger.info('Plugin registered', { version: this.version });\n }\n\n /**\n * Initialize the plugin (load WASM, set up bridges)\n */\n async initialize(context: PluginContext): Promise<{ success: boolean; error?: string }> {\n if (this.initialized) {\n return { success: true };\n }\n\n try {\n this.logger.info('Initializing Gas Town Bridge Plugin...');\n\n // Step 1: Initialize WASM loader if enabled\n if (this.config.wasm?.enabled) {\n await this.initializeWasm();\n }\n\n // Step 2: Check CLI availability\n this.cliAvailable = await this.checkCliAvailable();\n if (!this.cliAvailable) {\n this.logger.warn('CLI tools (gt, bd) not found. Some features will be unavailable.');\n }\n\n // Step 3: Initialize bridges\n await this.initializeBridges();\n\n // Step 4: Initialize formula executor\n await this.initializeFormulaExecutor();\n\n // Step 5: Initialize convoy tracker and observer\n await this.initializeConvoyComponents();\n\n // Step 6: Initialize GUPP adapter\n this.initializeGuppAdapter();\n\n // Store instances in plugin context\n context.set('gt.config', this.config);\n context.set('gt.wasmReady', this.wasmInitialized);\n context.set('gt.cliAvailable', this.cliAvailable);\n context.set('gt.bridges', {\n gt: this.gtBridge,\n bd: this.bdBridge,\n sync: this.syncBridge,\n });\n context.set('gt.executor', this.formulaExecutor);\n context.set('gt.tracker', this.convoyTracker);\n context.set('gt.observer', this.convoyObserver);\n context.set('gt.gupp', this.guppAdapter);\n\n this.initialized = true;\n this.emit('initialized');\n\n this.logger.info('Plugin initialized successfully', {\n wasmReady: this.wasmInitialized,\n cliAvailable: this.cliAvailable,\n toolCount: this.getMCPTools().length,\n });\n\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.logger.error('Failed to initialize plugin', { error: errorMessage });\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Shutdown the plugin (cleanup resources)\n */\n async shutdown(_context: PluginContext): Promise<{ success: boolean; error?: string }> {\n try {\n this.logger.info('Shutting down Gas Town Bridge Plugin...');\n\n // Cleanup convoy observer\n if (this.convoyObserver) {\n this.convoyObserver.dispose();\n this.convoyObserver = null;\n }\n\n // Cleanup convoy tracker\n if (this.convoyTracker) {\n this.convoyTracker.dispose();\n this.convoyTracker = null;\n }\n\n // Cleanup sync bridge (SyncBridge has no dispose method)\n if (this.syncBridge) {\n this.syncBridge = null;\n }\n\n // Cleanup bridges\n this.gtBridge = null;\n this.bdBridge = null;\n\n // Cleanup WASM resources\n this.wasmLoader = null;\n this.wasmInitialized = false;\n\n // Reset state\n this.pluginContext = null;\n this.initialized = false;\n\n this.emit('shutdown');\n this.removeAllListeners();\n\n this.logger.info('Plugin shutdown complete');\n return { success: true };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.logger.error('Failed to shutdown plugin', { error: errorMessage });\n return { success: false, error: errorMessage };\n }\n }\n\n /**\n * Get plugin capabilities\n */\n getCapabilities(): string[] {\n return [\n 'beads-integration',\n 'convoy-tracking',\n 'formula-parsing',\n 'formula-cooking',\n 'formula-execution',\n 'wasm-acceleration',\n 'dependency-resolution',\n 'topological-sort',\n 'cycle-detection',\n 'critical-path',\n 'agentdb-sync',\n 'sling-operations',\n 'gupp-adapter',\n ];\n }\n\n /**\n * Get plugin MCP tools\n */\n getMCPTools(): PluginMCPTool[] {\n // Convert MCPTool to PluginMCPTool format\n return gasTownBridgeTools.map(tool => this.convertMcpTool(tool));\n }\n\n /**\n * Get plugin hooks\n */\n getHooks(): PluginHook[] {\n return [\n this.createPreTaskHook(),\n this.createPostTaskHook(),\n this.createBeadsSyncHook(),\n this.createConvoyProgressHook(),\n ];\n }\n\n // ============================================================================\n // Public API\n // ============================================================================\n\n /**\n * Get the current configuration\n */\n getConfig(): GasTownBridgeConfig {\n return { ...this.config };\n }\n\n /**\n * Update configuration\n */\n updateConfig(config: Partial<GasTownBridgeConfig>): void {\n this.config = this.mergeConfig(this.config, config);\n if (this.config.gastown) {\n this.config.gastown = validateConfig({ ...DEFAULT_CONFIG, ...this.config.gastown });\n }\n }\n\n /**\n * Check if WASM is initialized\n */\n isWasmReady(): boolean {\n return this.wasmInitialized;\n }\n\n /**\n * Check if CLI tools are available\n */\n isCliAvailable(): boolean {\n return this.cliAvailable;\n }\n\n /**\n * Get bridge instances\n */\n getBridges(): { gt: GtBridge | null; bd: BdBridge | null; sync: SyncBridge | null } {\n return {\n gt: this.gtBridge,\n bd: this.bdBridge,\n sync: this.syncBridge,\n };\n }\n\n /**\n * Get formula executor\n */\n getFormulaExecutor(): FormulaExecutor | null {\n return this.formulaExecutor;\n }\n\n /**\n * Get convoy tracker\n */\n getConvoyTracker(): ConvoyTracker | null {\n return this.convoyTracker;\n }\n\n /**\n * Get convoy observer\n */\n getConvoyObserver(): ConvoyObserver | null {\n return this.convoyObserver;\n }\n\n /**\n * Get GUPP adapter\n */\n getGuppAdapter(): IGuppAdapter | null {\n return this.guppAdapter;\n }\n\n /**\n * Get plugin metadata\n */\n getMetadata(): {\n name: string;\n version: string;\n description: string;\n author: string;\n license: string;\n repository: string;\n keywords: string[];\n mcpTools: string[];\n capabilities: string[];\n } {\n return {\n name: this.name,\n version: this.version,\n description: this.description,\n author: 'rUv',\n license: 'MIT',\n repository: 'https://github.com/ruvnet/claude-flow',\n keywords: [\n 'claude-flow',\n 'plugin',\n 'gastown',\n 'beads',\n 'orchestration',\n 'workflows',\n 'formulas',\n 'wasm',\n 'multi-agent',\n ],\n mcpTools: gasTownBridgeTools.map(t => t.name),\n capabilities: this.getCapabilities(),\n };\n }\n\n // ============================================================================\n // Private Methods - Initialization\n // ============================================================================\n\n private mergeConfig(base: GasTownBridgeConfig, override?: Partial<GasTownBridgeConfig>): GasTownBridgeConfig {\n if (!override) return { ...base };\n\n return {\n gastown: { ...base.gastown, ...override.gastown },\n gtBridge: { ...base.gtBridge, ...override.gtBridge },\n bdBridge: { ...base.bdBridge, ...override.bdBridge },\n syncBridge: { ...base.syncBridge, ...override.syncBridge },\n formulaExecutor: { ...base.formulaExecutor, ...override.formulaExecutor },\n convoyTracker: { ...base.convoyTracker, ...override.convoyTracker },\n convoyObserver: { ...base.convoyObserver, ...override.convoyObserver },\n wasm: { ...base.wasm, ...override.wasm },\n gupp: { ...base.gupp, ...override.gupp },\n logger: { ...base.logger, ...override.logger },\n };\n }\n\n private async initializeWasm(): Promise<void> {\n try {\n this.wasmLoader = new WasmLoaderAdapter();\n\n if (this.config.wasm?.preload) {\n await preloadWasmModules();\n }\n\n await this.wasmLoader.initialize();\n this.wasmInitialized = this.wasmLoader.isInitialized();\n\n if (this.wasmInitialized) {\n const versions = await getWasmVersions();\n this.logger.info('WASM modules initialized', { versions });\n }\n } catch (error) {\n this.logger.warn('WASM initialization failed, using JS fallback', {\n error: error instanceof Error ? error.message : String(error),\n });\n this.wasmInitialized = false;\n }\n }\n\n private async checkCliAvailable(): Promise<boolean> {\n try {\n const { exec } = await import('child_process');\n const { promisify } = await import('util');\n const execAsync = promisify(exec);\n\n await execAsync('which gt');\n await execAsync('which bd');\n return true;\n } catch {\n return false;\n }\n }\n\n private async initializeBridges(): Promise<void> {\n // Initialize GtBridge\n this.gtBridge = createGtBridge({\n gtPath: this.config.gtBridge?.gtPath,\n timeout: this.config.gtBridge?.timeout,\n cwd: this.config.gtBridge?.cwd,\n });\n await this.gtBridge.initialize();\n\n // Initialize BdBridge\n this.bdBridge = createBdBridge({\n bdPath: this.config.bdBridge?.bdPath,\n timeout: this.config.bdBridge?.timeout,\n cwd: this.config.bdBridge?.cwd,\n });\n await this.bdBridge.initialize();\n\n // Initialize SyncBridge - requires an AgentDB service\n // We create a stub AgentDB service that will be replaced when\n // the plugin context provides a real one\n const stubAgentDB = this.createStubAgentDB();\n this.syncBridge = createSyncBridge(stubAgentDB, {\n beadsBridge: this.config.bdBridge,\n agentdbNamespace: this.config.syncBridge?.namespace ?? 'gastown:beads',\n });\n\n this.logger.debug('Bridges initialized');\n }\n\n private async initializeFormulaExecutor(): Promise<void> {\n if (!this.gtBridge) {\n throw new GasTownError('GtBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n }\n\n const wasmLoader = this.config.formulaExecutor?.useWasm && this.wasmLoader\n ? this.wasmLoader\n : undefined;\n\n this.formulaExecutor = createFormulaExecutor(\n this.gtBridge,\n wasmLoader,\n this.logger\n );\n\n this.logger.debug('Formula executor initialized', {\n wasmEnabled: !!wasmLoader,\n });\n }\n\n private async initializeConvoyComponents(): Promise<void> {\n if (!this.bdBridge) {\n throw new GasTownError('BdBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n }\n\n // Initialize ConvoyTracker\n this.convoyTracker = createConvoyTracker(\n {\n bdBridge: this.bdBridge,\n autoUpdateProgress: this.config.convoyTracker?.autoUpdateProgress,\n progressUpdateInterval: this.config.convoyTracker?.progressUpdateInterval,\n persistConvoys: this.config.convoyTracker?.persistConvoys,\n storagePath: this.config.convoyTracker?.storagePath,\n },\n this.logger\n );\n\n // Initialize ConvoyObserver\n this.convoyObserver = createConvoyObserver(\n {\n bdBridge: this.bdBridge,\n tracker: this.convoyTracker,\n pollInterval: this.config.convoyObserver?.pollInterval,\n maxPollAttempts: this.config.convoyObserver?.maxPollAttempts,\n useWasm: this.config.convoyObserver?.useWasm,\n },\n this.logger\n );\n\n this.logger.debug('Convoy components initialized');\n }\n\n private initializeGuppAdapter(): void {\n this.guppAdapter = new GuppAdapterStub(this.config.gupp);\n this.logger.debug('GUPP adapter initialized', {\n enabled: this.guppAdapter.isAvailable(),\n });\n }\n\n /**\n * Create a stub AgentDB service for SyncBridge initialization.\n * This stub stores data in-memory and should be replaced with\n * the real AgentDB service from the plugin context.\n */\n private createStubAgentDB(): IAgentDBService {\n const storage = new Map<string, Map<string, AgentDBEntry>>();\n\n return {\n async store(key: string, value: unknown, namespace?: string, metadata?: Record<string, unknown>): Promise<void> {\n const ns = namespace ?? 'default';\n if (!storage.has(ns)) storage.set(ns, new Map());\n storage.get(ns)!.set(key, {\n key,\n value,\n namespace: ns,\n metadata,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n version: 1,\n });\n },\n async retrieve(key: string, namespace?: string): Promise<AgentDBEntry | null> {\n const ns = namespace ?? 'default';\n return storage.get(ns)?.get(key) ?? null;\n },\n async search(_query: string, namespace?: string, limit?: number): Promise<AgentDBEntry[]> {\n const ns = namespace ?? 'default';\n const entries = storage.get(ns);\n if (!entries) return [];\n return Array.from(entries.values()).slice(0, limit ?? 100);\n },\n async list(namespace?: string, limit?: number, offset?: number): Promise<AgentDBEntry[]> {\n const ns = namespace ?? 'default';\n const entries = storage.get(ns);\n if (!entries) return [];\n return Array.from(entries.values()).slice(offset ?? 0, (offset ?? 0) + (limit ?? 100));\n },\n async delete(key: string, namespace?: string): Promise<void> {\n const ns = namespace ?? 'default';\n storage.get(ns)?.delete(key);\n },\n async getNamespaceStats(namespace: string): Promise<{ count: number; lastUpdated?: string }> {\n const entries = storage.get(namespace);\n if (!entries) return { count: 0 };\n const values = Array.from(entries.values());\n const lastUpdated = values.length > 0\n ? values.reduce((latest, e) => (e.updatedAt && e.updatedAt > (latest ?? '')) ? e.updatedAt : latest, undefined as string | undefined)\n : undefined;\n return { count: values.length, lastUpdated };\n },\n };\n }\n\n // ============================================================================\n // Private Methods - MCP Tool Conversion\n // ============================================================================\n\n private convertMcpTool(tool: MCPTool): PluginMCPTool {\n return {\n name: tool.name,\n description: tool.description,\n category: tool.category,\n version: tool.version,\n inputSchema: this.zodToJsonSchema(tool.inputSchema),\n handler: async (input, context) => {\n // Create tool context from plugin context\n const toolContext = this.createToolContext(context);\n const result = await tool.handler(input, toolContext);\n return result;\n },\n };\n }\n\n private zodToJsonSchema(zodSchema: unknown): { type: 'object'; properties: Record<string, unknown>; required?: string[] } {\n // Simplified conversion - in production use zod-to-json-schema\n try {\n const schema = zodSchema as { _def?: { shape?: () => Record<string, unknown> } };\n if (schema._def?.shape) {\n const shape = schema._def.shape();\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldSchema = value as { _def?: { typeName?: string; innerType?: unknown } };\n const typeName = fieldSchema._def?.typeName ?? 'ZodString';\n\n // Map Zod types to JSON Schema types\n let jsonType = 'string';\n if (typeName.includes('Number')) jsonType = 'number';\n else if (typeName.includes('Boolean')) jsonType = 'boolean';\n else if (typeName.includes('Array')) jsonType = 'array';\n else if (typeName.includes('Object')) jsonType = 'object';\n\n properties[key] = { type: jsonType };\n\n // Check if required (not optional)\n if (!typeName.includes('Optional') && !typeName.includes('Default')) {\n required.push(key);\n }\n }\n\n return { type: 'object', properties, required: required.length > 0 ? required : undefined };\n }\n } catch {\n // Fallback\n }\n\n return { type: 'object', properties: {} };\n }\n\n private createToolContext(pluginContext: PluginContext): ToolContext {\n const gasTownConfig = this.config.gastown ?? DEFAULT_CONFIG;\n\n return {\n get: <T>(key: string) => pluginContext.get<T>(key),\n set: <T>(key: string, value: T) => pluginContext.set(key, value),\n bridges: {\n gastown: this.createBridgeFacade(),\n beadsSync: this.createSyncFacade(),\n formulaWasm: this.createFormulaWasmFacade(),\n dependencyWasm: this.createDependencyWasmFacade(),\n },\n config: {\n townRoot: gasTownConfig.townRoot ?? '',\n allowedRigs: [], // Not part of GasTownConfig type - use empty array\n maxBeadsLimit: 100,\n maskSecrets: true,\n enableWasm: this.wasmInitialized,\n },\n };\n }\n\n /**\n * Create the bridge facade for MCP tools.\n *\n * NOTE: This facade bridges between the plugin's internal types (from bd-bridge, etc.)\n * and the external interface types (from types.ts). Type casts are necessary because\n * the underlying bridges use different type definitions. A future refactor should\n * unify these type systems.\n */\n private createBridgeFacade(): ToolContext['bridges']['gastown'] {\n const gt = this.gtBridge;\n const bd = this.bdBridge;\n const tracker = this.convoyTracker;\n const wasmLoader = this.wasmLoader;\n\n return {\n async createBead(opts) {\n if (!bd) throw new GasTownError('BdBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n // CreateBeadOptions uses title, the bridge uses content\n const bdOpts = {\n type: 'prompt' as import('./bridges/bd-bridge.js').BeadType,\n content: opts.description ?? opts.title,\n parentId: opts.parent,\n agentId: opts.assignee,\n tags: opts.labels,\n };\n const result = await bd.createBead(bdOpts);\n // Map bd-bridge Bead to types.ts Bead\n return {\n id: result.id,\n title: result.content.slice(0, 100),\n description: result.content,\n status: 'open' as const,\n priority: 0,\n labels: result.tags ?? [],\n createdAt: result.timestamp ? new Date(result.timestamp) : new Date(),\n updatedAt: result.timestamp ? new Date(result.timestamp) : new Date(),\n parentId: result.parentId,\n assignee: result.agentId,\n };\n },\n async getReady(limit, _rig, _labels) {\n if (!bd) throw new GasTownError('BdBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const beads = await bd.listBeads({ limit });\n // Map bd-bridge Beads to types.ts Beads\n return beads.map(b => ({\n id: b.id,\n title: b.content.slice(0, 100),\n description: b.content,\n status: 'open' as const,\n priority: 0,\n labels: b.tags ?? [],\n createdAt: b.timestamp ? new Date(b.timestamp) : new Date(),\n updatedAt: b.timestamp ? new Date(b.timestamp) : new Date(),\n parentId: b.parentId,\n assignee: b.agentId,\n }));\n },\n async showBead(beadId: string) {\n if (!bd) throw new GasTownError('BdBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const bead = await bd.getBead(beadId);\n return {\n bead: {\n id: bead.id,\n title: bead.content.slice(0, 100),\n description: bead.content,\n status: 'open' as const,\n priority: 0,\n labels: bead.tags ?? [],\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n dependencies: bead.parentId ? [bead.parentId] : [],\n dependents: [],\n };\n },\n async manageDependency(action: 'add' | 'remove', child: string, parent: string) {\n if (!bd) throw new GasTownError('BdBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n // BdBridge doesn't have addDependency/removeDependency - use execBd directly\n if (action === 'add') {\n await bd.execBd(['update', child, '--parent', parent]);\n } else {\n await bd.execBd(['update', child, '--remove-parent', parent]);\n }\n },\n async createConvoy(opts) {\n if (!tracker) throw new GasTownError('ConvoyTracker not initialized', GasTownErrorCode.NOT_INITIALIZED);\n // ConvoyTracker.create takes (name, issues, description) as separate arguments\n return tracker.create(opts.name, opts.issues, opts.description);\n },\n async getConvoyStatus(convoyId, _detailed) {\n if (!tracker) throw new GasTownError('ConvoyTracker not initialized', GasTownErrorCode.NOT_INITIALIZED);\n if (convoyId) {\n const convoy = await tracker.getStatus(convoyId);\n // Return array with single convoy\n return [convoy];\n }\n // If no convoyId, return all convoys\n return tracker.listConvoys();\n },\n async trackConvoy(convoyId: string, action: 'add' | 'remove', issues: string[]) {\n if (!tracker) throw new GasTownError('ConvoyTracker not initialized', GasTownErrorCode.NOT_INITIALIZED);\n if (action === 'add') {\n await tracker.addIssues(convoyId, issues);\n } else {\n await tracker.removeIssues(convoyId, issues);\n }\n },\n async listFormulas(_type, _includeBuiltin) {\n // No direct CLI command - return empty for now\n // Would need to scan formula directories\n return [] as Array<{ name: string; type: import('./types.js').FormulaType; description: string; builtin: boolean }>;\n },\n async cookFormula(formula: Formula | string, vars: Record<string, string>) {\n // Use WasmLoaderAdapter for cooking\n if (wasmLoader?.isInitialized()) {\n const parsed = typeof formula === 'string' ? wasmLoader.parseFormula(formula) : formula;\n return wasmLoader.cookFormula(parsed, vars);\n }\n // Fallback if no WASM\n throw new GasTownError('WASM not initialized for formula cooking', GasTownErrorCode.NOT_INITIALIZED);\n },\n async executeFormula(_formula, _vars, _targetAgent, _dryRun): Promise<{ beads_created: string[] }> {\n // Formula execution requires the FormulaExecutor\n throw new GasTownError('Use FormulaExecutor.execute() for formula execution', GasTownErrorCode.NOT_INITIALIZED);\n },\n async createFormula(_opts): Promise<{ path: string }> {\n // Formula creation would write to filesystem - not implemented in bridges\n throw new GasTownError('Formula creation not implemented in bridge layer', GasTownErrorCode.NOT_INITIALIZED);\n },\n async sling(beadId: string, target: string, formula?: string, priority?: number) {\n if (!gt) throw new GasTownError('GtBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n // Use execGt to run sling command\n const args = ['tx', 'sling', '--bead', beadId, '--target', target];\n if (formula) args.push('--formula', formula);\n if (priority !== undefined) args.push('--priority', String(priority));\n await gt.execGt(args);\n },\n async listAgents(_rig, _role, _includeInactive) {\n // Would need agent registry - return empty for now\n // Return type matches GasTownAgent[]\n return [] as import('./types.js').GasTownAgent[];\n },\n async sendMail(to, subject, body): Promise<string> {\n if (!gt) throw new GasTownError('GtBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n // Use execGt for mail operations\n const result = await gt.execGt(['tx', 'mail', '--to', to, '--subject', subject, '--body', body, '--json']);\n // Return message ID as string\n return result.data ?? 'unknown';\n },\n async readMail(mailId) {\n if (!gt) throw new GasTownError('GtBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const result = await gt.execGt(['tx', 'mail', 'read', mailId, '--json']);\n if (result.success && result.data) {\n const parsed = gt.parseGtOutput<{ id: string; from: string; to?: string; subject: string; body: string; timestamp: string }>(result.data);\n // Map to GasTownMail type\n return {\n id: parsed.id,\n from: parsed.from,\n to: parsed.to ?? '',\n subject: parsed.subject,\n body: parsed.body,\n sentAt: new Date(parsed.timestamp),\n read: true,\n };\n }\n throw new GasTownError(`Failed to read mail: ${mailId}`, GasTownErrorCode.NOT_INITIALIZED);\n },\n async listMail(limit) {\n if (!gt) throw new GasTownError('GtBridge not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const args = ['tx', 'mail', 'list', '--json'];\n if (limit !== undefined) args.push('--limit', String(limit));\n const result = await gt.execGt(args);\n if (result.success && result.data) {\n const parsed = gt.parseGtOutput<Array<{ id: string; from: string; to?: string; subject: string; body?: string; timestamp: string }>>(result.data);\n // Map to GasTownMail[] type\n return parsed.map(m => ({\n id: m.id,\n from: m.from,\n to: m.to ?? '',\n subject: m.subject,\n body: m.body ?? '',\n sentAt: new Date(m.timestamp),\n read: false,\n }));\n }\n return [];\n },\n };\n }\n\n private createSyncFacade(): ToolContext['bridges']['beadsSync'] {\n const sync = this.syncBridge;\n const bd = this.bdBridge;\n\n return {\n async pullBeads(_rig?: string, _namespace?: string) {\n if (!sync) return { synced: 0, conflicts: 0 };\n // SyncBridge uses syncFromAgentDB to pull beads\n const beads = await sync.syncFromAgentDB();\n return { synced: beads.length, conflicts: sync.getPendingConflicts().length };\n },\n async pushTasks(_namespace?: string) {\n if (!sync || !bd) return { pushed: 0, conflicts: 0 };\n // SyncBridge uses syncToAgentDB to push beads\n const allBeads = await bd.listBeads({});\n const result = await sync.syncToAgentDB(allBeads);\n return { pushed: result.synced, conflicts: result.conflicts };\n },\n };\n }\n\n private createFormulaWasmFacade(): ToolContext['bridges']['formulaWasm'] {\n const loader = this.wasmLoader;\n\n return {\n isInitialized: () => loader?.isInitialized() ?? false,\n async initialize() {\n if (loader) await loader.initialize();\n },\n async parseFormula(content: string, _validate?: boolean): Promise<Formula> {\n if (!loader) throw new GasTownError('WASM not initialized', GasTownErrorCode.NOT_INITIALIZED);\n return loader.parseFormula(content);\n },\n async cookFormula(formula: Formula | string, vars: Record<string, string>, _isContent?: boolean) {\n if (!loader) throw new GasTownError('WASM not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const parsed = typeof formula === 'string' ? loader.parseFormula(formula) : formula;\n return loader.cookFormula(parsed, vars);\n },\n async cookBatch(formulas: Array<{ name: string; content: string }>, vars: Record<string, string>[], _continueOnError?: boolean): Promise<{ cooked: CookedFormula[]; errors: Array<{ index: number; error: string }> }> {\n if (!loader) throw new GasTownError('WASM not initialized', GasTownErrorCode.NOT_INITIALIZED);\n const parsedFormulas = formulas.map(f => loader.parseFormula(f.content));\n const cooked = loader.batchCook(parsedFormulas, vars);\n return { cooked, errors: [] };\n },\n };\n }\n\n private createDependencyWasmFacade(): ToolContext['bridges']['dependencyWasm'] {\n const loader = this.wasmLoader;\n const simpleSimilarity = this.simpleSimilarity.bind(this);\n\n return {\n isInitialized: () => loader?.isInitialized() ?? false,\n async initialize() {\n if (loader) await loader.initialize();\n },\n async resolveDependencies(beads, action) {\n if (!loader) throw new GasTownError('WASM not initialized', GasTownErrorCode.NOT_INITIALIZED);\n\n // Convert beads to Step format for WasmLoaderAdapter (sync)\n // Add placeholder title and description to satisfy Step interface\n const steps: Step[] = beads.map(b => ({\n id: b.id,\n title: b.id,\n description: '',\n needs: b.dependencies ?? [],\n }));\n\n if (action === 'topo_sort') {\n // Use the sync resolveStepDependencies from WasmLoaderAdapter\n try {\n const sorted = loader.resolveStepDependencies(steps);\n return { action, sorted: sorted.map(s => s.id), hasCycle: false, cycleNodes: undefined };\n } catch (e) {\n if (e instanceof GasTownError && e.code === GasTownErrorCode.DEPENDENCY_CYCLE) {\n const cycleNodes = (e.context as { cycleNodes?: string[] })?.cycleNodes ?? [];\n return { action, sorted: [], hasCycle: true, cycleNodes };\n }\n throw e;\n }\n } else if (action === 'cycle_detect') {\n const result = loader.detectCycle(steps);\n return { action, hasCycle: result.hasCycle, cycleNodes: result.cycleSteps };\n } else {\n // For critical path, use async WASM function\n const nodes = beads.map(b => b.id);\n const edges = beads.flatMap(b =>\n (b.dependencies ?? []).map(dep => ({ from: dep, to: b.id }))\n );\n const result = await wasmCriticalPath(nodes, edges, []);\n return { action, criticalPath: result.path, totalDuration: result.totalDuration };\n }\n },\n async matchPatterns(query: string, candidates: string[], k: number, threshold: number) {\n // Simplified pattern matching - in production use WASM HNSW\n const matches = candidates\n .map((candidate, index) => ({\n index,\n candidate,\n similarity: simpleSimilarity(query, candidate),\n }))\n .filter(m => m.similarity >= threshold)\n .sort((a, b) => b.similarity - a.similarity)\n .slice(0, k);\n\n return matches;\n },\n async optimizeConvoy(convoy, strategy, _constraints) {\n if (!loader) throw new GasTownError('WASM not initialized', GasTownErrorCode.NOT_INITIALIZED);\n\n // Convert to Step format with placeholder fields\n const steps: Step[] = convoy.trackedIssues.map(id => ({\n id,\n title: id,\n description: '',\n needs: [],\n }));\n const sortedSteps = loader.resolveStepDependencies(steps);\n const executionOrder = sortedSteps.map(s => s.id);\n\n return {\n convoyId: convoy.id,\n strategy,\n executionOrder,\n parallelGroups: [executionOrder], // Simplified - all in one group since no deps\n estimatedDuration: convoy.trackedIssues.length * 1000,\n };\n },\n };\n }\n\n private simpleSimilarity(a: string, b: string): number {\n // Simple Jaccard similarity\n const setA = new Set(a.toLowerCase().split(/\\s+/));\n const setB = new Set(b.toLowerCase().split(/\\s+/));\n const intersection = new Set([...setA].filter(x => setB.has(x)));\n const union = new Set([...setA, ...setB]);\n return intersection.size / union.size;\n }\n\n // ============================================================================\n // Hook Implementations\n // ============================================================================\n\n private createPreTaskHook(): PluginHook {\n return {\n name: 'gt/pre-task',\n event: 'pre-task',\n priority: 50,\n description: 'Check for related beads before task execution',\n handler: async (_context: PluginContext, payload: unknown) => {\n // Check if task matches any beads in Gas Town\n if (this.config.gastown?.autoCreateBeads) {\n this.logger.debug('Pre-task hook: checking for related beads');\n }\n return payload;\n },\n };\n }\n\n private createPostTaskHook(): PluginHook {\n return {\n name: 'gt/post-task',\n event: 'post-task',\n priority: 50,\n description: 'Update bead status after task completion',\n handler: async (_context: PluginContext, payload: unknown) => {\n // Update bead status if autoCreateBeads is enabled\n if (this.config.gastown?.autoCreateBeads) {\n this.logger.debug('Post-task hook: updating bead status');\n }\n return payload;\n },\n };\n }\n\n private createBeadsSyncHook(): PluginHook {\n return {\n name: 'gt/beads-sync',\n event: 'session-start',\n priority: 100,\n description: 'Sync beads with AgentDB on session start',\n handler: async (_context: PluginContext, payload: unknown) => {\n if (this.config.gastown?.enableBeadsSync && this.syncBridge) {\n this.logger.info('Beads sync triggered on session start');\n try {\n // Use syncBidirectional for full sync\n await this.syncBridge.syncBidirectional();\n } catch (error) {\n this.logger.warn('Beads sync failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return payload;\n },\n };\n }\n\n private createConvoyProgressHook(): PluginHook {\n return {\n name: 'gt/convoy-progress',\n event: 'task-complete',\n priority: 60,\n description: 'Update convoy progress when tasks complete',\n handler: async (_context: PluginContext, payload: unknown) => {\n if (this.convoyTracker) {\n // Refresh active convoy progress\n const activeConvoys = this.convoyTracker.listConvoys('active');\n for (const convoy of activeConvoys) {\n try {\n await this.convoyTracker.getStatus(convoy.id);\n } catch {\n // Ignore errors during refresh\n }\n }\n }\n return payload;\n },\n };\n }\n}\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Create a new Gas Town Bridge Plugin instance\n */\nexport function createGasTownBridgePlugin(config?: Partial<GasTownBridgeConfig>): GasTownBridgePlugin {\n return new GasTownBridgePlugin(config);\n}\n\n// ============================================================================\n// Exports\n// ============================================================================\n\n// Re-export types\nexport * from './types.js';\n\n// Re-export bridges\nexport * from './bridges/index.js';\n\n// Re-export convoy module\nexport * from './convoy/index.js';\n\n// Re-export formula executor\nexport {\n FormulaExecutor,\n createFormulaExecutor,\n type IWasmLoader,\n type ExecuteOptions,\n type StepContext,\n type StepResult,\n type Molecule,\n type ExecutionProgress,\n type ExecutorEvents,\n} from './formula/executor.js';\n\n// Re-export MCP tools\nexport {\n gasTownBridgeTools,\n toolHandlers,\n toolCategories,\n getTool,\n getToolsByLayer,\n type MCPTool,\n type ToolContext,\n type MCPToolResult,\n} from './mcp-tools.js';\n\n// Re-export WASM loader\nexport {\n // Availability check\n isWasmAvailable,\n // Formula operations\n loadFormulaWasm,\n parseFormula,\n cookFormula,\n cookBatch,\n // Graph operations\n loadGnnWasm,\n topoSort,\n detectCycles,\n criticalPath,\n // Module management\n preloadWasmModules,\n getWasmVersions,\n resetWasmCache,\n // Performance timing\n getPerformanceLog,\n clearPerformanceLog,\n // Types\n type PerformanceTiming,\n type GraphEdge,\n type NodeWeight,\n type CycleDetectionResult,\n // Default export\n default as WasmLoader,\n} from './wasm-loader.js';\n\n// Re-export security modules (explicit exports to avoid conflicts)\nexport {\n // Error classes\n GasTownError,\n BeadsError,\n ValidationError,\n CLIExecutionError,\n FormulaError,\n ConvoyError,\n // Error codes (aliased to avoid conflict with types.ts)\n GasTownErrorCode as ErrorCodes,\n type GasTownErrorCodeType,\n type ValidationConstraint,\n // Error utilities\n isGasTownError,\n isValidationError,\n isCLIExecutionError,\n isBeadsError,\n wrapError,\n getErrorMessage,\n} from './errors.js';\n\nexport {\n // Validation functions\n validateBeadId,\n validateFormulaName,\n validateConvoyId,\n validateGtArgs,\n // Compound validators (aliased to avoid conflicts)\n validateCreateBeadOptions as validateBeadOptions,\n validateCreateConvoyOptions as validateConvoyOptions,\n validateSlingOptions as validateSling,\n // Validation schemas (aliased to avoid conflicts)\n BeadIdSchema as BeadIdValidationSchema,\n FormulaNameSchema,\n ConvoyIdSchema,\n GtArgsSchema,\n SafeStringSchema as ValidatorSafeStringSchema,\n RigNameSchema,\n PrioritySchema,\n LabelsSchema,\n // Security utilities\n containsShellMetacharacters,\n containsPathTraversal,\n isSafeArgument,\n isValidBeadId,\n isValidFormulaName,\n isValidConvoyId,\n // Constants\n MAX_LENGTHS,\n SHELL_METACHARACTERS,\n PATH_TRAVERSAL_PATTERNS,\n BEAD_ID_PATTERN,\n FORMULA_NAME_PATTERN,\n UUID_PATTERN,\n CONVOY_HASH_PATTERN,\n} from './validators.js';\n\nexport {\n // Sanitization functions\n sanitizeBeadOutput,\n sanitizeFormulaOutput,\n sanitizeConvoyOutput,\n sanitizeBeadsListOutput,\n // Constants\n MAX_OUTPUT_SIZE,\n SENSITIVE_FIELD_PATTERNS,\n REDACTED_FIELDS,\n // Internal helpers (for testing)\n redactSensitiveFields,\n sanitizeString,\n sanitizePath,\n parseDate,\n sanitizeMetadata,\n} from './sanitizers.js';\n\n// Re-export memory management module\nexport {\n // Object Pooling\n ObjectPool,\n type Poolable,\n type PoolStats,\n type PoolConfig,\n PooledBead,\n PooledStep,\n PooledFormula,\n PooledConvoy,\n PooledMolecule,\n beadPool,\n formulaPool,\n stepPool,\n convoyPool,\n moleculePool,\n type PoolType,\n getAllPoolStats,\n getTotalMemorySaved,\n clearAllPools,\n preWarmAllPools,\n getPoolEfficiencySummary,\n\n // Arena Allocator\n Arena,\n type ArenaStats,\n type ArenaConfig,\n type AllocatableType,\n type TypeMap,\n scopedArena,\n withArena,\n withArenaSync,\n ArenaManager,\n arenaManager,\n\n // Memory Monitoring\n MemoryMonitor,\n type MemoryStats,\n type MemoryPressureLevel,\n type MemoryPressureCallback,\n type MemoryMonitorConfig,\n type MemoryMonitorEvents,\n getMemoryUsage,\n setMemoryLimit,\n onMemoryPressure,\n getDefaultMonitor,\n disposeDefaultMonitor,\n MemoryBudgetManager,\n type MemoryBudget,\n memoryBudget,\n\n // Lazy Loading\n Lazy,\n type LazyState,\n type LazyOptions,\n type LazyStats,\n getLazySingleton,\n disposeLazySingleton,\n disposeAllLazySingletons,\n LazyModule,\n LazyBridge,\n LazyWasm,\n LazyObserver,\n createLazyProperty,\n\n // Integrated Memory System\n initializeMemorySystem,\n getSystemMemoryStats,\n getMemoryReport,\n triggerMemoryCleanup,\n shutdownMemorySystem,\n isMemorySystemInitialized,\n getMemoryMonitor,\n type MemorySystemConfig,\n type MemorySystemState,\n\n // Quick-access utilities\n acquireBead,\n releaseBead,\n acquireStep,\n releaseStep,\n acquireFormula,\n releaseFormula,\n acquireConvoy,\n releaseConvoy,\n acquireMolecule,\n releaseMolecule,\n} from './memory/index.js';\n\n// Default export\nexport default GasTownBridgePlugin;\n"]} |