{"version":3,"sources":["../node_modules/tsup/assets/cjs_shims.js","../src/utils/config.ts","../src/utils/manifest.ts","../src/commands/env.ts","../src/utils/version.ts","../src/commands/sync-rules.ts","../src/commands/genesis.ts","../src/commands/suggest.ts","../src/utils/skills-provisioner.ts","../src/utils/governance.ts","../src/utils/watchdog.ts","../../../node_modules/fast-glob/out/utils/array.js","../../../node_modules/fast-glob/out/utils/errno.js","../../../node_modules/fast-glob/out/utils/fs.js","../../../node_modules/fast-glob/out/utils/path.js","../../../node_modules/is-extglob/index.js","../../../node_modules/is-glob/index.js","../../../node_modules/glob-parent/index.js","../../../node_modules/braces/lib/utils.js","../../../node_modules/braces/lib/stringify.js","../../../node_modules/is-number/index.js","../../../node_modules/to-regex-range/index.js","../../../node_modules/fill-range/index.js","../../../node_modules/braces/lib/compile.js","../../../node_modules/braces/lib/expand.js","../../../node_modules/braces/lib/constants.js","../../../node_modules/braces/lib/parse.js","../../../node_modules/braces/index.js","../../../node_modules/picomatch/lib/constants.js","../../../node_modules/picomatch/lib/utils.js","../../../node_modules/picomatch/lib/scan.js","../../../node_modules/picomatch/lib/parse.js","../../../node_modules/picomatch/lib/picomatch.js","../../../node_modules/picomatch/index.js","../../../node_modules/micromatch/index.js","../../../node_modules/fast-glob/out/utils/pattern.js","../../../node_modules/merge2/index.js","../../../node_modules/fast-glob/out/utils/stream.js","../../../node_modules/fast-glob/out/utils/string.js","../../../node_modules/fast-glob/out/utils/index.js","../../../node_modules/fast-glob/out/managers/tasks.js","../../../node_modules/@nodelib/fs.stat/out/providers/async.js","../../../node_modules/@nodelib/fs.stat/out/providers/sync.js","../../../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../../../node_modules/@nodelib/fs.stat/out/settings.js","../../../node_modules/@nodelib/fs.stat/out/index.js","../../../node_modules/queue-microtask/index.js","../../../node_modules/run-parallel/index.js","../../../node_modules/@nodelib/fs.scandir/out/constants.js","../../../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../../../node_modules/@nodelib/fs.scandir/out/utils/index.js","../../../node_modules/@nodelib/fs.scandir/out/providers/common.js","../../../node_modules/@nodelib/fs.scandir/out/providers/async.js","../../../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../../../node_modules/@nodelib/fs.scandir/out/settings.js","../../../node_modules/@nodelib/fs.scandir/out/index.js","../../../node_modules/reusify/reusify.js","../../../node_modules/fastq/queue.js","../../../node_modules/@nodelib/fs.walk/out/readers/common.js","../../../node_modules/@nodelib/fs.walk/out/readers/reader.js","../../../node_modules/@nodelib/fs.walk/out/readers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/stream.js","../../../node_modules/@nodelib/fs.walk/out/readers/sync.js","../../../node_modules/@nodelib/fs.walk/out/providers/sync.js","../../../node_modules/@nodelib/fs.walk/out/settings.js","../../../node_modules/@nodelib/fs.walk/out/index.js","../../../node_modules/fast-glob/out/readers/reader.js","../../../node_modules/fast-glob/out/readers/stream.js","../../../node_modules/fast-glob/out/readers/async.js","../../../node_modules/fast-glob/out/providers/matchers/matcher.js","../../../node_modules/fast-glob/out/providers/matchers/partial.js","../../../node_modules/fast-glob/out/providers/filters/deep.js","../../../node_modules/fast-glob/out/providers/filters/entry.js","../../../node_modules/fast-glob/out/providers/filters/error.js","../../../node_modules/fast-glob/out/providers/transformers/entry.js","../../../node_modules/fast-glob/out/providers/provider.js","../../../node_modules/fast-glob/out/providers/async.js","../../../node_modules/fast-glob/out/providers/stream.js","../../../node_modules/fast-glob/out/readers/sync.js","../../../node_modules/fast-glob/out/providers/sync.js","../../../node_modules/fast-glob/out/settings.js","../../../node_modules/fast-glob/out/index.js","../src/utils/hasher.ts","../src/utils/nexus.ts","../src/index.ts","../src/commands/login.ts","../src/commands/link.ts","../src/commands/scan.ts","../src/utils/files.ts","../src/commands/fix.ts","../src/commands/sync.ts","../src/commands/init.ts","../src/commands/check.ts","../src/utils/rule-engine.ts","../src/commands/hooks.ts","../src/commands/daemon.ts","../src/daemon/factory.ts","../src/daemon/core.ts","../src/daemon/file-watcher.ts","../src/daemon/heuristic-engine.ts","../src/daemon/intervention-protocol.ts","../src/daemon/guardian-monitor.ts","../src/daemon/bridge-listener.ts","../src/daemon/telemetry.ts","../src/utils/logger.ts","../src/daemon/harvester.ts","../src/daemon/violation-manager.ts","../src/daemon/stats-reporter.ts","../src/daemon/plan-watcher.ts","../src/utils/markdown-parser.ts","../src/utils/service-manager.ts","../src/commands/work.ts","../src/commands/plan.ts","../src/commands/watch.ts","../src/commands/focus.ts","../src/commands/config.ts","../src/commands/mcp.ts","../src/commands/nexus.ts","../src/nexus/dispatcher.ts","../src/hive/gateway.ts","../src/hive/scrubber.ts","../src/commands/override.ts","../src/commands/idea.ts","../src/commands/release.ts","../src/commands/roadmap.ts","../src/commands/council.ts","../src/commands/remember.ts","../src/utils/memory-store.ts","../src/commands/ask.ts","../src/commands/monitor.ts","../src/components/Dashboard.tsx","../src/components/monitor/use-monitor-logic.ts","../src/components/monitor/factory.ts","../src/components/monitor/use-fetch-data.ts","../src/utils/api.ts","../src/components/monitor/use-command-handler.ts","../src/components/monitor/system-status.tsx","../src/components/monitor/active-mission.tsx","../src/components/monitor/daemon-feed.tsx","../src/components/monitor/command-bar.tsx","../src/components/monitor/nexus-alerts.tsx","../src/components/monitor/predictive-insights.tsx","../src/commands/antidote.ts","../src/commands/heal.ts","../src/commands/commit.ts","../src/commands/next.ts","../src/utils/state-analyzer.ts","../src/commands/history.ts","../src/commands/boot.ts","../src/utils/ide.ts","../src/utils/sovereignty.ts","../package.json"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n  typeof document === \"undefined\" \n    ? new URL(`file:${__filename}`).href \n    : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n      ? document.currentScript.src \n      : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import Conf from 'conf';\nimport axios from 'axios';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\ninterface RigstateConfig {\n    apiKey?: string;\n    projectId?: string;\n    apiUrl?: string;\n}\n\nconst config = new Conf<RigstateConfig>({\n    projectName: 'rigstate-cli',\n    defaults: {\n        apiUrl: 'https://app.rigstate.com',\n    },\n});\n\n/**\n * Get the stored API key\n * @throws {Error} If no API key is found (user not logged in)\n */\nexport function getApiKey(): string {\n    // 1. Check local manifest first (Folder Affinity)\n    try {\n        const cwd = process.cwd();\n        const manifestPaths = [\n            path.join(cwd, '.rigstate', 'identity.json'),\n            path.join(cwd, '.rigstate')\n        ];\n\n        for (const manifestPath of manifestPaths) {\n            if (fs.existsSync(manifestPath) && fs.statSync(manifestPath).isFile()) {\n                const content = fs.readFileSync(manifestPath, 'utf-8');\n                const manifest = JSON.parse(content);\n                if (manifest.api_key) return manifest.api_key;\n            }\n        }\n    } catch (e) { /* Fallback */ }\n\n    // 2. Check environment variable\n    if (process.env.RIGSTATE_API_KEY) {\n        return process.env.RIGSTATE_API_KEY;\n    }\n\n    // 3. Fall back to global config\n    const apiKey = config.get('apiKey');\n    if (!apiKey) {\n        throw new Error(\n            '❌ Not logged in. Please run \"rigstate login <your-api-key>\" first.'\n        );\n    }\n    return apiKey;\n}\n\n/**\n * Set the API key\n */\nexport function setApiKey(key: string): void {\n    config.set('apiKey', key);\n}\n\n/**\n * Get the default project ID (if set)\n */\nexport function getProjectId(): string | undefined {\n    // 1. Check local manifest first (Folder Affinity)\n    try {\n        const cwd = process.cwd();\n        const manifestPaths = [\n            path.join(cwd, '.rigstate', 'identity.json'),\n            path.join(cwd, '.rigstate')\n        ];\n\n        for (const manifestPath of manifestPaths) {\n            if (fs.existsSync(manifestPath) && fs.statSync(manifestPath).isFile()) {\n                const content = fs.readFileSync(manifestPath, 'utf-8');\n                const manifest = JSON.parse(content);\n                if (manifest.project_id) {\n                    console.log(chalk.dim(`   [Auth] Context: Project ID ${manifest.project_id.substring(0, 8)}... (from ${path.basename(manifestPath)})`));\n                    return manifest.project_id;\n                }\n            }\n        }\n    } catch (e: any) {\n        console.log(chalk.red(`   [Error] Failed to read context: ${e.message}`));\n    }\n\n    // 2. Check environment variable\n    if (process.env.RIGSTATE_PROJECT_ID) {\n        console.log(chalk.dim(`   [Auth] Context: Project ID ${process.env.RIGSTATE_PROJECT_ID.substring(0, 8)}... (from ENV)`));\n        return process.env.RIGSTATE_PROJECT_ID;\n    }\n\n    // 3. Fall back to global config\n    const globalId = config.get('projectId');\n    return globalId;\n}\n\n/**\n * Set the default project ID\n */\nexport function setProjectId(projectId: string): void {\n    config.set('projectId', projectId);\n}\n\n/**\n * Get the API URL (Synchronous)\n * Priority: Environment variable > Stored config > Production default\n */\nexport function getApiUrl(): string {\n    let url = '';\n    // 1. Check local manifest first\n    try {\n        const cwd = process.cwd();\n        const manifestPaths = [\n            path.join(cwd, '.rigstate', 'identity.json'),\n            path.join(cwd, '.rigstate')\n        ];\n\n        for (const manifestPath of manifestPaths) {\n            if (fs.existsSync(manifestPath) && fs.statSync(manifestPath).isFile()) {\n                const content = fs.readFileSync(manifestPath, 'utf-8');\n                const manifest = JSON.parse(content);\n                if (manifest.api_url) {\n                    url = manifest.api_url;\n                    break;\n                }\n            }\n        }\n    } catch (e) { /* Fallback */ }\n\n    // 2. Check environment variable next\n    if (!url && process.env.RIGSTATE_API_URL) {\n        url = process.env.RIGSTATE_API_URL;\n    }\n    // 3. Check stored config\n    if (!url) {\n        url = config.get('apiUrl') as string;\n    }\n    // 4. Default to production\n    if (!url) {\n        url = 'https://app.rigstate.com';\n    }\n\n    // Clean URL\n    return url.replace(/\\/+$/, '');\n}\n\n/**\n * Set the API URL\n */\nexport function setApiUrl(url: string): void {\n    config.set('apiUrl', url);\n}\n\n/**\n * Clear all config\n */\nexport function clearConfig(): void {\n    config.clear();\n}\n\nexport { config };\n","import fs from 'fs/promises';\nimport fsSync from 'fs';\nimport path from 'path';\n\nexport interface RigstateManifest {\n    project_id: string;\n    api_url?: string;\n    linked_at?: string;\n    api_key?: string;\n    // Genesis Protocol status (cached locally to avoid API calls)\n    genesis_complete?: boolean;\n    genesis_template?: string;\n    genesis_stack_key?: string;\n    genesis_initialized_at?: string;\n}\n\n\nexport async function loadManifest(): Promise<RigstateManifest | null> {\n    const cwd = process.cwd();\n    const manifestPaths = [\n        path.join(cwd, '.rigstate', 'identity.json'),\n        path.join(cwd, '.rigstate')\n    ];\n\n    for (const p of manifestPaths) {\n        try {\n            if (fsSync.existsSync(p) && fsSync.statSync(p).isFile()) {\n                const content = await fs.readFile(p, 'utf-8');\n                const data = JSON.parse(content);\n\n                // Handle both flat manifest and identity.json schema\n                return {\n                    project_id: data.project?.id || data.project_id,\n                    api_url: data.api_url,\n                    linked_at: data.linked_at || data.project?.created_at,\n                    api_key: data.api_key\n                };\n            }\n        } catch (e) {\n            continue;\n        }\n    }\n    return null;\n}\n\n/**\n * Saves project context to the local manifest.\n * Prioritizes .rigstate/identity.json if the directory exists.\n */\nexport async function saveManifest(data: Partial<RigstateManifest>): Promise<string> {\n    const cwd = process.cwd();\n    const rigstatePath = path.join(cwd, '.rigstate');\n    let targetFile = rigstatePath;\n\n    try {\n        const stats = await fs.stat(rigstatePath);\n        if (stats.isDirectory()) {\n            targetFile = path.join(rigstatePath, 'identity.json');\n        }\n    } catch (e) {\n        // Doesn't exist, will be created as file/dir below\n    }\n\n    // Load existing to merge\n    const existing = await loadManifest() || {} as RigstateManifest;\n    const merged = { ...existing, ...data };\n\n    // If we need to create a directory for identity.json\n    if (targetFile.endsWith('identity.json')) {\n        await fs.mkdir(rigstatePath, { recursive: true });\n    }\n\n    await fs.writeFile(targetFile, JSON.stringify(merged, null, 2), 'utf-8');\n    return targetFile;\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { getApiKey, getProjectId, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\n\n// Core Logic (Exported for re-use)\nexport async function syncEnv(projectId: string, apiKey: string, apiUrl: string, silent = false): Promise<boolean> {\n    if (!silent) {\n        console.log('');\n        console.log(chalk.bold.yellow('╔══════════════════════════════════════════╗'));\n        console.log(chalk.bold.yellow('║') + chalk.bold.white('  🛡️  RIGSTATE SOVEREIGN VAULT SYNC  🛡️   ') + chalk.bold.yellow('║'));\n        console.log(chalk.bold.yellow('╚══════════════════════════════════════════╝'));\n        console.log('');\n    }\n\n    const spinner = ora('Fetching secrets from Vault...').start();\n\n    try {\n        const response = await axios.post(`${apiUrl}/api/v1/vault/sync`, {\n            project_id: projectId\n        }, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (!response.data.success) {\n            throw new Error(response.data.error || 'Failed to fetch secrets');\n        }\n\n        const vaultContent = response.data.data.content || '';\n        const secretCount = response.data.data.count || 0;\n\n        if (secretCount === 0) {\n            spinner.info('No secrets found in Vault for this project.');\n            if (!silent) console.log(chalk.dim('  Add secrets via the Rigstate web interface.'));\n            return true;\n        }\n\n        spinner.succeed(`Retrieved ${chalk.bold(secretCount)} secret(s)`);\n\n        // Read existing .env.local for comparison\n        const envFile = path.resolve(process.cwd(), '.env.local');\n        let existingContent = '';\n        let existingKeys: Set<string> = new Set();\n\n        try {\n            existingContent = await fs.readFile(envFile, 'utf-8');\n            // Parse existing keys\n            existingContent.split('\\n').forEach(line => {\n                const match = line.match(/^([A-Z_][A-Z0-9_]*)=/);\n                if (match) existingKeys.add(match[1]);\n            });\n        } catch (e) {\n            // File doesn't exist\n        }\n\n        // Parse vault keys\n        const vaultKeys: Set<string> = new Set();\n        vaultContent.split('\\n').forEach((line: string) => {\n            const match = line.match(/^([A-Z_][A-Z0-9_]*)=/);\n            if (match) vaultKeys.add(match[1]);\n        });\n\n        // Calculate changes\n        let newCount = 0;\n        let updatedCount = 0;\n\n        vaultKeys.forEach(key => {\n            if (!existingKeys.has(key)) {\n                newCount++;\n            } else {\n                updatedCount++;\n            }\n        });\n\n        const unchangedCount = existingKeys.size - updatedCount;\n\n        // Write new .env.local\n        spinner.start('Writing .env.local...');\n\n        const header = [\n            '# ==========================================',\n            '# RIGSTATE SOVEREIGN FOUNDATION',\n            '# Authenticated Environment Configuration',\n            `# Synced at: ${new Date().toISOString()}`,\n            `# Project: ${projectId}`,\n            '# ==========================================',\n            ''\n        ].join('\\n');\n\n        await fs.writeFile(envFile, header + vaultContent + '\\n');\n        spinner.succeed('Written to .env.local');\n\n        if (!silent) {\n            // Summary\n            console.log('');\n            console.log(chalk.bold.green('✅ Environment synchronized successfully'));\n            console.log('');\n            console.log(chalk.dim('   Summary:'));\n            console.log(chalk.green(`   + ${newCount} new`));\n            console.log(chalk.yellow(`   ~ ${updatedCount} updated`));\n            console.log(chalk.dim(`   = ${unchangedCount} unchanged`));\n            console.log('');\n\n            // Security reminder\n            console.log(chalk.bold.yellow('⚠️  Security Reminder:'));\n            console.log(chalk.dim('   - Never commit .env.local to version control.'));\n            console.log(chalk.dim('   - Ensure .gitignore includes .env.local'));\n            console.log('');\n        }\n        return true;\n\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Failed to fetch secrets: ${e.message}`));\n        return false;\n    }\n}\n\nexport function createEnvPullCommand() {\n    const envPull = new Command('env');\n\n    envPull\n        .command('pull')\n        .description('Pull environment variables from project vault')\n        .action(async () => {\n            // Get config\n            let apiKey: string;\n            let projectId: string | undefined;\n\n            try {\n                apiKey = getApiKey();\n            } catch (e) {\n                console.error(chalk.red('Not authenticated. Run \"rigstate login\" first.'));\n                return;\n            }\n\n            // Get project context\n            projectId = getProjectId();\n\n            if (!projectId) {\n                const { loadManifest } = await import('../utils/manifest.js');\n                const manifest = await loadManifest();\n                if (manifest?.project_id) projectId = manifest.project_id;\n            }\n\n            if (!projectId) {\n                console.error(chalk.red('No project context. Run \"rigstate link\" first.'));\n                return;\n            }\n\n            const apiUrl = getApiUrl();\n            await syncEnv(projectId, apiKey, apiUrl);\n        });\n\n    return envPull;\n}\n","// Single source of truth for version to avoid require/import issues with package.json in ESM/TS\nexport const CLI_VERSION = '0.7.34';\n\nexport async function checkVersion() {\n    // Placeholder for future update checks\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\nimport { CLI_VERSION } from '../utils/version.js';\n\ninterface SyncResult {\n    projectId: string;\n    projectName: string;\n    status: 'success' | 'failed';\n    error?: string;\n}\n\n// Core Logic (Exported for re-use)\nexport async function syncProjectRules(projectId: string, apiKey: string, apiUrl: string, dryRun = false, version: string = CLI_VERSION): Promise<boolean> {\n    const spinner = ora('🛡️ Frank Protocol: Initializing retroactive sync...').start();\n    let success = true;\n\n    try {\n        // Fetch project to get name\n        spinner.text = 'Fetching project info...';\n        const projectRes = await axios.get(`${apiUrl}/api/v1/projects`, {\n            params: { project_id: projectId },\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (!projectRes.data.success || !projectRes.data.data.projects?.length) {\n            throw new Error('Project not found');\n        }\n\n        const project = projectRes.data.data.projects[0];\n        spinner.text = `Syncing rules for ${project.name}...`;\n\n        if (dryRun) {\n            spinner.succeed(chalk.yellow(`  [DRY-RUN] Would sync: ${project.name}`));\n            return true;\n        }\n\n        // Call API to regenerate and sync rules\n        const syncResponse = await axios.post(`${apiUrl}/api/v1/rules/sync`, {\n            project_id: project.id\n        }, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (syncResponse.data.success) {\n            if (syncResponse.data.data.github_synced) {\n                spinner.succeed(chalk.green(`  ✅ ${project.name} [${project.id}] → GitHub synced`));\n            } else {\n                spinner.info(chalk.blue(`  ℹ️ ${project.name} [${project.id}] → Rules generated (no GitHub)`));\n            }\n\n            const files = syncResponse.data.data.files;\n            if (files && Array.isArray(files)) {\n                const fs = await import('fs/promises');\n                const path = await import('path');\n\n                // 1. Write individual rule files\n                for (const file of files) {\n                    const filePath = path.join(process.cwd(), file.path);\n                    await fs.mkdir(path.dirname(filePath), { recursive: true });\n                    await fs.writeFile(filePath, file.content, 'utf-8');\n                }\n                console.log(chalk.dim(`      💾 Wrote ${files.length} rule files to local .cursor/rules/`));\n\n                // 2. Update Master .cursorrules (The Constitution)\n                try {\n                    const masterPath = path.join(process.cwd(), '.cursorrules');\n                    let masterContent = '';\n                    try {\n                        masterContent = await fs.readFile(masterPath, 'utf-8');\n                    } catch {\n                        // File doesn't exist, create fresh\n                        masterContent = '';\n                    }\n\n                    const START_MARKER = '<!-- RIGSTATE_GOVERNANCE_START -->';\n                    const END_MARKER = '<!-- RIGSTATE_GOVERNANCE_END -->';\n\n                    const ruleList = files\n                        .map(f => f.path)\n                        .filter(p => p.endsWith('.mdc'))\n                        .map(p => `- ${p}`)\n                        .join('\\n');\n\n                    const governanceBlock = `${START_MARKER}\n# 🛡️ Rigstate Governance (Do not edit this block manually)\n# The following rules are enforced by the Rigstate Daemon (v${version}).\n# Failure to adhere to these rules will be flagged during the 'work' cycle.\n\n# YOU MUST ADHERE TO THESE PROACTIVE RULES:\n${ruleList}\n\n# INSTRUCTIONS FOR AI AGENT:\n# 1. You MUST read the relevant .mdc files in .cursor/rules/ before generating code.\n# 2. If a rule in .cursor/rules/ conflicts with your training, OBEY THE RULE.\n# 3. Consult .rigstate/ACTIVE_VIOLATIONS.md for current architectural health.\n${END_MARKER}`;\n\n                    let newContent = masterContent;\n                    if (masterContent.includes(START_MARKER)) {\n                        // Replace existing block\n                        const regex = new RegExp(`${START_MARKER}[\\\\s\\\\S]*?${END_MARKER}`, 'g');\n                        newContent = masterContent.replace(regex, governanceBlock);\n                    } else {\n                        // Append block (with newline buffer if needed)\n                        newContent = masterContent ? `${masterContent}\\n\\n${governanceBlock}` : governanceBlock;\n                    }\n\n                    await fs.writeFile(masterPath, newContent, 'utf-8');\n                    console.log(chalk.dim('      📜 Updated master .cursorrules (Constitution enforced)'));\n\n                } catch (e: any) {\n                    console.warn(chalk.yellow(`      ⚠️  Could not update .cursorrules: ${e.message}`));\n                }\n            }\n\n            console.log('');\n            console.log(chalk.cyan('🛡️ Frank Protocol v1.0 has been injected into the rules engine.'));\n            console.log(chalk.dim('   All new chats will now boot with mandatory governance checks.'));\n        } else {\n            spinner.warn(chalk.yellow(`  ⚠️ ${project.name} → ${syncResponse.data.error || 'Unknown error'}`));\n            success = false;\n        }\n\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Sync failed: ${e.message}`));\n        success = false;\n    }\n    return success;\n}\n\nexport function createSyncRulesCommand() {\n    const syncRules = new Command('sync-rules');\n\n    syncRules\n        .description('🛡️ Push Frank Protocol v1.0 to all existing projects')\n        .option('--dry-run', 'Preview changes without pushing to GitHub')\n        .option('--project <id>', 'Sync a specific project only')\n        .action(async (options) => {\n            // CLI specific logic (handling multiple projects etc) is kept here or simplified\n            // For now, let's just support single project sync via re-used logic if project ID is clear\n\n            // Get config\n            let apiKey: string;\n            try {\n                apiKey = getApiKey();\n            } catch (e) {\n                console.error(chalk.red('Not authenticated. Run \"rigstate login\" first.'));\n                return;\n            }\n\n            const apiUrl = getApiUrl();\n\n            // ... (Logic to select project is skipped for brevity in this refactor step, assumes --project or .env)\n            // In a real refactor we would extract project selection too.\n            // For Link command integration, direct ID is passed, so syncProjectRules is enough.\n\n            if (options.project) {\n                await syncProjectRules(options.project, apiKey, apiUrl, options.dryRun);\n            } else {\n                console.log(chalk.yellow('Use --project <id> for now. (Mass sync logic awaiting migration)'));\n            }\n        });\n\n    return syncRules;\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Types\n// ─────────────────────────────────────────────────────────────────────────────\ninterface GenesisStep {\n    id: string;\n    title: string;\n    step_number: number;\n    icon: string;\n    verification_path?: string;\n}\n\ninterface GenesisStatusResponse {\n    success: boolean;\n    data: {\n        genesis_complete: boolean;\n        genesis_steps: GenesisStep[];\n        genesis_count: number;\n        total_roadmap_steps: number;\n        detected_template: string;\n        detected_stack_key: string;\n        project_name: string;\n    };\n    error?: string;\n}\n\ninterface GenesisTriggerResponse {\n    success: boolean;\n    simulation?: boolean;\n    data: {\n        project_name: string;\n        template: string;\n        stack_key: string;\n        steps_created: number;\n        steps: GenesisStep[];\n        existing_steps_shifted: number;\n        message: string;\n    };\n    error?: string;\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Command Definition\n// ─────────────────────────────────────────────────────────────────────────────\nexport function createGenesisCommand(): Command {\n    return new Command('genesis')\n        .description('Initialize project foundation (Phase 0). Detects stack and injects foundation steps.')\n        .option('--force', 'Re-run genesis even if already initialized (use with caution)')\n        .option('--simulate', 'Dry-run: Calculate plan without modifying database')\n        .option('--status', 'Check genesis status without triggering')\n        .option('--project-id <id>', 'Override project ID (defaults to linked project)')\n        .action(async (options) => {\n            const apiKey = getApiKey();\n            const apiUrl = getApiUrl();\n            const projectId = options.projectId || getProjectId();\n\n            if (!projectId) {\n                console.error(chalk.red('❌ No project linked. Run: rigstate link'));\n                process.exit(1);\n            }\n\n            if (!apiKey) {\n                console.error(chalk.red('❌ Not authenticated. Run: rigstate login'));\n                process.exit(1);\n            }\n\n            if (options.status) {\n                await checkGenesisStatus(projectId, apiKey, apiUrl);\n            } else {\n                await triggerGenesis(projectId, apiKey, apiUrl, options.force ?? false, options.simulate ?? false);\n            }\n        });\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Status Check\n// ─────────────────────────────────────────────────────────────────────────────\nexport async function checkGenesisStatus(\n    projectId: string,\n    apiKey: string,\n    apiUrl: string\n): Promise<{ complete: boolean; stepCount: number }> {\n    // ── Offline-first: check local manifest cache ─────────────────────────────\n    try {\n        const { loadManifest } = await import('../utils/manifest.js');\n        const manifest = await loadManifest();\n        if (manifest?.genesis_complete) {\n            // Local cache hit — skip API call\n            return { complete: true, stepCount: 0 }; // stepCount not cached, but complete is enough\n        }\n    } catch {\n        // Ignore manifest read errors\n    }\n\n    const spinner = ora('Checking Genesis status...').start();\n\n    try {\n        const response = await axios.get<GenesisStatusResponse>(\n            `${apiUrl}/api/v1/genesis`,\n            {\n                params: { project_id: projectId },\n                headers: { Authorization: `Bearer ${apiKey}` },\n                timeout: 10000\n            }\n        );\n\n        spinner.stop();\n\n        if (!response.data.success) {\n            console.log(chalk.yellow(`⚠️  Could not check genesis status: ${response.data.error}`));\n            return { complete: false, stepCount: 0 };\n        }\n\n        const { data } = response.data;\n\n        console.log('');\n        console.log(chalk.bold('🏗️  GENESIS STATUS'));\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log(`${chalk.bold('Project:')}        ${chalk.cyan(data.project_name)}`);\n        console.log(`${chalk.bold('Stack:')}          ${chalk.magenta(data.detected_template)}`);\n        console.log(`${chalk.bold('Genesis:')}        ${data.genesis_complete ? chalk.green('✅ Complete') : chalk.yellow('⚠️  Pending')}`);\n        console.log(`${chalk.bold('Foundation:')}     ${chalk.white(data.genesis_count)} steps`);\n        console.log(`${chalk.bold('Total Roadmap:')}  ${chalk.white(data.total_roadmap_steps)} steps`);\n\n        if (data.genesis_complete && data.genesis_steps.length > 0) {\n            console.log('');\n            console.log(chalk.dim('Foundation Steps:'));\n            data.genesis_steps.forEach(step => {\n                console.log(`  ${step.icon}  ${chalk.bold(`T-${step.step_number}`)}: ${step.title}`);\n            });\n        } else if (!data.genesis_complete) {\n            console.log('');\n            console.log(chalk.yellow('⚡ Genesis not yet initialized.'));\n            console.log(chalk.dim('   Run: ') + chalk.white('rigstate genesis'));\n        }\n\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log('');\n\n        return { complete: data.genesis_complete, stepCount: data.genesis_count };\n\n    } catch (err: any) {\n        spinner.stop();\n        if (err.response?.status === 422) {\n            console.log(chalk.yellow('⚠️  Genesis pending: Complete onboarding with Frank first.'));\n            console.log(chalk.dim('   Then run: rigstate genesis'));\n        }\n        return { complete: false, stepCount: 0 };\n    }\n}\n\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Trigger Genesis\n// ─────────────────────────────────────────────────────────────────────────────\nexport async function triggerGenesis(\n    projectId: string,\n    apiKey: string,\n    apiUrl: string,\n    force = false,\n    simulate = false\n): Promise<boolean> {\n    console.log('');\n    if (simulate) {\n        console.log(chalk.bold.magenta('🔮 GENESIS SIMULATION'));\n        console.log(chalk.dim('Dry-run: Calculating plan without executing changes...'));\n    } else {\n        console.log(chalk.bold.blue('🏗️  GENESIS PROTOCOL'));\n        console.log(chalk.dim('Initializing project foundation...'));\n    }\n    console.log('');\n\n    const spinner = ora('Detecting tech stack...').start();\n\n    try {\n        // Step 1: Check status first (unless force)\n        if (!force) {\n            const statusRes = await axios.get<GenesisStatusResponse>(\n                `${apiUrl}/api/v1/genesis`,\n                {\n                    params: { project_id: projectId },\n                    headers: { Authorization: `Bearer ${apiKey}` },\n                    timeout: 10000\n                }\n            );\n\n            if (statusRes.data.success && statusRes.data.data.genesis_complete) {\n                spinner.stop();\n                console.log(chalk.green('✅ Genesis already complete.'));\n                console.log(chalk.dim(`   ${statusRes.data.data.genesis_count} foundation steps already in roadmap.`));\n                console.log(chalk.dim('   Use --force to re-initialize.'));\n                console.log('');\n                return true;\n            }\n\n            if (statusRes.data.success) {\n                spinner.text = `Stack detected: ${statusRes.data.data.detected_template}. Generating foundation...`;\n            }\n        } else {\n            spinner.text = 'Force mode: Re-generating foundation...';\n        }\n\n        // Step 2: Trigger Genesis\n        const response = await axios.post<GenesisTriggerResponse>(\n            `${apiUrl}/api/v1/genesis`,\n            { project_id: projectId, force, simulate },\n            {\n                headers: { Authorization: `Bearer ${apiKey}` },\n                timeout: 60000 // AI enrichment can take time\n            }\n        );\n\n        spinner.stop();\n\n        if (!response.data.success) {\n            // Handle specific error cases\n            if ((response as any).status === 409) {\n                console.log(chalk.yellow('⚠️  Genesis already initialized. Use --force to re-run.'));\n                return true;\n            }\n            if ((response as any).status === 422) {\n                console.log('');\n                console.log(chalk.yellow('⚠️  Cannot initialize Genesis yet.'));\n                console.log(chalk.dim('   Complete onboarding with Frank first to define your tech stack.'));\n                console.log(chalk.dim('   Then run: ') + chalk.white('rigstate genesis'));\n                console.log('');\n                return false;\n            }\n            console.error(chalk.red(`❌ Genesis failed: ${response.data.error}`));\n            return false;\n        }\n\n        const { data } = response.data;\n\n        // ── Simulation Output ─────────────────────────────────────────────────\n        if (response.data.simulation) {\n            console.log(chalk.bold.magenta('🔮 SIMULATION RESULTS'));\n            console.log(chalk.dim('────────────────────────────────────────'));\n            console.log(`${chalk.bold('Project:')}      ${chalk.cyan(data.project_name)}`);\n            console.log(`${chalk.bold('Stack:')}        ${chalk.magenta(data.template)}`);\n            console.log(`${chalk.bold('Will Create:')}  ${chalk.white(data.steps_created)} foundation steps`);\n\n            if (data.existing_steps_shifted > 0) {\n                console.log(`${chalk.bold('Will Shift:')}   ${chalk.yellow(`${data.existing_steps_shifted} existing steps down`)}`);\n            }\n\n            console.log('');\n            console.log(chalk.bold('📋 Planner Preview:'));\n            data.steps.forEach(step => {\n                const stepNum = step.step_number;\n                // In simulation, step numbers returned might be 1-based index relative to insert, \n                // but usually the AI/Builder assigns them relative to start.\n                console.log(`  ${step.icon || '🔹'}  ${chalk.bold(`T-${stepNum}`)}: ${step.title}`);\n                if (step.verification_path) {\n                    console.log(`       ${chalk.dim(`Verify: ${step.verification_path}`)}`);\n                }\n            });\n            console.log('');\n            console.log(chalk.dim('To execute this plan, run without --simulate.'));\n            return true;\n        }\n\n        // ── Success Output ────────────────────────────────────────────────────\n        console.log(chalk.bold.green('✅ GENESIS COMPLETE'));\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log(`${chalk.bold('Project:')}   ${chalk.cyan(data.project_name)}`);\n        console.log(`${chalk.bold('Stack:')}     ${chalk.magenta(data.template)}`);\n        console.log(`${chalk.bold('Created:')}   ${chalk.white(data.steps_created)} foundation steps`);\n\n        if (data.existing_steps_shifted > 0) {\n            console.log(`${chalk.bold('Shifted:')}   ${chalk.dim(`${data.existing_steps_shifted} existing steps moved down`)}`);\n        }\n\n        console.log('');\n        console.log(chalk.bold('📋 Foundation Steps:'));\n        data.steps.forEach(step => {\n            console.log(`  ${step.icon}  ${chalk.bold(`T-${step.step_number}`)}: ${step.title}`);\n            if (step.verification_path) {\n                console.log(`       ${chalk.dim(`Verify: ${step.verification_path}`)}`);\n            }\n        });\n\n        console.log('');\n        console.log(chalk.bold.yellow('⚡ NEXT MOVE:'));\n        if (data.steps.length > 0) {\n            const firstStep = data.steps[0];\n            console.log(`  ${chalk.white(`> rigstate work start ${firstStep.id}`)}  ${chalk.dim(`(Start: ${firstStep.title})`)}`);\n        }\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log('');\n\n        // ── Persist genesis status to local manifest (enables offline checks) ──\n        try {\n            const { saveManifest } = await import('../utils/manifest.js');\n            await saveManifest({\n                genesis_complete: true,\n                genesis_template: data.template,\n                genesis_stack_key: data.stack_key,\n                genesis_initialized_at: new Date().toISOString()\n            });\n        } catch {\n            // Non-critical: local cache write failure doesn't break the flow\n        }\n\n        return true;\n\n\n    } catch (err: any) {\n        spinner.stop();\n\n        // Handle axios error responses\n        if (err.response?.status === 409) {\n            console.log(chalk.green('✅ Genesis already complete.'));\n            console.log(chalk.dim('   Use --force to re-initialize.'));\n            return true;\n        }\n\n        if (err.response?.status === 422) {\n            console.log('');\n            console.log(chalk.yellow('⚠️  Genesis pending: Onboarding not complete.'));\n            console.log(chalk.dim('   Finish the Frank conversation to define your tech stack.'));\n            console.log(chalk.dim('   Then run: ') + chalk.white('rigstate genesis'));\n            console.log('');\n            return false;\n        }\n\n        if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {\n            console.log(chalk.dim('   (Genesis skipped: API unreachable)'));\n            return false;\n        }\n\n        console.error(chalk.red(`❌ Genesis error: ${err.response?.data?.error || err.message}`));\n        return false;\n    }\n}\n","\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport ora from 'ora';\n\ninterface RoadmapStep {\n    id: string;\n    title: string;\n    step_number: number;\n    description: string;\n    status: string;\n    role: string;\n}\n\nexport async function suggestNextMove(projectId: string, apiKey: string, apiUrl: string) {\n    // Silent spinner just to fetch data quickly\n    // const spinner = ora('Analyzing mission parameters...').start();\n\n    try {\n        // We use the roadmap chunks endpoint or a dedicated query\n        // For CLI efficiency, let's query raw chunks via a unified endpoint if possible\n        // Or assume we have a direct endpoint. \n        // Let's use the standard `list_roadmap_tasks` equivalent logic via REST API if available.\n        // Assuming /api/v1/roadmap/next exists or similar. \n        // If not, we query pending tasks.\n\n        const response = await axios.get(`${apiUrl}/api/v1/roadmap/chunks`, {\n            params: {\n                project_id: projectId,\n                status: 'PENDING',\n                limit: 1,\n                order: 'step_number.asc'\n            },\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (!response.data.success) {\n            return; // Fail silently, feature relies on API being ready\n        }\n\n        const tasks = response.data.data.chunks || [];\n        if (tasks.length === 0) return;\n\n        const nextTask = tasks[0] as RoadmapStep;\n\n        // Visual Presentation\n        console.log('');\n        console.log(chalk.bold('🎯 TACTICAL INTELLIGENCE'));\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log(`${chalk.bold('Active Phase:')}  Implementation`);\n        console.log(`${chalk.bold('Next Mission:')}  ${chalk.cyan(nextTask.title)}`);\n\n        if (nextTask.role) {\n            console.log(`${chalk.bold('Required Role:')} ${chalk.magenta(nextTask.role)}`);\n        }\n\n        console.log('');\n        console.log(chalk.yellow('SUGGESTED NEXT MOVE:'));\n        console.log(chalk.white(`> rigstate work start ${nextTask.id}   `) + chalk.dim('(Start this task)'));\n        console.log(chalk.white(`> rigstate chat \"How do I solve T-${nextTask.step_number}?\" `) + chalk.dim('(Ask Architect)'));\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log('');\n\n    } catch (e) {\n        // Ignore errors in suggestion engine to not break the flow\n    }\n}\n","import { AgentSkill } from '@rigstate/rules-engine';\nimport axios from 'axios';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\n\n/**\n * Provisions Agent Skills to the local project.\n * \n * Flow:\n * 1. Fetch skills from API (database)\n * 2. Merge with core skills from rules-engine\n * 3. Write to .agent/skills/<name>/SKILL.md\n * 4. Return list of provisioned skills for .cursorrules injection\n */\nexport async function provisionSkills(\n    apiUrl: string,\n    apiKey: string,\n    projectId: string,\n    rootDir: string\n): Promise<AgentSkill[]> {\n    const skills: AgentSkill[] = [];\n\n    // 1. Fetch skills from database (user + global + core)\n    try {\n        const response = await axios.get(`${apiUrl}/api/v1/skills`, {\n            params: { project_id: projectId },\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (response.data.success && response.data.data) {\n            for (const dbSkill of response.data.data) {\n                skills.push({\n                    name: dbSkill.name,\n                    description: dbSkill.description,\n                    specialist: dbSkill.specialist || 'General',\n                    version: dbSkill.version || '1.0.0',\n                    governance: dbSkill.governance || 'OPEN',\n                    content: dbSkill.content\n                });\n            }\n        }\n    } catch (e: any) {\n        // API might not have skills endpoint yet - fall through to core skills\n        const msg = e.response?.data?.error || e.message;\n        console.log(chalk.dim(`  (Skills API not available: ${msg}, using core library)`));\n    }\n\n    // 2. If no skills from DB, use core library from rules-engine\n    if (skills.length === 0) {\n        const { getRigstateStandardSkills } = await import('@rigstate/rules-engine');\n        const coreSkills = getRigstateStandardSkills();\n        skills.push(...coreSkills);\n    }\n\n    // 3. Write skills to .agent/skills/\n    const skillsDir = path.join(rootDir, '.agent', 'skills');\n    await fs.mkdir(skillsDir, { recursive: true });\n\n    for (const skill of skills) {\n        const skillDir = path.join(skillsDir, skill.name);\n        await fs.mkdir(skillDir, { recursive: true });\n\n        const skillContent = `---\nname: ${skill.name}\ndescription: ${skill.description}\nversion: \"${skill.version}\"\nspecialist: ${skill.specialist}\ngovernance: ${skill.governance}\n---\n\n${skill.content}\n\n---\n*Provisioned by Rigstate CLI. Do not modify manually.*`;\n\n        const skillPath = path.join(skillDir, 'SKILL.md');\n        await fs.writeFile(skillPath, skillContent, 'utf-8');\n    }\n\n    console.log(chalk.green(`  ✅ Provisioned ${skills.length} skill(s) to .agent/skills/`));\n\n    return skills;\n}\n\n/**\n * Generate the <available_skills> XML block for .cursorrules\n */\nexport function generateSkillsDiscoveryBlock(skills: AgentSkill[]): string {\n    if (skills.length === 0) return '';\n\n    const skillBlocks = skills.map(skill => `  <skill>\n    <name>${skill.name}</name>\n    <description>${skill.description}</description>\n    <location>.agent/skills/${skill.name}/SKILL.md</location>\n  </skill>`).join('\\n');\n\n    return `<available_skills>\n${skillBlocks}\n</available_skills>`;\n}\n/**\n * Just-In-Time provisioning of a specific skill.\n * Checks if the skill is already in .cursorrules and injects it if not.\n */\nexport async function jitProvisionSkill(\n    skillId: string,\n    apiUrl: string,\n    apiKey: string,\n    projectId: string,\n    rootDir: string\n): Promise<boolean> {\n    const rulesPath = path.join(rootDir, '.cursorrules');\n    let rulesContent = '';\n\n    try {\n        rulesContent = await fs.readFile(rulesPath, 'utf-8');\n    } catch (e) {\n        return false;\n    }\n\n    const isProvisioned = rulesContent.includes(`<name>${skillId}</name>`) ||\n        rulesContent.includes(`.agent/skills/${skillId}`);\n\n    if (isProvisioned) return false;\n\n    console.log(chalk.yellow(`  ⚡ JIT PROVISIONING: Injecting ${skillId}...`));\n\n    try {\n        const skills = await provisionSkills(apiUrl, apiKey, projectId, rootDir);\n        const skillsBlock = generateSkillsDiscoveryBlock(skills);\n\n        if (rulesContent.includes('<available_skills>')) {\n            rulesContent = rulesContent.replace(\n                /<available_skills>[\\s\\S]*?<\\/available_skills>/,\n                skillsBlock\n            );\n        } else if (rulesContent.includes('## 🧠 PROJECT CONTEXT')) {\n            const insertPoint = rulesContent.indexOf('---', rulesContent.indexOf('## 🧠 PROJECT CONTEXT'));\n            if (insertPoint !== -1) {\n                rulesContent = rulesContent.slice(0, insertPoint + 3) +\n                    '\\n\\n' + skillsBlock + '\\n' +\n                    rulesContent.slice(insertPoint + 3);\n            }\n        }\n\n        await fs.writeFile(rulesPath, rulesContent, 'utf-8');\n        return true;\n    } catch (e: any) {\n        console.log(chalk.red(`  Failed to provision skill: ${e.message}`));\n        return false;\n    }\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\n\n// --- Types ---\n\nexport enum InterventionLevel {\n    GHOST = 0,    // Log only, silent\n    NUDGE = 1,    // Warn on commit/complete\n    SENTINEL = 2  // Immediate SOFT_LOCK\n}\n\nexport type LockStatus = 'OPEN' | 'SOFT_LOCK';\n\nexport interface GovernanceConfig {\n    governance: {\n        intervention_level: InterventionLevel;\n        allow_overrides: boolean;\n    };\n}\n\nexport interface SessionState {\n    status: LockStatus;\n    active_violation?: string | null;\n    lock_reason?: string | null;\n    last_updated: string;\n}\n\nconst DEFAULT_CONFIG: GovernanceConfig = {\n    governance: {\n        intervention_level: InterventionLevel.GHOST,\n        allow_overrides: true\n    }\n};\n\nconst DEFAULT_SESSION: SessionState = {\n    status: 'OPEN',\n    active_violation: null,\n    lock_reason: null,\n    last_updated: new Date().toISOString()\n};\n\n// --- Config Management ---\n\nexport async function getGovernanceConfig(rootDir: string = process.cwd()): Promise<GovernanceConfig> {\n    try {\n        const configPath = path.join(rootDir, 'rigstate.config.json');\n        const content = await fs.readFile(configPath, 'utf-8');\n        const userConfig = JSON.parse(content);\n        return {\n            governance: {\n                ...DEFAULT_CONFIG.governance,\n                ...userConfig.governance\n            }\n        };\n    } catch (e) {\n        return DEFAULT_CONFIG;\n    }\n}\n\n// --- Session State Management ---\n\nexport async function getSessionState(rootDir: string = process.cwd()): Promise<SessionState> {\n    try {\n        const sessionPath = path.join(rootDir, '.rigstate', 'session.json');\n        const content = await fs.readFile(sessionPath, 'utf-8');\n        return JSON.parse(content);\n    } catch (e) {\n        return DEFAULT_SESSION;\n    }\n}\n\nexport async function setSoftLock(\n    reason: string,\n    violationId: string,\n    rootDir: string = process.cwd()\n): Promise<void> {\n    const sessionPath = path.join(rootDir, '.rigstate', 'session.json');\n    const state: SessionState = {\n        status: 'SOFT_LOCK',\n        active_violation: violationId,\n        lock_reason: reason,\n        last_updated: new Date().toISOString()\n    };\n\n    await fs.mkdir(path.dirname(sessionPath), { recursive: true });\n    await fs.writeFile(sessionPath, JSON.stringify(state, null, 2), 'utf-8');\n}\n\nexport async function clearSoftLock(\n    rootDir: string = process.cwd()\n): Promise<void> {\n    const sessionPath = path.join(rootDir, '.rigstate', 'session.json');\n    const state: SessionState = {\n        ...DEFAULT_SESSION,\n        last_updated: new Date().toISOString()\n    };\n\n    await fs.mkdir(path.dirname(sessionPath), { recursive: true });\n    await fs.writeFile(sessionPath, JSON.stringify(state, null, 2), 'utf-8');\n}\n\n/**\n * Checks if the user is authorized to perform an override\n * (For now, assumes CLI user is authorized, but logs it)\n */\nexport async function performOverride(\n    violationId: string,\n    reason: string,\n    rootDir: string = process.cwd()\n): Promise<boolean> {\n    const config = await getGovernanceConfig(rootDir);\n\n    if (!config.governance.allow_overrides) {\n        console.log(chalk.red('❌ Overrides are disabled for this project.'));\n        return false;\n    }\n\n    // Security violations (SEC-*) cannot be overridden via CLI usually, \n    // but the implementation here depends on how we define \"Security\".\n    // For now, we allow overriding via this function, but the *Caller* should check violation type.\n\n    await clearSoftLock(rootDir);\n    // TODO: Add to Mission Report (Audit Log)\n    // We will handle logging in the command handler itself\n\n    return true;\n}\n","/**\n * Guardian Watchdog - Scans files against governance rules\n * Now fetches rules from API with fallback to cache/defaults\n */\n\nimport fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport axios from 'axios';\nimport { getApiUrl, getApiKey } from './config.js';\n\ninterface EffectiveRule {\n    id: string;\n    rule_name: string;\n    rule_type: string;\n    value: Record<string, unknown>;\n    severity: 'critical' | 'warning' | 'info';\n    description: string;\n    source: 'global' | 'project_override';\n    is_enabled: boolean;\n}\n\ninterface ScanResult {\n    file: string;\n    lines: number;\n    status: 'OK' | 'WARNING' | 'VIOLATION';\n}\n\nconst DEFAULT_LMAX = 400;\nconst DEFAULT_LMAX_WARNING = 350;\nconst CACHE_FILE = '.rigstate/rules-cache.json';\n\nasync function countLines(filePath: string): Promise<number> {\n    try {\n        const content = await fs.readFile(filePath, 'utf-8');\n        return content.split('\\n').length;\n    } catch (e) {\n        return 0;\n    }\n}\n\nasync function getFiles(dir: string, extension: string[]): Promise<string[]> {\n    const entries = await fs.readdir(dir, { withFileTypes: true });\n    const files = await Promise.all(entries.map(async (entry) => {\n        const res = path.resolve(dir, entry.name);\n        if (entry.isDirectory()) {\n            if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === '.next' || entry.name === 'dist') return [];\n            return getFiles(res, extension);\n        } else {\n            return extension.some(ext => entry.name.endsWith(ext)) ? res : [];\n        }\n    }));\n    return files.flat();\n}\n\n/**\n * Fetch rules from API with fallback\n */\nasync function fetchRulesFromApi(projectId: string): Promise<{\n    lmax: number;\n    lmaxWarning: number;\n    source: string;\n}> {\n    try {\n        const apiUrl = getApiUrl();\n        const apiKey = getApiKey();\n\n        const response = await axios.get(`${apiUrl}/api/v1/guardian/rules`, {\n            params: { project_id: projectId },\n            headers: { Authorization: `Bearer ${apiKey}` },\n            timeout: 10000\n        });\n\n        if (response.data.success && response.data.data.settings) {\n            return {\n                lmax: response.data.data.settings.lmax || DEFAULT_LMAX,\n                lmaxWarning: response.data.data.settings.lmax_warning || DEFAULT_LMAX_WARNING,\n                source: 'API (Dynamic)'\n            };\n        }\n    } catch (error) {\n        // Try to load from cache\n        try {\n            const cachePath = path.join(process.cwd(), CACHE_FILE);\n            const content = await fs.readFile(cachePath, 'utf-8');\n            const cached = JSON.parse(content);\n            if (cached.settings) {\n                return {\n                    lmax: cached.settings.lmax || DEFAULT_LMAX,\n                    lmaxWarning: cached.settings.lmax_warning || DEFAULT_LMAX_WARNING,\n                    source: 'Cache (Fallback)'\n                };\n            }\n        } catch {\n            // Cache read failed\n        }\n    }\n\n    // Default fallback\n    return {\n        lmax: DEFAULT_LMAX,\n        lmaxWarning: DEFAULT_LMAX_WARNING,\n        source: 'Default (Hardcoded)'\n    };\n}\n\nexport async function runGuardianWatchdog(\n    rootPath: string,\n    settings: Record<string, any> = {},\n    projectId?: string\n): Promise<void> {\n    console.log(chalk.bold('\\n🛡️  Active Guardian Watchdog Initiated...'));\n\n    // Try to get rules from API if projectId is provided\n    let lmax = settings.lmax || DEFAULT_LMAX;\n    let lmaxWarning = settings.lmax_warning || DEFAULT_LMAX_WARNING;\n    let ruleSource = settings.lmax ? 'Settings (Passed)' : 'Default';\n\n    if (projectId) {\n        const apiRules = await fetchRulesFromApi(projectId);\n        lmax = apiRules.lmax;\n        lmaxWarning = apiRules.lmaxWarning;\n        ruleSource = apiRules.source;\n    }\n\n    console.log(chalk.dim(`Governance Rules: L_max=${lmax}, L_max_warning=${lmaxWarning}, Source: ${ruleSource}`));\n\n    const targetExtensions = ['.ts', '.tsx'];\n    let scanTarget = rootPath;\n    const webSrc = path.join(rootPath, 'apps', 'web', 'src');\n\n    try {\n        await fs.access(webSrc);\n        scanTarget = webSrc;\n    } catch {\n        // apps/web/src not found, scanning root or provided path\n    }\n\n    console.log(chalk.dim(`Scanning target: ${path.relative(process.cwd(), scanTarget)}`));\n\n    const files = await getFiles(scanTarget, targetExtensions);\n\n    let violations = 0;\n    let warnings = 0;\n\n    const results: ScanResult[] = [];\n\n    for (const file of files) {\n        const lines = await countLines(file);\n        const relPath = path.relative(rootPath, file);\n\n        if (lines > lmax) {\n            results.push({ file: relPath, lines, status: 'VIOLATION' });\n            violations++;\n            console.log(chalk.red(`[VIOLATION] ${relPath}: ${lines} lines (Limit: ${lmax})`));\n        } else if (lines > lmaxWarning) {\n            results.push({ file: relPath, lines, status: 'WARNING' });\n            warnings++;\n            console.log(chalk.yellow(`[WARNING]   ${relPath}: ${lines} lines (Threshold: ${lmaxWarning})`));\n        }\n    }\n\n    if (violations === 0 && warnings === 0) {\n        console.log(chalk.green(`✔ All ${files.length} files are within governance limits.`));\n    } else {\n        console.log('\\n' + chalk.bold('Summary:'));\n        console.log(chalk.red(`Violations: ${violations}`));\n        console.log(chalk.yellow(`Warnings:   ${warnings}`));\n\n        // --- GOVERNANCE INTERVENTION LOGIC ---\n        const { getGovernanceConfig, setSoftLock, InterventionLevel } = await import('./governance.js');\n        const { governance } = await getGovernanceConfig(rootPath);\n        console.log(chalk.dim(`Intervention Level: ${InterventionLevel[governance.intervention_level] || 'UNKNOWN'} (${governance.intervention_level})`));\n\n        if (violations > 0) {\n            console.log(chalk.red.bold('\\nCRITICAL: Governance violations detected. Immediate refactoring required.'));\n\n            // Check for SENTINEL MODE (Level 2)\n            if (governance.intervention_level >= InterventionLevel.SENTINEL) {\n                console.log(chalk.red.bold('🛑 SENTINEL MODE: Session SOFT_LOCKED until resolved.'));\n                console.log(chalk.red('   Run \"rigstate override <id> --reason \\\\\"...\\\\\"\" if this is an emergency.'));\n                await setSoftLock('Sentinel Mode: Governance Violations Detected', 'ARC-VIOLATION', rootPath);\n            }\n        }\n    }\n\n    // Sync to Cloud via API\n    if (projectId) {\n        try {\n            const apiUrl = getApiUrl();\n            const apiKey = getApiKey();\n\n            const payloadViolations = results.filter(r => r.status === 'VIOLATION').map(v => ({\n                uid: 'V-' + Buffer.from(v.file).toString('base64').replace(/=/g, ''),\n                filePath: v.file,\n                lineCount: v.lines,\n                limitValue: lmax,\n                severity: 'CRITICAL'\n            }));\n\n            await axios.post(`${apiUrl}/api/v1/guardian/sync`, {\n                projectId,\n                violations: payloadViolations,\n                warnings: warnings\n            }, {\n                headers: { Authorization: `Bearer ${apiKey}` }\n            });\n\n            console.log(chalk.dim('✔ Violations synced to Rigstate Cloud.'));\n\n        } catch (e: any) {\n            console.log(chalk.dim('⚠ Cloud sync skipped: ' + (e.message || 'Unknown')));\n        }\n    }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n    return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n    const result = [[]];\n    let groupIndex = 0;\n    for (const item of items) {\n        if (predicate(item)) {\n            groupIndex++;\n            result[groupIndex] = [];\n        }\n        else {\n            result[groupIndex].push(item);\n        }\n    }\n    return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n    return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[\\]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}, !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([(){}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n    return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n    return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n    // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n    // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n    if (entry.charAt(0) === '.') {\n        const secondCharactery = entry.charAt(1);\n        if (secondCharactery === '/' || secondCharactery === '\\\\') {\n            return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n        }\n    }\n    return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n    return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n    return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n    return escapeWindowsPath(filepath)\n        .replace(DOS_DEVICE_PATH_RE, '//$1')\n        .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n    return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  var match;\n  while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n    if (match[2]) return true;\n    str = str.slice(match.index + match[0].length);\n  }\n\n  return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  var pipeIndex = -2;\n  var closeSquareIndex = -2;\n  var closeCurlyIndex = -2;\n  var closeParenIndex = -2;\n  var backSlashIndex = -2;\n  while (index < str.length) {\n    if (str[index] === '*') {\n      return true;\n    }\n\n    if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n      return true;\n    }\n\n    if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n      if (closeSquareIndex < index) {\n        closeSquareIndex = str.indexOf(']', index);\n      }\n      if (closeSquareIndex > index) {\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n      closeCurlyIndex = str.indexOf('}', index);\n      if (closeCurlyIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n      closeParenIndex = str.indexOf(')', index);\n      if (closeParenIndex > index) {\n        backSlashIndex = str.indexOf('\\\\', index);\n        if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n          return true;\n        }\n      }\n    }\n\n    if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n      if (pipeIndex < index) {\n        pipeIndex = str.indexOf('|', index);\n      }\n      if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n        closeParenIndex = str.indexOf(')', pipeIndex);\n        if (closeParenIndex > pipeIndex) {\n          backSlashIndex = str.indexOf('\\\\', pipeIndex);\n          if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n            return true;\n          }\n        }\n      }\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nvar relaxedCheck = function(str) {\n  if (str[0] === '!') {\n    return true;\n  }\n  var index = 0;\n  while (index < str.length) {\n    if (/[*?{}()[\\]]/.test(str[index])) {\n      return true;\n    }\n\n    if (str[index] === '\\\\') {\n      var open = str[index + 1];\n      index += 2;\n      var close = chars[open];\n\n      if (close) {\n        var n = str.indexOf(close, index);\n        if (n !== -1) {\n          index = n + 1;\n        }\n      }\n\n      if (str[index] === '!') {\n        return true;\n      }\n    } else {\n      index++;\n    }\n  }\n  return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n  if (typeof str !== 'string' || str === '') {\n    return false;\n  }\n\n  if (isExtglob(str)) {\n    return true;\n  }\n\n  var check = strictCheck;\n\n  // optionally relax check\n  if (options && options.strict === false) {\n    check = relaxedCheck;\n  }\n\n  return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n  var options = Object.assign({ flipBackslashes: true }, opts);\n\n  // flip windows path separators\n  if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n    str = str.replace(backslash, slash);\n  }\n\n  // special case for strings ending in enclosure containing path separator\n  if (enclosure.test(str)) {\n    str += slash;\n  }\n\n  // preserves full path in case of trailing path separator\n  str += 'a';\n\n  // remove path parts that are globby\n  do {\n    str = pathPosixDirname(str);\n  } while (isGlob(str) || globby.test(str));\n\n  // remove escape chars and return result\n  return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n    return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n    /**\n     * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n     * An empty string cannot be a dynamic pattern.\n     * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n     */\n    if (pattern === '') {\n        return false;\n    }\n    /**\n     * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n     * filepath directly (without read directory).\n     */\n    if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n        return true;\n    }\n    if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n        return true;\n    }\n    if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n        return true;\n    }\n    return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n    const openingBraceIndex = pattern.indexOf('{');\n    if (openingBraceIndex === -1) {\n        return false;\n    }\n    const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n    if (closingBraceIndex === -1) {\n        return false;\n    }\n    const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n    return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n    return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n    return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n    return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n    return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n    return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n    return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n    return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n    return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n    return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n    return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n    return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n    return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n    const basename = path.basename(pattern);\n    return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n    return patterns.reduce((collection, pattern) => {\n        return collection.concat(expandBraceExpansion(pattern));\n    }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n    const patterns = micromatch.braces(pattern, { expand: true, nodupes: true });\n    /**\n     * Sort the patterns by length so that the same depth patterns are processed side by side.\n     * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n     */\n    patterns.sort((a, b) => a.length - b.length);\n    /**\n     * Micromatch can return an empty string in the case of patterns like `{a,}`.\n     */\n    return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n    let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n    /**\n     * The scan method returns an empty array in some cases.\n     * See micromatch/picomatch#58 for more details.\n     */\n    if (parts.length === 0) {\n        parts = [pattern];\n    }\n    /**\n     * The scan method does not return an empty part for the pattern with a forward slash.\n     * This is another part of micromatch/picomatch#58.\n     */\n    if (parts[0].startsWith('/')) {\n        parts[0] = parts[0].slice(1);\n        parts.unshift('');\n    }\n    return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n    return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n    return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n    return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n    return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n  const streamsQueue = []\n  const args = slice.call(arguments)\n  let merging = false\n  let options = args[args.length - 1]\n\n  if (options && !Array.isArray(options) && options.pipe == null) {\n    args.pop()\n  } else {\n    options = {}\n  }\n\n  const doEnd = options.end !== false\n  const doPipeError = options.pipeError === true\n  if (options.objectMode == null) {\n    options.objectMode = true\n  }\n  if (options.highWaterMark == null) {\n    options.highWaterMark = 64 * 1024\n  }\n  const mergedStream = PassThrough(options)\n\n  function addStream () {\n    for (let i = 0, len = arguments.length; i < len; i++) {\n      streamsQueue.push(pauseStreams(arguments[i], options))\n    }\n    mergeStream()\n    return this\n  }\n\n  function mergeStream () {\n    if (merging) {\n      return\n    }\n    merging = true\n\n    let streams = streamsQueue.shift()\n    if (!streams) {\n      process.nextTick(endStream)\n      return\n    }\n    if (!Array.isArray(streams)) {\n      streams = [streams]\n    }\n\n    let pipesCount = streams.length + 1\n\n    function next () {\n      if (--pipesCount > 0) {\n        return\n      }\n      merging = false\n      mergeStream()\n    }\n\n    function pipe (stream) {\n      function onend () {\n        stream.removeListener('merge2UnpipeEnd', onend)\n        stream.removeListener('end', onend)\n        if (doPipeError) {\n          stream.removeListener('error', onerror)\n        }\n        next()\n      }\n      function onerror (err) {\n        mergedStream.emit('error', err)\n      }\n      // skip ended stream\n      if (stream._readableState.endEmitted) {\n        return next()\n      }\n\n      stream.on('merge2UnpipeEnd', onend)\n      stream.on('end', onend)\n\n      if (doPipeError) {\n        stream.on('error', onerror)\n      }\n\n      stream.pipe(mergedStream, { end: false })\n      // compatible for old stream\n      stream.resume()\n    }\n\n    for (let i = 0; i < streams.length; i++) {\n      pipe(streams[i])\n    }\n\n    next()\n  }\n\n  function endStream () {\n    merging = false\n    // emit 'queueDrain' when all streams merged.\n    mergedStream.emit('queueDrain')\n    if (doEnd) {\n      mergedStream.end()\n    }\n  }\n\n  mergedStream.setMaxListeners(0)\n  mergedStream.add = addStream\n  mergedStream.on('unpipe', function (stream) {\n    stream.emit('merge2UnpipeEnd')\n  })\n\n  if (args.length) {\n    addStream.apply(null, args)\n  }\n  return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n  if (!Array.isArray(streams)) {\n    // Backwards-compat with old-style streams\n    if (!streams._readableState && streams.pipe) {\n      streams = streams.pipe(PassThrough(options))\n    }\n    if (!streams._readableState || !streams.pause || !streams.pipe) {\n      throw new Error('Only readable stream can be merged.')\n    }\n    streams.pause()\n  } else {\n    for (let i = 0, len = streams.length; i < len; i++) {\n      streams[i] = pauseStreams(streams[i], options)\n    }\n  }\n  return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n    const mergedStream = merge2(streams);\n    streams.forEach((stream) => {\n        stream.once('error', (error) => mergedStream.emit('error', error));\n    });\n    mergedStream.once('close', () => propagateCloseEventToSources(streams));\n    mergedStream.once('end', () => propagateCloseEventToSources(streams));\n    return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n    streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n    return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n    return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n    const patterns = processPatterns(input, settings);\n    const ignore = processPatterns(settings.ignore, settings);\n    const positivePatterns = getPositivePatterns(patterns);\n    const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n    const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n    const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n    const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n    const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n    return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n    let patterns = input;\n    /**\n     * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n     * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n     *\n     * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n     * in matching in the case of a large set of patterns after expansion.\n     */\n    if (settings.braceExpansion) {\n        patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n    }\n    /**\n     * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n     * at any nesting level.\n     *\n     * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n     * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n     * in the application. Only on the input.\n     */\n    if (settings.baseNameMatch) {\n        patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n    }\n    /**\n     * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n     */\n    return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n    const tasks = [];\n    const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n    const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n    const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n    const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n    tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n    /*\n     * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n     * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n     */\n    if ('.' in insideCurrentDirectoryGroup) {\n        tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n    }\n    else {\n        tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n    }\n    return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n    return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n    const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n    const positive = negative.map(utils.pattern.convertToPositivePattern);\n    return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n    const group = {};\n    return patterns.reduce((collection, pattern) => {\n        const base = utils.pattern.getBaseDirectory(pattern);\n        if (base in collection) {\n            collection[base].push(pattern);\n        }\n        else {\n            collection[base] = [pattern];\n        }\n        return collection;\n    }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n    return Object.keys(positive).map((base) => {\n        return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n    });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n    return {\n        dynamic,\n        positive,\n        negative,\n        base,\n        patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n    };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n    settings.fs.lstat(path, (lstatError, lstat) => {\n        if (lstatError !== null) {\n            callFailureCallback(callback, lstatError);\n            return;\n        }\n        if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n            callSuccessCallback(callback, lstat);\n            return;\n        }\n        settings.fs.stat(path, (statError, stat) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    callFailureCallback(callback, statError);\n                    return;\n                }\n                callSuccessCallback(callback, lstat);\n                return;\n            }\n            if (settings.markSymbolicLink) {\n                stat.isSymbolicLink = () => true;\n            }\n            callSuccessCallback(callback, stat);\n        });\n    });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n    const lstat = settings.fs.lstatSync(path);\n    if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n        return lstat;\n    }\n    try {\n        const stat = settings.fs.statSync(path);\n        if (settings.markSymbolicLink) {\n            stat.isSymbolicLink = () => true;\n        }\n        return stat;\n    }\n    catch (error) {\n        if (!settings.throwErrorOnBrokenSymbolicLink) {\n            return lstat;\n        }\n        throw error;\n    }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n  ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n  // reuse resolved promise, and allocate it lazily\n  : cb => (promise || (promise = Promise.resolve()))\n    .then(cb)\n    .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n  let results, pending, keys\n  let isSync = true\n\n  if (Array.isArray(tasks)) {\n    results = []\n    pending = tasks.length\n  } else {\n    keys = Object.keys(tasks)\n    results = {}\n    pending = keys.length\n  }\n\n  function done (err) {\n    function end () {\n      if (cb) cb(err, results)\n      cb = null\n    }\n    if (isSync) queueMicrotask(end)\n    else end()\n  }\n\n  function each (i, err, result) {\n    results[i] = result\n    if (--pending === 0 || err) {\n      done(err)\n    }\n  }\n\n  if (!pending) {\n    // empty\n    done(null)\n  } else if (keys) {\n    // object\n    keys.forEach(function (key) {\n      tasks[key](function (err, result) { each(key, err, result) })\n    })\n  } else {\n    // array\n    tasks.forEach(function (task, i) {\n      task(function (err, result) { each(i, err, result) })\n    })\n  }\n\n  isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n    throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n    constructor(name, stats) {\n        this.name = name;\n        this.isBlockDevice = stats.isBlockDevice.bind(stats);\n        this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n        this.isDirectory = stats.isDirectory.bind(stats);\n        this.isFIFO = stats.isFIFO.bind(stats);\n        this.isFile = stats.isFile.bind(stats);\n        this.isSocket = stats.isSocket.bind(stats);\n        this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n    }\n}\nfunction createDirentFromStats(name, stats) {\n    return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        readdirWithFileTypes(directory, settings, callback);\n        return;\n    }\n    readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n    settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const entries = dirents.map((dirent) => ({\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        }));\n        if (!settings.followSymbolicLinks) {\n            callSuccessCallback(callback, entries);\n            return;\n        }\n        const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n        rpl(tasks, (rplError, rplEntries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, rplEntries);\n        });\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n    return (done) => {\n        if (!entry.dirent.isSymbolicLink()) {\n            done(null, entry);\n            return;\n        }\n        settings.fs.stat(entry.path, (statError, stats) => {\n            if (statError !== null) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    done(statError);\n                    return;\n                }\n                done(null, entry);\n                return;\n            }\n            entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            done(null, entry);\n        });\n    };\n}\nfunction readdir(directory, settings, callback) {\n    settings.fs.readdir(directory, (readdirError, names) => {\n        if (readdirError !== null) {\n            callFailureCallback(callback, readdirError);\n            return;\n        }\n        const tasks = names.map((name) => {\n            const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n            return (done) => {\n                fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n                    if (error !== null) {\n                        done(error);\n                        return;\n                    }\n                    const entry = {\n                        name,\n                        path,\n                        dirent: utils.fs.createDirentFromStats(name, stats)\n                    };\n                    if (settings.stats) {\n                        entry.stats = stats;\n                    }\n                    done(null, entry);\n                });\n            };\n        });\n        rpl(tasks, (rplError, entries) => {\n            if (rplError !== null) {\n                callFailureCallback(callback, rplError);\n                return;\n            }\n            callSuccessCallback(callback, entries);\n        });\n    });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n    callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n    if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n        return readdirWithFileTypes(directory, settings);\n    }\n    return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n    const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n    return dirents.map((dirent) => {\n        const entry = {\n            dirent,\n            name: dirent.name,\n            path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n        };\n        if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n            try {\n                const stats = settings.fs.statSync(entry.path);\n                entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n            }\n            catch (error) {\n                if (settings.throwErrorOnBrokenSymbolicLink) {\n                    throw error;\n                }\n            }\n        }\n        return entry;\n    });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n    const names = settings.fs.readdirSync(directory);\n    return names.map((name) => {\n        const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n        const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n        const entry = {\n            name,\n            path: entryPath,\n            dirent: utils.fs.createDirentFromStats(name, stats)\n        };\n        if (settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    stat: fs.stat,\n    lstatSync: fs.lstatSync,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n    if (fsMethods === undefined) {\n        return exports.FILE_SYSTEM_ADAPTER;\n    }\n    return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n        this.fs = fs.createFileSystemAdapter(this._options.fs);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.stats = this._getValue(this._options.stats, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n        this.fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this.followSymbolicLinks,\n            fs: this.fs,\n            throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        async.read(path, getSettings(), optionsOrSettingsOrCallback);\n        return;\n    }\n    async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n  var head = new Constructor()\n  var tail = head\n\n  function get () {\n    var current = head\n\n    if (current.next) {\n      head = current.next\n    } else {\n      head = new Constructor()\n      tail = head\n    }\n\n    current.next = null\n\n    return current\n  }\n\n  function release (obj) {\n    tail.next = obj\n    tail = obj\n  }\n\n  return {\n    get: get,\n    release: release\n  }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  if (!(_concurrency >= 1)) {\n    throw new Error('fastqueue concurrency must be equal to or greater than 1')\n  }\n\n  var cache = reusify(Task)\n  var queueHead = null\n  var queueTail = null\n  var _running = 0\n  var errorHandler = null\n\n  var self = {\n    push: push,\n    drain: noop,\n    saturated: noop,\n    pause: pause,\n    paused: false,\n\n    get concurrency () {\n      return _concurrency\n    },\n    set concurrency (value) {\n      if (!(value >= 1)) {\n        throw new Error('fastqueue concurrency must be equal to or greater than 1')\n      }\n      _concurrency = value\n\n      if (self.paused) return\n      for (; queueHead && _running < _concurrency;) {\n        _running++\n        release()\n      }\n    },\n\n    running: running,\n    resume: resume,\n    idle: idle,\n    length: length,\n    getQueue: getQueue,\n    unshift: unshift,\n    empty: noop,\n    kill: kill,\n    killAndDrain: killAndDrain,\n    error: error,\n    abort: abort\n  }\n\n  return self\n\n  function running () {\n    return _running\n  }\n\n  function pause () {\n    self.paused = true\n  }\n\n  function length () {\n    var current = queueHead\n    var counter = 0\n\n    while (current) {\n      current = current.next\n      counter++\n    }\n\n    return counter\n  }\n\n  function getQueue () {\n    var current = queueHead\n    var tasks = []\n\n    while (current) {\n      tasks.push(current.value)\n      current = current.next\n    }\n\n    return tasks\n  }\n\n  function resume () {\n    if (!self.paused) return\n    self.paused = false\n    if (queueHead === null) {\n      _running++\n      release()\n      return\n    }\n    for (; queueHead && _running < _concurrency;) {\n      _running++\n      release()\n    }\n  }\n\n  function idle () {\n    return _running === 0 && self.length() === 0\n  }\n\n  function push (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueTail) {\n        queueTail.next = current\n        queueTail = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function unshift (value, done) {\n    var current = cache.get()\n\n    current.context = context\n    current.release = release\n    current.value = value\n    current.callback = done || noop\n    current.errorHandler = errorHandler\n\n    if (_running >= _concurrency || self.paused) {\n      if (queueHead) {\n        current.next = queueHead\n        queueHead = current\n      } else {\n        queueHead = current\n        queueTail = current\n        self.saturated()\n      }\n    } else {\n      _running++\n      worker.call(context, current.value, current.worked)\n    }\n  }\n\n  function release (holder) {\n    if (holder) {\n      cache.release(holder)\n    }\n    var next = queueHead\n    if (next && _running <= _concurrency) {\n      if (!self.paused) {\n        if (queueTail === queueHead) {\n          queueTail = null\n        }\n        queueHead = next.next\n        next.next = null\n        worker.call(context, next.value, next.worked)\n        if (queueTail === null) {\n          self.empty()\n        }\n      } else {\n        _running--\n      }\n    } else if (--_running === 0) {\n      self.drain()\n    }\n  }\n\n  function kill () {\n    queueHead = null\n    queueTail = null\n    self.drain = noop\n  }\n\n  function killAndDrain () {\n    queueHead = null\n    queueTail = null\n    self.drain()\n    self.drain = noop\n  }\n\n  function abort () {\n    var current = queueHead\n    queueHead = null\n    queueTail = null\n\n    while (current) {\n      var next = current.next\n      var callback = current.callback\n      var errorHandler = current.errorHandler\n      var val = current.value\n      var context = current.context\n\n      // Reset the task state\n      current.value = null\n      current.callback = noop\n      current.errorHandler = null\n\n      // Call error handler if present\n      if (errorHandler) {\n        errorHandler(new Error('abort'), val)\n      }\n\n      // Call callback with error\n      callback.call(context, new Error('abort'))\n\n      // Release the task back to the pool\n      current.release(current)\n\n      current = next\n    }\n\n    self.drain = noop\n  }\n\n  function error (handler) {\n    errorHandler = handler\n  }\n}\n\nfunction noop () {}\n\nfunction Task () {\n  this.value = null\n  this.callback = noop\n  this.next = null\n  this.release = noop\n  this.context = null\n  this.errorHandler = null\n\n  var self = this\n\n  this.worked = function worked (err, result) {\n    var callback = self.callback\n    var errorHandler = self.errorHandler\n    var val = self.value\n    self.value = null\n    self.callback = noop\n    if (self.errorHandler) {\n      errorHandler(err, val)\n    }\n    callback.call(self.context, err, result)\n    self.release(self)\n  }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n  if (typeof context === 'function') {\n    _concurrency = worker\n    worker = context\n    context = null\n  }\n\n  function asyncWrapper (arg, cb) {\n    worker.call(this, arg)\n      .then(function (res) {\n        cb(null, res)\n      }, cb)\n  }\n\n  var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n  var pushCb = queue.push\n  var unshiftCb = queue.unshift\n\n  queue.push = push\n  queue.unshift = unshift\n  queue.drained = drained\n\n  return queue\n\n  function push (value) {\n    var p = new Promise(function (resolve, reject) {\n      pushCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function unshift (value) {\n    var p = new Promise(function (resolve, reject) {\n      unshiftCb(value, function (err, result) {\n        if (err) {\n          reject(err)\n          return\n        }\n        resolve(result)\n      })\n    })\n\n    // Let's fork the promise chain to\n    // make the error bubble up to the user but\n    // not lead to a unhandledRejection\n    p.catch(noop)\n\n    return p\n  }\n\n  function drained () {\n    var p = new Promise(function (resolve) {\n      process.nextTick(function () {\n        if (queue.idle()) {\n          resolve()\n        } else {\n          var previousDrain = queue.drain\n          queue.drain = function () {\n            if (typeof previousDrain === 'function') previousDrain()\n            resolve()\n            queue.drain = previousDrain\n          }\n        }\n      })\n    })\n\n    return p\n  }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n    if (settings.errorFilter === null) {\n        return true;\n    }\n    return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n    return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n    return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n    if (a === '') {\n        return b;\n    }\n    /**\n     * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n     */\n    if (a.endsWith(separator)) {\n        return a + b;\n    }\n    return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n    constructor(_root, _settings) {\n        super(_root, _settings);\n        this._settings = _settings;\n        this._scandir = fsScandir.scandir;\n        this._emitter = new events_1.EventEmitter();\n        this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        this._queue.drain = () => {\n            if (!this._isFatalError) {\n                this._emitter.emit('end');\n            }\n        };\n    }\n    read() {\n        this._isFatalError = false;\n        this._isDestroyed = false;\n        setImmediate(() => {\n            this._pushToQueue(this._root, this._settings.basePath);\n        });\n        return this._emitter;\n    }\n    get isDestroyed() {\n        return this._isDestroyed;\n    }\n    destroy() {\n        if (this._isDestroyed) {\n            throw new Error('The reader is already destroyed');\n        }\n        this._isDestroyed = true;\n        this._queue.killAndDrain();\n    }\n    onEntry(callback) {\n        this._emitter.on('entry', callback);\n    }\n    onError(callback) {\n        this._emitter.once('error', callback);\n    }\n    onEnd(callback) {\n        this._emitter.once('end', callback);\n    }\n    _pushToQueue(directory, base) {\n        const queueItem = { directory, base };\n        this._queue.push(queueItem, (error) => {\n            if (error !== null) {\n                this._handleError(error);\n            }\n        });\n    }\n    _worker(item, done) {\n        this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n            if (error !== null) {\n                done(error, undefined);\n                return;\n            }\n            for (const entry of entries) {\n                this._handleEntry(entry, item.base);\n            }\n            done(null, undefined);\n        });\n    }\n    _handleError(error) {\n        if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n            return;\n        }\n        this._isFatalError = true;\n        this._isDestroyed = true;\n        this._emitter.emit('error', error);\n    }\n    _handleEntry(entry, base) {\n        if (this._isDestroyed || this._isFatalError) {\n            return;\n        }\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._emitEntry(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _emitEntry(entry) {\n        this._emitter.emit('entry', entry);\n    }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._storage = [];\n    }\n    read(callback) {\n        this._reader.onError((error) => {\n            callFailureCallback(callback, error);\n        });\n        this._reader.onEntry((entry) => {\n            this._storage.push(entry);\n        });\n        this._reader.onEnd(() => {\n            callSuccessCallback(callback, this._storage);\n        });\n        this._reader.read();\n    }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n    callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n    callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new async_1.default(this._root, this._settings);\n        this._stream = new stream_1.Readable({\n            objectMode: true,\n            read: () => { },\n            destroy: () => {\n                if (!this._reader.isDestroyed) {\n                    this._reader.destroy();\n                }\n            }\n        });\n    }\n    read() {\n        this._reader.onError((error) => {\n            this._stream.emit('error', error);\n        });\n        this._reader.onEntry((entry) => {\n            this._stream.push(entry);\n        });\n        this._reader.onEnd(() => {\n            this._stream.push(null);\n        });\n        this._reader.read();\n        return this._stream;\n    }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._scandir = fsScandir.scandirSync;\n        this._storage = [];\n        this._queue = new Set();\n    }\n    read() {\n        this._pushToQueue(this._root, this._settings.basePath);\n        this._handleQueue();\n        return this._storage;\n    }\n    _pushToQueue(directory, base) {\n        this._queue.add({ directory, base });\n    }\n    _handleQueue() {\n        for (const item of this._queue.values()) {\n            this._handleDirectory(item.directory, item.base);\n        }\n    }\n    _handleDirectory(directory, base) {\n        try {\n            const entries = this._scandir(directory, this._settings.fsScandirSettings);\n            for (const entry of entries) {\n                this._handleEntry(entry, base);\n            }\n        }\n        catch (error) {\n            this._handleError(error);\n        }\n    }\n    _handleError(error) {\n        if (!common.isFatalError(this._settings, error)) {\n            return;\n        }\n        throw error;\n    }\n    _handleEntry(entry, base) {\n        const fullpath = entry.path;\n        if (base !== undefined) {\n            entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n        }\n        if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n            this._pushToStorage(entry);\n        }\n        if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n            this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n        }\n    }\n    _pushToStorage(entry) {\n        this._storage.push(entry);\n    }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n    constructor(_root, _settings) {\n        this._root = _root;\n        this._settings = _settings;\n        this._reader = new sync_1.default(this._root, this._settings);\n    }\n    read() {\n        return this._reader.read();\n    }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.basePath = this._getValue(this._options.basePath, undefined);\n        this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n        this.deepFilter = this._getValue(this._options.deepFilter, null);\n        this.entryFilter = this._getValue(this._options.entryFilter, null);\n        this.errorFilter = this._getValue(this._options.errorFilter, null);\n        this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n        this.fsScandirSettings = new fsScandir.Settings({\n            followSymbolicLinks: this._options.followSymbolicLinks,\n            fs: this._options.fs,\n            pathSegmentSeparator: this._options.pathSegmentSeparator,\n            stats: this._options.stats,\n            throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n        });\n    }\n    _getValue(option, value) {\n        return option !== null && option !== void 0 ? option : value;\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n    if (typeof optionsOrSettingsOrCallback === 'function') {\n        new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n        return;\n    }\n    new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new sync_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n    const settings = getSettings(optionsOrSettings);\n    const provider = new stream_1.default(directory, settings);\n    return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n    if (settingsOrOptions instanceof settings_1.default) {\n        return settingsOrOptions;\n    }\n    return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n    constructor(_settings) {\n        this._settings = _settings;\n        this._fsStatSettings = new fsStat.Settings({\n            followSymbolicLink: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n        });\n    }\n    _getFullEntryPath(filepath) {\n        return path.resolve(this._settings.cwd, filepath);\n    }\n    _makeEntry(stats, pattern) {\n        const entry = {\n            name: pattern,\n            path: pattern,\n            dirent: utils.fs.createDirentFromStats(pattern, stats)\n        };\n        if (this._settings.stats) {\n            entry.stats = stats;\n        }\n        return entry;\n    }\n    _isFatalError(error) {\n        return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n    }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkStream = fsWalk.walkStream;\n        this._stat = fsStat.stat;\n    }\n    dynamic(root, options) {\n        return this._walkStream(root, options);\n    }\n    static(patterns, options) {\n        const filepaths = patterns.map(this._getFullEntryPath, this);\n        const stream = new stream_1.PassThrough({ objectMode: true });\n        stream._write = (index, _enc, done) => {\n            return this._getEntry(filepaths[index], patterns[index], options)\n                .then((entry) => {\n                if (entry !== null && options.entryFilter(entry)) {\n                    stream.push(entry);\n                }\n                if (index === filepaths.length - 1) {\n                    stream.end();\n                }\n                done();\n            })\n                .catch(done);\n        };\n        for (let i = 0; i < filepaths.length; i++) {\n            stream.write(i);\n        }\n        return stream;\n    }\n    _getEntry(filepath, pattern, options) {\n        return this._getStat(filepath)\n            .then((stats) => this._makeEntry(stats, pattern))\n            .catch((error) => {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        });\n    }\n    _getStat(filepath) {\n        return new Promise((resolve, reject) => {\n            this._stat(filepath, this._fsStatSettings, (error, stats) => {\n                return error === null ? resolve(stats) : reject(error);\n            });\n        });\n    }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkAsync = fsWalk.walk;\n        this._readerStream = new stream_1.default(this._settings);\n    }\n    dynamic(root, options) {\n        return new Promise((resolve, reject) => {\n            this._walkAsync(root, options, (error, entries) => {\n                if (error === null) {\n                    resolve(entries);\n                }\n                else {\n                    reject(error);\n                }\n            });\n        });\n    }\n    async static(patterns, options) {\n        const entries = [];\n        const stream = this._readerStream.static(patterns, options);\n        // After #235, replace it with an asynchronous iterator.\n        return new Promise((resolve, reject) => {\n            stream.once('error', reject);\n            stream.on('data', (entry) => entries.push(entry));\n            stream.once('end', () => resolve(entries));\n        });\n    }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n    constructor(_patterns, _settings, _micromatchOptions) {\n        this._patterns = _patterns;\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this._storage = [];\n        this._fillStorage();\n    }\n    _fillStorage() {\n        for (const pattern of this._patterns) {\n            const segments = this._getPatternSegments(pattern);\n            const sections = this._splitSegmentsIntoSections(segments);\n            this._storage.push({\n                complete: sections.length <= 1,\n                pattern,\n                segments,\n                sections\n            });\n        }\n    }\n    _getPatternSegments(pattern) {\n        const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n        return parts.map((part) => {\n            const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n            if (!dynamic) {\n                return {\n                    dynamic: false,\n                    pattern: part\n                };\n            }\n            return {\n                dynamic: true,\n                pattern: part,\n                patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n            };\n        });\n    }\n    _splitSegmentsIntoSections(segments) {\n        return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n    }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n    match(filepath) {\n        const parts = filepath.split('/');\n        const levels = parts.length;\n        const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n        for (const pattern of patterns) {\n            const section = pattern.sections[0];\n            /**\n             * In this case, the pattern has a globstar and we must read all directories unconditionally,\n             * but only if the level has reached the end of the first group.\n             *\n             * fixtures/{a,b}/**\n             *  ^ true/false  ^ always true\n            */\n            if (!pattern.complete && levels > section.length) {\n                return true;\n            }\n            const match = parts.every((part, index) => {\n                const segment = pattern.segments[index];\n                if (segment.dynamic && segment.patternRe.test(part)) {\n                    return true;\n                }\n                if (!segment.dynamic && segment.pattern === part) {\n                    return true;\n                }\n                return false;\n            });\n            if (match) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n    }\n    getFilter(basePath, positive, negative) {\n        const matcher = this._getMatcher(positive);\n        const negativeRe = this._getNegativePatternsRe(negative);\n        return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n    }\n    _getMatcher(patterns) {\n        return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n    }\n    _getNegativePatternsRe(patterns) {\n        const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n        return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n    }\n    _filter(basePath, entry, matcher, negativeRe) {\n        if (this._isSkippedByDeep(basePath, entry.path)) {\n            return false;\n        }\n        if (this._isSkippedSymbolicLink(entry)) {\n            return false;\n        }\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n            return false;\n        }\n        return this._isSkippedByNegativePatterns(filepath, negativeRe);\n    }\n    _isSkippedByDeep(basePath, entryPath) {\n        /**\n         * Avoid unnecessary depth calculations when it doesn't matter.\n         */\n        if (this._settings.deep === Infinity) {\n            return false;\n        }\n        return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n    }\n    _getEntryLevel(basePath, entryPath) {\n        const entryPathDepth = entryPath.split('/').length;\n        if (basePath === '') {\n            return entryPathDepth;\n        }\n        const basePathDepth = basePath.split('/').length;\n        return entryPathDepth - basePathDepth;\n    }\n    _isSkippedSymbolicLink(entry) {\n        return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n    }\n    _isSkippedByPositivePatterns(entryPath, matcher) {\n        return !this._settings.baseNameMatch && !matcher.match(entryPath);\n    }\n    _isSkippedByNegativePatterns(entryPath, patternsRe) {\n        return !utils.pattern.matchAny(entryPath, patternsRe);\n    }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n    constructor(_settings, _micromatchOptions) {\n        this._settings = _settings;\n        this._micromatchOptions = _micromatchOptions;\n        this.index = new Map();\n    }\n    getFilter(positive, negative) {\n        const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);\n        const negativeRe = utils.pattern.convertPatternsToRe(negative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }));\n        return (entry) => this._filter(entry, positiveRe, negativeRe);\n    }\n    _filter(entry, positiveRe, negativeRe) {\n        const filepath = utils.path.removeLeadingDotSegment(entry.path);\n        if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n            return false;\n        }\n        if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n            return false;\n        }\n        if (this._isSkippedByAbsoluteNegativePatterns(filepath, negativeRe)) {\n            return false;\n        }\n        const isDirectory = entry.dirent.isDirectory();\n        const isMatched = this._isMatchToPatterns(filepath, positiveRe, isDirectory) && !this._isMatchToPatterns(filepath, negativeRe, isDirectory);\n        if (this._settings.unique && isMatched) {\n            this._createIndexRecord(filepath);\n        }\n        return isMatched;\n    }\n    _isDuplicateEntry(filepath) {\n        return this.index.has(filepath);\n    }\n    _createIndexRecord(filepath) {\n        this.index.set(filepath, undefined);\n    }\n    _onlyFileFilter(entry) {\n        return this._settings.onlyFiles && !entry.dirent.isFile();\n    }\n    _onlyDirectoryFilter(entry) {\n        return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n    }\n    _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {\n        if (!this._settings.absolute) {\n            return false;\n        }\n        const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);\n        return utils.pattern.matchAny(fullpath, patternsRe);\n    }\n    _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n        // Trying to match files and directories by patterns.\n        const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n        // A pattern with a trailling slash can be used for directory matching.\n        // To apply such pattern, we need to add a tralling slash to the path.\n        if (!isMatched && isDirectory) {\n            return utils.pattern.matchAny(filepath + '/', patternsRe);\n        }\n        return isMatched;\n    }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getFilter() {\n        return (error) => this._isNonFatalError(error);\n    }\n    _isNonFatalError(error) {\n        return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n    }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n    constructor(_settings) {\n        this._settings = _settings;\n    }\n    getTransformer() {\n        return (entry) => this._transform(entry);\n    }\n    _transform(entry) {\n        let filepath = entry.path;\n        if (this._settings.absolute) {\n            filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n            filepath = utils.path.unixify(filepath);\n        }\n        if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n            filepath += '/';\n        }\n        if (!this._settings.objectMode) {\n            return filepath;\n        }\n        return Object.assign(Object.assign({}, entry), { path: filepath });\n    }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n    constructor(_settings) {\n        this._settings = _settings;\n        this.errorFilter = new error_1.default(this._settings);\n        this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n        this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n        this.entryTransformer = new entry_2.default(this._settings);\n    }\n    _getRootDirectory(task) {\n        return path.resolve(this._settings.cwd, task.base);\n    }\n    _getReaderOptions(task) {\n        const basePath = task.base === '.' ? '' : task.base;\n        return {\n            basePath,\n            pathSegmentSeparator: '/',\n            concurrency: this._settings.concurrency,\n            deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n            entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n            errorFilter: this.errorFilter.getFilter(),\n            followSymbolicLinks: this._settings.followSymbolicLinks,\n            fs: this._settings.fs,\n            stats: this._settings.stats,\n            throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n            transform: this.entryTransformer.getTransformer()\n        };\n    }\n    _getMicromatchOptions() {\n        return {\n            dot: this._settings.dot,\n            matchBase: this._settings.baseNameMatch,\n            nobrace: !this._settings.braceExpansion,\n            nocase: !this._settings.caseSensitiveMatch,\n            noext: !this._settings.extglob,\n            noglobstar: !this._settings.globstar,\n            posix: true,\n            strictSlashes: false\n        };\n    }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new async_1.default(this._settings);\n    }\n    async read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = await this.api(root, task, options);\n        return entries.map((entry) => options.transform(entry));\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new stream_2.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const source = this.api(root, task, options);\n        const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n        source\n            .once('error', (error) => destination.emit('error', error))\n            .on('data', (entry) => destination.emit('data', options.transform(entry)))\n            .once('end', () => destination.emit('end'));\n        destination\n            .once('close', () => source.destroy());\n        return destination;\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n    constructor() {\n        super(...arguments);\n        this._walkSync = fsWalk.walkSync;\n        this._statSync = fsStat.statSync;\n    }\n    dynamic(root, options) {\n        return this._walkSync(root, options);\n    }\n    static(patterns, options) {\n        const entries = [];\n        for (const pattern of patterns) {\n            const filepath = this._getFullEntryPath(pattern);\n            const entry = this._getEntry(filepath, pattern, options);\n            if (entry === null || !options.entryFilter(entry)) {\n                continue;\n            }\n            entries.push(entry);\n        }\n        return entries;\n    }\n    _getEntry(filepath, pattern, options) {\n        try {\n            const stats = this._getStat(filepath);\n            return this._makeEntry(stats, pattern);\n        }\n        catch (error) {\n            if (options.errorFilter(error)) {\n                return null;\n            }\n            throw error;\n        }\n    }\n    _getStat(filepath) {\n        return this._statSync(filepath, this._fsStatSettings);\n    }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n    constructor() {\n        super(...arguments);\n        this._reader = new sync_1.default(this._settings);\n    }\n    read(task) {\n        const root = this._getRootDirectory(task);\n        const options = this._getReaderOptions(task);\n        const entries = this.api(root, task, options);\n        return entries.map(options.transform);\n    }\n    api(root, task, options) {\n        if (task.dynamic) {\n            return this._reader.dynamic(root, options);\n        }\n        return this._reader.static(task.patterns, options);\n    }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n    lstat: fs.lstat,\n    lstatSync: fs.lstatSync,\n    stat: fs.stat,\n    statSync: fs.statSync,\n    readdir: fs.readdir,\n    readdirSync: fs.readdirSync\n};\nclass Settings {\n    constructor(_options = {}) {\n        this._options = _options;\n        this.absolute = this._getValue(this._options.absolute, false);\n        this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n        this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n        this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n        this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n        this.cwd = this._getValue(this._options.cwd, process.cwd());\n        this.deep = this._getValue(this._options.deep, Infinity);\n        this.dot = this._getValue(this._options.dot, false);\n        this.extglob = this._getValue(this._options.extglob, true);\n        this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n        this.fs = this._getFileSystemMethods(this._options.fs);\n        this.globstar = this._getValue(this._options.globstar, true);\n        this.ignore = this._getValue(this._options.ignore, []);\n        this.markDirectories = this._getValue(this._options.markDirectories, false);\n        this.objectMode = this._getValue(this._options.objectMode, false);\n        this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n        this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n        this.stats = this._getValue(this._options.stats, false);\n        this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n        this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n        this.unique = this._getValue(this._options.unique, true);\n        if (this.onlyDirectories) {\n            this.onlyFiles = false;\n        }\n        if (this.stats) {\n            this.objectMode = true;\n        }\n        // Remove the cast to the array in the next major (#404).\n        this.ignore = [].concat(this.ignore);\n    }\n    _getValue(option, value) {\n        return option === undefined ? value : option;\n    }\n    _getFileSystemMethods(methods = {}) {\n        return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n    }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n    assertPatternsInput(source);\n    const works = getWorks(source, async_1.default, options);\n    const result = await Promise.all(works);\n    return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n    FastGlob.glob = FastGlob;\n    FastGlob.globSync = sync;\n    FastGlob.globStream = stream;\n    FastGlob.async = FastGlob;\n    function sync(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, sync_1.default, options);\n        return utils.array.flatten(works);\n    }\n    FastGlob.sync = sync;\n    function stream(source, options) {\n        assertPatternsInput(source);\n        const works = getWorks(source, stream_1.default, options);\n        /**\n         * The stream returned by the provider cannot work with an asynchronous iterator.\n         * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n         * This affects performance (+25%). I don't see best solution right now.\n         */\n        return utils.stream.merge(works);\n    }\n    FastGlob.stream = stream;\n    function generateTasks(source, options) {\n        assertPatternsInput(source);\n        const patterns = [].concat(source);\n        const settings = new settings_1.default(options);\n        return taskManager.generate(patterns, settings);\n    }\n    FastGlob.generateTasks = generateTasks;\n    function isDynamicPattern(source, options) {\n        assertPatternsInput(source);\n        const settings = new settings_1.default(options);\n        return utils.pattern.isDynamicPattern(source, settings);\n    }\n    FastGlob.isDynamicPattern = isDynamicPattern;\n    function escapePath(source) {\n        assertPatternsInput(source);\n        return utils.path.escape(source);\n    }\n    FastGlob.escapePath = escapePath;\n    function convertPathToPattern(source) {\n        assertPatternsInput(source);\n        return utils.path.convertPathToPattern(source);\n    }\n    FastGlob.convertPathToPattern = convertPathToPattern;\n    let posix;\n    (function (posix) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapePosixPath(source);\n        }\n        posix.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertPosixPathToPattern(source);\n        }\n        posix.convertPathToPattern = convertPathToPattern;\n    })(posix = FastGlob.posix || (FastGlob.posix = {}));\n    let win32;\n    (function (win32) {\n        function escapePath(source) {\n            assertPatternsInput(source);\n            return utils.path.escapeWindowsPath(source);\n        }\n        win32.escapePath = escapePath;\n        function convertPathToPattern(source) {\n            assertPatternsInput(source);\n            return utils.path.convertWindowsPathToPattern(source);\n        }\n        win32.convertPathToPattern = convertPathToPattern;\n    })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n    const patterns = [].concat(source);\n    const settings = new settings_1.default(options);\n    const tasks = taskManager.generate(patterns, settings);\n    const provider = new _Provider(settings);\n    return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n    const source = [].concat(input);\n    const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n    if (!isValidSource) {\n        throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n    }\n}\nmodule.exports = FastGlob;\n","import fs from 'fs/promises';\nimport crypto from 'crypto';\nimport path from 'path';\nimport glob from 'fast-glob';\n\n/**\n * Rigstate ContextHasher: Generates cryptographic signatures for architectural modules.\n * Used for drift detection and \"Digital Sealing\" of verified states.\n */\nexport async function generateContextHashes(cwd: string, patterns: string[]): Promise<Record<string, string>> {\n    const hashes: Record<string, string> = {};\n\n    const files = await glob(patterns, {\n        cwd,\n        absolute: true,\n        onlyFiles: true,\n        ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/.next/**']\n    });\n\n    for (const file of files) {\n        try {\n            const content = await fs.readFile(file, 'utf-8');\n            const relativePath = path.relative(cwd, file);\n\n            // Normalize line endings and whitespace for more robust hashing\n            const normalizedContent = content.replace(/\\r\\n/g, '\\n').trim();\n\n            const hash = crypto.createHash('sha256').update(normalizedContent).digest('hex');\n            hashes[relativePath] = hash;\n        } catch (error) {\n            console.warn(`[Hasher] Could not read file ${file}:`, error);\n        }\n    }\n\n    return hashes;\n}\n\n/**\n * Verifies local drift against a previously accepted baseline.\n */\nexport function detectDrift(currentHashes: Record<string, string>, baselineHashes: Record<string, string>) {\n    const drift: { file: string; type: 'MODIFIED' | 'MISSING' | 'NEW' }[] = [];\n\n    // Check for modifications and missing files\n    for (const [file, hash] of Object.entries(baselineHashes)) {\n        if (!currentHashes[file]) {\n            drift.push({ file, type: 'MISSING' });\n        } else if (currentHashes[file] !== hash) {\n            drift.push({ file, type: 'MODIFIED' });\n        }\n    }\n\n    // Check for new files (optional, maybe not relevant for architectural baseline)\n    for (const file of Object.keys(currentHashes)) {\n        if (!baselineHashes[file]) {\n            drift.push({ file, type: 'NEW' });\n        }\n    }\n\n    return drift;\n}\n","import axios from 'axios';\nimport chalk from 'chalk';\nimport { generateContextHashes, detectDrift } from './hasher.js';\nimport path from 'path';\n\n/**\n * Syncs the local state with Nexus Registry.\n * Handles \"Digital Sealing\" and architecture verification.\n */\nexport async function syncNexus(apiUrl: string, apiKey: string, projectId: string, cwd: string, force: boolean = false) {\n    console.log(chalk.bold('\\n🏛️  Nexus Registry Synchronization...'));\n\n    try {\n        // 1. Check if baseline already exists\n        if (!force) {\n            const existing = await axios.get(`${apiUrl}/api/v1/nexus/decisions`, {\n                params: { project_id: projectId, slug: 'current-baseline' },\n                headers: { Authorization: `Bearer ${apiKey}` }\n            });\n\n            if (existing.data.success && existing.data.decision) {\n                console.log(chalk.dim('   Existing baseline found in Nexus Registry. Skip sealing...'));\n                return { success: true, hashes: existing.data.decision.context_hashes };\n            }\n        }\n\n        // 2. Generate Signatures\n        const patterns = [\n            'IMPLEMENTATION_PLAN.md',\n            'IMPLEMENTATION_PLAN_*.md',\n            'apps/web/src/actions/brain.ts',\n            'apps/web/src/components/dashboard/project-brain-panel.tsx',\n            'apps/web/src/components/onboarding/workshop-page.tsx',\n            'apps/web/src/lib/brain/**/*.ts',\n            'packages/cli/src/**/*.ts'\n        ];\n        const hashes = await generateContextHashes(cwd, patterns);\n        const fileCount = Object.keys(hashes).length;\n        console.log(chalk.dim(`   Generated ${fileCount} signatures for core modules.`));\n\n        // 3. Digital Sealing: Upload to Nexus Registry\n        const response = await axios.post(`${apiUrl}/api/v1/nexus/seal`, {\n            project_id: projectId,\n            hashes,\n            title: `Boot Sync baseline`,\n            slug: 'current-baseline',\n            rationale: 'Automated baseline from CLI boot-up.'\n        }, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (response.data.success) {\n            console.log(chalk.green(`   ✅ Digital Seal applied. State is now ACCEPTED baseline.`));\n        }\n\n        return { success: true, hashes };\n\n    } catch (error: any) {\n        console.warn(chalk.yellow(`   ⚠ Nexus Sync failed: ${error.message}`));\n        return { success: false, error: error.message };\n    }\n}\n\n/**\n * Verifies local code against the \"Contract\" in Nexus.\n */\nexport async function checkArchitectureDrift(apiUrl: string, apiKey: string, projectId: string, cwd: string) {\n    try {\n        // 1. Fetch baseline from Nexus\n        // Normally we'd have a GET endpoint for this\n        // For now, we'll simulate fetching the 'current-baseline'\n        const response = await axios.get(`${apiUrl}/api/v1/nexus/decisions`, {\n            params: { project_id: projectId, slug: 'current-baseline' },\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (!response.data.success || !response.data.decision) return;\n\n        const baselineHashes = response.data.decision.context_hashes || {};\n\n        // 2. Compare with current\n        const currentHashes = await generateContextHashes(cwd, Object.keys(baselineHashes));\n        const drift = detectDrift(currentHashes, baselineHashes);\n\n        if (drift.length > 0) {\n            console.log(chalk.bold('\\n🛡️  Architecture Drift Detected:'));\n            drift.forEach(d => {\n                const color = d.type === 'MODIFIED' ? chalk.yellow : chalk.red;\n                console.log(color(`   ${d.type.padEnd(8)}: ${d.file}`));\n            });\n            console.log(chalk.dim('   (Run \"rigstate heal\" or \"rigstate sync\" to update baseline)'));\n        } else {\n            console.log(chalk.green('\\n✅ Architecture Integrity: Verified. Local matches baseline.'));\n        }\n\n    } catch (e) {\n        // Skip silently if baseline not found\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createLoginCommand } from './commands/login.js';\nimport { createLinkCommand } from './commands/link.js';\nimport { createScanCommand } from './commands/scan.js';\nimport { createFixCommand } from './commands/fix.js';\nimport { createSyncCommand } from './commands/sync.js';\nimport { createInitCommand } from './commands/init.js';\nimport { createCheckCommand } from './commands/check.js';\nimport { createHooksCommand } from './commands/hooks.js';\nimport { createDaemonCommand } from './commands/daemon.js';\nimport { createWorkCommand } from './commands/work.js';\nimport { createWatchCommand } from './commands/watch.js';\nimport { createFocusCommand } from './commands/focus.js';\nimport { createEnvPullCommand } from './commands/env.js';\nimport { createConfigCommand } from './commands/config.js';\nimport { createMcpCommand } from './commands/mcp.js';\nimport { createNexusCommand } from './commands/nexus.js';\nimport { createSyncRulesCommand } from './commands/sync-rules.js';\nimport { createOverrideCommand } from './commands/override.js';\nimport { createIdeaCommand } from './commands/idea.js';\nimport { createReleaseCommand } from './commands/release.js';\nimport { createRoadmapCommand } from './commands/roadmap.js';\nimport { createCouncilCommand } from './commands/council.js';\nimport { createPlanCommand } from './commands/plan.js';\nimport { createGenesisCommand } from './commands/genesis.js';\nimport { createRememberCommand } from './commands/remember.js';\nimport { createAskCommand } from './commands/ask.js';\nimport { createMonitorCommand } from './commands/monitor.js';\nimport { createAntidoteCommand } from './commands/antidote.js';\nimport { createHealCommand } from './commands/heal.js';\nimport { createCommitCommand } from './commands/commit.js';\nimport { createNextCommand } from './commands/next.js';\nimport { createHistoryCommand } from './commands/history.js';\nimport { createBootCommand } from './commands/boot.js';\nimport { checkVersion } from './utils/version.js';\nimport dotenv from 'dotenv';\n\nimport pkg from '../package.json' assert { type: 'json' };\n\n// Load environment variables\ndotenv.config();\n\nconst program = new Command();\n\nprogram\n    .name('rigstate')\n    .description('CLI for Rigstate - The AI-Native Dev Studio')\n    .version(pkg.version);\n\n// Register commands\nprogram.addCommand(createLoginCommand());\nprogram.addCommand(createLinkCommand());\nprogram.addCommand(createScanCommand());\nprogram.addCommand(createFixCommand());\nprogram.addCommand(createSyncCommand());\nprogram.addCommand(createInitCommand());\nprogram.addCommand(createCheckCommand());\nprogram.addCommand(createHooksCommand());\nprogram.addCommand(createDaemonCommand());\nprogram.addCommand(createWorkCommand());\nprogram.addCommand(createWatchCommand());\nprogram.addCommand(createFocusCommand());\nprogram.addCommand(createEnvPullCommand());\nprogram.addCommand(createConfigCommand());\nprogram.addCommand(createMcpCommand());\nprogram.addCommand(createNexusCommand());\nprogram.addCommand(createSyncRulesCommand());\nprogram.addCommand(createOverrideCommand());\nprogram.addCommand(createIdeaCommand());\nprogram.addCommand(createReleaseCommand());\nprogram.addCommand(createRoadmapCommand());\nprogram.addCommand(createCouncilCommand());\nprogram.addCommand(createPlanCommand());\nprogram.addCommand(createGenesisCommand());\nprogram.addCommand(createRememberCommand());\nprogram.addCommand(createAskCommand());\nprogram.addCommand(createMonitorCommand());\nprogram.addCommand(createAntidoteCommand());\nprogram.addCommand(createHealCommand());\nprogram.addCommand(createCommitCommand());\nprogram.addCommand(createNextCommand());\nprogram.addCommand(createBootCommand());\nprogram.addCommand(createHistoryCommand());\n\nprogram.hook('preAction', async () => {\n    await checkVersion();\n});\n\n// Add helpful examples\nprogram.on('--help', () => {\n    console.log('');\n    console.log(chalk.bold('Examples:'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate boot'));\n    console.log(chalk.dim('    The ultimate takeoff. Syncs rules, starts daemon and monitor.'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate login sk_rigstate_your_api_key'));\n    console.log(chalk.dim('    Authenticate with your Rigstate API key'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate scan'));\n    console.log(chalk.dim('    Scan the current directory'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate genesis'));\n    console.log(chalk.dim('    Initialize project foundation (auto-detects stack)'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate genesis --status'));\n    console.log(chalk.dim('    Check genesis status without triggering'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate scan ./src --project abc123'));\n    console.log(chalk.dim('    Scan a specific directory with project ID'));\n    console.log('');\n    console.log(chalk.cyan('  $ rigstate scan --json'));\n    console.log(chalk.dim('    Output results in JSON format (useful for IDE extensions)'));\n    console.log('');\n});\n\n// Parse arguments\nprogram.parse(process.argv);\n\n// Show help if no command provided\nif (!process.argv.slice(2).length) {\n    program.outputHelp();\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { setApiKey } from '../utils/config.js';\n\nexport function createLoginCommand(): Command {\n  return new Command('login')\n    .description('Authenticate with your Rigstate API key')\n    .argument('<api-key>', 'Your Rigstate API key (starts with sk_)')\n    .action(async (apiKey: string) => {\n      try {\n        // Basic validation\n        if (!apiKey || !apiKey.startsWith('sk_rigstate_')) {\n          console.error(chalk.red('❌ Invalid API key format'));\n          console.error(chalk.dim('API keys must start with \"sk_rigstate_\"'));\n          process.exit(1);\n        }\n\n        // Store the API key\n        setApiKey(apiKey);\n\n        console.log(chalk.green('✅ Successfully logged in!'));\n        console.log(\n          chalk.dim(\n            `\\nYour API key has been securely stored. You can now use \"rigstate scan\" to audit your code.`\n          )\n        );\n\n        console.log(chalk.bold('\\n🤖 Cursor MCP Configuration'));\n        console.log(chalk.dim('Copy and paste this into Cursor Settings -> Features -> MCP:'));\n        console.log(chalk.cyan(`\n{\n  \"mcpServers\": {\n    \"rigstate\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"@rigstate/mcp@latest\"\n      ],\n      \"env\": {\n        \"RIGSTATE_API_KEY\": \"${apiKey}\"\n      }\n    }\n  }\n}`));\n      } catch (error) {\n        console.error(\n          chalk.red('❌ Login failed:'),\n          error instanceof Error ? error.message : 'Unknown error'\n        );\n        process.exit(1);\n      }\n    });\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport os from 'os';\nimport { getApiUrl, getApiKey } from '../utils/config.js';\n\nexport function createLinkCommand() {\n    return new Command('link')\n        .description('Link current directory to a Rigstate project')\n        .argument('[projectId]', 'Project ID to link')\n        .action(async (projectId) => {\n            // Check Global Override first\n            try {\n                const globalPath = path.join(os.homedir(), '.rigstate', 'config.json');\n                const globalData = await fs.readFile(globalPath, 'utf-8').catch(() => null);\n                if (globalData) {\n                    const config = JSON.parse(globalData);\n                    const cwd = process.cwd();\n                    if (config.overrides && config.overrides[cwd]) {\n                        const overrideId = config.overrides[cwd];\n                        console.warn(chalk.yellow(`Global override detected. Enforcing project ID: ${overrideId}`));\n                        if (!projectId) projectId = overrideId;\n                        else if (projectId !== overrideId) {\n                            console.warn(chalk.red(`Ignoring provided ID ${projectId}. Using override.`));\n                            projectId = overrideId;\n                        }\n                    }\n                }\n            } catch (e) { }\n\n            // Interactive Selection if no ID\n            if (!projectId) {\n                try {\n                    const inquirer = (await import('inquirer')).default;\n                    const { getApiKey: _getApiKey, getApiUrl: _getApiUrl } = await import('../utils/config.js');\n                    const apiKey = getApiKey();\n                    const apiUrl = getApiUrl();\n\n                    if (!apiKey) {\n                        console.error(chalk.red('Not authenticated. Please run \"rigstate login\" or provide a Project ID.'));\n                        process.exit(1);\n                    }\n\n                    console.log(chalk.dim('Fetching your projects...'));\n                    const axios = (await import('axios')).default;\n                    const response = await axios.get(`${apiUrl}/api/v1/projects`, {\n                        headers: { Authorization: `Bearer ${apiKey}` }\n                    });\n\n                    if (!response.data.success || !response.data.data.projects?.length) {\n                        console.error(chalk.yellow('No projects found. Create one at https://app.rigstate.com'));\n                        process.exit(1);\n                    }\n\n                    const choices = response.data.data.projects.map((p: any) => ({\n                        name: `${p.name} (${p.id})`,\n                        value: p.id\n                    }));\n\n                    const answer = await inquirer.prompt([{\n                        type: 'list',\n                        name: 'id',\n                        message: 'Select project to link:',\n                        choices\n                    }]);\n                    projectId = answer.id;\n\n                } catch (e: any) {\n                    console.error(chalk.red(`Failed to fetch projects: ${e.message}`));\n                    console.error('Please provide project ID manually: rigstate link <id>');\n                    process.exit(1);\n                }\n            }\n\n            const cwd = process.cwd();\n            try {\n                const { saveManifest } = await import('../utils/manifest.js');\n                const targetFile = await saveManifest({\n                    project_id: projectId,\n                    linked_at: new Date().toISOString(),\n                    api_url: getApiUrl() !== 'https://app.rigstate.com' ? getApiUrl() : undefined\n                });\n\n                console.log(chalk.green(`✔ Linked to project ID: ${projectId}`));\n                console.log(chalk.dim(`Created local identity manifest at ${path.relative(cwd, targetFile)}`));\n\n                // === SMART AUTOMATION ===\n                console.log('');\n                console.log(chalk.bold('🤖 Rigstate Automation Detected'));\n                console.log('');\n\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n\n                if (apiKey) {\n                    // 1. Env Sync\n                    console.log(chalk.blue('🔐 Checking Vault for secrets...'));\n                    const { syncEnv } = await import('./env.js');\n                    await syncEnv(projectId, apiKey, apiUrl, true);\n\n                    // 2. Rules Sync\n                    console.log(chalk.blue('🧠 Syncing neural instructions...'));\n                    const { syncProjectRules } = await import('./sync-rules.js');\n                    await syncProjectRules(projectId, apiKey, apiUrl);\n\n                    // 3. Git Hooks (Auto-Vaccine)\n                    console.log(chalk.blue('🛡️  Injecting Guardian hooks & Safety nets...'));\n                    await installHooks(process.cwd());\n                    await hardenGitIgnore(process.cwd());\n\n                    // 4. Genesis Protocol (Smart Detection)\n                    console.log(chalk.blue('🏗️  Checking Genesis status...'));\n                    const { checkGenesisStatus, triggerGenesis } = await import('./genesis.js');\n                    const genesisStatus = await checkGenesisStatus(projectId, apiKey, apiUrl);\n\n                    if (!genesisStatus.complete) {\n                        // Try to trigger automatically — will fail gracefully if spec not ready\n                        const triggered = await triggerGenesis(projectId, apiKey, apiUrl, false);\n                        if (!triggered) {\n                            console.log(chalk.dim('   💡 Run \"rigstate genesis\" after completing onboarding with Frank.'));\n                        }\n                    } else {\n                        console.log(chalk.green(`   ✔ Genesis complete (${genesisStatus.stepCount} foundation steps ready)`));\n                    }\n\n                    console.log('');\n                    console.log(chalk.bold.green('🚀 Link Complete! Your environment is ready.'));\n\n                    // 5. Tactical Suggestion\n                    const { suggestNextMove } = await import('./suggest.js');\n                    await suggestNextMove(projectId, apiKey, apiUrl);\n\n                } else {\n                    console.log('');\n                    console.log(chalk.bold.green('🚀 Link Complete!'));\n                }\n\n            } catch (error: any) {\n                if (error.message?.includes('Not authenticated')) {\n                    console.warn(chalk.yellow('⚠️  Not authenticated. Run \"rigstate login\" to enable automation features.'));\n                } else {\n                    console.error(chalk.red(`Failed to link project: ${error.message}`));\n                }\n            }\n        });\n}\n\nasync function hardenGitIgnore(cwd: string) {\n    const fs = await import('fs/promises');\n    const path = await import('path');\n    const ignorePath = path.join(cwd, '.gitignore');\n\n    const REQUIRED_IGNORES = [\n        '# Rigstate - Runtime Artifacts (Do not commit)',\n        '.rigstate/ACTIVE_VIOLATIONS.md',\n        '.rigstate/CURRENT_CONTEXT.md',\n        '.rigstate/daemon.pid',\n        '.rigstate/daemon.state.json',\n        '.rigstate/*.log',\n        '.rigstate/*.bak',\n        '# Keep identity tracked',\n        '!.rigstate/identity.json'\n    ];\n\n    try {\n        let content = '';\n        try {\n            content = await fs.readFile(ignorePath, 'utf-8');\n        } catch {\n            // No .gitignore, start fresh\n            content = '';\n        }\n\n        const missing = REQUIRED_IGNORES.filter(line => !content.includes(line) && !line.startsWith('#'));\n\n        if (missing.length > 0) {\n            console.log(chalk.dim('   Configuring .gitignore for Rigstate safety...'));\n            const toAppend = '\\n\\n' + REQUIRED_IGNORES.join('\\n') + '\\n';\n            await fs.writeFile(ignorePath, content + toAppend, 'utf-8');\n            console.log(chalk.green('   ✔ .gitignore updated (Artifacts protected)'));\n        } else {\n            console.log(chalk.green('   ✔ .gitignore already hardened'));\n        }\n    } catch (e: any) {\n        console.warn(chalk.yellow(`   Could not update .gitignore: ${e.message}`));\n    }\n}\n\nasync function installHooks(cwd: string) {\n    const fs = await import('fs/promises');\n    const path = await import('path');\n\n    // Check if git repo\n    try {\n        await fs.access(path.join(cwd, '.git'));\n    } catch {\n        console.log(chalk.dim('   (Not a git repository, skipping hooks)'));\n        return;\n    }\n\n    const hooksDir = path.join(cwd, '.husky');\n\n    // Check if simple husky setup exists or just do a manual pre-commit script\n    // For now, let's look for a basic pre-commit file in .git/hooks if husky isn't there\n    // Actually, let's just use the `hooks` command logic if possible, or a lightweight version\n\n    try {\n        // Simpler approach: Check if pre-commit exists and install if missing\n        const preCommitPath = path.join(cwd, '.git/hooks/pre-commit');\n        let shouldInstall = false;\n\n        try {\n            await fs.access(preCommitPath);\n            const content = await fs.readFile(preCommitPath, 'utf-8');\n            if (content.includes('rigstate')) {\n                console.log(chalk.green('   ✔ Git hooks already active'));\n            } else {\n                shouldInstall = true;\n            }\n        } catch {\n            shouldInstall = true;\n        }\n\n        if (shouldInstall) {\n            const PRE_COMMIT_SCRIPT = `#!/bin/sh\n# Rigstate Guardian Pre-commit Hook\n# Installed by: rigstate link (v0.7.25)\n\n# 1. Silent Sentinel Check\nif [ -f .rigstate/guardian.lock ]; then\n    echo \"🛑 INTERVENTION ACTIVE: Commit blocked by Silent Sentinel.\"\n    exit 1\nfi\n\necho \"🛡️  Running Guardian checks...\"\nrigstate check --staged --strict=critical\nexit $?\n`;\n            // Ensure hooks dir exists\n            await fs.mkdir(path.dirname(preCommitPath), { recursive: true });\n\n            // Write hook\n            if (await fileExists(preCommitPath)) {\n                const existing = await fs.readFile(preCommitPath, 'utf-8');\n                await fs.writeFile(preCommitPath, existing + '\\n\\n' + PRE_COMMIT_SCRIPT.replace('#!/bin/sh\\n', ''), { mode: 0o755 });\n            } else {\n                await fs.writeFile(preCommitPath, PRE_COMMIT_SCRIPT, { mode: 0o755 });\n            }\n            console.log(chalk.green('   ✔ Applied Guardian protection (git-hooks)'));\n        }\n\n    } catch (e: any) {\n        // Ignore hook errors during link\n        console.log(chalk.dim('   (Skipped hooks: ' + e.message + ')'));\n    }\n}\n\nasync function fileExists(path: string) {\n    const fs = await import('fs/promises');\n    try { await fs.access(path); return true; } catch { return false; }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { glob } from 'glob';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { readGitignore, shouldIgnore, isCodeFile } from '../utils/files.js';\n\ninterface ScanResult {\n    id: string;\n    file_path: string;\n    issues: Array<{\n        type: string;\n        severity: 'critical' | 'high' | 'medium' | 'low' | 'info';\n        message: string;\n        line?: number;\n    }>;\n}\n\ninterface ApiResponse {\n    results: ScanResult[];\n    summary: {\n        total_files: number;\n        total_issues: number;\n        by_severity: Record<string, number>;\n    };\n}\n\nexport function createScanCommand(): Command {\n    return new Command('scan')\n        .description('Scan code files for security and quality issues')\n        .argument('[path]', 'Directory or file to scan', '.')\n        .option('--json', 'Output results as JSON')\n        .option('--project <id>', 'Project ID to associate with this scan')\n        .action(async (targetPath: string, options: { json?: boolean; project?: string }) => {\n            const spinner = ora();\n\n            try {\n                // Get API credentials\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = options.project || getProjectId();\n\n                if (!projectId) {\n                    console.warn(\n                        chalk.yellow(\n                            '⚠️  No project ID specified. Use --project <id> or set a default.'\n                        )\n                    );\n                }\n\n                // Resolve target path\n                const scanPath = path.resolve(process.cwd(), targetPath);\n\n                spinner.start(`Scanning ${chalk.cyan(scanPath)}...`);\n\n                // Read .gitignore patterns\n                const gitignorePatterns = await readGitignore(scanPath);\n\n                // Find all code files\n                const pattern = path.join(scanPath, '**/*');\n                const allFiles = await glob(pattern, {\n                    nodir: true,\n                    dot: false,\n                    ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/build/**'],\n                });\n\n                // Filter files\n                const codeFiles = allFiles.filter((file) => {\n                    const relativePath = path.relative(scanPath, file);\n                    return isCodeFile(file) && !shouldIgnore(relativePath, gitignorePatterns);\n                });\n\n                if (codeFiles.length === 0) {\n                    spinner.warn(chalk.yellow('No code files found to scan.'));\n                    return;\n                }\n\n                spinner.text = `Found ${codeFiles.length} files. Scanning...`;\n\n                // Scan each file individually\n                const results: ScanResult[] = [];\n                let totalIssues = 0;\n                const severityCounts: Record<string, number> = {};\n\n                for (let i = 0; i < codeFiles.length; i++) {\n                    const filePath = codeFiles[i];\n                    const relativePath = path.relative(scanPath, filePath);\n\n                    spinner.text = `Scanning ${i + 1}/${codeFiles.length}: ${relativePath}`;\n\n                    try {\n                        const content = await fs.readFile(filePath, 'utf-8');\n\n                        // Call the API for this file\n                        const response = await axios.post(\n                            `${apiUrl}/api/v1/audit`,\n                            {\n                                content,\n                                file_path: relativePath,\n                                project_id: projectId,\n                            },\n                            {\n                                headers: {\n                                    'Authorization': `Bearer ${apiKey}`,\n                                    'Content-Type': 'application/json',\n                                },\n                                timeout: 60000, // 1 minute per file\n                            }\n                        );\n\n                        // Aggregate results\n                        const vulnerabilities = response.data.vulnerabilities || [];\n                        if (vulnerabilities.length > 0) {\n                            results.push({\n                                id: response.data.id || relativePath,\n                                file_path: relativePath,\n                                issues: vulnerabilities.map((v: any) => ({\n                                    type: v.type,\n                                    severity: v.severity,\n                                    message: v.description || v.title,\n                                    line: v.line_number,\n                                })),\n                            });\n\n                            totalIssues += vulnerabilities.length;\n\n                            vulnerabilities.forEach((v: any) => {\n                                severityCounts[v.severity] = (severityCounts[v.severity] || 0) + 1;\n                            });\n                        }\n                    } catch (fileError) {\n                        if (axios.isAxiosError(fileError)) {\n                            console.warn(chalk.yellow(`\\n⚠️  Skipping ${relativePath}: ${fileError.message}`));\n                        } else {\n                            console.warn(chalk.yellow(`\\n⚠️  Error reading ${relativePath}`));\n                        }\n                    }\n                }\n\n                spinner.succeed(chalk.green('✅ Scan completed!'));\n\n                // Build aggregated response\n                const aggregatedResponse: ApiResponse = {\n                    results,\n                    summary: {\n                        total_files: codeFiles.length,\n                        total_issues: totalIssues,\n                        by_severity: severityCounts,\n                    },\n                };\n\n                // Output results\n                if (options.json) {\n                    console.log(JSON.stringify(aggregatedResponse, null, 2));\n                } else {\n                    printPrettyResults(aggregatedResponse);\n                }\n            } catch (error) {\n                spinner.fail(chalk.red('❌ Scan failed'));\n\n                if (axios.isAxiosError(error)) {\n                    if (error.response) {\n                        console.error(chalk.red('API Error:'), error.response.data);\n                    } else if (error.request) {\n                        console.error(\n                            chalk.red('Network Error:'),\n                            'Could not reach the API. Is the server running?'\n                        );\n                    } else {\n                        console.error(chalk.red('Error:'), error.message);\n                    }\n                } else {\n                    console.error(\n                        chalk.red('Error:'),\n                        error instanceof Error ? error.message : 'Unknown error'\n                    );\n                }\n\n                process.exit(1);\n            }\n        });\n}\n\nfunction printPrettyResults(data: ApiResponse): void {\n    const { results, summary } = data;\n\n    console.log('\\n' + chalk.bold('📊 Scan Summary'));\n    console.log(chalk.dim('─'.repeat(60)));\n    console.log(`Total Files Scanned: ${chalk.cyan(summary.total_files)}`);\n    console.log(`Total Issues Found: ${chalk.yellow(summary.total_issues)}`);\n\n    if (summary.by_severity) {\n        console.log('\\nIssues by Severity:');\n        Object.entries(summary.by_severity).forEach(([severity, count]) => {\n            const color = getSeverityColor(severity as any);\n            console.log(`  ${color(`${severity}:`)} ${count}`);\n        });\n    }\n\n    if (results && results.length > 0) {\n        console.log('\\n' + chalk.bold('🔍 Detailed Results'));\n        console.log(chalk.dim('─'.repeat(60)));\n\n        results.forEach((result) => {\n            if (result.issues && result.issues.length > 0) {\n                console.log(`\\n${chalk.bold(result.file_path)}`);\n\n                result.issues.forEach((issue) => {\n                    const severityColor = getSeverityColor(issue.severity);\n                    const lineInfo = issue.line ? chalk.dim(`:${issue.line}`) : '';\n\n                    console.log(\n                        `  ${severityColor(`[${issue.severity.toUpperCase()}]`)} ${issue.type}${lineInfo}`\n                    );\n                    console.log(`  ${chalk.dim(issue.message)}`);\n                });\n            }\n        });\n    }\n\n    console.log('\\n' + chalk.dim('─'.repeat(60)));\n}\n\nfunction getSeverityColor(severity: string): (str: string) => string {\n    switch (severity.toLowerCase()) {\n        case 'critical':\n            return chalk.red.bold;\n        case 'high':\n            return chalk.red;\n        case 'medium':\n            return chalk.yellow;\n        case 'low':\n            return chalk.blue;\n        case 'info':\n            return chalk.gray;\n        default:\n            return chalk.white;\n    }\n}\n","import fs from 'fs/promises';\nimport path from 'path';\n\n/**\n * Read and parse .gitignore file\n */\nexport async function readGitignore(dir: string): Promise<string[]> {\n    const gitignorePath = path.join(dir, '.gitignore');\n    try {\n        const content = await fs.readFile(gitignorePath, 'utf-8');\n        return content\n            .split('\\n')\n            .map((line) => line.trim())\n            .filter((line) => line && !line.startsWith('#'));\n    } catch (error) {\n        // No .gitignore file found, return empty array\n        return [];\n    }\n}\n\n/**\n * Check if a path should be ignored based on .gitignore patterns\n */\nexport function shouldIgnore(filePath: string, patterns: string[]): boolean {\n    const relativePath = filePath.replace(/^\\.\\//, '');\n\n    // Default ignore patterns\n    const defaultIgnores = [\n        'node_modules',\n        '.git',\n        'dist',\n        'build',\n        '.next',\n        '.turbo',\n        'coverage',\n        '.env',\n        '.env.local',\n    ];\n\n    const allPatterns = [...defaultIgnores, ...patterns];\n\n    for (const pattern of allPatterns) {\n        if (pattern.endsWith('/')) {\n            // Directory pattern\n            const dir = pattern.slice(0, -1);\n            if (relativePath.includes(`${dir}/`) || relativePath === dir) {\n                return true;\n            }\n        } else if (pattern.includes('*')) {\n            // Glob pattern - simple implementation\n            const regex = new RegExp(\n                '^' + pattern.replace(/\\*/g, '.*').replace(/\\?/g, '.') + '$'\n            );\n            if (regex.test(relativePath)) {\n                return true;\n            }\n        } else {\n            // Exact match or contains\n            if (relativePath.includes(pattern)) {\n                return true;\n            }\n        }\n    }\n\n    return false;\n}\n\n/**\n * Check if file is a code file based on extension\n */\nexport function isCodeFile(filePath: string): boolean {\n    const codeExtensions = [\n        '.js',\n        '.jsx',\n        '.ts',\n        '.tsx',\n        '.py',\n        '.java',\n        '.go',\n        '.rb',\n        '.php',\n        '.c',\n        '.cpp',\n        '.h',\n        '.cs',\n        '.swift',\n        '.kt',\n        '.rs',\n        '.vue',\n        '.svelte',\n    ];\n\n    const ext = path.extname(filePath).toLowerCase();\n    return codeExtensions.includes(ext);\n}\n\n/**\n * Read the last N lines of a file\n */\nexport async function tailFile(filePath: string, lineCount: number = 10): Promise<string[]> {\n    try {\n        const content = await fs.readFile(filePath, 'utf-8');\n        const lines = content.split('\\n').filter(l => l.trim() !== '');\n        return lines.slice(-lineCount);\n    } catch (e) {\n        return [];\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { glob } from 'glob';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport inquirer from 'inquirer';\nimport * as Diff from 'diff';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { readGitignore, shouldIgnore, isCodeFile } from '../utils/files.js';\n\nexport function createFixCommand(): Command {\n    return new Command('fix')\n        .description('Scan and interactively FIX detected issues using Rigstate AI')\n        .argument('[path]', 'Directory or file to scan', '.')\n        .option('--project <id>', 'Project ID to context-aware audit')\n        .action(async (targetPath: string, options: { project?: string }) => {\n            const spinner = ora();\n\n            try {\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = options.project || getProjectId();\n\n                if (!projectId) {\n                    console.log(chalk.yellow('⚠️  Project ID is required for fixing. Using default or pass --project <id>'));\n                    // We can proceed without it, but fix quality drops. Let's warn.\n                }\n\n                const scanPath = path.resolve(process.cwd(), targetPath);\n\n                // --- Reuse Scan Logic (Simplified) ---\n                const gitignorePatterns = await readGitignore(scanPath);\n                const pattern = path.join(scanPath, '**/*');\n                const allFiles = await glob(pattern, { nodir: true, dot: false, ignore: ['**/node_modules/**', '**/.git/**'] });\n                const codeFiles = allFiles.filter(file => {\n                    const relativePath = path.relative(scanPath, file);\n                    return isCodeFile(file) && !shouldIgnore(relativePath, gitignorePatterns);\n                });\n\n                if (codeFiles.length === 0) {\n                    console.log(chalk.yellow('No code files found.'));\n                    return;\n                }\n\n                console.log(chalk.bold(`\\n🧠 Rigstate Fix Mode`));\n                console.log(chalk.dim(`Scanning ${codeFiles.length} files with Project Context...\\n`));\n\n                let fixedCount = 0;\n\n                for (let i = 0; i < codeFiles.length; i++) {\n                    const filePath = codeFiles[i];\n                    const relativePath = path.relative(scanPath, filePath);\n\n                    spinner.start(`Analyzing ${relativePath}...`);\n\n                    try {\n                        const content = await fs.readFile(filePath, 'utf-8');\n                        const response = await axios.post(\n                            `${apiUrl}/api/v1/audit`,\n                            { content, file_path: relativePath, project_id: projectId },\n                            { headers: { 'Authorization': `Bearer ${apiKey}` }, timeout: 120000 }\n                        );\n\n                        const vulnerabilities = response.data.vulnerabilities || [];\n                        const fixableIssues = vulnerabilities.filter((v: any) => v.fixed_content);\n\n                        if (fixableIssues.length > 0) {\n                            spinner.stop();\n                            console.log(`\\n${chalk.bold(relativePath)}: Found ${fixableIssues.length} fixable issues.`);\n\n                            for (const issue of fixableIssues) {\n                                console.log(chalk.red(`\\n[${issue.type}] ${issue.title}`));\n                                console.log(chalk.dim(issue.suggestion || issue.message));\n\n                                // Show Diff\n                                const diff = Diff.createTwoFilesPatch(relativePath, relativePath, content, issue.fixed_content, 'Current', 'Fixed');\n                                console.log('\\n' + diff.split('\\n').slice(0, 15).join('\\n') + (diff.split('\\n').length > 15 ? '\\n...' : ''));\n\n                                const { apply } = await inquirer.prompt([{\n                                    type: 'confirm',\n                                    name: 'apply',\n                                    message: `Apply this fix to ${chalk.cyan(relativePath)}?`,\n                                    default: true\n                                }]);\n\n                                if (apply) {\n                                    await fs.writeFile(filePath, issue.fixed_content);\n                                    console.log(chalk.green(`✅ Fixed applied!`));\n                                    fixedCount++;\n\n                                    if (issue.related_step_id) {\n                                        const { completeStep } = await inquirer.prompt([{\n                                            type: 'confirm',\n                                            name: 'completeStep',\n                                            message: `Frank thinks this fix completes a Roadmap Step. Mark as COMPLETED in Rigstate?`,\n                                            default: true\n                                        }]);\n\n                                        if (completeStep) {\n                                            try {\n                                                await axios.post(\n                                                    `${apiUrl}/api/v1/roadmap/update-status`,\n                                                    { step_id: issue.related_step_id, status: 'COMPLETED', project_id: projectId },\n                                                    { headers: { 'Authorization': `Bearer ${apiKey}` } }\n                                                );\n                                                console.log(chalk.green(`🚀 Roadmap updated! Mission Control is in sync.`));\n                                            } catch (err: any) {\n                                                console.error(chalk.yellow(`Failed to update roadmap: ${err.message}`));\n                                            }\n                                        }\n                                    }\n\n                                    // Stop processing this file as content changed\n                                    break;\n                                } else {\n                                    console.log(chalk.dim('Skipped.'));\n                                }\n                            }\n                        } else {\n                            spinner.text = `Checked ${relativePath} (No auto-fixes)`;\n                        }\n\n                    } catch (e: any) {\n                        // silent fail for file read/network errors in fix mode to keep flow\n                    }\n                }\n\n                spinner.stop();\n                console.log(chalk.bold.green(`\\n\\n🚀 Fix session complete!`));\n                console.log(`Frank fixed ${fixedCount} detected issues.`);\n                console.log(chalk.dim(`Run 'rigstate scan' to verify remaining issues.`));\n\n            } catch (error: any) {\n                spinner.fail('Fix session failed');\n                console.error(error.message);\n            }\n        });\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getProjectId, getApiUrl, setProjectId } from '../utils/config.js';\nimport axios from 'axios';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nexport function createSyncCommand() {\n    const sync = new Command('sync');\n\n    sync\n        .description('Synchronize local state with Rigstate Cloud')\n        .option('-p, --project <id>', 'Specify Project ID (saves to config automatically)')\n        .action(async (options) => {\n            const spinner = ora('Synchronizing project state...').start();\n\n            try {\n                // 1. Authentication Check\n                let apiKey;\n                try {\n                    apiKey = getApiKey();\n                } catch (e) {\n                    spinner.fail('Not authenticated. Run \"rigstate login\" first.');\n                    return;\n                }\n\n                // 2. Project Context Resolution\n                let projectId = options.project;\n\n                // Check local .rigstate manifest\n                if (!projectId) {\n                    const { loadManifest } = await import('../utils/manifest.js');\n                    const manifest = await loadManifest();\n                    if (manifest?.project_id) projectId = manifest.project_id;\n                }\n\n                // Check global config\n                if (!projectId) projectId = getProjectId();\n\n                if (options.project) {\n                    // Persistence: Save project ID for future use\n                    setProjectId(options.project);\n                }\n\n                if (!projectId) {\n                    spinner.fail('No project context found.\\n Run with --project <id> once to save context.');\n                    return;\n                }\n\n                const apiUrl = getApiUrl();\n\n                // 3. API Execution\n                const response = await axios.get(`${apiUrl}/api/v1/roadmap`, {\n                    params: { project_id: projectId },\n                    headers: { Authorization: `Bearer ${apiKey}` }\n                });\n\n                // Parse Standardized Response ({ success, data, ... })\n                if (!response.data.success) {\n                    throw new Error(response.data.error || 'Unknown API failure');\n                }\n\n                const { roadmap, project } = response.data.data;\n                const timestamp = response.data.timestamp;\n\n                // 4. Write Artifacts\n                const targetPath = path.join(process.cwd(), 'roadmap.json');\n                const fileContent = JSON.stringify({\n                    project,\n                    last_synced: timestamp,\n                    roadmap\n                }, null, 2);\n\n                await fs.writeFile(targetPath, fileContent, 'utf-8');\n\n                // 4b. Write Context Manifest (.rigstate) - CONTEXT GUARD\n                try {\n                    const { saveManifest } = await import('../utils/manifest.js');\n                    await saveManifest({\n                        project_id: projectId,\n                        linked_at: timestamp, // Using timestamp as linked_at for consistency\n                        api_url: apiUrl\n                    });\n                } catch (e) {\n                    // Fail silently\n                }\n\n                // 4c. Provision Agent Skills (Skills Dominion)\n                console.log(chalk.bold('\\n🧠 Agent Skills Provisioning...'));\n                try {\n                    const { provisionSkills, generateSkillsDiscoveryBlock } = await import('../utils/skills-provisioner.js');\n                    const skills = await provisionSkills(apiUrl, apiKey, projectId, process.cwd());\n\n                    // Update .cursorrules with skills discovery block (if file exists)\n                    const cursorRulesPath = path.join(process.cwd(), '.cursorrules');\n                    try {\n                        let rulesContent = await fs.readFile(cursorRulesPath, 'utf-8');\n                        const skillsBlock = generateSkillsDiscoveryBlock(skills);\n\n                        // Replace existing skills block or insert after PROJECT CONTEXT\n                        if (rulesContent.includes('<available_skills>')) {\n                            rulesContent = rulesContent.replace(\n                                /<available_skills>[\\s\\S]*?<\\/available_skills>/,\n                                skillsBlock\n                            );\n                        } else if (rulesContent.includes('## 🧠 PROJECT CONTEXT')) {\n                            // Insert after PROJECT CONTEXT section\n                            const insertPoint = rulesContent.indexOf('---', rulesContent.indexOf('## 🧠 PROJECT CONTEXT'));\n                            if (insertPoint !== -1) {\n                                rulesContent = rulesContent.slice(0, insertPoint + 3) +\n                                    '\\n\\n' + skillsBlock + '\\n' +\n                                    rulesContent.slice(insertPoint + 3);\n                            }\n                        }\n\n                        await fs.writeFile(cursorRulesPath, rulesContent, 'utf-8');\n                        console.log(chalk.dim(`  Updated .cursorrules with skills discovery block`));\n                    } catch (e) {\n                        // .cursorrules doesn't exist or couldn't be updated\n                    }\n                } catch (e: any) {\n                    console.log(chalk.yellow(`  ⚠ Skills provisioning skipped: ${e.message}`));\n                }\n\n                // 5. Process Execution Logs (MISSION REPORTING)\n                try {\n                    const logPath = path.join(process.cwd(), '.rigstate', 'logs', 'last_execution.json');\n                    try {\n                        const logContent = await fs.readFile(logPath, 'utf-8');\n                        const logData = JSON.parse(logContent);\n\n                        if (logData.task_summary) {\n                            await axios.post(`${apiUrl}/api/v1/execution-logs`, {\n                                project_id: projectId,\n                                ...logData,\n                                agent_role: process.env.RIGSTATE_MODE === 'SUPERVISOR' ? 'SUPERVISOR' : 'WORKER'\n                            }, {\n                                headers: { Authorization: `Bearer ${apiKey}` }\n                            });\n\n                            await fs.unlink(logPath);\n                            console.log(chalk.dim(`✔ Mission Report uploaded.`));\n                        }\n                    } catch (e: any) {\n                        // Ignore ENOENT (file not found), log errors if API fails\n                        if (e.code !== 'ENOENT') {\n                            // console.log(chalk.yellow('Log upload skipped: ' + e.message));\n                        }\n                    }\n                } catch (e) { }\n\n                // 6. User Feedback\n                spinner.succeed(chalk.green(`Synced ${roadmap.length} roadmap steps for project \"${project}\"`));\n                console.log(chalk.dim(`Local files updated: roadmap.json`));\n\n                const { runGuardianWatchdog } = await import('../utils/watchdog.js');\n                const settings = response.data.data.settings || {};\n                await runGuardianWatchdog(process.cwd(), settings, projectId);\n\n                // 8. Bridge Heartbeat & Pending Tasks\n                console.log(chalk.bold('\\n📡 Agent Bridge Heartbeat...'));\n                try {\n                    const bridgeResponse = await axios.get(`${apiUrl}/api/v1/agent/bridge`, {\n                        params: { project_id: projectId },\n                        headers: { Authorization: `Bearer ${apiKey}` }\n                    });\n\n                    if (bridgeResponse.data.success) {\n                        const tasks = bridgeResponse.data.tasks;\n                        const pending = tasks.filter((t: any) => t.status === 'PENDING');\n                        const approved = tasks.filter((t: any) => t.status === 'APPROVED');\n\n                        if (pending.length > 0 || approved.length > 0) {\n                            console.log(chalk.yellow(`⚠ Bridge Alert: ${pending.length} pending, ${approved.length} approved tasks found.`));\n                            console.log(chalk.dim('Run \"rigstate fix\" to process these tasks or ensure your IDE MCP server is active.'));\n                        } else {\n                            console.log(chalk.green('✔ Heartbeat healthy. No pending bridge tasks.'));\n                        }\n\n                        // Acknowledge Pings if any\n                        const pings = pending.filter((t: any) => t.proposal?.startsWith('ping'));\n                        for (const ping of pings) {\n                            await axios.post(`${apiUrl}/api/v1/agent/bridge`, {\n                                bridge_id: ping.id,\n                                status: 'COMPLETED',\n                                summary: 'Pong! CLI Sync Heartbeat confirmed.'\n                            }, {\n                                headers: { Authorization: `Bearer ${apiKey}` }\n                            });\n                            console.log(chalk.cyan(`🏓 Pong! Acknowledged heartbeat signal [${ping.id}]`));\n                        }\n                    }\n                } catch (e: any) {\n                    console.log(chalk.yellow(`⚠ Could not verify Bridge status: ${e.message}`));\n                }\n\n                if (options.project) {\n                    console.log(chalk.blue(`Project context saved. Future commands will use this project.`));\n                }\n\n                // 9. Migration Guard (The Firewall)\n                try {\n                    const migrationDir = path.join(process.cwd(), 'supabase', 'migrations');\n                    const files = await fs.readdir(migrationDir);\n                    const sqlFiles = files.filter(f => f.endsWith('.sql')).sort();\n\n                    if (sqlFiles.length > 0) {\n                        const latestMigration = sqlFiles[sqlFiles.length - 1];\n                        console.log(chalk.dim(`\\n🛡  Migration Guard:`));\n                        console.log(chalk.dim(`   Latest Local: ${latestMigration}`));\n                        console.log(chalk.yellow(`   ⚠  Ensure DB schema matches this version. CLI cannot verify Remote RLS policies directly.`));\n                    }\n                } catch (e) {\n                    // No migrations folder, or error reading - ignore\n                }\n\n                // 10. Sovereign Foundation (Vault Sync)\n                try {\n                    const vaultResponse = await axios.post(`${apiUrl}/api/v1/vault/sync`,\n                        { project_id: projectId },\n                        { headers: { Authorization: `Bearer ${apiKey}` } }\n                    );\n\n                    if (vaultResponse.data.success) {\n                        const vaultContent: string = vaultResponse.data.data.content || '';\n                        const localEnvPath = path.join(process.cwd(), '.env.local');\n                        let localContent = '';\n\n                        try {\n                            localContent = await fs.readFile(localEnvPath, 'utf-8');\n                        } catch (e) { /* File doesn't exist */ }\n\n                        // Normalize for comparison (trim, ignore comments?) - Simple trim for now\n                        if (vaultContent.trim() !== localContent.trim()) {\n                            console.log(chalk.bold('\\n🔐 Sovereign Foundation (Vault):'));\n                            console.log(chalk.yellow('   Status: Drift Detected / Update Available'));\n\n                            const { syncVault } = await import('inquirer').then(m => m.default.prompt([{\n                                type: 'confirm',\n                                name: 'syncVault',\n                                message: 'Synchronize local .env.local with Vault secrets?',\n                                default: false\n                            }]));\n\n                            if (syncVault) {\n                                await fs.writeFile(localEnvPath, vaultContent, 'utf-8');\n                                console.log(chalk.green('   ✅ .env.local synchronized with Vault.'));\n                            } else {\n                                console.log(chalk.dim('   Skipped vault sync.'));\n                            }\n                        } else {\n                            console.log(chalk.dim('\\n🔐 Sovereign Foundation: Synced.'));\n                        }\n                    }\n                } catch (e: any) {\n                    // Fail silently or warn if vault access denied (expected for some users)\n                    // console.log(chalk.dim(`   (Vault check skipped: ${e.message})`));\n                }\n\n                // 11. System Integrity Checks (The Firewall)\n                console.log(chalk.dim('\\n🛡️ System Integrity Check...'));\n                await checkSystemIntegrity(apiUrl, apiKey, projectId);\n\n            } catch (error: any) {\n                if (axios.isAxiosError(error)) {\n                    const message = error.response?.data?.error || error.message;\n                    spinner.fail(chalk.red(`Sync failed: ${message}`));\n                } else {\n                    spinner.fail(chalk.red('Sync failed: ' + (error.message || 'Unknown error')));\n                }\n            }\n        });\n\n    return sync;\n}\n\n/**\n * System Integrity Checks\n * Verifies Migration Sync and RLS Status via API\n */\nasync function checkSystemIntegrity(apiUrl: string, apiKey: string, projectId: string) {\n    try {\n        // Call System Integrity API\n        const response = await axios.get(`${apiUrl}/api/v1/system/integrity`, {\n            params: { project_id: projectId },\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (response.data.success) {\n            const { migrations, rls, guardian_violations } = response.data.data;\n\n            // Migration Status\n            if (migrations) {\n                if (migrations.in_sync) {\n                    console.log(chalk.green(`   ✅ Migrations synced (${migrations.count} versions)`));\n                } else {\n                    console.log(chalk.red(`   🛑 CRITICAL: DB Schema out of sync! ${migrations.missing?.length || 0} migrations not applied.`));\n                    if (migrations.missing?.length > 0) {\n                        console.log(chalk.dim(`      Missing: ${migrations.missing.slice(0, 3).join(', ')}${migrations.missing.length > 3 ? '...' : ''}`));\n                    }\n                    console.log(chalk.yellow(`      Run 'supabase db push' or apply migrations immediately.`));\n                }\n            }\n\n            // RLS Status\n            if (rls) {\n                if (rls.all_secured) {\n                    console.log(chalk.green(`   ✅ RLS Audit Passed (${rls.table_count} tables secured)`));\n                } else {\n                    console.log(chalk.red(`   🛑 CRITICAL: Security Vulnerability! ${rls.unsecured?.length || 0} tables have RLS disabled.`));\n                    rls.unsecured?.forEach((table: string) => {\n                        console.log(chalk.red(`      - ${table}`));\n                    });\n                    console.log(chalk.yellow('      Enable RLS immediately: ALTER TABLE \"table\" ENABLE ROW LEVEL SECURITY;'));\n                }\n            }\n\n            // Guardian Violations\n            if (guardian_violations) {\n                if (guardian_violations.count === 0) {\n                    console.log(chalk.green('   ✅ Guardian: No active violations'));\n                } else {\n                    console.log(chalk.yellow(`   ⚠️ Guardian: ${guardian_violations.count} active violations`));\n                    console.log(chalk.dim('      Run \"rigstate check\" for details.'));\n                }\n            }\n        }\n    } catch (e: any) {\n        // API might not have this endpoint yet - fail silently\n        console.log(chalk.dim('   (System integrity check skipped - API endpoint not available)'));\n    }\n}\n\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport ora from 'ora';\nimport { execSync } from 'child_process';\nimport { loadManifest } from '../utils/manifest.js';\nimport { getApiUrl, getApiKey, setProjectId } from '../utils/config.js';\nimport axios from 'axios';\n\nexport function createInitCommand() {\n    return new Command('init')\n        .description('Initialize or link a Rigstate project (interactive mode available)')\n        .argument('[project-id]', 'ID of the project to link (optional, prompts if not provided)')\n        .option('-f, --force', 'Overwrite existing .cursorrules file')\n        .option('--rules-only', 'Only regenerate .cursorrules without interactive setup')\n        .action(async (projectIdArg, options) => {\n            const spinner = ora('Initializing Rigstate project...').start();\n\n            let apiKey: string;\n            try {\n                apiKey = getApiKey();\n            } catch (e) {\n                spinner.fail(chalk.red('Not authenticated. Run \"rigstate login\" first.'));\n                return;\n            }\n\n            const apiUrl = getApiUrl();\n            let projectId = projectIdArg;\n\n            try {\n                // If --rules-only, just regenerate rules from existing manifest\n                if (options.rulesOnly) {\n                    const manifest = await loadManifest();\n                    if (!manifest) {\n                        spinner.fail('No .rigstate manifest found. Run \"rigstate init\" first.');\n                        return;\n                    }\n                    projectId = manifest.project_id;\n                    await generateRules(apiUrl, apiKey, projectId, options.force, spinner);\n                    return;\n                }\n\n                // Interactive mode if no project ID provided\n                if (!projectId) {\n                    spinner.stop();\n\n                    // Dynamic import for inquirer\n                    const inquirer = (await import('inquirer')).default;\n\n                    spinner.start('Fetching your projects...');\n\n                    // Fetch projects via API\n                    let projects: any[] = [];\n                    try {\n                        const projectsResponse = await axios.get(`${apiUrl}/api/v1/projects`, {\n                            headers: { Authorization: `Bearer ${apiKey}` }\n                        });\n                        if (projectsResponse.data.success) {\n                            projects = projectsResponse.data.data.projects || [];\n                        }\n                    } catch (e: any) {\n                        // API might not exist yet - fallback to manual entry\n                        spinner.info('Projects API not available. Using manual entry mode.');\n                    }\n\n                    spinner.stop();\n\n                    if (projects.length === 0) {\n                        // Fallback: Ask for project ID manually\n                        const { manualProjectId } = await inquirer.prompt([\n                            {\n                                type: 'input',\n                                name: 'manualProjectId',\n                                message: 'Enter Project ID (from Rigstate dashboard):',\n                                validate: (input: string) => input.trim() ? true : 'Project ID is required'\n                            }\n                        ]);\n                        projectId = manualProjectId;\n                    } else {\n                        // Build choices from fetched projects\n                        const choices: any[] = [\n                            { name: '➕ Create New Project', value: 'NEW' },\n                            new inquirer.Separator()\n                        ];\n\n                        projects.forEach((p: any) => {\n                            choices.push({\n                                name: `[${p.organization_name || 'Personal'}] ${p.name} (${p.status})`,\n                                value: p.id\n                            });\n                        });\n\n                        const { selectedId } = await inquirer.prompt([\n                            {\n                                type: 'list',\n                                name: 'selectedId',\n                                message: 'Select a project to link:',\n                                choices: choices,\n                                pageSize: 15\n                            }\n                        ]);\n\n                        if (selectedId === 'NEW') {\n                            // Create new project flow\n                            const { newName } = await inquirer.prompt([\n                                {\n                                    type: 'input',\n                                    name: 'newName',\n                                    message: 'Enter project name:',\n                                    validate: (input: string) => input.trim() ? true : 'Name is required'\n                                }\n                            ]);\n\n                            // Fetch organizations (with fallback)\n                            spinner.start('Fetching organizations...');\n                            let orgs: any[] = [];\n                            try {\n                                const orgsResponse = await axios.get(`${apiUrl}/api/v1/organizations`, {\n                                    headers: { Authorization: `Bearer ${apiKey}` }\n                                });\n                                orgs = orgsResponse.data.data?.organizations || [];\n                            } catch (e) {\n                                // API might not exist - skip org selection\n                            }\n                            spinner.stop();\n\n                            let selectedOrgId = orgs[0]?.id;\n\n                            if (orgs.length > 1) {\n                                const { orgId } = await inquirer.prompt([\n                                    {\n                                        type: 'list',\n                                        name: 'orgId',\n                                        message: 'Which organization does this belong to?',\n                                        choices: orgs.map((org: any) => ({\n                                            name: `${org.name} (${org.role || 'member'})`,\n                                            value: org.id\n                                        }))\n                                    }\n                                ]);\n                                selectedOrgId = orgId;\n                            }\n\n                            if (!selectedOrgId) {\n                                console.log(chalk.yellow('No organization available. Please create the project via the Rigstate dashboard.'));\n                                return;\n                            }\n\n                            // Create project via API\n                            spinner.start('Creating new project...');\n                            try {\n                                const createResponse = await axios.post(`${apiUrl}/api/v1/projects`, {\n                                    name: newName,\n                                    organization_id: selectedOrgId\n                                }, {\n                                    headers: { Authorization: `Bearer ${apiKey}` }\n                                });\n\n                                if (!createResponse.data.success) {\n                                    spinner.fail(chalk.red('Failed to create project: ' + createResponse.data.error));\n                                    return;\n                                }\n\n                                projectId = createResponse.data.data.project.id;\n                                spinner.succeed(chalk.green(`Created new project: ${newName}`));\n                            } catch (e: any) {\n                                spinner.fail(chalk.red('Project creation API not available. Please create via dashboard.'));\n                                return;\n                            }\n                        } else {\n                            projectId = selectedId;\n                        }\n                    }\n\n                    spinner.start(`Linking to project ID: ${projectId}...`);\n                }\n\n                // Core link logic\n                // Save project ID to config\n                setProjectId(projectId);\n\n                // Write local manifest\n                const { saveManifest } = await import('../utils/manifest.js');\n                await saveManifest({\n                    project_id: projectId,\n                    linked_at: new Date().toISOString(),\n                    api_url: apiUrl\n                });\n\n                // Initialize git if needed\n                try {\n                    await fs.access('.git');\n                } catch {\n                    spinner.text = 'Initializing git repository...';\n                    execSync('git init', { stdio: 'ignore' });\n                }\n\n                spinner.succeed(chalk.green(`✅ Linked to project: ${projectId}`));\n\n                // Generate rules\n                await generateRules(apiUrl, apiKey, projectId, options.force, spinner);\n\n                console.log('');\n                console.log(chalk.blue('Next steps:'));\n                console.log(chalk.dim('  rigstate sync     - Sync roadmap and context'));\n                console.log(chalk.dim('  rigstate watch    - Start development loop'));\n                console.log(chalk.dim('  rigstate focus    - Get current task'));\n\n            } catch (e: any) {\n                spinner.fail(chalk.red('Initialization failed: ' + e.message));\n            }\n        });\n}\n\nasync function generateRules(apiUrl: string, apiKey: string, projectId: string, force: boolean, spinner: any) {\n    spinner.start('Generating AI rules (MDC + AGENTS.md)...');\n\n    try {\n        const response = await axios.post(`${apiUrl}/api/v1/rules/generate`, {\n            project_id: projectId\n        }, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (response.data.success || response.data.files) {\n            const files = response.data.files || [];\n\n            if (files.length === 0 && response.data.rules) {\n                // Fallback to legacy mono-file if no multiple files returned\n                const rulesPath = path.join(process.cwd(), '.cursorrules');\n                await fs.writeFile(rulesPath, response.data.rules, 'utf-8');\n                spinner.succeed(chalk.green('✔ Generated .cursorrules (legacy mode)'));\n                return;\n            }\n\n            for (const file of files) {\n                const targetPath = path.join(process.cwd(), file.path);\n                const targetDir = path.dirname(targetPath);\n\n                // Ensure directory exists\n                await fs.mkdir(targetDir, { recursive: true });\n\n                // Check if exists and force\n                try {\n                    await fs.access(targetPath);\n                    if (!force && !file.path.startsWith('.cursor/rules/')) {\n                        console.log(chalk.dim(`  ${file.path} already exists. Skipping.`));\n                        continue;\n                    }\n                } catch {\n                    // File doesn't exist, proceed\n                }\n\n                await fs.writeFile(targetPath, file.content, 'utf-8');\n            }\n\n            // Cleanup legacy .cursorrules if we have new files and aren't inhibited\n            if (files.length > 0) {\n                const legacyPath = path.join(process.cwd(), '.cursorrules');\n                try {\n                    const stats = await fs.stat(legacyPath);\n                    if (stats.isFile()) {\n                        await fs.rename(legacyPath, `${legacyPath}.bak`);\n                        console.log(chalk.dim('  Moved legacy .cursorrules to .cursorrules.bak'));\n                    }\n                } catch (e) {\n                    // Ignore if legacy file doesn't exist\n                }\n            }\n\n            spinner.succeed(chalk.green(`✔ Generated ${files.length} rule files (v${response.data.version || '3.0'})`));\n        } else {\n            spinner.info(chalk.dim('  Rules generation skipped (API response invalid)'));\n        }\n    } catch (e: any) {\n        spinner.info(chalk.dim(`  Rules generation failed: ${e.message}`));\n    }\n}\n\n\n","/**\n * rigstate check - Validate code against Guardian rules\n * \n * Usage:\n *   rigstate check              # Check current directory\n *   rigstate check ./src        # Check specific path\n *   rigstate check --strict     # Exit 1 on any violation\n *   rigstate check --strict=critical  # Exit 1 only on critical\n *   rigstate check --staged     # Only check staged files (for pre-commit)\n *   rigstate check --json       # Output as JSON\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { glob } from 'glob';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { loadManifest } from '../utils/manifest.js';\nimport {\n    checkFile,\n    formatViolations,\n    summarizeResults,\n    type EffectiveRule,\n    type CheckResult,\n    type Violation\n} from '../utils/rule-engine.js';\n\n// Cache settings\nconst CACHE_FILE = '.rigstate/rules-cache.json';\nconst CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\nconst CACHE_MAX_AGE_MS = 24 * 60 * 60 * 1000; // 24 hours (offline limit)\n\ninterface CachedRules {\n    timestamp: string;\n    projectId: string;\n    rules: EffectiveRule[];\n    settings: { lmax: number; lmax_warning: number };\n}\n\nexport function createCheckCommand(): Command {\n    return new Command('check')\n        .description('Validate code against Guardian architectural rules')\n        .argument('[path]', 'Directory or file to check', '.')\n        .option('--project <id>', 'Project ID (or use .rigstate manifest)')\n        .option('--strict [level]', 'Exit 1 on violations. Level: \"all\" (default) or \"critical\"')\n        .option('--staged', 'Only check git staged files (for pre-commit hooks)')\n        .option('--json', 'Output results as JSON')\n        .option('--no-cache', 'Skip rule cache and fetch fresh from API')\n        .action(async (targetPath: string, options: {\n            project?: string;\n            strict?: boolean | string;\n            staged?: boolean;\n            json?: boolean;\n            cache?: boolean;\n        }) => {\n            const spinner = ora();\n\n            try {\n                // 1. Resolve project context\n                let projectId = options.project;\n                let apiUrl = getApiUrl();\n\n                if (!projectId) {\n                    const manifest = await loadManifest();\n                    if (manifest) {\n                        projectId = manifest.project_id;\n                        if (manifest.api_url) apiUrl = manifest.api_url;\n                    }\n                }\n\n                if (!projectId) {\n                    projectId = getProjectId();\n                }\n\n                if (!projectId) {\n                    console.log(chalk.red('❌ No project context found.'));\n                    console.log(chalk.dim('   Run \"rigstate link\" or pass --project <id>'));\n                    process.exit(2);\n                }\n\n                // 2. Get API key\n                let apiKey: string;\n                try {\n                    apiKey = getApiKey();\n                } catch {\n                    console.log(chalk.red('❌ Not authenticated. Run \"rigstate login\" first.'));\n                    process.exit(2);\n                }\n\n                // 3. Fetch rules (with caching)\n                spinner.start('Fetching Guardian rules...');\n                let rules: EffectiveRule[];\n                let settings: { lmax: number; lmax_warning: number };\n\n                try {\n                    const cached = options.cache !== false ? await loadCachedRules(projectId) : null;\n\n                    if (cached && !isStale(cached.timestamp, CACHE_TTL_MS)) {\n                        rules = cached.rules;\n                        settings = cached.settings;\n                        spinner.text = 'Using cached rules...';\n                    } else {\n                        // Fetch from API\n                        const response = await axios.get(`${apiUrl}/api/v1/guardian/rules`, {\n                            params: { project_id: projectId },\n                            headers: { Authorization: `Bearer ${apiKey}` },\n                            timeout: 10000\n                        });\n\n                        if (!response.data.success) {\n                            throw new Error(response.data.error || 'Unknown API error');\n                        }\n\n                        rules = response.data.data.rules;\n                        settings = response.data.data.settings;\n\n                        // Save to cache\n                        await saveCachedRules(projectId, rules, settings);\n                    }\n                } catch (apiError: any) {\n                    // Fallback to cache if API fails\n                    const cached = await loadCachedRules(projectId);\n\n                    if (cached && !isStale(cached.timestamp, CACHE_MAX_AGE_MS)) {\n                        spinner.warn(chalk.yellow('Using cached rules (API unavailable)'));\n                        rules = cached.rules;\n                        settings = cached.settings;\n                    } else {\n                        spinner.fail(chalk.red('Failed to fetch rules and no valid cache'));\n                        console.log(chalk.dim(`   Error: ${apiError.message}`));\n                        process.exit(2);\n                    }\n                }\n\n                spinner.succeed(`Loaded ${rules.length} Guardian rules`);\n\n                // 4. Get files to check\n                const scanPath = path.resolve(process.cwd(), targetPath);\n                let filesToCheck: string[];\n\n                if (options.staged) {\n                    // Only staged files\n                    spinner.start('Getting staged files...');\n                    try {\n                        const stagedOutput = execSync('git diff --cached --name-only --diff-filter=ACMR', {\n                            encoding: 'utf-8',\n                            cwd: process.cwd()\n                        });\n                        filesToCheck = stagedOutput\n                            .split('\\n')\n                            .filter(f => f.trim())\n                            .filter(f => isCodeFile(f))\n                            .map(f => path.resolve(process.cwd(), f));\n                    } catch {\n                        spinner.fail('Not a git repository or no staged files');\n                        process.exit(2);\n                    }\n                } else {\n                    // All code files in path\n                    spinner.start(`Scanning ${chalk.cyan(targetPath)}...`);\n                    const pattern = path.join(scanPath, '**/*');\n                    const allFiles = await glob(pattern, {\n                        nodir: true,\n                        dot: false,\n                        ignore: [\n                            '**/node_modules/**',\n                            '**/.git/**',\n                            '**/dist/**',\n                            '**/build/**',\n                            '**/.next/**',\n                            '**/coverage/**'\n                        ]\n                    });\n                    filesToCheck = allFiles.filter(f => isCodeFile(f));\n                }\n\n                if (filesToCheck.length === 0) {\n                    spinner.warn(chalk.yellow('No code files found to check.'));\n                    outputResults([], !!options.json);\n                    process.exit(0);\n                }\n\n                spinner.succeed(`Found ${filesToCheck.length} files to check`);\n\n                // 5. Run checks\n                spinner.start('Running Guardian checks...');\n                const results: CheckResult[] = [];\n\n                for (let i = 0; i < filesToCheck.length; i++) {\n                    const file = filesToCheck[i];\n                    spinner.text = `Checking ${i + 1}/${filesToCheck.length}: ${path.basename(file)}`;\n                    const result = await checkFile(file, rules, process.cwd());\n                    results.push(result);\n                }\n\n                spinner.stop();\n\n                // 6. Output results\n                const summary = summarizeResults(results);\n\n                if (options.json) {\n                    outputResults(results, true);\n                } else {\n                    outputResults(results, false);\n\n                    // Summary\n                    console.log('\\n' + chalk.bold('📊 Summary'));\n                    console.log(chalk.dim('─'.repeat(50)));\n                    console.log(`Files checked: ${chalk.cyan(summary.totalFiles)}`);\n                    console.log(`Total violations: ${summary.totalViolations > 0 ? chalk.red(summary.totalViolations) : chalk.green(0)}`);\n\n                    if (summary.totalViolations > 0) {\n                        console.log(`  ${chalk.red('Critical:')} ${summary.criticalCount}`);\n                        console.log(`  ${chalk.yellow('Warning:')} ${summary.warningCount}`);\n                        console.log(`  ${chalk.blue('Info:')} ${summary.infoCount}`);\n                    }\n\n                    console.log(chalk.dim('─'.repeat(50)));\n                }\n\n                // 7. Exit code logic\n                if (options.strict !== undefined) {\n                    const strictLevel = typeof options.strict === 'string' ? options.strict : 'all';\n\n                    if (strictLevel === 'critical' && summary.criticalCount > 0) {\n                        console.log(chalk.red('\\n❌ Check failed: Critical violations found'));\n                        process.exit(1);\n                    } else if (strictLevel === 'all' && summary.totalViolations > 0) {\n                        console.log(chalk.red('\\n❌ Check failed: Violations found'));\n                        process.exit(1);\n                    }\n                }\n\n                if (summary.totalViolations === 0) {\n                    console.log(chalk.green('\\n✅ All checks passed!'));\n                }\n\n                process.exit(0);\n\n            } catch (error: any) {\n                spinner.fail(chalk.red('Check failed'));\n                console.error(chalk.red('Error:'), error.message);\n                process.exit(2);\n            }\n        });\n}\n\n// Helper functions\n\nfunction isCodeFile(filePath: string): boolean {\n    const codeExtensions = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];\n    const ext = path.extname(filePath).toLowerCase();\n    return codeExtensions.includes(ext);\n}\n\nasync function loadCachedRules(projectId: string): Promise<CachedRules | null> {\n    try {\n        const cachePath = path.join(process.cwd(), CACHE_FILE);\n        const content = await fs.readFile(cachePath, 'utf-8');\n        const cached: CachedRules = JSON.parse(content);\n\n        if (cached.projectId !== projectId) {\n            return null;\n        }\n\n        return cached;\n    } catch {\n        return null;\n    }\n}\n\nasync function saveCachedRules(\n    projectId: string,\n    rules: EffectiveRule[],\n    settings: { lmax: number; lmax_warning: number }\n): Promise<void> {\n    try {\n        const cacheDir = path.join(process.cwd(), '.rigstate');\n        await fs.mkdir(cacheDir, { recursive: true });\n\n        const cached: CachedRules = {\n            timestamp: new Date().toISOString(),\n            projectId,\n            rules,\n            settings\n        };\n\n        await fs.writeFile(\n            path.join(cacheDir, 'rules-cache.json'),\n            JSON.stringify(cached, null, 2)\n        );\n    } catch {\n        // Silently fail cache write\n    }\n}\n\nfunction isStale(timestamp: string, maxAge: number): boolean {\n    const age = Date.now() - new Date(timestamp).getTime();\n    return age > maxAge;\n}\n\nfunction outputResults(results: CheckResult[], json: boolean): void {\n    if (json) {\n        console.log(JSON.stringify({\n            results,\n            summary: summarizeResults(results)\n        }, null, 2));\n        return;\n    }\n\n    const hasViolations = results.some(r => r.violations.length > 0);\n\n    if (!hasViolations) {\n        return;\n    }\n\n    console.log('\\n' + chalk.bold('🔍 Violations Found'));\n    console.log(chalk.dim('─'.repeat(50)));\n\n    for (const result of results) {\n        if (result.violations.length > 0) {\n            formatViolations(result.violations);\n        }\n    }\n}\n","/**\n * Rule Engine - Evaluates Guardian rules against local files\n */\n\nimport fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\n\nexport interface EffectiveRule {\n    id: string;\n    rule_name: string;\n    rule_type: string;\n    value: Record<string, unknown>;\n    severity: 'critical' | 'warning' | 'info';\n    description: string;\n    source: 'global' | 'project_override';\n    is_enabled: boolean;\n}\n\nexport interface Violation {\n    file: string;\n    rule: string;\n    ruleType: string;\n    severity: 'critical' | 'warning' | 'info';\n    message: string;\n    details?: string;\n    line?: number;\n}\n\nexport interface CheckResult {\n    file: string;\n    violations: Violation[];\n    passed: boolean;\n}\n\n/**\n * Check a single file against all rules\n */\nexport async function checkFile(\n    filePath: string,\n    rules: EffectiveRule[],\n    rootPath: string\n): Promise<CheckResult> {\n    const violations: Violation[] = [];\n    const relativePath = path.relative(rootPath, filePath);\n\n    try {\n        const content = await fs.readFile(filePath, 'utf-8');\n        const lines = content.split('\\n');\n\n        for (const rule of rules) {\n            const ruleViolations = await evaluateRule(rule, content, lines, relativePath);\n            violations.push(...ruleViolations);\n        }\n\n    } catch (error: any) {\n        violations.push({\n            file: relativePath,\n            rule: 'FILE_READ_ERROR',\n            ruleType: 'SYSTEM',\n            severity: 'warning',\n            message: `Could not read file: ${error.message}`\n        });\n    }\n\n    return {\n        file: relativePath,\n        violations,\n        passed: violations.length === 0\n    };\n}\n\n/**\n * Evaluate a single rule against file content\n */\nasync function evaluateRule(\n    rule: EffectiveRule,\n    content: string,\n    lines: string[],\n    filePath: string\n): Promise<Violation[]> {\n    const violations: Violation[] = [];\n\n    switch (rule.rule_type) {\n        case 'MAX_FILE_LINES': {\n            const value = rule.value as { limit: number; warning_threshold?: number };\n            const lineCount = lines.length;\n\n            if (lineCount > value.limit) {\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: 'critical',\n                    message: `File exceeds ${value.limit} lines`,\n                    details: `Current: ${lineCount} lines (limit: ${value.limit})`\n                });\n            } else if (value.warning_threshold && lineCount > value.warning_threshold) {\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: 'warning',\n                    message: `File approaching line limit`,\n                    details: `Current: ${lineCount} lines (warning at: ${value.warning_threshold}, limit: ${value.limit})`\n                });\n            }\n            break;\n        }\n\n        case 'MAX_FUNCTION_LINES': {\n            const value = rule.value as { limit: number };\n            const functionViolations = checkFunctionLines(content, lines, filePath, rule, value.limit);\n            violations.push(...functionViolations);\n            break;\n        }\n\n        case 'PATTERN_FORBIDDEN': {\n            const value = rule.value as { pattern: string; message?: string };\n            const pattern = new RegExp(value.pattern, 'g');\n\n            let match;\n            while ((match = pattern.exec(content)) !== null) {\n                const lineNumber = content.substring(0, match.index).split('\\n').length;\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: rule.severity,\n                    message: value.message || `Forbidden pattern found: ${value.pattern}`,\n                    line: lineNumber,\n                    details: `Found: \"${match[0].substring(0, 50)}${match[0].length > 50 ? '...' : ''}\"`\n                });\n            }\n            break;\n        }\n\n        case 'PATTERN_REQUIRED': {\n            const value = rule.value as { pattern: string; context?: string };\n            const pattern = new RegExp(value.pattern);\n\n            // Only check if context matches (e.g., only in certain file types)\n            const shouldCheck = !value.context || filePath.includes(value.context);\n\n            if (shouldCheck && !pattern.test(content)) {\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: rule.severity,\n                    message: `Required pattern not found: ${value.pattern}`,\n                    details: value.context ? `Expected in files matching: ${value.context}` : undefined\n                });\n            }\n            break;\n        }\n\n        case 'NAMING_CONVENTION': {\n            const value = rule.value as { pattern: string; context: string };\n            const pattern = new RegExp(value.pattern);\n            const fileName = path.basename(filePath);\n\n            // Check if context matches (e.g., \"components\" for component files)\n            if (filePath.includes(value.context) && !pattern.test(fileName)) {\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: rule.severity,\n                    message: `File name does not match naming convention`,\n                    details: `Expected pattern: ${value.pattern}`\n                });\n            }\n            break;\n        }\n\n        default:\n            // Unknown rule type, skip\n            break;\n    }\n\n    return violations;\n}\n\n/**\n * Check function line counts using simple heuristics (not full AST)\n * Works for TypeScript/JavaScript\n */\nfunction checkFunctionLines(\n    content: string,\n    lines: string[],\n    filePath: string,\n    rule: EffectiveRule,\n    limit: number\n): Violation[] {\n    const violations: Violation[] = [];\n\n    // Simple regex-based detection for functions\n    // Matches: function name(), async function name(), const name = () =>, const name = function()\n    const functionPatterns = [\n        /(?:export\\s+)?(?:async\\s+)?function\\s+(\\w+)\\s*\\([^)]*\\)\\s*\\{/g,\n        /(?:export\\s+)?const\\s+(\\w+)\\s*=\\s*(?:async\\s+)?\\([^)]*\\)\\s*=>\\s*\\{/g,\n        /(?:export\\s+)?const\\s+(\\w+)\\s*=\\s*(?:async\\s+)?function\\s*\\([^)]*\\)\\s*\\{/g,\n        /(\\w+)\\s*\\([^)]*\\)\\s*\\{/g // Method in class/object\n    ];\n\n    for (const pattern of functionPatterns) {\n        let match;\n        while ((match = pattern.exec(content)) !== null) {\n            const functionName = match[1];\n            const startIndex = match.index + match[0].length - 1; // Position of opening brace\n\n            // Find matching closing brace\n            let braceCount = 1;\n            let endIndex = startIndex + 1;\n\n            while (braceCount > 0 && endIndex < content.length) {\n                if (content[endIndex] === '{') braceCount++;\n                else if (content[endIndex] === '}') braceCount--;\n                endIndex++;\n            }\n\n            // Count lines in function\n            const functionContent = content.substring(startIndex, endIndex);\n            const functionLines = functionContent.split('\\n').length;\n\n            if (functionLines > limit) {\n                const lineNumber = content.substring(0, match.index).split('\\n').length;\n                violations.push({\n                    file: filePath,\n                    rule: rule.rule_name,\n                    ruleType: rule.rule_type,\n                    severity: rule.severity,\n                    message: `Function \"${functionName}\" exceeds ${limit} lines`,\n                    line: lineNumber,\n                    details: `Current: ${functionLines} lines (limit: ${limit})`\n                });\n            }\n        }\n    }\n\n    return violations;\n}\n\n/**\n * Format violations for console output\n */\nexport function formatViolations(violations: Violation[]): void {\n    for (const v of violations) {\n        const severityColor = v.severity === 'critical' ? chalk.red :\n            v.severity === 'warning' ? chalk.yellow : chalk.blue;\n\n        const lineInfo = v.line ? chalk.dim(`:${v.line}`) : '';\n\n        console.log(`  ${severityColor(`[${v.severity.toUpperCase()}]`)} ${v.file}${lineInfo}`);\n        console.log(`    ${v.message}`);\n        if (v.details) {\n            console.log(`    ${chalk.dim(v.details)}`);\n        }\n    }\n}\n\n/**\n * Summarize results\n */\nexport function summarizeResults(results: CheckResult[]): {\n    totalFiles: number;\n    totalViolations: number;\n    criticalCount: number;\n    warningCount: number;\n    infoCount: number;\n} {\n    let criticalCount = 0;\n    let warningCount = 0;\n    let infoCount = 0;\n\n    for (const result of results) {\n        for (const v of result.violations) {\n            if (v.severity === 'critical') criticalCount++;\n            else if (v.severity === 'warning') warningCount++;\n            else infoCount++;\n        }\n    }\n\n    return {\n        totalFiles: results.length,\n        totalViolations: criticalCount + warningCount + infoCount,\n        criticalCount,\n        warningCount,\n        infoCount\n    };\n}\n","/**\n * rigstate hooks - Manage git hooks for Guardian integration\n * \n * Usage:\n *   rigstate hooks install    # Install pre-commit hook\n *   rigstate hooks uninstall  # Remove pre-commit hook\n */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nconst PRE_COMMIT_SCRIPT = `#!/bin/sh\n# Rigstate Guardian Pre-commit Hook\n# Installed by: rigstate hooks install\n\n# 1. Silent Sentinel Check (Phase 5)\nif [ -f .rigstate/guardian.lock ]; then\n    echo \"🛑 INTERVENTION ACTIVE: Commit blocked by Silent Sentinel.\"\n    echo \"   A critical violation ('HARD_LOCK') was detected by the Guardian Daemon.\"\n    echo \"   Please fix the violation to unlock the repo.\"\n    echo \"\"\n    if grep -q \"HARD_LOCK_ACTIVE\" .rigstate/guardian.lock; then\n        cat .rigstate/guardian.lock\n    fi\n    exit 1\nfi\n\necho \"🛡️  Running Guardian checks...\"\n\n# Run check with strict mode for critical violations\nrigstate check --staged --strict=critical\n\n# Exit with the same code as rigstate check\nexit $?\n`;\n\nexport function createHooksCommand(): Command {\n    const hooks = new Command('hooks')\n        .description('Manage git hooks for Guardian integration');\n\n    hooks\n        .command('install')\n        .description('Install pre-commit hook to run Guardian checks')\n        .option('--strict [level]', 'Strict level: \"all\" or \"critical\" (default)', 'critical')\n        .action(async (options: { strict: string }) => {\n            try {\n                // 1. Find .git directory\n                const gitDir = path.join(process.cwd(), '.git');\n                try {\n                    await fs.access(gitDir);\n                } catch {\n                    console.log(chalk.red('❌ Not a git repository.'));\n                    console.log(chalk.dim('   Initialize with \"git init\" first.'));\n                    process.exit(1);\n                }\n\n                // 2. Ensure hooks directory exists\n                const hooksDir = path.join(gitDir, 'hooks');\n                await fs.mkdir(hooksDir, { recursive: true });\n\n                // 3. Check for existing pre-commit\n                const preCommitPath = path.join(hooksDir, 'pre-commit');\n                let existingContent = '';\n                try {\n                    existingContent = await fs.readFile(preCommitPath, 'utf-8');\n                    if (existingContent.includes('rigstate')) {\n                        console.log(chalk.yellow('⚠ Rigstate pre-commit hook already installed.'));\n                        console.log(chalk.dim('   Use \"rigstate hooks uninstall\" to remove first.'));\n                        return;\n                    }\n                } catch {\n                    // File doesn't exist, that's fine\n                }\n\n                // 4. Create hook script with configurable strict level\n                let script = PRE_COMMIT_SCRIPT;\n                if (options.strict === 'all') {\n                    script = script.replace('--strict=critical', '--strict');\n                }\n\n                // 5. If existing hook, append to it\n                if (existingContent && !existingContent.includes('rigstate')) {\n                    // Append our hook to existing\n                    const combinedScript = existingContent + '\\n\\n' + script.replace('#!/bin/sh\\n', '');\n                    await fs.writeFile(preCommitPath, combinedScript, { mode: 0o755 });\n                    console.log(chalk.green('✅ Rigstate hook appended to existing pre-commit.'));\n                } else {\n                    // Create new hook\n                    await fs.writeFile(preCommitPath, script, { mode: 0o755 });\n                    console.log(chalk.green('✅ Pre-commit hook installed!'));\n                }\n\n                console.log(chalk.dim(`   Path: ${preCommitPath}`));\n                console.log(chalk.dim(`   Strict level: ${options.strict}`));\n                console.log('');\n                console.log(chalk.cyan('Guardian will now check your code before each commit.'));\n                console.log(chalk.dim('Use \"rigstate hooks uninstall\" to remove the hook.'));\n\n            } catch (error: any) {\n                console.error(chalk.red('Failed to install hook:'), error.message);\n                process.exit(1);\n            }\n        });\n\n    hooks\n        .command('uninstall')\n        .description('Remove Rigstate pre-commit hook')\n        .action(async () => {\n            try {\n                const preCommitPath = path.join(process.cwd(), '.git', 'hooks', 'pre-commit');\n\n                try {\n                    const content = await fs.readFile(preCommitPath, 'utf-8');\n\n                    if (!content.includes('rigstate')) {\n                        console.log(chalk.yellow('⚠ No Rigstate hook found in pre-commit.'));\n                        return;\n                    }\n\n                    // Check if it's our hook exclusively\n                    if (content.includes('# Rigstate Guardian Pre-commit Hook') &&\n                        content.trim().split('\\n').filter(l => l && !l.startsWith('#')).length <= 4) {\n                        // It's only our hook, remove the file\n                        await fs.unlink(preCommitPath);\n                        console.log(chalk.green('✅ Pre-commit hook removed.'));\n                    } else {\n                        // There's other content, just remove our section\n                        const lines = content.split('\\n');\n                        const filteredLines = [];\n                        let inRigstateSection = false;\n\n                        for (const line of lines) {\n                            if (line.includes('Rigstate Guardian Pre-commit Hook')) {\n                                inRigstateSection = true;\n                                continue;\n                            }\n                            if (inRigstateSection && line.includes('exit $?')) {\n                                inRigstateSection = false;\n                                continue;\n                            }\n                            if (!inRigstateSection && !line.includes('rigstate check')) {\n                                filteredLines.push(line);\n                            }\n                        }\n\n                        await fs.writeFile(preCommitPath, filteredLines.join('\\n'), { mode: 0o755 });\n                        console.log(chalk.green('✅ Rigstate section removed from pre-commit hook.'));\n                    }\n\n                } catch {\n                    console.log(chalk.yellow('⚠ No pre-commit hook found.'));\n                }\n\n            } catch (error: any) {\n                console.error(chalk.red('Failed to uninstall hook:'), error.message);\n                process.exit(1);\n            }\n        });\n\n    return hooks;\n}\n","/**\n * rigstate daemon - Unified Guardian Daemon\n * \n * Usage:\n *   rigstate daemon              # Start daemon in foreground\n *   rigstate daemon status       # Check if daemon is running\n *   rigstate daemon --no-bridge  # Disable Agent Bridge\n *   rigstate daemon --verbose    # Enable verbose output\n */\n/* eslint-disable no-console */\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { createDaemon } from '../daemon/factory.js';\nimport { enableDaemon, disableDaemon } from '../utils/service-manager.js';\n\nconst PID_FILE = '.rigstate/daemon.pid';\nconst STATE_FILE = '.rigstate/daemon.state.json';\n\nexport function createDaemonCommand(): Command {\n    const daemon = new Command('daemon')\n        .description('Start the Guardian daemon for continuous monitoring');\n\n    // Main daemon command (start in foreground)\n    daemon\n        .argument('[action]', 'Action: start (default) or status', 'start')\n        .option('--project <id>', 'Project ID (or use .rigstate manifest)')\n        .option('--path <path>', 'Path to watch', '.')\n        .option('--no-bridge', 'Disable Agent Bridge connection')\n        .option('--verbose', 'Enable verbose output')\n        .action(async (action: string, options: {\n            project?: string;\n            path?: string;\n            bridge?: boolean;\n            verbose?: boolean;\n        }) => {\n            if (action === 'status') {\n                await showStatus();\n                return;\n            }\n\n            if (action === 'enable') {\n                await enableDaemon();\n                return;\n            }\n\n            if (action === 'disable') {\n                await disableDaemon();\n                return;\n            }\n\n            const spinner = ora();\n\n            try {\n                // Check if already running - be silent if it's just a stale PID file\n                const pidPath = path.join(process.cwd(), PID_FILE);\n                try {\n                    const content = await fs.readFile(pidPath, 'utf-8');\n                    const pid = parseInt(content.trim(), 10);\n                    try {\n                        process.kill(pid, 0);\n                        // If we get here, the process is actually running\n                        console.log(chalk.yellow('⚠ Another daemon instance is active (PID ' + pid + ').'));\n                        console.log(chalk.dim(`   Run \"rigstate daemon status\" for details or Ctrl+C to stop.\\n`));\n                    } catch {\n                        // Process is dead, cleanup stale file silently\n                        await fs.unlink(pidPath).catch(() => { });\n                    }\n                } catch {\n                    // No PID file, all good\n                }\n\n                // Create daemon\n                spinner.start('Initializing Guardian Daemon...');\n                const daemonInstance = await createDaemon({\n                    project: options.project,\n                    path: options.path,\n                    noBridge: options.bridge === false,\n                    verbose: options.verbose\n                });\n                spinner.stop();\n\n                // Write PID file\n                await writePidFile();\n\n                // Handle shutdown gracefully\n                process.on('SIGINT', async () => {\n                    console.log(chalk.dim('\\n\\nShutting down...'));\n                    await daemonInstance.stop();\n                    await cleanupPidFile();\n                    process.exit(0);\n                });\n\n                process.on('SIGTERM', async () => {\n                    await daemonInstance.stop();\n                    await cleanupPidFile();\n                    process.exit(0);\n                });\n\n                // Update state file periodically\n                const stateInterval = setInterval(async () => {\n                    await writeStateFile(daemonInstance.getState());\n                }, 5000);\n\n                daemonInstance.on('stopped', () => {\n                    clearInterval(stateInterval);\n                });\n\n                // Start the daemon\n                await daemonInstance.start();\n\n                // Keep the process alive\n                await new Promise(() => { });\n\n            } catch (error: any) {\n                spinner.fail(chalk.red('Failed to start daemon'));\n                console.error(chalk.red('Error:'), error.message);\n                process.exit(1);\n            }\n        });\n\n    return daemon;\n}\n\nasync function isRunning(): Promise<boolean> {\n    try {\n        const pidPath = path.join(process.cwd(), PID_FILE);\n        const content = await fs.readFile(pidPath, 'utf-8');\n        const pid = parseInt(content.trim(), 10);\n\n        // Check if process exists\n        try {\n            process.kill(pid, 0);\n            return true;\n        } catch {\n            // Process doesn't exist, clean up stale PID file\n            await fs.unlink(pidPath);\n            return false;\n        }\n    } catch {\n        return false;\n    }\n}\n\nasync function writePidFile(): Promise<void> {\n    try {\n        const dir = path.join(process.cwd(), '.rigstate');\n        await fs.mkdir(dir, { recursive: true });\n        await fs.writeFile(path.join(dir, 'daemon.pid'), process.pid.toString());\n    } catch {\n        // Silently fail\n    }\n}\n\nasync function cleanupPidFile(): Promise<void> {\n    try {\n        await fs.unlink(path.join(process.cwd(), PID_FILE));\n        await fs.unlink(path.join(process.cwd(), STATE_FILE));\n    } catch {\n        // Silently fail\n    }\n}\n\nasync function writeStateFile(state: any): Promise<void> {\n    try {\n        const dir = path.join(process.cwd(), '.rigstate');\n        await fs.mkdir(dir, { recursive: true });\n        await fs.writeFile(\n            path.join(dir, 'daemon.state.json'),\n            JSON.stringify(state, null, 2)\n        );\n    } catch {\n        // Silently fail\n    }\n}\n\nasync function showStatus(): Promise<void> {\n    console.log(chalk.bold('\\n🛡️  Guardian Daemon Status\\n'));\n\n    const running = await isRunning();\n\n    if (!running) {\n        console.log(chalk.yellow('Status: Not running'));\n        console.log(chalk.dim('Use \"rigstate daemon\" to start.\\n'));\n        return;\n    }\n\n    console.log(chalk.green('Status: Running'));\n\n    // Read state file\n    try {\n        const statePath = path.join(process.cwd(), STATE_FILE);\n        const content = await fs.readFile(statePath, 'utf-8');\n        const state = JSON.parse(content);\n\n        console.log(chalk.dim('─'.repeat(40)));\n        console.log(`Started at:      ${state.startedAt || 'Unknown'}`);\n        console.log(`Files checked:   ${state.filesChecked || 0}`);\n        console.log(`Violations:      ${state.violationsFound || 0}`);\n        console.log(`Tasks processed: ${state.tasksProcessed || 0}`);\n        console.log(`Last activity:   ${state.lastActivity || 'None'}`);\n        console.log(chalk.dim('─'.repeat(40)));\n    } catch {\n        console.log(chalk.dim('(State file not found)'));\n    }\n\n    // Read PID\n    try {\n        const pidPath = path.join(process.cwd(), PID_FILE);\n        const pid = await fs.readFile(pidPath, 'utf-8');\n        console.log(chalk.dim(`PID: ${pid.trim()}`));\n    } catch {\n        // No PID file\n    }\n\n    console.log('');\n}\n\n","import { GuardianDaemon } from './core.js';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { loadManifest } from '../utils/manifest.js';\nimport { DaemonConfig } from './types.js';\n\n/**\n * Factory for creating a GuardianDaemon with resolved configuration.\n */\nexport async function createDaemon(options: {\n    project?: string;\n    path?: string;\n    noBridge?: boolean;\n    verbose?: boolean;\n}): Promise<GuardianDaemon> {\n    const apiUrl = getApiUrl();\n\n    let projectId = options.project;\n\n    if (!projectId) {\n        const manifest = await loadManifest();\n        if (manifest) projectId = manifest.project_id;\n    }\n\n    if (!projectId) projectId = getProjectId();\n\n    if (!projectId) {\n        throw new Error('No project ID found. Run \"rigstate link\" or use --project <id>.');\n    }\n\n    const apiKey = getApiKey();\n    if (!apiKey) {\n        throw new Error('Not authenticated. Run \"rigstate login\" first.');\n    }\n\n    const config: DaemonConfig = {\n        projectId,\n        apiUrl,\n        apiKey,\n        watchPath: options.path || process.cwd(),\n        checkOnChange: true,\n        bridgeEnabled: !options.noBridge,\n        verbose: !!options.verbose\n    };\n\n    return new GuardianDaemon(config);\n}\n","/**\n * Daemon Core - Orchestrates all background watchers\n * \n * Combines:\n * 1. File Watcher (chokidar) - Monitors filesystem changes\n * 2. Guardian Rules - Validates files against rules on change\n * 3. Agent Bridge Listener - Receives tasks from Rigstate Cloud\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs/promises';\nimport path from 'path';\nimport { EventEmitter } from 'events';\nimport { createFileWatcher } from './file-watcher.js';\nimport { createHeuristicEngine } from './heuristic-engine.js';\nimport { createInterventionProtocol } from './intervention-protocol.js';\nimport { createGuardianMonitor } from './guardian-monitor.js';\nimport { createBridgeListener } from './bridge-listener.js';\nimport { DaemonConfig, DaemonState } from './types.js';\nimport { trackSkillUsage } from './telemetry.js';\nimport { jitProvisionSkill } from '../utils/skills-provisioner.js';\nimport { syncProjectRules } from '../commands/sync-rules.js';\nimport { Logger } from '../utils/logger.js';\nimport { KnowledgeHarvester } from './harvester.js';\nimport { ViolationManager } from './violation-manager.js';\nimport { StatsReporter } from './stats-reporter.js';\nimport { PlanWatcher } from './plan-watcher.js';\n\nexport class GuardianDaemon extends EventEmitter {\n    private config: DaemonConfig;\n    private state: DaemonState;\n    private fileWatcher: ReturnType<typeof createFileWatcher> | null = null;\n    private guardianMonitor: ReturnType<typeof createGuardianMonitor> | null = null;\n    private heuristicEngine: ReturnType<typeof createHeuristicEngine> | null = null;\n    private interventionProtocol: ReturnType<typeof createInterventionProtocol> | null = null;\n    private bridgeListener: ReturnType<typeof createBridgeListener> | null = null;\n    private harvester: KnowledgeHarvester | null = null;\n    private syncInterval: NodeJS.Timeout | null = null;\n\n    private violationManager: ViolationManager;\n    private statsReporter: StatsReporter;\n    private planWatcher: PlanWatcher;\n\n    constructor(config: DaemonConfig) {\n        super();\n        this.config = config;\n        this.state = {\n            isRunning: false,\n            startedAt: null,\n            filesChecked: 0,\n            violationsFound: 0,\n            tasksProcessed: 0,\n            lastActivity: null\n        };\n        this.violationManager = new ViolationManager(this.config.watchPath, this);\n        this.statsReporter = new StatsReporter({\n            projectId: this.config.projectId,\n            apiUrl: this.config.apiUrl,\n            apiKey: this.config.apiKey,\n            watchPath: this.config.watchPath,\n            verbose: this.config.verbose\n        });\n        this.planWatcher = new PlanWatcher({\n            projectId: this.config.projectId,\n            apiUrl: this.config.apiUrl,\n            apiKey: this.config.apiKey,\n            watchPath: this.config.watchPath\n        });\n    }\n\n    async start(): Promise<void> {\n        if (this.state.isRunning) return;\n\n        this.printWelcome();\n        this.state.isRunning = true;\n        this.state.startedAt = new Date().toISOString();\n\n        this.heuristicEngine = createHeuristicEngine();\n        this.interventionProtocol = createInterventionProtocol();\n        this.guardianMonitor = createGuardianMonitor(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n        this.harvester = new KnowledgeHarvester({\n            projectId: this.config.projectId, apiUrl: this.config.apiUrl,\n            apiKey: this.config.apiKey, watchPath: this.config.watchPath\n        });\n\n        await this.guardianMonitor.loadRules();\n        await this.runRuleSync();\n        await this.syncHeuristics();\n        await this.planWatcher.syncFromCloud();\n\n        if (this.config.checkOnChange) {\n            this.setupFileWatcher();\n            await this.harvester.start();\n            this.syncInterval = setInterval(() => {\n                this.runRuleSync().catch(e => Logger.error(`Auto-Sync failed: ${e.message}`));\n            }, 5 * 60 * 1000);\n        }\n\n        if (this.config.bridgeEnabled) await this.setupBridge().catch(() => { });\n\n        this.printActive();\n        this.emit('started', this.state);\n    }\n\n    private async runRuleSync() {\n        try {\n            await syncProjectRules(this.config.projectId, this.config.apiKey, this.config.apiUrl);\n        } catch (error: any) {\n            Logger.warn(`Rule sync hiccup: ${error.message}`);\n        }\n    }\n\n    private printWelcome() {\n        console.log(chalk.bold.blue('\\n🛡️  Guardian Daemon Starting...'));\n        console.log(chalk.dim(`Project: ${this.config.projectId} | Watch: ${this.config.watchPath}`));\n        console.log(chalk.dim('─'.repeat(50)));\n    }\n\n    private printActive() {\n        console.log(chalk.dim('─'.repeat(50)));\n        console.log(chalk.green.bold('✅ Guardian Daemon is active. Watching for architectural drift.'));\n    }\n\n    private async syncHeuristics() {\n        if (this.heuristicEngine) {\n            await this.heuristicEngine.refreshRules(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n        }\n    }\n\n    private setupFileWatcher() {\n        this.fileWatcher = createFileWatcher(this.config.watchPath);\n        this.fileWatcher.on('change', (path) => this.handleFileChange(path));\n        this.fileWatcher.start();\n        Logger.info('Sovereign File Watcher Active');\n    }\n\n    private async handleFileChange(filePath: string) {\n        this.state.lastActivity = new Date().toISOString();\n        const lineCount = await this.getLineCount(filePath);\n\n        await this.statsReporter.report(filePath, lineCount);\n        await this.runPredictiveAnalysis(filePath, lineCount);\n\n        if (path.basename(filePath).startsWith('IMPLEMENTATION_PLAN') && filePath.endsWith('.md')) {\n            await this.planWatcher.checkForChanges(filePath);\n        }\n\n        await this.runIntegrityCheck(filePath);\n    }\n\n    private async getLineCount(filePath: string): Promise<number> {\n        try {\n            const content = await fs.readFile(filePath, 'utf-8');\n            return content.split('\\n').length;\n        } catch { return 0; }\n    }\n\n    private async runPredictiveAnalysis(filePath: string, lineCount: number) {\n        if (!this.heuristicEngine || !this.interventionProtocol || !this.guardianMonitor) return;\n        const matches = await this.heuristicEngine.analyzeFile(filePath, {\n            lineCount, rules: this.guardianMonitor.getRules()\n        });\n\n        for (const match of matches) {\n            Logger.info(`PREDICTIVE: ${match.skillId} (${match.reason})`);\n            const decision = this.interventionProtocol.evaluateTrigger(match.skillId, match.confidence);\n            this.interventionProtocol.enforce(decision);\n            await jitProvisionSkill(match.skillId, this.config.apiUrl, this.config.apiKey, this.config.projectId, this.config.watchPath);\n            await trackSkillUsage(this.config.apiUrl, this.config.apiKey, this.config.projectId, match.skillId);\n            this.emit('skill:suggestion', match);\n        }\n    }\n\n    private async runIntegrityCheck(filePath: string) {\n        if (!this.guardianMonitor) return;\n        if (this.interventionProtocol) this.interventionProtocol.clear(filePath);\n        const result = await this.guardianMonitor.checkFile(filePath);\n        this.state.filesChecked++;\n\n        if (result.violations.length > 0) {\n            this.violationManager.handleViolations(filePath, result.violations);\n            this.state.violationsFound = this.violationManager.getViolationCount();\n            this.enforceIntervention(filePath, result.violations);\n        } else {\n            this.violationManager.clear(filePath);\n        }\n    }\n\n    private enforceIntervention(filePath: string, violations: any[]) {\n        if (!this.interventionProtocol) return;\n        for (const v of violations) {\n            const decision = this.interventionProtocol.evaluateViolation(v.message, v.severity as any);\n            this.interventionProtocol.enforce(decision);\n            this.interventionProtocol.registerViolation(filePath, decision);\n        }\n    }\n\n    private async setupBridge() {\n        this.bridgeListener = createBridgeListener(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n        this.bridgeListener.on('task', (task) => {\n            this.state.lastActivity = new Date().toISOString();\n            this.state.tasksProcessed++;\n            console.log(chalk.cyan(`\\n📥 New task: ${task.id}`));\n            this.emit('task', task);\n        });\n        await this.bridgeListener.connect();\n        console.log(chalk.green('  ✓ Agent Bridge active'));\n    }\n\n    async stop(): Promise<void> {\n        if (!this.state.isRunning) return;\n        if (this.fileWatcher) await this.fileWatcher.stop();\n        if (this.bridgeListener) await this.bridgeListener.disconnect();\n        if (this.harvester) await this.harvester.stop();\n        if (this.syncInterval) clearInterval(this.syncInterval);\n        this.state.isRunning = false;\n        this.emit('stopped', this.state);\n    }\n\n    getState(): DaemonState {\n        return { ...this.state, violationsFound: this.violationManager.getViolationCount() };\n    }\n}\n","/**\n * File Watcher - Monitors filesystem for changes using chokidar\n */\n\nimport * as chokidar from 'chokidar';\nimport path from 'path';\nimport { EventEmitter } from 'events';\n\nexport interface FileWatcherEvents {\n    change: (filePath: string) => void;\n    add: (filePath: string) => void;\n    unlink: (filePath: string) => void;\n    error: (error: Error) => void;\n    ready: () => void;\n}\n\nexport interface FileWatcher extends EventEmitter {\n    start(): void;\n    stop(): Promise<void>;\n    on<K extends keyof FileWatcherEvents>(event: K, listener: FileWatcherEvents[K]): this;\n    emit<K extends keyof FileWatcherEvents>(event: K, ...args: Parameters<FileWatcherEvents[K]>): boolean;\n}\n\nconst CODE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.md'];\n\nfunction isCodeFile(filePath: string): boolean {\n    const ext = path.extname(filePath).toLowerCase();\n    return CODE_EXTENSIONS.includes(ext);\n}\n\nexport function createFileWatcher(watchPath: string): FileWatcher {\n    const emitter = new EventEmitter() as FileWatcher;\n    let watcher: chokidar.FSWatcher | null = null;\n\n    emitter.start = () => {\n        const absolutePath = path.resolve(process.cwd(), watchPath);\n\n        watcher = chokidar.watch(absolutePath, {\n            ignored: (pathStr) => {\n                // Ignore clearly non-code directories and heavy assets\n                // Convert to relative for easier matching\n                const relativePath = path.relative(process.cwd(), pathStr);\n                const segments = relativePath.split(path.sep);\n\n                const ignoreDirs = [\n                    'node_modules', '.git', '.next', '.turbo', 'dist', 'build',\n                    '.rigstate', 'coverage', 'tmp', 'temp', 'vendor', '.cache',\n                    'public', 'artifacts', 'out', '.vercel', '.npm', '.agent',\n                    '.cursor', '.npm-cache', 'backups', 'docs', 'tests', 'tools',\n                    'scripts', 'supabase'\n                ];\n\n                if (segments.some(segment => ignoreDirs.includes(segment))) {\n                    return true;\n                }\n\n                // If it's a file, only watch if it's a code file\n                // Directories don't have an extension in our convention for this check\n                const isFile = !!path.extname(pathStr);\n                if (isFile && !isCodeFile(pathStr)) {\n                    return true;\n                }\n\n                return false;\n            },\n            persistent: true,\n            ignoreInitial: true,\n            ignorePermissionErrors: true,\n            depth: 5, // Strongly reduced for major monorepos\n            awaitWriteFinish: {\n                stabilityThreshold: 500, // Increased for stability\n                pollInterval: 200\n            },\n            usePolling: false,\n            followSymlinks: false, // Prevent symlink loops and extra handles\n            atomic: true\n        });\n\n        watcher.on('change', (filePath: string) => {\n            if (isCodeFile(filePath)) {\n                emitter.emit('change', path.relative(process.cwd(), filePath));\n            }\n        });\n\n        watcher.on('add', (filePath: string) => {\n            if (isCodeFile(filePath)) {\n                emitter.emit('add', path.relative(process.cwd(), filePath));\n            }\n        });\n\n        watcher.on('unlink', (filePath: string) => {\n            if (isCodeFile(filePath)) {\n                emitter.emit('unlink', path.relative(process.cwd(), filePath));\n            }\n        });\n\n        watcher.on('error', (error: any) => {\n            emitter.emit('error', error);\n        });\n\n        watcher.on('ready', () => {\n            emitter.emit('ready');\n        });\n    };\n\n    emitter.stop = async () => {\n        if (watcher) {\n            await watcher.close();\n            watcher = null;\n        }\n    };\n\n    return emitter;\n}\n","import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { dirname } from 'path';\nimport path from 'path';\nimport axios from 'axios';\n\nexport interface SkillTrigger {\n    skillId: string;\n    patterns: {\n        imports?: string[]; // e.g. \"@stripe/stripe-js\"\n        content?: string[]; // Regex strings e.g. \"payment_intent\"\n        files?: string[];   // Glob patterns e.g. \"**/*.sql\"\n        violation_id?: string;\n        metric_threshold?: number;\n    };\n    confidence: 'high' | 'medium' | 'low';\n}\n\nexport interface HeuristicMatch {\n    skillId: string;\n    file: string;\n    reason: string;\n    confidence: 'high' | 'medium' | 'low';\n}\n\n// TODO: In the future, this should fetch from the Rigstate API (The Registry)\nconst GLOBAL_HEURISTICS: SkillTrigger[] = [\n    {\n        skillId: 'payment-expert',\n        patterns: {\n            imports: ['@stripe/', 'stripe'],\n            content: ['PaymentIntent', 'CheckoutSession'],\n        },\n        confidence: 'high'\n    },\n    {\n        skillId: 'rigstate-integrity-gate',\n        patterns: {\n            files: ['**/release.config.js', '**/manifest.json', '**/.rigstate/release/*'],\n            content: ['[CORE INTEGRITY]', 'prepare_release']\n        },\n        confidence: 'high'\n    },\n    {\n        skillId: 'database-architect',\n        patterns: {\n            files: ['**/*.sql', '**/schema.prisma', '**/migrations/*'],\n            imports: ['@supabase/supabase-js', 'drizzle-orm', 'prisma']\n        },\n        confidence: 'medium'\n    }\n];\n\nexport class HeuristicEngine {\n    private rules: SkillTrigger[] = [];\n    private cachePath: string;\n\n    constructor() {\n        this.cachePath = path.join(process.cwd(), '.rigstate', 'cache', 'heuristics.json');\n        this.loadRules();\n    }\n\n    private async loadRules() {\n        try {\n            const cached = await readFile(this.cachePath, 'utf-8');\n            const data = JSON.parse(cached);\n            if (Array.isArray(data) && data.length > 0) {\n                this.rules = data;\n                return;\n            }\n        } catch (e) {\n            // No cache, use defaults\n        }\n        this.rules = GLOBAL_HEURISTICS;\n    }\n\n    async refreshRules(projectId: string, apiUrl: string, apiKey: string) {\n        try {\n            // Ensure cache directory exists\n            await mkdir(dirname(this.cachePath), { recursive: true });\n\n            const endpoint = `${apiUrl}/api/v1/skills/triggers`;\n\n            const response = await axios.get(endpoint, {\n                headers: {\n                    'x-api-key': apiKey,\n                    'Content-Type': 'application/json'\n                }\n            });\n\n            if (response.data && Array.isArray(response.data.triggers)) {\n                const cloudRules = response.data.triggers;\n\n                // Write to cache\n                await writeFile(this.cachePath, JSON.stringify(cloudRules, null, 2));\n\n                this.rules = cloudRules;\n                return true;\n            }\n        } catch (error) {\n            return false;\n        }\n    }\n\n    async analyzeFile(filePath: string, metrics?: { lineCount: number, rules: any[] }): Promise<HeuristicMatch[]> {\n        try {\n            const content = await readFile(filePath, 'utf-8');\n            const matches: HeuristicMatch[] = [];\n\n            // Use dynamic rules\n            const activeRules = this.rules.length > 0 ? this.rules : GLOBAL_HEURISTICS;\n\n            for (const heuristic of activeRules) {\n                const match = this.checkHeuristic(filePath, content, heuristic, metrics);\n                if (match) {\n                    matches.push(match);\n                }\n            }\n\n            return matches;\n        } catch (error) {\n            // Ignore file read errors (deleted files, etc)\n            return [];\n        }\n    }\n\n    private checkHeuristic(\n        filePath: string,\n        content: string,\n        heuristic: SkillTrigger,\n        metrics?: { lineCount: number, rules: any[] }\n    ): HeuristicMatch | null {\n        // 0. Check Metric Thresholds (The 80% Rule)\n        if (heuristic.patterns.metric_threshold && metrics) {\n            const lineLimitRule = metrics.rules.find(r => r.rule_type === 'MAX_FILE_LINES');\n            if (lineLimitRule) {\n                const limit = (lineLimitRule.value as any).limit;\n                const threshold = limit * heuristic.patterns.metric_threshold;\n\n                if (metrics.lineCount >= threshold && metrics.lineCount < limit) {\n                    return {\n                        skillId: heuristic.skillId,\n                        file: filePath,\n                        reason: `File reached ${Math.round((metrics.lineCount / limit) * 100)}% of its line limit (${metrics.lineCount}/${limit})`,\n                        confidence: 'high'\n                    };\n                }\n            }\n        }\n\n        // 1. Check File Path Patterns\n        if (heuristic.patterns.files) {\n            // Simple endsWith check for now, ideally use micromatch\n            const matchesFile = heuristic.patterns.files.some(pattern => {\n                if (pattern.startsWith('**/*')) return filePath.endsWith(pattern.replace('**/*', ''));\n                return filePath.includes(pattern);\n            });\n            if (matchesFile) {\n                return {\n                    skillId: heuristic.skillId,\n                    file: filePath,\n                    reason: `Matches file pattern: ${heuristic.patterns.files.join(', ')}`,\n                    confidence: heuristic.confidence\n                };\n            }\n        }\n\n        // 2. Check Imports\n        if (heuristic.patterns.imports) {\n            for (const imp of heuristic.patterns.imports) {\n                // Regex to find import or require\n                const importRegex = new RegExp(`(import .* from ['\"]${imp}|require\\\\(['\"]${imp})`, 'i');\n                if (importRegex.test(content)) {\n                    return {\n                        skillId: heuristic.skillId,\n                        file: filePath,\n                        reason: `Detected import: ${imp}`,\n                        confidence: heuristic.confidence\n                    };\n                }\n            }\n        }\n\n        // 3. Check Content\n        if (heuristic.patterns.content) {\n            for (const pattern of heuristic.patterns.content) {\n                if (content.includes(pattern)) {\n                    return {\n                        skillId: heuristic.skillId,\n                        file: filePath,\n                        reason: `Detected content pattern: ${pattern}`,\n                        confidence: heuristic.confidence\n                    };\n                }\n            }\n        }\n\n        return null;\n    }\n}\n\nexport function createHeuristicEngine() {\n    return new HeuristicEngine();\n}\n","import chalk from 'chalk';\n\nimport * as fs from 'fs';\nimport * as path from 'path';\n\nexport type GovernanceMode = 'OPEN' | 'SOFT_LOCK' | 'HARD_LOCK';\n\nexport interface InterventionDecision {\n    mode: GovernanceMode;\n    message: string;\n    blockCommit: boolean;\n}\n\n/**\n * The Silent Sentinel (Frank's Enforcer)\n * Determines the severity of an event and the required system response.\n */\nexport class InterventionProtocol {\n    private activeViolators = new Set<string>();\n\n    /**\n     * Registers a violation outcome to update the global lock state.\n     */\n    registerViolation(filePath: string, decision: InterventionDecision) {\n        if (decision.mode === 'HARD_LOCK') {\n            this.activeViolators.add(filePath);\n            this.syncLockFile();\n        }\n    }\n\n    /**\n     * Clears any active locks for a specific file (e.g. after a fix).\n     */\n    clear(filePath: string) {\n        if (this.activeViolators.has(filePath)) {\n            this.activeViolators.delete(filePath);\n            this.syncLockFile();\n        }\n    }\n\n    private syncLockFile() {\n        try {\n            const lockDir = path.join(process.cwd(), '.rigstate');\n            if (!fs.existsSync(lockDir)) fs.mkdirSync(lockDir, { recursive: true });\n\n            const lockPath = path.join(lockDir, 'guardian.lock');\n\n            if (this.activeViolators.size > 0) {\n                const content = `HARD_LOCK_ACTIVE\\nTimestamp: ${new Date().toISOString()}\\n\\nBlocking Files:\\n${Array.from(this.activeViolators).join('\\n')}`;\n                fs.writeFileSync(lockPath, content, 'utf-8');\n            } else {\n                if (fs.existsSync(lockPath)) fs.unlinkSync(lockPath);\n            }\n        } catch (e) {\n            console.error('Failed to sync guardian lock file:', e);\n        }\n    }\n\n    /**\n     * Evaluate a Heuristic Trigger (Preventative)\n     */\n    evaluateTrigger(skillId: string, confidence: string): InterventionDecision {\n        // Example: If a skill is marked as 'HARD_LOCK' in its metadata, we block.\n        // For now, most triggers are informational (JIT provisioning).\n\n        if (skillId === 'rigstate-integrity-gate') {\n            return {\n                mode: 'SOFT_LOCK',\n                message: 'Integrity Gate detected. Release Manifest required before final push.',\n                blockCommit: false // Soft lock just warns\n            };\n        }\n\n        return {\n            mode: 'OPEN',\n            message: `Predictive activation: ${skillId}`,\n            blockCommit: false\n        };\n    }\n\n    /**\n     * Evaluate a Guardian Violation (Corrective)\n     */\n    evaluateViolation(ruleId: string, severity: 'critical' | 'warning' | 'info'): InterventionDecision {\n        if (severity === 'critical' || (severity as any) === 'error') {\n            return {\n                mode: 'HARD_LOCK',\n                message: `CRITICAL VIOLATION: ${ruleId}. System Integrity Compromised.`,\n                blockCommit: true\n            };\n        }\n\n        if (severity === 'warning') {\n            return {\n                mode: 'SOFT_LOCK',\n                message: `Warning: ${ruleId}. Review recommended.`,\n                blockCommit: false\n            };\n        }\n\n        return {\n            mode: 'OPEN',\n            message: 'Info notice.',\n            blockCommit: false\n        };\n    }\n\n    /**\n     * Logs the intervention to the console with appropriate visual weight\n     */\n    enforce(decision: InterventionDecision) {\n        if (decision.mode === 'OPEN') return;\n\n        const icon = decision.mode === 'HARD_LOCK' ? '🚫' : '⚠️';\n        const color = decision.mode === 'HARD_LOCK' ? chalk.bgRed.white.bold : chalk.yellow.bold;\n\n        console.log('\\n' + color(` ${icon} [${decision.mode}] INTERVENTION `));\n        console.log(chalk.redBright(` ${decision.message}`));\n\n        if (decision.blockCommit) {\n            console.log(chalk.dim(' 🔒 Commit functionality is logically suspended until fixed.'));\n        }\n    }\n}\n\nexport function createInterventionProtocol() {\n    return new InterventionProtocol();\n}\n","/**\n * Guardian Monitor - Checks files against Guardian rules\n */\n\nimport axios from 'axios';\nimport chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { checkFile, type EffectiveRule, type Violation, type CheckResult } from '../utils/rule-engine.js';\n\nconst CACHE_FILE = '.rigstate/rules-cache.json';\nconst CACHE_TTL_MS = 5 * 60 * 1000; // 5 minutes\n\ninterface CachedRules {\n    timestamp: string;\n    projectId: string;\n    rules: EffectiveRule[];\n    settings: { lmax: number; lmax_warning: number };\n}\n\nexport interface GuardianMonitor {\n    loadRules(): Promise<void>;\n    checkFile(filePath: string): Promise<CheckResult>;\n    getRuleCount(): number;\n    getRules(): EffectiveRule[];\n}\n\nexport function createGuardianMonitor(\n    projectId: string,\n    apiUrl: string,\n    apiKey: string\n): GuardianMonitor {\n    let rules: EffectiveRule[] = [];\n    let lastFetch: number = 0;\n\n    const loadRules = async (): Promise<void> => {\n        // Check if cache is fresh\n        if (rules.length > 0 && Date.now() - lastFetch < CACHE_TTL_MS) {\n            return;\n        }\n\n        try {\n            // Try API first\n            const response = await axios.get(`${apiUrl}/api/v1/guardian/rules`, {\n                params: { project_id: projectId },\n                headers: { Authorization: `Bearer ${apiKey}` },\n                timeout: 10000\n            });\n\n            if (response.data.success && response.data.data.rules) {\n                rules = response.data.data.rules;\n                lastFetch = Date.now();\n\n                // Save to cache\n                await saveCachedRules(projectId, rules);\n                return;\n            }\n        } catch (error: any) {\n            // Log error for debugging\n\n            // If it was a local connection failure, try falling back to Rigstate Cloud\n            if (apiUrl.includes('localhost') || apiUrl.includes('127.0.0.1')) {\n                const cloudUrl = 'https://app.rigstate.com';\n                console.log(chalk.blue(`  ☁️  Local API not found. Attempting Cloud Fallback (${cloudUrl})...`));\n                try {\n                    const cloudResponse = await axios.get(`${cloudUrl}/api/v1/guardian/rules`, {\n                        params: { project_id: projectId },\n                        headers: { Authorization: `Bearer ${apiKey}` },\n                        timeout: 5000\n                    });\n\n                    if (cloudResponse.data.success && cloudResponse.data.data.rules) {\n                        rules = cloudResponse.data.data.rules;\n                        console.log(chalk.green(`  ✅ Successfully loaded rules from Rigstate Cloud!`));\n                        lastFetch = Date.now();\n                        await saveCachedRules(projectId, rules);\n                        return;\n                    }\n                } catch (cloudError: any) {\n                    console.error(chalk.red(`  ❌ Cloud Fallback failed: ${cloudError.message}`));\n                }\n            }\n\n            // Log local error if cloud fallback also fails\n            console.error(chalk.red(`  ⚠️  Failed to fetch rules from API: ${error.message}`));\n            if (error.response) {\n                console.error(chalk.red(`     Status: ${error.response.status} - ${JSON.stringify(error.response.data)}`));\n            }\n\n            // Try cache fallback\n            const cached = await loadCachedRules(projectId);\n            if (cached) {\n                console.log(chalk.yellow('  ℹ️  Using cached rules as fallback'));\n                rules = cached.rules;\n                lastFetch = Date.now();\n                return;\n            }\n        }\n\n        // No rules available\n        rules = [];\n    };\n\n    const checkFileImpl = async (filePath: string): Promise<CheckResult> => {\n        // Ensure rules are loaded\n        await loadRules();\n\n        if (rules.length === 0) {\n            return {\n                file: filePath,\n                violations: [],\n                passed: true\n            };\n        }\n\n        const absolutePath = path.resolve(process.cwd(), filePath);\n        return checkFile(absolutePath, rules, process.cwd());\n    };\n\n    const getRuleCount = (): number => rules.length;\n    const getRules = (): EffectiveRule[] => rules;\n\n    return {\n        loadRules,\n        checkFile: checkFileImpl,\n        getRuleCount,\n        getRules\n    };\n}\n\nasync function loadCachedRules(projectId: string): Promise<CachedRules | null> {\n    try {\n        const cachePath = path.join(process.cwd(), CACHE_FILE);\n        const content = await fs.readFile(cachePath, 'utf-8');\n        const cached: CachedRules = JSON.parse(content);\n\n        if (cached.projectId !== projectId) {\n            return null;\n        }\n\n        return cached;\n    } catch {\n        return null;\n    }\n}\n\nasync function saveCachedRules(projectId: string, rules: EffectiveRule[]): Promise<void> {\n    try {\n        const cacheDir = path.join(process.cwd(), '.rigstate');\n        await fs.mkdir(cacheDir, { recursive: true });\n\n        const cached: CachedRules = {\n            timestamp: new Date().toISOString(),\n            projectId,\n            rules,\n            settings: { lmax: 400, lmax_warning: 350 }\n        };\n\n        await fs.writeFile(\n            path.join(cacheDir, 'rules-cache.json'),\n            JSON.stringify(cached, null, 2)\n        );\n    } catch {\n        // Silently fail cache write\n    }\n}\n","/**\n * Bridge Listener - Connects to Agent Bridge for task polling\n * \n * Uses polling as Supabase Realtime requires direct SDK access\n * which is complex in CLI context. Polling every 5 seconds\n * provides good responsiveness for task-based workflows.\n */\n\nimport axios from 'axios';\nimport { EventEmitter } from 'events';\n\nexport interface BridgeListenerEvents {\n    task: (task: BridgeTask) => void;\n    ping: () => void;\n    error: (error: Error) => void;\n    connected: () => void;\n    disconnected: () => void;\n}\n\nexport interface BridgeTask {\n    id: string;\n    project_id: string;\n    task_id: string | null;\n    status: string;\n    proposal: string | null;\n    summary: string | null;\n    created_at: string;\n}\n\nexport interface BridgeListener extends EventEmitter {\n    connect(): Promise<void>;\n    disconnect(): Promise<void>;\n    on<K extends keyof BridgeListenerEvents>(event: K, listener: BridgeListenerEvents[K]): this;\n    emit<K extends keyof BridgeListenerEvents>(event: K, ...args: Parameters<BridgeListenerEvents[K]>): boolean;\n}\n\nconst POLL_INTERVAL_MS = 5000; // 5 seconds\n\nexport function createBridgeListener(\n    projectId: string,\n    apiUrl: string,\n    apiKey: string\n): BridgeListener {\n    const emitter = new EventEmitter() as BridgeListener;\n    let pollInterval: NodeJS.Timeout | null = null;\n    let isConnected = false;\n    let lastCheckedId: string | null = null;\n\n    const checkBridge = async () => {\n        try {\n            const response = await axios.get(`${apiUrl}/api/v1/agent/bridge`, {\n                params: {\n                    project_id: projectId,\n                    action: 'check'\n                },\n                headers: { Authorization: `Bearer ${apiKey}` },\n                timeout: 10000\n            });\n\n            if (response.data.success && response.data.data?.task) {\n                const task = response.data.data.task;\n\n                // Check if this is a new task\n                if (task.id !== lastCheckedId) {\n                    lastCheckedId = task.id;\n\n                    // Check for ping/heartbeat\n                    if (task.proposal?.startsWith('ping')) {\n                        emitter.emit('ping');\n\n                        // Auto-acknowledge ping\n                        await acknowledgePing(task.id);\n                    } else {\n                        // Emit task for processing\n                        emitter.emit('task', task);\n                    }\n                }\n            }\n        } catch (error: any) {\n            // Don't emit error for network issues during polling\n            // as this is expected when offline\n            if (error.code !== 'ECONNREFUSED' && error.code !== 'ETIMEDOUT') {\n                emitter.emit('error', error);\n            }\n        }\n    };\n\n    const acknowledgePing = async (taskId: string) => {\n        try {\n            await axios.post(`${apiUrl}/api/v1/agent/bridge`, {\n                project_id: projectId,\n                action: 'update',\n                bridge_id: taskId,\n                status: 'COMPLETED',\n                summary: 'Pong! Guardian Daemon is active.'\n            }, {\n                headers: { Authorization: `Bearer ${apiKey}` },\n                timeout: 5000\n            });\n        } catch {\n            // Silently fail ping acknowledgment\n        }\n    };\n\n    emitter.connect = async () => {\n        if (isConnected) return;\n\n        // Initial check\n        await checkBridge();\n\n        // Start polling\n        pollInterval = setInterval(checkBridge, POLL_INTERVAL_MS);\n        isConnected = true;\n        emitter.emit('connected');\n    };\n\n    emitter.disconnect = async () => {\n        if (pollInterval) {\n            clearInterval(pollInterval);\n            pollInterval = null;\n        }\n        isConnected = false;\n        emitter.emit('disconnected');\n    };\n\n    return emitter;\n}\n","import axios from 'axios';\n\n/**\n * Reports skill usage to the Rigstate Cloud.\n */\nexport async function trackSkillUsage(\n    apiUrl: string,\n    apiKey: string,\n    projectId: string,\n    skillId: string\n) {\n    try {\n        await axios.post(`${apiUrl}/api/v1/skills/usage`, {\n            projectId,\n            skillName: skillId,\n            status: 'ACTIVATED'\n        }, {\n            headers: { 'x-api-key': apiKey }\n        });\n    } catch (e) {\n        // Silhouette feedback failure - do not interrupt user\n    }\n}\n","import chalk from 'chalk';\n\nexport enum LogLevel {\n    INFO = 'INFO',\n    WARN = 'WARN',\n    ERROR = 'ERROR',\n    DEBUG = 'DEBUG'\n}\n\nexport class Logger {\n    private static formatMessage(level: LogLevel, message: string, context?: unknown): string {\n        const timestamp = new Date().toISOString();\n        let prefix = '';\n\n        switch (level) {\n            case LogLevel.INFO:\n                prefix = chalk.blue(`[${LogLevel.INFO}]`);\n                break;\n            case LogLevel.WARN:\n                prefix = chalk.yellow(`[${LogLevel.WARN}]`);\n                break;\n            case LogLevel.ERROR:\n                prefix = chalk.red(`[${LogLevel.ERROR}]`);\n                break;\n            case LogLevel.DEBUG:\n                prefix = chalk.gray(`[${LogLevel.DEBUG}]`);\n                break;\n        }\n\n        let output = `${chalk.gray(timestamp)} ${prefix} ${message}`;\n\n        if (context) {\n            if (context instanceof Error) {\n                output += `\\n${chalk.red(context.stack || context.message)}`;\n            } else if (typeof context === 'object') {\n                try {\n                    output += `\\n${chalk.gray(JSON.stringify(context, null, 2))}`;\n                } catch (e) {\n                    output += `\\n${chalk.gray('[Circular or invalid object]')}`;\n                }\n            } else {\n                output += ` ${String(context)}`;\n            }\n        }\n\n        return output;\n    }\n\n    static info(message: string, context?: unknown) {\n        console.log(this.formatMessage(LogLevel.INFO, message, context));\n    }\n\n    static warn(message: string, context?: unknown) {\n        console.warn(this.formatMessage(LogLevel.WARN, message, context));\n    }\n\n    static error(message: string, error?: unknown) {\n        console.error(this.formatMessage(LogLevel.ERROR, message, error));\n    }\n\n    static debug(message: string, context?: unknown) {\n        if (process.env.DEBUG || process.env.RIGSTATE_DEBUG) {\n            console.debug(this.formatMessage(LogLevel.DEBUG, message, context));\n        }\n    }\n}\n// dummy\n","import { EventEmitter } from 'events';\nimport chokidar, { type FSWatcher } from 'chokidar';\nimport path from 'path';\nimport fs from 'fs/promises';\nimport crypto from 'crypto';\nimport axios from 'axios';\nimport { Logger } from '../utils/logger.js';\n\nexport interface HarvesterConfig {\n    projectId: string;\n    apiUrl: string;\n    apiKey: string;\n    watchPath: string; // usually process.cwd()\n}\n\n/**\n * The Knowledge Harvester 🌾\n * \n * Watches the local rule repositories (.cursor/rules/*.mdc) for new patterns\n * or corrections that the user teaches their local AI agent.\n * \n * When a new insight is detected, it is harvested (read), validated,\n * and shipped to the Rigstate Curator Protocol as a signal.\n */\nexport class KnowledgeHarvester extends EventEmitter {\n    private watcher: FSWatcher | null = null;\n    private config: HarvesterConfig;\n    private ruleHashes: Map<string, string> = new Map();\n    private isReady: boolean = false;\n    private processingQueue: Set<string> = new Set();\n    private debounceTimers: Map<string, NodeJS.Timeout> = new Map();\n\n    // Ignore list to prevent feedback loops with system rules\n    private IGNORED_PREFIXES = ['rigstate-identity', 'rigstate-guardian'];\n\n    constructor(config: HarvesterConfig) {\n        super();\n        this.config = config;\n    }\n\n    async start() {\n        // Load initial state to establish baseline (don't harvest initial load)\n        await this.loadHashes();\n\n        const rulesPath = path.join(this.config.watchPath, '.cursor', 'rules');\n        const watchPattern = path.join(rulesPath, '**', '*.mdc');\n\n        Logger.debug(`🌾 Harvester watching: ${watchPattern}`);\n\n        this.watcher = chokidar.watch(watchPattern, {\n            persistent: true,\n            ignoreInitial: true, // Don't harvest what's already there on boot\n            awaitWriteFinish: {\n                stabilityThreshold: 2000,\n                pollInterval: 100\n            }\n        });\n\n        this.watcher\n            .on('add', (filePath: string) => this.handleFileEvent(filePath, 'add'))\n            .on('change', (filePath: string) => this.handleFileEvent(filePath, 'change')); // We treat change same as add (new version of truth)\n\n        this.isReady = true;\n    }\n\n    async stop() {\n        if (this.watcher) {\n            await this.watcher.close();\n            this.watcher = null;\n        }\n        // Save state? Maybe not needed as we re-hash on boot.\n    }\n\n    private async handleFileEvent(filePath: string, event: 'add' | 'change') {\n        const fileName = path.basename(filePath);\n\n        // 1. Filter ignored files\n        if (this.IGNORED_PREFIXES.some(prefix => fileName.startsWith(prefix))) {\n            return;\n        }\n\n        // 2. Debounce (users save frequently)\n        if (this.debounceTimers.has(filePath)) {\n            clearTimeout(this.debounceTimers.get(filePath));\n        }\n\n        this.debounceTimers.set(filePath, setTimeout(async () => {\n            this.processFile(filePath);\n            this.debounceTimers.delete(filePath);\n        }, 5000)); // 5 second quiet period\n    }\n\n    private async processFile(filePath: string) {\n        if (this.processingQueue.has(filePath)) return;\n        this.processingQueue.add(filePath);\n\n        try {\n            const content = await fs.readFile(filePath, 'utf-8');\n            const currentHash = this.computeHash(content);\n\n            // 3. Check against memory (did we just harvest this?)\n            // We also need to check against the server-sync cache (did we just download this?)\n            // For now, simple memory check.\n            if (this.ruleHashes.get(filePath) === currentHash) {\n                Logger.debug(`Skipping ${path.basename(filePath)} (unchanged hash)`);\n                return;\n            }\n\n            // 4. Validate Content\n            if (content.length < 20) {\n                Logger.debug(`Skipping ${path.basename(filePath)} (too short)`);\n                return;\n            }\n\n            // 5. Submit Signal\n            await this.submitSignal(filePath, content);\n\n            // 6. Update Hash\n            this.ruleHashes.set(filePath, currentHash);\n\n        } catch (error: any) {\n            Logger.warn(`Harvester failed to process ${path.basename(filePath)}: ${error.message}`);\n        } finally {\n            this.processingQueue.delete(filePath);\n        }\n    }\n\n    private async submitSignal(filePath: string, content: string) {\n        const title = path.basename(filePath, '.mdc');\n        const relativePath = path.relative(process.cwd(), filePath);\n\n        Logger.info(`🌾 Harvesting new knowledge: ${title}`);\n\n        try {\n            // NOTE: We're using the 'mcp_submit_curator_signal' endpoint logic here\n            // URL: /api/v1/curator/signals (Assumed endpoint based on user request)\n\n            // Extract frontmatter description if possible\n            const descriptionMatch = content.match(/description:\\s*(.*)/);\n            const description = descriptionMatch ? descriptionMatch[1].trim() : \"Auto-harvested from IDE interaction\";\n\n            const payload = {\n                project_id: this.config.projectId,\n                title: title,\n                category: 'ARCHITECTURE', // Default\n                severity: 'MEDIUM',\n                instruction: content,\n                reasoning: `Harvested from local file: ${relativePath}`,\n                source_type: 'IDE_HARVESTER'\n            };\n\n            const response = await axios.post(`${this.config.apiUrl}/api/v1/curator/signals`, payload, {\n                headers: { Authorization: `Bearer ${this.config.apiKey}` }\n            });\n\n            if (response.data.success) {\n                Logger.info(`✅ Signal submitted for review: ${title}`);\n            } else {\n                throw new Error(response.data.error || 'Unknown API error');\n            }\n\n        } catch (error: any) {\n            if (error.response?.status === 404) {\n                // API endpoint might not exist yet during migration\n                Logger.debug('Curator API not reachable (404). Signal stored locally (mock).');\n            } else {\n                Logger.error(`Failed to submit signal: ${error.message}`);\n                // Don't update hash so we try again next edit\n                this.ruleHashes.delete(filePath);\n                throw error; // Re-throw to catch block\n            }\n        }\n    }\n\n    private async loadHashes() {\n        // Initial scan to build baseline so we don't upload everything on start\n        const rulesPath = path.join(this.config.watchPath, '.cursor', 'rules');\n        try {\n            // Ensure dir exists\n            await fs.mkdir(rulesPath, { recursive: true });\n\n            // This is a simplified recursive walk since we know structure is flat usually\n            const files = await fs.readdir(rulesPath);\n            for (const file of files) {\n                if (file.endsWith('.mdc')) {\n                    const fullPath = path.join(rulesPath, file);\n                    const content = await fs.readFile(fullPath, 'utf-8');\n                    this.ruleHashes.set(fullPath, this.computeHash(content));\n                }\n            }\n        } catch (e) {\n            // Directory might not exist yet, that's fine\n        }\n    }\n\n    private computeHash(content: string): string {\n        return crypto.createHash('sha256').update(content).digest('hex');\n    }\n}\n","import path from 'path';\nimport * as fs from 'fs/promises';\nimport { Logger } from '../utils/logger.js';\nimport { EventEmitter } from 'events';\n\nexport class ViolationManager {\n    private violationsMap = new Map<string, any[]>();\n    private totalViolations = 0;\n    private watchPath: string;\n    private emitter: EventEmitter;\n\n    constructor(watchPath: string, emitter: EventEmitter) {\n        this.watchPath = watchPath;\n        this.emitter = emitter;\n    }\n\n    public handleViolations(filePath: string, violations: any[]) {\n        this.totalViolations += violations.length;\n        this.emitter.emit('violation', { file: filePath, violations });\n\n        // Update state map\n        this.violationsMap.set(filePath, violations);\n        this.updateViolationReport();\n\n        for (const v of violations) {\n            const level = v.severity === 'critical' ? 'error' : v.severity === 'warning' ? 'warn' : 'info';\n            Logger[level as 'info'](`[${v.severity.toUpperCase()}] ${filePath}: ${v.message}`);\n        }\n    }\n\n    public clear(filePath: string) {\n        if (this.violationsMap.has(filePath)) {\n            this.violationsMap.delete(filePath);\n            this.updateViolationReport();\n        }\n    }\n\n    public getViolationCount(): number {\n        return this.totalViolations;\n    }\n\n    private async updateViolationReport() {\n        const reportPath = path.join(this.watchPath, '.rigstate', 'ACTIVE_VIOLATIONS.md');\n        const allViolations = Array.from(this.violationsMap.entries());\n        const totalCount = allViolations.reduce((acc, [, v]) => acc + v.length, 0);\n\n        let content = `# 🛡️ Guardian Status: ${totalCount > 0 ? '⚠️ ATTENTION' : '✅ PASS'}\\n\\n`;\n        content += `*Last check: ${new Date().toLocaleString()}*\\n`;\n        content += `*Files with issues: ${allViolations.length}*\\n\\n`;\n\n        if (totalCount === 0) {\n            content += \"All systems within architectural limits. Frank is satisfied. 🤫\\n\";\n        } else {\n            content += \"### 🚨 Active Violations\\n\\n\";\n            for (const [file, fileViolations] of allViolations) {\n                const relPath = path.relative(this.watchPath, file);\n                content += `#### 📄 ${relPath}\\n`;\n                for (const v of fileViolations) {\n                    content += `- **[${v.severity.toUpperCase()}]**: ${v.message}\\n`;\n                }\n                content += '\\n';\n            }\n            content += \"\\n---\\n*Rigstate Daemon is watching. Fix violations to clear this report.*\";\n        }\n\n        try {\n            await fs.writeFile(reportPath, content, 'utf-8');\n        } catch (e) { /* ignore */ }\n    }\n}\n","import path from 'path';\nimport axios from 'axios';\nimport { Logger } from '../utils/logger.js';\n\nexport class StatsReporter {\n    private projectId: string;\n    private apiUrl: string;\n    private apiKey: string;\n    private watchPath: string;\n    private verbose: boolean;\n\n    constructor(config: { projectId: string; apiUrl: string; apiKey: string; watchPath: string; verbose?: boolean }) {\n        this.projectId = config.projectId;\n        this.apiUrl = config.apiUrl;\n        this.apiKey = config.apiKey;\n        this.watchPath = config.watchPath;\n        this.verbose = !!config.verbose;\n    }\n\n    public async report(filePath: string, lineCount: number) {\n        const relativePath = path.relative(this.watchPath, filePath);\n\n        try {\n            await axios.post(`${this.apiUrl}/api/v1/projects/${this.projectId}/stats`, {\n                filePath: relativePath,\n                lineCount,\n                complexityScore: 0 // Placeholder for future cyclomatic complexity\n            }, {\n                headers: { Authorization: `Bearer ${this.apiKey}` }\n            });\n        } catch (e: any) {\n            if (this.verbose) Logger.warn(`Failed to report stats for ${relativePath}: ${e.message}`);\n        }\n    }\n}\n","\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport axios from 'axios';\nimport { parseMarkdownChecklist, updateMarkdownChecklist, ChecklistItem } from '../utils/markdown-parser.js';\nimport { Logger } from '../utils/logger.js';\n\nexport interface PlanWatcherConfig {\n    watchPath: string;\n    projectId: string;\n    apiUrl: string;\n    apiKey: string;\n}\n\ninterface CloudChecklistItem extends ChecklistItem {\n    status?: 'active' | 'archived';\n}\n\nexport class PlanWatcher {\n    private config: PlanWatcherConfig;\n    private lastContentHash: string = '';\n    private activeTaskId: string | null = null;\n    private planPath: string;\n    private archiveDir: string;\n    private isSyncing: boolean = false;\n    private lastSyncedAt: number = 0;\n\n    constructor(config: PlanWatcherConfig) {\n        this.config = config;\n        this.planPath = path.join(this.config.watchPath, 'IMPLEMENTATION_PLAN.md');\n        this.archiveDir = path.join(this.config.watchPath, '.rigstate', 'plans');\n    }\n\n    async checkForChanges(targetPath?: string) {\n        if (this.isSyncing) return;\n\n        const currentPlanPath = targetPath || this.planPath;\n\n        try {\n            const exists = await fs.access(currentPlanPath).then(() => true).catch(() => false);\n            if (!exists) return;\n\n            const content = await fs.readFile(currentPlanPath, 'utf-8');\n            const contentHash = this.hash(content);\n\n            // 1. Detect Task ID (Affinity Lock)\n            const idMatch = content.match(/\\*\\*(?:Task ID|ID):\\*\\*\\s*(.+?)(?:\\s|\\n|$)/i);\n            const detectedId = idMatch ? idMatch[1].trim() : null;\n\n            if (detectedId && detectedId !== this.activeTaskId) {\n                this.activeTaskId = detectedId;\n                Logger.info(`PlanWatcher: Task Affinity Lock -> ${this.activeTaskId}`);\n                await this.syncFromCloud();\n                return;\n            }\n\n            if (!this.activeTaskId) return;\n\n            // 2. Race Condition Guard: Only sync if file changed OR if cloud sync hasn't happened in 5 mins\n            const now = Date.now();\n            if (contentHash !== this.lastContentHash || (now - this.lastSyncedAt > 300000)) {\n                this.lastContentHash = contentHash;\n                await this.syncToArchive(content);\n                await this.syncToCloud(content);\n            }\n        } catch (error: any) {\n            Logger.error(`PlanWatcher Error: ${error.message}`);\n        }\n    }\n\n    private hash(str: string): string {\n        // More robust hash including length and specific strategy\n        return `v2:${str.length}:${this.activeTaskId}:${str.slice(0, 50)}`;\n    }\n\n    /**\n     * SYNC FROM CLOUD (Bi-directional Logic)\n     * Filters out archived items before writing to local file.\n     */\n    async syncFromCloud() {\n        if (!this.activeTaskId || this.isSyncing) return;\n        this.isSyncing = true;\n\n        try {\n            const uuid = await this.resolveUuid(this.activeTaskId);\n            if (!uuid) return;\n\n            const response = await axios.get(`${this.config.apiUrl}/api/v1/roadmap?project_id=${this.config.projectId}`, {\n                headers: { Authorization: `Bearer ${this.config.apiKey}` }\n            });\n\n            const task = response.data.data.roadmap.find((t: any) => t.id === uuid);\n            if (task) {\n                Logger.info(`[PlanWatcher] Syncing ${this.activeTaskId} (Cloud -> Local)`);\n\n                // Filter out archived items for the local file view\n                const activeChecklist = (task.checklist || []).filter((item: CloudChecklistItem) => item.status !== 'archived');\n\n                let content = task.implementation_plan;\n\n                // Sync Logic: If implementation_plan exists, use it but update checklist to match cloud state\n                if (content) {\n                    content = updateMarkdownChecklist(content, activeChecklist);\n                } else if (task.checklist && task.checklist.length > 0) {\n                    // Fallback: Reconstruct basic file if content is missing\n                    content = `# Implementation Plan: ${task.title}\\n**ID:** ${this.activeTaskId}\\n\\n## Checklist\\n`;\n                    activeChecklist.forEach((item: ChecklistItem) => {\n                        content += `- [${item.checked ? 'x' : ' '}] ${item.text}\\n`;\n                    });\n                }\n\n                if (content) {\n                    await fs.writeFile(this.planPath, content);\n                    this.lastContentHash = this.hash(content);\n                    this.lastSyncedAt = Date.now();\n                }\n            }\n        } catch (error: any) {\n            Logger.error(`Failed sync from cloud: ${error.message}`);\n        } finally {\n            this.isSyncing = false;\n        }\n    }\n\n    /**\n     * SYNC TO CLOUD (Intelligent Sletting / Delete-to-Archive)\n     */\n    private async syncToCloud(content: string) {\n        if (!this.activeTaskId || this.isSyncing) return;\n        this.isSyncing = true;\n\n        try {\n            const uuid = await this.resolveUuid(this.activeTaskId);\n            if (!uuid) return;\n\n            // 1. Fetch CURRENT cloud state to perform diff\n            const getResponse = await axios.get(`${this.config.apiUrl}/api/v1/roadmap?project_id=${this.config.projectId}`, {\n                headers: { Authorization: `Bearer ${this.config.apiKey}` }\n            });\n            const cloudTask = getResponse.data.data.roadmap.find((t: any) => t.id === uuid);\n            const cloudChecklist: CloudChecklistItem[] = cloudTask?.checklist || [];\n\n            // 2. Parse LOCAL checklist\n            const localChecklist = parseMarkdownChecklist(content);\n\n            // 3. Intelligent Merging (Sovereign Deletion)\n            const finalChecklist: CloudChecklistItem[] = [];\n\n            // Map existing cloud items for lookup\n            const cloudMap = new Map<string, CloudChecklistItem>(\n                cloudChecklist.map(item => [item.text, item])\n            );\n\n            // Process Local Items (Keep them active)\n            for (const localItem of localChecklist) {\n                finalChecklist.push({\n                    text: localItem.text,\n                    checked: localItem.checked,\n                    status: 'active'\n                });\n                cloudMap.delete(localItem.text);\n            }\n\n            Logger.info(`[PlanWatcher] Syncing ${localChecklist.length} local items to cloud.`);\n\n            // Process Remaining Cloud Items (Mark as archived if missing locally)\n            for (const remainingItem of cloudMap.values()) {\n                if (remainingItem.status !== 'archived') {\n                    Logger.info(`[PlanWatcher] 🏛️  Archiving item (Sovereign Delete): \"${remainingItem.text}\"`);\n                }\n                finalChecklist.push({\n                    ...remainingItem,\n                    status: 'archived' // This is the \"Delete-to-Archive\" logic\n                });\n            }\n\n            // 4. Update Cloud State\n            await axios.post(`${this.config.apiUrl}/api/v1/roadmap/update-checklist`, {\n                step_id: uuid,\n                checklist: finalChecklist,\n                implementation_plan: content,\n                project_id: this.config.projectId\n            }, {\n                headers: { 'Authorization': `Bearer ${this.config.apiKey}` }\n            });\n\n            this.lastSyncedAt = Date.now();\n            Logger.info(`[PlanWatcher] Sovereign Sync -> ${this.activeTaskId} (Local -> Cloud) [Audit items preserved]`);\n\n        } catch (error: any) {\n            Logger.error(`Sync fail: ${error.response?.data?.error || error.message}`);\n        } finally {\n            this.isSyncing = false;\n        }\n    }\n\n    private async syncToArchive(content: string) {\n        if (!this.activeTaskId) return;\n        try {\n            await fs.mkdir(this.archiveDir, { recursive: true });\n            const safeName = this.activeTaskId.replace(/[^a-z0-9]/gi, '-').toLowerCase();\n            const archivePath = path.join(this.archiveDir, `${safeName}.md`);\n            await fs.writeFile(archivePath, content);\n        } catch (error: any) {\n            Logger.error(`Archive fail: ${error.message}`);\n        }\n    }\n\n    private async resolveUuid(taskId: string): Promise<string | null> {\n        if (taskId.length > 30 && taskId.includes('-')) return taskId;\n        try {\n            const lookup = await axios.get(`${this.config.apiUrl}/api/v1/roadmap?project_id=${this.config.projectId}`, {\n                headers: { Authorization: `Bearer ${this.config.apiKey}` },\n                validateStatus: null // Handle 404/etc manually\n            }).catch(() => null);\n\n            if (!lookup) return null;\n\n            const roadmap = Array.isArray(lookup.data?.data?.roadmap) ? lookup.data.data.roadmap : [];\n            const task = roadmap.find((t: any) =>\n                `T-${t.step_number}` === taskId ||\n                t.step_number.toString() === taskId ||\n                t.id === taskId\n            );\n            return task?.id || null;\n        } catch {\n            return null;\n        }\n    }\n}\n","\nimport fs from 'fs/promises';\n\nexport interface ChecklistItem {\n    text: string;\n    checked: boolean;\n}\n\n/**\n * Parses a markdown file and extracts all checkboxes.\n * Matches lines like:\n * - [ ] Task\n * - [x] Completed task\n * * [ ] Alternative bullet\n */\nexport function parseMarkdownChecklist(content: string): ChecklistItem[] {\n    const lines = content.split('\\n');\n    const items: ChecklistItem[] = [];\n\n    // Regex to match markdown checkboxes: - [ ] or - [x] or * [ ] or * [x]\n    const checkboxRegex = /^[*-]\\s+\\[([ xX])\\]\\s+(.+)$/;\n\n    for (const line of lines) {\n        const trimmed = line.trim();\n        const match = trimmed.match(checkboxRegex);\n        if (match) {\n            items.push({\n                checked: match[1].toLowerCase() === 'x',\n                text: match[2].trim()\n            });\n        }\n    }\n\n    return items;\n}\n\n/**\n * Updates a markdown file's checkboxes based on a new checklist.\n * Preserves other content.\n */\nexport function updateMarkdownChecklist(content: string, newChecklist: ChecklistItem[]): string {\n    const lines = content.split('\\n');\n    const updatedLines = [...lines];\n    const checkboxRegex = /^[*-]\\s+\\[([ xX])\\]\\s+(.+)$/;\n\n    let checklistIdx = 0;\n\n    for (let i = 0; i < updatedLines.length; i++) {\n        const line = updatedLines[i];\n        const match = line.match(checkboxRegex);\n\n        if (match && checklistIdx < newChecklist.length) {\n            const newItem = newChecklist[checklistIdx];\n            const prefix = line.substring(0, line.indexOf('['));\n            const suffix = line.substring(line.indexOf(']') + 1);\n\n            // Note: This logic assumes the text matches. If it doesn't, we might need a better matching strategy.\n            // For now, let's assume order is preserved.\n            updatedLines[i] = `${prefix}[${newItem.checked ? 'x' : ' '}]${suffix}`;\n            checklistIdx++;\n        }\n    }\n\n    return updatedLines.join('\\n');\n}\n","import chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { fileURLToPath } from 'url';\n\nasync function execShellCommand(cmd: string) {\n    try {\n        const output = execSync(cmd, { stdio: 'pipe' }).toString();\n        return output;\n    } catch (error: any) {\n        return error.stderr?.toString() || error.stdout?.toString() || error.message;\n    }\n}\n\nexport async function enableDaemon() {\n    console.log(chalk.bold('\\n⚙️  Enabling Rigstate Background Service (macOS)\\n'));\n\n    if (process.platform !== 'darwin') {\n        console.error(chalk.red('❌ Currently only macOS is supported for auto-start.'));\n        console.error(chalk.yellow('PRs welcome for Linux/Windows support!'));\n        return;\n    }\n\n    const homeDir = process.env.HOME || '';\n    if (!homeDir) {\n        console.error(chalk.red('❌ Could not determine HOME directory.'));\n        return;\n    }\n\n    const agentsDir = path.join(homeDir, 'Library/LaunchAgents');\n    const logDir = path.join(homeDir, '.rigstate/logs');\n    const plistPath = path.join(agentsDir, 'com.rigstate.daemon.plist');\n\n    // Ensure directories exist\n    await fs.mkdir(agentsDir, { recursive: true });\n    await fs.mkdir(logDir, { recursive: true });\n\n    const scriptPath = fileURLToPath(import.meta.url);\n    const nodePath = process.execPath;\n\n    const plistContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n    <key>Label</key>\n    <string>com.rigstate.daemon</string>\n    <key>ProgramArguments</key>\n    <array>\n        <string>${nodePath}</string>\n        <string>${scriptPath}</string>\n        <string>daemon</string>\n        <string>--no-bridge</string> \n    </array>\n    <key>WorkingDirectory</key>\n    <string>${process.cwd()}</string>\n    <key>StandardOutPath</key>\n    <string>${path.join(logDir, 'daemon.out.log')}</string>\n    <key>StandardErrorPath</key>\n    <string>${path.join(logDir, 'daemon.err.log')}</string>\n    <key>RunAtLoad</key>\n    <true/>\n    <key>KeepAlive</key>\n    <true/>\n    <key>EnvironmentVariables</key>\n    <dict>\n        <key>PATH</key>\n        <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:${process.env.PATH}</string>\n    </dict>\n</dict>\n</plist>`;\n\n    try {\n        await fs.writeFile(plistPath, plistContent);\n        console.log(chalk.dim(`Created plist at: ${plistPath}`));\n\n        try {\n            await execShellCommand(`launchctl unload ${plistPath}`);\n        } catch (e) { }\n\n        await execShellCommand(`launchctl load ${plistPath}`);\n\n        console.log(chalk.green('✅ Successfully enabled background daemon!'));\n        console.log(chalk.dim(`Logs: ${logDir}`));\n        console.log(chalk.dim('The daemon will now restart automatically if it crashes or on reboot.'));\n\n    } catch (error: any) {\n        console.error(chalk.red('❌ Failed to enable daemon:'), error.message);\n    }\n}\n\nexport async function disableDaemon() {\n    console.log(chalk.bold('\\n⚙️  Disabling Rigstate Background Service\\n'));\n\n    const homeDir = process.env.HOME || '';\n    const plistPath = path.join(homeDir, 'Library/LaunchAgents/com.rigstate.daemon.plist');\n\n    try {\n        await execShellCommand(`launchctl unload ${plistPath}`);\n        await fs.unlink(plistPath);\n        console.log(chalk.green('✅ Successfully disabled background daemon.'));\n    } catch (error: any) {\n        if (error.code === 'ENOENT') {\n            console.log(chalk.green('✅ Daemon was not enabled.'));\n        } else {\n            console.error(chalk.red('❌ Failed to disable daemon:'), error.message);\n        }\n    }\n}\n\nexport async function isDaemonRunning(): Promise<boolean> {\n    if (process.platform !== 'darwin') return false;\n    try {\n        const output = await execShellCommand('launchctl list com.rigstate.daemon');\n        return output.includes('\"PID\" =');\n    } catch {\n        return false;\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport inquirer from 'inquirer';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { simpleGit } from 'simple-git';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { suggestNextMove } from './suggest.js';\nimport { executePlan } from './plan.js';\n\nexport function createWorkCommand(): Command {\n    const work = new Command('work');\n\n    work\n        .description('Manage development flow (Start, Finish, List)')\n        .action(() => {\n            // Default action: List tasks if no subcommand\n            // Since commander logic with subcommands is tricky on default, we usually output help\n            // But let's make it interactive list\n            listInteractive();\n        });\n\n    work.command('start')\n        .description('Start a task (Sets status to IN_PROGRESS)')\n        .argument('<taskId>', 'Task ID (e.g. T-5) or UUID')\n        .action(async (taskId) => {\n            await executePlan(taskId);\n            await setTaskStatus(taskId, 'IN_PROGRESS');\n        });\n\n    work.command('finish')\n        .description('Finish a task (Runs Audit -> Sets COMPLETED -> Suggests Next)')\n        .argument('<taskId>', 'Task ID (e.g. T-5) or UUID')\n        .action(async (taskId) => {\n            await finishTask(taskId);\n        });\n\n    return work;\n}\n\n// === IMPLEMENTATION ===\n\nasync function listInteractive() {\n    const spinner = ora('Fetching roadmap...').start();\n    try {\n        const { projectId, apiKey, apiUrl } = getContext();\n\n        const response = await axios.get(\n            `${apiUrl}/api/v1/roadmap?project_id=${projectId}`,\n            { headers: { 'Authorization': `Bearer ${apiKey}` } }\n        );\n\n        if (!response.data.success) throw new Error('Failed to fetch roadmap');\n        const allTasks: any[] = response.data.data.roadmap || [];\n\n        // Filter actionable\n        const actionableTasks = allTasks\n            .filter(t => ['ACTIVE', 'LOCKED', 'IN_PROGRESS', 'PENDING'].includes(t.status))\n            .sort((a, b) => {\n                const statusOrder: Record<string, number> = { 'IN_PROGRESS': 0, 'ACTIVE': 1, 'LOCKED': 2, 'PENDING': 3 };\n                const sDiff = (statusOrder[a.status] ?? 9) - (statusOrder[b.status] ?? 9);\n                if (sDiff !== 0) return sDiff;\n                return a.step_number - b.step_number;\n            });\n\n        spinner.stop();\n\n        if (actionableTasks.length === 0) {\n            console.log(chalk.yellow('Roadmap clear. No actionable tasks found.'));\n            return;\n        }\n\n        const choices = actionableTasks.map(t => {\n            const id = `T-${t.step_number}`;\n            let icon = '🔒';\n            if (t.status === 'IN_PROGRESS') icon = '🔥';\n            if (t.status === 'ACTIVE') icon = '▶️';\n\n            return {\n                name: `${icon}  ${chalk.bold(id)}: ${t.title} [${t.status}]`,\n                value: t.id\n            };\n        });\n\n        const { taskId } = await inquirer.prompt([{\n            type: 'list',\n            name: 'taskId',\n            message: 'Select a task to manage:',\n            choices\n        }]);\n\n        const { action } = await inquirer.prompt([{\n            type: 'list',\n            name: 'action',\n            message: 'Action:',\n            choices: [\n                { name: 'Plan (Draft Blueprint - RECOMMENDED)', value: 'plan' },\n                { name: 'Start (Set IN_PROGRESS)', value: 'start' },\n                { name: 'Finish (Audit & Complete)', value: 'finish' },\n                { name: 'Cancel', value: 'cancel' }\n            ]\n        }]);\n\n        if (action === 'plan') {\n            await executePlan(taskId);\n            // After planning, maybe ask to start? For now, just exit as plan command does sufficient logging.\n        }\n        if (action === 'start') await setTaskStatus(taskId, 'IN_PROGRESS');\n        if (action === 'finish') await finishTask(taskId);\n\n    } catch (e: any) {\n        spinner.fail(`Error: ${e.message}`);\n    }\n}\n\nasync function setTaskStatus(taskId: string, status: string) {\n    const spinner = ora(`Setting task ${taskId} to ${status}...`).start();\n    try {\n        const { projectId, apiKey, apiUrl } = getContext();\n\n        // Resolve ID if \"T-5\" format (simple heuristic: if short usage, might need lookup, but specialized endpoint handles UUID usually. \n        // For robustness, let's assume user passes UUID from list OR we need lookup. \n        // Rigstate API usually expects UUID for updates. \n        // Let's do a lookup if it looks like T-X\n\n        let realId = taskId;\n        if (taskId.startsWith('T-') || taskId.length < 10) {\n            spinner.text = 'Resolving Task ID...';\n            const lookup = await axios.get(`${apiUrl}/api/v1/roadmap?project_id=${projectId}`, { headers: { Authorization: `Bearer ${apiKey}` } });\n            const task = lookup.data.data.roadmap.find((t: any) => `T-${t.step_number}` === taskId || t.step_number.toString() === taskId);\n            if (!task) throw new Error(`Task ${taskId} not found.`);\n            realId = task.id;\n        }\n\n        // Call Update\n        // Note: The API tool `update_roadmap_status` uses 'status' arg. \n        // We probably have an endpoint `/api/v1/roadmap/update-status` or similar from previous code.\n\n        await axios.post(\n            `${apiUrl}/api/v1/roadmap/update-status`,\n            { step_id: realId, status, project_id: projectId },\n            { headers: { 'Authorization': `Bearer ${apiKey}` } }\n        );\n\n        spinner.succeed(chalk.green(`Task updated to ${status}.`));\n\n        if (status === 'IN_PROGRESS') {\n            console.log(chalk.blue(`\\n💡 Tip: Provide 'Frank' with context by mentioning @.cursorrules in your chat.`));\n        }\n\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Failed: ${e.message}`));\n    }\n}\n\nasync function finishTask(taskId: string) {\n    console.log('');\n    console.log(chalk.bold.yellow('🛡️  FRANK\\'S QUALITY GATE (Phase 2.2)'));\n    console.log(chalk.dim('────────────────────────────────────────'));\n\n    try {\n        const { projectId, apiKey, apiUrl } = getContext();\n\n        // 1. Checklist Validation (Mandatory)\n        const planPath = path.join(process.cwd(), 'IMPLEMENTATION_PLAN.md');\n        const planExists = await fs.access(planPath).then(() => true).catch(() => false);\n\n        if (planExists) {\n            const content = await fs.readFile(planPath, 'utf-8');\n            const uncompleted = content.match(/- \\[ \\] .+/g);\n            if (uncompleted && uncompleted.length > 0) {\n                console.log(chalk.red(`\\n❌ Validation Failed: There are ${uncompleted.length} uncompleted items in IMPLEMENTATION_PLAN.md.`));\n                console.log(chalk.dim('Please complete all items or remove them before finishing.'));\n                const { force } = await inquirer.prompt([{\n                    type: 'confirm',\n                    name: 'force',\n                    message: 'Do you want to force completion anyway? (Not recommended)',\n                    default: false\n                }]);\n                if (!force) return;\n            }\n        }\n\n        // 2. The Scribe's Analysis (Delta of Reality)\n        const scribeSpinner = ora(' Analyzing \"The Delta of Reality\" via Scribe...').start();\n\n        // Resolve Task ID for Git Trailer search\n        let realId = taskId;\n        let stepNumber = '';\n        const lookupList = await axios.get(`${apiUrl}/api/v1/roadmap?project_id=${projectId}`, { headers: { Authorization: `Bearer ${apiKey}` } });\n        const taskObj = lookupList.data.data.roadmap.find((t: any) =>\n            t.id === taskId || `T-${t.step_number}` === taskId || t.step_number.toString() === taskId\n        );\n\n        if (taskObj) {\n            realId = taskObj.id;\n            stepNumber = `T-${taskObj.step_number}`;\n        }\n\n        // Capture Git Diff (Search for Task ID in trailers)\n        const git = simpleGit();\n        let diff = await git.raw(['log', '-p', `--grep=Rigstate-Task: ${stepNumber || taskId}`, '--since=\"24 hours ago\"']);\n\n        if (!diff) {\n            scribeSpinner.warn(chalk.yellow(' No commits found with high-fidelity Rigstate trailers. Fallback to shallow analysis.'));\n        } else {\n            scribeSpinner.stop();\n            // ✂️ Truncation logic: If diff is too large (>25k chars), truncate it to avoid LLM context overflow/hangs\n            if (diff.length > 25000) {\n                console.log(chalk.dim(`   (Diff is large: ${Math.round(diff.length / 1024)}KB. Truncating for analysis...)`));\n                diff = diff.substring(0, 25000) + \"\\n\\n[... Diff truncated for brevity ...]\";\n            }\n        }\n\n        console.log(chalk.cyan(`\\n🧐 Frank's Observation:`));\n        console.log(chalk.dim('   \"I\\'m comparing your INITIAL INTENT with the ACTUAL CODE changes...\"'));\n\n        const { learning } = await inquirer.prompt([{\n            type: 'input',\n            name: 'learning',\n            message: 'Any quick notes on why things changed? (Optional)',\n            default: 'Refined during implementation.'\n        }]);\n\n        // 3. Mark Complete & Save Post-Mortem via API\n        const analyzeSpinner = ora('Requesting Deep Architectural Review (The Scribe)...').start();\n\n        try {\n            const response = await axios.post(\n                `${apiUrl}/api/v1/agent/scribe/analyze`,\n                {\n                    project_id: projectId,\n                    task_id: realId,\n                    plan: planExists ? await fs.readFile(planPath, 'utf-8') : '',\n                    diff: diff || '',\n                    user_notes: learning\n                },\n                {\n                    headers: { 'Authorization': `Bearer ${apiKey}` },\n                    timeout: 120000 // 120s timeout for deep LLM analysis\n                }\n            );\n\n            const { postMortem, analysis } = response.data;\n            analyzeSpinner.succeed(`Analysis Complete: ${analysis.intentFulfillment}% Intent Fulfillment.`);\n\n            // 4. Archive Post-Mortem Locally\n            const pmDir = path.join(process.cwd(), '.rigstate', 'post-mortems');\n            await fs.mkdir(pmDir, { recursive: true });\n            const pmPath = path.join(pmDir, `${stepNumber || taskId}.md`.toLowerCase());\n            await fs.writeFile(pmPath, postMortem);\n\n            // Success Handshake\n            console.log('');\n            console.log(chalk.bold.green('🎉 TASK COMPLETE! Momentum Preserved.'));\n            if (analysis.proactiveAdvice) {\n                console.log(chalk.dim(`   Memory saved to Project Brain: \"${analysis.proactiveAdvice.slice(0, 60)}...\"`));\n            }\n            console.log(chalk.dim(`   Artifact archived to .rigstate/post-mortems/`));\n\n            await suggestNextMove(projectId, apiKey, apiUrl);\n\n        } catch (e: any) {\n            analyzeSpinner.fail(chalk.red(`Analysis failed: ${e.message}`));\n            if (e.code === 'ECONNABORTED') {\n                console.log(chalk.dim('   Reason: The Scribe took too long to respond. The diff might still be too complex.'));\n            }\n        }\n    } catch (outerError: any) {\n        console.log(chalk.red(`\\n❌ Quality Gate Error: ${outerError.message}`));\n    }\n}\n\nfunction getContext() {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n\n    if (!projectId) {\n        throw new Error('Project ID missing. Run rigstate link.');\n    }\n\n    // Single source of truth for Auth logging\n    console.log(chalk.dim(`   [Auth] Context: Project ID ${projectId.substring(0, 8)}...`));\n    console.log(chalk.dim(`   [Auth] Endpoint: ${apiUrl}`));\n\n    return { projectId, apiKey, apiUrl };\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport inquirer from 'inquirer';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\n\nexport function createPlanCommand(): Command {\n    const plan = new Command('plan');\n\n    plan\n        .description('Generate an implementation plan for a roadmap task')\n        .argument('[taskId]', 'Task ID (e.g. T-10) or UUID')\n        .action(async (taskId) => {\n            await executePlan(taskId);\n        });\n\n    return plan;\n}\n\nexport async function executePlan(taskId?: string) {\n    const spinner = ora('Initializing Planning Mode...').start();\n\n    try {\n        const { projectId, apiKey, apiUrl } = getContext();\n\n        // 1. Resolve Task ID if missing or short\n        let realId = taskId;\n        let taskTitle = '';\n        let taskDescription = '';\n\n        if (!taskId) {\n            spinner.text = 'Fetching actionable tasks...';\n            // Interactive selection\n            const response = await axios.get(\n                `${apiUrl}/api/v1/roadmap?project_id=${projectId}`,\n                { headers: { 'Authorization': `Bearer ${apiKey}` } }\n            );\n\n            if (!response.data.success) throw new Error('Failed to fetch roadmap');\n            const tasks: any[] = response.data.data.roadmap || [];\n\n            const choices = tasks\n                .filter(t => ['ACTIVE', 'IN_PROGRESS', 'PENDING', 'LOCKED'].includes(t.status))\n                .map(t => ({\n                    name: `${t.status === 'LOCKED' ? '🔒 ' : ''}T-${t.step_number}: ${t.title}${t.origin_id === 'GENESIS' ? chalk.dim(' [Foundation]') : ''}`,\n                    value: t\n                }));\n\n            if (choices.length === 0) {\n                spinner.fail('No actionable tasks found in roadmap.');\n                return;\n            }\n\n            spinner.stop();\n            const answer = await inquirer.prompt([{\n                type: 'list',\n                name: 'task',\n                message: 'Select a task to plan:',\n                choices\n            }]);\n\n            realId = answer.task.id;\n            taskTitle = answer.task.title;\n            taskDescription = answer.task.description;\n            taskId = `T-${answer.task.step_number}`;\n        } else {\n            // Fetch specific task details\n            spinner.text = `Fetching details for ${taskId}...`;\n            const response = await axios.get(\n                `${apiUrl}/api/v1/roadmap?project_id=${projectId}`,\n                { headers: { 'Authorization': `Bearer ${apiKey}` } }\n            );\n            const task = response.data.data.roadmap.find((t: any) =>\n                t.id === taskId ||\n                `T-${t.step_number}` === taskId ||\n                t.step_number.toString() === taskId\n            );\n\n            if (!task) throw new Error(`Task ${taskId} not found.`);\n            realId = task.id;\n            taskTitle = task.title;\n            taskDescription = task.description;\n        }\n\n        // 2. Proactive Memory Injection (The Wisdom of Frank)\n        spinner.start('Consulting the Project Brain for relevant advice...');\n        try {\n            const memoryResponse = await axios.get(\n                `${apiUrl}/api/v1/brain/search?project_id=${projectId}&query=${encodeURIComponent(taskTitle)}`,\n                { headers: { 'Authorization': `Bearer ${apiKey}` } }\n            );\n\n            const memories = memoryResponse.data.memories || [];\n            if (memories.length > 0) {\n                spinner.info(chalk.yellow(`💡 wisdom of Frank: Found ${memories.length} relevant lessons from past tasks.`));\n                memories.forEach((m: any) => {\n                    console.log(chalk.dim('   • ') + chalk.italic(m.content));\n                });\n                console.log('');\n            } else {\n                spinner.stop();\n            }\n        } catch (e) {\n            spinner.stop();\n        }\n\n        // 3. Generate Context File\n        spinner.start('Generating Context for Frank...');\n        const contextPath = path.join(process.cwd(), '.rigstate', 'CURRENT_CONTEXT.md');\n        const contextContent = `\n# 🎯 Active Mission: ${taskTitle}\n**ID:** ${taskId}\n\n## 📝 Description\n${taskDescription}\n\n## 🛡️ Architectural Constraints\n- Follow strictly the rules in .cursor/rules/\n- Ensure zero violations in ACTIVE_VIOLATIONS.md\n- Update IMPLEMENTATION_PLAN.md before writing code.\n\n*Generated by Rigstate CLI at ${new Date().toLocaleString()}*\n`;\n        await fs.mkdir(path.dirname(contextPath), { recursive: true });\n        await fs.writeFile(contextPath, contextContent.trim());\n\n        // 3. Handle Plan Mirroring (Hybrid Model)\n        const planPath = path.join(process.cwd(), 'IMPLEMENTATION_PLAN.md');\n        const archiveDir = path.join(process.cwd(), '.rigstate', 'plans');\n        await fs.mkdir(archiveDir, { recursive: true });\n\n        // Resolve safe archive path\n        const safeId = taskId!.replace(/[^a-z0-9]/gi, '-').toLowerCase();\n        const archivePath = path.join(archiveDir, `${safeId}.md`);\n\n        // Fetch existing task to see if it has a plan/checklist\n        const taskResponse = await axios.get(\n            `${apiUrl}/api/v1/roadmap?project_id=${projectId}`,\n            { headers: { 'Authorization': `Bearer ${apiKey}` } }\n        );\n        const fullTask = taskResponse.data.data.roadmap.find((t: any) => t.id === realId);\n\n        let planContent = '';\n\n        // Prioritization for plan content:\n        // 1. Local Archive (most up-to-date if Git-synced)\n        // 2. Cloud Full Plan Text\n        // 3. Cloud Checklist (generated fallback)\n        // 4. Default Template\n\n        const archiveExists = await fs.access(archivePath).then(() => true).catch(() => false);\n\n        if (archiveExists) {\n            spinner.info(chalk.dim('Restoring plan from local archive...'));\n            planContent = await fs.readFile(archivePath, 'utf-8');\n        } else if (fullTask?.implementation_plan) {\n            spinner.info(chalk.dim('Fetching full plan from cloud...'));\n            planContent = fullTask.implementation_plan;\n        } else if (fullTask?.checklist && fullTask.checklist.length > 0) {\n            spinner.info(chalk.dim('Generating plan from cloud checklist...'));\n            const checklistMd = fullTask.checklist.map((item: any) => `- [${item.checked ? 'x' : ' '}] ${item.text}`).join('\\n');\n            planContent = `\n# 📋 Implementation Plan: ${taskTitle}\n**Task ID:** ${taskId}\n\n${checklistMd}\n`.trim();\n        } else {\n            spinner.info(chalk.dim('Initializing new plan template...'));\n            planContent = `\n# 📋 Implementation Plan: ${taskTitle}\n**Task ID:** ${taskId}\n\n## 1. 🔍 Analysis\n- [ ] Understand the requirements in .rigstate/CURRENT_CONTEXT.md\n- [ ] Check for existing architectural patterns\n\n## 2. 🏗️ Proposed Changes\n[Frank: List the files you intend to modify and the nature of the changes]\n\n## 3. ✅ Verification\n- [ ] Run tests\n\n## 4. 🚀 Execution\n[Frank: Log your progress here]`.trim();\n        }\n\n        // Write to Archive AND Mirror to root\n        await fs.writeFile(archivePath, planContent);\n        await fs.writeFile(planPath, planContent);\n\n        spinner.succeed(chalk.green(`Workspace switched to ${taskId}`));\n\n        // 4. Update Status (Optional - maybe set to IN_PROGRESS?)\n        // For now, let's keep it pure planning.\n\n        // 4. Trigger Bridge Task (Autonomous Bridge)\n        try {\n            spinner.start('📡 Signaling Frank to start drafting...');\n            await axios.post(`${apiUrl}/api/v1/agent/bridge`, {\n                project_id: projectId,\n                task_id: realId,\n                status: 'APPROVED',\n                proposal: `draft_plan:${taskId}`,\n                summary: `Requesting implementation plan for ${taskTitle}`\n            }, {\n                headers: { 'Authorization': `Bearer ${apiKey}` }\n            });\n            spinner.succeed('Signal sent to Agent Bridge.');\n        } catch (e) {\n            spinner.info(chalk.dim('Agent Bridge signal skipped (non-critical).'));\n        }\n\n        console.log('');\n        console.log(chalk.bold.blue('🚀 Planning Mode Activated'));\n        console.log(chalk.dim('────────────────────────────────────────'));\n        console.log(`1. Context loaded into: ${chalk.bold('.rigstate/CURRENT_CONTEXT.md')}`);\n        console.log(`2. Plan template ready: ${chalk.bold('IMPLEMENTATION_PLAN.md')}`);\n        console.log('');\n        console.log(chalk.green('✨ FRANK IS ON IT!'));\n        console.log(chalk.dim('   He has received the bridge signal and will begin drafting shortly.'));\n        console.log(chalk.dim('   No further manual steps required once he wakes up.'));\n        console.log('');\n\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Planning failed: ${e.message}`));\n    }\n}\n\nfunction getContext() {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n\n    if (!projectId) {\n        throw new Error('Project ID missing. Run rigstate link.');\n    }\n    return { projectId, apiKey, apiUrl };\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport chokidar from 'chokidar';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { getApiKey, getProjectId, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\n\ninterface VerificationCriteria {\n    type: 'file_exists' | 'file_content' | 'content_match';\n    path: string;\n    pattern?: string;\n    match?: string;\n}\n\nexport function createWatchCommand() {\n    const watch = new Command('watch');\n\n    watch\n        .description('Watch for changes and auto-verify roadmap tasks')\n        .option('--no-auto-commit', 'Disable auto-commit on verification')\n        .option('--no-auto-push', 'Disable auto-push after commit')\n        .option('--run-tests', 'Run tests before committing')\n        .option('--test-command <cmd>', 'Custom test command (default: npm test)')\n        .action(async (options) => {\n            console.log(chalk.bold.blue('🔭 Rigstate Watch Mode'));\n            console.log(chalk.dim('Monitoring for task completion...'));\n            console.log('');\n\n            // Get config\n            let apiKey: string;\n            let projectId: string | undefined;\n\n            try {\n                apiKey = getApiKey();\n            } catch (e) {\n                console.log(chalk.red('Not authenticated. Run \"rigstate login\" first.'));\n                return;\n            }\n\n            projectId = getProjectId();\n            if (!projectId) {\n                const { loadManifest } = await import('../utils/manifest.js');\n                const manifest = await loadManifest();\n                if (manifest?.project_id) projectId = manifest.project_id;\n            }\n\n            if (!projectId) {\n                console.log(chalk.red('No project context. Run \"rigstate link\" or \"rigstate sync --project <id>\" first.'));\n                return;\n            }\n\n            const apiUrl = getApiUrl();\n\n            // Settings\n            const config = {\n                autoCommit: options.autoCommit !== false,\n                autoPush: options.autoPush !== false,\n                runTests: options.runTests || false,\n                testCommand: options.testCommand || 'npm test'\n            };\n\n            console.log(chalk.dim(`Auto-commit: ${config.autoCommit ? 'ON' : 'OFF'}`));\n            console.log(chalk.dim(`Auto-push: ${config.autoPush ? 'ON' : 'OFF'}`));\n            console.log('');\n\n            // Fetch active task\n            const fetchActiveTask = async () => {\n                try {\n                    const response = await axios.get(`${apiUrl}/api/v1/roadmap`, {\n                        params: { project_id: projectId },\n                        headers: { Authorization: `Bearer ${apiKey}` }\n                    });\n\n                    if (!response.data.success) return null;\n\n                    const roadmap = response.data.data.roadmap || [];\n\n                    // Priority: IN_PROGRESS > ACTIVE > LOCKED\n                    const statusPriority: Record<string, number> = {\n                        'IN_PROGRESS': 0,\n                        'ACTIVE': 1,\n                        'LOCKED': 2\n                    };\n\n                    const activeTasks = roadmap\n                        .filter((t: any) => ['IN_PROGRESS', 'ACTIVE', 'LOCKED'].includes(t.status))\n                        .sort((a: any, b: any) => {\n                            const pA = statusPriority[a.status] ?? 99;\n                            const pB = statusPriority[b.status] ?? 99;\n                            if (pA !== pB) return pA - pB;\n                            return (a.step_number || 0) - (b.step_number || 0);\n                        });\n\n                    return activeTasks[0] || null;\n                } catch (e) {\n                    return null;\n                }\n            };\n\n            // Check verification criteria\n            const checkCriteria = async (criteria: VerificationCriteria): Promise<boolean> => {\n                try {\n                    const fullPath = path.resolve(process.cwd(), criteria.path);\n\n                    switch (criteria.type) {\n                        case 'file_exists':\n                            await fs.access(fullPath);\n                            return true;\n\n                        case 'file_content':\n                            const content = await fs.readFile(fullPath, 'utf-8');\n                            return content.length > 0;\n\n                        case 'content_match':\n                            if (!criteria.match) return false;\n                            const fileContent = await fs.readFile(fullPath, 'utf-8');\n                            return fileContent.includes(criteria.match);\n\n                        default:\n                            return false;\n                    }\n                } catch (e) {\n                    return false;\n                }\n            };\n\n            // Complete task\n            const completeTask = async (taskId: string, task: any) => {\n                const spinner = ora('Completing task...').start();\n\n                try {\n                    // Run tests if enabled\n                    if (config.runTests) {\n                        spinner.text = 'Running tests...';\n                        try {\n                            execSync(config.testCommand, { stdio: 'pipe' });\n                            spinner.text = 'Tests passed!';\n                        } catch (e) {\n                            spinner.fail('Tests failed. Task not completed.');\n                            return;\n                        }\n                    }\n\n                    // Update status via API\n                    await axios.post(`${apiUrl}/api/v1/roadmap/update-status`, {\n                        project_id: projectId,\n                        chunk_id: taskId,\n                        status: 'COMPLETED'\n                    }, {\n                        headers: { Authorization: `Bearer ${apiKey}` }\n                    });\n\n                    spinner.succeed(chalk.green(`✅ Task #${task.step_number} completed: ${task.title}`));\n\n                    // Auto-commit\n                    if (config.autoCommit) {\n                        spinner.start('Committing changes...');\n                        try {\n                            execSync('git add -A', { stdio: 'pipe' });\n                            const commitMsg = `feat: Complete task #${task.step_number} - ${task.title}`;\n                            execSync(`git commit -m \"${commitMsg}\"`, { stdio: 'pipe' });\n                            spinner.succeed('Changes committed');\n\n                            // Auto-push\n                            if (config.autoPush) {\n                                spinner.start('Pushing to remote...');\n                                try {\n                                    execSync('git push', { stdio: 'pipe' });\n                                    spinner.succeed('Pushed to remote');\n                                } catch (e) {\n                                    spinner.warn('Push failed (no remote or conflict)');\n                                }\n                            }\n                        } catch (e: any) {\n                            spinner.warn('Nothing to commit or commit failed');\n                        }\n                    }\n\n                    console.log('');\n                    console.log(chalk.blue('Watching for next task...'));\n\n                } catch (e: any) {\n                    spinner.fail(`Failed to complete task: ${e.message}`);\n                }\n            };\n\n            // Main watch loop\n            let currentTask: any = null;\n            let isProcessing = false;\n\n            const processActiveTask = async () => {\n                if (isProcessing) return;\n                isProcessing = true;\n\n                const task = await fetchActiveTask();\n\n                if (!task) {\n                    if (currentTask) {\n                        console.log(chalk.green('🎉 All tasks completed! Watching for new tasks...'));\n                        currentTask = null;\n                    }\n                    isProcessing = false;\n                    return;\n                }\n\n                if (!currentTask || currentTask.id !== task.id) {\n                    currentTask = task;\n                    console.log('');\n                    console.log(chalk.bold.yellow(`📌 Active Task #${task.step_number}: ${task.title}`));\n                    console.log(chalk.dim(`Status: ${task.status}`));\n\n                    if (task.verification_criteria) {\n                        console.log(chalk.dim('Verification: Auto-checking criteria...'));\n                    }\n                }\n\n                // Check verification criteria if present\n                if (task.verification_criteria && Array.isArray(task.verification_criteria)) {\n                    let allPassed = true;\n                    for (const criteria of task.verification_criteria) {\n                        const passed = await checkCriteria(criteria);\n                        if (!passed) {\n                            allPassed = false;\n                            break;\n                        }\n                    }\n\n                    if (allPassed) {\n                        console.log(chalk.green('✓ All verification criteria passed!'));\n                        await completeTask(task.id, task);\n                        currentTask = null;\n                    }\n                }\n\n                isProcessing = false;\n            };\n\n            // Initial check\n            await processActiveTask();\n\n            // Set up file watcher\n            const watcher = chokidar.watch('.', {\n                ignored: [\n                    /(^|[\\/\\\\])\\../,  // dotfiles\n                    '**/node_modules/**',\n                    '**/.git/**',\n                    '**/.next/**',\n                    '**/dist/**'\n                ],\n                persistent: true,\n                ignoreInitial: true\n            });\n\n            watcher.on('all', async (event, filePath) => {\n                if (['add', 'change', 'unlink'].includes(event)) {\n                    // Debounce - wait a bit for multiple rapid changes\n                    setTimeout(() => processActiveTask(), 500);\n                }\n            });\n\n            console.log(chalk.dim('Watching for file changes... (Ctrl+C to exit)'));\n\n            // Periodic check every 30 seconds\n            setInterval(() => processActiveTask(), 30000);\n\n            // Keep process alive\n            process.on('SIGINT', () => {\n                console.log('');\n                console.log(chalk.dim('Watch mode stopped.'));\n                watcher.close();\n                process.exit(0);\n            });\n        });\n\n    return watch;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getProjectId, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\nimport { execSync } from 'child_process';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nexport function createFocusCommand() {\n    const focus = new Command('focus');\n\n    focus\n        .alias('task')\n        .description('Get the next active roadmap task and copy its prompt to clipboard')\n        .option('--no-copy', 'Do not copy to clipboard')\n        .action(async (options) => {\n            const spinner = ora('Fetching next objective...').start();\n\n            // Get config\n            let apiKey: string;\n            let projectId: string | undefined;\n\n            try {\n                apiKey = getApiKey();\n            } catch (e) {\n                spinner.fail(chalk.red('Not authenticated. Run \"rigstate login\" first.'));\n                return;\n            }\n\n            projectId = getProjectId();\n            if (!projectId) {\n                const { loadManifest } = await import('../utils/manifest.js');\n                const manifest = await loadManifest();\n                if (manifest?.project_id) projectId = manifest.project_id;\n            }\n\n            if (!projectId) {\n                spinner.fail(chalk.red('No project context. Run \"rigstate link\" first.'));\n                return;\n            }\n\n            const apiUrl = getApiUrl();\n\n            try {\n                // Fetch roadmap\n                const response = await axios.get(`${apiUrl}/api/v1/roadmap`, {\n                    params: { project_id: projectId },\n                    headers: { Authorization: `Bearer ${apiKey}` }\n                });\n\n                if (!response.data.success) {\n                    throw new Error(response.data.error || 'Failed to fetch roadmap');\n                }\n\n                const roadmap = response.data.data.roadmap || [];\n\n                // Priority: IN_PROGRESS > ACTIVE > LOCKED\n                const statusPriority: Record<string, number> = {\n                    'IN_PROGRESS': 0,\n                    'ACTIVE': 1,\n                    'LOCKED': 2\n                };\n\n                const activeTasks = roadmap\n                    .filter((t: any) => ['IN_PROGRESS', 'ACTIVE', 'LOCKED'].includes(t.status))\n                    .sort((a: any, b: any) => {\n                        const pA = statusPriority[a.status] ?? 99;\n                        const pB = statusPriority[b.status] ?? 99;\n                        if (pA !== pB) return pA - pB;\n                        return (a.step_number || 0) - (b.step_number || 0);\n                    });\n\n                if (activeTasks.length === 0) {\n                    spinner.succeed('All caught up! No active tasks found.');\n                    return;\n                }\n\n                const nextTask = activeTasks[0];\n                spinner.stop();\n\n                // Display\n                console.log('');\n                console.log(chalk.bold.blue(`📌 Task #${nextTask.step_number || '?'}: ${nextTask.title}`));\n\n                const statusColor = nextTask.status === 'IN_PROGRESS' ? chalk.yellow :\n                    nextTask.status === 'ACTIVE' ? chalk.green : chalk.dim;\n\n                console.log(chalk.dim('Status: ') + statusColor(nextTask.status));\n                console.log(chalk.dim('─'.repeat(60)));\n\n                if (nextTask.prompt_content) {\n                    console.log(chalk.white(nextTask.prompt_content));\n                    console.log(chalk.dim('─'.repeat(60)));\n\n                    // Auto-copy for Mac\n                    if (options.copy !== false) {\n                        try {\n                            if (process.platform === 'darwin') {\n                                execSync('pbcopy', { input: nextTask.prompt_content });\n                                console.log(chalk.green('✅ Prompt copied to clipboard! Ready to paste (Cmd+V).'));\n                            } else if (process.platform === 'linux') {\n                                try {\n                                    execSync('xclip -selection clipboard', { input: nextTask.prompt_content });\n                                    console.log(chalk.green('✅ Prompt copied to clipboard!'));\n                                } catch (e) {\n                                    console.log(chalk.yellow('ℹ️  Copy prompt manually (xclip not available)'));\n                                }\n                            } else {\n                                console.log(chalk.yellow('ℹ️  Copy prompt manually (Auto-copy not supported on this OS)'));\n                            }\n                        } catch (e) {\n                            // ignore copy error\n                        }\n                    }\n                } else {\n                    console.log(chalk.yellow('No prompt instructions available.'));\n                    if (nextTask.architectural_brief) {\n                        console.log(chalk.bold('Brief:'));\n                        console.log(nextTask.architectural_brief);\n                    }\n                }\n                console.log('');\n\n            } catch (e: any) {\n                spinner.fail(chalk.red(`Failed to fetch task: ${e.message}`));\n            }\n        });\n\n    return focus;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { getApiKey, setApiKey, getProjectId, setProjectId, getApiUrl, setApiUrl } from '../utils/config.js';\n\nexport function createConfigCommand() {\n    const config = new Command('config');\n\n    config\n        .description('View or modify Rigstate configuration')\n        .argument('[key]', 'Configuration key to view/set (api_key, project_id, api_url)')\n        .argument('[value]', 'Value to set')\n        .action(async (key?: string, value?: string) => {\n            // No arguments - show all config\n            if (!key) {\n                console.log(chalk.bold('Rigstate Configuration'));\n                console.log(chalk.dim('─'.repeat(40)));\n\n                try {\n                    const apiKey = getApiKey();\n                    console.log(`${chalk.cyan('api_key')}: ${apiKey.substring(0, 20)}...`);\n                } catch (e) {\n                    console.log(`${chalk.cyan('api_key')}: ${chalk.dim('(not set)')}`);\n                }\n\n                const projectId = getProjectId();\n                console.log(`${chalk.cyan('project_id')}: ${projectId || chalk.dim('(not set)')}`);\n\n                const apiUrl = getApiUrl();\n                console.log(`${chalk.cyan('api_url')}: ${apiUrl}`);\n\n                console.log('');\n                console.log(chalk.dim('Use \"rigstate config <key> <value>\" to set a value.'));\n                return;\n            }\n\n            // Get specific key\n            if (!value) {\n                switch (key) {\n                    case 'api_key':\n                        try {\n                            const apiKey = getApiKey();\n                            console.log(apiKey);\n                        } catch (e) {\n                            console.log(chalk.dim('(not set)'));\n                        }\n                        break;\n                    case 'project_id':\n                        console.log(getProjectId() || chalk.dim('(not set)'));\n                        break;\n                    case 'api_url':\n                        console.log(getApiUrl());\n                        break;\n                    default:\n                        console.log(chalk.red(`Unknown config key: ${key}`));\n                        console.log(chalk.dim('Valid keys: api_key, project_id, api_url'));\n                }\n                return;\n            }\n\n            // Set value\n            switch (key) {\n                case 'api_key':\n                    setApiKey(value);\n                    console.log(chalk.green(`✅ api_key updated`));\n                    break;\n                case 'project_id':\n                    setProjectId(value);\n                    console.log(chalk.green(`✅ project_id updated`));\n                    break;\n                case 'api_url':\n                    setApiUrl(value);\n                    console.log(chalk.green(`✅ api_url updated`));\n                    break;\n                default:\n                    console.log(chalk.red(`Unknown config key: ${key}`));\n                    console.log(chalk.dim('Valid keys: api_key, project_id, api_url'));\n            }\n        });\n\n    return config;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport path from 'path';\nimport fs from 'fs';\nimport { fileURLToPath } from 'url';\nimport { getApiKey, getApiUrl } from '../utils/config.js';\n\n// ESM compatibility for __dirname\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport function createMcpCommand() {\n    const mcp = new Command('mcp');\n\n    mcp\n        .description('Run the Rigstate MCP server for AI editors')\n        .action(async () => {\n            // Determine the path to the MCP server\n            const possiblePaths = [\n                // From packages/cli -> packages/mcp (sibling package)\n                path.resolve(__dirname, '../../mcp/dist/index.js'),\n                // If installed globally or via npm\n                path.resolve(__dirname, '../../../mcp/dist/index.js'),\n                // Development path from packages/cli/dist\n                path.resolve(__dirname, '../../../packages/mcp/dist/index.js'),\n            ];\n\n            let serverPath = '';\n            for (const p of possiblePaths) {\n                if (fs.existsSync(p)) {\n                    serverPath = p;\n                    break;\n                }\n            }\n\n            if (!serverPath) {\n                console.error(chalk.red('❌ Error: Rigstate MCP Server binary not found.'));\n                console.error(chalk.yellow('Please ensure that the mcp package is built:'));\n                console.error(chalk.white('   cd packages/mcp && npm run build'));\n                console.error('');\n                console.error(chalk.dim('Or run directly with:'));\n                console.error(chalk.white('   npx @rigstate/mcp'));\n                process.exit(1);\n            }\n\n            console.log(chalk.dim(`Starting MCP server from: ${serverPath}`));\n\n            // SMART INJECTION: Inject global config into MCP environment\n            const env = { ...process.env };\n\n            try {\n                const apiKey = getApiKey();\n                if (apiKey) {\n                    env.RIGSTATE_API_KEY = apiKey;\n                    // Also inject the URL for consistency\n                    env.RIGSTATE_APP_URL = getApiUrl();\n                    env.RIGSTATE_API_URL = getApiUrl();\n                }\n            } catch (e) {\n                // If not logged in, we carry on and let the MCP server show the final error\n            }\n\n            // Map VIBE_API_KEY if needed\n            if (env.VIBE_API_KEY && !env.RIGSTATE_API_KEY) {\n                env.RIGSTATE_API_KEY = env.VIBE_API_KEY;\n            }\n\n            // Spawn the MCP server as a child process\n            const worker = spawn('node', [serverPath], {\n                env,\n                stdio: ['inherit', 'inherit', 'inherit']\n            });\n\n            worker.on('error', (err) => {\n                console.error(chalk.red(`❌ Failed to start MCP server: ${err.message}`));\n                process.exit(1);\n            });\n\n            worker.on('exit', (code) => {\n                if (code !== 0 && code !== null) {\n                    process.exit(code);\n                }\n            });\n        });\n\n    return mcp;\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { NexusDispatcher } from '../nexus/dispatcher.js';\nimport { NexusContext } from '@rigstate/shared';\nimport inquirer from 'inquirer';\n\nexport function createNexusCommand() {\n    const command = new Command('nexus');\n\n    command\n        .description('Interact with The Multi-Agent Nexus (Phase 8)')\n        .argument('<intent>', 'The natural language instruction for the swarm')\n        .option('--dry-run', 'Enable Dry-Run mode (Kill-Switch Active)', true)\n        .option('--force', 'Disable Dry-Run mode (DANGEROUS)', false)\n        .action(async (intent: string, options) => {\n            console.log(chalk.bold.magenta('\\n🦁 Welcome to The Nexus (Phase 8)\\n'));\n\n            const dryRun = !options.force;\n\n            if (!dryRun) {\n                console.log(chalk.black.bgYellow(' WARNING ') + chalk.yellow(' Dry-Run disabled! Eitri is authorized to write code.'));\n                const { confirm } = await inquirer.prompt([{\n                    type: 'confirm',\n                    name: 'confirm',\n                    message: 'Are you absolutely sure you want to bypass the Kill-Switch?',\n                    default: false\n                }]);\n                if (!confirm) {\n                    console.log('Aborting.');\n                    process.exit(0);\n                }\n            }\n\n            // Context setup\n            const context: NexusContext = {\n                projectId: process.env.RIGSTATE_PROJECT_ID || 'local',\n                rootPath: process.cwd(),\n                sessionUser: 'cli-user', // Should strictly be pulled from auth\n                dryRun\n            };\n\n            const dispatcher = new NexusDispatcher(context);\n\n            // Setup Listeners for Visualization\n            dispatcher.on('order:created', (o) => {\n                console.log(chalk.blue(`🆕 [${o.id.slice(0, 6)}] Order Created: `) + o.intent);\n            });\n\n            dispatcher.on('order:started', (o) => {\n                console.log(chalk.yellow(`⏳ [${o.id.slice(0, 6)}] Processing...`));\n            });\n\n            dispatcher.on('order:blocked', (o) => {\n                console.log(chalk.red(`🛑 [${o.id.slice(0, 6)}] BLOCKED by Kill-Switch`));\n                console.log(chalk.dim(`   Target: ${o.targetAgent} | Action: ${o.action}`));\n                console.log(chalk.dim('   Run with --force to execute automatically (NOT RECOMMENDED).'));\n            });\n\n            dispatcher.on('agent:SINDRE', (o) => console.log(chalk.cyan(`🤖 Sindre (Vault): I'm on it! (${o.action})`)));\n            dispatcher.on('agent:EITRI', (o) => console.log(chalk.green(`👷 Eitri (Smith): Ready to build! (${o.action})`)));\n\n            // Simulation: Frank Analysis Logic\n            // In a real scenario, this would call LLM/MCP to get the decomposition.\n            // Here we hardcode a mocked response to demonstrate the CLI flow.\n\n            console.log(chalk.dim('🧠 Frank is analyzing your intent...'));\n            await new Promise(r => setTimeout(r, 800)); // Simulate thinking\n\n            // MOCK: Dispatch logic\n            if (intent.toLowerCase().includes('db') || intent.toLowerCase().includes('database')) {\n                await dispatcher.dispatch('FRANK', 'SINDRE', intent, 'db.analyze', { raw: intent });\n            } else if (intent.toLowerCase().includes('create') || intent.toLowerCase().includes('code')) {\n                await dispatcher.dispatch('FRANK', 'EITRI', intent, 'fs.write', { path: 'src/demo.ts', content: '// demo' });\n            } else {\n                console.log(chalk.gray(\"Frank didn't understand. Try 'create file' or 'check database'.\"));\n            }\n        });\n\n    return command;\n}\n","\nimport EventEmitter from 'events';\nimport { ServiceOrder, SwarmAgent, NexusContext } from '@rigstate/shared';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { HiveGateway } from '../hive/gateway';\nimport { Logger } from '../utils/logger';\n\n/**\n * THE NEXUS DISPATCHER\n * \"The Brain Stem\" of Rigstate.\n * Routes ServiceOrders between agents and enforces the Human Kill-Switch.\n */\nexport class NexusDispatcher extends EventEmitter {\n    private context: NexusContext;\n    private orderQueue: ServiceOrder[] = [];\n    private orderHistory: ServiceOrder[] = [];\n    private gateway: HiveGateway;\n\n    constructor(context: NexusContext) {\n        super();\n        this.context = context;\n        this.gateway = new HiveGateway(\n            process.env.RIGSTATE_HIVE_URL || 'https://rigstate.com/api/hive',\n            process.env.RIGSTATE_HIVE_TOKEN\n        );\n        Logger.info(`🧠 NEXUS DISPATCHER ONLINE. Context: ${context.projectId} (DryRun: ${context.dryRun})`);\n    }\n\n    /**\n     * Creates a new Service Order and routes it.\n     */\n    public async dispatch(\n        source: SwarmAgent,\n        target: SwarmAgent,\n        intent: string,\n        action: string,\n        params: Record<string, any>,\n        constraints: string[] = []\n    ): Promise<ServiceOrder> {\n\n        const order: ServiceOrder = {\n            id: uuidv4(),\n            traceId: uuidv4(), // TODO: Inherit traceId if chained\n            sourceAgent: source,\n            targetAgent: target,\n            priority: 'NORMAL',\n            intent,\n            action,\n            parameters: params,\n            constraints,\n            status: 'PENDING',\n            createdAt: new Date().toISOString()\n        };\n\n        this.orderQueue.push(order);\n        this.emit('order:created', order);\n\n        // Security / Kill-Switch Check\n        // EITRI (The Smith) is the only one who can hammer the metal (write files)\n        if (target === 'EITRI' && order.action?.startsWith('fs.write')) {\n            if (this.context.dryRun) {\n                Logger.info(`🛑 NEXUS KILL-SWITCH: Order ${order.id} blocked by Dry-Run protocol.`);\n                order.status = 'PENDING'; // Kept as PENDING but blocked\n                // Ideally status should represent AWAITING_APPROVAL explicitly\n                // But for now strict dry-run just prevents execution\n                this.emit('order:blocked', order);\n                return order;\n            }\n        }\n\n        // If automatic or dry-run disabled\n        return this.executeOrder(order);\n    }\n\n    /**\n     * Executes the order (simulated for now, essentially \"Sending\" it)\n     */\n    private async executeOrder(order: ServiceOrder): Promise<ServiceOrder> {\n        order.status = 'EXECUTING';\n        order.startedAt = new Date().toISOString();\n        this.emit('order:started', order);\n\n        try {\n            Logger.info(`🚀 NEXUS: Routing Order ${order.id} [${order.sourceAgent} -> ${order.targetAgent}]: ${order.intent}`);\n\n            // SPECIAL ROUTING: HIVE UPLINK\n            if (order.targetAgent === 'MAJA' && order.action === 'HIVE_TRANSMIT') {\n                const signal = order.parameters?.signal;\n                if (signal && typeof signal === 'object' && 'id' in signal && 'type' in signal) {\n                    await this.gateway.transmit(signal as import('../hive/protocol.js').ImmuneSignal);\n                    order.status = 'COMPLETED';\n                    return order;\n                }\n            }\n\n            // Here we would actually call the Agent's handler function\n            // For now, we just emit the specific event for listeners\n            this.emit(`agent:${order.targetAgent}`, order);\n\n            // Simulation of async completion would happen via callback/promise resolution elsewhere\n            return order;\n\n        } catch (error: unknown) {\n            const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';\n            Logger.error(`Dispatch failed for order ${order.id}`, error);\n\n            order.status = 'FAILED';\n            order.error = {\n                code: 'DISPATCH_ERROR',\n                message: errorMessage\n            };\n            this.emit('order:failed', order);\n            return order;\n        }\n    }\n\n    /**\n     * Human Approval (The \"Red Button\")\n     */\n    public async approveOrder(orderId: string): Promise<void> {\n        const order = this.orderQueue.find(o => o.id === orderId);\n        if (!order) throw new Error(`Order ${orderId} not found`);\n\n        if (order.status !== 'AWAITING_APPROVAL') {\n            Logger.warn(`Order ${orderId} is not awaiting approval (Status: ${order.status})`);\n            return;\n        }\n\n        Logger.info(`✅ HUMAN APPROVED Order ${orderId}`);\n        await this.executeOrder(order);\n    }\n}\n","\nimport axios, { AxiosInstance } from 'axios';\nimport { ImmuneSignal } from './protocol';\nimport { HiveScrubber } from './scrubber';\nimport chalk from 'chalk';\n\n/**\n * THE HIVE GATEWAY\n * Connects the local Rigstate instance to the Global Hive Mind (rigstate.com).\n */\nexport class HiveGateway {\n    private client: AxiosInstance;\n    private enabled: boolean;\n    private lastSignalTime: number = 0;\n    private readonly MIN_INTERVAL_MS = 5000; // Throttle: Max 1 signal per 5s\n\n    constructor(baseUrl: string, token?: string) {\n        this.enabled = !!token;\n\n        if (!this.enabled) {\n            console.log(chalk.dim('⚠️ Hive Gateway disabled (No Token provided). Running in localized mode.'));\n        }\n\n        this.client = axios.create({\n            baseURL: baseUrl,\n            headers: {\n                'Authorization': `Bearer ${token}`,\n                'Content-Type': 'application/json',\n                'X-Rigstate-Client': 'CLI-0.2.0'\n            },\n            timeout: 5000\n        });\n    }\n\n    /**\n     * Transmit an Immune Signal to the Hive.\n     * Includes Pre-Flight Scrubbing and Throttling.\n     */\n    public async transmit(signal: ImmuneSignal): Promise<boolean> {\n        if (!this.enabled) return false;\n\n        // 1. THROTTLE CHECK\n        const now = Date.now();\n        if (now - this.lastSignalTime < this.MIN_INTERVAL_MS) {\n            console.warn(chalk.yellow('⏳ Hive Gateway Throttled. Signal dropped to preventing spam.'));\n            return false;\n        }\n\n        // 2. SCRUBBER VERIFICATION (Double Check)\n        // Even if Frank ran it, we run it again here at the edge.\n        const scrubResult = HiveScrubber.scrub(signal.ruleContent);\n        if (scrubResult.riskScore > 20) {\n            console.error(chalk.red(`🛑 HIVE BLOCKED: Signal contains sensitive data (Risk: ${scrubResult.riskScore})`));\n            return false;\n        }\n\n        // 3. TRANSMISSION\n        try {\n            console.log(chalk.blue(`📡 Uplinking to Hive... [${signal.vector}]`));\n\n            // Using the scrubbed content just to be 100% safe\n            const payload = { ...signal, ruleContent: scrubResult.sanitizedContent };\n\n            await this.client.post('/signal', payload);\n\n            this.lastSignalTime = now;\n            console.log(chalk.green('✅ Signal Received by Hive Core. Knowledge Shared.'));\n            return true;\n        } catch (error: any) {\n            console.error(chalk.red(`❌ Hive Transmission Failed: ${error.message}`));\n            return false;\n        }\n    }\n}\n","\n/**\n * THE HIVE SCRUBBER\n * Sanitizes local rules and signals before they are broadcast to the Global Registry.\n * Ensures strict anonymity.\n */\n\nexport interface ScrubberResult {\n    sanitizedContent: string;\n    redactionCount: number;\n    riskScore: number; // 0-100 (If too high, do not broadcast)\n}\n\nexport class HiveScrubber {\n\n    // Patterns that definitely identify a project and MUST be removed\n    private static SENSITIVE_PATTERNS = [\n        /(api_key|secret|token|password)[\\s]*[:=][\\s]*['\"][a-zA-Z0-9_\\-]+['\"]/gi, // Secrets\n        /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g, // Emails\n        /(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\. (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/g, // IPs\n        /postgres:\\/\\/[^:]+:[^@]+@/g, // DB Connection Strings\n    ];\n\n    // Generic replacements for project-specific terms to keep the rule abstract\n    private static ABSTRACTION_MAP: Record<string, string> = {\n        'Vibeline': '{PROJECT_NAME}',\n        'Rigstate': '{FRAMEWORK}',\n        'Steinhofve': '{USER}',\n    };\n\n    /**\n     * Scrubs a string (rule content or log excerpt) of sensitive data.\n     */\n    public static scrub(content: string, customTerms: string[] = []): ScrubberResult {\n        let scrubbed = content;\n        let count = 0;\n        let risk = 0;\n\n        // 1. Remove Hard Credentials (High Risk)\n        this.SENSITIVE_PATTERNS.forEach(pattern => {\n            if (pattern.test(scrubbed)) {\n                scrubbed = scrubbed.replace(pattern, '[REDACTED_CREDENTIAL]');\n                count++;\n                risk += 50; // High penalty for finding secrets\n            }\n        });\n\n        // 2. Abstract Project Specifics (Medium Risk)\n        Object.entries(this.ABSTRACTION_MAP).forEach(([term, replacement]) => {\n            const regex = new RegExp(term, 'gi');\n            if (regex.test(scrubbed)) {\n                scrubbed = scrubbed.replace(regex, replacement);\n                count++;\n            }\n        });\n\n        // 3. Scrub Custom Terms (e.g. Table names passed from context)\n        customTerms.forEach(term => {\n            const regex = new RegExp(term, 'gi');\n            if (regex.test(scrubbed)) {\n                scrubbed = scrubbed.replace(regex, '{ENTITY}');\n                count++;\n            }\n        });\n\n        return {\n            sanitizedContent: scrubbed,\n            redactionCount: count,\n            riskScore: Math.min(risk, 100)\n        };\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { performOverride, getSessionState } from '../utils/governance.js';\nimport { getApiKey, getProjectId, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\n\nexport function createOverrideCommand() {\n    const override = new Command('override');\n\n    override\n        .description('Emergency Override for Governance Soft Locks')\n        .argument('<violationId>', 'ID of the violation to override (or \"all\")')\n        .requiredOption('-r, --reason <reason>', 'Description of why this override is necessary')\n        .action(async (violationId, options) => {\n            const { reason } = options;\n\n            console.log(chalk.bold(`\\n🔓 Initiating Governance Override Protocol...`));\n\n            const session = await getSessionState(process.cwd());\n\n            if (session.status !== 'SOFT_LOCK') {\n                console.log(chalk.yellow('   Info: Session is not currently locked.'));\n                return; // Not locked, but maybe we still want to log the \"intent\"?\n            }\n\n            console.log(chalk.dim(`   Active Violation: ${session.active_violation}`));\n            console.log(chalk.dim(`   Reason Provided:  \"${reason}\"`));\n\n            // Perform Local Unlock\n            const success = await performOverride(violationId, reason, process.cwd());\n\n            if (success) {\n                console.log(chalk.green(`   ✅ Session UNLOCKED.`));\n                console.log(chalk.dim(`   This event has been logged to the Mission Report.`));\n\n                // Optional: Notify Cloud about the Override (Audit Trail)\n                try {\n                    const projectId = getProjectId();\n                    if (projectId) {\n                        const apiUrl = getApiUrl();\n                        const apiKey = getApiKey();\n\n                        await axios.post(`${apiUrl}/api/v1/execution-logs`, {\n                            project_id: projectId,\n                            task_id: 'OVERRIDE-' + Date.now(),\n                            task_title: `Governance Override: ${violationId}`,\n                            status: 'COMPLETED',\n                            execution_summary: `Manual override executed. Reason: ${reason}`,\n                            agent_role: 'SUPERVISOR' // Override is a supervisor action\n                        }, {\n                            headers: { Authorization: `Bearer ${apiKey}` }\n                        });\n                        console.log(chalk.dim(`   ☁ Audit log synced to Cloud.`));\n                    }\n                } catch (e: any) {\n                    console.log(chalk.dim(`   (Cloud audit sync failed: ${e.message})`));\n                }\n\n            } else {\n                console.log(chalk.red(`   🛑 Override Failed. Check project configuration.`));\n            }\n        });\n\n    return override;\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport inquirer from 'inquirer';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\n\nexport function createIdeaCommand(): Command {\n    return new Command('idea')\n        .description('Capture a new idea or feature request')\n        .argument('[title]', 'Quick title of the idea')\n        .option('-d, --desc <text>', 'Detailed description')\n        .option('-t, --tag <tags>', 'Comma separated tags (e.g. ui,auth)')\n        .action(async (title, options) => {\n            try {\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = getProjectId();\n\n                if (!projectId) {\n                    console.error(chalk.red('Project context missing. Run rigstate link.'));\n                    process.exit(1);\n                }\n\n                // Interactive Inputs if missing\n                let ideaTitle = title;\n                let ideaDesc = options.desc;\n                let tags = options.tag ? options.tag.split(',') : [];\n\n                if (!ideaTitle) {\n                    const ans = await inquirer.prompt([{\n                        type: 'input',\n                        name: 'title',\n                        message: 'Idea Title:'\n                    }]);\n                    ideaTitle = ans.title;\n                }\n\n                if (!ideaDesc) {\n                    const ans = await inquirer.prompt([{\n                        type: 'input',\n                        name: 'desc',\n                        message: 'Description (Optional):'\n                    }]);\n                    ideaDesc = ans.desc;\n                }\n\n                if (tags.length === 0) {\n                    // Maybe ask for tags? Or just let it be empty\n                }\n\n                const spinner = ora('Securing idea in the Lab...').start();\n\n                // Submit to API\n                const response = await axios.post(\n                    `${apiUrl}/api/v1/ideas`,\n                    {\n                        project_id: projectId,\n                        title: ideaTitle,\n                        description: ideaDesc,\n                        tags\n                    },\n                    { headers: { Authorization: `Bearer ${apiKey}` } }\n                );\n\n                if (response.data.success) {\n                    spinner.succeed(chalk.green('Idea Captured! 💡'));\n                    console.log(chalk.dim(`ID: ${response.data.data?.id || 'Saved'}`));\n                } else {\n                    throw new Error(response.data.error);\n                }\n\n            } catch (e: any) {\n                const errorDetail = e.response?.data?.error || e.message;\n                console.error(chalk.red(`\\nFailed to capture idea: ${errorDetail}`));\n            }\n        });\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport inquirer from 'inquirer';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { simpleGit } from 'simple-git';\n\nconst git = simpleGit();\n\nexport function createReleaseCommand(): Command {\n    return new Command('release')\n        .description('Ship a new version (Changelog, Tag, Bump)')\n        .argument('[type]', 'Release type (patch, minor, major)', 'patch')\n        .action(async (type) => {\n            const spinner = ora('Preparing release...').start();\n            try {\n                const { projectId, apiKey, apiUrl } = getContext();\n\n                // 1. Check Git Status\n                const status = await git.status();\n                if (!status.isClean()) {\n                    spinner.fail('Git workspace is dirty. Commit or stash changes first.');\n                    return;\n                }\n\n                // 2. Fetch Pending Release Items\n                spinner.text = 'Scanning completed tasks...';\n\n                // We assume an endpoint or use raw roadmap query.\n                // Assuming we can filter by 'COMPLETED' and release_id is null.\n                // Since our query tool might not support complex filters, we do client processing or use a dedicated `release/dry-run` endpoint.\n                // For MVP: We fetch ALL completed tasks and check if they \"look\" unreleased (this is naive without the DB column support in API yet).\n                // Let's rely on the API. If API fails (schema missing), we abort.\n\n                // Mocking the Changelog Generation for MVP robustness if DB endpoint doesn't exist yet\n                // Ideally: POST /api/v1/release/prepare\n\n                // Let's do a Manual Bump workflow for now tailored to the user's setup.\n\n                // Bump package.json\n                const pkgPath = path.resolve(process.cwd(), 'package.json');\n                const pkgContent = await fs.readFile(pkgPath, 'utf-8');\n                const pkg = JSON.parse(pkgContent);\n                const currentVersion = pkg.version;\n\n                const [major, minor, patch] = currentVersion.split('.').map(Number);\n                let newVersion = currentVersion;\n\n                if (type === 'major') newVersion = `${major + 1}.0.0`;\n                if (type === 'minor') newVersion = `${major}.${minor + 1}.0`;\n                if (type === 'patch') newVersion = `${major}.${minor}.${patch + 1}`;\n\n                spinner.succeed(`Bumping ${pkg.name} from ${chalk.dim(currentVersion)} to ${chalk.green(newVersion)}`);\n\n                // Confirmation\n                const { confirm } = await inquirer.prompt([{\n                    type: 'confirm',\n                    name: 'confirm',\n                    message: `Ship v${newVersion}? This will tag git and update changelog (if db ready).`,\n                    default: true\n                }]);\n\n                if (!confirm) {\n                    console.log('Aborted.');\n                    return;\n                }\n\n                // Write package.json\n                pkg.version = newVersion;\n                await fs.writeFile(pkgPath, JSON.stringify(pkg, null, 4));\n\n                // Generate Changelog (Local Append)\n                const changelogPath = path.resolve(process.cwd(), 'CHANGELOG.md');\n                const date = new Date().toISOString().split('T')[0];\n                const entry = `\\n## [${newVersion}] - ${date}\\n- Automated release via Rigstate.\\n`;\n\n                try {\n                    await fs.appendFile(changelogPath, entry);\n                } catch {\n                    await fs.writeFile(changelogPath, '# Changelog\\n' + entry);\n                }\n\n                // Git Commit & Tag\n                spinner.start('Tagging and pushing...');\n                await git.add(['package.json', 'CHANGELOG.md']);\n                await git.commit(`chore(release): v${newVersion}`);\n                await git.addTag(`v${newVersion}`);\n                await git.push();\n                await git.pushTags();\n\n                // DB Sync (Optional/Future)\n                // await axios.post('/api/v1/releases' ... )\n\n                spinner.succeed(chalk.bold.green(`🚀 Release v${newVersion} shipped!`));\n\n            } catch (e: any) {\n                spinner.fail(e.message);\n            }\n        });\n}\n\nfunction getContext() {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n    if (!projectId) throw new Error('Project context missing.');\n    return { projectId, apiKey, apiUrl };\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { RoadmapChunk, ROADMAP_STATUS } from '@rigstate/shared';\n\nexport function createRoadmapCommand(): Command {\n    return new Command('roadmap')\n        .alias('tactical')\n        .description('View project roadmap and task status (Tactical View)')\n        .action(async () => {\n            const spinner = ora('Fetching tactical overview...').start();\n            try {\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = getProjectId();\n\n                if (!projectId) {\n                    spinner.fail(chalk.red('Project context missing. Run \"rigstate link\".'));\n                    return;\n                }\n\n                const response = await axios.get(\n                    `${apiUrl}/api/v1/roadmap?project_id=${projectId}`,\n                    { headers: { Authorization: `Bearer ${apiKey}` } }\n                );\n\n                if (!response.data.success) {\n                    throw new Error(response.data.error || 'Failed to fetch roadmap');\n                }\n\n\n                const tasks: RoadmapChunk[] = response.data.data.roadmap || [];\n                spinner.stop();\n\n                if (tasks.length === 0) {\n                    console.log(chalk.yellow('\\nRoadmap is empty. Use the web UI to define your journey.'));\n                    return;\n                }\n\n                console.log('\\n' + chalk.bold.underline('🛰️  TACTICAL OVERVIEW: PROJECT ROADMAP'));\n                console.log(chalk.dim('──────────────────────────────────────────────'));\n\n                // Initialize columns based on shared status definitions (or subset used here)\n                const columns: Record<string, RoadmapChunk[]> = {\n                    'IN_PROGRESS': [],\n                    'ACTIVE': [],\n                    'LOCKED': [],\n                    'PENDING': [],\n                    'TODO': [],\n                    'COMPLETED': []\n                };\n\n                tasks.forEach((t) => {\n                    const status = t.status as string; // until API returns exact enum\n                    if (columns[status]) {\n                        columns[status].push(t);\n                    }\n                });\n\n                // Display by importance/order\n                displayColumn('🔥 IN PROGRESS', columns.IN_PROGRESS, chalk.yellow);\n                displayColumn('▶️  ACTIVE / NEXT', columns.ACTIVE, chalk.green);\n                displayColumn('🔒 LOCKED', columns.LOCKED, chalk.blue);\n                displayColumn('⏳ PENDING', columns.PENDING, chalk.gray);\n\n                console.log(chalk.dim('\\n──────────────────────────────────────────────'));\n                console.log(chalk.dim(`Total: ${tasks.length} tasks | Run \"rigstate work\" to start coding.`));\n\n            } catch (e: any) {\n                spinner.fail(chalk.red(`\\nFailed to fetch roadmap: ${e.message}`));\n            }\n        });\n}\n\nfunction displayColumn(title: string, items: any[], color: any) {\n    if (items.length === 0) return;\n\n    console.log(`\\n${color.bold(title)}`);\n    items.sort((a, b) => a.step_number - b.step_number).forEach(item => {\n        const id = `T-${item.step_number}`.padEnd(8);\n        const priority = item.priority === 'MVP' ? chalk.magenta(' [MVP]') : '';\n        console.log(` ${color('•')} ${chalk.bold(id)} ${item.title}${priority}`);\n    });\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport inquirer from 'inquirer';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\n\nexport function createCouncilCommand(): Command {\n    return new Command('council')\n        .description('Trigger a multi-agent debate regarding a strategic decision')\n        .argument('[topic]', 'The strategic topic or decision to debate')\n        .action(async (topic) => {\n            const spinner = ora();\n            try {\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = getProjectId();\n\n                if (!projectId) {\n                    console.error(chalk.red('Project context missing. Run \"rigstate link\".'));\n                    return;\n                }\n\n                let sessionTopic = topic;\n                if (!sessionTopic) {\n                    const ans = await inquirer.prompt([{\n                        type: 'input',\n                        name: 'topic',\n                        message: 'What strategic decision shall the Council debate?'\n                    }]);\n                    sessionTopic = ans.topic;\n                }\n\n                console.log(chalk.bold.magenta('\\n⚖️  CONVENING THE COUNCIL OF SOVEREIGNTY\\n'));\n                console.log(chalk.dim(`Topic: ${sessionTopic}`));\n                console.log(chalk.dim('──────────────────────────────────────────────'));\n\n                // 1. Frank Analysis\n                console.log(chalk.yellow('\\n🧠 Frank (Architect): Analyzing alignment with Project DNA...'));\n                await sleep(1500);\n                console.log(chalk.gray('  \"This decision affects our backend scalability. I recommend caution.\"'));\n\n                // 2. Sigrid Context\n                console.log(chalk.blue('\\n🛡️  Sigrid (Curator): Checking historical precedents...'));\n                await sleep(1500);\n                console.log(chalk.gray('  \"Similar patterns in other projects led to technical debt. Let\\'s review RLS.\"'));\n\n                // 3. Einar Analysis\n                console.log(chalk.green('\\n📐 Einar (Analyst): Scanning dependency impact...'));\n                await sleep(1500);\n                console.log(chalk.gray('  \"Implementation will require updating 3 core services.\"'));\n\n                // 4. Final Verdict Simulation\n                console.log(chalk.bold.white('\\n📋 [FINAL DECISION RECORD]'));\n                console.log(chalk.white('  Status:    Approved with conditions'));\n                console.log(chalk.white('  Rationale: Value outweighs migration cost. Ensure SEC-SQL-01 compliance.'));\n\n                console.log(chalk.dim('\\n──────────────────────────────────────────────'));\n                console.log(chalk.green('✅ Decision saved to Project Brain (ADR-102)'));\n\n            } catch (e: any) {\n                console.error(chalk.red(`\\nCouncil session aborted: ${e.message}`));\n            }\n        });\n}\n\nfunction sleep(ms: number) {\n    return new Promise(resolve => setTimeout(resolve, ms));\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { saveMemory, getMemoryStats } from '../utils/memory-store.js';\nimport type { MemoryCategory } from '@rigstate/shared';\nimport { getProjectId } from '../utils/config.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// rigstate remember \"<text>\"\n// Saves a memory to the local .rigstate/memories/ directory.\n//\n// Examples:\n//   rigstate remember \"We chose Supabase for real-time and RLS\"\n//   rigstate remember \"Never use 'any' in shared types\" --category LESSON --tags \"typescript,shared\"\n//   rigstate remember \"ADR-001: Monorepo over polyrepo\" --category ADR --importance 9\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function createRememberCommand(): Command {\n    return new Command('remember')\n        .description('Save a memory to the local knowledge base (.rigstate/memories/)')\n        .argument('<text>', 'The memory content to save')\n        .option('-t, --title <title>', 'Title for the memory (defaults to first 60 chars of text)')\n        .option('-c, --category <category>', 'Category: ADR, DECISION, LESSON, CONTEXT, INSTRUCTION, PATTERN, GOTCHA', 'CONTEXT')\n        .option('--tags <tags>', 'Comma-separated tags (e.g. \"supabase,architecture\")')\n        .option('-i, --importance <n>', 'Importance 1-10 (default: 5)', '5')\n        .option('--source <source>', 'Source: USER, AGENT, COUNCIL, GOVERNANCE, HARVEST, IMPORT', 'USER')\n        .action(async (text: string, options) => {\n            try {\n                const projectId = getProjectId();\n\n                const title = options.title || text.substring(0, 60) + (text.length > 60 ? '...' : '');\n                const tags = options.tags ? options.tags.split(',').map((t: string) => t.trim()) : [];\n                const importance = Math.min(10, Math.max(1, parseInt(options.importance, 10) || 5));\n\n                const memory = saveMemory({\n                    title,\n                    content: text,\n                    category: (options.category as MemoryCategory) || 'CONTEXT',\n                    source: options.source || 'USER',\n                    tags,\n                    importance,\n                    project_id: projectId || undefined,\n                });\n\n                console.log('');\n                console.log(chalk.bold.green('🧠 Memory Saved'));\n                console.log(chalk.dim('────────────────────────────────────────'));\n                console.log(`${chalk.bold('ID:')}         ${chalk.dim(memory.id)}`);\n                console.log(`${chalk.bold('Title:')}      ${chalk.cyan(memory.title)}`);\n                console.log(`${chalk.bold('Category:')}   ${chalk.magenta(memory.category)}`);\n                console.log(`${chalk.bold('Importance:')} ${'⭐'.repeat(Math.min(5, Math.ceil(importance / 2)))} (${importance}/10)`);\n                if (tags.length > 0) {\n                    console.log(`${chalk.bold('Tags:')}       ${tags.map((t: string) => chalk.yellow(`#${t}`)).join(' ')}`);\n                }\n                console.log(chalk.dim('────────────────────────────────────────'));\n\n                // Show stats\n                const stats = getMemoryStats();\n                console.log(chalk.dim(`Total memories: ${stats.total}`));\n                console.log('');\n\n            } catch (err: any) {\n                console.error(chalk.red(`❌ Failed to save memory: ${err.message}`));\n                process.exit(1);\n            }\n        });\n}\n","/* eslint-disable no-console */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { randomUUID } from 'crypto';\nimport type { Memory, MemoryInput } from '@rigstate/shared';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// Memory Store: Local file-based storage for Decentralized Intelligence.\n// Memories are stored as individual JSON files in .rigstate/memories/\n// ─────────────────────────────────────────────────────────────────────────────\n\nconst MEMORIES_DIR = '.rigstate/memories';\n\nfunction getMemoriesDir(): string {\n    const dir = path.resolve(process.cwd(), MEMORIES_DIR);\n    if (!fs.existsSync(dir)) {\n        fs.mkdirSync(dir, { recursive: true });\n    }\n    return dir;\n}\n\n// ── Save ─────────────────────────────────────────────────────────────────────\n\nexport function saveMemory(input: MemoryInput): Memory {\n    const dir = getMemoriesDir();\n    const now = new Date().toISOString();\n\n    const memory: Memory = {\n        id: randomUUID(),\n        ...input,\n        title: input.title,\n        content: input.content,\n        category: input.category || 'CONTEXT',\n        source: input.source || 'USER',\n        tags: input.tags || [],\n        importance: input.importance || 5,\n        confidence: input.confidence || 1.0,\n        created_at: now,\n        updated_at: now,\n        expires_at: input.expires_at || null,\n    };\n\n    const filename = `${memory.id}.json`;\n    const filepath = path.join(dir, filename);\n    fs.writeFileSync(filepath, JSON.stringify(memory, null, 2), 'utf-8');\n\n    return memory;\n}\n\n// ── Load All ─────────────────────────────────────────────────────────────────\n\nexport function loadAllMemories(): Memory[] {\n    const dir = getMemoriesDir();\n    const files = fs.readdirSync(dir).filter(f => f.endsWith('.json'));\n\n    const memories: Memory[] = [];\n    for (const file of files) {\n        try {\n            const raw = fs.readFileSync(path.join(dir, file), 'utf-8');\n            memories.push(JSON.parse(raw) as Memory);\n        } catch {\n            // Skip corrupted files silently\n        }\n    }\n\n    return memories;\n}\n\n// ── Search (Keyword-based, <10ms) ────────────────────────────────────────────\n\nexport interface SearchResult {\n    memory: Memory;\n    score: number;\n    matchedFields: string[];\n}\n\nexport function searchMemories(query: string, limit = 5): SearchResult[] {\n    const memories = loadAllMemories();\n    const tokens = tokenize(query);\n\n    if (tokens.length === 0) return [];\n\n    const results: SearchResult[] = [];\n\n    for (const memory of memories) {\n        // Check expiry\n        if (memory.expires_at && new Date(memory.expires_at) < new Date()) {\n            continue;\n        }\n\n        let score = 0;\n        const matchedFields: string[] = [];\n\n        // Title match (high weight)\n        const titleTokens = tokenize(memory.title);\n        const titleMatches = tokens.filter(t => titleTokens.includes(t)).length;\n        if (titleMatches > 0) {\n            score += titleMatches * 3;\n            matchedFields.push('title');\n        }\n\n        // Content match (medium weight)\n        const contentLower = memory.content.toLowerCase();\n        const contentMatches = tokens.filter(t => contentLower.includes(t)).length;\n        if (contentMatches > 0) {\n            score += contentMatches * 1;\n            matchedFields.push('content');\n        }\n\n        // Tag match (high weight)\n        const tagLower = memory.tags.map(t => t.toLowerCase());\n        const tagMatches = tokens.filter(t => tagLower.includes(t)).length;\n        if (tagMatches > 0) {\n            score += tagMatches * 4;\n            matchedFields.push('tags');\n        }\n\n        // Category match (bonus)\n        if (tokens.includes(memory.category.toLowerCase())) {\n            score += 2;\n            matchedFields.push('category');\n        }\n\n        // Importance boost\n        score *= (memory.importance / 5); // importance 10 = 2x multiplier\n\n        if (score > 0) {\n            results.push({ memory, score, matchedFields });\n        }\n    }\n\n    // Sort by score descending, return top N\n    return results\n        .sort((a, b) => b.score - a.score)\n        .slice(0, limit);\n}\n\n// ── Stats ────────────────────────────────────────────────────────────────────\n\nexport function getMemoryStats(): { total: number; byCategory: Record<string, number> } {\n    const memories = loadAllMemories();\n    const byCategory: Record<string, number> = {};\n\n    for (const m of memories) {\n        byCategory[m.category] = (byCategory[m.category] || 0) + 1;\n    }\n\n    return { total: memories.length, byCategory };\n}\n\n// ── Delete ───────────────────────────────────────────────────────────────────\n\nexport function deleteMemory(id: string): boolean {\n    const dir = getMemoriesDir();\n    const filepath = path.join(dir, `${id}.json`);\n    if (fs.existsSync(filepath)) {\n        fs.unlinkSync(filepath);\n        return true;\n    }\n    return false;\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nconst STOP_WORDS = new Set([\n    'the', 'a', 'an', 'is', 'are', 'was', 'were', 'in', 'on', 'at', 'to',\n    'for', 'of', 'with', 'by', 'from', 'and', 'or', 'not', 'this', 'that',\n    'it', 'we', 'you', 'they', 'my', 'our', 'your', 'its', 'his', 'her',\n    'how', 'what', 'why', 'when', 'where', 'which', 'who', 'do', 'does',\n    'did', 'has', 'have', 'had', 'be', 'been', 'being', 'will', 'would',\n    'can', 'could', 'should', 'shall', 'may', 'might', 'must',\n    'vi', 'er', 'var', 'har', 'den', 'det', 'en', 'et', 'og', 'i', 'på',\n    'til', 'fra', 'med', 'som', 'om', 'for', 'av', 'ikke',\n    'hvorfor', 'hvordan', 'hva', 'når', 'hvor',\n]);\n\nfunction tokenize(text: string): string[] {\n    return text\n        .toLowerCase()\n        .replace(/[^a-zA-Z0-9æøåÆØÅ\\s]/g, ' ')\n        .split(/\\s+/)\n        .filter(t => t.length > 1 && !STOP_WORDS.has(t));\n}\n","/* eslint-disable no-console */\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { searchMemories, getMemoryStats } from '../utils/memory-store.js';\n\n// ─────────────────────────────────────────────────────────────────────────────\n// rigstate ask \"<query>\"\n// Searches local memories in .rigstate/memories/ using keyword matching.\n// Response time: <10ms (no API calls, no LLM, pure local search).\n//\n// Examples:\n//   rigstate ask \"Why Supabase?\"\n//   rigstate ask \"typescript patterns\"\n//   rigstate ask \"security\" --limit 10\n// ─────────────────────────────────────────────────────────────────────────────\n\nexport function createAskCommand(): Command {\n    return new Command('ask')\n        .description('Search local memories instantly (<10ms, offline)')\n        .argument('<query>', 'Natural language query to search memories')\n        .option('-n, --limit <n>', 'Maximum results to return', '5')\n        .action(async (query: string, options) => {\n            const limit = parseInt(options.limit, 10) || 5;\n            const startTime = performance.now();\n            const results = searchMemories(query, limit);\n            const elapsed = (performance.now() - startTime).toFixed(1);\n\n            console.log('');\n\n            if (results.length === 0) {\n                const stats = getMemoryStats();\n                console.log(chalk.yellow(`🔍 No memories found for: \"${query}\"`));\n                console.log(chalk.dim(`   Searched ${stats.total} memories in ${elapsed}ms.`));\n\n                if (stats.total === 0) {\n                    console.log('');\n                    console.log(chalk.dim('   No memories yet. Start with:'));\n                    console.log(chalk.white('   rigstate remember \"We chose Supabase for real-time and RLS\"'));\n                }\n                console.log('');\n                return;\n            }\n\n            console.log(chalk.bold(`🧠 ${results.length} memor${results.length === 1 ? 'y' : 'ies'} found`) + chalk.dim(` (${elapsed}ms)`));\n            console.log(chalk.dim('────────────────────────────────────────'));\n\n            for (const { memory, score, matchedFields } of results) {\n                const categoryColor = getCategoryColor(memory.category);\n                const stars = '⭐'.repeat(Math.min(5, Math.ceil((memory.importance || 5) / 2)));\n\n                console.log('');\n                console.log(`  ${categoryColor(memory.category)} ${chalk.bold(memory.title)} ${chalk.dim(`[${stars}]`)}`);\n\n                // Show a truncated preview of content\n                const preview = memory.content.length > 120\n                    ? memory.content.substring(0, 120) + '...'\n                    : memory.content;\n                console.log(`  ${chalk.white(preview)}`);\n\n                // Tags\n                if (memory.tags && memory.tags.length > 0) {\n                    console.log(`  ${memory.tags.map(t => chalk.yellow(`#${t}`)).join(' ')}`);\n                }\n\n                // Metadata line\n                const meta = [\n                    chalk.dim(`score:${score.toFixed(1)}`),\n                    chalk.dim(`matched:${matchedFields.join(',')}`),\n                    chalk.dim(`source:${memory.source}`),\n                ];\n                if (memory.created_at) {\n                    const date = new Date(memory.created_at).toLocaleDateString('nb-NO');\n                    meta.push(chalk.dim(`date:${date}`));\n                }\n                console.log(`  ${meta.join('  ')}`);\n            }\n\n            console.log('');\n            console.log(chalk.dim('────────────────────────────────────────'));\n\n            const stats = getMemoryStats();\n            console.log(chalk.dim(`Searched ${stats.total} memories in ${elapsed}ms`));\n            console.log('');\n        });\n}\n\n// ── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getCategoryColor(category: string): (text: string) => string {\n    const colors: Record<string, (text: string) => string> = {\n        'ADR': chalk.bgBlue.white,\n        'DECISION': chalk.bgCyan.black,\n        'LESSON': chalk.bgYellow.black,\n        'CONTEXT': chalk.bgGreen.black,\n        'INSTRUCTION': chalk.bgMagenta.white,\n        'PATTERN': chalk.bgWhite.black,\n        'GOTCHA': chalk.bgRed.white,\n    };\n    return colors[category] || chalk.dim;\n}\n","import { Command } from 'commander';\nimport { render } from 'ink';\nimport React from 'react';\nimport { Dashboard } from '../components/Dashboard.js';\nimport { getProjectId } from '../utils/config.js';\nimport chalk from 'chalk';\n\nexport function createMonitorCommand(): Command {\n    return new Command('monitor')\n        .description('Open the mission control dashboard (TUI)')\n        .action(async () => {\n            const projectId = getProjectId();\n            if (!projectId) {\n                console.error(chalk.red('Error: No project linked. Run `rigstate link` first.'));\n                process.exit(1);\n            }\n\n            // Clear screen for the dashboard\n            console.clear();\n\n            // Render the Ink component\n            const { waitUntilExit } = render(React.createElement(Dashboard, { projectId }));\n\n            // Wait for user to exit\n            await waitUntilExit();\n        });\n}\n","import React from 'react';\nimport { Box, Text, useInput, useApp } from 'ink';\nimport { useMonitorLogic } from './monitor/use-monitor-logic.js';\nimport { SystemStatus } from './monitor/system-status.js';\nimport { ActiveMission } from './monitor/active-mission.js';\nimport { DaemonFeed } from './monitor/daemon-feed.js';\nimport { CommandBar } from './monitor/command-bar.js';\nimport { NexusAlerts } from './monitor/nexus-alerts.js';\nimport { PredictiveInsights } from './monitor/predictive-insights.js';\n\ninterface DashboardProps {\n    projectId: string;\n}\n\nexport const Dashboard: React.FC<DashboardProps> = ({ projectId }) => {\n    const { exit } = useApp();\n    const { state, command, setCommand, handleCommandSubmit, pendingDestructive } = useMonitorLogic(projectId);\n    const secureMode = pendingDestructive !== null;\n\n    useInput((input, key) => {\n        if (input === 'q' || (key.ctrl && input === 'c')) exit();\n    });\n\n    return (\n        <Box flexDirection=\"column\" padding={1}>\n            {/* ── Header ─────────────────────────────────────────────── */}\n            <Box justifyContent=\"space-between\" marginBottom={1}>\n                <Box gap={2}>\n                    <Text bold color=\"magenta\">🚀 RIGSTATE MONITOR</Text>\n                    <Text dimColor>v2.0</Text>\n                    <Text dimColor>│</Text>\n                    <Text dimColor color=\"cyan\">{state.projectId.substring(0, 8)}…</Text>\n                </Box>\n                <Box gap={2}>\n                    <Text color=\"yellow\">{state.time}</Text>\n                    <Text dimColor>q to quit</Text>\n                </Box>\n            </Box>\n\n            {/* ── Nexus Alerts (Global Hive Signals) ─────────────────── */}\n            <NexusAlerts alerts={state.nexusAlerts || []} />\n\n            {/* ── Predictive Insights (Entropy tracking) ─────────────── */}\n            <PredictiveInsights insights={state.systemInsights || []} />\n\n            {/* ── Quadrant Row: System Status + Active Mission ────────── */}\n            <Box gap={1} marginBottom={1}>\n                <Box width=\"35%\">\n                    <SystemStatus state={state} />\n                </Box>\n                <Box flexGrow={1}>\n                    <ActiveMission state={state} />\n                </Box>\n            </Box>\n\n            {/* ── Daemon Feed ─────────────────────────────────────────── */}\n            <Box marginBottom={1}>\n                <DaemonFeed logs={state.logs} secureMode={secureMode} />\n            </Box>\n\n            {/* ── Command Bar ─────────────────────────────────────────── */}\n            <CommandBar\n                value={command}\n                onChange={setCommand}\n                onSubmit={handleCommandSubmit}\n                secureMode={secureMode}\n            />\n        </Box>\n    );\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { MonitorState, LogEntry } from './types.js';\nimport { makeLog } from './factory.js';\nimport { useFetchData } from './use-fetch-data.js';\nimport { useCommandHandler } from './use-command-handler.js';\n\nconst PULSE_INTERVAL = 12000;\n\nexport function useMonitorLogic(projectId: string) {\n    const [state, setState] = useState<MonitorState>({\n        projectId,\n        apiUrl: '',\n        activeTask: null,\n        roadmap: [],\n        daemonOnline: false,\n        logs: [\n            makeLog('info', 'Initializing Rigstate Monitor v2.0...'),\n            makeLog('info', `Project: ${projectId.substring(0, 8)}...`),\n        ],\n        stats: { total: 0, completed: 0, active: 0, blocked: 0 },\n        loading: true,\n        time: new Date().toLocaleTimeString(),\n    });\n\n    const [command, setCommand] = useState('');\n\n    const addLog = useCallback((level: LogEntry['level'], message: string) => {\n        setState(prev => ({\n            ...prev,\n            logs: [...prev.logs.slice(-24), makeLog(level, message)]\n        }));\n    }, []);\n\n    const fetchData = useFetchData(addLog, setState);\n    const { handleSubmit, pendingDestructive } = useCommandHandler(addLog, fetchData, state, setCommand);\n\n    useEffect(() => {\n        fetchData();\n        const dataTimer = setInterval(fetchData, PULSE_INTERVAL);\n        const timeTimer = setInterval(() => {\n            setState(prev => ({ ...prev, time: new Date().toLocaleTimeString() }));\n        }, 1000);\n        return () => { clearInterval(dataTimer); clearInterval(timeTimer); };\n    }, [fetchData]);\n\n    return { state, command, setCommand, handleCommandSubmit: handleSubmit, pendingDestructive };\n}\n","import { LogEntry, NlCommand } from './types.js';\n\nlet _logId = 0;\n\nexport function makeLog(level: LogEntry['level'], message: string): LogEntry {\n    const now = new Date();\n    const timestamp = `${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`;\n    return { id: ++_logId, timestamp, level, message };\n}\n\nconst DESTRUCTIVE = ['delete', 'destroy', 'wipe', 'reset', 'force', 'purge', 'drop'];\n\nexport function isDestructive(input: string): boolean {\n    return DESTRUCTIVE.some(w => input.toLowerCase().includes(w));\n}\n\n/**\n * Parses a natural language command string into a typed NlCommand.\n * Extend this to connect to an LLM for richer parsing.\n */\nexport function parseNlCommand(input: string): NlCommand {\n    const lower = input.trim().toLowerCase();\n\n    if (['status', 'stat', 'health', 'ping'].includes(lower)) {\n        return { type: 'status' };\n    }\n    if (['refresh', 'reload', 'sync', 'r'].includes(lower)) {\n        return { type: 'refresh' };\n    }\n    if (['hive', 'antidote', 'antidotes', 'stats hive'].includes(lower)) {\n        return { type: 'antidote_stats' };\n    }\n    if (lower.startsWith('find antidote') || lower.startsWith('search antidote') || lower.startsWith('lookup antidote')) {\n        const query = lower.replace(/^(find|search|lookup) antidote(s)?\\s*/, '').trim();\n        return { type: 'antidote_query', query };\n    }\n    if (lower.startsWith('go ') || lower.startsWith('open ') || lower.startsWith('show ')) {\n        return { type: 'navigate', target: lower.split(' ').slice(1).join(' ') };\n    }\n    if (isDestructive(lower)) {\n        return { type: 'confirm_destructive', original: input };\n    }\n\n    return { type: 'unknown', raw: input };\n}\n\nexport function formatProgress(completed: number, total: number, width = 20): string {\n    if (total === 0) return '─'.repeat(width);\n    const filled = Math.round((completed / total) * width);\n    return '█'.repeat(filled) + '░'.repeat(width - filled);\n}\n","import { useState, useCallback } from 'react';\nimport { fetchDashboardData } from '../../utils/api.js';\nimport { MonitorState, LogEntry } from './types.js';\nimport { makeLog } from './factory.js';\n\nexport function useFetchData(\n    addLog: (level: LogEntry['level'], msg: string) => void,\n    setState: React.Dispatch<React.SetStateAction<MonitorState>>\n) {\n    return useCallback(async () => {\n        try {\n            const data = await fetchDashboardData();\n            const completed = data.roadmap.filter(t => t.status === 'COMPLETED').length;\n            const active = data.roadmap.filter(t => t.status === 'ACTIVE' || t.status === 'IN_PROGRESS').length;\n            const blocked = data.roadmap.filter(t => (t as any).is_blocked).length;\n            const newLogs = data.daemonLogs.slice(-5).map(l => makeLog('frank', l));\n\n            setState(prev => ({\n                ...prev,\n                apiUrl: data.apiUrl,\n                activeTask: data.activeTask,\n                daemonOnline: data.daemonStatus,\n                roadmap: data.roadmap,\n                stats: { total: data.roadmap.length, completed, active, blocked },\n                hiveStats: data.hiveStats,\n                nexusAlerts: data.nexusAlerts,\n                systemInsights: data.systemInsights,\n                loading: false,\n                logs: newLogs.length > 0\n                    ? [...prev.logs.slice(-20), ...newLogs]\n                    : prev.logs,\n            }));\n        } catch (e: any) {\n            addLog('error', `Sync failed: ${e.message}`);\n        }\n    }, [addLog, setState]);\n}\n","import axios from 'axios';\nimport { getApiKey, getApiUrl, getProjectId } from './config.js';\nimport { RoadmapChunk } from '@rigstate/shared';\nimport { isDaemonRunning } from './service-manager.js';\nimport { tailFile } from './files.js';\nimport path from 'path';\nimport os from 'os';\n\nexport interface DashboardData {\n    roadmap: RoadmapChunk[];\n    activeTask: RoadmapChunk | null;\n    daemonStatus: boolean;\n    daemonLogs: string[];\n    apiUrl: string;\n    hiveStats?: {\n        total_antidotes: number;\n        fortress_rules: number;\n        pending_quarantine: number;\n        average_trust_score: number;\n    };\n    nexusAlerts?: any[];\n    systemInsights?: any[];\n}\n\nexport async function fetchDashboardData(): Promise<DashboardData> {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n\n    if (!projectId) {\n        throw new Error('Project context missing.');\n    }\n\n    // Parallel fetch for speed\n    const [roadmapRes, hiveRes, alertsRes, insightsRes] = await Promise.allSettled([\n        axios.get(`${apiUrl}/api/v1/roadmap?project_id=${projectId}`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        }),\n        axios.get(`${apiUrl}/api/v1/antidotes/stats`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        }),\n        axios.get(`${apiUrl}/api/v1/hive/alerts`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        }),\n        axios.get(`${apiUrl}/api/v1/system/insights?project_id=${projectId}`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        })\n    ]);\n\n    if (roadmapRes.status === 'rejected' || !roadmapRes.value.data.success) {\n        throw new Error('Failed to fetch roadmap data');\n    }\n\n    const tasks: RoadmapChunk[] = roadmapRes.value.data.data.roadmap || [];\n    const active = tasks.find(t => t.status === 'IN_PROGRESS') || tasks.find(t => t.status === 'ACTIVE') || null;\n\n    const isRunning = await isDaemonRunning();\n    const logPath = path.join(os.homedir(), '.rigstate', 'logs', 'daemon.out.log');\n    const logs = await tailFile(logPath, 10);\n\n    const hiveStats = (hiveRes.status === 'fulfilled' && hiveRes.value.data.success)\n        ? hiveRes.value.data.data\n        : undefined;\n\n    const nexusAlerts = (alertsRes.status === 'fulfilled' && alertsRes.value.data.success)\n        ? alertsRes.value.data.alerts\n        : [];\n\n    return {\n        roadmap: tasks,\n        activeTask: active,\n        daemonStatus: isRunning,\n        daemonLogs: logs,\n        apiUrl,\n        hiveStats,\n        nexusAlerts,\n        systemInsights: (insightsRes.status === 'fulfilled' && insightsRes.value.data.success)\n            ? insightsRes.value.data.insights\n            : []\n    };\n}\n","import { useState, useCallback } from 'react';\nimport { LogEntry, MonitorState } from './types.js';\nimport { makeLog, parseNlCommand } from './factory.js';\n\nexport function useCommandHandler(\n    addLog: (level: LogEntry['level'], msg: string) => void,\n    fetchData: () => Promise<void>,\n    state: MonitorState,\n    setCommand: (v: string) => void\n) {\n    const [pendingDestructive, setPendingDestructive] = useState<string | null>(null);\n\n    const handleSubmit = useCallback((value: string) => {\n        const trimmed = value.trim();\n        if (!trimmed) return;\n        setCommand('');\n\n        if (pendingDestructive) {\n            if (trimmed.toLowerCase() === 'yes') {\n                addLog('warn', `EXEC: ${pendingDestructive}`);\n            } else {\n                addLog('info', 'Aborted. Command cancelled.');\n            }\n            setPendingDestructive(null);\n            return;\n        }\n\n        addLog('command', `> ${trimmed}`);\n        const cmd = parseNlCommand(trimmed);\n\n        if (cmd.type === 'status') {\n            addLog('frank', `Frank: Daemon ${state.daemonOnline ? 'ONLINE' : 'OFFLINE'} | ${state.stats.completed}/${state.stats.total} done`);\n        } else if (cmd.type === 'refresh') {\n            addLog('info', 'Pulse refresh triggered...');\n            fetchData();\n        } else if (cmd.type === 'navigate') {\n            addLog('info', `Navigate: ${cmd.target}`);\n        } else if (cmd.type === 'antidote_stats') {\n            addLog('hive', `Hive: ${state.hiveStats?.total_antidotes || 0} signals, ${state.hiveStats?.fortress_rules || 0} fortress laws.`);\n            addLog('info', `Avg Trust: ${state.hiveStats?.average_trust_score || 0}/100`);\n        } else if (cmd.type === 'antidote_query') {\n            addLog('hive', `Hive: Searching for \"${cmd.query}\"...`);\n            addLog('info', `Try running 'rigstate antidote query \"${cmd.query}\"' for details.`);\n        } else if (cmd.type === 'confirm_destructive') {\n            addLog('warn', `⚠️ SECURE: \"${trimmed}\" — type 'yes' to confirm.`);\n            setPendingDestructive(trimmed);\n        } else {\n            addLog('frank', `Frank: Processing \"${trimmed}\"...`);\n        }\n    }, [addLog, fetchData, pendingDestructive, state, setCommand]);\n\n    return { handleSubmit, pendingDestructive };\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport Spinner from 'ink-spinner';\nimport { MonitorState } from './types.js';\n\ninterface SystemStatusProps {\n    state: MonitorState;\n}\n\nexport function SystemStatus({ state }: SystemStatusProps) {\n    const { loading, daemonOnline, stats, apiUrl } = state;\n\n    return (\n        <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"blue\" paddingX={1} paddingY={0}>\n            <Text bold color=\"blue\">◈ SYSTEM</Text>\n\n            <Box marginTop={1} flexDirection=\"column\" gap={1}>\n                <Box>\n                    <Text dimColor>Daemon  </Text>\n                    {loading\n                        ? <Text color=\"yellow\"><Spinner type=\"dots\" /> SYNCING</Text>\n                        : daemonOnline\n                            ? <Text color=\"green\">● ONLINE</Text>\n                            : <Text color=\"red\">○ OFFLINE</Text>\n                    }\n                </Box>\n\n                <Box>\n                    <Text dimColor>API     </Text>\n                    <Text color=\"cyan\" dimColor>{apiUrl.replace('https://', '').substring(0, 22)}</Text>\n                </Box>\n\n                <Box>\n                    <Text dimColor>Tasks   </Text>\n                    <Text color=\"green\">{stats.completed}</Text>\n                    <Text dimColor>/{stats.total} done</Text>\n                </Box>\n\n                <Box>\n                    <Text dimColor>Active  </Text>\n                    <Text color=\"yellow\">{stats.active}</Text>\n                    <Text dimColor>  Blocked </Text>\n                    <Text color=\"red\">{stats.blocked}</Text>\n                </Box>\n\n                <Box borderStyle=\"single\" borderColor=\"cyan\" paddingX={1} marginTop={1} flexDirection=\"column\">\n                    <Text color=\"cyan\" bold italic>🧬 HIVE MIND</Text>\n                    <Box gap={1}>\n                        <Text dimColor>Antidotes </Text>\n                        <Text color=\"green\">{state.hiveStats?.total_antidotes || 0}</Text>\n                    </Box>\n                    <Box gap={1}>\n                        <Text dimColor>Fortress  </Text>\n                        <Text color=\"magenta\">{state.hiveStats?.fortress_rules || 0}</Text>\n                    </Box>\n                    <Box gap={1}>\n                        <Text dimColor>Trust     </Text>\n                        <Text color=\"yellow\">{(state.hiveStats?.average_trust_score || 0).toFixed(0)}</Text>\n                    </Box>\n                </Box>\n            </Box>\n        </Box>\n    );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { MonitorState } from './types.js';\nimport { formatProgress } from './factory.js';\n\ninterface ActiveMissionProps {\n    state: MonitorState;\n}\n\nexport function ActiveMission({ state }: ActiveMissionProps) {\n    const { activeTask, stats } = state;\n    const pct = stats.total > 0 ? Math.round((stats.completed / stats.total) * 100) : 0;\n    const bar = formatProgress(stats.completed, stats.total, 24);\n    const desc = activeTask?.description;\n\n    return (\n        <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"magenta\" paddingX={1} paddingY={0}>\n            <Text bold color=\"magenta\">◈ ACTIVE MISSION</Text>\n\n            {activeTask ? (\n                <Box flexDirection=\"column\" marginTop={1} gap={1}>\n                    <Text bold color=\"white\">\n                        {`[T-${activeTask.step_number}] ${activeTask.title}`.substring(0, 52)}\n                    </Text>\n                    <Box gap={2}>\n                        <Text color=\"cyan\">{activeTask.status}</Text>\n                        <Text dimColor>│</Text>\n                        <Text color=\"yellow\">{activeTask.severity}</Text>\n                        <Text dimColor>│</Text>\n                        <Text dimColor>{activeTask.category}</Text>\n                    </Box>\n                    {desc && <Text dimColor>{desc.substring(0, 60)}{desc.length > 60 ? '…' : ''}</Text>}\n                    <Box flexDirection=\"column\">\n                        <Text dimColor>Progress <Text color=\"magenta\" bold>{pct}%</Text></Text>\n                        <Text color=\"cyan\">{bar}</Text>\n                    </Box>\n                </Box>\n            ) : (\n                <Box marginTop={1} flexDirection=\"column\" gap={1}>\n                    <Text color=\"green\">● Nominal. No active mission.</Text>\n                    <Box flexDirection=\"column\">\n                        <Text dimColor>Velocity <Text color=\"magenta\" bold>{pct}%</Text></Text>\n                        <Text color=\"cyan\">{bar}</Text>\n                    </Box>\n                </Box>\n            )}\n        </Box>\n    );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { LogEntry } from './types.js';\n\ninterface DaemonFeedProps {\n    logs: LogEntry[];\n    secureMode: boolean;\n}\n\nconst LEVEL_COLOR: Record<LogEntry['level'], string> = {\n    info: 'gray',\n    warn: 'yellow',\n    error: 'red',\n    command: 'cyan',\n    frank: 'magenta',\n    guardian: 'blue',\n    hive: 'cyan',\n};\n\nconst LEVEL_PREFIX: Record<LogEntry['level'], string> = {\n    info: '  ',\n    warn: '⚠ ',\n    error: '✖ ',\n    command: '» ',\n    frank: 'F ',\n    guardian: 'G ',\n    hive: 'H ',\n};\n\nexport function DaemonFeed({ logs, secureMode }: DaemonFeedProps) {\n    return (\n        <Box\n            flexDirection=\"column\"\n            borderStyle=\"round\"\n            borderColor={secureMode ? 'red' : 'gray'}\n            paddingX={1}\n            paddingY={0}\n            flexGrow={1}\n        >\n            <Box justifyContent=\"space-between\">\n                <Text bold color=\"gray\">◈ DAEMON FEED</Text>\n                {secureMode && <Text bold color=\"red\">⚠ SECURE OVERLAY ACTIVE</Text>}\n            </Box>\n\n            <Box flexDirection=\"column\" marginTop={1}>\n                {logs.slice(-14).map(log => (\n                    <Box key={log.id} gap={1}>\n                        <Text dimColor>{log.timestamp}</Text>\n                        <Text color={LEVEL_COLOR[log.level] as any} bold={log.level === 'warn' || log.level === 'error'}>\n                            {LEVEL_PREFIX[log.level]}{log.message}\n                        </Text>\n                    </Box>\n                ))}\n            </Box>\n        </Box>\n    );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport TextInput from 'ink-text-input';\n\ninterface CommandBarProps {\n    value: string;\n    onChange: (v: string) => void;\n    onSubmit: (v: string) => void;\n    secureMode: boolean;\n}\n\nexport function CommandBar({ value, onChange, onSubmit, secureMode }: CommandBarProps) {\n    return (\n        <Box\n            borderStyle=\"single\"\n            borderColor={secureMode ? 'red' : 'cyan'}\n            paddingX={1}\n        >\n            <Text bold color={secureMode ? 'red' : 'cyan'}>\n                {secureMode ? 'SECURE ▶ ' : 'INSTRUCT ▶ '}\n            </Text>\n            <TextInput\n                value={value}\n                onChange={onChange}\n                onSubmit={onSubmit}\n                placeholder={secureMode\n                    ? \"Type 'yes' to confirm, anything else to abort...\"\n                    : \"Ask Frank... ('status', 'refresh', or natural language)\"\n                }\n            />\n        </Box>\n    );\n}\n","import React, { useState, useEffect } from 'react';\nimport { Box, Text } from 'ink';\nimport { MonitorState, NexusAlert } from './types.js';\n\ninterface NexusAlertsProps {\n    alerts: NexusAlert[];\n}\n\nexport function NexusAlerts({ alerts }: NexusAlertsProps) {\n    const [isVisible, setIsVisible] = useState(true);\n\n    // Blinking effect for CRITICAL alerts\n    useEffect(() => {\n        const hasCritical = alerts.some(a => a.severity === 'CRITICAL');\n        if (!hasCritical) {\n            setIsVisible(true);\n            return;\n        }\n\n        const interval = setInterval(() => {\n            setIsVisible(v => !v);\n        }, 800);\n\n        return () => clearInterval(interval);\n    }, [alerts]);\n\n    if (!alerts || alerts.length === 0) return null;\n\n    const topAlert = alerts[0];\n    const isCritical = topAlert.severity === 'CRITICAL';\n    const color = isCritical ? 'red' : 'yellow';\n\n    return (\n        <Box\n            borderStyle=\"bold\"\n            borderColor={color}\n            paddingX={2}\n            marginBottom={1}\n            flexDirection=\"column\"\n        >\n            <Box gap={2}>\n                <Text\n                    backgroundColor={isVisible ? color : undefined}\n                    color={isVisible ? 'white' : color}\n                    bold\n                    italic\n                >\n                    {isCritical ? ' ☢ NEXUS BREACH ☢ ' : ' ⚡ NEXUS ALERT ⚡ '}\n                </Text>\n                <Text bold color={color}>\n                    {topAlert.title.toUpperCase()}\n                </Text>\n            </Box>\n            <Box marginTop={0}>\n                <Text dimColor italic>\n                    Hive Signal: {topAlert.message.substring(0, 100)}...\n                </Text>\n            </Box>\n        </Box>\n    );\n}\n","import React from 'react';\nimport { Box, Text } from 'ink';\nimport { SystemInsight } from './types.js';\n\ninterface PredictiveInsightsProps {\n    insights: SystemInsight[];\n}\n\nexport const PredictiveInsights: React.FC<PredictiveInsightsProps> = ({ insights }) => {\n    if (!insights || insights.length === 0) return null;\n\n    return (\n        <Box borderStyle=\"round\" borderColor=\"yellow\" flexDirection=\"column\" paddingX={1} marginBottom={1}>\n            <Box gap={1}>\n                <Text bold color=\"yellow\">📊 SENTINEL PREDICTIVE GOVERNANCE</Text>\n                <Text dimColor>│</Text>\n                <Text color=\"yellow\">Alerts: {insights.length}</Text>\n            </Box>\n\n            <Box flexDirection=\"column\" marginTop={1}>\n                {insights.map((insight) => {\n                    const color = insight.severity === 'critical' ? 'red' : insight.severity === 'warning' ? 'yellow' : 'cyan';\n                    return (\n                        <Box key={insight.id} gap={1} marginBottom={1}>\n                            <Text color={color} bold>[{insight.insight_type.toUpperCase()}]</Text>\n                            <Box flexDirection=\"column\">\n                                <Text color=\"white\" bold>{insight.title}</Text>\n                                <Text dimColor italic>{insight.message}</Text>\n                            </Box>\n                        </Box>\n                    );\n                })}\n            </Box>\n        </Box>\n    );\n};\n","import { Command } from 'commander';\nimport axios from 'axios';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { HiveScrubber } from '../hive/scrubber.js';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ninterface AntidoteSignal {\n    title: string;\n    instruction: string;\n    category: 'SECURITY' | 'PERFORMANCE' | 'ARCHITECTURE' | 'MAINTAINABILITY' | 'UX' | 'ACCESSIBILITY';\n    severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';\n    example?: string;\n    anti_example?: string;\n    framework_tags?: string[];\n}\n\n// ─── Sub-commands ─────────────────────────────────────────────────────────────\n\nasync function submitAntidote(signal: AntidoteSignal): Promise<void> {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n\n    // Pre-flight scrub\n    const scrub = HiveScrubber.scrub(signal.instruction);\n    if (scrub.riskScore > 20) {\n        console.error(chalk.red(`🛑 Signal blocked: sensitive data detected (risk: ${scrub.riskScore})`));\n        if (scrub.redactionCount > 0) console.error(chalk.dim(`   Removed ${scrub.redactionCount} sensitive pattern(s)`));\n        process.exit(1);\n    }\n\n    const spinner = ora('Submitting signal to Global Antidote Registry...').start();\n    try {\n        const payload = { ...signal, instruction: scrub.sanitizedContent, projectId };\n        const res = await axios.post(`${apiUrl}/api/v1/antidotes/submit`, payload, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        if (res.data.success) {\n            spinner.succeed(chalk.green(`Signal submitted → ${chalk.bold(res.data.data?.status || 'QUARANTINE')}`));\n            console.log(chalk.dim(`   Trust score: ${res.data.data?.trust_score || 'pending'}`));\n            console.log(chalk.dim(`   It will be reviewed by Sigrid before promotion.`));\n        } else {\n            spinner.fail(chalk.red(res.data.error || 'Submission failed'));\n        }\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Error: ${e.message}`));\n    }\n}\n\nasync function queryAntidotes(searchText: string, category?: string): Promise<void> {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n\n    const spinner = ora('Querying Global Antidote Registry...').start();\n    try {\n        const params: Record<string, string> = { search: searchText };\n        if (category) params.category = category.toUpperCase();\n\n        const res = await axios.get(`${apiUrl}/api/v1/antidotes`, {\n            params,\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        spinner.stop();\n\n        const antidotes: any[] = res.data.data?.antidotes || [];\n        if (antidotes.length === 0) {\n            console.log(chalk.dim('  No antidotes found for your query.'));\n            return;\n        }\n\n        console.log(chalk.bold(`\\n🧬 GLOBAL ANTIDOTE REGISTRY — ${antidotes.length} result(s)\\n`));\n        console.log(chalk.dim('─'.repeat(60)));\n\n        antidotes.forEach((a, i) => {\n            const severityColor = a.severity === 'CRITICAL' ? chalk.red : a.severity === 'HIGH' ? chalk.yellow : chalk.cyan;\n            console.log(`${chalk.bold(`[${i + 1}]`)} ${chalk.white.bold(a.title)}`);\n            console.log(`    ${severityColor(a.severity)} · ${chalk.dim(a.category)} · Trust: ${chalk.green(a.trust_score)}/100`);\n            console.log(`    ${chalk.dim(a.instruction.substring(0, 100))}${a.instruction.length > 100 ? '…' : ''}`);\n            if (a.framework_tags?.length) {\n                console.log(`    ${a.framework_tags.map((t: string) => chalk.blue(`#${t}`)).join(' ')}`);\n            }\n            console.log('');\n        });\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Error: ${e.message}`));\n    }\n}\n\nasync function showAntidoteStats(): Promise<void> {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n\n    const spinner = ora('Fetching Curator Registry statistics...').start();\n    try {\n        const res = await axios.get(`${apiUrl}/api/v1/antidotes/stats`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        spinner.stop();\n        const s = res.data.data;\n        if (!s) { console.log(chalk.dim('No stats available.')); return; }\n\n        console.log(chalk.bold('\\n🏛️  CURATOR REGISTRY STATS\\n'));\n        console.log(chalk.dim('─'.repeat(40)));\n        console.log(`  Total Antidotes    ${chalk.green.bold(s.total_antidotes || 0)}`);\n        console.log(`  Fortress Rules     ${chalk.magenta.bold(s.fortress_rules || 0)}  ${chalk.dim('(immutable)')}`);\n        console.log(`  Pending Review     ${chalk.yellow.bold(s.pending_quarantine || 0)}  ${chalk.dim('(in quarantine)')}`);\n        console.log(`  Avg Trust Score    ${chalk.cyan.bold(s.average_trust_score || 0)}/100`);\n        console.log(chalk.dim('─'.repeat(40)));\n\n        if (s.categories) {\n            console.log(chalk.bold('\\n  By Category:'));\n            Object.entries(s.categories).forEach(([cat, count]) => {\n                console.log(`  ${chalk.dim(cat.padEnd(20))} ${chalk.white(count)}`);\n            });\n        }\n        console.log('');\n    } catch (e: any) {\n        spinner.fail(chalk.red(`Error: ${e.message}`));\n    }\n}\n\n// ─── Command Factory ──────────────────────────────────────────────────────────\n\nexport function createAntidoteCommand(): Command {\n    const cmd = new Command('antidote')\n        .description('Interact with the Global Antidote Registry (cross-org intelligence)');\n\n    cmd.command('submit')\n        .description('Submit a new signal to the Global Antidote Registry')\n        .requiredOption('-t, --title <title>', 'Short descriptive title')\n        .requiredOption('-i, --instruction <text>', 'The canonical instruction (50-2000 chars)')\n        .requiredOption('-c, --category <category>', 'Category: SECURITY | PERFORMANCE | ARCHITECTURE | MAINTAINABILITY | UX')\n        .requiredOption('-s, --severity <severity>', 'Severity: CRITICAL | HIGH | MEDIUM | LOW')\n        .option('-e, --example <code>', 'Good example (what TO do)')\n        .option('-a, --anti-example <code>', 'Bad example (what NOT to do)')\n        .option('-f, --framework-tags <tags>', 'Comma-separated tags e.g. nextjs,react,supabase')\n        .action(async (opts) => {\n            await submitAntidote({\n                title: opts.title,\n                instruction: opts.instruction,\n                category: opts.category.toUpperCase(),\n                severity: opts.severity.toUpperCase(),\n                example: opts.example,\n                anti_example: opts.antiExample,\n                framework_tags: opts.frameworkTags?.split(',').map((t: string) => t.trim()),\n            });\n        });\n\n    cmd.command('query')\n        .description('Search the Global Antidote Registry')\n        .argument('<search>', 'Search text')\n        .option('-c, --category <category>', 'Filter by category')\n        .action(async (search, opts) => {\n            await queryAntidotes(search, opts.category);\n        });\n\n    cmd.command('stats')\n        .description('Show Global Antidote Registry statistics')\n        .action(async () => {\n            await showAntidoteStats();\n        });\n\n    return cmd;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport axios from 'axios';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport inquirer from 'inquirer';\nimport * as diff from 'diff';\nimport { glob } from 'glob';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { readGitignore, shouldIgnore, isCodeFile } from '../utils/files.js';\n\ninterface Vulnerability {\n    id: string;\n    type: string;\n    severity: string;\n    title: string;\n    description: string;\n    line_number?: number;\n    fixed_content?: string;\n    recommendation?: string;\n}\n\nexport function createHealCommand(): Command {\n    return new Command('heal')\n        .description('Automatically apply architectural antidotes to fix local violations')\n        .argument('[path]', 'File or directory to heal', '.')\n        .option('--dry-run', 'Show what would be changed without applying')\n        .option('--yes', 'Automatically apply all fixes without prompting')\n        .action(async (targetPath: string, options: { dryRun?: boolean; yes?: boolean }) => {\n            const spinner = ora('Initializing Sentinel Healing Protocol...').start();\n\n            try {\n                const apiKey = getApiKey();\n                const apiUrl = getApiUrl();\n                const projectId = getProjectId();\n\n                if (!projectId) {\n                    spinner.fail(chalk.red('Project context required. Run `rigstate link` first.'));\n                    return;\n                }\n\n                // NEW: Predictive Governance - Check for Entropy Insights\n                await showPredictiveInsights(apiUrl, apiKey, projectId);\n\n                // 1. Resolve files to scan\n                const scanPath = path.resolve(process.cwd(), targetPath);\n                const gitignorePatterns = await readGitignore(scanPath);\n\n                let stats;\n                try {\n                    stats = await fs.stat(scanPath);\n                } catch (e) {\n                    spinner.fail(chalk.red(`Path not found: ${targetPath}`));\n                    return;\n                }\n\n                let codeFiles: string[] = [];\n\n                if (stats.isFile()) {\n                    codeFiles = [scanPath];\n                } else {\n                    const pattern = path.join(scanPath, '**/*');\n                    const allFiles = await glob(pattern, {\n                        nodir: true,\n                        dot: false,\n                        ignore: ['**/node_modules/**', '**/.git/**', '**/dist/**', '**/build/**', '**/.next/**'],\n                    });\n                    codeFiles = allFiles.filter(f => isCodeFile(f) && !shouldIgnore(path.relative(scanPath, f), gitignorePatterns));\n                }\n\n                if (codeFiles.length === 0) {\n                    spinner.warn(chalk.yellow('No code files found to heal.'));\n                    return;\n                }\n\n                spinner.succeed(chalk.green(`Sentinel is active. Analyzing ${codeFiles.length} files...`));\n\n                let totalHealed = 0;\n\n                for (const filePath of codeFiles) {\n                    const relativePath = path.relative(process.cwd(), filePath);\n                    const fileSpinner = ora(`Scanning ${relativePath}...`).start();\n\n                    try {\n                        const originalContent = await fs.readFile(filePath, 'utf-8');\n\n                        const response = await axios.post(`${apiUrl}/api/v1/audit`, {\n                            content: originalContent,\n                            file_path: relativePath,\n                            project_id: projectId\n                        }, {\n                            headers: { Authorization: `Bearer ${apiKey}` },\n                            timeout: 60000\n                        });\n\n                        const vulns: Vulnerability[] = response.data.vulnerabilities || [];\n                        const fixable = vulns.find(v => v.fixed_content && v.fixed_content !== originalContent);\n\n                        if (fixable && fixable.fixed_content) {\n                            fileSpinner.stop();\n                            console.log(`\\n${chalk.cyan('🧬 ANTIDOTE FOUND')} for ${chalk.bold(relativePath)}`);\n                            console.log(chalk.yellow(`Issue: ${fixable.title}`));\n                            console.log(chalk.dim(fixable.description));\n\n                            if (options.dryRun) {\n                                showDiff(originalContent, fixable.fixed_content, relativePath);\n                                console.log(chalk.blue('Dry-run: No changes applied.'));\n                                continue;\n                            }\n\n                            const shouldApply = options.yes || await askConfirm(originalContent, fixable.fixed_content, relativePath);\n\n                            if (shouldApply) {\n                                await fs.writeFile(filePath, fixable.fixed_content, 'utf-8');\n                                console.log(chalk.green(`✅ Healed: ${relativePath}`));\n                                totalHealed++;\n                            } else {\n                                console.log(chalk.gray(`Skipped: ${relativePath}`));\n                            }\n                        } else {\n                            fileSpinner.succeed(chalk.dim(`${relativePath}: No patterns matched.`));\n                        }\n                    } catch (e: any) {\n                        fileSpinner.fail(chalk.red(`${relativePath}: ${e.message}`));\n                    }\n                }\n\n                console.log(chalk.bold(`\\n✨ Sentinel Report: ${totalHealed} files healed.`));\n\n            } catch (error: any) {\n                spinner.fail(chalk.red(`Healing failed: ${error.message}`));\n            }\n        });\n}\n\nfunction showDiff(oldContent: string, newContent: string, filename: string) {\n    const patch = diff.createTwoFilesPatch(filename, filename, oldContent, newContent);\n    const lines = patch.split('\\n');\n    lines.slice(4).forEach(line => {\n        if (line.startsWith('+')) console.log(chalk.green(line));\n        else if (line.startsWith('-')) console.log(chalk.red(line));\n        else console.log(chalk.dim(line));\n    });\n}\n\nasync function askConfirm(oldContent: string, newContent: string, filename: string): Promise<boolean> {\n    console.log(chalk.bold('\\nProposed Changes:'));\n    showDiff(oldContent, newContent, filename);\n\n    const { confirm } = await inquirer.prompt([\n        {\n            type: 'confirm',\n            name: 'confirm',\n            message: `Apply this antidote to ${filename}?`,\n            default: true\n        }\n    ]);\n\n    return confirm;\n}\n\nasync function showPredictiveInsights(apiUrl: string, apiKey: string, projectId: string) {\n    try {\n        const response = await axios.get(`${apiUrl}/api/v1/system/insights?project_id=${projectId}`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n\n        const insights = response.data.insights || [];\n        if (insights.length > 0) {\n            console.log(chalk.bold.yellow('\\n📊 SENTINEL PREDICTIVE INSIGHTS:'));\n            for (const insight of insights) {\n                const color = insight.severity === 'critical' ? chalk.red : insight.severity === 'warning' ? chalk.yellow : chalk.blue;\n                console.log(color(`[${insight.insight_type.toUpperCase()}] ${insight.title}`));\n                console.log(chalk.dim(`   ${insight.message}\\n`));\n            }\n        }\n    } catch (e) {\n        // Silently skip if insights fail\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport axios from 'axios';\nimport { simpleGit } from 'simple-git';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { isCodeFile } from '../utils/files.js';\n\nconst git = simpleGit();\n\nexport function createCommitCommand(): Command {\n    return new Command('commit')\n        .description('Commit changes with automatic Task ID tagging (Git Trailers)')\n        .argument('[message]', 'Commit message (optional - will auto-generate if omitted)')\n        .option('-a, --all', 'Stage all changes before committing', false)\n        .option('--skip-scan', 'Skip Frank\\'s Pre-check quality gate (not recommended)', false)\n        .action(async (message, options) => {\n            const spinner = ora('Preparing commit...').start();\n            try {\n                const { projectId, apiKey, apiUrl } = getContext();\n\n                // 0. Stage changes if requested (Do this early to capture diff for auto-message)\n                if (options.all) {\n                    spinner.text = 'Staging all changes...';\n                    await git.add('.');\n                }\n\n                // 1. Auto-generate message if missing\n                let finalMessage = message;\n                if (!finalMessage) {\n                    spinner.text = 'Analyzing changes for auto-message...';\n                    const diff = await git.diff(['--cached']);\n\n                    if (!diff) {\n                        spinner.fail(chalk.red('No staged changes detected. Stage files manually or use -a.'));\n                        return;\n                    }\n\n                    try {\n                        const response = await axios.post(\n                            `${apiUrl}/api/v1/agent/scribe/summarize`,\n                            { project_id: projectId, diff },\n                            { headers: { 'Authorization': `Bearer ${apiKey}` }, timeout: 15000 }\n                        );\n                        if (response.data.success) {\n                            finalMessage = response.data.summary;\n                            spinner.info(chalk.dim(`Auto-generated: \"${finalMessage}\"`));\n                            spinner.start();\n                        } else {\n                            throw new Error(response.data.error || 'Unknown API error');\n                        }\n                    } catch (e: any) {\n                        spinner.warn(chalk.yellow(`AI Summarizer failed: ${e.message}. Using fallback.`));\n                        finalMessage = `chore: update ${new Date().toLocaleDateString()}`;\n                        spinner.start();\n                    }\n                }\n\n                // 2. Detect Task ID\n                const contextPath = path.join(process.cwd(), '.rigstate', 'CURRENT_CONTEXT.md');\n                const contextExists = await fs.access(contextPath).then(() => true).catch(() => false);\n\n                let taskId = '';\n                if (contextExists) {\n                    const content = await fs.readFile(contextPath, 'utf-8');\n                    const match = content.match(/\\*\\*ID:\\*\\*\\s*(.+?)(?:\\s|\\n|$)/i);\n                    if (match) taskId = match[1].trim();\n                }\n\n                if (!taskId) {\n                    spinner.warn(chalk.yellow('No active Task ID detected in .rigstate/CURRENT_CONTEXT.md'));\n                }\n\n                // 2. Stage changes if requested\n                if (options.all) {\n                    spinner.text = 'Staging all changes...';\n                    await git.add('.');\n                }\n\n                // 3. Frank's Pre-check (Quality Gate)\n                if (!options.skip_scan) {\n                    spinner.start('🛡️  Frank\\'s Pre-check: Scanning staged files...');\n\n                    const status = await git.status();\n                    const stagedFiles = status.staged.filter(f => isCodeFile(f));\n\n                    if (stagedFiles.length > 0) {\n                        let criticalIssues = 0;\n                        let highIssues = 0;\n\n                        for (const file of stagedFiles) {\n                            spinner.text = `Scanning ${file}...`;\n                            try {\n                                const content = await fs.readFile(path.resolve(process.cwd(), file), 'utf-8');\n                                const response = await axios.post(\n                                    `${apiUrl}/api/v1/audit`,\n                                    { content, file_path: file, project_id: projectId },\n                                    { headers: { 'Authorization': `Bearer ${apiKey}` }, timeout: 10000 }\n                                );\n\n                                const vulnerabilities = response.data.vulnerabilities || [];\n                                vulnerabilities.forEach((v: any) => {\n                                    if (v.severity === 'critical') criticalIssues++;\n                                    if (v.severity === 'high') highIssues++;\n                                });\n                            } catch (e) {\n                                // Skip individual file errors during pre-check to avoid blocking dev\n                            }\n                        }\n\n                        if (criticalIssues > 0 || highIssues > 0) {\n                            spinner.fail(chalk.red(`\\n❌ Quality Gate Failed: Found ${criticalIssues} critical and ${highIssues} high issues.`));\n                            console.log(chalk.dim('Run \"rigstate scan\" for full report. Use --skip-scan to override (guilt-trip included).'));\n                            process.exit(1);\n                        }\n                    }\n                    spinner.succeed('Frank\\'s Pre-check: Clean code detected.');\n                }\n\n                // 4. Construct message with Trailer\n                if (taskId) {\n                    finalMessage = `${finalMessage}\\n\\nRigstate-Task: ${taskId}`;\n                }\n\n                // 5. Execute Commit\n                spinner.start('Executing git commit...');\n                await git.commit(finalMessage);\n\n                spinner.succeed(chalk.green('Changes committed successfully.'));\n                if (taskId) {\n                    console.log(chalk.dim(`   Linked to task: ${taskId} (via Git Trailer)`));\n                }\n\n            } catch (error: any) {\n                spinner.fail(chalk.red(`Commit failed: ${error.message}`));\n                process.exit(1);\n            }\n        });\n}\n\nfunction getContext() {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n\n    if (!projectId) {\n        throw new Error('Project ID missing. Run rigstate link.');\n    }\n\n    // Single source of truth for Auth logging\n    console.log(chalk.dim(`   [Auth] Context: Project ID ${projectId.substring(0, 8)}...`));\n    console.log(chalk.dim(`   [Auth] Endpoint: ${apiUrl}`));\n\n    return { projectId, apiKey, apiUrl };\n}\n","\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { StateAnalyzer, RigstateState } from '../utils/state-analyzer.js';\nimport { execSync } from 'child_process';\nimport inquirer from 'inquirer';\n\nexport function createNextCommand(): Command {\n    return new Command('next')\n        .description('Analyze current state and suggest the next logical step')\n        .action(async () => {\n            const spinner = ora('🛰️  Checking Rigstate State...').start();\n            const state = await StateAnalyzer.analyze();\n            spinner.stop();\n\n            console.log(chalk.bold.blue('\\n🛰️  Rigstate Autopilot (Next Action)'));\n            console.log(chalk.dim('─'.repeat(40)));\n\n            // Print Status Summary\n            printStatus(state);\n            console.log(chalk.dim('─'.repeat(40)));\n\n            const action = getNextAction(state);\n\n            if (action) {\n                console.log(chalk.cyan(`\\n👉 Suggested Next Step:`));\n                console.log(`   ${chalk.bold.yellow(action.command)}`);\n                if (action.reason) {\n                    console.log(chalk.dim(`   (${action.reason})`));\n                }\n\n                const { confirm } = await inquirer.prompt([\n                    {\n                        type: 'confirm',\n                        name: 'confirm',\n                        message: 'Execute this command?',\n                        default: true\n                    }\n                ]);\n\n                if (confirm) {\n                    try {\n                        let finalCommand = action.command;\n\n                        // 🤖 Debug: Log the detected command\n                        // console.log(chalk.dim(`[Debug] Action Command: \"${action.command}\"`));\n\n                        // 🤖 Special Handling for Commit\n                        if (action.command.includes('commit')) {\n                            const { message } = await inquirer.prompt([\n                                {\n                                    type: 'input',\n                                    name: 'message',\n                                    message: 'Enter commit message (empty for auto-generate):',\n                                    validate: () => true // Allow empty\n                                }\n                            ]);\n\n                            if (message.trim()) {\n                                finalCommand = `rigstate commit \"${message}\" -a`;\n                            } else {\n                                finalCommand = `rigstate commit -a`; // Will trigger auto-generate in commit command\n                            }\n                        }\n\n                        console.log(chalk.dim(`\\nRunning: ${finalCommand}...`));\n\n                        // Use the current process executable path\n                        const rigstateBin = process.argv[1];\n                        const subCommand = finalCommand.replace('rigstate ', '');\n\n                        // Execute using the same runner that started this process\n                        const cmd = rigstateBin.endsWith('.ts')\n                            ? `npx tsx ${rigstateBin} ${subCommand}`\n                            : `node ${rigstateBin} ${subCommand}`;\n\n                        execSync(cmd, { stdio: 'inherit' });\n                    } catch (e: any) {\n                        console.error(chalk.red(`\\n❌ Failed to execute: ${e.message}`));\n                    }\n                }\n            } else {\n                console.log(chalk.green('\\n✅ Everything is in sync! No immediate action required.'));\n            }\n        });\n}\n\nfunction printStatus(state: RigstateState) {\n    if (state.activeTaskId) {\n        console.log(`${chalk.green('✅')} Task Detected: ${chalk.bold(state.activeTaskId)}`);\n    } else {\n        console.log(`${chalk.yellow('⚠️')} No active Task ID found.`);\n    }\n\n    if (state.isDaemonRunning) {\n        console.log(`${chalk.green('✅')} Guardian Daemon: Active`);\n    } else {\n        console.log(`${chalk.yellow('⚠️')} Guardian Daemon: ${chalk.bold('Inactive')}`);\n    }\n\n    if (state.gitStatus.isClean) {\n        console.log(`${chalk.green('✅')} Git Status: Clean`);\n    } else {\n        console.log(`${chalk.yellow('⚠️')} Uncommitted Changes: ${chalk.bold(state.gitStatus.modifiedFiles.length)} files`);\n    }\n\n    if (state.hasPlan) {\n        const progress = state.checklist.total > 0\n            ? Math.round((state.checklist.completed / state.checklist.total) * 100)\n            : 0;\n        console.log(`${chalk.green('✅')} Progress: ${progress}% (${state.checklist.completed}/${state.checklist.total} items)`);\n    }\n}\n\ninterface Action {\n    command: string;\n    reason: string;\n}\n\nfunction getNextAction(state: RigstateState): Action | null {\n    // 1. No Plan -> Create Plan\n    if (!state.hasPlan) {\n        return {\n            command: 'rigstate plan',\n            reason: 'You need an implementation plan to start working.'\n        };\n    }\n\n    // 2. Plan exists, but no Task ID -> Add Task ID\n    if (!state.activeTaskId) {\n        return {\n            command: 'rigstate work list',\n            reason: 'You have a plan but no active task ID is associated with it.'\n        };\n    }\n\n    // 3. Task ID exists, but Daemon is not running -> Start Work\n    if (!state.isDaemonRunning) {\n        return {\n            command: `rigstate work start ${state.activeTaskId}`,\n            reason: 'The task is defined but the Guardian Daemon is not watching your progress.'\n        };\n    }\n\n    // 4. Uncommitted Changes -> Commit\n    if (!state.gitStatus.isClean) {\n        return {\n            command: 'rigstate commit',\n            reason: 'You have modified files that should be logged to the Sovereign Audit Trail.'\n        };\n    }\n\n    // 5. Checklist items pending -> Continue Coding\n    if (state.checklist.completed < state.checklist.total) {\n        const nextTask = state.checklist.pending[0];\n        return {\n            command: 'Code!',\n            reason: `You have ${state.checklist.total - state.checklist.completed} pending items. Next: \"${nextTask}\"`\n        };\n    }\n\n    // 6. Everything done and committed -> Finish Task\n    if (state.checklist.completed === state.checklist.total && state.gitStatus.isClean) {\n        return {\n            command: `rigstate work finish ${state.activeTaskId}`,\n            reason: 'All checklist items are completed and your workspace is clean. Time to archive.'\n        };\n    }\n\n    return null;\n}\n","\nimport * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { simpleGit } from 'simple-git';\nimport { parseMarkdownChecklist, ChecklistItem } from './markdown-parser.js';\n\nexport interface RigstateState {\n    hasPlan: boolean;\n    planPath: string | null;\n    activeTaskId: string | null;\n    isDaemonRunning: boolean;\n    gitStatus: {\n        isClean: boolean;\n        modifiedFiles: string[];\n    };\n    checklist: {\n        total: number;\n        completed: number;\n        pending: string[];\n    };\n}\n\nexport class StateAnalyzer {\n    private static PID_FILE = '.rigstate/daemon.pid';\n\n    static async analyze(cwd: string = process.cwd()): Promise<RigstateState> {\n        const git = simpleGit(cwd);\n        const status = await git.status();\n\n        // 1. Find the plan and task ID\n        let planPath: string | null = null;\n        let activeTaskId: string | null = null;\n        let checklist: ChecklistItem[] = [];\n\n        const files = await fs.readdir(cwd);\n        const planFile = files.find(f => f.startsWith('IMPLEMENTATION_PLAN') && f.endsWith('.md'));\n\n        if (planFile) {\n            planPath = path.join(cwd, planFile);\n            const content = await fs.readFile(planPath, 'utf-8');\n\n            // Extract Task ID\n            const idMatch = content.match(/\\*\\*(?:Task ID|ID):\\*\\*\\s*(.+?)(?:\\s|\\n|$)/i);\n            if (idMatch) {\n                activeTaskId = idMatch[1].trim();\n            }\n\n            // Parse Checklist\n            checklist = parseMarkdownChecklist(content);\n        }\n\n        // 2. Check Daemon\n        let isDaemonRunning = false;\n        try {\n            const pidPath = path.join(cwd, this.PID_FILE);\n            const content = await fs.readFile(pidPath, 'utf-8');\n            const pid = parseInt(content.trim(), 10);\n            process.kill(pid, 0); // Check if process exists\n            isDaemonRunning = true;\n        } catch {\n            isDaemonRunning = false;\n        }\n\n        return {\n            hasPlan: !!planPath,\n            planPath,\n            activeTaskId,\n            isDaemonRunning,\n            gitStatus: {\n                isClean: status.isClean(),\n                modifiedFiles: status.modified.concat(status.not_added)\n            },\n            checklist: {\n                total: checklist.length,\n                completed: checklist.filter(c => c.checked).length,\n                pending: checklist.filter(c => !c.checked).map(c => c.text)\n            }\n        };\n    }\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport axios from 'axios';\nimport boxen from 'boxen';\nimport { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\n\nexport function createHistoryCommand(): Command {\n    return new Command('history')\n        .description('View the audit trail and architectural history of a task')\n        .argument('[taskId]', 'Task ID (e.g. T-10) or UUID')\n        .action(async (taskId) => {\n            const spinner = ora('Retrieving history...').start();\n            try {\n                const { projectId, apiKey, apiUrl } = getContext();\n\n                // 1. Resolve Task ID (same logic as plan.ts)\n                let realTaskId = taskId;\n                if (!taskId) {\n                    const contextPath = path.join(process.cwd(), '.rigstate', 'CURRENT_CONTEXT.md');\n                    const contextExists = await fs.access(contextPath).then(() => true).catch(() => false);\n                    if (contextExists) {\n                        const content = await fs.readFile(contextPath, 'utf-8');\n                        const match = content.match(/\\*\\*ID:\\*\\*\\s*(.+?)(?:\\s|\\n|$)/i);\n                        if (match) realTaskId = match[1].trim();\n                    }\n                }\n\n                if (!realTaskId) {\n                    spinner.fail(chalk.red('No Task ID provided and no active context found.'));\n                    return;\n                }\n\n                // 2. Fetch Plan and Post-Mortem\n                spinner.text = `Fetching audit trail for ${realTaskId}...`;\n\n                // Resolve UUID\n                const lookup = await axios.get(`${apiUrl}/api/v1/roadmap?project_id=${projectId}`, {\n                    headers: { Authorization: `Bearer ${apiKey}` }\n                });\n                const task = lookup.data.data.roadmap.find((t: any) =>\n                    t.id === realTaskId || `T-${t.step_number}` === realTaskId || t.step_number.toString() === realTaskId\n                );\n\n                if (!task) throw new Error(`Task ${realTaskId} not found.`);\n\n                // 3. Display TUI\n                spinner.stop();\n\n                const header = chalk.bold.blue(`📜 Audit Trail: ${task.title} (T-${task.step_number})`);\n                const statusStr = task.status === 'COMPLETED' ? chalk.green('COMPLETED') : chalk.yellow(task.status);\n\n                let output = `Status: ${statusStr}\\n`;\n                output += `Created: ${new Date(task.created_at).toLocaleString()}\\n`;\n                if (task.completed_at) output += `Finished: ${new Date(task.completed_at).toLocaleString()}\\n`;\n\n                output += `\\n${chalk.bold('--- Initial Intent ---')}\\n`;\n                const planPath = path.join(process.cwd(), '.rigstate', 'plans', `t-${task.step_number}.md`);\n                const planExists = await fs.access(planPath).then(() => true).catch(() => false);\n\n                if (planExists) {\n                    const planContent = await fs.readFile(planPath, 'utf-8');\n                    // Simple extraction of the analysis part\n                    const analysisMatch = planContent.match(/## 1\\. 🔍 Analysis([\\s\\S]+?)##/);\n                    output += analysisMatch ? analysisMatch[1].trim() : 'Plan archive found, but analysis section missing.';\n                } else {\n                    output += chalk.dim('No local plan archive found.');\n                }\n\n                if (task.post_mortem) {\n                    output += `\\n\\n${chalk.bold.magenta('--- Post-Mortem (Scribe Analysis) ---')}\\n`;\n                    output += task.post_mortem;\n                } else if (task.status === 'COMPLETED') {\n                    output += `\\n\\n${chalk.yellow('⚠ This task was completed before Phase 2.2. No post-mortem available.')}`;\n                } else {\n                    output += `\\n\\n${chalk.dim('Task is still in progress. Post-mortem will be generated on finish.')}`;\n                }\n\n                console.log(boxen(output, {\n                    padding: 1,\n                    margin: 1,\n                    borderStyle: 'round',\n                    borderColor: 'blue',\n                    title: header\n                }));\n\n            } catch (error: any) {\n                spinner.fail(chalk.red(`Failed to retrieve history: ${error.message}`));\n            }\n        });\n}\n\nfunction getContext() {\n    const apiKey = getApiKey();\n    const apiUrl = getApiUrl();\n    const projectId = getProjectId();\n    if (!projectId) throw new Error('Project ID missing.');\n    return { projectId, apiKey, apiUrl };\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getProjectId, getApiUrl } from '../utils/config.js';\nimport { loadManifest } from '../utils/manifest.js';\nimport { detectCurrentIDE, autoRegisterMCP } from '../utils/ide.js';\nimport { verifySovereignty, displayPreFlightReport } from '../utils/sovereignty.js';\nimport { enableDaemon, isDaemonRunning } from '../utils/service-manager.js';\n\nexport function createBootCommand() {\n    return new Command('boot')\n        .description('🚀 The ultimate takeoff command. Orchestrates Auth, Sync, Rules, Daemon and Monitor.')\n        .option('--skip-check', 'Skip sovereign pre-flight check')\n        .option('--no-mcp', 'Skip MCP auto-registration')\n        .action(async (options) => {\n            console.log(chalk.bold.hex('#6366f1')('\\n🌌 Rigstate Taking Off...\\n'));\n            const spinner = ora();\n\n            try {\n                // 1. Identity Check\n                let apiKey: string;\n                try {\n                    apiKey = getApiKey();\n                    console.log(`${chalk.green('✔')} Identity verified.`);\n                } catch (e) {\n                    console.log(`${chalk.yellow('⚠')} Identity missing. Starting login flow...`);\n                    // In a real CLI we would call the login command here\n                    console.log(chalk.dim('  (Run \"rigstate login\" to authenticate)'));\n                    return;\n                }\n\n                const apiUrl = getApiUrl();\n                let projectId = getProjectId();\n\n                // 2. Project Context\n                const manifest = await loadManifest();\n                if (manifest?.project_id) {\n                    projectId = manifest.project_id;\n                }\n\n                if (!projectId) {\n                    console.log(`${chalk.yellow('⚠')} No project linked. Starting initialization...`);\n                    // In a real CLI we would trigger 'init'\n                    console.log(chalk.dim('  (Run \"rigstate init\" to link a project)'));\n                    return;\n                }\n\n                // 3. Sovereign Pre-flight Check\n                if (!options.skipCheck) {\n                    const report = await verifySovereignty(apiUrl, apiKey, projectId);\n                    displayPreFlightReport(report);\n\n                    if (!report.hasSecrets || !report.isRepo) {\n                        console.log(chalk.red('🛑 Flight aborted. Environment is not Sovereign-ready.'));\n                        console.log(chalk.dim('   Fix the issues above and try again.'));\n                        return;\n                    }\n                }\n\n                // 4. Sync Context & Rules\n                spinner.start('Synchronizing Intelligence & Rules...');\n                const { syncNexus, checkArchitectureDrift } = await import('../utils/nexus.js');\n\n                // Simulate sync results or call actual logic if ready\n                await new Promise(resolve => setTimeout(resolve, 500));\n                spinner.succeed('Intelligence & Rules synchronized.');\n\n                // 4b. Nexus Registry Sync & Digital Archive\n                await syncNexus(apiUrl, apiKey, projectId, process.cwd());\n                await checkArchitectureDrift(apiUrl, apiKey, projectId, process.cwd());\n\n                // 5. IDE & MCP Integration\n                if (!options.noMcp) {\n                    spinner.start('Integrating with IDE...');\n                    const registered = await autoRegisterMCP(apiUrl, apiKey);\n                    if (registered) {\n                        spinner.succeed('MCP Server registered with IDE.');\n                    } else {\n                        spinner.info('MCP auto-registration skipped (generic IDE or unsupported platform).');\n                    }\n                }\n\n                // 6. Guardian Daemon\n                const daemonActive = await isDaemonRunning();\n                if (!daemonActive) {\n                    spinner.start('Activating Guardian Daemon...');\n                    await enableDaemon();\n                    spinner.succeed('Guardian Daemon is now watching.');\n                } else {\n                    console.log(`${chalk.green('✔')} Guardian Daemon is already active.`);\n                }\n\n                // 7. Launch Mission Control\n                console.log(chalk.bold.green('\\n🚀 Takeoff Successful! Entering Mission Control...\\n'));\n\n                // In a real CLI, we would exec 'rigstate monitor'\n                // For now, we'll provide a clear instruction\n                console.log(chalk.cyan('   Run \"rigstate monitor\" to see Frank in action.'));\n\n            } catch (error: any) {\n                spinner.fail(chalk.red('Takeoff failed: ' + error.message));\n            }\n        });\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport chalk from 'chalk';\n\nexport type IDEType = 'cursor' | 'windsurf' | 'vscode' | 'unknown';\n\n/**\n * Detects the IDE currently in use based on file system markers and active processes.\n */\nexport async function detectCurrentIDE(): Promise<IDEType> {\n    const cwd = process.cwd();\n\n    // 1. Check for directory markers\n    const markers: Record<string, IDEType> = {\n        '.cursor': 'cursor',\n        '.windsurf': 'windsurf',\n        '.vscode': 'vscode'\n    };\n\n    for (const [marker, type] of Object.entries(markers)) {\n        try {\n            const stats = await fs.stat(path.join(cwd, marker));\n            if (stats.isDirectory()) return type;\n        } catch {\n            continue;\n        }\n    }\n\n    // 2. Check for environment variables (some IDEs set these)\n    if (process.env.TERM_PROGRAM === 'vscode') {\n        // Unfortunately Cursor also identifies as vscode here sometimes\n        // We can check for specific Cursor variables if they exist\n        if (process.env.CURSOR_VERSION) return 'cursor';\n        return 'vscode';\n    }\n\n    // 3. Process check (platform dependent)\n    if (process.platform === 'darwin' || process.platform === 'linux') {\n        try {\n            const ps = execSync('ps aux', { stdio: 'pipe' }).toString();\n            if (ps.includes('Cursor.app') || ps.includes('cursor-server')) return 'cursor';\n            if (ps.includes('Windsurf.app') || ps.includes('windsurf-server')) return 'windsurf';\n        } catch {\n            // ps command failed\n        }\n    }\n\n    return 'unknown';\n}\n\n/**\n * Automatically registers the MCP server with the detected IDE.\n */\nexport async function autoRegisterMCP(apiUrl: string, apiKey: string): Promise<boolean> {\n    const ide = await detectCurrentIDE();\n    if (ide === 'unknown') return false;\n\n    console.log(chalk.dim(`  Detected IDE: ${chalk.cyan(ide)}`));\n\n    // Mapping of IDEs to their config paths\n    const home = process.env.HOME || '';\n    if (!home) return false;\n\n    let configPath = '';\n\n    if (ide === 'cursor') {\n        // macOS Cursor config path\n        configPath = path.join(home, 'Library/Application Support/Cursor/User/globalStorage/pro.db.cursor.mcp/mcp.json');\n    } else if (ide === 'windsurf') {\n        // macOS Windsurf config path\n        configPath = path.join(home, 'Library/Application Support/Windsurf/User/globalStorage/pro.db.windsurf.mcp/mcp.json');\n    }\n\n    if (!configPath) {\n        console.log(chalk.yellow(`  ⚠ Auto-registration for ${ide} not yet implemented for this platform.`));\n        return false;\n    }\n\n    try {\n        // Ensure directory exists\n        await fs.mkdir(path.dirname(configPath), { recursive: true });\n\n        let config: any = { mcpServers: {} };\n        try {\n            const content = await fs.readFile(configPath, 'utf-8');\n            config = JSON.parse(content);\n        } catch {\n            // New config\n        }\n\n        // Add or update Rigstate MCP\n        config.mcpServers = config.mcpServers || {};\n        config.mcpServers.rigstate = {\n            command: 'npx',\n            args: ['-y', '@rigstate/mcp'],\n            env: {\n                RIGSTATE_API_URL: apiUrl,\n                RIGSTATE_API_KEY: apiKey\n            },\n            disabled: false\n        };\n\n        await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');\n        return true;\n    } catch (error: any) {\n        console.log(chalk.red(`  ❌ Failed to register MCP for ${ide}: ${error.message}`));\n        return false;\n    }\n}\n","import fs from 'fs/promises';\nimport path from 'path';\nimport chalk from 'chalk';\nimport axios from 'axios';\n\nexport interface SovereigntyReport {\n    isAuthentic: boolean;\n    isSynced: boolean;\n    hasSecrets: boolean;\n    isRepo: boolean;\n    missingKeys: string[];\n}\n\n/**\n * Validates the project environment for \"Sovereign-readiness\".\n */\nexport async function verifySovereignty(apiUrl: string, apiKey: string, projectId: string): Promise<SovereigntyReport> {\n    const report: SovereigntyReport = {\n        isAuthentic: !!apiKey,\n        isSynced: false,\n        hasSecrets: false,\n        isRepo: false,\n        missingKeys: []\n    };\n\n    // 1. Check if it's a git repo\n    try {\n        await fs.access(path.join(process.cwd(), '.git'));\n        report.isRepo = true;\n    } catch {\n        report.isRepo = false;\n    }\n\n    // 2. Check .env.local for required keys\n    try {\n        const envPath = path.join(process.cwd(), '.env.local');\n        const content = await fs.readFile(envPath, 'utf-8');\n\n        const requiredKeys = [\n            'NEXT_PUBLIC_SUPABASE_URL',\n            'NEXT_PUBLIC_SUPABASE_ANON_KEY',\n            'SUPABASE_SERVICE_ROLE_KEY'\n        ];\n\n        for (const key of requiredKeys) {\n            if (!content.includes(key)) {\n                report.missingKeys.push(key);\n            }\n        }\n\n        report.hasSecrets = report.missingKeys.length === 0;\n    } catch {\n        report.hasSecrets = false;\n        report.missingKeys.push('.env.local is missing');\n    }\n\n    // 3. Check connectivity and sync status\n    try {\n        const response = await axios.get(`${apiUrl}/api/v1/projects/${projectId}/health`, {\n            headers: { Authorization: `Bearer ${apiKey}` }\n        });\n        report.isSynced = response.data.success && response.data.data?.is_synced;\n    } catch {\n        report.isSynced = false;\n    }\n\n    return report;\n}\n\n/**\n * Displays the pre-flight check list.\n */\nexport function displayPreFlightReport(report: SovereigntyReport) {\n    console.log(chalk.bold('\\n🛡️  Sovereign Pre-flight Check\\n'));\n\n    const printItem = (label: string, success: boolean, hint?: string) => {\n        const icon = success ? chalk.green('✔') : chalk.red('✘');\n        console.log(`${icon} ${label}`);\n        if (!success && hint) {\n            console.log(chalk.dim(`  └─ ${hint}`));\n        }\n    };\n\n    printItem('Identity (Auth)', report.isAuthentic, 'Run \"rigstate login\"');\n    printItem('Environment Secrets', report.hasSecrets, report.missingKeys.join(', '));\n    printItem('Git Repository', report.isRepo, 'Run \"git init\"');\n    printItem('Nexus Synchronization', report.isSynced, 'Run \"rigstate sync\"');\n\n    console.log('');\n}\n","{\n    \"name\": \"@rigstate/cli\",\n    \"version\": \"0.7.40\",\n    \"description\": \"Rigstate CLI - Code audit, sync and supervision tool\",\n    \"type\": \"module\",\n    \"main\": \"./dist/index.js\",\n    \"bin\": {\n        \"rigstate\": \"dist/index.js\"\n    },\n    \"scripts\": {\n        \"dev\": \"tsup --watch\",\n        \"build\": \"tsup\",\n        \"lint\": \"tsc --noEmit\",\n        \"start\": \"node dist/index.js\",\n        \"test\": \"node dist/index.js --help\"\n    },\n    \"dependencies\": {\n        \"@rigstate/rules-engine\": \"^0.6.1\",\n        \"@rigstate/shared\": \"^0.7.3\",\n        \"@types/diff\": \"^7.0.2\",\n        \"@types/inquirer\": \"^9.0.9\",\n        \"axios\": \"^1.6.5\",\n        \"boxen\": \"^8.0.1\",\n        \"chalk\": \"^5.3.0\",\n        \"chokidar\": \"^3.6.0\",\n        \"commander\": \"^12.0.0\",\n        \"conf\": \"^12.0.0\",\n        \"diff\": \"^4.0.2\",\n        \"dotenv\": \"^16.4.1\",\n        \"glob\": \"^10.3.10\",\n        \"ink\": \"^6.8.0\",\n        \"ink-spinner\": \"^5.0.0\",\n        \"ink-text-input\": \"^6.0.0\",\n        \"inquirer\": \"^9.3.8\",\n        \"ora\": \"^8.0.1\",\n        \"react\": \"^19.2.3\",\n        \"simple-git\": \"^3.31.1\",\n        \"uuid\": \"^9.0.1\"\n    },\n    \"devDependencies\": {\n        \"@types/node\": \"^20.11.5\",\n        \"@types/react\": \"^19.2.14\",\n        \"@types/uuid\": \"^10.0.0\",\n        \"tsup\": \"^8.0.1\",\n        \"typescript\": \"^5.3.3\"\n    },\n    \"engines\": {\n        \"node\": \">=18.0.0\"\n    },\n    \"keywords\": [\n        \"rigstate\",\n        \"cli\",\n        \"audit\",\n        \"security\",\n        \"code-quality\",\n        \"supervisor\"\n    ],\n    \"author\": \"Rigstate\",\n    \"license\": \"MIT\",\n    \"publishConfig\": {\n        \"access\": \"public\"\n    }\n}"],"mappings":"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","names":["path","fs","chalk","Conf","path","fsSync","fs","import_fs","import_path","chalk","ora","axios","path","fs","loadManifest","import_commander","import_chalk","import_promises","import_path","ora","axios","chalk","fs","path","import_commander","import_chalk","import_ora","import_axios","chalk","loadManifest","ora","axios","saveManifest","import_commander","import_chalk","import_ora","import_axios","axios","chalk","import_chalk","import_axios","axios","chalk","path","fs","import_axios","import_promises","import_path","import_chalk","path","fs","config","chalk","import_promises","import_path","import_chalk","InterventionLevel","fs","path","axios","chalk","getGovernanceConfig","setSoftLock","InterventionLevel","import_promises","import_path","import_chalk","import_axios","exports","exports","exports","exports","os","path","exports","module","exports","module","exports","module","exports","node","exports","module","exports","module","exports","module","max","diff","exports","module","exports","module","exports","module","exports","module","exports","module","index","exports","module","require_constants","exports","module","path","require_utils","exports","path","exports","module","glob","require_parse","exports","module","opts","value","rest","source","exports","module","path","glob","state","require_picomatch","exports","module","exports","module","glob","exports","path","pattern","exports","module","exports","exports","require_utils","exports","fs","path","exports","exports","path","exports","path","require_fs","exports","fs","exports","fs","exports","path","exports","module","exports","module","queueMicrotask","require_constants","exports","require_fs","exports","require_utils","exports","fs","exports","require_async","exports","readdir","path","require_sync","exports","readdir","require_fs","exports","fs","require_settings","exports","path","fs","require_out","exports","path","exports","module","exports","module","errorHandler","context","resolve","require_common","exports","exports","require_async","exports","require_async","exports","require_stream","exports","require_sync","exports","require_sync","exports","require_settings","exports","path","require_out","exports","require_reader","exports","path","require_stream","exports","resolve","require_async","exports","resolve","exports","exports","exports","exports","exports","require_entry","exports","exports","path","require_async","exports","require_stream","exports","require_sync","exports","require_sync","exports","require_settings","exports","fs","os","require_out","exports","module","FastGlob","posix","escapePath","convertPathToPattern","win32","glob","fs","path","crypto","import_promises","import_crypto","import_path","chalk","axios","import_axios","import_chalk","import_commander","import_chalk","import_chalk","chalk","import_commander","import_promises","import_path","import_chalk","path","os","fs","config","cwd","chalk","inquirer","axios","saveManifest","syncEnv","syncProjectRules","checkGenesisStatus","triggerGenesis","suggestNextMove","PRE_COMMIT_SCRIPT","import_commander","import_chalk","import_ora","import_axios","import_promises","import_path","import_promises","import_path","path","fs","ora","chalk","path","fs","axios","import_commander","import_chalk","import_ora","import_axios","import_glob","import_promises","import_path","ora","chalk","path","fs","axios","diff","inquirer","import_commander","import_chalk","import_ora","import_axios","import_promises","import_path","ora","loadManifest","axios","path","fs","saveManifest","chalk","provisionSkills","generateSkillsDiscoveryBlock","runGuardianWatchdog","import_commander","import_chalk","import_promises","import_path","import_ora","import_axios","ora","chalk","inquirer","axios","saveManifest","fs","path","import_commander","import_chalk","import_ora","import_axios","import_glob","import_promises","import_path","import_child_process","import_promises","import_path","import_chalk","path","fs","chalk","CACHE_FILE","ora","chalk","axios","path","isCodeFile","fs","import_commander","import_chalk","import_promises","import_path","path","fs","chalk","import_commander","import_chalk","import_ora","import_promises","import_path","import_chalk","fs","import_path","import_events","import_path","isCodeFile","path","import_promises","import_path","import_axios","path","axios","import_chalk","fs","path","chalk","import_axios","import_chalk","import_promises","import_path","CACHE_FILE","CACHE_TTL_MS","axios","saveCachedRules","chalk","loadCachedRules","path","fs","import_axios","import_events","axios","import_axios","axios","import_chalk","chalk","import_events","import_path","import_promises","import_axios","config","path","chokidar","fs","axios","crypto","import_path","fs","path","import_path","import_axios","config","path","axios","fs","path","import_axios","config","axios","config","chalk","path","config","import_chalk","import_promises","import_path","import_child_process","chalk","path","fs","ora","path","fs","chalk","import_commander","import_chalk","import_ora","import_axios","import_inquirer","import_promises","import_path","import_commander","import_chalk","import_ora","import_axios","import_promises","import_path","import_inquirer","ora","axios","chalk","inquirer","path","fs","ora","getContext","axios","chalk","inquirer","path","fs","git","diff","import_commander","import_chalk","import_ora","import_chokidar","import_promises","import_path","import_child_process","import_axios","watch","chalk","loadManifest","config","axios","path","fs","ora","chokidar","import_commander","import_chalk","import_ora","import_axios","import_child_process","ora","chalk","loadManifest","axios","import_commander","import_chalk","config","chalk","import_commander","import_chalk","import_child_process","import_path","import_fs","import_url","__filename","path","fs","chalk","import_commander","import_chalk","import_events","import_axios","import_chalk","chalk","axios","EventEmitter","uuidv4","import_inquirer","chalk","inquirer","import_commander","import_chalk","import_axios","chalk","axios","import_commander","import_chalk","import_ora","import_axios","import_inquirer","chalk","inquirer","ora","axios","import_commander","import_chalk","import_ora","import_inquirer","import_promises","import_path","import_simple_git","ora","getContext","path","fs","chalk","inquirer","import_commander","import_chalk","import_ora","import_axios","ora","chalk","axios","import_commander","import_chalk","import_ora","import_inquirer","ora","chalk","inquirer","resolve","import_commander","import_chalk","fs","path","import_crypto","chalk","import_commander","import_chalk","stats","chalk","import_commander","import_ink","import_react","import_ink","import_react","import_axios","import_path","import_os","axios","isRunning","path","os","import_react","Spinner","import_ink","import_jsx_runtime","import_ink","import_jsx_runtime","import_ink","import_jsx_runtime","TextInput","import_react","import_ink","import_jsx_runtime","import_ink","import_jsx_runtime","import_jsx_runtime","import_chalk","chalk","React","import_commander","import_axios","import_chalk","import_ora","chalk","ora","axios","import_commander","import_chalk","import_ora","import_axios","import_promises","import_path","import_inquirer","import_glob","ora","chalk","path","fs","axios","inquirer","import_commander","import_chalk","import_ora","import_promises","import_path","import_axios","import_simple_git","git","ora","getContext","diff","chalk","axios","path","fs","import_commander","import_chalk","import_ora","fs","path","import_simple_git","git","isDaemonRunning","import_child_process","import_inquirer","ora","chalk","inquirer","import_commander","import_chalk","import_ora","import_promises","import_path","import_axios","ora","getContext","path","fs","chalk","axios","boxen","import_commander","import_chalk","import_ora","import_promises","import_path","import_child_process","import_chalk","fs","path","chalk","config","import_promises","import_path","import_chalk","import_axios","fs","path","axios","chalk","chalk","ora","syncNexus","checkArchitectureDrift","resolve","dotenv","chalk"]}