{"version":3,"sources":["../.claude/lib/context-manager.ts"],"sourcesContent":["/**\n * Agent Context Management System (Layer 2)\n *\n * This system maintains state across all agents without mixing implementation details.\n * It provides:\n * - Task registration and tracking\n * - Inter-agent dependency management\n * - Structured handoff protocols\n * - Context window allocation\n * - Conflict detection\n */\n\nimport { readFileSync, writeFileSync, existsSync, mkdirSync, readdirSync } from 'fs';\nimport { join } from 'path';\nimport { glob } from 'glob';\nimport { parse as parseToml } from 'smol-toml';\n\n// ===========================\n// Type Definitions\n// ===========================\n\nexport interface TechnologyStack {\n  language: 'python' | 'nodejs' | 'go' | 'rust' | 'java' | 'unknown';\n  packageManager: string;\n  framework?: string;\n  projectFiles: string[];\n  suggestedAgents: string[];\n}\n\nexport interface AgentRegistry {\n  language: string;\n  packageFiles: string[];\n  packageManager: string;\n  agents: string[];\n  frameworkDetection?: (dependencies: string[]) => string | undefined;\n}\n\nexport interface Task {\n  taskId: string;\n  description: string;\n  assignedTo: string;\n  status: 'pending' | 'in_progress' | 'completed' | 'blocked';\n  dependencies: string[];\n  interfaces: Record<string, string>;\n  constraints: string[];\n  estimatedContextTokens: number;\n  createdAt: Date;\n  completedAt?: Date;\n  artifacts?: AgentArtifact;\n}\n\nexport type InterfaceDefinition = any;\nexport type CompletionHandoff = AgentArtifact;\n\nexport interface AgentArtifact {\n  agentId: string;\n  taskId: string;\n  files: string[];\n  interfaces: Array<{ name: string; file: string }>;\n  completedAt: Date;\n  metadata: Record<string, any>;\n}\n\nexport interface HandoffProtocol {\n  fromAgent: string;\n  toAgent: string;\n  taskId: string;\n  artifacts: {\n    interfaces: Record<string, string>;\n    implementationNotes: Record<string, string>;\n    dependencies: string[];\n    testRequirements: string[];\n  };\n  contextBudget: number;\n}\n\nexport interface ConflictIssue {\n  id: string;\n  severity: 'HIGH' | 'MEDIUM' | 'LOW';\n  category: string;\n  description: string;\n  affectedTasks: string[];\n  suggestedFix?: string;\n  detectedAt: Date;\n}\n\n// ===========================\n// Technology Detection Registry\n// ===========================\n\nconst TECHNOLOGY_REGISTRY: Record<string, AgentRegistry> = {\n  python: {\n    language: 'python',\n    packageFiles: ['pyproject.toml', 'requirements.txt', 'setup.py'],\n    packageManager: 'uv', // Modern default\n    agents: ['backend-python-specialist', 'ml-specialist'],\n    frameworkDetection: (dependencies: string[]) => {\n      if (dependencies.some((d) => d.includes('fastapi'))) return 'fastapi';\n      if (dependencies.some((d) => d.includes('django'))) return 'django';\n      if (dependencies.some((d) => d.includes('flask'))) return 'flask';\n      if (\n        dependencies.some(\n          (d) => d.includes('torch') || d.includes('tensorflow') || d.includes('sklearn')\n        )\n      ) {\n        return 'ml';\n      }\n      return undefined;\n    },\n  },\n  nodejs: {\n    language: 'nodejs',\n    packageFiles: ['package.json', 'package-lock.json', 'pnpm-lock.yaml', 'yarn.lock'],\n    packageManager: 'npm', // Or pnpm/yarn based on lock file\n    agents: ['backend-nodejs-specialist', 'frontend-specialist'],\n    frameworkDetection: (dependencies: string[]) => {\n      if (dependencies.some((d) => d.includes('express'))) return 'express';\n      if (dependencies.some((d) => d.includes('fastify'))) return 'fastify';\n      if (dependencies.some((d) => d.includes('nestjs'))) return 'nestjs';\n      if (dependencies.some((d) => d.includes('react'))) return 'react';\n      if (dependencies.some((d) => d.includes('vue'))) return 'vue';\n      if (dependencies.some((d) => d.includes('next'))) return 'nextjs';\n      return undefined;\n    },\n  },\n  go: {\n    language: 'go',\n    packageFiles: ['go.mod', 'go.sum'],\n    packageManager: 'go modules',\n    agents: ['backend-go-specialist'],\n    frameworkDetection: (dependencies: string[]) => {\n      if (dependencies.some((d) => d.includes('gin-gonic/gin'))) return 'gin';\n      if (dependencies.some((d) => d.includes('labstack/echo'))) return 'echo';\n      if (dependencies.some((d) => d.includes('gorilla/mux'))) return 'gorilla';\n      return undefined;\n    },\n  },\n  rust: {\n    language: 'rust',\n    packageFiles: ['Cargo.toml', 'Cargo.lock'],\n    packageManager: 'cargo',\n    agents: ['backend-rust-specialist'],\n    frameworkDetection: (dependencies: string[]) => {\n      if (dependencies.some((d) => d.includes('axum'))) return 'axum';\n      if (dependencies.some((d) => d.includes('actix-web'))) return 'actix-web';\n      if (dependencies.some((d) => d.includes('rocket'))) return 'rocket';\n      return undefined;\n    },\n  },\n  java: {\n    language: 'java',\n    packageFiles: ['pom.xml', 'build.gradle', 'build.gradle.kts'],\n    packageManager: 'maven/gradle',\n    agents: ['backend-java-specialist'],\n    frameworkDetection: (dependencies: string[]) => {\n      if (dependencies.some((d) => d.includes('spring-boot'))) return 'spring-boot';\n      if (dependencies.some((d) => d.includes('quarkus'))) return 'quarkus';\n      if (dependencies.some((d) => d.includes('micronaut'))) return 'micronaut';\n      return undefined;\n    },\n  },\n};\n\n// ===========================\n// Technology Detection Functions\n// ===========================\n\nexport class TechnologyDetector {\n  private projectRoot: string;\n\n  constructor(projectRoot: string = '.') {\n    this.projectRoot = projectRoot;\n  }\n\n  /**\n   * Detect the technology stack of the project\n   */\n  async detectStack(): Promise<TechnologyStack> {\n    // Check for each known stack\n    for (const [key, registry] of Object.entries(TECHNOLOGY_REGISTRY)) {\n      const detectedFiles = this.findProjectFiles(registry.packageFiles);\n\n      if (detectedFiles.length > 0) {\n        const dependencies = await this.extractDependencies(detectedFiles[0], key);\n        const framework = registry.frameworkDetection?.(dependencies);\n\n        // Determine which agents to use based on framework\n        let suggestedAgents = [...registry.agents];\n\n        // Special handling for Python: choose between backend and ML\n        if (key === 'python' && framework) {\n          if (framework === 'ml') {\n            suggestedAgents = ['ml-specialist'];\n          } else if (['fastapi', 'django', 'flask'].includes(framework)) {\n            suggestedAgents = ['backend-python-specialist'];\n          }\n        }\n\n        // Special handling for Node.js: choose between backend and frontend\n        if (key === 'nodejs' && framework) {\n          if (['express', 'fastify', 'nestjs'].includes(framework)) {\n            suggestedAgents = ['backend-nodejs-specialist'];\n          } else if (['react', 'vue', 'nextjs'].includes(framework)) {\n            suggestedAgents = ['frontend-specialist'];\n          }\n        }\n\n        return {\n          language: key as any,\n          packageManager: registry.packageManager,\n          framework,\n          projectFiles: detectedFiles,\n          suggestedAgents,\n        };\n      }\n    }\n\n    return {\n      language: 'unknown',\n      packageManager: 'unknown',\n      projectFiles: [],\n      suggestedAgents: [],\n    };\n  }\n\n  /**\n   * Find project files that match the given patterns\n   */\n  private findProjectFiles(patterns: string[]): string[] {\n    const found: string[] = [];\n\n    for (const pattern of patterns) {\n      const filePath = join(this.projectRoot, pattern);\n      if (existsSync(filePath)) {\n        found.push(filePath);\n      }\n    }\n\n    return found;\n  }\n\n  /**\n   * Extract dependencies from project files using proper parsers\n   */\n  private async extractDependencies(filePath: string, language: string): Promise<string[]> {\n    try {\n      const content = readFileSync(filePath, 'utf-8');\n\n      if (language === 'python') {\n        if (filePath.endsWith('pyproject.toml')) {\n          // Use proper TOML parser\n          const parsed = parseToml(content) as any;\n          const deps: string[] = [];\n\n          // Standard dependencies\n          if (parsed.project?.dependencies && Array.isArray(parsed.project.dependencies)) {\n            deps.push(\n              ...parsed.project.dependencies.map((d: string) => d.split(/[<>=!]/)[0].trim())\n            );\n          }\n\n          // Optional dependencies\n          if (parsed.project?.['optional-dependencies']) {\n            for (const group of Object.values(parsed.project['optional-dependencies'])) {\n              if (Array.isArray(group)) {\n                deps.push(...group.map((d: string) => d.split(/[<>=!]/)[0].trim()));\n              }\n            }\n          }\n\n          return [...new Set(deps)]; // Deduplicate\n        } else if (filePath.endsWith('requirements.txt')) {\n          return content\n            .split('\\n')\n            .map((line) => line.trim())\n            .filter((line) => line && !line.startsWith('#'))\n            .map((line) => line.split(/[<>=!]/)[0].trim());\n        }\n      } else if (language === 'nodejs') {\n        const packageJson = JSON.parse(content);\n        return [\n          ...Object.keys(packageJson.dependencies || {}),\n          ...Object.keys(packageJson.devDependencies || {}),\n        ];\n      } else if (language === 'go') {\n        // Parse go.mod - extract module paths from require blocks\n        const lines = content.split('\\n');\n        const deps: string[] = [];\n        let inRequire = false;\n\n        for (const line of lines) {\n          const trimmed = line.trim();\n          if (trimmed.startsWith('require (')) {\n            inRequire = true;\n            continue;\n          }\n          if (inRequire && trimmed === ')') {\n            inRequire = false;\n            continue;\n          }\n          if (inRequire || trimmed.startsWith('require ')) {\n            const match = trimmed.match(/^(?:require\\s+)?([^\\s]+)/);\n            if (match && match[1] && !match[1].startsWith('//')) {\n              deps.push(match[1]);\n            }\n          }\n        }\n        return deps;\n      } else if (language === 'rust') {\n        // Use proper TOML parser for Cargo.toml\n        const parsed = parseToml(content);\n        const deps: string[] = [];\n\n        if (parsed.dependencies) {\n          deps.push(...Object.keys(parsed.dependencies));\n        }\n        if (parsed['dev-dependencies']) {\n          deps.push(...Object.keys(parsed['dev-dependencies']));\n        }\n        if (parsed['build-dependencies']) {\n          deps.push(...Object.keys(parsed['build-dependencies']));\n        }\n\n        return deps;\n      } else if (language === 'java') {\n        // XML (Maven pom.xml) or Gradle dependency extraction\n        const depMatches =\n          content.match(/<artifactId>(.*?)<\\/artifactId>/g) ||\n          content.match(/implementation\\s+[\"'](.+?)[\"']/g) ||\n          [];\n        return depMatches.map((m) =>\n          m\n            .replace(/<\\/?artifactId>/g, '')\n            .replace(/implementation\\s+[\"']/g, '')\n            .replace(/[\"']/g, '')\n        );\n      }\n\n      return [];\n    } catch (error) {\n      console.error(`Error extracting dependencies from ${filePath}:`, error);\n      return [];\n    }\n  }\n\n  /**\n   * Get agent recommendations based on detected stack and task description\n   */\n  getAgentRecommendations(stack: TechnologyStack, taskDescription: string): string[] {\n    const recommendations = [...stack.suggestedAgents];\n\n    // Add additional agents based on task description\n    const lowerTask = taskDescription.toLowerCase();\n\n    if (lowerTask.includes('test') || lowerTask.includes('testing')) {\n      recommendations.push('test-specialist');\n    }\n\n    if (\n      lowerTask.includes('database') ||\n      lowerTask.includes('schema') ||\n      lowerTask.includes('migration')\n    ) {\n      recommendations.push('database-specialist');\n    }\n\n    if (lowerTask.includes('validate') || lowerTask.includes('integration')) {\n      recommendations.push('integration-validator');\n    }\n\n    return [...new Set(recommendations)]; // Remove duplicates\n  }\n}\n\n// ===========================\n// Context Hub\n// ===========================\n\nexport class AgentContextHub {\n  private statePath: string;\n  private projectState: {\n    architecture: Record<string, any>;\n    tasks: Map<string, Task>;\n    dependencies: Map<string, string[]>;\n    completions: Map<string, AgentArtifact>;\n    interfaces: Map<string, any>;\n    conflicts: ConflictIssue[];\n    contextAllocations: Map<string, number>;\n  };\n\n  constructor(statePath: string = './.claude/state') {\n    this.statePath = statePath;\n\n    // Ensure state directory exists\n    if (!existsSync(statePath)) {\n      mkdirSync(statePath, { recursive: true });\n    }\n\n    // Load or initialize state\n    this.projectState = this.loadState();\n  }\n\n  // ===========================\n  // Task Management\n  // ===========================\n\n  registerTask(spec: {\n    description: string;\n    assignedTo: string;\n    dependencies?: string[];\n    interfaces?: Record<string, string>;\n    constraints?: string[];\n    estimatedContextTokens?: number;\n  }): Task {\n    const taskId = this.generateTaskId();\n\n    const task: Task = {\n      taskId,\n      description: spec.description,\n      assignedTo: spec.assignedTo,\n      status: 'pending',\n      dependencies: spec.dependencies || [],\n      interfaces: spec.interfaces || {},\n      constraints: spec.constraints || [],\n      estimatedContextTokens: spec.estimatedContextTokens || 8000,\n      createdAt: new Date(),\n    };\n\n    this.projectState.tasks.set(taskId, task);\n\n    // Register dependencies\n    if (task.dependencies.length > 0) {\n      this.projectState.dependencies.set(taskId, task.dependencies);\n    }\n\n    // Allocate context window\n    this.projectState.contextAllocations.set(task.assignedTo, task.estimatedContextTokens);\n\n    this.saveState();\n\n    return task;\n  }\n\n  updateTaskStatus(\n    taskId: string,\n    status: Task['status'],\n    artifacts?: Partial<AgentArtifact>\n  ): void {\n    const task = this.projectState.tasks.get(taskId);\n\n    if (!task) {\n      throw new Error(`Task ${taskId} not found`);\n    }\n\n    task.status = status;\n\n    if (status === 'completed') {\n      task.completedAt = new Date();\n\n      // Store completion artifacts\n      if (artifacts) {\n        const artifact: AgentArtifact = {\n          agentId: task.assignedTo,\n          taskId,\n          files: artifacts.files || [],\n          interfaces: artifacts.interfaces || [],\n          completedAt: new Date(),\n          metadata: artifacts.metadata || {},\n        };\n\n        this.projectState.completions.set(taskId, artifact);\n\n        // Also store artifacts on the task object\n        task.artifacts = artifact;\n\n        // Extract and store interfaces\n        artifact.interfaces.forEach((iface) => {\n          this.projectState.interfaces.set(iface.name, {\n            file: iface.file,\n            taskId,\n            agentId: task.assignedTo,\n          });\n        });\n      }\n    }\n\n    this.saveState();\n  }\n\n  getTask(taskId: string): Task | undefined {\n    return this.projectState.tasks.get(taskId);\n  }\n\n  getAllTasks(): Task[] {\n    return Array.from(this.projectState.tasks.values());\n  }\n\n  getTasksByStatus(status: Task['status']): Task[] {\n    return Array.from(this.projectState.tasks.values()).filter((task) => task.status === status);\n  }\n\n  getTasksByAgent(agentId: string): Task[] {\n    return Array.from(this.projectState.tasks.values()).filter(\n      (task) => task.assignedTo === agentId\n    );\n  }\n\n  // ===========================\n  // Dependency Management\n  // ===========================\n\n  canStartTask(taskId: string): { canStart: boolean; blockedBy?: string[] } {\n    const task = this.projectState.tasks.get(taskId);\n\n    if (!task) {\n      return { canStart: false };\n    }\n\n    if (task.dependencies.length === 0) {\n      return { canStart: true };\n    }\n\n    const blockedBy: string[] = [];\n\n    for (const depId of task.dependencies) {\n      const depTask = this.projectState.tasks.get(depId);\n\n      if (!depTask || depTask.status !== 'completed') {\n        blockedBy.push(depId);\n      }\n    }\n\n    return {\n      canStart: blockedBy.length === 0,\n      blockedBy: blockedBy.length > 0 ? blockedBy : undefined,\n    };\n  }\n\n  getDependencyGraph(): Map<string, string[]> {\n    return this.projectState.dependencies;\n  }\n\n  // ===========================\n  // Handoff Protocol\n  // ===========================\n\n  prepareHandoff(fromTaskId: string, toAgent: string): HandoffProtocol {\n    const fromTask = this.projectState.tasks.get(fromTaskId);\n\n    if (!fromTask) {\n      throw new Error(`Task ${fromTaskId} not found`);\n    }\n\n    const artifact = this.projectState.completions.get(fromTaskId);\n\n    if (!artifact) {\n      throw new Error(`No completion artifacts for task ${fromTaskId}`);\n    }\n\n    // Calculate available context budget\n    const totalContext = 200000; // Claude's context window\n    const orchestratorContext = 10000;\n    const reservedContext = 20000;\n    const usedContext = Array.from(this.projectState.contextAllocations.values()).reduce(\n      (sum, val) => sum + val,\n      0\n    );\n\n    const availableContext = totalContext - orchestratorContext - reservedContext - usedContext;\n\n    // Build handoff protocol\n    const handoff: HandoffProtocol = {\n      fromAgent: fromTask.assignedTo,\n      toAgent,\n      taskId: fromTaskId,\n      artifacts: {\n        interfaces: this.extractRelevantInterfaces(toAgent),\n        implementationNotes: artifact.metadata.notes || {},\n        dependencies: artifact.metadata.dependencies || [],\n        testRequirements: artifact.metadata.testRequirements || [],\n      },\n      contextBudget: Math.min(availableContext, 30000),\n    };\n\n    return handoff;\n  }\n\n  private extractRelevantInterfaces(agentId: string): Record<string, string> {\n    const relevant: Record<string, string> = {};\n\n    // Get interfaces that this agent needs to know about\n    this.projectState.interfaces.forEach((value, key) => {\n      // Include all shared interfaces\n      relevant[key] = value.file;\n    });\n\n    return relevant;\n  }\n\n  // ===========================\n  // Context Management\n  // ===========================\n\n  allocateContextWindow(agentId: string, tokens: number): void {\n    this.projectState.contextAllocations.set(agentId, tokens);\n    this.saveState();\n  }\n\n  getContextUsage(): {\n    total: number;\n    byAgent: Map<string, number>;\n    available: number;\n  } {\n    const totalContext = 200000;\n    const used = Array.from(this.projectState.contextAllocations.values()).reduce(\n      (sum, val) => sum + val,\n      0\n    );\n\n    return {\n      total: totalContext,\n      byAgent: new Map(this.projectState.contextAllocations),\n      available: totalContext - used,\n    };\n  }\n\n  // ===========================\n  // Conflict Detection\n  // ===========================\n\n  detectConflicts(): ConflictIssue[] {\n    const conflicts: ConflictIssue[] = [];\n\n    // Check for interface conflicts\n    const interfaceConflicts = this.detectInterfaceConflicts();\n    conflicts.push(...interfaceConflicts);\n\n    // Check for dependency conflicts\n    const dependencyConflicts = this.detectDependencyConflicts();\n    conflicts.push(...dependencyConflicts);\n\n    // Store conflicts\n    this.projectState.conflicts = conflicts;\n    this.saveState();\n\n    return conflicts;\n  }\n\n  private detectInterfaceConflicts(): ConflictIssue[] {\n    // TODO: Implement interface conflict detection\n    // This would parse TypeScript files and compare interface definitions\n    return [];\n  }\n\n  private detectDependencyConflicts(): ConflictIssue[] {\n    const conflicts: ConflictIssue[] = [];\n\n    // Check for circular dependencies\n    const visited = new Set<string>();\n    const recursionStack = new Set<string>();\n\n    const hasCycle = (taskId: string): boolean => {\n      visited.add(taskId);\n      recursionStack.add(taskId);\n\n      const dependencies = this.projectState.dependencies.get(taskId) || [];\n\n      for (const depId of dependencies) {\n        if (!visited.has(depId)) {\n          if (hasCycle(depId)) {\n            return true;\n          }\n        } else if (recursionStack.has(depId)) {\n          conflicts.push({\n            id: `circular-dep-${Date.now()}`,\n            severity: 'HIGH',\n            category: 'CIRCULAR_DEPENDENCY',\n            description: `Circular dependency detected: ${taskId} -> ${depId}`,\n            affectedTasks: [taskId, depId],\n            detectedAt: new Date(),\n          });\n          return true;\n        }\n      }\n\n      recursionStack.delete(taskId);\n      return false;\n    };\n\n    this.projectState.tasks.forEach((_, taskId) => {\n      if (!visited.has(taskId)) {\n        hasCycle(taskId);\n      }\n    });\n\n    return conflicts;\n  }\n\n  getConflicts(): ConflictIssue[] {\n    return this.projectState.conflicts;\n  }\n\n  // ===========================\n  // Reporting\n  // ===========================\n\n  getProgressReport(): {\n    totalTasks: number;\n    byStatus: Record<Task['status'], number>;\n    completionRate: number;\n    blockedTasks: string[];\n    activeAgents: string[];\n  } {\n    const tasks = Array.from(this.projectState.tasks.values());\n\n    const byStatus = {\n      pending: 0,\n      in_progress: 0,\n      completed: 0,\n      blocked: 0,\n    };\n\n    const blockedTasks: string[] = [];\n    const activeAgents = new Set<string>();\n\n    tasks.forEach((task) => {\n      byStatus[task.status]++;\n\n      if (task.status === 'blocked') {\n        blockedTasks.push(task.taskId);\n      }\n\n      if (task.status === 'in_progress') {\n        activeAgents.add(task.assignedTo);\n      }\n    });\n\n    const completionRate = tasks.length > 0 ? (byStatus.completed / tasks.length) * 100 : 0;\n\n    return {\n      totalTasks: tasks.length,\n      byStatus,\n      completionRate,\n      blockedTasks,\n      activeAgents: Array.from(activeAgents),\n    };\n  }\n\n  /**\n   * Get comprehensive orchestration status for tracking progress\n   */\n  getOrchestrationStatus(): {\n    progress: {\n      totalTasks: number;\n      byStatus: Record<Task['status'], number>;\n      completionRate: number;\n      blockedTasks: string[];\n      activeAgents: string[];\n    };\n    tasks: Array<{\n      taskId: string;\n      description: string;\n      status: Task['status'];\n      assignedTo: string;\n      dependencies: string[];\n      artifacts?: Task['artifacts'];\n    }>;\n    conflicts: ConflictIssue[];\n    interfaces: Array<{ name: string; definition: InterfaceDefinition }>;\n  } {\n    const tasks = Array.from(this.projectState.tasks.values());\n    const interfaces = Array.from(this.projectState.interfaces.entries()).map(\n      ([name, definition]) => ({ name, definition })\n    );\n\n    return {\n      progress: this.getProgressReport(),\n      tasks: tasks.map((task) => ({\n        taskId: task.taskId,\n        description: task.description,\n        status: task.status,\n        assignedTo: task.assignedTo,\n        dependencies: task.dependencies,\n        artifacts: task.artifacts,\n      })),\n      conflicts: this.projectState.conflicts,\n      interfaces,\n    };\n  }\n\n  /**\n   * Get detailed information for a specific task\n   */\n  getTaskDetails(taskId: string): {\n    task: Task | undefined;\n    dependsOn: Task[];\n    blockedBy: Task[];\n    completion?: CompletionHandoff;\n  } {\n    const task = this.getTask(taskId);\n    if (!task) {\n      return {\n        task: undefined,\n        dependsOn: [],\n        blockedBy: [],\n      };\n    }\n\n    const dependsOn = task.dependencies\n      .map((depId) => this.getTask(depId))\n      .filter((t): t is Task => t !== undefined);\n\n    const blockedBy = dependsOn.filter((t) => t.status !== 'completed');\n\n    return {\n      task,\n      dependsOn,\n      blockedBy,\n      completion: this.projectState.completions.get(taskId),\n    };\n  }\n\n  /**\n   * Get information needed to resume an orchestration session\n   */\n  getResumableOrchestration(): {\n    hasState: boolean;\n    progress: {\n      totalTasks: number;\n      byStatus: Record<Task['status'], number>;\n      completionRate: number;\n      blockedTasks: string[];\n      activeAgents: string[];\n    } | null;\n    nextTasks: Task[];\n    blockedTasks: Array<{ task: Task; blockedBy: string[] }>;\n  } {\n    const tasks = Array.from(this.projectState.tasks.values());\n    if (tasks.length === 0) {\n      return {\n        hasState: false,\n        progress: null,\n        nextTasks: [],\n        blockedTasks: [],\n      };\n    }\n\n    const progress = this.getProgressReport();\n\n    // Find next tasks that can be started (pending with no incomplete dependencies)\n    const nextTasks = tasks.filter((task) => {\n      if (task.status !== 'pending') return false;\n      return task.dependencies.every((depId) => {\n        const dep = this.getTask(depId);\n        return dep?.status === 'completed';\n      });\n    });\n\n    // Find blocked tasks with their blocking dependencies\n    const blockedTasks = tasks\n      .filter((task) => task.status === 'blocked' || task.status === 'pending')\n      .map((task) => {\n        const blockedBy = task.dependencies.filter((depId) => {\n          const dep = this.getTask(depId);\n          return dep?.status !== 'completed';\n        });\n        return { task, blockedBy };\n      })\n      .filter((item) => item.blockedBy.length > 0);\n\n    return {\n      hasState: true,\n      progress,\n      nextTasks,\n      blockedTasks,\n    };\n  }\n\n  // ===========================\n  // State Persistence\n  // ===========================\n\n  private loadState(): typeof this.projectState {\n    const stateFile = join(this.statePath, 'context-state.json');\n\n    if (existsSync(stateFile)) {\n      try {\n        const data = JSON.parse(readFileSync(stateFile, 'utf-8'));\n\n        return {\n          architecture: data.architecture || {},\n          tasks: new Map(Object.entries(data.tasks || {})),\n          dependencies: new Map(Object.entries(data.dependencies || {})),\n          completions: new Map(Object.entries(data.completions || {})),\n          interfaces: new Map(Object.entries(data.interfaces || {})),\n          conflicts: data.conflicts || [],\n          contextAllocations: new Map(Object.entries(data.contextAllocations || {})),\n        };\n      } catch (error) {\n        console.error('Failed to load state, initializing fresh:', error);\n      }\n    }\n\n    return {\n      architecture: {},\n      tasks: new Map(),\n      dependencies: new Map(),\n      completions: new Map(),\n      interfaces: new Map(),\n      conflicts: [],\n      contextAllocations: new Map(),\n    };\n  }\n\n  private saveState(): void {\n    const stateFile = join(this.statePath, 'context-state.json');\n\n    const data = {\n      architecture: this.projectState.architecture,\n      tasks: Object.fromEntries(this.projectState.tasks),\n      dependencies: Object.fromEntries(this.projectState.dependencies),\n      completions: Object.fromEntries(this.projectState.completions),\n      interfaces: Object.fromEntries(this.projectState.interfaces),\n      conflicts: this.projectState.conflicts,\n      contextAllocations: Object.fromEntries(this.projectState.contextAllocations),\n    };\n\n    writeFileSync(stateFile, JSON.stringify(data, null, 2));\n  }\n\n  clearState(): void {\n    this.projectState = {\n      architecture: {},\n      tasks: new Map(),\n      dependencies: new Map(),\n      completions: new Map(),\n      interfaces: new Map(),\n      conflicts: [],\n      contextAllocations: new Map(),\n    };\n\n    this.saveState();\n  }\n\n  // ===========================\n  // Utilities\n  // ===========================\n\n  private generateTaskId(): string {\n    return `task-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n  }\n}\n\n// ===========================\n// Wave Orchestrator\n// ===========================\n\nexport class WaveOrchestrator {\n  private contextHub: AgentContextHub;\n  private maxContextPerWave: number = 100000;\n\n  constructor(contextHub: AgentContextHub) {\n    this.contextHub = contextHub;\n  }\n\n  deployWaves(tasks: Task[]): Task[][] {\n    const waves: Task[][] = [];\n    let currentWave: Task[] = [];\n    let contextBudget = 0;\n\n    // Sort tasks by dependencies (topological sort)\n    const sortedTasks = this.topologicalSort(tasks);\n\n    for (const task of sortedTasks) {\n      const estimatedContext = task.estimatedContextTokens;\n\n      if (contextBudget + estimatedContext > this.maxContextPerWave) {\n        // Start new wave\n        waves.push(currentWave);\n        currentWave = [task];\n        contextBudget = estimatedContext;\n      } else {\n        currentWave.push(task);\n        contextBudget += estimatedContext;\n      }\n    }\n\n    if (currentWave.length > 0) {\n      waves.push(currentWave);\n    }\n\n    return waves;\n  }\n\n  private topologicalSort(tasks: Task[]): Task[] {\n    const sorted: Task[] = [];\n    const visited = new Set<string>();\n    const tempMark = new Set<string>();\n\n    const visit = (taskId: string) => {\n      if (tempMark.has(taskId)) {\n        throw new Error(`Circular dependency detected involving ${taskId}`);\n      }\n\n      if (!visited.has(taskId)) {\n        tempMark.add(taskId);\n\n        const task = this.contextHub.getTask(taskId);\n        if (task) {\n          task.dependencies.forEach((depId) => visit(depId));\n          visited.add(taskId);\n          sorted.push(task);\n        }\n\n        tempMark.delete(taskId);\n      }\n    };\n\n    tasks.forEach((task) => {\n      if (!visited.has(task.taskId)) {\n        visit(task.taskId);\n      }\n    });\n\n    return sorted;\n  }\n}\n\n// ===========================\n// Example Usage\n// ===========================\n\n// NOTE: Example code commented out - use the CLI instead (npx claude-orchestra <command>)\nif (false && require.main === module) {\n  // Initialize context hub\n  const hub = new AgentContextHub();\n\n  // Register tasks\n  const task1 = hub.registerTask({\n    description: 'Define TypeScript interfaces',\n    assignedTo: 'types-specialist',\n    estimatedContextTokens: 5000,\n  });\n\n  const task2 = hub.registerTask({\n    description: 'Implement backend API',\n    assignedTo: 'backend-specialist',\n    dependencies: [task1.taskId],\n    estimatedContextTokens: 15000,\n  });\n\n  const task3 = hub.registerTask({\n    description: 'Implement frontend components',\n    assignedTo: 'frontend-specialist',\n    dependencies: [task1.taskId],\n    estimatedContextTokens: 15000,\n  });\n\n  const task4 = hub.registerTask({\n    description: 'Write integration tests',\n    assignedTo: 'test-specialist',\n    dependencies: [task2.taskId, task3.taskId],\n    estimatedContextTokens: 10000,\n  });\n\n  // Check if tasks can start\n  console.log('Task 1 can start:', hub.canStartTask(task1.taskId));\n  console.log('Task 2 can start:', hub.canStartTask(task2.taskId));\n\n  // Complete task 1\n  hub.updateTaskStatus(task1.taskId, 'completed', {\n    files: ['src/types/user.ts'],\n    interfaces: [{ name: 'User', file: 'src/types/user.ts' }],\n    metadata: {\n      notes: { critical: 'All IDs are strings (UUIDs)' },\n    },\n  });\n\n  // Check again\n  console.log('Task 2 can start:', hub.canStartTask(task2.taskId));\n\n  // Get progress report\n  console.log('Progress:', hub.getProgressReport());\n\n  // Deploy in waves\n  const waveOrch = new WaveOrchestrator(hub);\n  const waves = waveOrch.deployWaves(hub.getAllTasks());\n\n  console.log(`Deploying in ${waves.length} waves:`);\n  waves.forEach((wave, i) => {\n    console.log(\n      `Wave ${i + 1}:`,\n      wave.map((t) => t.description)\n    );\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,gBAAgF;AAChF,kBAAqB;AAErB,uBAAmC;AA2EnC,IAAM,sBAAqD;AAAA,EACzD,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,cAAc,CAAC,kBAAkB,oBAAoB,UAAU;AAAA,IAC/D,gBAAgB;AAAA;AAAA,IAChB,QAAQ,CAAC,6BAA6B,eAAe;AAAA,IACrD,oBAAoB,CAAC,iBAA2B;AAC9C,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,EAAG,QAAO;AAC5D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,EAAG,QAAO;AAC3D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC,EAAG,QAAO;AAC1D,UACE,aAAa;AAAA,QACX,CAAC,MAAM,EAAE,SAAS,OAAO,KAAK,EAAE,SAAS,YAAY,KAAK,EAAE,SAAS,SAAS;AAAA,MAChF,GACA;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,cAAc,CAAC,gBAAgB,qBAAqB,kBAAkB,WAAW;AAAA,IACjF,gBAAgB;AAAA;AAAA,IAChB,QAAQ,CAAC,6BAA6B,qBAAqB;AAAA,IAC3D,oBAAoB,CAAC,iBAA2B;AAC9C,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,EAAG,QAAO;AAC5D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,EAAG,QAAO;AAC5D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,EAAG,QAAO;AAC3D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,OAAO,CAAC,EAAG,QAAO;AAC1D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,CAAC,EAAG,QAAO;AACxD,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,EAAG,QAAO;AACzD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,UAAU;AAAA,IACV,cAAc,CAAC,UAAU,QAAQ;AAAA,IACjC,gBAAgB;AAAA,IAChB,QAAQ,CAAC,uBAAuB;AAAA,IAChC,oBAAoB,CAAC,iBAA2B;AAC9C,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,eAAe,CAAC,EAAG,QAAO;AAClE,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,eAAe,CAAC,EAAG,QAAO;AAClE,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,CAAC,EAAG,QAAO;AAChE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,cAAc,CAAC,cAAc,YAAY;AAAA,IACzC,gBAAgB;AAAA,IAChB,QAAQ,CAAC,yBAAyB;AAAA,IAClC,oBAAoB,CAAC,iBAA2B;AAC9C,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,CAAC,EAAG,QAAO;AACzD,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,CAAC,EAAG,QAAO;AAC9D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ,CAAC,EAAG,QAAO;AAC3D,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,cAAc,CAAC,WAAW,gBAAgB,kBAAkB;AAAA,IAC5D,gBAAgB;AAAA,IAChB,QAAQ,CAAC,yBAAyB;AAAA,IAClC,oBAAoB,CAAC,iBAA2B;AAC9C,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,aAAa,CAAC,EAAG,QAAO;AAChE,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS,CAAC,EAAG,QAAO;AAC5D,UAAI,aAAa,KAAK,CAAC,MAAM,EAAE,SAAS,WAAW,CAAC,EAAG,QAAO;AAC9D,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAMO,IAAM,qBAAN,MAAyB;AAAA,EAG9B,YAAY,cAAsB,KAAK;AACrC,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAwC;AAE5C,eAAW,CAAC,KAAK,QAAQ,KAAK,OAAO,QAAQ,mBAAmB,GAAG;AACjE,YAAM,gBAAgB,KAAK,iBAAiB,SAAS,YAAY;AAEjE,UAAI,cAAc,SAAS,GAAG;AAC5B,cAAM,eAAe,MAAM,KAAK,oBAAoB,cAAc,CAAC,GAAG,GAAG;AACzE,cAAM,YAAY,SAAS,qBAAqB,YAAY;AAG5D,YAAI,kBAAkB,CAAC,GAAG,SAAS,MAAM;AAGzC,YAAI,QAAQ,YAAY,WAAW;AACjC,cAAI,cAAc,MAAM;AACtB,8BAAkB,CAAC,eAAe;AAAA,UACpC,WAAW,CAAC,WAAW,UAAU,OAAO,EAAE,SAAS,SAAS,GAAG;AAC7D,8BAAkB,CAAC,2BAA2B;AAAA,UAChD;AAAA,QACF;AAGA,YAAI,QAAQ,YAAY,WAAW;AACjC,cAAI,CAAC,WAAW,WAAW,QAAQ,EAAE,SAAS,SAAS,GAAG;AACxD,8BAAkB,CAAC,2BAA2B;AAAA,UAChD,WAAW,CAAC,SAAS,OAAO,QAAQ,EAAE,SAAS,SAAS,GAAG;AACzD,8BAAkB,CAAC,qBAAqB;AAAA,UAC1C;AAAA,QACF;AAEA,eAAO;AAAA,UACL,UAAU;AAAA,UACV,gBAAgB,SAAS;AAAA,UACzB;AAAA,UACA,cAAc;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,cAAc,CAAC;AAAA,MACf,iBAAiB,CAAC;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,iBAAiB,UAA8B;AACrD,UAAM,QAAkB,CAAC;AAEzB,eAAW,WAAW,UAAU;AAC9B,YAAM,eAAW,kBAAK,KAAK,aAAa,OAAO;AAC/C,cAAI,sBAAW,QAAQ,GAAG;AACxB,cAAM,KAAK,QAAQ;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,oBAAoB,UAAkB,UAAqC;AACvF,QAAI;AACF,YAAM,cAAU,wBAAa,UAAU,OAAO;AAE9C,UAAI,aAAa,UAAU;AACzB,YAAI,SAAS,SAAS,gBAAgB,GAAG;AAEvC,gBAAM,aAAS,iBAAAA,OAAU,OAAO;AAChC,gBAAM,OAAiB,CAAC;AAGxB,cAAI,OAAO,SAAS,gBAAgB,MAAM,QAAQ,OAAO,QAAQ,YAAY,GAAG;AAC9E,iBAAK;AAAA,cACH,GAAG,OAAO,QAAQ,aAAa,IAAI,CAAC,MAAc,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;AAAA,YAC/E;AAAA,UACF;AAGA,cAAI,OAAO,UAAU,uBAAuB,GAAG;AAC7C,uBAAW,SAAS,OAAO,OAAO,OAAO,QAAQ,uBAAuB,CAAC,GAAG;AAC1E,kBAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,qBAAK,KAAK,GAAG,MAAM,IAAI,CAAC,MAAc,EAAE,MAAM,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,cACpE;AAAA,YACF;AAAA,UACF;AAEA,iBAAO,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;AAAA,QAC1B,WAAW,SAAS,SAAS,kBAAkB,GAAG;AAChD,iBAAO,QACJ,MAAM,IAAI,EACV,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,QAAQ,CAAC,KAAK,WAAW,GAAG,CAAC,EAC9C,IAAI,CAAC,SAAS,KAAK,MAAM,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC;AAAA,QACjD;AAAA,MACF,WAAW,aAAa,UAAU;AAChC,cAAM,cAAc,KAAK,MAAM,OAAO;AACtC,eAAO;AAAA,UACL,GAAG,OAAO,KAAK,YAAY,gBAAgB,CAAC,CAAC;AAAA,UAC7C,GAAG,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC;AAAA,QAClD;AAAA,MACF,WAAW,aAAa,MAAM;AAE5B,cAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,cAAM,OAAiB,CAAC;AACxB,YAAI,YAAY;AAEhB,mBAAW,QAAQ,OAAO;AACxB,gBAAM,UAAU,KAAK,KAAK;AAC1B,cAAI,QAAQ,WAAW,WAAW,GAAG;AACnC,wBAAY;AACZ;AAAA,UACF;AACA,cAAI,aAAa,YAAY,KAAK;AAChC,wBAAY;AACZ;AAAA,UACF;AACA,cAAI,aAAa,QAAQ,WAAW,UAAU,GAAG;AAC/C,kBAAM,QAAQ,QAAQ,MAAM,0BAA0B;AACtD,gBAAI,SAAS,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,IAAI,GAAG;AACnD,mBAAK,KAAK,MAAM,CAAC,CAAC;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AACA,eAAO;AAAA,MACT,WAAW,aAAa,QAAQ;AAE9B,cAAM,aAAS,iBAAAA,OAAU,OAAO;AAChC,cAAM,OAAiB,CAAC;AAExB,YAAI,OAAO,cAAc;AACvB,eAAK,KAAK,GAAG,OAAO,KAAK,OAAO,YAAY,CAAC;AAAA,QAC/C;AACA,YAAI,OAAO,kBAAkB,GAAG;AAC9B,eAAK,KAAK,GAAG,OAAO,KAAK,OAAO,kBAAkB,CAAC,CAAC;AAAA,QACtD;AACA,YAAI,OAAO,oBAAoB,GAAG;AAChC,eAAK,KAAK,GAAG,OAAO,KAAK,OAAO,oBAAoB,CAAC,CAAC;AAAA,QACxD;AAEA,eAAO;AAAA,MACT,WAAW,aAAa,QAAQ;AAE9B,cAAM,aACJ,QAAQ,MAAM,kCAAkC,KAChD,QAAQ,MAAM,iCAAiC,KAC/C,CAAC;AACH,eAAO,WAAW;AAAA,UAAI,CAAC,MACrB,EACG,QAAQ,oBAAoB,EAAE,EAC9B,QAAQ,0BAA0B,EAAE,EACpC,QAAQ,SAAS,EAAE;AAAA,QACxB;AAAA,MACF;AAEA,aAAO,CAAC;AAAA,IACV,SAAS,OAAO;AACd,cAAQ,MAAM,sCAAsC,QAAQ,KAAK,KAAK;AACtE,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,wBAAwB,OAAwB,iBAAmC;AACjF,UAAM,kBAAkB,CAAC,GAAG,MAAM,eAAe;AAGjD,UAAM,YAAY,gBAAgB,YAAY;AAE9C,QAAI,UAAU,SAAS,MAAM,KAAK,UAAU,SAAS,SAAS,GAAG;AAC/D,sBAAgB,KAAK,iBAAiB;AAAA,IACxC;AAEA,QACE,UAAU,SAAS,UAAU,KAC7B,UAAU,SAAS,QAAQ,KAC3B,UAAU,SAAS,WAAW,GAC9B;AACA,sBAAgB,KAAK,qBAAqB;AAAA,IAC5C;AAEA,QAAI,UAAU,SAAS,UAAU,KAAK,UAAU,SAAS,aAAa,GAAG;AACvE,sBAAgB,KAAK,uBAAuB;AAAA,IAC9C;AAEA,WAAO,CAAC,GAAG,IAAI,IAAI,eAAe,CAAC;AAAA,EACrC;AACF;AAMO,IAAM,kBAAN,MAAsB;AAAA,EAY3B,YAAY,YAAoB,mBAAmB;AACjD,SAAK,YAAY;AAGjB,QAAI,KAAC,sBAAW,SAAS,GAAG;AAC1B,+BAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,IAC1C;AAGA,SAAK,eAAe,KAAK,UAAU;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,MAOJ;AACP,UAAM,SAAS,KAAK,eAAe;AAEnC,UAAM,OAAa;AAAA,MACjB;AAAA,MACA,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,MACjB,QAAQ;AAAA,MACR,cAAc,KAAK,gBAAgB,CAAC;AAAA,MACpC,YAAY,KAAK,cAAc,CAAC;AAAA,MAChC,aAAa,KAAK,eAAe,CAAC;AAAA,MAClC,wBAAwB,KAAK,0BAA0B;AAAA,MACvD,WAAW,oBAAI,KAAK;AAAA,IACtB;AAEA,SAAK,aAAa,MAAM,IAAI,QAAQ,IAAI;AAGxC,QAAI,KAAK,aAAa,SAAS,GAAG;AAChC,WAAK,aAAa,aAAa,IAAI,QAAQ,KAAK,YAAY;AAAA,IAC9D;AAGA,SAAK,aAAa,mBAAmB,IAAI,KAAK,YAAY,KAAK,sBAAsB;AAErF,SAAK,UAAU;AAEf,WAAO;AAAA,EACT;AAAA,EAEA,iBACE,QACA,QACA,WACM;AACN,UAAM,OAAO,KAAK,aAAa,MAAM,IAAI,MAAM;AAE/C,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,QAAQ,MAAM,YAAY;AAAA,IAC5C;AAEA,SAAK,SAAS;AAEd,QAAI,WAAW,aAAa;AAC1B,WAAK,cAAc,oBAAI,KAAK;AAG5B,UAAI,WAAW;AACb,cAAM,WAA0B;AAAA,UAC9B,SAAS,KAAK;AAAA,UACd;AAAA,UACA,OAAO,UAAU,SAAS,CAAC;AAAA,UAC3B,YAAY,UAAU,cAAc,CAAC;AAAA,UACrC,aAAa,oBAAI,KAAK;AAAA,UACtB,UAAU,UAAU,YAAY,CAAC;AAAA,QACnC;AAEA,aAAK,aAAa,YAAY,IAAI,QAAQ,QAAQ;AAGlD,aAAK,YAAY;AAGjB,iBAAS,WAAW,QAAQ,CAAC,UAAU;AACrC,eAAK,aAAa,WAAW,IAAI,MAAM,MAAM;AAAA,YAC3C,MAAM,MAAM;AAAA,YACZ;AAAA,YACA,SAAS,KAAK;AAAA,UAChB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAQ,QAAkC;AACxC,WAAO,KAAK,aAAa,MAAM,IAAI,MAAM;AAAA,EAC3C;AAAA,EAEA,cAAsB;AACpB,WAAO,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC;AAAA,EACpD;AAAA,EAEA,iBAAiB,QAAgC;AAC/C,WAAO,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,KAAK,WAAW,MAAM;AAAA,EAC7F;AAAA,EAEA,gBAAgB,SAAyB;AACvC,WAAO,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC,EAAE;AAAA,MAClD,CAAC,SAAS,KAAK,eAAe;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,aAAa,QAA6D;AACxE,UAAM,OAAO,KAAK,aAAa,MAAM,IAAI,MAAM;AAE/C,QAAI,CAAC,MAAM;AACT,aAAO,EAAE,UAAU,MAAM;AAAA,IAC3B;AAEA,QAAI,KAAK,aAAa,WAAW,GAAG;AAClC,aAAO,EAAE,UAAU,KAAK;AAAA,IAC1B;AAEA,UAAM,YAAsB,CAAC;AAE7B,eAAW,SAAS,KAAK,cAAc;AACrC,YAAM,UAAU,KAAK,aAAa,MAAM,IAAI,KAAK;AAEjD,UAAI,CAAC,WAAW,QAAQ,WAAW,aAAa;AAC9C,kBAAU,KAAK,KAAK;AAAA,MACtB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU,UAAU,WAAW;AAAA,MAC/B,WAAW,UAAU,SAAS,IAAI,YAAY;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,qBAA4C;AAC1C,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,YAAoB,SAAkC;AACnE,UAAM,WAAW,KAAK,aAAa,MAAM,IAAI,UAAU;AAEvD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,QAAQ,UAAU,YAAY;AAAA,IAChD;AAEA,UAAM,WAAW,KAAK,aAAa,YAAY,IAAI,UAAU;AAE7D,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,oCAAoC,UAAU,EAAE;AAAA,IAClE;AAGA,UAAM,eAAe;AACrB,UAAM,sBAAsB;AAC5B,UAAM,kBAAkB;AACxB,UAAM,cAAc,MAAM,KAAK,KAAK,aAAa,mBAAmB,OAAO,CAAC,EAAE;AAAA,MAC5E,CAAC,KAAK,QAAQ,MAAM;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,mBAAmB,eAAe,sBAAsB,kBAAkB;AAGhF,UAAM,UAA2B;AAAA,MAC/B,WAAW,SAAS;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR,WAAW;AAAA,QACT,YAAY,KAAK,0BAA0B,OAAO;AAAA,QAClD,qBAAqB,SAAS,SAAS,SAAS,CAAC;AAAA,QACjD,cAAc,SAAS,SAAS,gBAAgB,CAAC;AAAA,QACjD,kBAAkB,SAAS,SAAS,oBAAoB,CAAC;AAAA,MAC3D;AAAA,MACA,eAAe,KAAK,IAAI,kBAAkB,GAAK;AAAA,IACjD;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,0BAA0B,SAAyC;AACzE,UAAM,WAAmC,CAAC;AAG1C,SAAK,aAAa,WAAW,QAAQ,CAAC,OAAO,QAAQ;AAEnD,eAAS,GAAG,IAAI,MAAM;AAAA,IACxB,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,sBAAsB,SAAiB,QAAsB;AAC3D,SAAK,aAAa,mBAAmB,IAAI,SAAS,MAAM;AACxD,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,kBAIE;AACA,UAAM,eAAe;AACrB,UAAM,OAAO,MAAM,KAAK,KAAK,aAAa,mBAAmB,OAAO,CAAC,EAAE;AAAA,MACrE,CAAC,KAAK,QAAQ,MAAM;AAAA,MACpB;AAAA,IACF;AAEA,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS,IAAI,IAAI,KAAK,aAAa,kBAAkB;AAAA,MACrD,WAAW,eAAe;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,kBAAmC;AACjC,UAAM,YAA6B,CAAC;AAGpC,UAAM,qBAAqB,KAAK,yBAAyB;AACzD,cAAU,KAAK,GAAG,kBAAkB;AAGpC,UAAM,sBAAsB,KAAK,0BAA0B;AAC3D,cAAU,KAAK,GAAG,mBAAmB;AAGrC,SAAK,aAAa,YAAY;AAC9B,SAAK,UAAU;AAEf,WAAO;AAAA,EACT;AAAA,EAEQ,2BAA4C;AAGlD,WAAO,CAAC;AAAA,EACV;AAAA,EAEQ,4BAA6C;AACnD,UAAM,YAA6B,CAAC;AAGpC,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,iBAAiB,oBAAI,IAAY;AAEvC,UAAM,WAAW,CAAC,WAA4B;AAC5C,cAAQ,IAAI,MAAM;AAClB,qBAAe,IAAI,MAAM;AAEzB,YAAM,eAAe,KAAK,aAAa,aAAa,IAAI,MAAM,KAAK,CAAC;AAEpE,iBAAW,SAAS,cAAc;AAChC,YAAI,CAAC,QAAQ,IAAI,KAAK,GAAG;AACvB,cAAI,SAAS,KAAK,GAAG;AACnB,mBAAO;AAAA,UACT;AAAA,QACF,WAAW,eAAe,IAAI,KAAK,GAAG;AACpC,oBAAU,KAAK;AAAA,YACb,IAAI,gBAAgB,KAAK,IAAI,CAAC;AAAA,YAC9B,UAAU;AAAA,YACV,UAAU;AAAA,YACV,aAAa,iCAAiC,MAAM,OAAO,KAAK;AAAA,YAChE,eAAe,CAAC,QAAQ,KAAK;AAAA,YAC7B,YAAY,oBAAI,KAAK;AAAA,UACvB,CAAC;AACD,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,qBAAe,OAAO,MAAM;AAC5B,aAAO;AAAA,IACT;AAEA,SAAK,aAAa,MAAM,QAAQ,CAAC,GAAG,WAAW;AAC7C,UAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACxB,iBAAS,MAAM;AAAA,MACjB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,eAAgC;AAC9B,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAMA,oBAME;AACA,UAAM,QAAQ,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC;AAEzD,UAAM,WAAW;AAAA,MACf,SAAS;AAAA,MACT,aAAa;AAAA,MACb,WAAW;AAAA,MACX,SAAS;AAAA,IACX;AAEA,UAAM,eAAyB,CAAC;AAChC,UAAM,eAAe,oBAAI,IAAY;AAErC,UAAM,QAAQ,CAAC,SAAS;AACtB,eAAS,KAAK,MAAM;AAEpB,UAAI,KAAK,WAAW,WAAW;AAC7B,qBAAa,KAAK,KAAK,MAAM;AAAA,MAC/B;AAEA,UAAI,KAAK,WAAW,eAAe;AACjC,qBAAa,IAAI,KAAK,UAAU;AAAA,MAClC;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,MAAM,SAAS,IAAK,SAAS,YAAY,MAAM,SAAU,MAAM;AAEtF,WAAO;AAAA,MACL,YAAY,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM,KAAK,YAAY;AAAA,IACvC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,yBAkBE;AACA,UAAM,QAAQ,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC;AACzD,UAAM,aAAa,MAAM,KAAK,KAAK,aAAa,WAAW,QAAQ,CAAC,EAAE;AAAA,MACpE,CAAC,CAAC,MAAM,UAAU,OAAO,EAAE,MAAM,WAAW;AAAA,IAC9C;AAEA,WAAO;AAAA,MACL,UAAU,KAAK,kBAAkB;AAAA,MACjC,OAAO,MAAM,IAAI,CAAC,UAAU;AAAA,QAC1B,QAAQ,KAAK;AAAA,QACb,aAAa,KAAK;AAAA,QAClB,QAAQ,KAAK;AAAA,QACb,YAAY,KAAK;AAAA,QACjB,cAAc,KAAK;AAAA,QACnB,WAAW,KAAK;AAAA,MAClB,EAAE;AAAA,MACF,WAAW,KAAK,aAAa;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAe,QAKb;AACA,UAAM,OAAO,KAAK,QAAQ,MAAM;AAChC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,QACL,MAAM;AAAA,QACN,WAAW,CAAC;AAAA,QACZ,WAAW,CAAC;AAAA,MACd;AAAA,IACF;AAEA,UAAM,YAAY,KAAK,aACpB,IAAI,CAAC,UAAU,KAAK,QAAQ,KAAK,CAAC,EAClC,OAAO,CAAC,MAAiB,MAAM,MAAS;AAE3C,UAAM,YAAY,UAAU,OAAO,CAAC,MAAM,EAAE,WAAW,WAAW;AAElE,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,KAAK,aAAa,YAAY,IAAI,MAAM;AAAA,IACtD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,4BAWE;AACA,UAAM,QAAQ,MAAM,KAAK,KAAK,aAAa,MAAM,OAAO,CAAC;AACzD,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,WAAW,CAAC;AAAA,QACZ,cAAc,CAAC;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,kBAAkB;AAGxC,UAAM,YAAY,MAAM,OAAO,CAAC,SAAS;AACvC,UAAI,KAAK,WAAW,UAAW,QAAO;AACtC,aAAO,KAAK,aAAa,MAAM,CAAC,UAAU;AACxC,cAAM,MAAM,KAAK,QAAQ,KAAK;AAC9B,eAAO,KAAK,WAAW;AAAA,MACzB,CAAC;AAAA,IACH,CAAC;AAGD,UAAM,eAAe,MAClB,OAAO,CAAC,SAAS,KAAK,WAAW,aAAa,KAAK,WAAW,SAAS,EACvE,IAAI,CAAC,SAAS;AACb,YAAM,YAAY,KAAK,aAAa,OAAO,CAAC,UAAU;AACpD,cAAM,MAAM,KAAK,QAAQ,KAAK;AAC9B,eAAO,KAAK,WAAW;AAAA,MACzB,CAAC;AACD,aAAO,EAAE,MAAM,UAAU;AAAA,IAC3B,CAAC,EACA,OAAO,CAAC,SAAS,KAAK,UAAU,SAAS,CAAC;AAE7C,WAAO;AAAA,MACL,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMQ,YAAsC;AAC5C,UAAM,gBAAY,kBAAK,KAAK,WAAW,oBAAoB;AAE3D,YAAI,sBAAW,SAAS,GAAG;AACzB,UAAI;AACF,cAAM,OAAO,KAAK,UAAM,wBAAa,WAAW,OAAO,CAAC;AAExD,eAAO;AAAA,UACL,cAAc,KAAK,gBAAgB,CAAC;AAAA,UACpC,OAAO,IAAI,IAAI,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,UAC/C,cAAc,IAAI,IAAI,OAAO,QAAQ,KAAK,gBAAgB,CAAC,CAAC,CAAC;AAAA,UAC7D,aAAa,IAAI,IAAI,OAAO,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC;AAAA,UAC3D,YAAY,IAAI,IAAI,OAAO,QAAQ,KAAK,cAAc,CAAC,CAAC,CAAC;AAAA,UACzD,WAAW,KAAK,aAAa,CAAC;AAAA,UAC9B,oBAAoB,IAAI,IAAI,OAAO,QAAQ,KAAK,sBAAsB,CAAC,CAAC,CAAC;AAAA,QAC3E;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,6CAA6C,KAAK;AAAA,MAClE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,cAAc,CAAC;AAAA,MACf,OAAO,oBAAI,IAAI;AAAA,MACf,cAAc,oBAAI,IAAI;AAAA,MACtB,aAAa,oBAAI,IAAI;AAAA,MACrB,YAAY,oBAAI,IAAI;AAAA,MACpB,WAAW,CAAC;AAAA,MACZ,oBAAoB,oBAAI,IAAI;AAAA,IAC9B;AAAA,EACF;AAAA,EAEQ,YAAkB;AACxB,UAAM,gBAAY,kBAAK,KAAK,WAAW,oBAAoB;AAE3D,UAAM,OAAO;AAAA,MACX,cAAc,KAAK,aAAa;AAAA,MAChC,OAAO,OAAO,YAAY,KAAK,aAAa,KAAK;AAAA,MACjD,cAAc,OAAO,YAAY,KAAK,aAAa,YAAY;AAAA,MAC/D,aAAa,OAAO,YAAY,KAAK,aAAa,WAAW;AAAA,MAC7D,YAAY,OAAO,YAAY,KAAK,aAAa,UAAU;AAAA,MAC3D,WAAW,KAAK,aAAa;AAAA,MAC7B,oBAAoB,OAAO,YAAY,KAAK,aAAa,kBAAkB;AAAA,IAC7E;AAEA,iCAAc,WAAW,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EACxD;AAAA,EAEA,aAAmB;AACjB,SAAK,eAAe;AAAA,MAClB,cAAc,CAAC;AAAA,MACf,OAAO,oBAAI,IAAI;AAAA,MACf,cAAc,oBAAI,IAAI;AAAA,MACtB,aAAa,oBAAI,IAAI;AAAA,MACrB,YAAY,oBAAI,IAAI;AAAA,MACpB,WAAW,CAAC;AAAA,MACZ,oBAAoB,oBAAI,IAAI;AAAA,IAC9B;AAEA,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAyB;AAC/B,WAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EACtE;AACF;AAMO,IAAM,mBAAN,MAAuB;AAAA,EAI5B,YAAY,YAA6B;AAFzC,SAAQ,oBAA4B;AAGlC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,YAAY,OAAyB;AACnC,UAAM,QAAkB,CAAC;AACzB,QAAI,cAAsB,CAAC;AAC3B,QAAI,gBAAgB;AAGpB,UAAM,cAAc,KAAK,gBAAgB,KAAK;AAE9C,eAAW,QAAQ,aAAa;AAC9B,YAAM,mBAAmB,KAAK;AAE9B,UAAI,gBAAgB,mBAAmB,KAAK,mBAAmB;AAE7D,cAAM,KAAK,WAAW;AACtB,sBAAc,CAAC,IAAI;AACnB,wBAAgB;AAAA,MAClB,OAAO;AACL,oBAAY,KAAK,IAAI;AACrB,yBAAiB;AAAA,MACnB;AAAA,IACF;AAEA,QAAI,YAAY,SAAS,GAAG;AAC1B,YAAM,KAAK,WAAW;AAAA,IACxB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,gBAAgB,OAAuB;AAC7C,UAAM,SAAiB,CAAC;AACxB,UAAM,UAAU,oBAAI,IAAY;AAChC,UAAM,WAAW,oBAAI,IAAY;AAEjC,UAAM,QAAQ,CAAC,WAAmB;AAChC,UAAI,SAAS,IAAI,MAAM,GAAG;AACxB,cAAM,IAAI,MAAM,0CAA0C,MAAM,EAAE;AAAA,MACpE;AAEA,UAAI,CAAC,QAAQ,IAAI,MAAM,GAAG;AACxB,iBAAS,IAAI,MAAM;AAEnB,cAAM,OAAO,KAAK,WAAW,QAAQ,MAAM;AAC3C,YAAI,MAAM;AACR,eAAK,aAAa,QAAQ,CAAC,UAAU,MAAM,KAAK,CAAC;AACjD,kBAAQ,IAAI,MAAM;AAClB,iBAAO,KAAK,IAAI;AAAA,QAClB;AAEA,iBAAS,OAAO,MAAM;AAAA,MACxB;AAAA,IACF;AAEA,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,CAAC,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7B,cAAM,KAAK,MAAM;AAAA,MACnB;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;AAOA,IAAI,OAAkC;AAEpC,QAAM,MAAM,IAAI,gBAAgB;AAGhC,QAAM,QAAQ,IAAI,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,wBAAwB;AAAA,EAC1B,CAAC;AAED,QAAM,QAAQ,IAAI,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,CAAC,MAAM,MAAM;AAAA,IAC3B,wBAAwB;AAAA,EAC1B,CAAC;AAED,QAAM,QAAQ,IAAI,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,CAAC,MAAM,MAAM;AAAA,IAC3B,wBAAwB;AAAA,EAC1B,CAAC;AAED,QAAM,QAAQ,IAAI,aAAa;AAAA,IAC7B,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc,CAAC,MAAM,QAAQ,MAAM,MAAM;AAAA,IACzC,wBAAwB;AAAA,EAC1B,CAAC;AAGD,UAAQ,IAAI,qBAAqB,IAAI,aAAa,MAAM,MAAM,CAAC;AAC/D,UAAQ,IAAI,qBAAqB,IAAI,aAAa,MAAM,MAAM,CAAC;AAG/D,MAAI,iBAAiB,MAAM,QAAQ,aAAa;AAAA,IAC9C,OAAO,CAAC,mBAAmB;AAAA,IAC3B,YAAY,CAAC,EAAE,MAAM,QAAQ,MAAM,oBAAoB,CAAC;AAAA,IACxD,UAAU;AAAA,MACR,OAAO,EAAE,UAAU,8BAA8B;AAAA,IACnD;AAAA,EACF,CAAC;AAGD,UAAQ,IAAI,qBAAqB,IAAI,aAAa,MAAM,MAAM,CAAC;AAG/D,UAAQ,IAAI,aAAa,IAAI,kBAAkB,CAAC;AAGhD,QAAM,WAAW,IAAI,iBAAiB,GAAG;AACzC,QAAM,QAAQ,SAAS,YAAY,IAAI,YAAY,CAAC;AAEpD,UAAQ,IAAI,gBAAgB,MAAM,MAAM,SAAS;AACjD,QAAM,QAAQ,CAAC,MAAM,MAAM;AACzB,YAAQ;AAAA,MACN,QAAQ,IAAI,CAAC;AAAA,MACb,KAAK,IAAI,CAAC,MAAM,EAAE,WAAW;AAAA,IAC/B;AAAA,EACF,CAAC;AACH;","names":["parseToml"]}