@claude-flow/plugin-gastown-bridge 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +646 -0
- package/dist/bridges.cjs +2 -0
- package/dist/bridges.cjs.map +1 -0
- package/dist/bridges.d.cts +924 -0
- package/dist/bridges.d.ts +924 -0
- package/dist/bridges.js +2 -0
- package/dist/bridges.js.map +1 -0
- package/dist/chunk-HACN5YC7.js +14 -0
- package/dist/chunk-HACN5YC7.js.map +1 -0
- package/dist/chunk-JU7XR5TR.cjs +14 -0
- package/dist/chunk-JU7XR5TR.cjs.map +1 -0
- package/dist/index.cjs +17 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +4688 -0
- package/dist/index.d.ts +4688 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/wasm-loader.js +11 -0
- package/dist/wasm-loader.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"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"]}
|