@claude-flow/plugin-gastown-bridge 0.1.2 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bd-bridge-C9wTbkhi.d.cts +318 -0
- package/dist/bd-bridge-C9wTbkhi.d.ts +318 -0
- package/dist/bridges.cjs +1 -1
- package/dist/bridges.d.cts +5 -604
- package/dist/bridges.d.ts +5 -604
- package/dist/bridges.js +1 -1
- package/dist/chunk-2KNTWGUX.js +12 -0
- package/dist/chunk-2KNTWGUX.js.map +1 -0
- package/dist/chunk-46PJFOMY.cjs +11 -0
- package/dist/chunk-46PJFOMY.cjs.map +1 -0
- package/dist/chunk-7UPWLRZX.js +11 -0
- package/dist/chunk-7UPWLRZX.js.map +1 -0
- package/dist/chunk-7VD5N6NG.cjs +11 -0
- package/dist/chunk-7VD5N6NG.cjs.map +1 -0
- package/dist/chunk-EBOVUTYL.js +12 -0
- package/dist/chunk-EBOVUTYL.js.map +1 -0
- package/dist/chunk-I2TLUPMJ.cjs +12 -0
- package/dist/chunk-I2TLUPMJ.cjs.map +1 -0
- package/dist/chunk-Q7MLH722.cjs +11 -0
- package/dist/chunk-Q7MLH722.cjs.map +1 -0
- package/dist/chunk-QFMFM7NE.cjs +13 -0
- package/dist/chunk-QFMFM7NE.cjs.map +1 -0
- package/dist/chunk-SUKPSMVK.cjs +12 -0
- package/dist/chunk-SUKPSMVK.cjs.map +1 -0
- package/dist/chunk-TGFYZY3C.js +11 -0
- package/dist/chunk-TGFYZY3C.js.map +1 -0
- package/dist/chunk-U74VYTRV.js +11 -0
- package/dist/chunk-U74VYTRV.js.map +1 -0
- package/dist/chunk-UJ56JMNG.js +13 -0
- package/dist/chunk-UJ56JMNG.js.map +1 -0
- package/dist/convoy.cjs +2 -0
- package/dist/convoy.cjs.map +1 -0
- package/dist/convoy.d.cts +6 -0
- package/dist/convoy.d.ts +6 -0
- package/dist/convoy.js +2 -0
- package/dist/convoy.js.map +1 -0
- package/dist/formula.cjs +2 -0
- package/dist/formula.cjs.map +1 -0
- package/dist/formula.d.cts +317 -0
- package/dist/formula.d.ts +317 -0
- package/dist/formula.js +2 -0
- package/dist/formula.js.map +1 -0
- package/dist/gt-bridge-B7hZz5vC.d.cts +291 -0
- package/dist/gt-bridge-B7hZz5vC.d.ts +291 -0
- package/dist/index-BzkAx4ho.d.ts +785 -0
- package/dist/index-CGJs8eMa.d.cts +785 -0
- package/dist/index.cjs +8 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -2237
- package/dist/index.d.ts +13 -2237
- package/dist/index.js +8 -9
- package/dist/index.js.map +1 -1
- package/dist/types-CMoOZXrm.d.cts +1146 -0
- package/dist/types-CMoOZXrm.d.ts +1146 -0
- package/dist/wasm-loader.js +1 -1
- package/package.json +16 -20
- package/dist/chunk-2QQ3FUZF.cjs +0 -14
- package/dist/chunk-2QQ3FUZF.cjs.map +0 -1
- package/dist/chunk-GKNIKJVQ.js +0 -14
- package/dist/chunk-GKNIKJVQ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/convoy/tracker.ts","../src/convoy/observer.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","defaultLogger","msg","meta","ConvoyIdSchema","IssueIdsSchema","ConvoyTracker","EventEmitter","config","logger","name","issues","description","validatedOptions","verifiedIssues","ConvoyError","progress","convoyId","uuidv4","now","convoy","store","GasTownErrorCode","existingSet","newIssues","id","updatedIssues","updatedConvoy","removeSet","remainingIssues","removedIssues","previousProgress","previousStatus","completedConvoy","reason","cancelledConvoy","pausedConvoy","resumedConvoy","status","convoys","issueIds","beads","beadMap","b","closed","inProgress","blocked","issueId","bead","blockerId","blocker","error","verified","cliBead","type","timer","extra","event","createConvoyTracker","ConvoyObserver","LRUCache","BatchDeduplicator","callback","initialInterval","interval","DebouncedEmitter","callbacks","mergedCallback","allComplete","cb","openIssues","inProgressIssues","hasCycles","cycleIssues","readyIssues","blockedIssues","wasmResult","jsResult","wasmNodes","resultJson","result","GasTownError","watcher","emitter","module","currentState","stateChanged","batchKey","uncachedIds","cached","batchSize","i","fetchPromises","pooledBead","beadPool","results","beadsJson","cycleJson","readyJson","readyIds","levelsJson","levels","levelMap","levelStr","ids","level","closedSet","convoySet","blockers","internalBlockers","convoyIssues","index","visited","recStack","dfs","inDegree","changed","degree","current","queue","newDegree","createConvoyObserver","createLazyConvoyObserver","LazyObserver","observer","getLazyObserverStats","lazyObserver"],"mappings":"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","file":"chunk-7UPWLRZX.js","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 * 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"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';var events=require('events');/**
|
|
2
|
+
* @claude-flow/plugin-gastown-bridge v0.1.4
|
|
3
|
+
*
|
|
4
|
+
* WASM-accelerated Gas Town orchestration for Claude Flow V3
|
|
5
|
+
* Bundle optimized: <100KB gzipped total
|
|
6
|
+
*
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @copyright 2024 rUv
|
|
9
|
+
*/
|
|
10
|
+
var s={UNKNOWN:"GT_UNKNOWN",INITIALIZATION_FAILED:"GT_INITIALIZATION_FAILED",NOT_INITIALIZED:"GT_NOT_INITIALIZED",CONFIGURATION_ERROR:"GT_CONFIGURATION_ERROR",VALIDATION_FAILED:"GT_VALIDATION_FAILED",INVALID_INPUT:"GT_INVALID_INPUT",INVALID_BEAD_ID:"GT_INVALID_BEAD_ID",INVALID_FORMULA_NAME:"GT_INVALID_FORMULA_NAME",INVALID_CONVOY_ID:"GT_INVALID_CONVOY_ID",INVALID_ARGUMENTS:"GT_INVALID_ARGUMENTS",COMMAND_INJECTION_DETECTED:"GT_COMMAND_INJECTION_DETECTED",PATH_TRAVERSAL_DETECTED:"GT_PATH_TRAVERSAL_DETECTED",BEAD_NOT_FOUND:"GT_BEAD_NOT_FOUND",BEAD_CREATE_FAILED:"GT_BEAD_CREATE_FAILED",BEAD_UPDATE_FAILED:"GT_BEAD_UPDATE_FAILED",BEAD_DELETE_FAILED:"GT_BEAD_DELETE_FAILED",BEAD_PARSE_FAILED:"GT_BEAD_PARSE_FAILED",FORMULA_NOT_FOUND:"GT_FORMULA_NOT_FOUND",FORMULA_PARSE_FAILED:"GT_FORMULA_PARSE_FAILED",FORMULA_COOK_FAILED:"GT_FORMULA_COOK_FAILED",FORMULA_INVALID_TYPE:"GT_FORMULA_INVALID_TYPE",CONVOY_NOT_FOUND:"GT_CONVOY_NOT_FOUND",CONVOY_CREATE_FAILED:"GT_CONVOY_CREATE_FAILED",CLI_NOT_FOUND:"GT_CLI_NOT_FOUND",CLI_TIMEOUT:"GT_CLI_TIMEOUT",CLI_EXECUTION_FAILED:"GT_CLI_EXECUTION_FAILED",CLI_INVALID_OUTPUT:"GT_CLI_INVALID_OUTPUT",WASM_NOT_AVAILABLE:"GT_WASM_NOT_AVAILABLE",WASM_EXECUTION_FAILED:"GT_WASM_EXECUTION_FAILED",SYNC_FAILED:"GT_SYNC_FAILED",SYNC_CONFLICT:"GT_SYNC_CONFLICT",DEPENDENCY_CYCLE:"GT_DEPENDENCY_CYCLE",GRAPH_ERROR:"GT_GRAPH_ERROR"},c=class o extends Error{code;timestamp;context;cause;constructor(e,t=s.UNKNOWN,r,i){super(e),this.name="GasTownError",this.code=t,this.timestamp=new Date,this.context=r,this.cause=i,Error.captureStackTrace&&Error.captureStackTrace(this,o);}toJSON(){return {name:this.name,message:this.message,code:this.code,timestamp:this.timestamp.toISOString(),context:this.context,cause:this.cause?.message,stack:this.stack}}toString(){let e=`[${this.code}] ${this.message}`;return this.context&&(e+=` | Context: ${JSON.stringify(this.context)}`),this.cause&&(e+=` | Caused by: ${this.cause.message}`),e}},F=class o extends c{beadId;operation;constructor(e,t=s.BEAD_NOT_FOUND,r,i){super(e,t,r,i),this.name="BeadsError",r?.beadId&&typeof r.beadId=="string"&&(this.beadId=r.beadId),r?.operation&&typeof r.operation=="string"&&(this.operation=r.operation),Error.captureStackTrace&&Error.captureStackTrace(this,o);}static notFound(e){return new o(`Bead not found: ${e}`,s.BEAD_NOT_FOUND,{beadId:e,operation:"get"})}static createFailed(e,t){return new o(`Failed to create bead: ${e}`,s.BEAD_CREATE_FAILED,{operation:"create"},t)}static parseFailed(e,t){let r=e.length>200?e.slice(0,200)+"...":e;return new o("Failed to parse bead output",s.BEAD_PARSE_FAILED,{operation:"parse",outputLength:e.length,outputPreview:r},t)}},k=class o extends c{constraints;constructor(e,t=s.VALIDATION_FAILED,r=[],i){super(e,t,{constraints:r},i),this.name="ValidationError",this.constraints=r,Error.captureStackTrace&&Error.captureStackTrace(this,o);}static invalidBeadId(e){let t=e.replace(/[^\w\s-]/g,"?").slice(0,32);return new o("Invalid bead ID format",s.INVALID_BEAD_ID,[{field:"beadId",constraint:"alphanumeric with gt- prefix",actual:t,expected:"gt-{4-16 alphanumeric} or numeric"}])}static invalidFormulaName(e){let t=e.replace(/[^\w\s-]/g,"?").slice(0,32);return new o("Invalid formula name format",s.INVALID_FORMULA_NAME,[{field:"formulaName",constraint:"alphanumeric with dash/underscore, starting with letter",actual:t,expected:"[a-zA-Z][a-zA-Z0-9_-]{0,63}"}])}static invalidConvoyId(e){let t=e.replace(/[^\w\s-]/g,"?").slice(0,32);return new o("Invalid convoy ID format",s.INVALID_CONVOY_ID,[{field:"convoyId",constraint:"UUID format",actual:t,expected:"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}])}static commandInjection(e,t){return new o(`Command injection detected in ${e}`,s.COMMAND_INJECTION_DETECTED,[{field:e,constraint:"no shell metacharacters",actual:"[REDACTED]",expected:"safe characters only"}])}static pathTraversal(e){return new o(`Path traversal detected in ${e}`,s.PATH_TRAVERSAL_DETECTED,[{field:e,constraint:"no parent directory references",actual:"[REDACTED]",expected:"safe path characters only"}])}static combine(e){let t=e.flatMap(r=>r.constraints);return new o(`Multiple validation errors: ${e.map(r=>r.message).join("; ")}`,s.VALIDATION_FAILED,t)}},U=class o extends c{command;args;exitCode;stderr;durationMs;constructor(e,t=s.CLI_EXECUTION_FAILED,r,i){let y=(r.args??[]).map(l=>l.length>50?l.slice(0,50)+"...":l),z=r.stderr&&r.stderr.length>500?r.stderr.slice(0,500)+"...":r.stderr;super(e,t,{command:r.command,args:y,exitCode:r.exitCode,durationMs:r.durationMs},i),this.name="CLIExecutionError",this.command=r.command,this.args=y,this.exitCode=r.exitCode,this.stderr=z,this.durationMs=r.durationMs,Error.captureStackTrace&&Error.captureStackTrace(this,o);}static notFound(e){return new o(`CLI command not found: ${e}`,s.CLI_NOT_FOUND,{command:e})}static timeout(e,t,r){return new o(`CLI command timed out after ${r}ms`,s.CLI_TIMEOUT,{command:e,args:t,durationMs:r})}static failed(e,t,r,i,y){return new o(`CLI command failed with exit code ${r}`,s.CLI_EXECUTION_FAILED,{command:e,args:t,exitCode:r,stderr:i,durationMs:y})}static invalidOutput(e,t){return new o(`CLI command produced invalid output: ${t}`,s.CLI_INVALID_OUTPUT,{command:e})}},W=class o extends c{formulaName;formulaType;constructor(e,t=s.FORMULA_PARSE_FAILED,r,i){super(e,t,r,i),this.name="FormulaError",r?.formulaName&&typeof r.formulaName=="string"&&(this.formulaName=r.formulaName),r?.formulaType&&typeof r.formulaType=="string"&&(this.formulaType=r.formulaType),Error.captureStackTrace&&Error.captureStackTrace(this,o);}static notFound(e){return new o(`Formula not found: ${e}`,s.FORMULA_NOT_FOUND,{formulaName:e})}static parseFailed(e,t,r){return new o(`Failed to parse formula ${e}: ${t}`,s.FORMULA_PARSE_FAILED,{formulaName:e,parseError:t},r)}static cookFailed(e,t,r){return new o(`Failed to cook formula ${e}: ${t}`,s.FORMULA_COOK_FAILED,{formulaName:e,cookError:t},r)}},H=class o extends c{convoyId;constructor(e,t=s.CONVOY_NOT_FOUND,r,i){super(e,t,r,i),this.name="ConvoyError",r?.convoyId&&typeof r.convoyId=="string"&&(this.convoyId=r.convoyId),Error.captureStackTrace&&Error.captureStackTrace(this,o);}static notFound(e){return new o(`Convoy not found: ${e}`,s.CONVOY_NOT_FOUND,{convoyId:e})}static createFailed(e,t){return new o(`Failed to create convoy: ${e}`,s.CONVOY_CREATE_FAILED,{operation:"create"},t)}};function ne(o){return o instanceof c}function le(o){return o instanceof k}function ce(o){return o instanceof U}function de(o){return o instanceof F}function ue(o,e){return o instanceof c?o:o instanceof Error?new c(o.message,e??s.UNKNOWN,void 0,o):new c(String(o),e??s.UNKNOWN)}function me(o){return o instanceof Error?o.message:String(o)}var n=class{pool=[];factory;resetFn;config;stats={created:0,available:0,inUse:0,misses:0,hits:0,peakSize:0,memorySaved:0};constructor(e,t){this.factory=e,this.resetFn=t?.reset,this.config={initialSize:t?.initialSize??0,maxSize:t?.maxSize??0,objectSizeBytes:t?.objectSizeBytes??256,preWarm:t?.preWarm??false},this.config.preWarm&&this.config.initialSize>0&&this.preWarm(this.config.initialSize);}acquire(){let e;return this.pool.length>0?(e=this.pool.pop(),this.stats.hits++,this.stats.available--):(e=this.factory(),this.stats.created++,this.stats.misses++),this.stats.inUse++,this.stats.inUse>this.stats.peakSize&&(this.stats.peakSize=this.stats.inUse),e}release(e){if(this.resetFn?this.resetFn(e):"reset"in e&&typeof e.reset=="function"&&e.reset(),this.config.maxSize>0&&this.pool.length>=this.config.maxSize){this.stats.inUse--;return}this.pool.push(e),this.stats.available++,this.stats.inUse--,this.stats.memorySaved+=this.config.objectSizeBytes;}releaseAll(e){for(let t of e)this.release(t);}preWarm(e){let t=Math.min(e,this.config.maxSize>0?this.config.maxSize-this.pool.length:e);for(let r=0;r<t;r++){let i=this.factory();this.stats.created++,this.pool.push(i),this.stats.available++;}}clear(){this.pool.length=0,this.stats.available=0;}getStats(){return {...this.stats}}get size(){return this.pool.length}get hitRate(){let e=this.stats.hits+this.stats.misses;return e>0?this.stats.hits/e*100:0}},P=class{id="";title="";description="";status="open";priority=0;labels=[];createdAt=new Date;updatedAt=new Date;parentId;assignee;rig;blockedBy;blocks;reset(){this.id="",this.title="",this.description="",this.status="open",this.priority=0,this.labels.length=0,this.createdAt=new Date,this.updatedAt=new Date,this.parentId=void 0,this.assignee=void 0,this.rig=void 0,this.blockedBy=void 0,this.blocks=void 0;}initFrom(e){return this.id=e.id??"",this.title=e.title??"",this.description=e.description??"",this.status=e.status??"open",this.priority=e.priority??0,this.labels=e.labels?[...e.labels]:[],this.createdAt=e.createdAt??new Date,this.updatedAt=e.updatedAt??new Date,this.parentId=e.parentId,this.assignee=e.assignee,this.rig=e.rig,this.blockedBy=e.blockedBy?[...e.blockedBy]:void 0,this.blocks=e.blocks?[...e.blocks]:void 0,this}},E=class{id="";title="";description="";needs;duration;requires;metadata;reset(){this.id="",this.title="",this.description="",this.needs=void 0,this.duration=void 0,this.requires=void 0,this.metadata=void 0;}initFrom(e){return this.id=e.id??"",this.title=e.title??"",this.description=e.description??"",this.needs=e.needs?[...e.needs]:void 0,this.duration=e.duration,this.requires=e.requires?[...e.requires]:void 0,this.metadata=e.metadata?{...e.metadata}:void 0,this}},S=class{name="";description="";type="workflow";version=1;steps;legs;vars;metadata;reset(){this.name="",this.description="",this.type="workflow",this.version=1,this.steps=void 0,this.legs=void 0,this.vars=void 0,this.metadata=void 0;}initFrom(e){return this.name=e.name??"",this.description=e.description??"",this.type=e.type??"workflow",this.version=e.version??1,this.steps=e.steps?[...e.steps]:void 0,this.legs=e.legs?[...e.legs]:void 0,this.vars=e.vars?{...e.vars}:void 0,this.metadata=e.metadata?{...e.metadata}:void 0,this}},I=class{id="";name="";trackedIssues=[];status="active";startedAt=new Date;completedAt;progress={total:0,closed:0,inProgress:0,blocked:0};formula;description;reset(){this.id="",this.name="",this.trackedIssues.length=0,this.status="active",this.startedAt=new Date,this.completedAt=void 0,this.progress={total:0,closed:0,inProgress:0,blocked:0},this.formula=void 0,this.description=void 0;}initFrom(e){return this.id=e.id??"",this.name=e.name??"",this.trackedIssues=e.trackedIssues?[...e.trackedIssues]:[],this.status=e.status??"active",this.startedAt=e.startedAt??new Date,this.completedAt=e.completedAt,this.progress=e.progress?{...e.progress}:{total:0,closed:0,inProgress:0,blocked:0},this.formula=e.formula,this.description=e.description,this}},M=class{id="";formulaName="";title="";description="";type="workflow";sourceId="";agent;dependencies=[];order=0;metadata={};createdAt=new Date;reset(){this.id="",this.formulaName="",this.title="",this.description="",this.type="workflow",this.sourceId="",this.agent=void 0,this.dependencies.length=0,this.order=0;for(let e of Object.keys(this.metadata))delete this.metadata[e];this.createdAt=new Date;}initFrom(e){return this.id=e.id??"",this.formulaName=e.formulaName??"",this.title=e.title??"",this.description=e.description??"",this.type=e.type??"workflow",this.sourceId=e.sourceId??"",this.agent=e.agent,this.dependencies=e.dependencies?[...e.dependencies]:[],this.order=e.order??0,this.metadata=e.metadata?{...e.metadata}:{},this.createdAt=e.createdAt??new Date,this}},f=new n(()=>new P,{initialSize:100,maxSize:1e4,objectSizeBytes:512,preWarm:false}),g=new n(()=>new S,{initialSize:10,maxSize:500,objectSizeBytes:1024,preWarm:false}),T=new n(()=>new E,{initialSize:50,maxSize:5e3,objectSizeBytes:256,preWarm:false}),A=new n(()=>new I,{initialSize:10,maxSize:200,objectSizeBytes:768,preWarm:false}),v=new n(()=>new M,{initialSize:50,maxSize:5e3,objectSizeBytes:384,preWarm:false}),q={bead:f,formula:g,step:T,convoy:A,molecule:v};function C(){return {bead:f.getStats(),formula:g.getStats(),step:T.getStats(),convoy:A.getStats(),molecule:v.getStats()}}function $(){return Object.values(q).reduce((o,e)=>o+e.getStats().memorySaved,0)}function L(){for(let o of Object.values(q))o.clear();}function R(){f.preWarm(100),g.preWarm(10),T.preWarm(50),A.preWarm(10),v.preWarm(50);}function D(){let o=C(),e=Object.values(o),t=e.reduce((l,d)=>l+d.hits,0),r=e.reduce((l,d)=>l+d.misses,0),i=e.reduce((l,d)=>l+d.memorySaved,0),y=e.reduce((l,d)=>l+d.inUse,0),z=e.reduce((l,d)=>l+d.available,0);return {totalHitRate:t+r>0?t/(t+r)*100:0,totalMemorySavedKB:i/1024,totalObjectsInUse:y,totalObjectsAvailable:z}}var b=class{name;config;allocations=[];stats={totalAllocations:0,currentAllocations:0,resetCount:0,peakAllocations:0,memoryUsed:0,memorySaved:0};beadPool;stepPool;formulaPool;convoyPool;moleculePool;constructor(e,t){this.name=e??t?.name??"arena",this.config={name:this.name,initialCapacity:t?.initialCapacity??100,maxAllocations:t?.maxAllocations??0,returnToPool:t?.returnToPool??true},this.beadPool=new n(()=>new P,{initialSize:0,maxSize:1e4,objectSizeBytes:512}),this.stepPool=new n(()=>new E,{initialSize:0,maxSize:5e3,objectSizeBytes:256}),this.formulaPool=new n(()=>new S,{initialSize:0,maxSize:500,objectSizeBytes:1024}),this.convoyPool=new n(()=>new I,{initialSize:0,maxSize:200,objectSizeBytes:768}),this.moleculePool=new n(()=>new M,{initialSize:0,maxSize:5e3,objectSizeBytes:384}),this.config.initialCapacity>0&&(this.allocations=new Array(this.config.initialCapacity),this.allocations.length=0);}allocate(e,t=256){this.checkMaxAllocations();let r=e();return this.trackAllocation(r,"generic",t),r}allocateTyped(e){this.checkMaxAllocations();let t,r;switch(e){case "bead":t=this.beadPool.acquire(),r=512;break;case "step":t=this.stepPool.acquire(),r=256;break;case "formula":t=this.formulaPool.acquire(),r=1024;break;case "convoy":t=this.convoyPool.acquire(),r=768;break;case "molecule":t=this.moleculePool.acquire(),r=384;break;default:throw new Error(`Unknown allocatable type: ${e}`)}return this.trackAllocation(t,e,r),t}allocateMany(e,t){let r=new Array(t);for(let i=0;i<t;i++)r[i]=this.allocateTyped(e);return r}reset(){if(this.config.returnToPool)for(let t of this.allocations)this.returnToPool(t);let e=this.stats.memoryUsed;this.stats.memorySaved+=e,this.stats.resetCount++,this.stats.currentAllocations>this.stats.peakAllocations&&(this.stats.peakAllocations=this.stats.currentAllocations),this.allocations.length=0,this.stats.currentAllocations=0,this.stats.memoryUsed=0;}getStats(){return {...this.stats}}get allocationCount(){return this.stats.currentAllocations}get arenaName(){return this.name}dispose(){this.reset(),this.beadPool.clear(),this.stepPool.clear(),this.formulaPool.clear(),this.convoyPool.clear(),this.moleculePool.clear();}trackAllocation(e,t,r){this.allocations.push({object:e,type:t,sizeBytes:r}),this.stats.totalAllocations++,this.stats.currentAllocations++,this.stats.memoryUsed+=r;}checkMaxAllocations(){this.config.maxAllocations>0&&this.stats.currentAllocations>=this.config.maxAllocations&&(console.warn(`[${this.name}] Max allocations reached, auto-resetting`),this.reset());}returnToPool(e){switch(e.type){case "bead":this.beadPool.release(e.object);break;case "step":this.stepPool.release(e.object);break;case "formula":this.formulaPool.release(e.object);break;case "convoy":this.convoyPool.release(e.object);break;case "molecule":this.moleculePool.release(e.object);break}}};function K(o,e){let t=new b(o,e);return Object.assign(t,{[Symbol.dispose](){t.reset();}})}async function Y(o,e,t){let r=new b(o,t);try{return await e(r)}finally{r.reset();}}function X(o,e,t){let r=new b(o,t);try{return e(r)}finally{r.reset();}}var _=class{arenas=new Map;stats={totalArenas:0,activeArenas:0,totalMemorySaved:0};getArena(e,t){let r=this.arenas.get(e);return r||(r=new b(e,t),this.arenas.set(e,r),this.stats.totalArenas++,this.stats.activeArenas++),r}resetArena(e){let t=this.arenas.get(e);if(t){let r=t.getStats().memoryUsed;t.reset(),this.stats.totalMemorySaved+=r;}}resetAll(){for(let e of this.arenas.values()){let t=e.getStats().memoryUsed;e.reset(),this.stats.totalMemorySaved+=t;}}disposeArena(e){let t=this.arenas.get(e);t&&(t.dispose(),this.arenas.delete(e),this.stats.activeArenas--);}disposeAll(){for(let e of this.arenas.values())e.dispose();this.arenas.clear(),this.stats.activeArenas=0;}getStats(){let e={};for(let[t,r]of this.arenas)e[t]=r.getStats();return {...this.stats,arenaStats:e}}},m=new _;var h=class extends events.EventEmitter{config;pollTimer;pressureCallbacks=[];lastPressureLevel="none";running=false;statsHistory=[];maxHistorySize=60;constructor(e){super(),this.config={memoryLimit:e?.memoryLimit??0,lowPressureThreshold:e?.lowPressureThreshold??.5,mediumPressureThreshold:e?.mediumPressureThreshold??.7,highPressureThreshold:e?.highPressureThreshold??.85,criticalPressureThreshold:e?.criticalPressureThreshold??.95,pollInterval:e?.pollInterval??0,autoCleanup:e?.autoCleanup??false,gcHints:e?.gcHints??true};}getMemoryUsage(){let e=process.memoryUsage(),t=D(),r=m.getStats(),i=0;for(let z of Object.values(r.arenaStats))i+=z.memoryUsed;return {heapUsed:e.heapUsed,heapTotal:e.heapTotal,external:e.external,arrayBuffers:e.arrayBuffers,rss:e.rss,pools:{totalMemorySaved:t.totalMemorySavedKB*1024,hitRate:t.totalHitRate,objectsInUse:t.totalObjectsInUse,objectsAvailable:t.totalObjectsAvailable},arenas:{activeArenas:r.activeArenas,totalMemoryUsed:i,totalMemorySaved:r.totalMemorySaved},timestamp:new Date,underPressure:this.lastPressureLevel!=="none"}}setMemoryLimit(e){this.config.memoryLimit=e;}getMemoryLimit(){return this.config.memoryLimit}onMemoryPressure(e){return this.pressureCallbacks.push(e),()=>{let t=this.pressureCallbacks.indexOf(e);t!==-1&&this.pressureCallbacks.splice(t,1);}}checkPressure(){if(this.config.memoryLimit===0)return "none";let t=this.getMemoryUsage().heapUsed/this.config.memoryLimit;return t>=this.config.criticalPressureThreshold?"critical":t>=this.config.highPressureThreshold?"high":t>=this.config.mediumPressureThreshold?"medium":t>=this.config.lowPressureThreshold?"low":"none"}start(){this.running||(this.running=true,this.config.pollInterval>0&&(this.pollTimer=setInterval(()=>{this.poll();},this.config.pollInterval)));}stop(){this.running=false,this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=void 0);}poll(){let e=this.getMemoryUsage(),t=this.checkPressure();if(this.statsHistory.push(e),this.statsHistory.length>this.maxHistorySize&&this.statsHistory.shift(),this.emit("snapshot",e),t!==this.lastPressureLevel){this.lastPressureLevel=t,e.underPressure=t!=="none",this.emit(`pressure:${t}`,e);for(let r of this.pressureCallbacks)try{r(t,e);}catch(i){console.error("[MemoryMonitor] Pressure callback error:",i);}this.config.autoCleanup&&(t==="high"||t==="critical")&&this.triggerCleanup();}this.config.memoryLimit>0&&e.heapUsed>this.config.memoryLimit&&this.emit("limit:exceeded",e);}triggerCleanup(){let e=this.getMemoryUsage();L(),m.resetAll(),this.config.gcHints&&typeof global.gc=="function"&&global.gc();let t=this.getMemoryUsage();this.emit("cleanup:triggered",e,t);}getMemoryTrend(){if(this.statsHistory.length<2)return 0;let e=this.statsHistory[0],t=this.statsHistory[this.statsHistory.length-1],r=t.timestamp.getTime()-e.timestamp.getTime();return r===0?0:(t.heapUsed-e.heapUsed)/r*1e3}estimateTimeToLimit(){if(this.config.memoryLimit===0)return null;let e=this.getMemoryTrend();if(e<=0)return null;let t=this.getMemoryUsage();return (this.config.memoryLimit-t.heapUsed)/e*1e3}getPoolStats(){return C()}getHistory(){return [...this.statsHistory]}clearHistory(){this.statsHistory.length=0;}isRunning(){return this.running}getConfig(){return {...this.config}}updateConfig(e){Object.assign(this.config,e),e.pollInterval!==void 0&&this.running&&(this.stop(),this.start());}};function J(){return new h().getMemoryUsage()}function Q(o,e){let t=new h({memoryLimit:o,pollInterval:1e3,autoCleanup:true});return e&&t.onMemoryPressure(e),t.start(),t}var p=null;function ee(o){return p||(p=new h({memoryLimit:10*1024*1024,pollInterval:1e3,autoCleanup:true}),p.start()),p.onMemoryPressure(o)}function te(){return p}function re(){p&&(p.stop(),p=null);}var O=class{budgets=new Map;totalLimit;constructor(e=10*1024*1024){this.totalLimit=e;}allocateBudget(e,t){return this.getTotalAllocated()+t>this.totalLimit?false:(this.budgets.set(e,{name:e,allocated:t,used:0,limit:t}),true)}updateUsage(e,t){let r=this.budgets.get(e);r&&(r.used=t);}isExceeded(e){let t=this.budgets.get(e);return t?t.used>t.limit:false}getBudget(e){return this.budgets.get(e)}getAllBudgets(){return Array.from(this.budgets.values())}getTotalAllocated(){return Array.from(this.budgets.values()).reduce((e,t)=>e+t.allocated,0)}getTotalUsed(){return Array.from(this.budgets.values()).reduce((e,t)=>e+t.used,0)}freeBudget(e){this.budgets.delete(e);}getTotalLimit(){return this.totalLimit}setTotalLimit(e){this.totalLimit=e;}},x=new O(10*1024*1024);x.allocateBudget("beads",5*1024*1024);x.allocateBudget("formulas",1*1024*1024);x.allocateBudget("convoys",1*1024*1024);x.allocateBudget("wasm",2*1024*1024);x.allocateBudget("misc",1*1024*1024);var u=class{value;state="uninitialized";initPromise;idleTimer;options;stats;constructor(e){this.options={factory:e.factory,cleanup:e.cleanup??(()=>{}),idleTimeout:e.idleTimeout??0,onError:e.onError??console.error,name:e.name??"lazy-value"},this.stats={name:this.options.name,state:"uninitialized",initCount:0,disposeCount:0,errorCount:0};}async get(){return this.resetIdleTimer(),this.state==="initialized"&&this.value!==void 0?(this.stats.lastAccessTime=new Date,this.value):this.state==="initializing"&&this.initPromise?this.initPromise:(this.state==="error"&&(this.state="uninitialized"),this.state==="disposed"&&(this.state="uninitialized"),this.initialize())}getSync(){if(this.state!=="initialized"||this.value===void 0)throw new Error(`Lazy value '${this.options.name}' not initialized`);return this.resetIdleTimer(),this.stats.lastAccessTime=new Date,this.value}isInitialized(){return this.state==="initialized"&&this.value!==void 0}getState(){return this.state}async initialize(){if(this.state==="initialized"&&this.value!==void 0)return this.value;this.state="initializing",this.stats.state="initializing";let e=Date.now();return this.initPromise=(async()=>{try{let t=await this.options.factory();return this.value=t,this.state="initialized",this.stats.state="initialized",this.stats.initCount++,this.stats.lastInitTime=new Date,this.stats.lastAccessTime=new Date,this.stats.initDurationMs=Date.now()-e,t}catch(t){throw this.state="error",this.stats.state="error",this.stats.errorCount++,this.options.onError(t),t}finally{this.initPromise=void 0;}})(),this.initPromise}async dispose(){if(this.clearIdleTimer(),this.value!==void 0)try{await this.options.cleanup(this.value);}catch(e){this.options.onError(e);}this.value=void 0,this.state="disposed",this.stats.state="disposed",this.stats.disposeCount++;}getStats(){return {...this.stats}}resetIdleTimer(){this.clearIdleTimer(),this.options.idleTimeout>0&&(this.idleTimer=setTimeout(()=>{this.dispose().catch(this.options.onError);},this.options.idleTimeout));}clearIdleTimer(){this.idleTimer&&(clearTimeout(this.idleTimer),this.idleTimer=void 0);}},w=new Map;function oe(o,e){let t=w.get(o);return t||(t=new u({...e,name:e.name??o}),w.set(o,t)),t}async function ie(o){let e=w.get(o);e&&(await e.dispose(),w.delete(o));}async function N(){let o=[];for(let e of w.values())o.push(e.dispose());await Promise.all(o),w.clear();}var B=class{lazy;constructor(e,t){this.lazy=new u({...t,factory:e});}async get(){return this.lazy.get()}isLoaded(){return this.lazy.isInitialized()}async dispose(){return this.lazy.dispose()}},j=class{lazy;constructor(e,t){this.lazy=new u({...t,factory:async()=>{let r=await e();return r.initialize&&await r.initialize(),r}});}async get(){return this.lazy.get()}isInitialized(){return this.lazy.isInitialized()}async dispose(){return this.lazy.dispose()}getStats(){return this.lazy.getStats()}},G=class{lazy;cached=null;constructor(e,t){this.lazy=new u({factory:async()=>{if(this.cached)return this.cached;let r=await e();return this.cached=r,r},cleanup:()=>{this.cached=null;},name:t?.name??"lazy-wasm",idleTimeout:t?.idleTimeout??0,onError:t?.onError??console.error});}async get(){return this.lazy.get()}isLoaded(){return this.lazy.isInitialized()}clearCache(){this.cached=null;}getStats(){return this.lazy.getStats()}},V=class{lazy;watchCount=0;constructor(e,t){this.lazy=new u({...t,factory:e});}async watch(){return this.watchCount++,this.lazy.get()}async unwatch(){this.watchCount--,this.watchCount<=0&&(this.watchCount=0,await this.lazy.dispose());}getWatchCount(){return this.watchCount}isActive(){return this.lazy.isInitialized()&&this.watchCount>0}async dispose(){return this.watchCount=0,this.lazy.dispose()}};function se(o,e){let t=new u({...e,factory:o});return {get:()=>t.get(),isInitialized:()=>t.isInitialized()}}var a={initialized:false,monitor:null,config:{}};function Me(o){if(a.initialized){console.warn("[memory] Memory system already initialized");return}a.config={memoryLimit:o?.memoryLimit??10*1024*1024,autoCleanup:o?.autoCleanup??true,preWarmPools:o?.preWarmPools??false,pollInterval:o?.pollInterval??5e3},a.monitor=new h({memoryLimit:a.config.memoryLimit,autoCleanup:a.config.autoCleanup,pollInterval:a.config.pollInterval}),a.monitor.start(),a.config.preWarmPools&&R(),a.initialized=true,`${(a.config.memoryLimit/(1024*1024)).toFixed(2)}`,a.config.autoCleanup,a.config.preWarmPools;}function ae(){return a.monitor?.getMemoryUsage()??null}function Ce(){return {system:ae(),pools:C(),poolEfficiency:D(),arenas:m.getStats(),config:a.config}}function Le(){L(),m.resetAll(),N().catch(console.error),a.monitor?.triggerCleanup();}async function xe(){a.initialized&&(a.monitor?.stop(),a.monitor=null,L(),m.disposeAll(),await N(),a.initialized=false);}function we(){return a.initialized}function ze(){return a.monitor}function Ue(){return f.acquire()}function Re(o){f.release(o);}function Be(){return T.acquire()}function je(o){T.release(o);}function Ge(){return g.acquire()}function Ve(o){g.release(o);}function We(){return A.acquire()}function He(o){A.release(o);}function qe(){return v.acquire()}function $e(o){v.release(o);}exports.$=ae;exports.A=L;exports.B=R;exports.C=D;exports.D=b;exports.E=K;exports.F=Y;exports.G=X;exports.H=_;exports.I=m;exports.J=h;exports.K=J;exports.L=Q;exports.M=ee;exports.N=te;exports.O=re;exports.P=O;exports.Q=x;exports.R=u;exports.S=oe;exports.T=ie;exports.U=N;exports.V=B;exports.W=j;exports.X=G;exports.Y=V;exports.Z=se;exports._=Me;exports.a=s;exports.aa=Ce;exports.b=c;exports.ba=Le;exports.c=F;exports.ca=xe;exports.d=k;exports.da=we;exports.e=U;exports.ea=ze;exports.f=W;exports.fa=Ue;exports.g=H;exports.ga=Re;exports.h=ne;exports.ha=Be;exports.i=le;exports.ia=je;exports.j=ce;exports.ja=Ge;exports.k=de;exports.ka=Ve;exports.l=ue;exports.la=We;exports.m=me;exports.ma=He;exports.n=n;exports.na=qe;exports.o=P;exports.oa=$e;exports.p=E;exports.q=S;exports.r=I;exports.s=M;exports.t=f;exports.u=g;exports.v=T;exports.w=A;exports.x=v;exports.y=C;exports.z=$;//# sourceMappingURL=chunk-7VD5N6NG.cjs.map
|
|
11
|
+
//# sourceMappingURL=chunk-7VD5N6NG.cjs.map
|