@rigstate/cli 0.6.9 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5712 -92
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5726 -90
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/council.ts +69 -0
- package/src/commands/daemon.ts +12 -14
- package/src/commands/idea.ts +2 -1
- package/src/commands/release.ts +112 -0
- package/src/commands/roadmap.ts +81 -0
- package/src/daemon/file-watcher.ts +16 -34
- package/src/index.ts +7 -2
- package/tsup.config.ts +4 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/utils/config.ts","../src/commands/env.ts","../src/commands/sync-rules.ts","../src/commands/suggest.ts","../src/commands/hooks.ts","../src/utils/skills-provisioner.ts","../src/utils/governance.ts","../src/utils/watchdog.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/utils/manifest.ts","../src/commands/check.ts","../src/utils/rule-engine.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/commands/work.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/utils/logger.ts","../src/commands/override.ts","../src/utils/version.ts","../src/commands/idea.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import Conf from 'conf';\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: 'http://localhost:3000',\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 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 return config.get('projectId');\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\n * Priority: Environment variable > Stored config > Production default\n */\nexport function getApiUrl(): string {\n // 1. Check environment variable first\n if (process.env.RIGSTATE_API_URL) {\n return process.env.RIGSTATE_API_URL;\n }\n // 2. Check stored config\n const storedUrl = config.get('apiUrl');\n if (storedUrl) {\n return storedUrl;\n }\n // 3. Default to production\n return 'https://app.rigstate.com';\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","/* 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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\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): 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 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\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","\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","/**\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","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","\n\nimport { 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 { checkVersion } from './utils/version.js';\nimport dotenv from 'dotenv';\n\nimport { createIdeaCommand } from './commands/idea.js';\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('0.2.0');\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());\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 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 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';\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 (Rigstate v2.7)\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 if (overrideId !== projectId) {\n console.warn(chalk.yellow(`Global override detected. Enforcing project ID: ${overrideId}`));\n projectId = overrideId;\n }\n }\n }\n } catch (e) { }\n\n const manifestPath = path.join(process.cwd(), '.rigstate');\n\n const content = {\n project_id: projectId,\n api_url: process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000',\n linked_at: new Date().toISOString()\n };\n\n try {\n await fs.writeFile(manifestPath, JSON.stringify(content, null, 2), 'utf-8');\n console.log(chalk.green(`✔ Linked to project ID: ${projectId}`));\n console.log(chalk.dim(`Created local context manifest at .rigstate`));\n\n // === SMART AUTOMATION ===\n console.log('');\n console.log(chalk.bold('🤖 Rigstate Automation Detected'));\n console.log('');\n\n const { getApiKey, getApiUrl } = await import('../utils/config.js');\n const apiKey = getApiKey(); // Might throw if not logged in\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\n console.log(chalk.blue('🛡️ Checking immunity system...'));\n await installHooks(process.cwd());\n\n console.log('');\n console.log(chalk.bold.green('🚀 Link Complete! Your environment is ready.'));\n\n // 4. Tactical Suggestion (The First Move)\n const { suggestNextMove } = await import('./suggest.js');\n await suggestNextMove(projectId, apiKey, apiUrl);\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 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 const { installHooks: runInstall } = await import('./hooks.js');\n // We need to mock the command context or extract logic. \n // For simplicity/robustness in this iteration, let's just suggest it or verify\n\n // Simpler approach: Check if pre-commit exists\n const preCommitPath = path.join(cwd, '.git/hooks/pre-commit');\n try {\n await fs.access(preCommitPath);\n console.log(chalk.green(' ✔ Git hooks already active'));\n } catch {\n console.log(chalk.yellow(' ⚠️ Git hooks missing. Run \"rigstate hooks install\" to secure repo.'));\n }\n\n } catch (e) {\n // Ignore hook errors during link\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 { 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","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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(manifestContent);\n if (manifest.project_id) projectId = manifest.project_id;\n } catch (e) { }\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 manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = {\n project_id: projectId,\n project_name: project,\n last_synced: timestamp,\n api_url: apiUrl\n };\n await fs.writeFile(manifestPath, JSON.stringify(manifestContent, null, 2), 'utf-8');\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 manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = {\n project_id: projectId,\n last_linked: new Date().toISOString(),\n api_url: apiUrl\n };\n await fs.writeFile(manifestPath, JSON.stringify(manifestContent, null, 2), 'utf-8');\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","import fs from 'fs/promises';\nimport path from 'path';\n\nexport interface RigstateManifest {\n project_id: string;\n api_url?: string;\n linked_at?: string;\n}\n\nexport async function loadManifest(): Promise<RigstateManifest | null> {\n try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\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 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';\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\n if (await isRunning()) {\n console.log(chalk.yellow('⚠ Another daemon instance may be running.'));\n console.log(chalk.dim(` Check ${PID_FILE} or run \"rigstate daemon status\"`));\n console.log(chalk.dim(' Use Ctrl+C to stop the running daemon first.\\n'));\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\nasync 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 // Find the executable path\n // We assume 'rigstate' is in the PATH, but for launchd we need absolute path\n // Or we use the node executable and the script path\n\n // Strategy: Use the currently executing script path\n // This file is likely in dist/commands/daemon.js, we need dist/index.js\n const scriptPath = path.resolve(__dirname, '../index.js');\n const nodePath = process.execPath; // Absolute path to node executable\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 // Load the agent\n try {\n await execShellCommand(`launchctl unload ${plistPath}`); // Unload if exists\n } catch (e) { } // Ignore error if not loaded\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\nasync 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 file doesn't exist, it's already disabled\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\nfunction execShellCommand(cmd: string) {\n const exec = require('child_process').exec;\n return new Promise((resolve, reject) => {\n exec(cmd, (error: any, stdout: string, stderr: string) => {\n if (error) {\n // launchctl returns non-zero if already loaded/unloaded sometimes, \n // but we might want to check stderr\n // For now simple wrapper\n // reject(error);\n }\n resolve(stdout ? stdout : stderr);\n });\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 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 ora from 'ora';\nimport * as fs from 'fs/promises';\nimport { EventEmitter } from 'events';\nimport { createFileWatcher, type FileWatcherEvents } from './file-watcher.js';\nimport { createHeuristicEngine } from './heuristic-engine.js';\nimport { createInterventionProtocol, type InterventionDecision } from './intervention-protocol.js';\nimport { createGuardianMonitor } from './guardian-monitor.js';\nimport { createBridgeListener, type BridgeListenerEvents } from './bridge-listener.js';\nimport { DaemonConfig, DaemonState } from './types.js';\nimport { trackSkillUsage } from './telemetry.js';\nimport { jitProvisionSkill } from '../utils/skills-provisioner.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\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 }\n\n async start(): Promise<void> {\n if (this.state.isRunning) {\n console.log(chalk.yellow('Daemon is already running.'));\n return;\n }\n\n this.printWelcome();\n this.state.isRunning = true;\n this.state.startedAt = new Date().toISOString();\n\n // 1. Initialize Engines\n this.heuristicEngine = createHeuristicEngine();\n this.interventionProtocol = createInterventionProtocol();\n this.guardianMonitor = createGuardianMonitor(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n\n // 2. Load and Sync Rules\n await this.guardianMonitor.loadRules();\n console.log(chalk.green(` ✓ Loaded ${this.guardianMonitor.getRuleCount()} rules`));\n await this.syncHeuristics();\n\n // 3. Setup File Watcher\n if (this.config.checkOnChange) {\n this.setupFileWatcher();\n }\n\n // 4. Setup Bridge\n if (this.config.bridgeEnabled) {\n await this.setupBridge();\n }\n\n this.printActive();\n this.emit('started', this.state);\n }\n\n private printWelcome() {\n console.log(chalk.bold.blue('\\n🛡️ Guardian Daemon Starting...'));\n console.log(chalk.dim(`Project: ${this.config.projectId}`));\n console.log(chalk.dim(`Watch Path: ${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 now active'));\n console.log(chalk.dim('Press Ctrl+C to stop\\n'));\n }\n\n private async syncHeuristics() {\n if (!this.heuristicEngine) return;\n const synced = await this.heuristicEngine.refreshRules(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n if (synced) console.log(chalk.green(' ✓ Synced heuristic rules'));\n }\n\n private setupFileWatcher() {\n console.log(chalk.dim('📂 Starting file watcher...'));\n this.fileWatcher = createFileWatcher(this.config.watchPath);\n this.fileWatcher.on('change', (path) => this.handleFileChange(path));\n this.fileWatcher.start();\n console.log(chalk.green(' ✓ File watcher active'));\n }\n\n private async handleFileChange(filePath: string) {\n this.state.lastActivity = new Date().toISOString();\n if (this.config.verbose) console.log(chalk.dim(` 📝 File changed: ${filePath}`));\n\n // 1. Calculate metrics\n let lineCount = 0;\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n lineCount = content.split('\\n').length;\n } catch (e) { /* Deleted file or error */ }\n\n // A. Prediction & JIT\n if (this.heuristicEngine && this.interventionProtocol && this.guardianMonitor) {\n const matches = await this.heuristicEngine.analyzeFile(filePath, {\n lineCount,\n rules: this.guardianMonitor.getRules()\n });\n for (const match of matches) {\n console.log(chalk.magenta(` 💡 PREDICTIVE ACTIVATION: ${match.skillId}`));\n console.log(chalk.dim(` Reason: ${match.reason}`));\n\n const decision = this.interventionProtocol.evaluateTrigger(match.skillId, match.confidence);\n this.interventionProtocol.enforce(decision);\n\n await jitProvisionSkill(match.skillId, this.config.apiUrl, this.config.apiKey, this.config.projectId, process.cwd());\n await trackSkillUsage(this.config.apiUrl, this.config.apiKey, this.config.projectId, match.skillId);\n this.emit('skill:suggestion', match);\n }\n }\n\n // B. Guardian Check\n if (this.guardianMonitor) {\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.state.violationsFound += result.violations.length;\n this.emit('violation', { file: filePath, violations: result.violations });\n for (const v of result.violations) {\n const color = v.severity === 'critical' ? chalk.red : v.severity === 'warning' ? chalk.yellow : chalk.blue;\n console.log(color(` [${v.severity.toUpperCase()}] ${filePath}: ${v.message}`));\n if (this.interventionProtocol) {\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 }\n }\n\n private async setupBridge() {\n console.log(chalk.dim('🌉 Connecting to Agent Bridge...'));\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 received: ${task.id}`));\n this.emit('task', task);\n });\n await this.bridgeListener.connect();\n console.log(chalk.green(' ✓ Agent Bridge connected'));\n }\n\n async stop(): Promise<void> {\n if (!this.state.isRunning) return;\n console.log(chalk.dim('\\n🛑 Stopping Guardian Daemon...'));\n if (this.fileWatcher) await this.fileWatcher.stop();\n if (this.bridgeListener) await this.bridgeListener.disconnect();\n this.state.isRunning = false;\n console.log(chalk.green('✓ Daemon stopped.'));\n this.emit('stopped', this.state);\n }\n\n getState(): DaemonState {\n return { ...this.state };\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'];\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: (absolutePath) => {\n // Get relative path for cleaner matching\n const relPath = path.relative(process.cwd(), absolutePath);\n\n // Common directories to ignore (exact matches on path segments)\n const ignoredDirs = new Set([\n 'node_modules',\n '.git',\n '.next',\n '.turbo',\n 'dist',\n 'build',\n '.rigstate',\n 'coverage',\n '.DS_Store',\n 'tmp',\n 'temp',\n 'vendor',\n '.cache',\n 'public' // Usually static assets, not code\n ]);\n\n // Check if any segment of the path matches an ignored directory\n const segments = relPath.split(path.sep);\n if (segments.some(s => ignoredDirs.has(s))) {\n return true;\n }\n\n // Ignore dotfiles (except .env maybe, but for now safe to ignore secret/config files)\n // Actually, let's keep .cursorrules and similar if needed, but generally ignore hidden\n // if (path.basename(absolutePath).startsWith('.') && !segments.some(s => s === '.cursor')) return true;\n\n return false;\n },\n persistent: true,\n ignoreInitial: true,\n ignorePermissionErrors: true, // Don't crash on EPERM\n depth: 20,\n awaitWriteFinish: {\n stabilityThreshold: 300,\n pollInterval: 100\n },\n usePolling: false,\n atomic: true // Handle atomic writes (like vim/saving) better\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 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) {\n // Try cache fallback\n const cached = await loadCachedRules(projectId);\n if (cached) {\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 { 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 { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { suggestNextMove } from './suggest.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 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: 'Start (Set IN_PROGRESS)', value: 'start' },\n { name: 'Finish (Audit & Complete)', value: 'finish' },\n { name: 'Cancel', value: 'cancel' }\n ]\n }]);\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'));\n console.log(chalk.dim('────────────────────────────────────────'));\n\n // 1. Audit Simulation\n const auditSpinner = ora(' Analyzing architectural integrity...').start();\n await new Promise(r => setTimeout(r, 1500)); // Placebo delay for \"thinking\"\n auditSpinner.succeed('Architecture: VALIDATED (SEC-ARCH-01 Pass)');\n\n // 2. Mark Complete\n await setTaskStatus(taskId, 'COMPLETED');\n\n // 3. The Success Handshake\n console.log('');\n console.log(chalk.bold.green('🎉 TASK COMPLETE! Momentum Preserved.'));\n\n const { projectId, apiKey, apiUrl } = getContext();\n await suggestNextMove(projectId, apiKey, apiUrl);\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 // Try to read from local manifest\n try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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 } 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 // api_url is not settable via this command for now\n console.log(chalk.yellow('api_url is set via RIGSTATE_API_URL environment variable'));\n break;\n default:\n console.log(chalk.red(`Unknown config key: ${key}`));\n console.log(chalk.dim('Valid keys: api_key, project_id'));\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';\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 // Map VIBE_API_KEY to RIGSTATE_API_KEY if needed (backwards compatibility)\n if (process.env.VIBE_API_KEY && !process.env.RIGSTATE_API_KEY) {\n process.env.RIGSTATE_API_KEY = process.env.VIBE_API_KEY;\n }\n\n // Spawn the MCP server as a child process\n // MCP uses stdio for communication, so we inherit it\n const worker = spawn('node', [serverPath], {\n env: process.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) {\n await this.gateway.transmit(signal);\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 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","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","export async function checkVersion() {}\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 console.error(chalk.red(`\\nFailed to capture idea: ${e.message}`));\n }\n });\n}\n"],"mappings":"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","names":["Command","chalk","path","Command","chalk","ora","axios","fs","path","chalk","axios","Command","chalk","fs","path","axios","fs","path","chalk","fs","path","chalk","config","InterventionLevel","fs","path","chalk","axios","getGovernanceConfig","setSoftLock","InterventionLevel","Command","chalk","Command","fs","path","chalk","config","getApiKey","getApiUrl","syncEnv","syncProjectRules","suggestNextMove","Command","chalk","ora","axios","fs","path","fs","path","Command","ora","chalk","path","fs","axios","Command","chalk","ora","axios","glob","fs","path","Command","ora","chalk","path","glob","fs","axios","Command","chalk","ora","axios","fs","path","provisionSkills","generateSkillsDiscoveryBlock","runGuardianWatchdog","Command","chalk","fs","path","ora","fs","path","axios","Command","ora","chalk","inquirer","path","fs","Command","chalk","ora","axios","glob","fs","path","execSync","fs","path","chalk","CACHE_FILE","Command","ora","chalk","axios","path","execSync","isCodeFile","glob","fs","Command","chalk","ora","fs","path","chalk","fs","EventEmitter","path","isCodeFile","absolutePath","path","axios","chalk","fs","path","axios","fs","path","CACHE_FILE","CACHE_TTL_MS","axios","saveCachedRules","loadCachedRules","path","fs","axios","EventEmitter","axios","EventEmitter","config","chalk","path","config","Command","ora","chalk","path","fs","Command","chalk","ora","axios","inquirer","Command","chalk","ora","chokidar","fs","path","execSync","axios","watch","config","Command","chalk","ora","axios","execSync","fs","path","Command","chalk","config","Command","chalk","path","fs","fileURLToPath","__filename","__dirname","Command","chalk","EventEmitter","axios","chalk","axios","chalk","chalk","EventEmitter","inquirer","Command","chalk","Command","chalk","axios","Command","chalk","ora","axios","inquirer","Command","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/utils/config.ts","../src/commands/env.ts","../src/commands/sync-rules.ts","../src/commands/suggest.ts","../src/commands/hooks.ts","../src/utils/skills-provisioner.ts","../src/utils/governance.ts","../src/utils/watchdog.ts","../../../node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/has-flag/index.js","../../../node_modules/supports-color/index.js","../../../node_modules/debug/src/node.js","../../../node_modules/debug/src/index.js","../../../node_modules/@kwsites/file-exists/src/index.ts","../../../node_modules/@kwsites/file-exists/index.ts","../../../node_modules/@kwsites/promise-deferred/src/index.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/utils/manifest.ts","../src/commands/check.ts","../src/utils/rule-engine.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/commands/work.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/utils/logger.ts","../src/commands/override.ts","../src/commands/idea.ts","../src/commands/release.ts","../../../node_modules/simple-git/src/lib/args/pathspec.ts","../../../node_modules/simple-git/src/lib/errors/git-error.ts","../../../node_modules/simple-git/src/lib/errors/git-response-error.ts","../../../node_modules/simple-git/src/lib/errors/task-configuration-error.ts","../../../node_modules/simple-git/src/lib/utils/util.ts","../../../node_modules/simple-git/src/lib/utils/argument-filters.ts","../../../node_modules/simple-git/src/lib/utils/exit-codes.ts","../../../node_modules/simple-git/src/lib/utils/git-output-streams.ts","../../../node_modules/simple-git/src/lib/utils/line-parser.ts","../../../node_modules/simple-git/src/lib/utils/simple-git-options.ts","../../../node_modules/simple-git/src/lib/utils/task-options.ts","../../../node_modules/simple-git/src/lib/utils/task-parser.ts","../../../node_modules/simple-git/src/lib/utils/index.ts","../../../node_modules/simple-git/src/lib/tasks/check-is-repo.ts","../../../node_modules/simple-git/src/lib/responses/CleanSummary.ts","../../../node_modules/simple-git/src/lib/tasks/task.ts","../../../node_modules/simple-git/src/lib/tasks/clean.ts","../../../node_modules/simple-git/src/lib/responses/ConfigList.ts","../../../node_modules/simple-git/src/lib/tasks/config.ts","../../../node_modules/simple-git/src/lib/tasks/diff-name-status.ts","../../../node_modules/simple-git/src/lib/tasks/grep.ts","../../../node_modules/simple-git/src/lib/tasks/reset.ts","../../../node_modules/simple-git/src/lib/git-logger.ts","../../../node_modules/simple-git/src/lib/runners/tasks-pending-queue.ts","../../../node_modules/simple-git/src/lib/runners/git-executor-chain.ts","../../../node_modules/simple-git/src/lib/runners/git-executor.ts","../../../node_modules/simple-git/src/lib/task-callback.ts","../../../node_modules/simple-git/src/lib/tasks/change-working-directory.ts","../../../node_modules/simple-git/src/lib/tasks/checkout.ts","../../../node_modules/simple-git/src/lib/tasks/count-objects.ts","../../../node_modules/simple-git/src/lib/parsers/parse-commit.ts","../../../node_modules/simple-git/src/lib/tasks/commit.ts","../../../node_modules/simple-git/src/lib/tasks/first-commit.ts","../../../node_modules/simple-git/src/lib/tasks/hash-object.ts","../../../node_modules/simple-git/src/lib/responses/InitSummary.ts","../../../node_modules/simple-git/src/lib/tasks/init.ts","../../../node_modules/simple-git/src/lib/args/log-format.ts","../../../node_modules/simple-git/src/lib/responses/DiffSummary.ts","../../../node_modules/simple-git/src/lib/parsers/parse-diff-summary.ts","../../../node_modules/simple-git/src/lib/parsers/parse-list-log-summary.ts","../../../node_modules/simple-git/src/lib/tasks/diff.ts","../../../node_modules/simple-git/src/lib/tasks/log.ts","../../../node_modules/simple-git/src/lib/responses/MergeSummary.ts","../../../node_modules/simple-git/src/lib/responses/PullSummary.ts","../../../node_modules/simple-git/src/lib/parsers/parse-remote-objects.ts","../../../node_modules/simple-git/src/lib/parsers/parse-remote-messages.ts","../../../node_modules/simple-git/src/lib/parsers/parse-pull.ts","../../../node_modules/simple-git/src/lib/parsers/parse-merge.ts","../../../node_modules/simple-git/src/lib/tasks/merge.ts","../../../node_modules/simple-git/src/lib/parsers/parse-push.ts","../../../node_modules/simple-git/src/lib/tasks/push.ts","../../../node_modules/simple-git/src/lib/tasks/show.ts","../../../node_modules/simple-git/src/lib/responses/FileStatusSummary.ts","../../../node_modules/simple-git/src/lib/responses/StatusSummary.ts","../../../node_modules/simple-git/src/lib/tasks/status.ts","../../../node_modules/simple-git/src/lib/tasks/version.ts","../../../node_modules/simple-git/src/lib/simple-git-api.ts","../../../node_modules/simple-git/src/lib/runners/scheduler.ts","../../../node_modules/simple-git/src/lib/tasks/apply-patch.ts","../../../node_modules/simple-git/src/lib/responses/BranchDeleteSummary.ts","../../../node_modules/simple-git/src/lib/parsers/parse-branch-delete.ts","../../../node_modules/simple-git/src/lib/responses/BranchSummary.ts","../../../node_modules/simple-git/src/lib/parsers/parse-branch.ts","../../../node_modules/simple-git/src/lib/tasks/branch.ts","../../../node_modules/simple-git/src/lib/responses/CheckIgnore.ts","../../../node_modules/simple-git/src/lib/tasks/check-ignore.ts","../../../node_modules/simple-git/src/lib/tasks/clone.ts","../../../node_modules/simple-git/src/lib/parsers/parse-fetch.ts","../../../node_modules/simple-git/src/lib/tasks/fetch.ts","../../../node_modules/simple-git/src/lib/parsers/parse-move.ts","../../../node_modules/simple-git/src/lib/tasks/move.ts","../../../node_modules/simple-git/src/lib/tasks/pull.ts","../../../node_modules/simple-git/src/lib/responses/GetRemoteSummary.ts","../../../node_modules/simple-git/src/lib/tasks/remote.ts","../../../node_modules/simple-git/src/lib/tasks/stash-list.ts","../../../node_modules/simple-git/src/lib/tasks/sub-module.ts","../../../node_modules/simple-git/src/lib/responses/TagList.ts","../../../node_modules/simple-git/src/lib/tasks/tag.ts","../../../node_modules/simple-git/src/git.js","../../../node_modules/simple-git/src/lib/api.ts","../../../node_modules/simple-git/src/lib/errors/git-construct-error.ts","../../../node_modules/simple-git/src/lib/errors/git-plugin-error.ts","../../../node_modules/simple-git/src/lib/plugins/abort-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/block-unsafe-operations-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/command-config-prefixing-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/completion-detection.plugin.ts","../../../node_modules/simple-git/src/lib/plugins/custom-binary.plugin.ts","../../../node_modules/simple-git/src/lib/plugins/error-detection.plugin.ts","../../../node_modules/simple-git/src/lib/plugins/plugin-store.ts","../../../node_modules/simple-git/src/lib/plugins/progress-monitor-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/spawn-options-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/timout-plugin.ts","../../../node_modules/simple-git/src/lib/plugins/suffix-paths.plugin.ts","../../../node_modules/simple-git/src/lib/git-factory.ts","../../../node_modules/simple-git/src/lib/runners/promise-wrapped.ts","../../../node_modules/simple-git/src/esm.mjs","../src/commands/roadmap.ts","../src/commands/council.ts","../src/utils/version.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import Conf from 'conf';\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: 'http://localhost:3000',\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 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 return config.get('projectId');\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\n * Priority: Environment variable > Stored config > Production default\n */\nexport function getApiUrl(): string {\n // 1. Check environment variable first\n if (process.env.RIGSTATE_API_URL) {\n return process.env.RIGSTATE_API_URL;\n }\n // 2. Check stored config\n const storedUrl = config.get('apiUrl');\n if (storedUrl) {\n return storedUrl;\n }\n // 3. Default to production\n return 'https://app.rigstate.com';\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","/* 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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport ora from 'ora';\nimport { getApiKey, getApiUrl } from '../utils/config.js';\nimport axios from 'axios';\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): 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 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\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","\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","/**\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","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","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n",null,null,null,"\n\nimport { 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 { checkVersion } from './utils/version.js';\nimport dotenv from 'dotenv';\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('0.2.0');\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());\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 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 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';\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 (Rigstate v2.7)\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 if (overrideId !== projectId) {\n console.warn(chalk.yellow(`Global override detected. Enforcing project ID: ${overrideId}`));\n projectId = overrideId;\n }\n }\n }\n } catch (e) { }\n\n const manifestPath = path.join(process.cwd(), '.rigstate');\n\n const content = {\n project_id: projectId,\n api_url: process.env.NEXT_PUBLIC_APP_URL || 'http://localhost:3000',\n linked_at: new Date().toISOString()\n };\n\n try {\n await fs.writeFile(manifestPath, JSON.stringify(content, null, 2), 'utf-8');\n console.log(chalk.green(`✔ Linked to project ID: ${projectId}`));\n console.log(chalk.dim(`Created local context manifest at .rigstate`));\n\n // === SMART AUTOMATION ===\n console.log('');\n console.log(chalk.bold('🤖 Rigstate Automation Detected'));\n console.log('');\n\n const { getApiKey, getApiUrl } = await import('../utils/config.js');\n const apiKey = getApiKey(); // Might throw if not logged in\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\n console.log(chalk.blue('🛡️ Checking immunity system...'));\n await installHooks(process.cwd());\n\n console.log('');\n console.log(chalk.bold.green('🚀 Link Complete! Your environment is ready.'));\n\n // 4. Tactical Suggestion (The First Move)\n const { suggestNextMove } = await import('./suggest.js');\n await suggestNextMove(projectId, apiKey, apiUrl);\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 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 const { installHooks: runInstall } = await import('./hooks.js');\n // We need to mock the command context or extract logic. \n // For simplicity/robustness in this iteration, let's just suggest it or verify\n\n // Simpler approach: Check if pre-commit exists\n const preCommitPath = path.join(cwd, '.git/hooks/pre-commit');\n try {\n await fs.access(preCommitPath);\n console.log(chalk.green(' ✔ Git hooks already active'));\n } catch {\n console.log(chalk.yellow(' ⚠️ Git hooks missing. Run \"rigstate hooks install\" to secure repo.'));\n }\n\n } catch (e) {\n // Ignore hook errors during link\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 { 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","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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(manifestContent);\n if (manifest.project_id) projectId = manifest.project_id;\n } catch (e) { }\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 manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = {\n project_id: projectId,\n project_name: project,\n last_synced: timestamp,\n api_url: apiUrl\n };\n await fs.writeFile(manifestPath, JSON.stringify(manifestContent, null, 2), 'utf-8');\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 manifestPath = path.join(process.cwd(), '.rigstate');\n const manifestContent = {\n project_id: projectId,\n last_linked: new Date().toISOString(),\n api_url: apiUrl\n };\n await fs.writeFile(manifestPath, JSON.stringify(manifestContent, null, 2), 'utf-8');\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","import fs from 'fs/promises';\nimport path from 'path';\n\nexport interface RigstateManifest {\n project_id: string;\n api_url?: string;\n linked_at?: string;\n}\n\nexport async function loadManifest(): Promise<RigstateManifest | null> {\n try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n return JSON.parse(content);\n } catch {\n return null;\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 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 { execSync } from 'child_process';\nimport { fileURLToPath } from 'url';\nimport { createDaemon } from '../daemon/factory.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\n if (await isRunning()) {\n console.log(chalk.yellow('⚠ Another daemon instance may be running.'));\n console.log(chalk.dim(` Check ${PID_FILE} or run \"rigstate daemon status\"`));\n console.log(chalk.dim(' Use Ctrl+C to stop the running daemon first.\\n'));\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\nasync 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 // Find the executable path\n // We assume 'rigstate' is in the PATH, but for launchd we need absolute path\n // Or we use the node executable and the script path\n\n // Strategy: Use the currently executing script path\n // This file is likely in dist/commands/daemon.js, we need dist/index.js\n // Strategy: Use the currently executing script path\n // In the bundle, this file is merged into index.js\n const scriptPath = fileURLToPath(import.meta.url);\n const nodePath = process.execPath; // Absolute path to node executable\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 // Load the agent\n try {\n await execShellCommand(`launchctl unload ${plistPath}`); // Unload if exists\n } catch (e) { } // Ignore error if not loaded\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\nasync 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 file doesn't exist, it's already disabled\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\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","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 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 ora from 'ora';\nimport * as fs from 'fs/promises';\nimport { EventEmitter } from 'events';\nimport { createFileWatcher, type FileWatcherEvents } from './file-watcher.js';\nimport { createHeuristicEngine } from './heuristic-engine.js';\nimport { createInterventionProtocol, type InterventionDecision } from './intervention-protocol.js';\nimport { createGuardianMonitor } from './guardian-monitor.js';\nimport { createBridgeListener, type BridgeListenerEvents } from './bridge-listener.js';\nimport { DaemonConfig, DaemonState } from './types.js';\nimport { trackSkillUsage } from './telemetry.js';\nimport { jitProvisionSkill } from '../utils/skills-provisioner.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\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 }\n\n async start(): Promise<void> {\n if (this.state.isRunning) {\n console.log(chalk.yellow('Daemon is already running.'));\n return;\n }\n\n this.printWelcome();\n this.state.isRunning = true;\n this.state.startedAt = new Date().toISOString();\n\n // 1. Initialize Engines\n this.heuristicEngine = createHeuristicEngine();\n this.interventionProtocol = createInterventionProtocol();\n this.guardianMonitor = createGuardianMonitor(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n\n // 2. Load and Sync Rules\n await this.guardianMonitor.loadRules();\n console.log(chalk.green(` ✓ Loaded ${this.guardianMonitor.getRuleCount()} rules`));\n await this.syncHeuristics();\n\n // 3. Setup File Watcher\n if (this.config.checkOnChange) {\n this.setupFileWatcher();\n }\n\n // 4. Setup Bridge\n if (this.config.bridgeEnabled) {\n await this.setupBridge();\n }\n\n this.printActive();\n this.emit('started', this.state);\n }\n\n private printWelcome() {\n console.log(chalk.bold.blue('\\n🛡️ Guardian Daemon Starting...'));\n console.log(chalk.dim(`Project: ${this.config.projectId}`));\n console.log(chalk.dim(`Watch Path: ${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 now active'));\n console.log(chalk.dim('Press Ctrl+C to stop\\n'));\n }\n\n private async syncHeuristics() {\n if (!this.heuristicEngine) return;\n const synced = await this.heuristicEngine.refreshRules(this.config.projectId, this.config.apiUrl, this.config.apiKey);\n if (synced) console.log(chalk.green(' ✓ Synced heuristic rules'));\n }\n\n private setupFileWatcher() {\n console.log(chalk.dim('📂 Starting file watcher...'));\n this.fileWatcher = createFileWatcher(this.config.watchPath);\n this.fileWatcher.on('change', (path) => this.handleFileChange(path));\n this.fileWatcher.start();\n console.log(chalk.green(' ✓ File watcher active'));\n }\n\n private async handleFileChange(filePath: string) {\n this.state.lastActivity = new Date().toISOString();\n if (this.config.verbose) console.log(chalk.dim(` 📝 File changed: ${filePath}`));\n\n // 1. Calculate metrics\n let lineCount = 0;\n try {\n const content = await fs.readFile(filePath, 'utf-8');\n lineCount = content.split('\\n').length;\n } catch (e) { /* Deleted file or error */ }\n\n // A. Prediction & JIT\n if (this.heuristicEngine && this.interventionProtocol && this.guardianMonitor) {\n const matches = await this.heuristicEngine.analyzeFile(filePath, {\n lineCount,\n rules: this.guardianMonitor.getRules()\n });\n for (const match of matches) {\n console.log(chalk.magenta(` 💡 PREDICTIVE ACTIVATION: ${match.skillId}`));\n console.log(chalk.dim(` Reason: ${match.reason}`));\n\n const decision = this.interventionProtocol.evaluateTrigger(match.skillId, match.confidence);\n this.interventionProtocol.enforce(decision);\n\n await jitProvisionSkill(match.skillId, this.config.apiUrl, this.config.apiKey, this.config.projectId, process.cwd());\n await trackSkillUsage(this.config.apiUrl, this.config.apiKey, this.config.projectId, match.skillId);\n this.emit('skill:suggestion', match);\n }\n }\n\n // B. Guardian Check\n if (this.guardianMonitor) {\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.state.violationsFound += result.violations.length;\n this.emit('violation', { file: filePath, violations: result.violations });\n for (const v of result.violations) {\n const color = v.severity === 'critical' ? chalk.red : v.severity === 'warning' ? chalk.yellow : chalk.blue;\n console.log(color(` [${v.severity.toUpperCase()}] ${filePath}: ${v.message}`));\n if (this.interventionProtocol) {\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 }\n }\n\n private async setupBridge() {\n console.log(chalk.dim('🌉 Connecting to Agent Bridge...'));\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 received: ${task.id}`));\n this.emit('task', task);\n });\n await this.bridgeListener.connect();\n console.log(chalk.green(' ✓ Agent Bridge connected'));\n }\n\n async stop(): Promise<void> {\n if (!this.state.isRunning) return;\n console.log(chalk.dim('\\n🛑 Stopping Guardian Daemon...'));\n if (this.fileWatcher) await this.fileWatcher.stop();\n if (this.bridgeListener) await this.bridgeListener.disconnect();\n this.state.isRunning = false;\n console.log(chalk.green('✓ Daemon stopped.'));\n this.emit('stopped', this.state);\n }\n\n getState(): DaemonState {\n return { ...this.state };\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'];\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: [\n '**/node_modules/**',\n '**/.git/**',\n '**/.next/**',\n '**/.turbo/**',\n '**/dist/**',\n '**/build/**',\n '**/.rigstate/**',\n '**/coverage/**',\n '**/.DS_Store',\n '**/tmp/**',\n '**/temp/**',\n '**/vendor/**',\n '**/.cache/**',\n '**/public/**'\n ],\n persistent: true,\n ignoreInitial: true,\n ignorePermissionErrors: true, // Don't crash on EPERM\n depth: 20,\n awaitWriteFinish: {\n stabilityThreshold: 300,\n pollInterval: 100\n },\n usePolling: false,\n atomic: true // Handle atomic writes (like vim/saving) better\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 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) {\n // Try cache fallback\n const cached = await loadCachedRules(projectId);\n if (cached) {\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 { 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 { getApiKey, getApiUrl, getProjectId } from '../utils/config.js';\nimport { suggestNextMove } from './suggest.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 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: 'Start (Set IN_PROGRESS)', value: 'start' },\n { name: 'Finish (Audit & Complete)', value: 'finish' },\n { name: 'Cancel', value: 'cancel' }\n ]\n }]);\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'));\n console.log(chalk.dim('────────────────────────────────────────'));\n\n // 1. Audit Simulation\n const auditSpinner = ora(' Analyzing architectural integrity...').start();\n await new Promise(r => setTimeout(r, 1500)); // Placebo delay for \"thinking\"\n auditSpinner.succeed('Architecture: VALIDATED (SEC-ARCH-01 Pass)');\n\n // 2. Mark Complete\n await setTaskStatus(taskId, 'COMPLETED');\n\n // 3. The Success Handshake\n console.log('');\n console.log(chalk.bold.green('🎉 TASK COMPLETE! Momentum Preserved.'));\n\n const { projectId, apiKey, apiUrl } = getContext();\n await suggestNextMove(projectId, apiKey, apiUrl);\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 // Try to read from local manifest\n try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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 try {\n const manifestPath = path.join(process.cwd(), '.rigstate');\n const content = await fs.readFile(manifestPath, 'utf-8');\n const manifest = JSON.parse(content);\n projectId = manifest.project_id;\n } catch (e) { }\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 } 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 // api_url is not settable via this command for now\n console.log(chalk.yellow('api_url is set via RIGSTATE_API_URL environment variable'));\n break;\n default:\n console.log(chalk.red(`Unknown config key: ${key}`));\n console.log(chalk.dim('Valid keys: api_key, project_id'));\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';\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 // Map VIBE_API_KEY to RIGSTATE_API_KEY if needed (backwards compatibility)\n if (process.env.VIBE_API_KEY && !process.env.RIGSTATE_API_KEY) {\n process.env.RIGSTATE_API_KEY = process.env.VIBE_API_KEY;\n }\n\n // Spawn the MCP server as a child process\n // MCP uses stdio for communication, so we inherit it\n const worker = spawn('node', [serverPath], {\n env: process.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) {\n await this.gateway.transmit(signal);\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 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","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","const cache = new WeakMap<String, string[]>();\n\nexport function pathspec(...paths: string[]) {\n const key = new String(paths);\n cache.set(key, paths);\n\n return key as string;\n}\n\nexport function isPathSpec(path: string | unknown): path is string {\n return path instanceof String && cache.has(path);\n}\n\nexport function toPaths(pathSpec: string): string[] {\n return cache.get(pathSpec) || [];\n}\n","import type { SimpleGitTask } from '../types';\n\n/**\n * The `GitError` is thrown when the underlying `git` process throws a\n * fatal exception (eg an `ENOENT` exception when attempting to use a\n * non-writable directory as the root for your repo), and acts as the\n * base class for more specific errors thrown by the parsing of the\n * git response or errors in the configuration of the task about to\n * be run.\n *\n * When an exception is thrown, pending tasks in the same instance will\n * not be executed. The recommended way to run a series of tasks that\n * can independently fail without needing to prevent future tasks from\n * running is to catch them individually:\n *\n * ```typescript\n import { gitP, SimpleGit, GitError, PullResult } from 'simple-git';\n\n function catchTask (e: GitError) {\n return e.\n }\n\n const git = gitP(repoWorkingDir);\n const pulled: PullResult | GitError = await git.pull().catch(catchTask);\n const pushed: string | GitError = await git.pushTags().catch(catchTask);\n ```\n */\nexport class GitError extends Error {\n constructor(\n public task?: SimpleGitTask<any>,\n message?: string\n ) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `GitResponseError` is the wrapper for a parsed response that is treated as\n * a fatal error, for example attempting a `merge` can leave the repo in a corrupted\n * state when there are conflicts so the task will reject rather than resolve.\n *\n * For example, catching the merge conflict exception:\n *\n * ```typescript\n import { gitP, SimpleGit, GitResponseError, MergeSummary } from 'simple-git';\n\n const git = gitP(repoRoot);\n const mergeOptions: string[] = ['--no-ff', 'other-branch'];\n const mergeSummary: MergeSummary = await git.merge(mergeOptions)\n .catch((e: GitResponseError<MergeSummary>) => e.git);\n\n if (mergeSummary.failed) {\n // deal with the error\n }\n ```\n */\nexport class GitResponseError<T = any> extends GitError {\n constructor(\n /**\n * `.git` access the parsed response that is treated as being an error\n */\n public readonly git: T,\n message?: string\n ) {\n super(undefined, message || String(git));\n }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `TaskConfigurationError` is thrown when a command was incorrectly\n * configured. An error of this kind means that no attempt was made to\n * run your command through the underlying `git` binary.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class TaskConfigurationError extends GitError {\n constructor(message?: string) {\n super(undefined, message);\n }\n}\n","import { Buffer } from 'node:buffer';\nimport { exists, FOLDER } from '@kwsites/file-exists';\nimport type { Maybe } from '../types';\nimport { filterHasLength } from './argument-filters';\n\ntype Callable = (...args: unknown[]) => unknown;\n\nexport const NULL = '\\0';\n\nexport const NOOP: Callable = () => {};\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function asFunction<T>(source: T | unknown): Callable {\n if (typeof source !== 'function') {\n return NOOP;\n }\n return source as Callable;\n}\n\n/**\n * Determines whether the supplied argument is both a function, and is not\n * the `NOOP` function.\n */\nexport function isUserFunction<T extends Function>(source: T | unknown): source is T {\n return typeof source === 'function' && source !== NOOP;\n}\n\nexport function splitOn(input: string, char: string): [string, string] {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, ''];\n }\n\n return [input.substr(0, index), input.substr(index + 1)];\n}\n\nexport function first<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function first<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function first(input: unknown[] | IArguments, offset = 0): Maybe<unknown> {\n return isArrayLike(input) && input.length > offset ? input[offset] : undefined;\n}\n\nexport function last<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function last<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function last<T>(input: T, offset?: number): Maybe<unknown>;\nexport function last(input: unknown, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\n\ntype ArrayLike<T> = T[] | IArguments | { [index: number]: T; length: number };\n\nfunction isArrayLike(input: unknown): input is ArrayLike<unknown> {\n return filterHasLength(input);\n}\n\nexport function toLinesWithContent(input = '', trimmed = true, separator = '\\n'): string[] {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, [] as string[]);\n}\n\ntype LineWithContentCallback<T = void> = (line: string) => T;\n\nexport function forEachLineWithContent<T>(\n input: string,\n callback: LineWithContentCallback<T>\n): T[] {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\n\nexport function folderExists(path: string): boolean {\n return exists(path, FOLDER);\n}\n\n/**\n * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`.\n */\nexport function append<T>(target: T[] | Set<T>, item: T): typeof item {\n if (Array.isArray(target)) {\n if (!target.includes(item)) {\n target.push(item);\n }\n } else {\n target.add(item);\n }\n return item;\n}\n\n/**\n * Adds `item` into the `target` `Array` when it is not already present and returns the `target`.\n */\nexport function including<T>(target: T[], item: T): typeof target {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n\n return target;\n}\n\nexport function remove<T>(target: Set<T> | T[], item: T): T {\n if (Array.isArray(target)) {\n const index = target.indexOf(item);\n if (index >= 0) {\n target.splice(index, 1);\n }\n } else {\n target.delete(item);\n }\n return item;\n}\n\nexport const objectToString = Object.prototype.toString.call.bind(Object.prototype.toString) as (\n input: unknown\n) => string;\n\nexport function asArray<T>(source: T | T[]): T[] {\n return Array.isArray(source) ? source : [source];\n}\n\nexport function asCamelCase(str: string) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\n\nexport function asStringArray<T>(source: T | T[]): string[] {\n return asArray(source).map((item) => {\n return item instanceof String ? (item as string) : String(item);\n });\n}\n\nexport function asNumber(source: string | null | undefined, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\n\nexport function prefixedArray<T>(input: T[], prefix: T): T[] {\n const output: T[] = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\n\nexport function bufferToString(input: Buffer | Buffer[]): string {\n return (Array.isArray(input) ? Buffer.concat(input) : input).toString('utf-8');\n}\n\n/**\n * Get a new object from a source object with only the listed properties.\n */\nexport function pick<T, K extends keyof T>(source: T, properties: readonly K[]) {\n const out: Partial<Pick<T, K>> = {};\n\n properties.forEach((key) => {\n if (source[key] !== undefined) {\n out[key] = source[key];\n }\n });\n\n return out;\n}\n\nexport function delay(duration = 0): Promise<void> {\n return new Promise((done) => setTimeout(done, duration));\n}\n\nexport function orVoid<T>(input: T | false) {\n if (input === false) {\n return undefined;\n }\n return input;\n}\n","import { isPathSpec } from '../args/pathspec';\nimport type { Maybe, Options, Primitives } from '../types';\nimport { objectToString } from './util';\n\nexport type ArgumentFilterPredicate<T> = (input: T | unknown) => input is T;\n\nexport function filterType<T, K>(\n input: K,\n filter: ArgumentFilterPredicate<T>\n): K extends T ? T : undefined;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def: T): T;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def?: T): Maybe<T> {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : undefined;\n}\n\nexport const filterArray: ArgumentFilterPredicate<Array<unknown>> = (\n input\n): input is Array<unknown> => {\n return Array.isArray(input);\n};\n\nexport function filterPrimitives(\n input: unknown,\n omit?: Array<'boolean' | 'string' | 'number'>\n): input is Primitives {\n const type = isPathSpec(input) ? 'string' : typeof input;\n\n return (\n /number|string|boolean/.test(type) &&\n (!omit || !omit.includes(type as 'boolean' | 'string' | 'number'))\n );\n}\n\nexport const filterNumber: ArgumentFilterPredicate<number> = (input: unknown): input is number => {\n return typeof input === 'number';\n};\n\nexport const filterString: ArgumentFilterPredicate<string> = (input: unknown): input is string => {\n return typeof input === 'string';\n};\n\nexport const filterStringOrStringArray: ArgumentFilterPredicate<string | string[]> = (\n input\n): input is string | string[] => {\n return filterString(input) || (Array.isArray(input) && input.every(filterString));\n};\n\nexport function filterPlainObject<T extends Options>(input: T | unknown): input is T;\nexport function filterPlainObject<T extends Record<string, unknown>>(\n input: T | unknown\n): input is T {\n return !!input && objectToString(input) === '[object Object]';\n}\n\nexport function filterFunction(input: unknown): input is (...args: unknown[]) => unknown {\n return typeof input === 'function';\n}\n\nexport const filterHasLength: ArgumentFilterPredicate<{ length: number }> = (\n input\n): input is { length: number } => {\n if (input == null || 'number|boolean|function'.includes(typeof input)) {\n return false;\n }\n\n return typeof (input as { length?: number }).length === 'number';\n};\n","/**\n * Known process exit codes used by the task parsers to determine whether an error\n * was one they can automatically handle\n */\nexport enum ExitCodes {\n SUCCESS,\n ERROR,\n NOT_FOUND = -2,\n UNCLEAN = 128,\n}\n","import { TaskResponseFormat } from '../types';\n\nexport class GitOutputStreams<T extends TaskResponseFormat = Buffer> {\n constructor(\n public readonly stdOut: T,\n public readonly stdErr: T\n ) {}\n\n asStrings(): GitOutputStreams<string> {\n return new GitOutputStreams(this.stdOut.toString('utf8'), this.stdErr.toString('utf8'));\n }\n}\n","function useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\n\nexport class LineParser<T> {\n protected matches: string[] = [];\n protected useMatches: (target: T, match: string[]) => boolean | void = useMatchesDefault;\n\n private _regExp: RegExp[];\n\n constructor(\n regExp: RegExp | RegExp[],\n useMatches?: (target: T, match: string[]) => boolean | void\n ) {\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n\n parse = (line: (offset: number) => string | undefined, target: T): boolean => {\n this.resetMatches();\n\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n\n protected resetMatches() {\n this.matches.length = 0;\n }\n\n protected prepareMatches() {\n return this.matches;\n }\n\n protected addMatch(reg: RegExp, index: number, line?: string) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n\n return !!matched;\n }\n\n protected pushMatch(_index: number, matched: string[]) {\n this.matches.push(...matched.slice(1));\n }\n}\n\nexport class RemoteLineParser<T> extends LineParser<T> {\n protected addMatch(reg: RegExp, index: number, line?: string): boolean {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n\n protected pushMatch(index: number, matched: string[]) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n}\n","import { SimpleGitOptions } from '../types';\n\nconst defaultOptions: Omit<SimpleGitOptions, 'baseDir'> = {\n binary: 'git',\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false,\n};\n\nexport function createInstanceConfig(\n ...options: Array<Partial<SimpleGitOptions> | undefined>\n): SimpleGitOptions {\n const baseDir = process.cwd();\n const config: SimpleGitOptions = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === 'object' && o)\n );\n\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n\n return config;\n}\n","import {\n filterArray,\n filterFunction,\n filterPlainObject,\n filterPrimitives,\n filterType,\n} from './argument-filters';\nimport { asFunction, asStringArray, isUserFunction, last } from './util';\nimport { Maybe, Options } from '../types';\nimport { isPathSpec } from '../args/pathspec';\n\nexport function appendTaskOptions<T extends Options = Options>(\n options: Maybe<T>,\n commands: string[] = []\n): string[] {\n if (!filterPlainObject<Options>(options)) {\n return commands;\n }\n\n return Object.keys(options).reduce((commands: string[], key: string) => {\n const value = options[key];\n\n if (isPathSpec(value)) {\n commands.push(value);\n } else if (filterPrimitives(value, ['boolean'])) {\n commands.push(key + '=' + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, ['string', 'number'])) {\n commands.push(key + '=' + v);\n }\n }\n } else {\n commands.push(key);\n }\n\n return commands;\n }, commands);\n}\n\nexport function getTrailingOptions(\n args: IArguments,\n initialPrimitive = 0,\n objectOnly = false\n): string[] {\n const command: string[] = [];\n\n for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n if ('string|number'.includes(typeof args[i])) {\n command.push(String(args[i]));\n }\n }\n\n appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n\n return command;\n}\n\nfunction trailingArrayArgument(args: IArguments) {\n const hasTrailingCallback = typeof last(args) === 'function';\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\n\n/**\n * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument\n * if there is one. When not found, the return value is null.\n */\nexport function trailingOptionsArgument(args: IArguments): Maybe<Options> {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function trailingFunctionArgument(\n args: unknown[] | IArguments | unknown,\n includeNoop = true\n): Maybe<(...args: unknown[]) => unknown> {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : undefined;\n}\n","import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types';\nimport { GitOutputStreams } from './git-output-streams';\nimport { LineParser } from './line-parser';\nimport { asArray, toLinesWithContent } from './util';\n\nexport function callTaskParser<INPUT extends TaskResponseFormat, RESPONSE>(\n parser: TaskParser<INPUT, RESPONSE>,\n streams: GitOutputStreams<INPUT>\n) {\n return parser(streams.stdOut, streams.stdErr);\n}\n\nexport function parseStringResponse<T>(\n result: T,\n parsers: LineParser<T>[],\n texts: MaybeArray<string>,\n trim = true\n): T {\n asArray(texts).forEach((text) => {\n for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n const line = (offset = 0) => {\n if (i + offset >= max) {\n return;\n }\n return lines[i + offset];\n };\n\n parsers.some(({ parse }) => parse(line, result));\n }\n });\n\n return result;\n}\n","export * from './argument-filters';\nexport * from './exit-codes';\nexport * from './git-output-streams';\nexport * from './line-parser';\nexport * from './simple-git-options';\nexport * from './task-options';\nexport * from './task-parser';\nexport * from './util';\n","import { ExitCodes } from '../utils';\nimport { Maybe, StringTask } from '../types';\n\nexport enum CheckRepoActions {\n BARE = 'bare',\n IN_TREE = 'tree',\n IS_REPO_ROOT = 'root',\n}\n\nconst onError: StringTask<boolean>['onError'] = ({ exitCode }, error, done, fail) => {\n if (exitCode === ExitCodes.UNCLEAN && isNotRepoMessage(error)) {\n return done(Buffer.from('false'));\n }\n\n fail(error);\n};\n\nconst parser: StringTask<boolean>['parser'] = (text) => {\n return text.trim() === 'true';\n};\n\nexport function checkIsRepoTask(action: Maybe<CheckRepoActions>): StringTask<boolean> {\n switch (action) {\n case CheckRepoActions.BARE:\n return checkIsBareRepoTask();\n case CheckRepoActions.IS_REPO_ROOT:\n return checkIsRepoRootTask();\n }\n\n const commands = ['rev-parse', '--is-inside-work-tree'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nexport function checkIsRepoRootTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--git-dir'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n },\n };\n}\n\nexport function checkIsBareRepoTask(): StringTask<boolean> {\n const commands = ['rev-parse', '--is-bare-repository'];\n\n return {\n commands,\n format: 'utf-8',\n onError,\n parser,\n };\n}\n\nfunction isNotRepoMessage(error: Error): boolean {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\n","import { CleanSummary } from '../../../typings';\nimport { toLinesWithContent } from '../utils';\n\nexport class CleanResponse implements CleanSummary {\n public paths: string[] = [];\n public files: string[] = [];\n public folders: string[] = [];\n\n constructor(public readonly dryRun: boolean) {}\n}\n\nconst removalRegexp = /^[a-z]+\\s*/i;\nconst dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\nconst isFolderRegexp = /\\/$/;\n\nexport function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, '');\n\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n\n return summary;\n}\n","import { TaskConfigurationError } from '../errors/task-configuration-error';\nimport type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types';\n\nexport const EMPTY_COMMANDS: [] = [];\n\nexport type EmptyTask = {\n commands: typeof EMPTY_COMMANDS;\n format: 'empty';\n parser: EmptyTaskParser;\n onError?: undefined;\n};\n\nexport function adhocExecTask(parser: EmptyTaskParser): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser,\n };\n}\n\nexport function configurationErrorTask(error: Error | string): EmptyTask {\n return {\n commands: EMPTY_COMMANDS,\n format: 'empty',\n parser() {\n throw typeof error === 'string' ? new TaskConfigurationError(error) : error;\n },\n };\n}\n\nexport function straightThroughStringTask(commands: string[], trimmed = false): StringTask<string> {\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return trimmed ? String(text).trim() : text;\n },\n };\n}\n\nexport function straightThroughBufferTask(commands: string[]): BufferTask<Buffer> {\n return {\n commands,\n format: 'buffer',\n parser(buffer) {\n return buffer;\n },\n };\n}\n\nexport function isBufferTask<R>(task: SimpleGitTask<R>): task is BufferTask<R> {\n return task.format === 'buffer';\n}\n\nexport function isEmptyTask<R>(task: SimpleGitTask<R>): task is EmptyTask {\n return task.format === 'empty' || !task.commands.length;\n}\n","import { CleanSummary } from '../../../typings';\nimport { cleanSummaryParser } from '../responses/CleanSummary';\nimport { Maybe, StringTask } from '../types';\nimport { asStringArray } from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport const CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported';\nexport const CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\nexport const CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: ';\n\n/**\n * All supported option switches available for use in a `git.clean` operation\n */\nexport enum CleanOptions {\n DRY_RUN = 'n',\n FORCE = 'f',\n IGNORED_INCLUDED = 'x',\n IGNORED_ONLY = 'X',\n EXCLUDING = 'e',\n QUIET = 'q',\n RECURSIVE = 'd',\n}\n\n/**\n * The two modes `git.clean` can run in - one of these must be supplied in order\n * for the command to not throw a `TaskConfigurationError`\n */\nexport type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN;\n\nconst CleanOptionValues: Set<string> = new Set([\n 'i',\n ...asStringArray(Object.values(CleanOptions as any)),\n]);\n\nexport function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n\n options.push(...customArgs);\n\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n\n return cleanTask(cleanMode, options);\n}\n\nexport function cleanTask(mode: CleanMode, customArgs: string[]): StringTask<CleanSummary> {\n const commands: string[] = ['clean', `-${mode}`, ...customArgs];\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): CleanSummary {\n return cleanSummaryParser(mode === CleanOptions.DRY_RUN, text);\n },\n };\n}\n\nexport function isCleanOptionsArray(input: string[]): input is CleanOptions[] {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\n\nfunction getCleanOptions(input: string) {\n let cleanMode: Maybe<CleanMode>;\n let options: string[] = [];\n let valid = { cleanMode: false, options: true };\n\n input\n .replace(/[^a-z]i/g, '')\n .split('')\n .forEach((char) => {\n if (isCleanMode(char)) {\n cleanMode = char;\n valid.cleanMode = true;\n } else {\n valid.options = valid.options && isKnownOption((options[options.length] = `-${char}`));\n }\n });\n\n return {\n cleanMode,\n options,\n valid,\n };\n}\n\nfunction isCleanMode(cleanMode?: string): cleanMode is CleanMode {\n return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN;\n}\n\nfunction isKnownOption(option: string): boolean {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\n\nfunction isInteractiveMode(option: string): boolean {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf('i') > 0;\n }\n\n return option === '--interactive';\n}\n","import { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../../typings';\nimport { last, splitOn } from '../utils';\n\nexport class ConfigList implements ConfigListSummary {\n public files: string[] = [];\n public values: { [fileName: string]: ConfigValues } = Object.create(null);\n\n private _all: ConfigValues | undefined;\n\n public get all(): ConfigValues {\n if (!this._all) {\n this._all = this.files.reduce((all: ConfigValues, file: string) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n\n return this._all;\n }\n\n public addFile(file: string): ConfigValues {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n\n this.files.push(file);\n }\n\n return this.values[file];\n }\n\n public addValue(file: string, key: string, value: string) {\n const values = this.addFile(file);\n\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n (values[key] as string[]).push(value);\n } else {\n values[key] = [values[key] as string, value];\n }\n\n this._all = undefined;\n }\n}\n\nexport function configListParser(text: string): ConfigList {\n const config = new ConfigList();\n\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n\n return config;\n}\n\nexport function configGetParser(text: string, key: string): ConfigGetResult {\n let value: string | null = null;\n const values: string[] = [];\n const scopes: Map<string, string[]> = new Map();\n\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n\n values.push((value = item.value));\n\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n\n scopes.get(item.file)!.push(value);\n }\n\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values,\n };\n}\n\nfunction configFilePath(filePath: string): string {\n return filePath.replace(/^(file):/, '');\n}\n\nfunction* configParser(text: string, requestedKey: string | null = null) {\n const lines = text.split('\\0');\n\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n\n let value = lines[i++];\n let key = requestedKey;\n\n if (value.includes('\\n')) {\n const line = splitOn(value, '\\n');\n key = line[0];\n value = line[1];\n }\n\n yield { file, key, value };\n }\n}\n","import type { ConfigGetResult, ConfigListSummary, SimpleGit } from '../../../typings';\nimport { configGetParser, configListParser } from '../responses/ConfigList';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { trailingFunctionArgument } from '../utils';\n\nexport enum GitConfigScope {\n system = 'system',\n global = 'global',\n local = 'local',\n worktree = 'worktree',\n}\n\nfunction asConfigScope<T extends GitConfigScope | undefined>(\n scope: GitConfigScope | unknown,\n fallback: T\n): GitConfigScope | T {\n if (typeof scope === 'string' && Object.hasOwn(GitConfigScope, scope)) {\n return scope as GitConfigScope;\n }\n return fallback;\n}\n\nfunction addConfigTask(\n key: string,\n value: string,\n append: boolean,\n scope: GitConfigScope\n): StringTask<string> {\n const commands: string[] = ['config', `--${scope}`];\n\n if (append) {\n commands.push('--add');\n }\n\n commands.push(key, value);\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): string {\n return text;\n },\n };\n}\n\nfunction getConfigTask(key: string, scope?: GitConfigScope): StringTask<ConfigGetResult> {\n const commands: string[] = ['config', '--null', '--show-origin', '--get-all', key];\n\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text) {\n return configGetParser(text, key);\n },\n };\n}\n\nfunction listConfigTask(scope?: GitConfigScope): StringTask<ConfigListSummary> {\n const commands = ['config', '--list', '--show-origin', '--null'];\n\n if (scope) {\n commands.push(`--${scope}`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string) {\n return configListParser(text);\n },\n };\n}\n\nexport default function (): Pick<SimpleGit, 'addConfig' | 'getConfig' | 'listConfig'> {\n return {\n addConfig(this: SimpleGitApi, key: string, value: string, ...rest: unknown[]) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], GitConfigScope.local)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n\n getConfig(this: SimpleGitApi, key: string, scope?: GitConfigScope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n\n listConfig(this: SimpleGitApi, ...rest: unknown[]) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], undefined)),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","export enum DiffNameStatus {\n ADDED = 'A',\n COPIED = 'C',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n CHANGED = 'T',\n UNMERGED = 'U',\n UNKNOWN = 'X',\n BROKEN = 'B',\n}\n\nconst diffNameStatus = new Set(Object.values(DiffNameStatus));\n\nexport function isDiffNameStatus(input: string): input is DiffNameStatus {\n return diffNameStatus.has(input as DiffNameStatus);\n}\n","import { GrepResult, SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport {\n asNumber,\n forEachLineWithContent,\n getTrailingOptions,\n NULL,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\n\nimport { configurationErrorTask } from './task';\n\nconst disallowedOptions = ['-h'];\n\nconst Query = Symbol('grepQuery');\n\nexport interface GitGrepQuery extends Iterable<string> {\n /** Adds one or more terms to be grouped as an \"and\" to any other terms */\n and(...and: string[]): this;\n\n /** Adds one or more search terms - git.grep will \"or\" this to other terms */\n param(...param: string[]): this;\n}\n\nclass GrepQuery implements GitGrepQuery {\n private [Query]: string[] = [];\n\n *[Symbol.iterator]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n\n and(...and: string[]) {\n and.length && this[Query].push('--and', '(', ...prefixedArray(and, '-e'), ')');\n return this;\n }\n\n param(...param: string[]) {\n this[Query].push(...prefixedArray(param, '-e'));\n return this;\n }\n}\n\n/**\n * Creates a new builder for a `git.grep` query with optional params\n */\nexport function grepQueryBuilder(...params: string[]): GitGrepQuery {\n return new GrepQuery().param(...params);\n}\n\nfunction parseGrep(grep: string): GrepResult {\n const paths: GrepResult['paths'] = new Set<string>();\n const results: GrepResult['results'] = {};\n\n forEachLineWithContent(grep, (input) => {\n const [path, line, preview] = input.split(NULL);\n paths.add(path);\n (results[path] = results[path] || []).push({\n line: asNumber(line),\n path,\n preview,\n });\n });\n\n return {\n paths,\n results,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'grep'> {\n return {\n grep(this: SimpleGitApi, searchTerm: string | GitGrepQuery) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\n\n for (const option of disallowedOptions) {\n if (options.includes(option)) {\n return this._runTask(\n configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n then\n );\n }\n }\n\n if (typeof searchTerm === 'string') {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n\n const commands = ['grep', '--null', '-n', '--full-name', ...options, ...searchTerm];\n\n return this._runTask(\n {\n commands,\n format: 'utf-8',\n parser(stdOut) {\n return parseGrep(stdOut);\n },\n },\n then\n );\n },\n };\n}\n","import type { Maybe, OptionFlags, Options } from '../types';\nimport { asStringArray } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport enum ResetMode {\n MIXED = 'mixed',\n SOFT = 'soft',\n HARD = 'hard',\n MERGE = 'merge',\n KEEP = 'keep',\n}\n\nconst validResetModes = asStringArray(Object.values(ResetMode));\n\nexport type ResetOptions = Options &\n OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> &\n OptionFlags<'--pathspec-from-file', string>;\n\nexport function resetTask(mode: Maybe<ResetMode>, customArgs: string[]) {\n const commands: string[] = ['reset'];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n\n return straightThroughStringTask(commands);\n}\n\nexport function getResetMode(mode: ResetMode | unknown): Maybe<ResetMode> {\n if (isValidResetMode(mode)) {\n return mode;\n }\n\n switch (typeof mode) {\n case 'string':\n case 'undefined':\n return ResetMode.SOFT;\n }\n\n return;\n}\n\nfunction isValidResetMode(mode: ResetMode | unknown): mode is ResetMode {\n return typeof mode === 'string' && validResetModes.includes(mode);\n}\n","import debug, { Debugger } from 'debug';\nimport {\n append,\n filterHasLength,\n filterString,\n filterType,\n NOOP,\n objectToString,\n remove,\n} from './utils';\nimport { Maybe } from './types';\n\ndebug.formatters.L = (value: any) => String(filterHasLength(value) ? value.length : '-');\ndebug.formatters.B = (value: Buffer) => {\n if (Buffer.isBuffer(value)) {\n return value.toString('utf8');\n }\n return objectToString(value);\n};\n\ntype OutputLoggingHandler = (message: string, ...args: any[]) => void;\n\nfunction createLog() {\n return debug('simple-git');\n}\n\nexport interface OutputLogger extends OutputLoggingHandler {\n readonly label: string;\n\n info: OutputLoggingHandler;\n step(nextStep?: string): OutputLogger;\n sibling(name: string): OutputLogger;\n}\n\nfunction prefixedLogger(\n to: Debugger,\n prefix: string,\n forward?: OutputLoggingHandler\n): OutputLoggingHandler {\n if (!prefix || !String(prefix).replace(/\\s*/, '')) {\n return !forward\n ? to\n : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\n\nfunction childLoggerName(\n name: Maybe<string>,\n childDebugger: Maybe<Debugger>,\n { namespace: parentNamespace }: Debugger\n): string {\n if (typeof name === 'string') {\n return name;\n }\n const childNamespace = (childDebugger && childDebugger.namespace) || '';\n\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n\n return childNamespace || parentNamespace;\n}\n\nexport function createLogger(\n label: string,\n verbose?: string | Debugger,\n initialStep?: string,\n infoDebugger = createLog()\n): OutputLogger {\n const labelPrefix = (label && `[${label}]`) || '';\n\n const spawned: OutputLogger[] = [];\n const debugDebugger: Maybe<Debugger> =\n typeof verbose === 'string' ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n\n return step(initialStep);\n\n function sibling(name: string, initial?: string) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n\n function step(phase?: string) {\n const stepPrefix = (phase && `[${phase}]`) || '';\n const debug = (debugDebugger && prefixedLogger(debugDebugger, stepPrefix)) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);\n\n return Object.assign(debugDebugger ? debug : info, {\n label,\n sibling,\n info,\n step,\n });\n }\n}\n\n/**\n * The `GitLogger` is used by the main `SimpleGit` runner to handle logging\n * any warnings or errors.\n */\nexport class GitLogger {\n public error: OutputLoggingHandler;\n\n public warn: OutputLoggingHandler;\n\n constructor(private _out: Debugger = createLog()) {\n this.error = prefixedLogger(_out, '[ERROR]');\n this.warn = prefixedLogger(_out, '[WARN]');\n }\n\n silent(silence = false) {\n if (silence !== this._out.enabled) {\n return;\n }\n\n const { namespace } = this._out;\n const env = (process.env.DEBUG || '').split(',').filter((s) => !!s);\n const hasOn = env.includes(namespace);\n const hasOff = env.includes(`-${namespace}`);\n\n // enabling the log\n if (!silence) {\n if (hasOff) {\n remove(env, `-${namespace}`);\n } else {\n env.push(namespace);\n }\n } else {\n if (hasOn) {\n remove(env, namespace);\n } else {\n env.push(`-${namespace}`);\n }\n }\n\n debug.enable(env.join(','));\n }\n}\n","import { SimpleGitTask } from '../types';\nimport { GitError } from '../errors/git-error';\nimport { createLogger, OutputLogger } from '../git-logger';\n\ntype AnySimpleGitTask = SimpleGitTask<any>;\n\ntype TaskInProgress = {\n name: string;\n logger: OutputLogger;\n task: AnySimpleGitTask;\n};\n\nexport class TasksPendingQueue {\n private _queue: Map<AnySimpleGitTask, TaskInProgress> = new Map();\n\n constructor(private logLabel = 'GitExecutor') {}\n\n private withProgress(task: AnySimpleGitTask) {\n return this._queue.get(task);\n }\n\n private createProgress(task: AnySimpleGitTask): TaskInProgress {\n const name = TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n\n return {\n task,\n logger,\n name,\n };\n }\n\n push(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.createProgress(task);\n progress.logger('Adding task to the queue, commands = %o', task.commands);\n\n this._queue.set(task, progress);\n\n return progress;\n }\n\n fatal(err: GitError) {\n for (const [task, { logger }] of Array.from(this._queue.entries())) {\n if (task === err.task) {\n logger.info(`Failed %o`, err);\n logger(\n `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n );\n } else {\n logger.info(\n `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n err.message\n );\n }\n\n this.complete(task);\n }\n\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n\n complete(task: AnySimpleGitTask) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n\n attempt(task: AnySimpleGitTask): TaskInProgress {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(undefined, 'TasksPendingQueue: attempt called for an unknown task');\n }\n progress.logger('Starting task');\n\n return progress;\n }\n\n static getName(name = 'empty') {\n return `task:${name}:${++TasksPendingQueue.counter}`;\n }\n\n private static counter = 0;\n}\n","import { spawn, SpawnOptions } from 'child_process';\nimport { GitError } from '../errors/git-error';\nimport { OutputLogger } from '../git-logger';\nimport { PluginStore } from '../plugins';\nimport { EmptyTask, isBufferTask, isEmptyTask } from '../tasks/task';\nimport {\n GitExecutorResult,\n Maybe,\n outputHandler,\n RunnableTask,\n SimpleGitExecutor,\n SimpleGitTask,\n} from '../types';\nimport { callTaskParser, first, GitOutputStreams, objectToString } from '../utils';\nimport { Scheduler } from './scheduler';\nimport { TasksPendingQueue } from './tasks-pending-queue';\n\nexport class GitExecutorChain implements SimpleGitExecutor {\n private _chain: Promise<any> = Promise.resolve();\n private _queue = new TasksPendingQueue();\n private _cwd: string | undefined;\n\n public get cwd() {\n return this._cwd || this._executor.cwd;\n }\n\n public set cwd(cwd: string) {\n this._cwd = cwd;\n }\n\n public get env() {\n return this._executor.env;\n }\n\n public get outputHandler() {\n return this._executor.outputHandler;\n }\n\n constructor(\n private _executor: SimpleGitExecutor,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {}\n\n public chain() {\n return this;\n }\n\n public push<R>(task: SimpleGitTask<R>): Promise<R> {\n this._queue.push(task);\n\n return (this._chain = this._chain.then(() => this.attemptTask(task)));\n }\n\n private async attemptTask<R>(task: SimpleGitTask<R>): Promise<void | R> {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n\n try {\n const { logger } = this._queue.attempt(task);\n return (await (isEmptyTask(task)\n ? this.attemptEmptyTask(task, logger)\n : this.attemptRemoteTask(task, logger))) as R;\n } catch (e) {\n throw this.onFatalException(task, e as Error);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n\n private onFatalException<R>(task: SimpleGitTask<R>, e: Error) {\n const gitError =\n e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n\n return gitError;\n }\n\n private async attemptRemoteTask<R>(task: RunnableTask<R>, logger: OutputLogger) {\n const binary = this._plugins.exec('spawn.binary', '', pluginContext(task, task.commands));\n const args = this._plugins.exec(\n 'spawn.args',\n [...task.commands],\n pluginContext(task, task.commands)\n );\n\n const raw = await this.gitResponse(\n task,\n binary,\n args,\n this.outputHandler,\n logger.step('SPAWN')\n );\n const outputStreams = await this.handleTaskData(task, args, raw, logger.step('HANDLE'));\n\n logger(`passing response to task's parser as a %s`, task.format);\n\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n\n private async attemptEmptyTask(task: EmptyTask, logger: OutputLogger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n\n private handleTaskData<R>(\n task: SimpleGitTask<R>,\n args: string[],\n result: GitExecutorResult,\n logger: OutputLogger\n ): Promise<GitOutputStreams> {\n const { exitCode, rejection, stdOut, stdErr } = result;\n\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n\n const { error } = this._plugins.exec(\n 'task.error',\n { error: rejection },\n {\n ...pluginContext(task, args),\n ...result,\n }\n );\n\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\n\n return task.onError(\n result,\n error,\n (newStdOut) => {\n logger.info(`custom error handler treated as success`);\n logger(`custom error returned a %s`, objectToString(newStdOut));\n\n done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\n );\n }\n\n if (error) {\n logger.info(\n `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n exitCode,\n stdErr.length,\n rejection\n );\n return fail(error);\n }\n\n logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n\n private async gitResponse<R>(\n task: SimpleGitTask<R>,\n command: string,\n args: string[],\n outputHandler: Maybe<outputHandler>,\n logger: OutputLogger\n ): Promise<GitExecutorResult> {\n const outputLogger = logger.sibling('output');\n const spawnOptions: SpawnOptions = this._plugins.exec(\n 'spawn.options',\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true,\n },\n pluginContext(task, task.commands)\n );\n\n return new Promise((done) => {\n const stdOut: Buffer[] = [];\n const stdErr: Buffer[] = [];\n\n logger.info(`%s %o`, command, args);\n logger('%O', spawnOptions);\n\n let rejection = this._beforeSpawn(task, args);\n if (rejection) {\n return done({\n stdOut,\n stdErr,\n exitCode: 9901,\n rejection,\n });\n }\n\n this._plugins.exec('spawn.before', undefined, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n const spawned = spawn(command, args, spawnOptions);\n\n spawned.stdout!.on(\n 'data',\n onDataReceived(stdOut, 'stdOut', logger, outputLogger.step('stdOut'))\n );\n spawned.stderr!.on(\n 'data',\n onDataReceived(stdErr, 'stdErr', logger, outputLogger.step('stdErr'))\n );\n\n spawned.on('error', onErrorReceived(stdErr, logger));\n\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout!, spawned.stderr!, [...args]);\n }\n\n this._plugins.exec('spawn.after', undefined, {\n ...pluginContext(task, args),\n spawned,\n close(exitCode: number, reason?: Error) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason,\n });\n },\n kill(reason: Error) {\n if (spawned.killed) {\n return;\n }\n\n rejection = reason;\n spawned.kill('SIGINT');\n },\n });\n });\n }\n\n private _beforeSpawn<R>(task: SimpleGitTask<R>, args: string[]) {\n let rejection: Maybe<Error>;\n this._plugins.exec('spawn.before', undefined, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n },\n });\n\n return rejection;\n }\n}\n\nfunction pluginContext<R>(task: SimpleGitTask<R>, commands: string[]) {\n return {\n method: first(task.commands) || '',\n commands,\n };\n}\n\nfunction onErrorReceived(target: Buffer[], logger: OutputLogger) {\n return (err: Error) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), 'ascii'));\n };\n}\n\nfunction onDataReceived(\n target: Buffer[],\n name: string,\n logger: OutputLogger,\n output: OutputLogger\n) {\n return (buffer: Buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\n","import type { PluginStore } from '../plugins';\nimport type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types';\n\nimport { GitExecutorChain } from './git-executor-chain';\nimport { Scheduler } from './scheduler';\n\nexport class GitExecutor implements SimpleGitExecutor {\n private _chain = new GitExecutorChain(this, this._scheduler, this._plugins);\n\n public env: GitExecutorEnv;\n public outputHandler?: outputHandler;\n\n constructor(\n public cwd: string,\n private _scheduler: Scheduler,\n private _plugins: PluginStore\n ) {}\n\n chain(): SimpleGitExecutor {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n\n push<R>(task: SimpleGitTask<R>): Promise<R> {\n return this._chain.push(task);\n }\n}\n","import { GitError } from './errors/git-error';\nimport { GitResponseError } from './errors/git-response-error';\nimport { SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport { NOOP } from './utils';\n\nexport function taskCallback<R>(\n task: SimpleGitTask<R>,\n response: Promise<R>,\n callback: SimpleGitTaskCallback<R> = NOOP\n) {\n const onSuccess = (data: R) => {\n callback(null, data);\n };\n\n const onError = (err: GitError | GitResponseError) => {\n if (err?.task === task) {\n callback(\n err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err,\n undefined as any\n );\n }\n };\n\n response.then(onSuccess, onError);\n}\n\nfunction addDeprecationNoticeToError(err: GitResponseError) {\n let log = (name: string) => {\n console.warn(\n `simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`\n );\n log = NOOP;\n };\n\n return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));\n\n function descriptorReducer(all: PropertyDescriptorMap, name: string): typeof all {\n if (name in err) {\n return all;\n }\n\n all[name] = {\n enumerable: false,\n configurable: false,\n get() {\n log(name);\n return err.git[name];\n },\n };\n\n return all;\n }\n}\n","import { folderExists } from '../utils';\nimport { SimpleGitExecutor } from '../types';\nimport { adhocExecTask } from './task';\n\nexport function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor) {\n return adhocExecTask((instance: SimpleGitExecutor) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n\n return ((root || instance).cwd = directory);\n });\n}\n","import type { SimpleGit } from '../../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, remove, trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nfunction checkoutTask(args: string[]) {\n const commands = ['checkout', ...args];\n if (commands[1] === '-b' && commands.includes('-B')) {\n commands[1] = remove(commands, '-B');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport default function (): Pick<SimpleGit, 'checkout' | 'checkoutBranch' | 'checkoutLocalBranch'> {\n return {\n checkout(this: SimpleGitApi) {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutBranch(this: SimpleGitApi, branchName, startPoint) {\n return this._runTask(\n checkoutTask(['-b', branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n\n checkoutLocalBranch(this: SimpleGitApi, branchName) {\n return this._runTask(\n checkoutTask(['-b', branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import type { SimpleGitApi } from '../simple-git-api';\nimport type { SimpleGit } from '../../../typings';\nimport { asCamelCase, asNumber, LineParser, parseStringResponse } from '../utils';\n\nexport interface CountObjectsResult {\n count: number;\n size: number;\n inPack: number;\n packs: number;\n sizePack: number;\n prunePackable: number;\n garbage: number;\n sizeGarbage: number;\n}\n\nfunction countObjectsResponse(): CountObjectsResult {\n return {\n count: 0,\n garbage: 0,\n inPack: 0,\n packs: 0,\n prunePackable: 0,\n size: 0,\n sizeGarbage: 0,\n sizePack: 0,\n };\n}\n\nconst parser: LineParser<CountObjectsResult> = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property as keyof typeof result] = asNumber(value);\n }\n }\n);\n\nexport default function (): Pick<SimpleGit, 'countObjects'> {\n return {\n countObjects(this: SimpleGitApi) {\n return this._runTask({\n commands: ['count-objects', '--verbose'],\n format: 'utf-8',\n parser(stdOut: string) {\n return parseStringResponse(countObjectsResponse(), [parser], stdOut);\n },\n });\n },\n };\n}\n","import { CommitResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<CommitResult>[] = [\n new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n result.branch = branch;\n result.commit = commit;\n result.root = !!root;\n }),\n new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n const parts = author.split('<');\n const email = parts.pop();\n\n if (!email || !email.includes('@')) {\n return;\n }\n\n result.author = {\n email: email.substr(0, email.length - 1),\n name: parts.join('<').trim(),\n };\n }),\n new LineParser(\n /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n (result, [changes, insertions, deletions]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n result.summary.insertions = parseInt(insertions, 10) || 0;\n result.summary.deletions = parseInt(deletions, 10) || 0;\n }\n ),\n new LineParser(\n /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n (result, [changes, lines, direction]) => {\n result.summary.changes = parseInt(changes, 10) || 0;\n const count = parseInt(lines, 10) || 0;\n if (direction === '-') {\n result.summary.deletions = count;\n } else if (direction === '+') {\n result.summary.insertions = count;\n }\n }\n ),\n];\n\nexport function parseCommitResult(stdOut: string): CommitResult {\n const result: CommitResult = {\n author: null,\n branch: '',\n commit: '',\n root: false,\n summary: {\n changes: 0,\n insertions: 0,\n deletions: 0,\n },\n };\n return parseStringResponse(result, parsers, stdOut);\n}\n","import type { CommitResult, SimpleGit } from '../../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { parseCommitResult } from '../parsers/parse-commit';\nimport {\n asArray,\n asStringArray,\n filterArray,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n prefixedArray,\n trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport function commitTask(\n message: string[],\n files: string[],\n customArgs: string[]\n): StringTask<CommitResult> {\n const commands: string[] = [\n '-c',\n 'core.abbrev=40',\n 'commit',\n ...prefixedArray(message, '-m'),\n ...files,\n ...customArgs,\n ];\n\n return {\n commands,\n format: 'utf-8',\n parser: parseCommitResult,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'commit'> {\n return {\n commit(this: SimpleGitApi, message: string | string[], ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const task =\n rejectDeprecatedSignatures(message) ||\n commitTask(\n asArray(message),\n asArray(filterType(rest[0], filterStringOrStringArray, [])),\n [\n ...asStringArray(filterType(rest[1], filterArray, [])),\n ...getTrailingOptions(arguments, 0, true),\n ]\n );\n\n return this._runTask(task, next);\n },\n };\n\n function rejectDeprecatedSignatures(message?: unknown) {\n return (\n !filterStringOrStringArray(message) &&\n configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n )\n );\n }\n}\n","import { Response, SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'firstCommit'> {\n return {\n firstCommit(this: SimpleGitApi): Response<string> {\n return this._runTask(\n straightThroughStringTask(['rev-list', '--max-parents=0', 'HEAD'], true),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import { straightThroughStringTask } from './task';\nimport { StringTask } from '../types';\n\n/**\n * Task used by `git.hashObject`\n */\nexport function hashObjectTask(filePath: string, write: boolean): StringTask<string> {\n const commands = ['hash-object', filePath];\n if (write) {\n commands.push('-w');\n }\n\n return straightThroughStringTask(commands, true);\n}\n","import { InitResult } from '../../../typings';\n\nexport class InitSummary implements InitResult {\n constructor(\n public readonly bare: boolean,\n public readonly path: string,\n public readonly existing: boolean,\n public readonly gitDir: string\n ) {}\n}\n\nconst initResponseRegex = /^Init.+ repository in (.+)$/;\nconst reInitResponseRegex = /^Rein.+ in (.+)$/;\n\nexport function parseInit(bare: boolean, path: string, text: string) {\n const response = String(text).trim();\n let result;\n\n if ((result = initResponseRegex.exec(response))) {\n return new InitSummary(bare, path, false, result[1]);\n }\n\n if ((result = reInitResponseRegex.exec(response))) {\n return new InitSummary(bare, path, true, result[1]);\n }\n\n let gitDir = '';\n const tokens = response.split(' ');\n while (tokens.length) {\n const token = tokens.shift();\n if (token === 'in') {\n gitDir = tokens.join(' ');\n break;\n }\n }\n\n return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\n","import { InitResult } from '../../../typings';\nimport { parseInit } from '../responses/InitSummary';\nimport { StringTask } from '../types';\n\nconst bareCommand = '--bare';\n\nfunction hasBareCommand(command: string[]) {\n return command.includes(bareCommand);\n}\n\nexport function initTask(bare = false, path: string, customArgs: string[]): StringTask<InitResult> {\n const commands = ['init', ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(text: string): InitResult {\n return parseInit(commands.includes('--bare'), path, text);\n },\n };\n}\n","export enum LogFormat {\n NONE = '',\n STAT = '--stat',\n NUM_STAT = '--numstat',\n NAME_ONLY = '--name-only',\n NAME_STATUS = '--name-status',\n}\n\nconst logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n\nexport function logFormatFromCommand(customArgs: string[]) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}` as LogFormat;\n }\n }\n\n return LogFormat.NONE;\n}\n\nexport function isLogFormat(customArg: string | unknown) {\n return logFormatRegex.test(customArg as string);\n}\n","import { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../../typings';\n\n/***\n * The DiffSummary is returned as a response to getting `git().status()`\n */\nexport class DiffSummary implements DiffResult {\n changed = 0;\n deletions = 0;\n insertions = 0;\n\n files: Array<DiffResultTextFile | DiffResultBinaryFile> = [];\n}\n","import { DiffResult } from '../../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { DiffSummary } from '../responses/DiffSummary';\nimport { isDiffNameStatus } from '../tasks/diff-name-status';\nimport { asNumber, LineParser, orVoid, parseStringResponse } from '../utils';\n\nconst statParser = [\n new LineParser<DiffResult>(\n /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n (result, [file, changes, alterations = '']) => {\n result.files.push({\n file: file.trim(),\n changes: asNumber(changes),\n insertions: alterations.replace(/[^+]/g, '').length,\n deletions: alterations.replace(/[^-]/g, '').length,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(\n /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n (result, [file, before, after]) => {\n result.files.push({\n file: file.trim(),\n before: asNumber(before),\n after: asNumber(after),\n binary: true,\n });\n }\n ),\n new LineParser<DiffResult>(\n /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n (result, [changed, summary]) => {\n const inserted = /(\\d+) i/.exec(summary);\n const deleted = /(\\d+) d/.exec(summary);\n\n result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n ),\n];\n\nconst numStatParser = [\n new LineParser<DiffResult>(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false,\n });\n }\n ),\n new LineParser<DiffResult>(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true,\n });\n }),\n];\n\nconst nameOnlyParser = [\n new LineParser<DiffResult>(/(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n });\n }),\n];\n\nconst nameStatusParser = [\n new LineParser<DiffResult>(\n /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n (result, [status, similarity, from, _to, to]) => {\n result.changed++;\n result.files.push({\n file: to ?? from,\n changes: 0,\n insertions: 0,\n deletions: 0,\n binary: false,\n status: orVoid(isDiffNameStatus(status) && status),\n from: orVoid(!!to && from !== to && from),\n similarity: asNumber(similarity),\n });\n }\n ),\n];\n\nconst diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {\n [LogFormat.NONE]: statParser,\n [LogFormat.STAT]: statParser,\n [LogFormat.NUM_STAT]: numStatParser,\n [LogFormat.NAME_STATUS]: nameStatusParser,\n [LogFormat.NAME_ONLY]: nameOnlyParser,\n};\n\nexport function getDiffParser(format = LogFormat.NONE) {\n const parser = diffSummaryParsers[format];\n\n return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);\n}\n","import { ListLogLine, LogResult } from '../../../typings';\nimport { toLinesWithContent } from '../utils';\nimport { getDiffParser } from './parse-diff-summary';\nimport { LogFormat } from '../args/log-format';\n\nexport const START_BOUNDARY = 'òòòòòò ';\n\nexport const COMMIT_BOUNDARY = ' òò';\n\nexport const SPLITTER = ' ò ';\n\nconst defaultFieldNames = ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];\n\nfunction lineBuilder(tokens: string[], fields: string[]): any {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || '';\n return line;\n },\n Object.create({ diff: null }) as any\n );\n}\n\nexport function createListLogSummaryParser<T = any>(\n splitter = SPLITTER,\n fields = defaultFieldNames,\n logFormat = LogFormat.NONE\n) {\n const parseDiffResult = getDiffParser(logFormat);\n\n return function (stdOut: string): LogResult<T> {\n const all: ReadonlyArray<T & ListLogLine> = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function (item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine: T & ListLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n\n if (lineDetail.length > 1 && !!lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n\n return listLogLine;\n });\n\n return {\n all,\n latest: (all.length && all[0]) || null,\n total: all.length,\n };\n };\n}\n","import { StringTask } from '../types';\nimport { DiffResult } from '../../../typings';\nimport { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format';\nimport { getDiffParser } from '../parsers/parse-diff-summary';\nimport { configurationErrorTask, EmptyTask } from './task';\n\nexport function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {\n let logFormat = logFormatFromCommand(customArgs);\n\n const commands = ['diff'];\n\n if (logFormat === LogFormat.NONE) {\n logFormat = LogFormat.STAT;\n commands.push('--stat=4096');\n }\n\n commands.push(...customArgs);\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser: getDiffParser(logFormat),\n }\n );\n}\n\nexport function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {\n const flags = customArgs.filter(isLogFormat);\n\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(',')}`\n );\n }\n\n if (flags.length && customArgs.includes('-z')) {\n return configurationErrorTask(\n `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n );\n }\n}\n","import type { LogResult, Options, SimpleGit } from '../../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { pathspec } from '../args/pathspec';\nimport {\n COMMIT_BOUNDARY,\n createListLogSummaryParser,\n SPLITTER,\n START_BOUNDARY,\n} from '../parsers/parse-list-log-summary';\nimport {\n appendTaskOptions,\n asStringArray,\n filterArray,\n filterPlainObject,\n filterString,\n filterType,\n trailingFunctionArgument,\n trailingOptionsArgument,\n} from '../utils';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { configurationErrorTask } from './task';\nimport { validateLogFormatConfig } from './diff';\nimport { StringTask } from '../types';\n\nenum excludeOptions {\n '--pretty',\n 'max-count',\n 'maxCount',\n 'n',\n 'file',\n 'format',\n 'from',\n 'to',\n 'splitter',\n 'symmetric',\n 'mailMap',\n 'multiLine',\n 'strictDate',\n}\n\nexport interface DefaultLogFields {\n hash: string;\n date: string;\n message: string;\n refs: string;\n body: string;\n author_name: string;\n author_email: string;\n}\n\nexport type LogOptions<T = DefaultLogFields> = {\n file?: string;\n format?: T;\n from?: string;\n mailMap?: boolean;\n maxCount?: number;\n multiLine?: boolean;\n splitter?: string;\n strictDate?: boolean;\n symmetric?: boolean;\n to?: string;\n};\n\ninterface ParsedLogOptions {\n fields: string[];\n splitter: string;\n commands: string[];\n}\n\nfunction prettyFormat(\n format: Record<string, string | unknown>,\n splitter: string\n): [string[], string] {\n const fields: string[] = [];\n const formatStr: string[] = [];\n\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n\n return [fields, formatStr.join(splitter)];\n}\n\nfunction userOptions<T extends Options>(input: T): Options {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {} as Options);\n}\n\nexport function parseLogOptions<T extends Options>(\n opt: Options | LogOptions<T> = {},\n customArgs: string[] = []\n): ParsedLogOptions {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format)\n ? opt.format\n : {\n hash: '%H',\n date: opt.strictDate === false ? '%ai' : '%aI',\n message: '%s',\n refs: '%D',\n body: opt.multiLine ? '%B' : '%b',\n author_name: opt.mailMap !== false ? '%aN' : '%an',\n author_email: opt.mailMap !== false ? '%aE' : '%ae',\n };\n\n const [fields, formatStr] = prettyFormat(format, splitter);\n\n const suffix: string[] = [];\n const command: string[] = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs,\n ];\n\n const maxCount: number | undefined = (opt as any).n || (opt as any)['max-count'] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? '...' : '..';\n suffix.push(`${opt.from || ''}${rangeOperator}${opt.to || ''}`);\n }\n\n if (filterString(opt.file)) {\n command.push('--follow', pathspec(opt.file));\n }\n\n appendTaskOptions(userOptions(opt as Options), command);\n\n return {\n fields,\n splitter,\n commands: [...command, ...suffix],\n };\n}\n\nexport function logTask<T>(\n splitter: string,\n fields: string[],\n customArgs: string[]\n): StringTask<LogResult<T>> {\n const parser = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n\n return {\n commands: ['log', ...customArgs],\n format: 'utf-8',\n parser,\n };\n}\n\nexport default function (): Pick<SimpleGit, 'log'> {\n return {\n log<T extends Options>(this: SimpleGitApi, ...rest: unknown[]) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions<T>(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task =\n rejectDeprecatedSignatures(...rest) ||\n validateLogFormatConfig(options.commands) ||\n createLogTask(options);\n\n return this._runTask(task, next);\n },\n };\n\n function createLogTask(options: ParsedLogOptions) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n\n function rejectDeprecatedSignatures(from?: unknown, to?: unknown) {\n return (\n filterString(from) &&\n filterString(to) &&\n configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n )\n );\n }\n}\n","import {\n MergeConflict,\n MergeConflictDeletion,\n MergeDetail,\n MergeResultStatus,\n} from '../../../typings';\n\nexport class MergeSummaryConflict implements MergeConflict {\n constructor(\n public readonly reason: string,\n public readonly file: string | null = null,\n public readonly meta?: MergeConflictDeletion\n ) {}\n\n toString() {\n return `${this.file}:${this.reason}`;\n }\n}\n\nexport class MergeSummaryDetail implements MergeDetail {\n public conflicts: MergeConflict[] = [];\n public merges: string[] = [];\n public result: MergeResultStatus = 'success';\n\n get failed() {\n return this.conflicts.length > 0;\n }\n\n get reason() {\n return this.result;\n }\n\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(', ')}`;\n }\n\n return 'OK';\n }\n}\n","import {\n PullDetailFileChanges,\n PullDetailSummary,\n PullFailedResult,\n PullResult,\n} from '../../../typings';\n\nexport class PullSummary implements PullResult {\n public remoteMessages = {\n all: [],\n };\n public created = [];\n public deleted: string[] = [];\n public files: string[] = [];\n public deletions: PullDetailFileChanges = {};\n public insertions: PullDetailFileChanges = {};\n public summary: PullDetailSummary = {\n changes: 0,\n deletions: 0,\n insertions: 0,\n };\n}\n\nexport class PullFailedSummary implements PullFailedResult {\n remote = '';\n hash = {\n local: '',\n remote: '',\n };\n branch = {\n local: '',\n remote: '',\n };\n message = '';\n\n toString() {\n return this.message;\n }\n}\n","import {\n RemoteMessageResult,\n RemoteMessages,\n RemoteMessagesObjectEnumeration,\n} from '../../../typings';\nimport { asNumber, RemoteLineParser } from '../utils';\n\nfunction objectEnumerationResult<T extends RemoteMessages = RemoteMessages>(\n remoteMessages: T\n): RemoteMessagesObjectEnumeration {\n return (remoteMessages.objects = remoteMessages.objects || {\n compressing: 0,\n counting: 0,\n enumerating: 0,\n packReused: 0,\n reused: { count: 0, delta: 0 },\n total: { count: 0, delta: 0 },\n });\n}\n\nfunction asObjectCount(source: string) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n\n return {\n count: asNumber((count && count[1]) || '0'),\n delta: asNumber((delta && delta[1]) || '0'),\n };\n}\n\nexport const remoteMessagesObjectParsers: RemoteLineParser<RemoteMessageResult<RemoteMessages>>[] =\n [\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n (result, [action, count]) => {\n const key = action.toLowerCase();\n const enumeration = objectEnumerationResult(result.remoteMessages);\n\n Object.assign(enumeration, { [key]: asNumber(count) });\n }\n ),\n new RemoteLineParser(\n /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n (result, [total, reused, packReused]) => {\n const objects = objectEnumerationResult(result.remoteMessages);\n objects.total = asObjectCount(total);\n objects.reused = asObjectCount(reused);\n objects.packReused = asNumber(packReused);\n }\n ),\n ];\n","import { PushResultRemoteMessages, RemoteMessageResult, RemoteMessages } from '../../../typings';\nimport { asNumber, parseStringResponse, RemoteLineParser } from '../utils';\nimport { remoteMessagesObjectParsers } from './parse-remote-objects';\n\nconst parsers: RemoteLineParser<RemoteMessageResult<PushResultRemoteMessages | RemoteMessages>>[] =\n [\n new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n result.remoteMessages.all.push(text.trim());\n return false;\n }),\n ...remoteMessagesObjectParsers,\n new RemoteLineParser(\n [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [pullRequestUrl]) => {\n (result.remoteMessages as PushResultRemoteMessages).pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n (result.remoteMessages as PushResultRemoteMessages).vulnerabilities = {\n count: asNumber(count),\n summary,\n url,\n };\n }\n ),\n ];\n\nexport function parseRemoteMessages<T extends RemoteMessages = RemoteMessages>(\n _stdOut: string,\n stdErr: string\n): RemoteMessageResult {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() as T }, parsers, stdErr);\n}\n\nexport class RemoteMessageSummary implements RemoteMessages {\n public readonly all: string[] = [];\n}\n","import { PullDetail, PullFailedResult, PullResult, RemoteMessages } from '../../../typings';\nimport { PullFailedSummary, PullSummary } from '../responses/PullSummary';\nimport { TaskParser } from '../types';\nimport { append, LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nconst FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\nconst SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\nconst ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n\nconst parsers: LineParser<PullResult>[] = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== undefined || deletions !== undefined) {\n result.summary.changes = +changes || 0;\n result.summary.insertions = +insertions || 0;\n result.summary.deletions = +deletions || 0;\n return true;\n }\n return false;\n }),\n new LineParser(ACTION_REGEX, (result, [action, file]) => {\n append(result.files, file);\n append(action === 'create' ? result.created : result.deleted, file);\n }),\n];\n\nconst errorParsers: LineParser<PullFailedResult>[] = [\n new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n new LineParser(\n /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n result.branch.local = branchLocal;\n result.hash.local = hashLocal;\n result.branch.remote = branchRemote;\n result.hash.remote = hashRemote;\n }\n ),\n];\n\nexport const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);\n};\n\nexport const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages<RemoteMessages>(stdOut, stdErr)\n );\n};\n\nexport function parsePullErrorResult(stdOut: string, stdErr: string) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n\n return pullError.message && pullError;\n}\n","import { MergeDetail, MergeResult } from '../../../typings';\nimport { MergeSummaryConflict, MergeSummaryDetail } from '../responses/MergeSummary';\nimport { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parsePullResult } from './parse-pull';\n\nconst parsers: LineParser<MergeDetail>[] = [\n new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n summary.merges.push(autoMerge);\n }),\n new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file));\n }),\n new LineParser(\n /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n (summary, [reason, file, deleteRef]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n }\n ),\n new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n summary.conflicts.push(new MergeSummaryConflict(reason, null));\n }),\n new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n summary.result = result;\n }),\n];\n\n/**\n * Parse the complete response from `git.merge`\n */\nexport const parseMergeResult: TaskParser<string, MergeResult> = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n};\n\n/**\n * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge`\n * @param stdOut\n */\nexport const parseMergeDetail: TaskParser<string, MergeDetail> = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers, stdOut);\n};\n","import { MergeResult } from '../../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseMergeResult } from '../parsers/parse-merge';\nimport { StringTask } from '../types';\nimport { configurationErrorTask, EmptyTask } from './task';\n\nexport function mergeTask(customArgs: string[]): EmptyTask | StringTask<MergeResult> {\n if (!customArgs.length) {\n return configurationErrorTask('Git.merge requires at least one option');\n }\n\n return {\n commands: ['merge', ...customArgs],\n format: 'utf-8',\n parser(stdOut, stdErr): MergeResult {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n\n return merge;\n },\n };\n}\n","import {\n PushDetail,\n PushResult,\n PushResultPushedItem,\n PushResultRemoteMessages,\n} from '../../../typings';\nimport { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nfunction pushResultPushedItem(local: string, remote: string, status: string): PushResultPushedItem {\n const deleted = status.includes('deleted');\n const tag = status.includes('tag') || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes('new');\n\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote,\n };\n}\n\nconst parsers: LineParser<PushDetail>[] = [\n new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n result.repo = repo;\n }),\n new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n result.ref = {\n ...(result.ref || {}),\n local,\n };\n }),\n new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n result.pushed.push(pushResultPushedItem(local, remote, type));\n }),\n new LineParser(\n /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n (result, [local, remote, remoteName]) => {\n result.branch = {\n ...(result.branch || {}),\n local,\n remote,\n remoteName,\n };\n }\n ),\n new LineParser(\n /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n (result, [local, remote, from, to]) => {\n result.update = {\n head: {\n local,\n remote,\n },\n hash: {\n from,\n to,\n },\n };\n }\n ),\n];\n\nexport const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages<PushResultRemoteMessages>(stdOut, stdErr);\n\n return {\n ...pushDetail,\n ...responseDetail,\n };\n};\n\nexport const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers, [stdOut, stdErr]);\n};\n","import { PushResult } from '../../../typings';\nimport { parsePushResult as parser } from '../parsers/parse-push';\nimport { StringTask } from '../types';\nimport { append, remove } from '../utils';\n\ntype PushRef = { remote?: string; branch?: string };\n\nexport function pushTagsTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n append(customArgs, '--tags');\n return pushTask(ref, customArgs);\n}\n\nexport function pushTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n const commands = ['push', ...customArgs];\n if (ref.branch) {\n commands.splice(1, 0, ref.branch);\n }\n if (ref.remote) {\n commands.splice(1, 0, ref.remote);\n }\n\n remove(commands, '-v');\n append(commands, '--verbose');\n append(commands, '--porcelain');\n\n return {\n commands,\n format: 'utf-8',\n parser,\n };\n}\n","import { SimpleGit } from '../../../typings';\nimport { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, trailingFunctionArgument } from '../utils';\nimport { straightThroughBufferTask, straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'showBuffer' | 'show'> {\n return {\n showBuffer(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n if (!commands.includes('--binary')) {\n commands.splice(1, 0, '--binary');\n }\n\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n\n show(this: SimpleGitApi) {\n const commands = ['show', ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n };\n}\n","import { FileStatusResult } from '../../../typings';\n\nexport const fromPathRegex = /^(.+)\\0(.+)$/;\n\nexport class FileStatusSummary implements FileStatusResult {\n public readonly from: string | undefined;\n\n constructor(\n public path: string,\n public index: string,\n public working_dir: string\n ) {\n if (index === 'R' || working_dir === 'R') {\n const detail = fromPathRegex.exec(path) || [null, path, path];\n this.from = detail[2] || '';\n this.path = detail[1] || '';\n }\n }\n}\n","import { StatusResult } from '../../../typings';\nimport { append, filterString, filterType, NULL } from '../utils';\nimport { FileStatusSummary } from './FileStatusSummary';\n\ntype StatusLineParser = (result: StatusResult, file: string) => void;\n\nexport class StatusSummary implements StatusResult {\n public not_added = [];\n public conflicted = [];\n public created = [];\n public deleted = [];\n public ignored = undefined;\n public modified = [];\n public renamed = [];\n public files = [];\n public staged = [];\n public ahead = 0;\n public behind = 0;\n public current = null;\n public tracking = null;\n public detached = false;\n\n public isClean = () => {\n return !this.files.length;\n };\n}\n\nenum PorcelainFileStatus {\n ADDED = 'A',\n DELETED = 'D',\n MODIFIED = 'M',\n RENAMED = 'R',\n COPIED = 'C',\n UNMERGED = 'U',\n UNTRACKED = '?',\n IGNORED = '!',\n NONE = ' ',\n}\n\nfunction renamedFile(line: string) {\n const [to, from] = line.split(NULL);\n\n return {\n from: from || to,\n to,\n };\n}\n\nfunction parser(\n indexX: PorcelainFileStatus,\n indexY: PorcelainFileStatus,\n handler: StatusLineParser\n): [string, StatusLineParser] {\n return [`${indexX}${indexY}`, handler];\n}\n\nfunction conflicts(indexX: PorcelainFileStatus, ...indexY: PorcelainFileStatus[]) {\n return indexY.map((y) => parser(indexX, y, (result, file) => append(result.conflicted, file)));\n}\n\nconst parsers: Map<string, StatusLineParser> = new Map([\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.ADDED, (result, file) =>\n append(result.created, file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.DELETED, (result, file) =>\n append(result.deleted, file)\n ),\n parser(PorcelainFileStatus.NONE, PorcelainFileStatus.MODIFIED, (result, file) =>\n append(result.modified, file)\n ),\n\n parser(\n PorcelainFileStatus.ADDED,\n PorcelainFileStatus.NONE,\n (result, file) => append(result.created, file) && append(result.staged, file)\n ),\n parser(\n PorcelainFileStatus.ADDED,\n PorcelainFileStatus.MODIFIED,\n (result, file) =>\n append(result.created, file) &&\n append(result.staged, file) &&\n append(result.modified, file)\n ),\n\n parser(\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.NONE,\n (result, file) => append(result.deleted, file) && append(result.staged, file)\n ),\n\n parser(\n PorcelainFileStatus.MODIFIED,\n PorcelainFileStatus.NONE,\n (result, file) => append(result.modified, file) && append(result.staged, file)\n ),\n parser(\n PorcelainFileStatus.MODIFIED,\n PorcelainFileStatus.MODIFIED,\n (result, file) => append(result.modified, file) && append(result.staged, file)\n ),\n\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.NONE, (result, file) => {\n append(result.renamed, renamedFile(file));\n }),\n parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.MODIFIED, (result, file) => {\n const renamed = renamedFile(file);\n append(result.renamed, renamed);\n append(result.modified, renamed.to);\n }),\n parser(PorcelainFileStatus.IGNORED, PorcelainFileStatus.IGNORED, (_result, _file) => {\n append((_result.ignored = _result.ignored || []), _file);\n }),\n\n parser(PorcelainFileStatus.UNTRACKED, PorcelainFileStatus.UNTRACKED, (result, file) =>\n append(result.not_added, file)\n ),\n\n ...conflicts(PorcelainFileStatus.ADDED, PorcelainFileStatus.ADDED, PorcelainFileStatus.UNMERGED),\n ...conflicts(\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n ...conflicts(\n PorcelainFileStatus.UNMERGED,\n PorcelainFileStatus.ADDED,\n PorcelainFileStatus.DELETED,\n PorcelainFileStatus.UNMERGED\n ),\n\n [\n '##',\n (result, line) => {\n const aheadReg = /ahead (\\d+)/;\n const behindReg = /behind (\\d+)/;\n const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n const trackingReg = /\\.{3}(\\S*)/;\n const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n\n let regexResult = aheadReg.exec(line);\n result.ahead = (regexResult && +regexResult[1]) || 0;\n\n regexResult = behindReg.exec(line);\n result.behind = (regexResult && +regexResult[1]) || 0;\n\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n\n result.detached = /\\(no branch\\)/.test(line);\n },\n ],\n]);\n\nexport const parseStatusSummary = function (text: string): StatusResult {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n\n if (!line) {\n continue;\n }\n\n if (line.charAt(0) === PorcelainFileStatus.RENAMED) {\n line += NULL + (lines[i++] || '');\n }\n\n splitLine(status, line);\n }\n\n return status;\n};\n\nfunction splitLine(result: StatusResult, lineStr: string) {\n const trimmed = lineStr.trim();\n switch (' ') {\n case trimmed.charAt(2):\n return data(trimmed.charAt(0), trimmed.charAt(1), trimmed.substr(3));\n case trimmed.charAt(1):\n return data(PorcelainFileStatus.NONE, trimmed.charAt(0), trimmed.substr(2));\n default:\n return;\n }\n\n function data(index: string, workingDir: string, path: string) {\n const raw = `${index}${workingDir}`;\n const handler = parsers.get(raw);\n\n if (handler) {\n handler(result, path);\n }\n\n if (raw !== '##' && raw !== '!!') {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\n","import { StatusResult } from '../../../typings';\nimport { parseStatusSummary } from '../responses/StatusSummary';\nimport { StringTask } from '../types';\n\nconst ignoredOptions = ['--null', '-z'];\n\nexport function statusTask(customArgs: string[]): StringTask<StatusResult> {\n const commands = [\n 'status',\n '--porcelain',\n '-b',\n '-u',\n '--null',\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg)),\n ];\n\n return {\n format: 'utf-8',\n commands,\n parser(text: string) {\n return parseStatusSummary(text);\n },\n };\n}\n","import type { SimpleGitApi } from '../simple-git-api';\nimport type { SimpleGit } from '../../../typings';\nimport { asNumber, ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nexport interface VersionResult {\n major: number;\n minor: number;\n patch: number | string;\n agent: string;\n installed: boolean;\n}\n\nconst NOT_INSTALLED = 'installed=false';\n\nfunction versionResponse(\n major = 0,\n minor = 0,\n patch: string | number = 0,\n agent = '',\n installed = true\n): VersionResult {\n return Object.defineProperty(\n {\n major,\n minor,\n patch,\n agent,\n installed,\n },\n 'toString',\n {\n value() {\n return `${this.major}.${this.minor}.${this.patch}`;\n },\n configurable: false,\n enumerable: false,\n }\n );\n}\n\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, '', false);\n}\n\nexport default function (): Pick<SimpleGit, 'version'> {\n return {\n version(this: SimpleGitApi) {\n return this._runTask({\n commands: ['--version'],\n format: 'utf-8',\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === ExitCodes.NOT_FOUND) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n\n fail(error);\n },\n });\n },\n };\n}\n\nconst parsers: LineParser<VersionResult>[] = [\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(\n result,\n versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n );\n }\n ),\n new LineParser(\n /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n (result, [major, minor, patch, agent = '']) => {\n Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n }\n ),\n];\n\nfunction versionParser(stdOut: string) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers, stdOut);\n}\n","import { SimpleGitBase } from '../../typings';\nimport { taskCallback } from './task-callback';\nimport { changeWorkingDirectoryTask } from './tasks/change-working-directory';\nimport checkout from './tasks/checkout';\nimport countObjects from './tasks/count-objects';\nimport commit from './tasks/commit';\nimport config from './tasks/config';\nimport firstCommit from './tasks/first-commit';\nimport grep from './tasks/grep';\nimport { hashObjectTask } from './tasks/hash-object';\nimport { initTask } from './tasks/init';\nimport log from './tasks/log';\nimport { mergeTask } from './tasks/merge';\nimport { pushTask } from './tasks/push';\nimport show from './tasks/show';\nimport { statusTask } from './tasks/status';\nimport { configurationErrorTask, straightThroughStringTask } from './tasks/task';\nimport version from './tasks/version';\nimport { outputHandler, SimpleGitExecutor, SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport {\n asArray,\n filterString,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n} from './utils';\n\nexport class SimpleGitApi implements SimpleGitBase {\n constructor(private _executor: SimpleGitExecutor) {}\n\n protected _runTask<T>(task: SimpleGitTask<T>, then?: SimpleGitTaskCallback<T>) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n\n if (then) {\n taskCallback(task, promise, then);\n }\n\n return Object.create(this, {\n then: { value: promise.then.bind(promise) },\n catch: { value: promise.catch.bind(promise) },\n _executor: { value: chain },\n });\n }\n\n add(files: string | string[]) {\n return this._runTask(\n straightThroughStringTask(['add', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n cwd(directory: string | { path: string; root?: boolean }) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof directory === 'string') {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n\n if (typeof directory?.path === 'string') {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n (directory.root && this._executor) || undefined\n ),\n next\n );\n }\n\n return this._runTask(\n configurationErrorTask('Git.cwd: workingDirectory must be supplied as a string'),\n next\n );\n }\n\n hashObject(path: string, write: boolean | unknown) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n\n init(bare?: boolean | unknown) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n\n mergeFromTo(remote: string, branch: string) {\n if (!(filterString(remote) && filterString(branch))) {\n return this._runTask(\n configurationErrorTask(\n `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n )\n );\n }\n\n return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n\n outputHandler(handler: outputHandler) {\n this._executor.outputHandler = handler;\n return this;\n }\n\n push() {\n const task = pushTask(\n {\n remote: filterType(arguments[0], filterString),\n branch: filterType(arguments[1], filterString),\n },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n }\n\n stash() {\n return this._runTask(\n straightThroughStringTask(['stash', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n}\n\nObject.assign(\n SimpleGitApi.prototype,\n checkout(),\n commit(),\n config(),\n countObjects(),\n firstCommit(),\n grep(),\n log(),\n show(),\n version()\n);\n","import { append, remove } from '../utils';\nimport { createDeferred, DeferredPromise } from '@kwsites/promise-deferred';\nimport { createLogger } from '../git-logger';\n\ntype ScheduleCompleteCallback = () => void;\ntype ScheduledTask = Pick<DeferredPromise<ScheduleCompleteCallback>, 'promise' | 'done'> & {\n id: number;\n};\n\nconst createScheduledTask: () => ScheduledTask = (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred<ScheduleCompleteCallback>();\n\n return {\n promise,\n done,\n id,\n };\n };\n})();\n\nexport class Scheduler {\n private logger = createLogger('', 'scheduler');\n private pending: ScheduledTask[] = [];\n private running: ScheduledTask[] = [];\n\n constructor(private concurrency = 2) {\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n\n private schedule() {\n if (!this.pending.length || this.running.length >= this.concurrency) {\n this.logger(\n `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n this.pending.length,\n this.running.length,\n this.concurrency\n );\n return;\n }\n\n const task = append(this.running, this.pending.shift()!);\n this.logger(`Attempting id=%s`, task.id);\n task.done(() => {\n this.logger(`Completing id=`, task.id);\n remove(this.running, task);\n this.schedule();\n });\n }\n\n next(): Promise<ScheduleCompleteCallback> {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n\n this.schedule();\n\n return promise;\n }\n}\n","import { straightThroughStringTask } from './task';\nimport { OptionFlags, Options, StringTask } from '../types';\n\nexport type ApplyOptions = Options &\n OptionFlags<\n | '--stat'\n | '--numstat'\n | '--summary'\n | '--check'\n | '--index'\n | '--intent-to-add'\n | '--3way'\n | '--apply'\n | '--no-add'\n | '-R'\n | '--reverse'\n | '--allow-binary-replacement'\n | '--binary'\n | '--reject'\n | '-z'\n | '--inaccurate-eof'\n | '--recount'\n | '--cached'\n | '--ignore-space-change'\n | '--ignore-whitespace'\n | '--verbose'\n | '--unsafe-paths'\n > &\n OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> &\n OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> &\n OptionFlags<'-p' | '-C', number>;\n\nexport function applyPatchTask(patches: string[], customArgs: string[]): StringTask<string> {\n return straightThroughStringTask(['apply', ...customArgs, ...patches]);\n}\n","import {\n BranchMultiDeleteResult,\n BranchSingleDeleteFailure,\n BranchSingleDeleteResult,\n BranchSingleDeleteSuccess,\n} from '../../../typings';\n\nexport class BranchDeletionBatch implements BranchMultiDeleteResult {\n all: BranchSingleDeleteResult[] = [];\n branches: { [branchName: string]: BranchSingleDeleteResult } = {};\n errors: BranchSingleDeleteResult[] = [];\n\n get success(): boolean {\n return !this.errors.length;\n }\n}\n\nexport function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess {\n return {\n branch,\n hash,\n success: true,\n };\n}\n\nexport function branchDeletionFailure(branch: string): BranchSingleDeleteFailure {\n return {\n branch,\n hash: null,\n success: false,\n };\n}\n\nexport function isSingleBranchDeleteFailure(\n test: BranchSingleDeleteResult\n): test is BranchSingleDeleteSuccess {\n return test.success;\n}\n","import { BranchMultiDeleteResult } from '../../../typings';\nimport {\n BranchDeletionBatch,\n branchDeletionFailure,\n branchDeletionSuccess,\n} from '../responses/BranchDeleteSummary';\nimport { TaskParser } from '../types';\nimport { ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nconst deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\nconst deleteErrorRegex = /^error[^']+'([^']+)'/m;\n\nconst parsers: LineParser<BranchMultiDeleteResult>[] = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n];\n\nexport const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (\n stdOut,\n stdErr\n) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);\n};\n\nexport function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {\n return processExitCode === ExitCodes.ERROR && deleteErrorRegex.test(data);\n}\n","import type { BranchSummary, BranchSummaryBranch } from '../../../typings';\n\nexport enum BranchStatusIdentifier {\n CURRENT = '*',\n LINKED = '+',\n}\n\nexport class BranchSummaryResult implements BranchSummary {\n public all: string[] = [];\n public branches: { [p: string]: BranchSummaryBranch } = {};\n public current: string = '';\n public detached: boolean = false;\n\n push(\n status: BranchStatusIdentifier | unknown,\n detached: boolean,\n name: string,\n commit: string,\n label: string\n ) {\n if (status === BranchStatusIdentifier.CURRENT) {\n this.detached = detached;\n this.current = name;\n }\n\n this.all.push(name);\n this.branches[name] = {\n current: status === BranchStatusIdentifier.CURRENT,\n linkedWorkTree: status === BranchStatusIdentifier.LINKED,\n name,\n commit,\n label,\n };\n }\n}\n","import type { BranchSummary } from '../../../typings';\nimport { BranchStatusIdentifier, BranchSummaryResult } from '../responses/BranchSummary';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<BranchSummaryResult>[] = [\n new LineParser(\n /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), true, name, commit, label);\n }\n ),\n new LineParser(\n /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n (result, [current, name, commit, label]) => {\n result.push(branchStatus(current), false, name, commit, label);\n }\n ),\n];\n\nconst currentBranchParser = new LineParser<BranchSummaryResult>(/^(\\S+)$/s, (result, [name]) => {\n result.push(BranchStatusIdentifier.CURRENT, false, name, '', '');\n});\n\nfunction branchStatus(input?: string) {\n return input ? input.charAt(0) : '';\n}\n\nexport function parseBranchSummary(stdOut: string, currentOnly = false): BranchSummary {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers,\n stdOut\n );\n}\n","import { BranchMultiDeleteResult, BranchSingleDeleteResult, BranchSummary } from '../../../typings';\nimport { StringTask } from '../types';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { hasBranchDeletionError, parseBranchDeletions } from '../parsers/parse-branch-delete';\nimport { parseBranchSummary } from '../parsers/parse-branch';\nimport { bufferToString } from '../utils';\n\nexport function containsDeleteBranchCommand(commands: string[]) {\n const deleteCommands = ['-d', '-D', '--delete'];\n return commands.some((command) => deleteCommands.includes(command));\n}\n\nexport function branchTask(\n customArgs: string[]\n): StringTask<BranchSummary | BranchSingleDeleteResult> {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes('--show-current');\n\n const commands = ['branch', ...customArgs];\n\n if (commands.length === 1) {\n commands.push('-a');\n }\n\n if (!commands.includes('-v')) {\n commands.splice(1, 0, '-v');\n }\n\n return {\n format: 'utf-8',\n commands,\n parser(stdOut, stdErr) {\n if (isDelete) {\n return parseBranchDeletions(stdOut, stdErr).all[0];\n }\n\n return parseBranchSummary(stdOut, isCurrentOnly);\n },\n };\n}\n\nexport function branchLocalTask(): StringTask<BranchSummary> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v'],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n },\n };\n}\n\nexport function deleteBranchesTask(\n branches: string[],\n forceDelete = false\n): StringTask<BranchMultiDeleteResult> {\n return {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', ...branches],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr);\n },\n onError({ exitCode, stdOut }, error, done, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n done(stdOut);\n },\n };\n}\n\nexport function deleteBranchTask(\n branch: string,\n forceDelete = false\n): StringTask<BranchSingleDeleteResult> {\n const task: StringTask<BranchSingleDeleteResult> = {\n format: 'utf-8',\n commands: ['branch', '-v', forceDelete ? '-D' : '-d', branch],\n parser(stdOut, stdErr) {\n return parseBranchDeletions(stdOut, stdErr).branches[branch]!;\n },\n onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n if (!hasBranchDeletionError(String(error), exitCode)) {\n return fail(error);\n }\n\n throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n },\n };\n\n return task;\n}\n","import { normalize } from 'node:path';\n\n/**\n * Parser for the `check-ignore` command - returns each file as a string array\n */\nexport const parseCheckIgnore = (text: string): string[] => {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n};\n\nfunction toPath(input: string) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, '');\n return path && normalize(path);\n}\n","import { StringTask } from '../types';\nimport { parseCheckIgnore } from '../responses/CheckIgnore';\n\nexport function checkIgnoreTask(paths: string[]): StringTask<string[]> {\n return {\n commands: ['check-ignore', ...paths],\n format: 'utf-8',\n parser: parseCheckIgnore,\n };\n}\n","import { configurationErrorTask, EmptyTask, straightThroughStringTask } from './task';\nimport { OptionFlags, Options, StringTask } from '../types';\nimport { append, filterString } from '../utils';\n\nexport type CloneOptions = Options &\n OptionFlags<\n | '--bare'\n | '--dissociate'\n | '--mirror'\n | '--no-checkout'\n | '--no-remote-submodules'\n | '--no-shallow-submodules'\n | '--no-single-branch'\n | '--no-tags'\n | '--remote-submodules'\n | '--single-branch'\n | '--shallow-submodules'\n | '--verbose'\n > &\n OptionFlags<'--depth' | '-j' | '--jobs', number> &\n OptionFlags<\n | '--branch'\n | '--origin'\n | '--recurse-submodules'\n | '--separate-git-dir'\n | '--shallow-exclude'\n | '--shallow-since'\n | '--template',\n string\n >;\n\nfunction disallowedCommand(command: string) {\n return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function cloneTask(\n repo: string | undefined,\n directory: string | undefined,\n customArgs: string[]\n): StringTask<string> | EmptyTask {\n const commands = ['clone', ...customArgs];\n\n filterString(repo) && commands.push(repo);\n filterString(directory) && commands.push(directory);\n\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function cloneMirrorTask(\n repo: string | undefined,\n directory: string | undefined,\n customArgs: string[]\n) {\n append(customArgs, '--mirror');\n\n return cloneTask(repo, directory, customArgs);\n}\n","import { FetchResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<FetchResult>[] = [\n new LineParser(/From (.+)$/, (result, [remote]) => {\n result.remote = remote;\n }),\n new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.branches.push({\n name,\n tracking,\n });\n }),\n new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n result.tags.push({\n name,\n tracking,\n });\n }),\n new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n result.deleted.push({\n tracking,\n });\n }),\n new LineParser(\n /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n (result, [from, to, name, tracking]) => {\n result.updated.push({\n name,\n tracking,\n to,\n from,\n });\n }\n ),\n];\n\nexport function parseFetchResult(stdOut: string, stdErr: string): FetchResult {\n const result: FetchResult = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: [],\n };\n return parseStringResponse(result, parsers, [stdOut, stdErr]);\n}\n","import { FetchResult } from '../../../typings';\nimport { parseFetchResult } from '../parsers/parse-fetch';\nimport { StringTask } from '../types';\n\nimport { configurationErrorTask, EmptyTask } from './task';\n\nfunction disallowedCommand(command: string) {\n return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function fetchTask(\n remote: string,\n branch: string,\n customArgs: string[]\n): StringTask<FetchResult> | EmptyTask {\n const commands = ['fetch', ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: parseFetchResult,\n };\n}\n","import { MoveResult } from '../../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<MoveResult>[] = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n }),\n];\n\nexport function parseMoveResult(stdOut: string): MoveResult {\n return parseStringResponse({ moves: [] }, parsers, stdOut);\n}\n","import { MoveResult } from '../../../typings';\nimport { parseMoveResult } from '../parsers/parse-move';\nimport { StringTask } from '../types';\nimport { asArray } from '../utils';\n\nexport function moveTask(from: string | string[], to: string): StringTask<MoveResult> {\n return {\n commands: ['mv', '-v', ...asArray(from), to],\n format: 'utf-8',\n parser: parseMoveResult,\n };\n}\n","import { PullResult } from '../../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parsePullErrorResult, parsePullResult } from '../parsers/parse-pull';\nimport { Maybe, StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function pullTask(\n remote: Maybe<string>,\n branch: Maybe<string>,\n customArgs: string[]\n): StringTask<PullResult> {\n const commands: string[] = ['pull', ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n\n return {\n commands,\n format: 'utf-8',\n parser(stdOut, stdErr): PullResult {\n return parsePullResult(stdOut, stdErr);\n },\n onError(result, _error, _done, fail) {\n const pullError = parsePullErrorResult(\n bufferToString(result.stdOut),\n bufferToString(result.stdErr)\n );\n if (pullError) {\n return fail(new GitResponseError(pullError));\n }\n\n fail(_error);\n },\n };\n}\n","import { forEachLineWithContent } from '../utils';\n\nexport interface RemoteWithoutRefs {\n name: string;\n}\n\nexport interface RemoteWithRefs extends RemoteWithoutRefs {\n refs: {\n fetch: string;\n push: string;\n };\n}\n\nexport function parseGetRemotes(text: string): RemoteWithoutRefs[] {\n const remotes: { [name: string]: RemoteWithoutRefs } = {};\n\n forEach(text, ([name]) => (remotes[name] = { name }));\n\n return Object.values(remotes);\n}\n\nexport function parseGetRemotesVerbose(text: string): RemoteWithRefs[] {\n const remotes: { [name: string]: RemoteWithRefs } = {};\n\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name: name,\n refs: { fetch: '', push: '' },\n };\n }\n\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, '') as keyof RemoteWithRefs['refs']] = url;\n }\n });\n\n return Object.values(remotes);\n}\n\nfunction forEach(text: string, handler: (line: string[]) => void) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\n","import {\n parseGetRemotes,\n parseGetRemotesVerbose,\n type RemoteWithoutRefs,\n type RemoteWithRefs,\n} from '../responses/GetRemoteSummary';\nimport type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addRemoteTask(\n remoteName: string,\n remoteRepo: string,\n customArgs: string[]\n): StringTask<string> {\n return straightThroughStringTask(['remote', 'add', ...customArgs, remoteName, remoteRepo]);\n}\n\nexport function getRemotesTask(verbose: true): StringTask<RemoteWithRefs[]>;\nexport function getRemotesTask(verbose: false): StringTask<RemoteWithoutRefs[]>;\nexport function getRemotesTask(\n verbose: boolean\n): StringTask<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n const commands = ['remote'];\n if (verbose) {\n commands.push('-v');\n }\n\n return {\n commands,\n format: 'utf-8',\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes,\n };\n}\n\nexport function listRemotesTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'ls-remote') {\n commands.unshift('ls-remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function remoteTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'remote') {\n commands.unshift('remote');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function removeRemoteTask(remoteName: string) {\n return straightThroughStringTask(['remote', 'remove', remoteName]);\n}\n","import { LogOptions, LogResult } from '../../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { createListLogSummaryParser } from '../parsers/parse-list-log-summary';\nimport type { StringTask } from '../types';\nimport { validateLogFormatConfig } from './diff';\nimport { parseLogOptions } from './log';\nimport type { EmptyTask } from './task';\n\nexport function stashListTask(\n opt: LogOptions = {},\n customArgs: string[]\n): EmptyTask | StringTask<LogResult> {\n const options = parseLogOptions<any>(opt);\n const commands = ['stash', 'list', ...options.commands, ...customArgs];\n const parser = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n\n return (\n validateLogFormatConfig(commands) || {\n commands,\n format: 'utf-8',\n parser,\n }\n );\n}\n","import { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addSubModuleTask(repo: string, path: string): StringTask<string> {\n return subModuleTask(['add', repo, path]);\n}\n\nexport function initSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['init', ...customArgs]);\n}\n\nexport function subModuleTask(customArgs: string[]): StringTask<string> {\n const commands = [...customArgs];\n if (commands[0] !== 'submodule') {\n commands.unshift('submodule');\n }\n\n return straightThroughStringTask(commands);\n}\n\nexport function updateSubModuleTask(customArgs: string[]): StringTask<string> {\n return subModuleTask(['update', ...customArgs]);\n}\n","import { TagResult } from '../../../typings';\n\nexport class TagList implements TagResult {\n constructor(\n public readonly all: string[],\n public readonly latest: string | undefined\n ) {}\n}\n\nexport const parseTagList = function (data: string, customSort = false) {\n const tags = data.split('\\n').map(trimmed).filter(Boolean);\n\n if (!customSort) {\n tags.sort(function (tagA, tagB) {\n const partsA = tagA.split('.');\n const partsB = tagB.split('.');\n\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n }\n\n for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n\n if (diff) {\n return diff;\n }\n }\n\n return 0;\n });\n }\n\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf('.') >= 0);\n\n return new TagList(tags, latest);\n};\n\nfunction singleSorted(a: number, b: number): number {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n\n return aIsNum ? sorted(a, b) : 0;\n}\n\nfunction sorted(a: number, b: number) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction trimmed(input: string) {\n return input.trim();\n}\n\nfunction toNumber(input: string | undefined) {\n if (typeof input === 'string') {\n return parseInt(input.replace(/^\\D+/g, ''), 10) || 0;\n }\n\n return 0;\n}\n","import { TagResult } from '../../../typings';\nimport { parseTagList } from '../responses/TagList';\nimport { StringTask } from '../types';\n\n/**\n * Task used by `git.tags`\n */\nexport function tagListTask(customArgs: string[] = []): StringTask<TagResult> {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n\n return {\n format: 'utf-8',\n commands: ['tag', '-l', ...customArgs],\n parser(text: string) {\n return parseTagList(text, hasCustomSort);\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addTagTask(name: string): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', name],\n parser() {\n return { name };\n },\n };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addAnnotatedTagTask(\n name: string,\n tagMessage: string\n): StringTask<{ name: string }> {\n return {\n format: 'utf-8',\n commands: ['tag', '-a', '-m', tagMessage, name],\n parser() {\n return { name };\n },\n };\n}\n","const { GitExecutor } = require('./lib/runners/git-executor');\nconst { SimpleGitApi } = require('./lib/simple-git-api');\n\nconst { Scheduler } = require('./lib/runners/scheduler');\nconst { configurationErrorTask } = require('./lib/tasks/task');\nconst {\n asArray,\n filterArray,\n filterPrimitives,\n filterString,\n filterStringOrStringArray,\n filterType,\n getTrailingOptions,\n trailingFunctionArgument,\n trailingOptionsArgument,\n} = require('./lib/utils');\nconst { applyPatchTask } = require('./lib/tasks/apply-patch');\nconst {\n branchTask,\n branchLocalTask,\n deleteBranchesTask,\n deleteBranchTask,\n} = require('./lib/tasks/branch');\nconst { checkIgnoreTask } = require('./lib/tasks/check-ignore');\nconst { checkIsRepoTask } = require('./lib/tasks/check-is-repo');\nconst { cloneTask, cloneMirrorTask } = require('./lib/tasks/clone');\nconst { cleanWithOptionsTask, isCleanOptionsArray } = require('./lib/tasks/clean');\nconst { diffSummaryTask } = require('./lib/tasks/diff');\nconst { fetchTask } = require('./lib/tasks/fetch');\nconst { moveTask } = require('./lib/tasks/move');\nconst { pullTask } = require('./lib/tasks/pull');\nconst { pushTagsTask } = require('./lib/tasks/push');\nconst {\n addRemoteTask,\n getRemotesTask,\n listRemotesTask,\n remoteTask,\n removeRemoteTask,\n} = require('./lib/tasks/remote');\nconst { getResetMode, resetTask } = require('./lib/tasks/reset');\nconst { stashListTask } = require('./lib/tasks/stash-list');\nconst {\n addSubModuleTask,\n initSubModuleTask,\n subModuleTask,\n updateSubModuleTask,\n} = require('./lib/tasks/sub-module');\nconst { addAnnotatedTagTask, addTagTask, tagListTask } = require('./lib/tasks/tag');\nconst { straightThroughBufferTask, straightThroughStringTask } = require('./lib/tasks/task');\n\nfunction Git(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor(\n options.baseDir,\n new Scheduler(options.maxConcurrentProcesses),\n plugins\n );\n\n this._trimmed = options.trimmed;\n}\n\n(Git.prototype = Object.create(SimpleGitApi.prototype)).constructor = Git;\n\n/**\n * Sets the path to a custom git binary, should either be `git` when there is an installation of git available on\n * the system path, or a fully qualified path to the executable.\n */\nGit.prototype.customBinary = function (command) {\n this._plugins.reconfigure('binary', command);\n return this;\n};\n\n/**\n * Sets an environment variable for the spawned child process, either supply both a name and value as strings or\n * a single object to entirely replace the current environment variables.\n *\n * @param {string|Object} name\n * @param {string} [value]\n * @returns {Git}\n */\nGit.prototype.env = function (name, value) {\n if (arguments.length === 1 && typeof name === 'object') {\n this._executor.env = name;\n } else {\n (this._executor.env = this._executor.env || {})[name] = value;\n }\n\n return this;\n};\n\n/**\n * List the stash(s) of the local repo\n */\nGit.prototype.stashList = function (options) {\n return this._runTask(\n stashListTask(\n trailingOptionsArgument(arguments) || {},\n (filterArray(options) && options) || []\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\nfunction createCloneTask(api, task, repoPath, localPath) {\n if (typeof repoPath !== 'string') {\n return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n }\n\n return task(repoPath, filterType(localPath, filterString), getTrailingOptions(arguments));\n}\n\n/**\n * Clone a git repo\n */\nGit.prototype.clone = function () {\n return this._runTask(\n createCloneTask('clone', cloneTask, ...arguments),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Mirror a git repo\n */\nGit.prototype.mirror = function () {\n return this._runTask(\n createCloneTask('mirror', cloneMirrorTask, ...arguments),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Moves one or more files to a new destination.\n *\n * @see https://git-scm.com/docs/git-mv\n *\n * @param {string|string[]} from\n * @param {string} to\n */\nGit.prototype.mv = function (from, to) {\n return this._runTask(moveTask(from, to), trailingFunctionArgument(arguments));\n};\n\n/**\n * Internally uses pull and tags to get the list of tags then checks out the latest tag.\n *\n * @param {Function} [then]\n */\nGit.prototype.checkoutLatestTag = function (then) {\n var git = this;\n return this.pull(function () {\n git.tags(function (err, tags) {\n git.checkout(tags.latest, then);\n });\n });\n};\n\n/**\n * Pull the updated contents of the current repo\n */\nGit.prototype.pull = function (remote, branch, options, then) {\n return this._runTask(\n pullTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Fetch the updated contents of the current repo.\n *\n * @example\n * .fetch('upstream', 'master') // fetches from master on remote named upstream\n * .fetch(function () {}) // runs fetch against default remote and branch and calls function\n *\n * @param {string} [remote]\n * @param {string} [branch]\n */\nGit.prototype.fetch = function (remote, branch) {\n return this._runTask(\n fetchTask(\n filterType(remote, filterString),\n filterType(branch, filterString),\n getTrailingOptions(arguments)\n ),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Disables/enables the use of the console for printing warnings and errors, by default messages are not shown in\n * a production environment.\n *\n * @param {boolean} silence\n * @returns {Git}\n */\nGit.prototype.silent = function (silence) {\n console.warn(\n 'simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this will be an error in version 3'\n );\n return this;\n};\n\n/**\n * List all tags. When using git 2.7.0 or above, include an options object with `\"--sort\": \"property-name\"` to\n * sort the tags by that property instead of using the default semantic versioning sort.\n *\n * Note, supplying this option when it is not supported by your Git version will cause the operation to fail.\n *\n * @param {Object} [options]\n * @param {Function} [then]\n */\nGit.prototype.tags = function (options, then) {\n return this._runTask(\n tagListTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Rebases the current working copy. Options can be supplied either as an array of string parameters\n * to be sent to the `git rebase` command, or a standard options object.\n */\nGit.prototype.rebase = function () {\n return this._runTask(\n straightThroughStringTask(['rebase', ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Reset a repo\n */\nGit.prototype.reset = function (mode) {\n return this._runTask(\n resetTask(getResetMode(mode), getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Revert one or more commits in the local working copy\n */\nGit.prototype.revert = function (commit) {\n const next = trailingFunctionArgument(arguments);\n\n if (typeof commit !== 'string') {\n return this._runTask(configurationErrorTask('Commit must be a string'), next);\n }\n\n return this._runTask(\n straightThroughStringTask(['revert', ...getTrailingOptions(arguments, 0, true), commit]),\n next\n );\n};\n\n/**\n * Add a lightweight tag to the head of the current branch\n */\nGit.prototype.addTag = function (name) {\n const task =\n typeof name === 'string'\n ? addTagTask(name)\n : configurationErrorTask('Git.addTag requires a tag name');\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Add an annotated tag to the head of the current branch\n */\nGit.prototype.addAnnotatedTag = function (tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask(tagName, tagMessage),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete a local branch\n */\nGit.prototype.deleteLocalBranch = function (branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask(branchName, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Delete one or more local branches\n */\nGit.prototype.deleteLocalBranches = function (branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask(branchNames, typeof forceDelete === 'boolean' ? forceDelete : false),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * List all branches\n *\n * @param {Object | string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.branch = function (options, then) {\n return this._runTask(\n branchTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Return list of local branches\n *\n * @param {Function} [then]\n */\nGit.prototype.branchLocal = function (then) {\n return this._runTask(branchLocalTask(), trailingFunctionArgument(arguments));\n};\n\n/**\n * Executes any command against the git binary.\n */\nGit.prototype.raw = function (commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n\n command.push(...getTrailingOptions(arguments, 0, true));\n\n var next = trailingFunctionArgument(arguments);\n\n if (!command.length) {\n return this._runTask(\n configurationErrorTask('Raw: must supply one or more command to execute'),\n next\n );\n }\n\n return this._runTask(straightThroughStringTask(command, this._trimmed), next);\n};\n\nGit.prototype.submoduleAdd = function (repo, path, then) {\n return this._runTask(addSubModuleTask(repo, path), trailingFunctionArgument(arguments));\n};\n\nGit.prototype.submoduleUpdate = function (args, then) {\n return this._runTask(\n updateSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.submoduleInit = function (args, then) {\n return this._runTask(\n initSubModuleTask(getTrailingOptions(arguments, true)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.subModule = function (options, then) {\n return this._runTask(\n subModuleTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.listRemote = function () {\n return this._runTask(\n listRemotesTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Adds a remote to the list of remotes.\n */\nGit.prototype.addRemote = function (remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask(remoteName, remoteRepo, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes an entry by name from the list of remotes.\n */\nGit.prototype.removeRemote = function (remoteName, then) {\n return this._runTask(removeRemoteTask(remoteName), trailingFunctionArgument(arguments));\n};\n\n/**\n * Gets the currently available remotes, setting the optional verbose argument to true includes additional\n * detail on the remotes themselves.\n */\nGit.prototype.getRemotes = function (verbose, then) {\n return this._runTask(getRemotesTask(verbose === true), trailingFunctionArgument(arguments));\n};\n\n/**\n * Call any `git remote` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.remote = function (options, then) {\n return this._runTask(\n remoteTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Call any `git tag` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.tag = function (options, then) {\n const command = getTrailingOptions(arguments);\n\n if (command[0] !== 'tag') {\n command.unshift('tag');\n }\n\n return this._runTask(straightThroughStringTask(command), trailingFunctionArgument(arguments));\n};\n\n/**\n * Updates repository server info\n *\n * @param {Function} [then]\n */\nGit.prototype.updateServerInfo = function (then) {\n return this._runTask(\n straightThroughStringTask(['update-server-info']),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Pushes the current tag changes to a remote which can be either a URL or named remote. When not specified uses the\n * default configured remote spec.\n *\n * @param {string} [remote]\n * @param {Function} [then]\n */\nGit.prototype.pushTags = function (remote, then) {\n const task = pushTagsTask(\n { remote: filterType(remote, filterString) },\n getTrailingOptions(arguments)\n );\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Removes the named files from source control.\n */\nGit.prototype.rm = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '-f', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Removes the named files from source control but keeps them on disk rather than deleting them entirely. To\n * completely remove the files, use `rm`.\n *\n * @param {string|string[]} files\n */\nGit.prototype.rmKeepLocal = function (files) {\n return this._runTask(\n straightThroughStringTask(['rm', '--cached', ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n * Returns a list of objects in a tree based on commit hash. Passing in an object hash returns the object's content,\n * size, and type.\n *\n * Passing \"-p\" will instruct cat-file to determine the object type, and display its formatted contents.\n *\n * @param {string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.catFile = function (options, then) {\n return this._catFile('utf-8', arguments);\n};\n\nGit.prototype.binaryCatFile = function () {\n return this._catFile('buffer', arguments);\n};\n\nGit.prototype._catFile = function (format, args) {\n var handler = trailingFunctionArgument(args);\n var command = ['cat-file'];\n var options = args[0];\n\n if (typeof options === 'string') {\n return this._runTask(\n configurationErrorTask('Git.catFile: options must be supplied as an array of strings'),\n handler\n );\n }\n\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n\n const task =\n format === 'buffer' ? straightThroughBufferTask(command) : straightThroughStringTask(command);\n\n return this._runTask(task, handler);\n};\n\nGit.prototype.diff = function (options, then) {\n const task = filterString(options)\n ? configurationErrorTask(\n 'git.diff: supplying options as a single string is no longer supported, switch to an array of strings'\n )\n : straightThroughStringTask(['diff', ...getTrailingOptions(arguments)]);\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.diffSummary = function () {\n return this._runTask(\n diffSummaryTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.applyPatch = function (patches) {\n const task = !filterStringOrStringArray(patches)\n ? configurationErrorTask(\n `git.applyPatch requires one or more string patches as the first argument`\n )\n : applyPatchTask(asArray(patches), getTrailingOptions([].slice.call(arguments, 1)));\n\n return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.revparse = function () {\n const commands = ['rev-parse', ...getTrailingOptions(arguments, true)];\n return this._runTask(\n straightThroughStringTask(commands, true),\n trailingFunctionArgument(arguments)\n );\n};\n\n/**\n */\nGit.prototype.clean = function (mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray(mode);\n const cleanMode =\n (usingCleanOptionsArray && mode.join('')) || filterType(mode, filterString) || '';\n const customArgs = getTrailingOptions([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n\n return this._runTask(\n cleanWithOptionsTask(cleanMode, customArgs),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.exec = function (then) {\n const task = {\n commands: [],\n format: 'utf-8',\n parser() {\n if (typeof then === 'function') {\n then();\n }\n },\n };\n\n return this._runTask(task);\n};\n\n/**\n * Clears the queue of pending commands and returns the wrapper instance for chaining.\n *\n * @returns {Git}\n */\nGit.prototype.clearQueue = function () {\n // TODO:\n // this._executor.clear();\n return this;\n};\n\n/**\n * Check if a pathname or pathnames are excluded by .gitignore\n *\n * @param {string|string[]} pathnames\n * @param {Function} [then]\n */\nGit.prototype.checkIgnore = function (pathnames, then) {\n return this._runTask(\n checkIgnoreTask(asArray(filterType(pathnames, filterStringOrStringArray, []))),\n trailingFunctionArgument(arguments)\n );\n};\n\nGit.prototype.checkIsRepo = function (checkType, then) {\n return this._runTask(\n checkIsRepoTask(filterType(checkType, filterString)),\n trailingFunctionArgument(arguments)\n );\n};\n\nmodule.exports = Git;\n","import { pathspec } from './args/pathspec';\nimport { GitConstructError } from './errors/git-construct-error';\nimport { GitError } from './errors/git-error';\nimport { GitPluginError } from './errors/git-plugin-error';\nimport { GitResponseError } from './errors/git-response-error';\nimport { TaskConfigurationError } from './errors/task-configuration-error';\nimport { CheckRepoActions } from './tasks/check-is-repo';\nimport { CleanOptions } from './tasks/clean';\nimport { GitConfigScope } from './tasks/config';\nimport { DiffNameStatus } from './tasks/diff-name-status';\nimport { grepQueryBuilder } from './tasks/grep';\nimport { ResetMode } from './tasks/reset';\n\nexport {\n CheckRepoActions,\n CleanOptions,\n DiffNameStatus,\n GitConfigScope,\n GitConstructError,\n GitError,\n GitPluginError,\n GitResponseError,\n ResetMode,\n TaskConfigurationError,\n grepQueryBuilder,\n pathspec,\n};\n","import { GitError } from './git-error';\nimport { SimpleGitOptions } from '../types';\n\n/**\n * The `GitConstructError` is thrown when an error occurs in the constructor\n * of the `simple-git` instance itself. Most commonly as a result of using\n * a `baseDir` option that points to a folder that either does not exist,\n * or cannot be read by the user the node script is running as.\n *\n * Check the `.message` property for more detail including the properties\n * passed to the constructor.\n */\nexport class GitConstructError extends GitError {\n constructor(\n public readonly config: SimpleGitOptions,\n message: string\n ) {\n super(undefined, message);\n }\n}\n","import { SimpleGitOptions, SimpleGitTask } from '../types';\nimport { GitError } from './git-error';\n\nexport class GitPluginError extends GitError {\n constructor(\n public task?: SimpleGitTask<any>,\n public readonly plugin?: keyof SimpleGitOptions,\n message?: string\n ) {\n super(task, message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import { SimpleGitOptions } from '../types';\nimport { SimpleGitPlugin } from './simple-git-plugin';\nimport { GitPluginError } from '../errors/git-plugin-error';\n\nexport function abortPlugin(signal: SimpleGitOptions['abort']) {\n if (!signal) {\n return;\n }\n\n const onSpawnAfter: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort signal received'));\n }\n\n signal.addEventListener('abort', kill);\n\n context.spawned.on('close', () => signal.removeEventListener('abort', kill));\n },\n };\n\n const onSpawnBefore: SimpleGitPlugin<'spawn.before'> = {\n type: 'spawn.before',\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(undefined, 'abort', 'Abort already signaled'));\n }\n },\n };\n\n return [onSpawnBefore, onSpawnAfter];\n}\n","import type { SimpleGitPlugin } from './simple-git-plugin';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitPluginConfig } from '../types';\n\nfunction isConfigSwitch(arg: string | unknown) {\n return typeof arg === 'string' && arg.trim().toLowerCase() === '-c';\n}\n\nfunction preventProtocolOverride(arg: string, next: string) {\n if (!isConfigSwitch(arg)) {\n return;\n }\n\n if (!/^\\s*protocol(.[a-z]+)?.allow/.test(next)) {\n return;\n }\n\n throw new GitPluginError(\n undefined,\n 'unsafe',\n 'Configuring protocol.allow is not permitted without enabling allowUnsafeExtProtocol'\n );\n}\n\nfunction preventUploadPack(arg: string, method: string) {\n if (/^\\s*--(upload|receive)-pack/.test(arg)) {\n throw new GitPluginError(\n undefined,\n 'unsafe',\n `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`\n );\n }\n\n if (method === 'clone' && /^\\s*-u\\b/.test(arg)) {\n throw new GitPluginError(\n undefined,\n 'unsafe',\n `Use of clone with option -u is not permitted without enabling allowUnsafePack`\n );\n }\n\n if (method === 'push' && /^\\s*--exec\\b/.test(arg)) {\n throw new GitPluginError(\n undefined,\n 'unsafe',\n `Use of push with option --exec is not permitted without enabling allowUnsafePack`\n );\n }\n}\n\nexport function blockUnsafeOperationsPlugin({\n allowUnsafeProtocolOverride = false,\n allowUnsafePack = false,\n}: SimpleGitPluginConfig['unsafe'] = {}): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(args, context) {\n args.forEach((current, index) => {\n const next = index < args.length ? args[index + 1] : '';\n\n allowUnsafeProtocolOverride || preventProtocolOverride(current, next);\n allowUnsafePack || preventUploadPack(current, context.method);\n });\n\n return args;\n },\n };\n}\n","import { prefixedArray } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function commandConfigPrefixingPlugin(\n configuration: string[]\n): SimpleGitPlugin<'spawn.args'> {\n const prefix = prefixedArray(configuration, '-c');\n\n return {\n type: 'spawn.args',\n action(data) {\n return [...prefix, ...data];\n },\n };\n}\n","import { deferred, DeferredPromise } from '@kwsites/promise-deferred';\nimport { SimpleGitPluginConfig } from '../types';\nimport { delay } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nconst never = deferred().promise;\n\nexport function completionDetectionPlugin({\n onClose = true,\n onExit = 50,\n}: SimpleGitPluginConfig['completion'] = {}): SimpleGitPlugin<'spawn.after'> {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred(),\n };\n\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise,\n ]);\n\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n\n return {\n close(code: number) {\n exitCode = code;\n events.close.done();\n },\n exit(code: number) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result,\n };\n }\n\n function configureTimeout(\n flag: boolean | number,\n event: DeferredPromise<void>,\n timeout: DeferredPromise<void>\n ) {\n if (flag === false) {\n return;\n }\n\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n\n return {\n type: 'spawn.after',\n async action(_data, { spawned, close }) {\n const events = createEvents();\n\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n\n spawned.stdout?.on('data', quickClose);\n spawned.stderr?.on('data', quickClose);\n spawned.on('error', quickClose);\n\n spawned.on('close', (code: number) => events.close(code));\n spawned.on('exit', (code: number) => events.exit(code));\n\n try {\n await events.result;\n if (deferClose) {\n await delay(50);\n }\n close(events.exitCode);\n } catch (err) {\n close(events.exitCode, err as Error);\n }\n },\n };\n}\n","import type { SimpleGitOptions } from '../types';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport { asArray } from '../utils';\nimport { PluginStore } from './plugin-store';\n\nconst WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nconst WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\n\nfunction isBadArgument(arg: string) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_-]+)$/i.test(arg);\n}\n\nfunction toBinaryConfig(\n input: string[],\n allowUnsafe: boolean\n): { binary: string; prefix?: string } {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(undefined, 'binary', WRONG_NUMBER_ERR);\n }\n\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n console.warn(WRONG_CHARS_ERR);\n } else {\n throw new GitPluginError(undefined, 'binary', WRONG_CHARS_ERR);\n }\n }\n\n const [binary, prefix] = input;\n return {\n binary,\n prefix,\n };\n}\n\nexport function customBinaryPlugin(\n plugins: PluginStore,\n input: SimpleGitOptions['binary'] = ['git'],\n allowUnsafe = false\n) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n\n plugins.on('binary', (input) => {\n config = toBinaryConfig(asArray(input), allowUnsafe);\n });\n\n plugins.append('spawn.binary', () => {\n return config.binary;\n });\n\n plugins.append('spawn.args', (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n","import { GitError } from '../errors/git-error';\nimport { GitExecutorResult, SimpleGitPluginConfig } from '../types';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\ntype TaskResult = Omit<GitExecutorResult, 'rejection'>;\n\nfunction isTaskError(result: TaskResult) {\n return !!(result.exitCode && result.stdErr.length);\n}\n\nfunction getErrorMessage(result: TaskResult) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\n\nexport function errorDetectionHandler(\n overwrite = false,\n isError = isTaskError,\n errorMessage: (result: TaskResult) => Buffer | Error = getErrorMessage\n) {\n return (error: Buffer | Error | undefined, result: TaskResult) => {\n if ((!overwrite && error) || !isError(result)) {\n return error;\n }\n\n return errorMessage(result);\n };\n}\n\nexport function errorDetectionPlugin(\n config: SimpleGitPluginConfig['errors']\n): SimpleGitPlugin<'task.error'> {\n return {\n type: 'task.error',\n action(data, context) {\n const error = config(data.error, {\n stdErr: context.stdErr,\n stdOut: context.stdOut,\n exitCode: context.exitCode,\n });\n\n if (Buffer.isBuffer(error)) {\n return { error: new GitError(undefined, error.toString('utf-8')) };\n }\n\n return {\n error,\n };\n },\n };\n}\n","import { EventEmitter } from 'node:events';\n\nimport type {\n SimpleGitPlugin,\n SimpleGitPluginType,\n SimpleGitPluginTypes,\n} from './simple-git-plugin';\nimport { append, asArray } from '../utils';\nimport type { SimpleGitPluginConfig } from '../types';\n\nexport class PluginStore {\n private plugins: Set<SimpleGitPlugin<SimpleGitPluginType>> = new Set();\n private events = new EventEmitter();\n\n on<K extends keyof SimpleGitPluginConfig>(\n type: K,\n listener: (data: SimpleGitPluginConfig[K]) => void\n ) {\n this.events.on(type, listener);\n }\n\n reconfigure<K extends keyof SimpleGitPluginConfig>(type: K, data: SimpleGitPluginConfig[K]) {\n this.events.emit(type, data);\n }\n\n public append<T extends SimpleGitPluginType>(type: T, action: SimpleGitPlugin<T>['action']) {\n const plugin = append(this.plugins, { type, action });\n\n return () => this.plugins.delete(plugin);\n }\n\n public add<T extends SimpleGitPluginType>(\n plugin: void | SimpleGitPlugin<T> | SimpleGitPlugin<T>[]\n ) {\n const plugins: SimpleGitPlugin<T>[] = [];\n\n asArray(plugin).forEach((plugin) => plugin && this.plugins.add(append(plugins, plugin)));\n\n return () => {\n plugins.forEach((plugin) => this.plugins.delete(plugin));\n };\n }\n\n public exec<T extends SimpleGitPluginType>(\n type: T,\n data: SimpleGitPluginTypes[T]['data'],\n context: SimpleGitPluginTypes[T]['context']\n ): typeof data {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n\n return output;\n }\n}\n","import { SimpleGitOptions } from '../types';\nimport { asNumber, including } from '../utils';\n\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function progressMonitorPlugin(progress: Exclude<SimpleGitOptions['progress'], void>) {\n const progressCommand = '--progress';\n const progressMethods = ['checkout', 'clone', 'fetch', 'pull', 'push'];\n\n const onProgress: SimpleGitPlugin<'spawn.after'> = {\n type: 'spawn.after',\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n\n context.spawned.stderr?.on('data', (chunk: Buffer) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString('utf8'));\n if (!message) {\n return;\n }\n\n progress({\n method: context.method,\n stage: progressEventStage(message[1]),\n progress: asNumber(message[2]),\n processed: asNumber(message[3]),\n total: asNumber(message[4]),\n });\n });\n },\n };\n\n const onArgs: SimpleGitPlugin<'spawn.args'> = {\n type: 'spawn.args',\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n\n return including(args, progressCommand);\n },\n };\n\n return [onArgs, onProgress];\n}\n\nfunction progressEventStage(input: string) {\n return String(input.toLowerCase().split(' ', 1)) || 'unknown';\n}\n","import { SpawnOptions } from 'child_process';\nimport { pick } from '../utils';\nimport { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function spawnOptionsPlugin(\n spawnOptions: Partial<SpawnOptions>\n): SimpleGitPlugin<'spawn.options'> {\n const options = pick(spawnOptions, ['uid', 'gid']);\n\n return {\n type: 'spawn.options',\n action(data) {\n return { ...options, ...data };\n },\n };\n}\n","import type { SimpleGitPlugin } from './simple-git-plugin';\n\nimport type { SimpleGitOptions } from '../types';\nimport { GitPluginError } from '../errors/git-plugin-error';\n\nexport function timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true,\n}: Exclude<SimpleGitOptions['timeout'], undefined>): SimpleGitPlugin<'spawn.after'> | void {\n if (block > 0) {\n return {\n type: 'spawn.after',\n action(_data, context) {\n let timeout: NodeJS.Timeout;\n\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\n }\n\n function stop() {\n context.spawned.stdout?.off('data', wait);\n context.spawned.stderr?.off('data', wait);\n context.spawned.off('exit', stop);\n context.spawned.off('close', stop);\n timeout && clearTimeout(timeout);\n }\n\n function kill() {\n stop();\n context.kill(new GitPluginError(undefined, 'timeout', `block timeout reached`));\n }\n\n stdOut && context.spawned.stdout?.on('data', wait);\n stdErr && context.spawned.stderr?.on('data', wait);\n context.spawned.on('exit', stop);\n context.spawned.on('close', stop);\n\n wait();\n },\n };\n }\n}\n","import { SimpleGitPlugin } from './simple-git-plugin';\nimport { isPathSpec, toPaths } from '../args/pathspec';\n\nexport function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'> {\n return {\n type: 'spawn.args',\n action(data) {\n const prefix: string[] = [];\n let suffix: undefined | string[];\n function append(args: string[]) {\n (suffix = suffix || []).push(...args);\n }\n\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n\n if (isPathSpec(param)) {\n append(toPaths(param));\n continue;\n }\n\n if (param === '--') {\n append(\n data.slice(i + 1).flatMap((item) => (isPathSpec(item) && toPaths(item)) || item)\n );\n break;\n }\n\n prefix.push(param);\n }\n\n return !suffix ? prefix : [...prefix, '--', ...suffix.map(String)];\n },\n };\n}\n","import { SimpleGitFactory } from '../../typings';\n\nimport * as api from './api';\nimport {\n abortPlugin,\n blockUnsafeOperationsPlugin,\n commandConfigPrefixingPlugin,\n completionDetectionPlugin,\n customBinaryPlugin,\n errorDetectionHandler,\n errorDetectionPlugin,\n PluginStore,\n progressMonitorPlugin,\n spawnOptionsPlugin,\n timeoutPlugin,\n} from './plugins';\nimport { suffixPathsPlugin } from './plugins/suffix-paths.plugin';\nimport { createInstanceConfig, folderExists } from './utils';\nimport { SimpleGitOptions } from './types';\n\nconst Git = require('../git');\n\n/**\n * Adds the necessary properties to the supplied object to enable it for use as\n * the default export of a module.\n *\n * Eg: `module.exports = esModuleFactory({ something () {} })`\n */\nexport function esModuleFactory<T>(defaultExport: T) {\n return Object.defineProperties(defaultExport, {\n __esModule: { value: true },\n default: { value: defaultExport },\n }) as T & { __esModule: true; default: T };\n}\n\nexport function gitExportFactory(factory: SimpleGitFactory) {\n return Object.assign(factory.bind(null), api);\n}\n\nexport function gitInstanceFactory(\n baseDir?: string | Partial<SimpleGitOptions>,\n options?: Partial<SimpleGitOptions>\n) {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n (baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},\n options\n );\n\n if (!folderExists(config.baseDir)) {\n throw new api.GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\n }\n\n plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n plugins.add(suffixPathsPlugin());\n plugins.add(completionDetectionPlugin(config.completion));\n config.abort && plugins.add(abortPlugin(config.abort));\n config.progress && plugins.add(progressMonitorPlugin(config.progress));\n config.timeout && plugins.add(timeoutPlugin(config.timeout));\n config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n\n plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n\n return new Git(config, plugins);\n}\n","import { SimpleGit, SimpleGitOptions } from '../../../typings';\n\nimport { GitResponseError } from '../errors/git-response-error';\nimport { gitInstanceFactory } from '../git-factory';\nimport { SimpleGitTaskCallback } from '../types';\n\nconst functionNamesBuilderApi = ['customBinary', 'env', 'outputHandler', 'silent'];\n\nconst functionNamesPromiseApi = [\n 'add',\n 'addAnnotatedTag',\n 'addConfig',\n 'addRemote',\n 'addTag',\n 'applyPatch',\n 'binaryCatFile',\n 'branch',\n 'branchLocal',\n 'catFile',\n 'checkIgnore',\n 'checkIsRepo',\n 'checkout',\n 'checkoutBranch',\n 'checkoutLatestTag',\n 'checkoutLocalBranch',\n 'clean',\n 'clone',\n 'commit',\n 'cwd',\n 'deleteLocalBranch',\n 'deleteLocalBranches',\n 'diff',\n 'diffSummary',\n 'exec',\n 'fetch',\n 'getRemotes',\n 'init',\n 'listConfig',\n 'listRemote',\n 'log',\n 'merge',\n 'mergeFromTo',\n 'mirror',\n 'mv',\n 'pull',\n 'push',\n 'pushTags',\n 'raw',\n 'rebase',\n 'remote',\n 'removeRemote',\n 'reset',\n 'revert',\n 'revparse',\n 'rm',\n 'rmKeepLocal',\n 'show',\n 'stash',\n 'stashList',\n 'status',\n 'subModule',\n 'submoduleAdd',\n 'submoduleInit',\n 'submoduleUpdate',\n 'tag',\n 'tags',\n 'updateServerInfo',\n];\n\nexport function gitP(\n ...args: [] | [string] | [Partial<SimpleGitOptions>] | [string, Partial<SimpleGitOptions>]\n): SimpleGit {\n let git: any;\n\n let chain = Promise.resolve();\n\n try {\n git = gitInstanceFactory(...args);\n } catch (e) {\n chain = Promise.reject(e);\n }\n\n function builderReturn() {\n return promiseApi;\n }\n\n function chainReturn() {\n return chain;\n }\n\n const promiseApi = [...functionNamesBuilderApi, ...functionNamesPromiseApi].reduce(\n (api: any, name: string) => {\n const isAsync = functionNamesPromiseApi.includes(name);\n\n const valid = isAsync ? asyncWrapper(name, git) : syncWrapper(name, git, api);\n const alternative = isAsync ? chainReturn : builderReturn;\n\n Object.defineProperty(api, name, {\n enumerable: false,\n configurable: false,\n value: git ? valid : alternative,\n });\n\n return api;\n },\n {}\n );\n\n return promiseApi as SimpleGit;\n\n function asyncWrapper(fn: string, git: any): (...args: any[]) => Promise<any> {\n return function (...args: any[]) {\n if (typeof args[args.length] === 'function') {\n throw new TypeError(\n 'Promise interface requires that handlers are not supplied inline, ' +\n 'trailing function not allowed in call to ' +\n fn\n );\n }\n\n return chain.then(function () {\n return new Promise(function (resolve, reject) {\n const callback: SimpleGitTaskCallback = (err: Error | null, result?: any) => {\n if (err) {\n return reject(toError(err));\n }\n\n resolve(result);\n };\n args.push(callback);\n\n git[fn].apply(git, args);\n });\n });\n };\n }\n\n function syncWrapper(fn: string, git: any, api: SimpleGit) {\n return (...args: any[]) => {\n git[fn](...args);\n\n return api;\n };\n }\n}\n\nfunction toError(error: Error | string | any): Error {\n if (error instanceof Error) {\n return error;\n }\n\n if (typeof error === 'string') {\n return new Error(error);\n }\n\n return new GitResponseError(error);\n}\n","import { gitInstanceFactory } from './lib/git-factory';\n\nexport { gitP } from './lib/runners/promise-wrapped';\nexport * from './lib/api';\n\nexport const simpleGit = gitInstanceFactory;\n\nexport default gitInstanceFactory;\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';\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 const tasks = 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 const columns = {\n 'IN_PROGRESS': [] as any[],\n 'ACTIVE': [] as any[],\n 'LOCKED': [] as any[],\n 'PENDING': [] as any[]\n };\n\n tasks.forEach((t: any) => {\n if (columns[t.status as keyof typeof columns]) {\n columns[t.status as keyof typeof columns].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","export async function checkVersion() {}\n"],"mappings":"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","names":["Command","chalk","path","Command","chalk","ora","axios","fs","path","chalk","axios","Command","chalk","fs","path","axios","fs","path","chalk","fs","path","chalk","config","InterventionLevel","fs","path","chalk","axios","getGovernanceConfig","setSoftLock","InterventionLevel","debug","os","useColors","debug","path","exists","__export","deferred","Command","chalk","Command","fs","path","chalk","config","getApiKey","getApiUrl","syncEnv","syncProjectRules","suggestNextMove","Command","chalk","ora","axios","fs","path","fs","path","Command","ora","chalk","path","fs","axios","Command","chalk","ora","axios","glob","fs","path","Command","ora","chalk","path","glob","fs","axios","Command","chalk","ora","axios","fs","path","provisionSkills","generateSkillsDiscoveryBlock","runGuardianWatchdog","Command","chalk","fs","path","ora","fs","path","axios","Command","ora","chalk","inquirer","path","fs","Command","chalk","ora","axios","glob","fs","path","execSync","fs","path","chalk","CACHE_FILE","Command","ora","chalk","axios","path","execSync","isCodeFile","glob","fs","Command","chalk","ora","fs","path","execSync","fileURLToPath","chalk","fs","EventEmitter","path","isCodeFile","path","axios","chalk","fs","path","axios","fs","path","CACHE_FILE","CACHE_TTL_MS","axios","saveCachedRules","loadCachedRules","path","fs","axios","EventEmitter","axios","EventEmitter","config","chalk","path","config","Command","ora","chalk","path","fs","fileURLToPath","execSync","Command","chalk","ora","axios","inquirer","Command","chalk","ora","chokidar","fs","path","execSync","axios","watch","config","Command","chalk","ora","axios","execSync","fs","path","Command","chalk","config","Command","chalk","path","fs","fileURLToPath","__filename","__dirname","Command","chalk","EventEmitter","axios","chalk","axios","chalk","chalk","EventEmitter","inquirer","Command","chalk","Command","chalk","axios","Command","chalk","ora","axios","inquirer","Command","chalk","ora","inquirer","fs","path","import_promise_deferred","Buffer","spawn","EventEmitter","path","__esm","git","trimmed","ExitCodes","config","commands","parser","parsers","__export","CheckRepoActions","CleanOptions","append","init_config","GitConfigScope","DiffNameStatus","ResetMode","debug","onError","excludeOptions","disallowedCommand","__commonJS","GitExecutor","SimpleGitApi","Scheduler","configurationErrorTask","asArray","filterArray","filterPrimitives","filterString","filterStringOrStringArray","filterType","getTrailingOptions","trailingFunctionArgument","trailingOptionsArgument","applyPatchTask","branchTask","branchLocalTask","deleteBranchesTask","deleteBranchTask","checkIgnoreTask","checkIsRepoTask","cloneTask","cloneMirrorTask","cleanWithOptionsTask","isCleanOptionsArray","diffSummaryTask","fetchTask","moveTask","pullTask","pushTagsTask","addRemoteTask","getRemotesTask","listRemotesTask","remoteTask","removeRemoteTask","getResetMode","resetTask","stashListTask","addSubModuleTask","initSubModuleTask","subModuleTask","updateSubModuleTask","addAnnotatedTagTask","addTagTask","tagListTask","straightThroughBufferTask","straightThroughStringTask","Git","input","plugin","Command","ora","getContext","path","fs","chalk","inquirer","Command","chalk","ora","axios","Command","chalk","ora","inquirer","Command","chalk"]}
|