@sushanglewis/lincoln 1.7.0 → 1.8.2
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/main.js +347 -107
- package/dist/main.js.map +1 -1
- package/dist/postinstall.js +306 -21
- package/dist/postinstall.js.map +1 -1
- package/framework/.claude/skills/build-product-prototype/prompts/main.md +6 -1
- package/framework/.claude/skills/clarify-requirements/prompts/main.md +6 -0
- package/framework/.claude/skills/dependencies.yaml +8 -8
- package/framework/.claude/skills/draft-product-design/SKILL.md +1 -0
- package/framework/.claude/skills/draft-product-design/prompts/main.md +26 -3
- package/framework/.claude/skills/lc-workflow/validators/validate.py +1 -0
- package/framework/.claude/stages/product-design-docs.yaml +2 -0
- package/framework/.claude/workflows/bug-fix.yaml +1 -0
- package/framework/.claude/workflows/design-spike.yaml +1 -0
- package/framework/.claude/workflows/existing-project-iteration.yaml +1 -0
- package/framework/.claude/workflows/interview-to-knowledge.yaml +1 -0
- package/framework/.claude/workflows/oss-first-design.yaml +1 -0
- package/framework/.claude-plugin/marketplace.json +2 -2
- package/framework/.claude-plugin/plugin.json +1 -1
- package/framework/.version-bump.json +1 -1
- package/framework/README.en.md +21 -3
- package/framework/README.md +23 -3
- package/framework/RELEASE.md +41 -1
- package/framework/manifest.json +24 -24
- package/framework/scripts/lincoln_index.py +8 -1
- package/framework/tools/lincoln/package-lock.json +2 -2
- package/framework/tools/lincoln/package.json +1 -1
- package/framework/tools/lincoln-installer/package.json +1 -1
- package/package.json +1 -1
package/dist/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.ts","../src/cli.ts","../src/commands/doctor.ts","../src/lib/paths.ts","../src/lib/versionMarker.ts","../src/lib/packageInfo.ts","../src/lib/marker.ts","../src/commands/initProject.ts","../src/commands/install.ts","../src/lib/syncClaude.ts","../src/lib/claudeMdMerge.ts","../src/lib/runHarnessAdapter.ts","../src/lib/syncHarness.ts","../src/lib/harnessDetect.ts","../src/lib/harnessSelect.ts","../src/lib/prompt.ts","../src/commands/update.ts","../src/lib/npmRegistry.ts","../src/lib/semver.ts","../src/commands/use.ts","../src/commands/migrateProject.ts","../src/lib/projectFiles.ts","../src/commands/record.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { parseArgs } from './cli.js'\nimport { doctor } from './commands/doctor.js'\nimport { initProject } from './commands/initProject.js'\nimport { install } from './commands/install.js'\nimport { update } from './commands/update.js'\nimport { use } from './commands/use.js'\nimport { migrateProject } from './commands/migrateProject.js'\nimport { record } from './commands/record.js'\nimport { readLocalPackageVersion } from './lib/packageInfo.js'\n\nconst USAGE = `Lincoln — Global agent harness plugin CLI\n\nUsage:\n lincoln <command> [options]\n\nCommands:\n install One-time global setup: sync to ~/.claude/, ~/.codex/, ~/.opencode/\n update Pull latest release and re-sync globally\n use <version> Switch active global version\n doctor Diagnose harness integration\n init-project Create .lincoln.yaml in current project\n migrate-project Remove vendored framework files from an existing project\n record Launch the Lincoln interview recorder TUI\n help Show this help message\n\nOptions:\n --yes, -y Skip confirmation prompts\n --dry-run Show what would be done without making changes\n --force Force re-install even if up to date\n --harnesses Comma-separated harness ids (claude-code, codex, opencode)\n --no-interactive Never prompt; fail if --yes is also missing\n --check Check for available updates without installing (update)\n --json Output machine-readable JSON (where supported)\n --help, -h Show this help message\n --version, -v Show the installed Lincoln version\n`\n\nexport async function main(argv: string[]): Promise<number> {\n const parsed = parseArgs(argv)\n\n if (parsed.flags.version || parsed.flags.v) {\n const version = readLocalPackageVersion()\n console.log(version ? `Lincoln ${version}` : 'Lincoln (unknown version)')\n return 0\n }\n\n if (parsed.command === 'help') {\n console.log(USAGE)\n return 0\n }\n\n if (parsed.command === 'install') {\n const harnessesFlag = typeof parsed.flags.harnesses === 'string'\n ? String(parsed.flags.harnesses).split(',').map((id) => id.trim()).filter((id) => id.length > 0)\n : []\n const harnesses = harnessesFlag.length > 0 ? harnessesFlag : parsed.args\n return install({\n yes: Boolean(parsed.flags.yes || parsed.flags.y),\n dryRun: Boolean(parsed.flags['dry-run']),\n force: Boolean(parsed.flags.force),\n harnesses,\n noVenv: Boolean(parsed.flags['no-venv']),\n noInteractive: Boolean(parsed.flags['no-interactive'])\n })\n }\n\n if (parsed.command === 'update') {\n return update({\n check: Boolean(parsed.flags.check),\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y)\n })\n }\n\n if (parsed.command === 'use') {\n const version = parsed.args[0]\n if (!version) {\n console.error('Usage: lincoln use <version> [--yes] [--dry-run]')\n return 1\n }\n return use(version, {\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y)\n })\n }\n\n if (parsed.command === 'doctor') {\n const result = await doctor({ json: Boolean(parsed.flags.json) })\n return result.code\n }\n\n if (parsed.command === 'init-project') {\n return initProject(process.cwd(), {\n force: Boolean(parsed.flags.force),\n dryRun: Boolean(parsed.flags['dry-run'])\n })\n }\n\n if (parsed.command === 'migrate-project') {\n return migrateProject(process.cwd(), {\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y),\n force: Boolean(parsed.flags.force)\n })\n }\n\n if (parsed.command === 'record') {\n return record(parsed.args)\n }\n\n console.log(USAGE)\n return 0\n}\n\nif (\n process.argv[1] &&\n path.resolve(fs.realpathSync(fileURLToPath(import.meta.url))) ===\n path.resolve(fs.realpathSync(process.argv[1]))\n) {\n main(process.argv)\n .then((code) => process.exit(code))\n .catch((err) => {\n console.error(err instanceof Error ? err.message : String(err))\n process.exit(1)\n })\n}\n","export interface ParsedArgs {\n command: string\n args: string[]\n flags: Record<string, unknown>\n}\n\n/**\n * Flags that never take a value. Boolean flags must not consume the next\n * token, otherwise `lincoln use --yes 1.6.0` would swallow the positional\n * version argument into `flags.yes`.\n */\nconst BOOLEAN_FLAGS = new Set([\n 'yes',\n 'y',\n 'dry-run',\n 'force',\n 'check',\n 'json',\n 'help',\n 'h',\n 'no-venv',\n 'no-interactive',\n 'version',\n 'v'\n])\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2)\n const flags: Record<string, unknown> = {}\n const positional: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (arg.startsWith('--')) {\n const key = arg.replace(/^--/, '')\n const next = args[i + 1]\n if (!BOOLEAN_FLAGS.has(key) && next && !next.startsWith('-')) {\n flags[key] = next\n i++\n } else {\n flags[key] = true\n }\n } else if (arg.startsWith('-')) {\n const key = arg.replace(/^-/, '')\n const next = args[i + 1]\n if (!BOOLEAN_FLAGS.has(key) && next && !next.startsWith('-')) {\n flags[key] = next\n i++\n } else {\n flags[key] = true\n }\n } else {\n positional.push(arg)\n }\n }\n\n const command = positional[0] || 'help'\n const validCommands = new Set([\n 'install',\n 'update',\n 'use',\n 'doctor',\n 'init-project',\n 'migrate-project',\n 'record',\n 'help',\n '--help',\n '-h'\n ])\n\n if (command === 'help' || command === '--help' || command === '-h') {\n return { command: 'help', args: positional.slice(1), flags }\n }\n\n if (!validCommands.has(command)) {\n return { command: 'help', args: positional, flags }\n }\n\n return { command, args: positional.slice(1), flags }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { readVersionMarker } from '../lib/versionMarker.js'\n\nexport interface DoctorCheck {\n name: string\n status: 'ok' | 'warn' | 'skip' | 'error'\n message: string\n}\n\nexport interface DoctorOptions {\n json?: boolean\n}\n\nexport interface DoctorDeps {\n paths: LincolnPaths\n nodeVersion: () => string\n pythonVersion: () => Promise<string | undefined>\n pyyamlVersion: () => Promise<string | undefined>\n npmVersion: () => Promise<string | undefined>\n projectRoot: string\n}\n\nexport interface DoctorResult {\n code: number\n checks: DoctorCheck[]\n}\n\nconst MIN_NODE_MAJOR = 20\nconst MIN_PYTHON_MAJOR = 3\nconst MIN_PYTHON_MINOR = 10\n\nexport function createDefaultDeps(): DoctorDeps {\n const paths = resolveLincolnPaths()\n const pythonCommand = resolvePythonCommand(paths)\n return {\n paths,\n nodeVersion: () => process.version,\n pythonVersion: () => queryCommandVersion(pythonCommand, ['--version']),\n pyyamlVersion: () => queryPyyamlVersion(pythonCommand),\n npmVersion: () => queryCommandVersion('npm', ['--version']),\n projectRoot: process.cwd()\n }\n}\n\nexport async function doctor(\n options: DoctorOptions = {},\n deps: DoctorDeps = createDefaultDeps()\n): Promise<DoctorResult> {\n const checks: DoctorCheck[] = []\n\n checks.push(checkNode(deps.nodeVersion()))\n checks.push(await checkPython(deps.pythonVersion))\n checks.push(await checkPyyaml(deps.pyyamlVersion))\n checks.push(await checkNpm(deps.npmVersion))\n checks.push(checkGlobalMarker(deps.paths))\n checks.push(checkPayloadHooks(deps.paths))\n checks.push(checkVenv(deps.paths))\n checks.push(checkProjectMarker(deps.projectRoot))\n\n const hasError = checks.some((c) => c.status === 'error')\n const result: DoctorResult = { code: hasError ? 1 : 0, checks }\n\n if (options.json) {\n console.log(JSON.stringify({ checks }, null, 2))\n } else {\n for (const check of checks) {\n const icon = check.status === 'ok' ? '✓' : check.status === 'error' ? '✗' : check.status === 'warn' ? '!' : '-'\n console.log(`${icon} ${check.name}: ${check.message}`)\n }\n if (hasError) {\n console.error('\\nOne or more checks failed.')\n }\n }\n\n return result\n}\n\nfunction checkNode(version: string): DoctorCheck {\n const major = parseNodeMajor(version)\n if (major === undefined) {\n return { name: 'node', status: 'warn', message: `Could not parse Node version: ${version}` }\n }\n if (major < MIN_NODE_MAJOR) {\n return { name: 'node', status: 'error', message: `Node ${version} is below the minimum required v${MIN_NODE_MAJOR}` }\n }\n return { name: 'node', status: 'ok', message: `Node ${version}` }\n}\n\nasync function checkPython(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = (await query())?.trim()\n if (!version) {\n return { name: 'python', status: 'error', message: 'Python 3 is not available' }\n }\n const parsed = parsePythonVersion(version)\n if (!parsed) {\n return { name: 'python', status: 'warn', message: `Could not parse Python version: ${version}` }\n }\n if (parsed.major < MIN_PYTHON_MAJOR || (parsed.major === MIN_PYTHON_MAJOR && parsed.minor < MIN_PYTHON_MINOR)) {\n return {\n name: 'python',\n status: 'error',\n message: `Python ${version} is below the minimum required ${MIN_PYTHON_MAJOR}.${MIN_PYTHON_MINOR}`\n }\n }\n const display = version.replace(/^Python\\s+/, '')\n return { name: 'python', status: 'ok', message: `Python ${display}` }\n}\n\nasync function checkPyyaml(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = await query()\n if (!version) {\n return { name: 'pyyaml', status: 'error', message: 'PyYAML is not installed for Python 3' }\n }\n return { name: 'pyyaml', status: 'ok', message: `PyYAML ${version}` }\n}\n\nasync function checkNpm(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = await query()\n if (!version) {\n return { name: 'npm', status: 'warn', message: 'npm is not available' }\n }\n return { name: 'npm', status: 'ok', message: `npm ${version}` }\n}\n\nfunction checkGlobalMarker(paths: LincolnPaths): DoctorCheck {\n const marker = readVersionMarker(paths)\n if (!marker) {\n return { name: 'global-marker', status: 'warn', message: `No version marker at ${paths.versionMarker}` }\n }\n return { name: 'global-marker', status: 'ok', message: `Lincoln ${marker.version} installed` }\n}\n\nfunction checkPayloadHooks(paths: LincolnPaths): DoctorCheck {\n const hooksDir = path.join(paths.currentDir, '.claude', 'hooks')\n if (!fs.existsSync(hooksDir)) {\n return { name: 'payload-hooks', status: 'warn', message: `Payload hooks not found at ${hooksDir}` }\n }\n const required = ['on-session-start.sh']\n const missing = required.filter((f) => !fs.existsSync(path.join(hooksDir, f)))\n if (missing.length > 0) {\n return { name: 'payload-hooks', status: 'warn', message: `Missing hooks: ${missing.join(', ')}` }\n }\n return { name: 'payload-hooks', status: 'ok', message: `Payload hooks present at ${hooksDir}` }\n}\n\nfunction checkVenv(paths: LincolnPaths): DoctorCheck {\n if (!fs.existsSync(paths.venvDir)) {\n return { name: 'venv', status: 'warn', message: `Virtual environment not found at ${paths.venvDir}` }\n }\n const pythonExe = path.join(paths.venvDir, process.platform === 'win32' ? 'Scripts' : 'bin', 'python')\n if (!fs.existsSync(pythonExe)) {\n return { name: 'venv', status: 'warn', message: `Virtual environment exists but python executable is missing` }\n }\n return { name: 'venv', status: 'ok', message: `Virtual environment present at ${paths.venvDir}` }\n}\n\nfunction checkProjectMarker(projectRoot: string): DoctorCheck {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (!fs.existsSync(markerPath)) {\n return { name: 'project-marker', status: 'skip', message: `No .lincoln.yaml in ${projectRoot}` }\n }\n return { name: 'project-marker', status: 'ok', message: `Project marker found at ${markerPath}` }\n}\n\nfunction resolvePythonCommand(paths: LincolnPaths): string {\n const venvPython = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n if (fs.existsSync(venvPython)) {\n return venvPython\n }\n return 'python3'\n}\n\nfunction parseNodeMajor(version: string): number | undefined {\n const match = /^v?(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return Number(match[1])\n}\n\nfunction parsePythonVersion(version: string): { major: number; minor: number } | undefined {\n const match = /(\\d+)\\.(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return { major: Number(match[1]), minor: Number(match[2]) }\n}\n\nasync function queryCommandVersion(command: string, args: string[]): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(command, args, {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n\nasync function queryPyyamlVersion(pythonCommand: string): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(\n pythonCommand,\n ['-c', 'import yaml; print(yaml.__version__)'],\n { stdio: ['ignore', 'pipe', 'ignore'], shell: process.platform === 'win32' }\n )\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n","import path from 'node:path'\nimport os from 'node:os'\n\nexport interface LincolnPaths {\n homeDir: string\n lincolnHome: string\n versionsDir: string\n currentDir: string\n versionMarker: string\n venvDir: string\n claudeDir: string\n codexDir: string\n opencodeDir: string\n}\n\nexport function resolveLincolnPaths(overrideHomeDir?: string): LincolnPaths {\n const homeDir = overrideHomeDir ?? os.homedir()\n const lincolnHome = process.env.LINCOLN_HOME\n ? path.resolve(process.env.LINCOLN_HOME)\n : path.join(homeDir, '.lincoln')\n\n return {\n homeDir,\n lincolnHome,\n versionsDir: path.join(lincolnHome, 'versions'),\n currentDir: path.join(lincolnHome, 'current'),\n versionMarker: path.join(lincolnHome, 'marker.json'),\n venvDir: path.join(lincolnHome, 'venv'),\n claudeDir: path.join(homeDir, '.claude'),\n codexDir: path.join(homeDir, '.codex'),\n opencodeDir: path.join(homeDir, '.opencode')\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { LincolnPaths } from './paths.js'\n\nexport interface VersionMarker {\n version: string\n installedAt: string\n harnesses: string[]\n managedFiles: string[]\n}\n\nexport function readVersionMarker(paths: LincolnPaths): VersionMarker | undefined {\n try {\n const raw = fs.readFileSync(paths.versionMarker, 'utf8')\n const parsed = JSON.parse(raw) as VersionMarker\n if (\n typeof parsed.version === 'string' &&\n typeof parsed.installedAt === 'string' &&\n Array.isArray(parsed.harnesses)\n ) {\n return parsed\n }\n return undefined\n } catch {\n return undefined\n }\n}\n\nexport function writeVersionMarker(\n paths: LincolnPaths,\n marker: VersionMarker\n): void {\n fs.mkdirSync(path.dirname(paths.versionMarker), { recursive: true })\n fs.writeFileSync(paths.versionMarker, JSON.stringify(marker, null, 2) + '\\n')\n}\n\nexport function isUpToDate(paths: LincolnPaths, version: string): boolean {\n const marker = readVersionMarker(paths)\n return marker?.version === version\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/**\n * Finds the directory containing the running lincoln package's package.json.\n * Returns undefined when no package.json can be located.\n */\nexport function readLocalPackageRoot(): string | undefined {\n try {\n let dir = path.dirname(fileURLToPath(import.meta.url))\n const root = path.parse(dir).root\n while (dir !== root) {\n const pkgPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgPath)) {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) as { name?: string }\n if (parsed.name === '@sushanglewis/lincoln') {\n return dir\n }\n }\n dir = path.dirname(dir)\n }\n } catch {\n // ignore and return undefined\n }\n return undefined\n}\n\n/**\n * Reads the version of the running lincoln package from its own package.json.\n * Walks upward from the current module file until it finds the package.json.\n * Returns undefined when the package.json cannot be located or parsed.\n */\nexport function readLocalPackageVersion(): string | undefined {\n try {\n const root = readLocalPackageRoot()\n if (!root) return undefined\n const parsed = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as {\n version?: string\n }\n return typeof parsed.version === 'string' ? parsed.version : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Resolves the bundled framework payload directory inside the running package.\n */\nexport function resolvePayloadRoot(): string | undefined {\n const root = readLocalPackageRoot()\n if (!root) return undefined\n const payload = path.join(root, 'framework')\n return fs.existsSync(payload) ? payload : undefined\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport yaml from 'js-yaml'\n\nexport interface ProjectMarker {\n enabled: boolean\n workflow_template?: string\n min_lincoln_version?: string\n}\n\nexport interface WriteMarkerOptions {\n force?: boolean\n dryRun?: boolean\n}\n\nexport function readProjectMarker(projectRoot: string): ProjectMarker | undefined {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (!fs.existsSync(markerPath)) {\n return undefined\n }\n try {\n const parsed = yaml.load(fs.readFileSync(markerPath, 'utf8')) as Record<string, unknown> | null | undefined\n if (!parsed || typeof parsed !== 'object') {\n return undefined\n }\n return {\n enabled: Boolean(parsed.enabled),\n workflow_template: typeof parsed.workflow_template === 'string' ? parsed.workflow_template : undefined,\n min_lincoln_version: typeof parsed.min_lincoln_version === 'string' ? parsed.min_lincoln_version : undefined\n }\n } catch {\n return undefined\n }\n}\n\nexport function writeProjectMarker(\n projectRoot: string,\n marker: ProjectMarker,\n opts: WriteMarkerOptions = {}\n): void {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (fs.existsSync(markerPath) && !opts.force) {\n throw new Error(`.lincoln.yaml already exists at ${markerPath}; use --force to overwrite`)\n }\n const content = yaml.dump(marker, { sortKeys: false, lineWidth: -1 })\n if (!opts.dryRun) {\n fs.mkdirSync(projectRoot, { recursive: true })\n fs.writeFileSync(markerPath, content)\n }\n}\n","import { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { writeProjectMarker, readProjectMarker } from '../lib/marker.js'\n\nexport interface InitProjectOptions {\n force?: boolean\n dryRun?: boolean\n}\n\nexport function initProject(projectRoot: string, options: InitProjectOptions = {}): number {\n if (!options.force && readProjectMarker(projectRoot) !== undefined) {\n console.error(`Project already has a .lincoln.yaml. Use --force to overwrite.`)\n return 1\n }\n\n try {\n writeProjectMarker(\n projectRoot,\n {\n enabled: true,\n workflow_template: 'interview-to-knowledge',\n min_lincoln_version: readLocalPackageVersion() ?? '1.5.0'\n },\n { force: options.force, dryRun: options.dryRun }\n )\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to write .lincoln.yaml: ${message}`)\n return 1\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would create ${projectRoot}/.lincoln.yaml`)\n } else {\n console.log(`Created ${projectRoot}/.lincoln.yaml`)\n }\n return 0\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { writeVersionMarker } from '../lib/versionMarker.js'\nimport { readLocalPackageVersion, resolvePayloadRoot } from '../lib/packageInfo.js'\nimport type { HarnessSyncReport, SyncHarnessesOptions } from '../lib/syncHarness.js'\nimport { syncHarnesses } from '../lib/syncHarness.js'\nimport { detectGlobalHarnesses, installedHarnessIds, isValidHarnessId, HARNESS_IDS } from '../lib/harnessDetect.js'\nimport type { HarnessId } from '../lib/harnessDetect.js'\nimport { buildHarnessOptions, resolveHarnessSelection } from '../lib/harnessSelect.js'\nimport { createPrompt } from '../lib/prompt.js'\nimport type { Prompt } from '../lib/prompt.js'\n\nexport interface InstallOptions {\n yes: boolean\n dryRun: boolean\n force: boolean\n harnesses: string[]\n noVenv: boolean\n noInteractive: boolean\n}\n\nexport interface InstallDeps {\n paths: LincolnPaths\n payloadRoot: string\n syncHarnesses: (opts: SyncHarnessesOptions) => Promise<HarnessSyncReport>\n createPrompt: () => Prompt\n resolvePythonForVenv: (\n envOverride?: string,\n candidates?: string[],\n queryVersion?: (cmd: string) => Promise<string | undefined>\n ) => Promise<string | undefined>\n isTTY: boolean\n}\n\nexport function createDefaultDeps(): InstallDeps {\n return {\n paths: resolveLincolnPaths(),\n payloadRoot: resolvePayloadRoot() || '',\n syncHarnesses,\n createPrompt,\n resolvePythonForVenv,\n isTTY: Boolean(process.stdin.isTTY && process.stdout.isTTY)\n }\n}\n\nexport async function install(\n options: InstallOptions,\n deps: InstallDeps = createDefaultDeps()\n): Promise<number> {\n const version = readLocalPackageVersion()\n if (!version) {\n console.error('Could not determine Lincoln version')\n return 1\n }\n\n const payloadRoot = deps.payloadRoot\n if (!payloadRoot || !fs.existsSync(payloadRoot)) {\n console.error('Lincoln payload not found. Run \"npm install -g @sushanglewis/lincoln\" first.')\n return 1\n }\n\n if (!options.dryRun && !options.yes && (options.noInteractive || !deps.isTTY)) {\n console.error(\n 'This will install Lincoln globally. Run with --yes to proceed, or run interactively in a TTY.'\n )\n return 1\n }\n\n const harnesses = await resolveHarnesses(options, deps)\n if (harnesses.length === 0) {\n return 1\n }\n\n const pythonPath = await resolvePythonIfNeeded(options, deps, harnesses)\n if (pythonPath === null) {\n return 1\n }\n\n if (!options.dryRun) {\n const versionDir = path.join(deps.paths.versionsDir, version)\n fs.mkdirSync(versionDir, { recursive: true })\n fs.cpSync(payloadRoot, versionDir, { recursive: true, force: true })\n try {\n fs.rmSync(deps.paths.currentDir, { recursive: true, force: true })\n fs.symlinkSync(versionDir, deps.paths.currentDir)\n } catch {\n fs.rmSync(deps.paths.currentDir, { recursive: true, force: true })\n fs.cpSync(versionDir, deps.paths.currentDir, { recursive: true, force: true })\n }\n }\n\n const reports = await deps.syncHarnesses({\n harnesses,\n payloadRoot: deps.paths.currentDir,\n paths: deps.paths,\n projectDir: deps.paths.lincolnHome,\n version,\n dryRun: options.dryRun,\n pythonPath\n })\n\n if (!options.dryRun) {\n writeVersionMarker(deps.paths, {\n version,\n installedAt: new Date().toISOString(),\n harnesses,\n managedFiles: collectManagedFiles(reports)\n })\n }\n\n printSummary(options, version, harnesses, reports)\n return 0\n}\n\nasync function resolvePythonIfNeeded(\n options: InstallOptions,\n deps: InstallDeps,\n harnesses: HarnessId[]\n): Promise<string | undefined | null> {\n const needsPython =\n !options.dryRun && !options.noVenv && harnesses.some((id) => id === 'codex' || id === 'opencode')\n if (!needsPython) {\n return undefined\n }\n\n const pythonCommand = await deps.resolvePythonForVenv()\n if (!pythonCommand) {\n console.error(\n 'Python 3.10+ is required for Codex/OpenCode sync but was not found. Set LINCOLN_PYTHON to a compatible Python executable, or run with --no-venv.'\n )\n return null\n }\n\n await setupVenv(deps.paths, deps.payloadRoot, pythonCommand)\n return venvPythonPath(deps.paths)\n}\n\nasync function resolveHarnesses(options: InstallOptions, deps: InstallDeps): Promise<HarnessId[]> {\n const detected = detectGlobalHarnesses(deps.paths.homeDir)\n\n if (options.harnesses.length > 0) {\n const invalid = options.harnesses.filter((id) => !isValidHarnessId(id))\n if (invalid.length > 0) {\n console.error(`Unknown harness id(s): ${invalid.join(', ')}`)\n console.error(`Valid ids: ${HARNESS_IDS.join(', ')}`)\n return []\n }\n return options.harnesses as HarnessId[]\n }\n\n const selected = installedHarnessIds(deps.paths.homeDir)\n if (selected.length > 0 && !options.dryRun && !options.yes && !options.noInteractive && deps.isTTY) {\n const prompt = deps.createPrompt()\n try {\n const answer = await prompt.multiSelect(\n 'Select agent harnesses to install Lincoln into:',\n buildHarnessOptions(detected)\n )\n const resolved = resolveHarnessSelection(detected, answer)\n if (resolved.length === 0) {\n console.error('No harnesses selected. Aborting.')\n return []\n }\n return resolved\n } catch (err) {\n console.error(`Interactive selection failed: ${err instanceof Error ? err.message : String(err)}`)\n return []\n } finally {\n prompt.close()\n }\n }\n\n if (selected.length === 0 && !options.dryRun) {\n console.error('No agent harness detected. Install Claude Code, Codex, or OpenCode first.')\n return []\n }\n\n return selected\n}\n\nfunction collectManagedFiles(reports: HarnessSyncReport): string[] {\n const files: string[] = []\n for (const report of Object.values(reports)) {\n files.push(...report.written, ...report.skipped, ...report.preserved)\n }\n return files\n}\n\nfunction printSummary(\n options: InstallOptions,\n version: string,\n harnesses: HarnessId[],\n reports: HarnessSyncReport\n): void {\n const warnings = collectWarnings(reports)\n if (options.dryRun) {\n console.log(`Dry run: would install Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n } else {\n console.log(`Installed Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n }\n for (const [harnessId, report] of Object.entries(reports)) {\n const count = report.written.length + report.skipped.length + report.preserved.length\n console.log(` ${harnessId}: ${count} file(s)`)\n }\n for (const warning of warnings) {\n console.warn(` warning: ${warning}`)\n }\n}\n\nfunction collectWarnings(reports: HarnessSyncReport): string[] {\n const warnings: string[] = []\n for (const report of Object.values(reports)) {\n warnings.push(...report.warnings)\n }\n return warnings\n}\n\nfunction runCommand(command: string, args: string[]): Promise<number> {\n return new Promise((resolvePromise, rejectPromise) => {\n const child = spawn(command, args, { stdio: 'inherit' })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', (err) => rejectPromise(err))\n })\n}\n\nconst MIN_PYTHON_MAJOR = 3\nconst MIN_PYTHON_MINOR = 10\nconst DEFAULT_PYTHON_CANDIDATES = ['python3.12', 'python3.11', 'python3.10', 'python3']\n\nfunction parsePythonVersion(version: string): { major: number; minor: number } | undefined {\n const match = /(\\d+)\\.(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return { major: Number(match[1]), minor: Number(match[2]) }\n}\n\nasync function queryPythonVersion(command: string): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(command, ['--version'], {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n\nexport async function resolvePythonForVenv(\n envOverride: string | undefined = process.env.LINCOLN_PYTHON,\n candidates: string[] = DEFAULT_PYTHON_CANDIDATES,\n queryVersion: (cmd: string) => Promise<string | undefined> = queryPythonVersion\n): Promise<string | undefined> {\n const list = envOverride ? [envOverride] : candidates\n for (const cmd of list) {\n const version = await queryVersion(cmd)\n if (!version) {\n continue\n }\n const parsed = parsePythonVersion(version)\n if (\n parsed &&\n parsed.major >= MIN_PYTHON_MAJOR &&\n (parsed.major > MIN_PYTHON_MAJOR || parsed.minor >= MIN_PYTHON_MINOR)\n ) {\n return cmd\n }\n }\n return undefined\n}\n\nfunction venvPythonPath(paths: LincolnPaths): string {\n return path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n}\n\nasync function setupVenv(paths: LincolnPaths, payloadRoot: string, pythonCommand: string): Promise<void> {\n const pythonExe = venvPythonPath(paths)\n\n if (!fs.existsSync(pythonExe)) {\n console.log('Creating Lincoln virtual environment...')\n const venvCode = await runCommand(pythonCommand, ['-m', 'venv', paths.venvDir])\n if (venvCode !== 0) {\n throw new Error(`Failed to create virtual environment (exit code ${venvCode})`)\n }\n }\n\n const requirementsPath = path.join(payloadRoot, 'requirements.txt')\n if (fs.existsSync(requirementsPath)) {\n console.log('Installing Python dependencies...')\n const pipExe = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'pip.exe' : 'pip'\n )\n const pipCode = await runCommand(pipExe, ['install', '-r', requirementsPath])\n if (pipCode !== 0) {\n throw new Error(`Failed to install Python dependencies (exit code ${pipCode})`)\n }\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\nimport { mergeManagedBlock } from './claudeMdMerge.js'\n\nexport interface SyncOptions {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n}\n\nexport interface SyncReport {\n written: string[]\n skipped: string[]\n preserved: string[]\n warnings: string[]\n settingsTouched?: string[]\n}\n\nconst COPY_SUBDIRS = [\n 'agents',\n 'skills',\n 'workflows',\n 'stages',\n 'schemas',\n 'templates',\n 'harnesses'\n]\n\nfunction sha256(filePath: string): string {\n const data = fs.readFileSync(filePath)\n return crypto.createHash('sha256').update(data).digest('hex')\n}\n\nfunction sameContent(a: string, b: string): boolean {\n return sha256(a) === sha256(b)\n}\n\nfunction deepMergeSettings(existing: unknown, incoming: unknown): unknown {\n if (Array.isArray(existing) && Array.isArray(incoming)) {\n return incoming\n }\n if (\n typeof existing === 'object' &&\n existing !== null &&\n typeof incoming === 'object' &&\n incoming !== null\n ) {\n const result: Record<string, unknown> = { ...existing }\n for (const [key, value] of Object.entries(incoming)) {\n if (key in result) {\n result[key] = deepMergeSettings(result[key], value)\n } else {\n result[key] = value\n }\n }\n return result\n }\n return incoming\n}\n\nexport function syncClaudeCode(opts: SyncOptions): SyncReport {\n const report: SyncReport = {\n written: [],\n skipped: [],\n preserved: [],\n warnings: [],\n settingsTouched: []\n }\n\n const payloadClaude = path.join(opts.payloadRoot, '.claude')\n if (!fs.existsSync(payloadClaude)) {\n report.warnings.push(`payload .claude directory not found: ${payloadClaude}`)\n return report\n }\n\n if (!opts.dryRun) {\n fs.mkdirSync(opts.targetDir, { recursive: true })\n }\n\n for (const subdir of COPY_SUBDIRS) {\n const srcDir = path.join(payloadClaude, subdir)\n if (!fs.existsSync(srcDir)) {\n continue\n }\n\n const destDir = path.join(opts.targetDir, subdir)\n if (!opts.dryRun) {\n fs.mkdirSync(destDir, { recursive: true })\n }\n\n for (const entry of walkSync(srcDir)) {\n const relativePath = path.relative(srcDir, entry)\n const srcFile = entry\n const destFile = path.join(destDir, relativePath)\n\n if (fs.existsSync(destFile) && sameContent(srcFile, destFile)) {\n report.skipped.push(path.join('.claude', subdir, relativePath))\n continue\n }\n\n if (!opts.dryRun) {\n fs.mkdirSync(path.dirname(destFile), { recursive: true })\n fs.copyFileSync(srcFile, destFile)\n }\n report.written.push(path.join('.claude', subdir, relativePath))\n }\n }\n\n // settings.json merge\n const payloadSettings = path.join(payloadClaude, 'settings.json')\n const targetSettings = path.join(opts.targetDir, 'settings.json')\n if (fs.existsSync(payloadSettings)) {\n const incoming = JSON.parse(fs.readFileSync(payloadSettings, 'utf8'))\n let merged = incoming\n if (fs.existsSync(targetSettings)) {\n const existing = JSON.parse(fs.readFileSync(targetSettings, 'utf8'))\n merged = deepMergeSettings(existing, incoming)\n }\n\n const wouldChange =\n !fs.existsSync(targetSettings) ||\n JSON.stringify(merged) !== JSON.stringify(JSON.parse(fs.readFileSync(targetSettings, 'utf8')))\n\n if (wouldChange) {\n if (!opts.dryRun) {\n fs.writeFileSync(targetSettings, JSON.stringify(merged, null, 2) + '\\n')\n }\n report.written.push('.claude/settings.json')\n report.settingsTouched = ['.claude/settings.json']\n } else {\n report.skipped.push('.claude/settings.json')\n }\n }\n\n // CLAUDE.md merge\n const payloadClaudeMd = path.join(opts.payloadRoot, 'CLAUDE.md')\n const targetClaudeMd = path.join(path.dirname(opts.targetDir), 'CLAUDE.md')\n if (fs.existsSync(payloadClaudeMd)) {\n const incomingBlock = fs.readFileSync(payloadClaudeMd, 'utf8')\n const existing = fs.existsSync(targetClaudeMd)\n ? fs.readFileSync(targetClaudeMd, 'utf8')\n : undefined\n const merged = mergeManagedBlock(existing, incomingBlock)\n\n if (merged !== existing) {\n if (!opts.dryRun) {\n fs.writeFileSync(targetClaudeMd, merged)\n }\n report.written.push('CLAUDE.md')\n } else {\n report.skipped.push('CLAUDE.md')\n }\n }\n\n return report\n}\n\nfunction* walkSync(dir: string): Generator<string> {\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n if (entry.isDirectory()) {\n yield* walkSync(fullPath)\n } else {\n yield fullPath\n }\n }\n}\n","const BEGIN = '<!-- lincoln:begin -->'\nconst END = '<!-- lincoln:end -->'\n\nexport function mergeManagedBlock(\n existing: string | undefined,\n block: string\n): string {\n const wrapped = `${BEGIN}\\n${block}\\n${END}`\n const text = existing ?? ''\n\n const beginIndex = text.indexOf(BEGIN)\n const endIndex = text.indexOf(END)\n\n if (beginIndex !== -1 && endIndex !== -1 && endIndex > beginIndex) {\n return (\n text.slice(0, beginIndex) +\n wrapped +\n text.slice(endIndex + END.length)\n )\n }\n\n if (text.trim().length === 0) {\n return wrapped\n }\n\n return `${text.trimEnd()}\\n\\n${wrapped}\\n`\n}\n\nexport function extractManagedBlock(existing: string): string | undefined {\n const beginIndex = existing.indexOf(BEGIN)\n const endIndex = existing.indexOf(END)\n if (beginIndex === -1 || endIndex === -1 || endIndex <= beginIndex) {\n return undefined\n }\n return existing\n .slice(beginIndex + BEGIN.length, endIndex)\n .replace(/^\\n+|\\n+$/g, '')\n}\n","import { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process'\nimport type { SyncReport } from './syncClaude.js'\n\nexport interface RunHarnessAdapterOptions {\n harnessId: 'codex' | 'opencode'\n payloadRoot: string\n projectDir: string\n homeDir: string\n pythonPath: string\n dryRun: boolean\n spawnCommand?: SpawnCommand\n}\n\ntype SpawnCommand = (command: string, args: string[], options?: SpawnOptions) => ChildProcess\n\nfunction runCommand(\n command: string,\n args: string[],\n spawnCommand: SpawnCommand\n): Promise<number | null> {\n return new Promise((resolvePromise, rejectPromise) => {\n const child = spawnCommand(command, args, { stdio: 'inherit' })\n child.on('close', (code) => {\n resolvePromise(code)\n })\n child.on('error', (err) => {\n rejectPromise(err)\n })\n })\n}\n\nexport async function runHarnessAdapter(opts: RunHarnessAdapterOptions): Promise<SyncReport> {\n const report: SyncReport = {\n written: [],\n skipped: [],\n preserved: [],\n warnings: []\n }\n\n if (opts.dryRun) {\n report.written.push(`${opts.harnessId} (dry run)`)\n return report\n }\n\n const args = [\n `${opts.payloadRoot}/scripts/lincoln_harness_adapter.py`,\n '--harness',\n opts.harnessId,\n '--root',\n opts.payloadRoot,\n '--project-dir',\n opts.projectDir,\n '--home-dir',\n opts.homeDir\n ]\n\n try {\n const spawnCommand = (opts.spawnCommand ?? spawn) as SpawnCommand\n const code = await runCommand(opts.pythonPath, args, spawnCommand)\n if (code === 0) {\n report.written.push(opts.harnessId)\n } else {\n report.warnings.push(\n `Adapter for ${opts.harnessId} exited with code ${code}. Run manually to diagnose.`\n )\n }\n } catch (err) {\n report.warnings.push(\n `Failed to run adapter for ${opts.harnessId}: ${err instanceof Error ? err.message : String(err)}`\n )\n }\n\n return report\n}\n","import type { SyncReport } from './syncClaude.js'\nimport { syncClaudeCode } from './syncClaude.js'\nimport type { HarnessId } from './harnessDetect.js'\nimport type { LincolnPaths } from './paths.js'\nimport { runHarnessAdapter } from './runHarnessAdapter.js'\n\nexport interface SyncHarnessesOptions {\n harnesses: HarnessId[]\n payloadRoot: string\n paths: LincolnPaths\n projectDir: string\n version: string\n dryRun: boolean\n pythonPath?: string\n syncClaude?: (opts: {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n }) => SyncReport\n}\n\nexport type HarnessSyncReport = Record<HarnessId, SyncReport>\n\nfunction emptyReport(): SyncReport {\n return {\n written: [],\n skipped: [],\n preserved: [],\n warnings: []\n }\n}\n\nexport async function syncHarnesses(opts: SyncHarnessesOptions): Promise<HarnessSyncReport> {\n const reports: HarnessSyncReport = {} as HarnessSyncReport\n const syncClaude = opts.syncClaude ?? syncClaudeCode\n\n for (const harnessId of opts.harnesses) {\n reports[harnessId] = await syncHarness(harnessId, opts, syncClaude)\n }\n\n return reports\n}\n\nasync function syncHarness(\n harnessId: HarnessId,\n opts: SyncHarnessesOptions,\n syncClaude: NonNullable<SyncHarnessesOptions['syncClaude']>\n): Promise<SyncReport> {\n if (harnessId === 'claude-code') {\n return syncClaude({\n payloadRoot: opts.payloadRoot,\n targetDir: opts.paths.claudeDir,\n version: opts.version,\n dryRun: opts.dryRun\n })\n }\n\n if (harnessId === 'codex' || harnessId === 'opencode') {\n if (opts.dryRun) {\n const report = emptyReport()\n report.written.push(`${harnessId} (dry run)`)\n return report\n }\n if (!opts.pythonPath) {\n const report = emptyReport()\n report.warnings.push(\n `Skipped ${harnessId} sync because Python is not available. Install Python 3.10+ or run without --no-venv.`\n )\n return report\n }\n return runHarnessAdapter({\n harnessId,\n payloadRoot: opts.payloadRoot,\n projectDir: opts.projectDir,\n homeDir: opts.paths.homeDir,\n pythonPath: opts.pythonPath,\n dryRun: opts.dryRun\n })\n }\n\n const report = emptyReport()\n report.warnings.push(`Unsupported harness: ${harnessId}`)\n return report\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport type HarnessId = 'claude-code' | 'codex' | 'opencode'\n\nexport interface GlobalHarnessInfo {\n id: HarnessId\n installed: boolean\n configDir: string\n pluginManaged: boolean\n}\n\ninterface HarnessSpec {\n id: HarnessId\n configDirName: string\n pluginMarker?: string\n}\n\nconst HARNESS_SPECS: HarnessSpec[] = [\n {\n id: 'claude-code',\n configDirName: '.claude',\n pluginMarker: 'plugins/lincoln'\n },\n { id: 'codex', configDirName: '.codex' },\n { id: 'opencode', configDirName: '.opencode' }\n]\n\nexport function detectGlobalHarnesses(\n overrideHomeDir?: string\n): GlobalHarnessInfo[] {\n const homeDir = overrideHomeDir ?? os.homedir()\n\n return HARNESS_SPECS.map((spec) => {\n const configDir = path.join(homeDir, spec.configDirName)\n const installed = fs.existsSync(configDir)\n const pluginManaged = spec.pluginMarker\n ? fs.existsSync(path.join(configDir, spec.pluginMarker))\n : false\n\n return {\n id: spec.id,\n installed,\n configDir,\n pluginManaged\n }\n })\n}\n\nexport function installedHarnessIds(homeDir?: string): HarnessId[] {\n return detectGlobalHarnesses(homeDir)\n .filter((h) => h.installed)\n .map((h) => h.id)\n}\n\nexport const HARNESS_IDS: HarnessId[] = HARNESS_SPECS.map((spec) => spec.id)\n\nexport function isValidHarnessId(value: string): value is HarnessId {\n return HARNESS_SPECS.some((spec) => spec.id === value)\n}\n","import type { GlobalHarnessInfo, HarnessId } from './harnessDetect.js'\nimport type { MultiSelectOption } from './prompt.js'\n\nexport const HARNESS_LABELS: Record<HarnessId, string> = {\n 'claude-code': 'Claude Code',\n codex: 'Codex',\n opencode: 'OpenCode'\n}\n\nexport function buildHarnessOptions(\n detected: ReadonlyArray<GlobalHarnessInfo>\n): MultiSelectOption[] {\n return detected.map((harness) => ({\n id: harness.id,\n label: HARNESS_LABELS[harness.id],\n checked: harness.installed\n }))\n}\n\nexport function resolveHarnessSelection(\n detected: ReadonlyArray<GlobalHarnessInfo>,\n selection: string[] | undefined\n): HarnessId[] {\n if (selection === undefined) {\n return detected.filter((harness) => harness.installed).map((harness) => harness.id)\n }\n const validIds = new Set<HarnessId>()\n for (const id of selection) {\n const match = detected.find((harness) => harness.id === id)\n if (match) {\n validIds.add(match.id)\n }\n }\n return Array.from(validIds)\n}\n","import type { Readable, Writable } from 'node:stream'\n\nexport interface PromptOptions {\n input?: Readable\n output?: Writable\n}\n\nexport interface MultiSelectOption {\n id: string\n label: string\n checked: boolean\n}\n\nexport interface Prompt {\n confirm(question: string, defaultValue?: boolean): Promise<boolean>\n multiSelect(question: string, options: ReadonlyArray<MultiSelectOption>): Promise<string[]>\n close(): void\n}\n\ninterface LineReader {\n readLine(prompt: string): Promise<string>\n close(): void\n}\n\nfunction createLineReader(input: Readable, output: Writable): LineReader {\n const buffer: string[] = []\n const queue: Array<{ resolve: (line: string) => void; reject: (err: Error) => void }> = []\n let remainder = ''\n let ended = false\n\n function flushQueue(): void {\n while (queue.length > 0 && buffer.length > 0) {\n const next = queue.shift()\n const line = buffer.shift()\n if (next && line !== undefined) {\n next.resolve(line)\n }\n }\n }\n\n input.on('data', (chunk: Buffer | string) => {\n const text = remainder + chunk.toString('utf-8')\n const lines = text.split('\\n')\n remainder = lines.pop() ?? ''\n for (const line of lines) {\n buffer.push(line.replace(/\\r$/, ''))\n }\n flushQueue()\n })\n\n input.on('end', () => {\n ended = true\n if (remainder.length > 0) {\n buffer.push(remainder.replace(/\\r$/, ''))\n remainder = ''\n }\n flushQueue()\n while (queue.length > 0) {\n const next = queue.shift()\n next?.resolve('')\n }\n })\n\n input.on('error', (err) => {\n while (queue.length > 0) {\n queue.shift()?.reject(err)\n }\n })\n\n return {\n readLine(prompt: string): Promise<string> {\n output.write(prompt)\n if (buffer.length > 0) {\n return Promise.resolve(buffer.shift() ?? '')\n }\n if (ended) {\n return Promise.resolve('')\n }\n return new Promise<string>((resolve, reject) => {\n queue.push({ resolve, reject })\n })\n },\n close(): void {\n // nothing to close for raw streams\n }\n }\n}\n\nfunction normalizeAnswer(text: string): string {\n return text.trim().toLowerCase()\n}\n\nexport function createPrompt(streams: PromptOptions = {}): Prompt {\n const input = streams.input ?? process.stdin\n const output = streams.output ?? process.stdout\n const reader = createLineReader(input, output)\n\n async function ask(question: string): Promise<string> {\n return reader.readLine(question)\n }\n\n return {\n async confirm(question: string, defaultValue = true): Promise<boolean> {\n const hint = defaultValue ? '[Y/n]' : '[y/N]'\n const first = await ask(`${question} ${hint} `)\n const normalized = normalizeAnswer(first)\n if (normalized === 'y' || normalized === 'yes') {\n return true\n }\n if (normalized === 'n' || normalized === 'no') {\n return false\n }\n if (normalized === '') {\n return defaultValue\n }\n const second = await ask('Please answer y or n: ')\n const secondNormalized = normalizeAnswer(second)\n if (secondNormalized === 'y' || secondNormalized === 'yes') {\n return true\n }\n if (secondNormalized === 'n' || secondNormalized === 'no') {\n return false\n }\n return defaultValue\n },\n\n async multiSelect(\n question: string,\n options: ReadonlyArray<MultiSelectOption>\n ): Promise<string[]> {\n const lines = options.map((opt, index) => {\n const mark = opt.checked ? 'x' : ' '\n return ` [${mark}] ${index + 1}. ${opt.label}`\n })\n const promptText = `${question}\\n${lines.join('\\n')}\\nEnter numbers (e.g. 1,3), 'all', 'none', or harness names: `\n\n async function parse(answer: string): Promise<string[] | undefined> {\n const normalized = normalizeAnswer(answer)\n if (normalized === 'all') {\n return options.map((opt) => opt.id)\n }\n if (normalized === 'none') {\n return []\n }\n if (normalized === '') {\n return options.filter((opt) => opt.checked).map((opt) => opt.id)\n }\n const parts = normalized.split(/[,\\s]+/).filter((part) => part.length > 0)\n const selected = new Set<string>()\n for (const part of parts) {\n const index = Number(part)\n if (!Number.isNaN(index) && index >= 1 && index <= options.length) {\n selected.add(options[index - 1].id)\n continue\n }\n const match = options.find((opt) => opt.id === part)\n if (match) {\n selected.add(match.id)\n continue\n }\n return undefined\n }\n return Array.from(selected)\n }\n\n let result = await parse(await ask(promptText))\n if (result !== undefined) {\n return result\n }\n const retry = await ask('Invalid selection. Please try again: ')\n result = await parse(retry)\n return result ?? []\n },\n\n close(): void {\n reader.close()\n }\n }\n}\n","import { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { readVersionMarker } from '../lib/versionMarker.js'\nimport { createRegistryClient } from '../lib/npmRegistry.js'\nimport { compareVersions } from '../lib/semver.js'\nimport { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { install } from './install.js'\nimport type { InstallOptions } from './install.js'\n\nconst PACKAGE_NAME = '@sushanglewis/lincoln'\n\nexport interface UpdateOptions {\n check: boolean\n dryRun: boolean\n yes: boolean\n}\n\nexport interface UpdateDeps {\n paths: LincolnPaths\n latestVersion: () => Promise<string>\n currentVersion: () => string | undefined\n npmInstallGlobal: (version: string) => Promise<number>\n runInstall: (options: InstallOptions) => Promise<number>\n}\n\nexport function createDefaultDeps(): UpdateDeps {\n const paths = resolveLincolnPaths()\n const registry = createRegistryClient()\n return {\n paths,\n latestVersion: () => registry.latestVersion(PACKAGE_NAME),\n currentVersion: () => readVersionMarker(paths)?.version ?? readLocalPackageVersion(),\n npmInstallGlobal: (version) => runNpmInstallGlobal(PACKAGE_NAME, version),\n runInstall: (options) => install(options)\n }\n}\n\nexport async function update(\n options: UpdateOptions,\n deps: Partial<UpdateDeps> = {}\n): Promise<number> {\n const resolved: UpdateDeps = { ...createDefaultDeps(), ...deps }\n\n let latest: string\n try {\n latest = await resolved.latestVersion()\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to query npm registry: ${message}`)\n return 1\n }\n\n const current = resolved.currentVersion()\n\n if (current !== undefined) {\n const comparison = compareVersions(current, latest)\n if (comparison !== undefined ? comparison > 0 : false) {\n console.log(\n `Lincoln ${current} is ahead of the latest release (${latest}); nothing to do.`\n )\n return 0\n }\n if (comparison !== undefined ? comparison === 0 : current === latest) {\n console.log(`Lincoln ${current} is already up to date.`)\n return 0\n }\n }\n\n const summary = `${current ?? 'unknown'} -> ${latest}`\n\n if (options.check) {\n console.log(`Lincoln update available: ${summary}`)\n return 0\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would update Lincoln ${summary}`)\n return 0\n }\n\n if (!options.yes) {\n console.error(`Will update Lincoln ${summary}. Run with --yes to proceed.`)\n return 1\n }\n\n const installCode = await resolved.npmInstallGlobal(latest)\n if (installCode !== 0) {\n console.error(`npm install -g ${PACKAGE_NAME}@${latest} failed with exit code ${installCode}`)\n return 1\n }\n\n // NOTE: this runs the *current* process's install(), not the just-installed\n // new version's. Re-executing the freshly installed `lincoln` binary would\n // rely on PATH/npx resolution picking up the new shim, which is fragile\n // mid-upgrade. The tradeoff is that sync logic changes shipped in the new\n // version only take effect on the next command run.\n const syncCode = await resolved.runInstall(defaultInstallOptions())\n if (syncCode !== 0) {\n console.error(`lincoln install failed with exit code ${syncCode}`)\n return 1\n }\n\n console.log(`Updated Lincoln to ${latest}`)\n return 0\n}\n\nfunction defaultInstallOptions(): InstallOptions {\n return { yes: true, dryRun: false, force: false, harnesses: [], noVenv: true, noInteractive: true }\n}\n\nfunction runNpmInstallGlobal(packageName: string, version: string): Promise<number> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['install', '-g', `${packageName}@${version}`], {\n stdio: 'inherit',\n shell: process.platform === 'win32',\n env: { ...process.env, LINCOLN_SKIP_POSTINSTALL: '1' }\n })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', () => resolvePromise(1))\n })\n}\n","const DEFAULT_REGISTRY_URL = 'https://registry.npmjs.org'\nconst FETCH_TIMEOUT_MS = 15_000\n\nexport interface NpmDistTags {\n latest?: string\n [tag: string]: string | undefined\n}\n\nexport interface NpmVersionMetadata {\n version?: string\n dist?: {\n tarball?: string\n }\n}\n\nexport interface NpmPackument {\n name?: string\n 'dist-tags'?: NpmDistTags\n versions?: Record<string, NpmVersionMetadata>\n}\n\nexport interface RegistryClient {\n latestVersion(packageName: string): Promise<string>\n versions(packageName: string): Promise<string[]>\n resolveVersion(packageName: string, spec: string): Promise<string>\n}\n\nexport function createRegistryClient(\n registryUrl: string = DEFAULT_REGISTRY_URL,\n fetchImpl: typeof fetch = fetch\n): RegistryClient {\n const baseUrl = registryUrl.replace(/\\/+$/, '')\n\n async function fetchPackument(packageName: string): Promise<NpmPackument> {\n const url = `${baseUrl}/${encodePackageName(packageName)}`\n const response = await fetchImpl(url, {\n headers: { Accept: 'application/json' },\n signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)\n })\n if (!response.ok) {\n throw new Error(\n `npm registry returned ${response.status} ${response.statusText} for ${packageName}`\n )\n }\n return (await response.json()) as NpmPackument\n }\n\n return {\n async latestVersion(packageName: string): Promise<string> {\n const packument = await fetchPackument(packageName)\n const latest = packument['dist-tags']?.latest\n if (!latest) {\n throw new Error(`npm registry has no latest dist-tag for ${packageName}`)\n }\n return latest\n },\n\n async versions(packageName: string): Promise<string[]> {\n const packument = await fetchPackument(packageName)\n return Object.keys(packument.versions ?? {})\n },\n\n async resolveVersion(packageName: string, spec: string): Promise<string> {\n const packument = await fetchPackument(packageName)\n const tagTarget = packument['dist-tags']?.[spec]\n if (tagTarget) {\n return tagTarget\n }\n if (packument.versions && spec in packument.versions) {\n return spec\n }\n throw new Error(`Version not found for ${packageName}: ${spec}`)\n }\n }\n}\n\nfunction encodePackageName(packageName: string): string {\n if (packageName.startsWith('@')) {\n const slash = packageName.indexOf('/')\n if (slash === -1) {\n return encodeURIComponent(packageName)\n }\n const scope = packageName.slice(1, slash)\n const name = packageName.slice(slash + 1)\n return `@${encodeURIComponent(scope)}%2F${encodeURIComponent(name)}`\n }\n return encodeURIComponent(packageName)\n}\n","const SEMVER_CORE = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/\nconst NUMERIC_IDENTIFIER = /^\\d+$/\n\ninterface ParsedVersion {\n major: number\n minor: number\n patch: number\n prerelease: string[]\n}\n\n/**\n * Compares two semver strings per semver.org precedence rules (build metadata\n * ignored). Returns a negative number when a < b, 0 when equal, a positive\n * number when a > b, or undefined when either input is not a parseable semver.\n */\nexport function compareVersions(a: string, b: string): number | undefined {\n const pa = parseVersion(a)\n const pb = parseVersion(b)\n if (!pa || !pb) {\n return undefined\n }\n if (pa.major !== pb.major) return pa.major - pb.major\n if (pa.minor !== pb.minor) return pa.minor - pb.minor\n if (pa.patch !== pb.patch) return pa.patch - pb.patch\n return comparePrerelease(pa.prerelease, pb.prerelease)\n}\n\nfunction parseVersion(version: string): ParsedVersion | undefined {\n const match = SEMVER_CORE.exec(version.trim())\n if (!match) {\n return undefined\n }\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4] ? match[4].split('.') : []\n }\n}\n\nfunction comparePrerelease(a: string[], b: string[]): number {\n if (a.length === 0 && b.length === 0) return 0\n // A version without a prerelease has higher precedence than one with it.\n if (a.length === 0) return 1\n if (b.length === 0) return -1\n const shared = Math.min(a.length, b.length)\n for (let i = 0; i < shared; i++) {\n const x = a[i]\n const y = b[i]\n if (x === y) continue\n const xNumeric = NUMERIC_IDENTIFIER.test(x)\n const yNumeric = NUMERIC_IDENTIFIER.test(y)\n if (xNumeric && yNumeric) return Number(x) - Number(y)\n // Numeric identifiers have lower precedence than alphanumeric ones.\n if (xNumeric) return -1\n if (yNumeric) return 1\n return x < y ? -1 : 1\n }\n return a.length - b.length\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { createRegistryClient } from '../lib/npmRegistry.js'\nimport { install } from './install.js'\nimport type { InstallOptions } from './install.js'\n\nconst PACKAGE_NAME = '@sushanglewis/lincoln'\nconst SEMVER_REGEX = /^v?\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst STRICT_SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst DIST_TAG_REGEX = /^[a-zA-Z][a-zA-Z0-9._-]*$/\n\nexport interface UseOptions {\n dryRun: boolean\n yes: boolean\n}\n\nexport interface UseDeps {\n paths: LincolnPaths\n resolveVersion: (spec: string) => Promise<string>\n ensureVersionAvailable: (version: string) => Promise<void>\n npmGlobalRoot: () => Promise<string | undefined>\n runInstall: (options: InstallOptions) => Promise<number>\n}\n\nexport function createDefaultDeps(): UseDeps {\n const paths = resolveLincolnPaths()\n const registry = createRegistryClient()\n return {\n paths,\n resolveVersion: async (spec) => {\n // Exact (optionally v-prefixed) versions resolve locally without a\n // registry round-trip, so switching between installed versions works\n // offline. Dist-tags (latest, next, ...) need the registry.\n const normalized = spec.startsWith('v') ? spec.slice(1) : spec\n if (STRICT_SEMVER_REGEX.test(normalized)) {\n return normalized\n }\n return registry.resolveVersion(PACKAGE_NAME, spec)\n },\n ensureVersionAvailable: async (version) => {\n const code = await runNpmInstallGlobal(PACKAGE_NAME, version)\n if (code !== 0) {\n throw new Error(`npm install -g ${PACKAGE_NAME}@${version} exited with ${code}`)\n }\n },\n npmGlobalRoot: () => runNpmRootGlobal(),\n runInstall: (options) => install(options)\n }\n}\n\nexport async function use(\n spec: string,\n options: UseOptions,\n deps: Partial<UseDeps> = {}\n): Promise<number> {\n if (!isValidVersion(spec)) {\n console.error(`Invalid version: ${spec}`)\n return 1\n }\n\n const resolved: UseDeps = { ...createDefaultDeps(), ...deps }\n\n let version: string\n try {\n version = await resolved.resolveVersion(spec)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to resolve version ${spec}: ${message}`)\n return 1\n }\n\n const versionDir = path.join(resolved.paths.versionsDir, version)\n const alreadyInstalled = fs.existsSync(versionDir)\n\n if (options.dryRun) {\n if (alreadyInstalled) {\n console.log(`Dry run: would switch ${resolved.paths.currentDir} to ${versionDir}`)\n } else {\n console.log(\n `Dry run: would install ${PACKAGE_NAME}@${version} globally, then switch ${resolved.paths.currentDir} to ${versionDir}`\n )\n }\n return 0\n }\n\n if (!options.yes) {\n console.error(`Will switch Lincoln to ${version}. Run with --yes to proceed.`)\n return 1\n }\n\n if (!alreadyInstalled) {\n try {\n await resolved.ensureVersionAvailable(version)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to install ${PACKAGE_NAME}@${version}: ${message}`)\n return 1\n }\n\n if (!fs.existsSync(versionDir)) {\n // `npm install -g` places the package in the npm global root; it does\n // not populate ~/.lincoln/versions. Copy the payload over so the\n // version switch below has a real directory to point at.\n try {\n await copyVersionFromNpmGlobal(resolved, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to populate ${versionDir}: ${message}`)\n return 1\n }\n }\n\n if (!fs.existsSync(versionDir)) {\n console.error(\n `Provisioning ${PACKAGE_NAME}@${version} did not produce ${versionDir}; cannot switch versions.`\n )\n return 1\n }\n }\n\n try {\n switchCurrentLink(resolved.paths, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to switch ${resolved.paths.currentDir}: ${message}`)\n return 1\n }\n\n const syncCode = await resolved.runInstall(defaultInstallOptions())\n if (syncCode !== 0) {\n console.error(`lincoln install failed with exit code ${syncCode}`)\n return 1\n }\n\n // The trailing install re-points ~/.lincoln/current at the *running* CLI's\n // own version dir (Task 9 behavior, pending the install payload fix).\n // Re-assert the requested version so the switch actually sticks.\n try {\n switchCurrentLink(resolved.paths, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to switch ${resolved.paths.currentDir}: ${message}`)\n return 1\n }\n\n console.log(`Switched Lincoln to ${version}`)\n return 0\n}\n\nfunction isValidVersion(version: string): boolean {\n return SEMVER_REGEX.test(version) || DIST_TAG_REGEX.test(version)\n}\n\nasync function copyVersionFromNpmGlobal(deps: UseDeps, versionDir: string): Promise<void> {\n const globalRoot = await deps.npmGlobalRoot()\n if (!globalRoot) {\n return\n }\n const packageRoot = path.join(globalRoot, ...PACKAGE_NAME.split('/'))\n if (!fs.existsSync(packageRoot)) {\n return\n }\n fs.mkdirSync(path.dirname(versionDir), { recursive: true })\n fs.cpSync(packageRoot, versionDir, { recursive: true })\n}\n\nfunction switchCurrentLink(paths: LincolnPaths, versionDir: string): void {\n fs.mkdirSync(paths.lincolnHome, { recursive: true })\n try {\n fs.rmSync(paths.currentDir, { recursive: true, force: true })\n fs.symlinkSync(versionDir, paths.currentDir)\n } catch {\n fs.rmSync(paths.currentDir, { recursive: true, force: true })\n fs.cpSync(versionDir, paths.currentDir, { recursive: true, force: true })\n }\n}\n\nfunction defaultInstallOptions(): InstallOptions {\n return { yes: true, dryRun: false, force: false, harnesses: [], noVenv: true, noInteractive: true }\n}\n\nfunction runNpmInstallGlobal(packageName: string, version: string): Promise<number> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['install', '-g', `${packageName}@${version}`], {\n stdio: 'inherit',\n shell: process.platform === 'win32',\n env: { ...process.env, LINCOLN_SKIP_POSTINSTALL: '1' }\n })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', () => resolvePromise(1))\n })\n}\n\nfunction runNpmRootGlobal(): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['root', '-g'], {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const root = stdout.trim()\n resolvePromise(code === 0 && root.length > 0 ? root : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { listVendoredFrameworkFiles } from '../lib/projectFiles.js'\nimport { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { writeProjectMarker } from '../lib/marker.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport type { LincolnPaths } from '../lib/paths.js'\n\nexport interface MigrateProjectOptions {\n dryRun?: boolean\n yes?: boolean\n force?: boolean\n}\n\nexport interface MigrateProjectDeps {\n paths: LincolnPaths\n listVendoredFrameworkFiles: (\n payloadRoot: string,\n projectRoot: string\n ) => ReturnType<typeof listVendoredFrameworkFiles>\n writeProjectMarker: typeof writeProjectMarker\n}\n\nexport function createDefaultDeps(): MigrateProjectDeps {\n return {\n paths: resolveLincolnPaths(),\n listVendoredFrameworkFiles,\n writeProjectMarker\n }\n}\n\nexport async function migrateProject(\n projectRoot: string,\n options: MigrateProjectOptions = {},\n deps: MigrateProjectDeps = createDefaultDeps()\n): Promise<number> {\n const payloadRoot = deps.paths.currentDir\n if (!fs.existsSync(payloadRoot)) {\n console.error(`Lincoln payload not found at ${payloadRoot}. Run \"lincoln install\" first.`)\n return 1\n }\n\n const absoluteProjectRoot = path.resolve(projectRoot)\n const report = deps.listVendoredFrameworkFiles(payloadRoot, absoluteProjectRoot)\n\n if (options.dryRun) {\n console.log(`Dry run: would migrate ${absoluteProjectRoot}`)\n if (report.removable.length > 0) {\n console.log('Would remove unmodified framework files:')\n for (const f of report.removable) console.log(` - ${f}`)\n }\n if (report.modified.length > 0) {\n console.log('Would preserve modified framework files:')\n for (const f of report.modified) console.log(` - ${f}`)\n }\n if (report.preserved.length > 0) {\n console.log('Would preserve project-local files:')\n for (const f of report.preserved) console.log(` - ${f}`)\n }\n console.log('Would create .lincoln.yaml')\n return 0\n }\n\n if (!options.yes) {\n console.error('This will remove vendored framework files. Run with --yes to proceed.')\n return 1\n }\n\n for (const file of report.removable) {\n const filePath = path.join(absoluteProjectRoot, file)\n try {\n fs.rmSync(filePath)\n // Remove empty parent directories up to project root\n let dir = path.dirname(filePath)\n while (dir !== absoluteProjectRoot && fs.existsSync(dir)) {\n const entries = fs.readdirSync(dir)\n if (entries.length === 0) {\n fs.rmdirSync(dir)\n dir = path.dirname(dir)\n } else {\n break\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to remove ${file}: ${message}`)\n return 1\n }\n }\n\n if (report.modified.length > 0) {\n console.log('Preserved modified framework files:')\n for (const f of report.modified) console.log(` - ${f}`)\n }\n\n if (report.preserved.length > 0) {\n console.log('Preserved project-local files:')\n for (const f of report.preserved) console.log(` - ${f}`)\n }\n\n try {\n deps.writeProjectMarker(\n absoluteProjectRoot,\n {\n enabled: true,\n workflow_template: 'interview-to-knowledge',\n min_lincoln_version: readLocalPackageVersion() ?? '1.5.0'\n },\n { force: options.force }\n )\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to write .lincoln.yaml: ${message}`)\n return 1\n }\n\n console.log(`Migrated project at ${absoluteProjectRoot}`)\n console.log(`Removed ${report.removable.length} unmodified framework files`)\n return 0\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\n\n// Mirrors scripts/package-lincoln-plugin.py and scripts/sync-framework-package.mjs\nexport const FRAMEWORK_ALLOWLIST_DIRS = ['.claude', '.claude-plugin', 'scripts', 'tools']\nexport const FRAMEWORK_ALLOWLIST_FILES = [\n 'README.md',\n 'README.en.md',\n 'USAGE.md',\n 'CONTRIBUTING.md',\n 'CLAUDE.md',\n 'LICENSE',\n 'RELEASE.md',\n '.version-bump.json',\n 'requirements.txt',\n 'SKILL.md'\n]\nexport const FRAMEWORK_DENYLIST_NAMES = new Set([\n '.git',\n '.context',\n '.venv',\n 'venv',\n 'dist',\n 'oss',\n '.pytest_cache',\n '__pycache__',\n '.DS_Store',\n 'node_modules'\n])\nexport const FRAMEWORK_DENYLIST_PREFIXES = ['issue-']\nexport const FRAMEWORK_SKIP_PATHS = new Set([\n '.claude/templates/issue-package',\n 'tools/lincoln-installer/dist',\n 'tools/lincoln-installer/node_modules',\n 'tools/lincoln-installer/coverage'\n])\n\nfunction sha256(filePath: string): string {\n return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex')\n}\n\nfunction isDenied(relativePath: string): boolean {\n const parts = relativePath.split(path.sep)\n for (const part of parts) {\n if (FRAMEWORK_DENYLIST_NAMES.has(part)) return true\n for (const prefix of FRAMEWORK_DENYLIST_PREFIXES) {\n if (part.startsWith(prefix)) return true\n }\n }\n for (const skip of FRAMEWORK_SKIP_PATHS) {\n if (relativePath === skip || relativePath.startsWith(skip + path.sep)) return true\n }\n return false\n}\n\nfunction isAllowlisted(relativePath: string): boolean {\n if (FRAMEWORK_ALLOWLIST_FILES.includes(relativePath)) return true\n for (const dir of FRAMEWORK_ALLOWLIST_DIRS) {\n if (relativePath === dir || relativePath.startsWith(dir + path.sep)) return true\n }\n return false\n}\n\nfunction isPreservedDir(relativePath: string): boolean {\n const normalized = relativePath.replace(/\\\\/g, '/')\n if (normalized === '.context' || normalized.startsWith('.context/')) return true\n const parts = normalized.split('/')\n for (const part of parts) {\n if (part.startsWith('issue-')) return true\n }\n return false\n}\n\nfunction isPreserved(relativePath: string): boolean {\n const normalized = relativePath.replace(/\\\\/g, '/')\n if (normalized === '.github/openspec-config.yml') return true\n return isPreservedDir(relativePath)\n}\n\nexport interface VendoredFileReport {\n removable: string[]\n modified: string[]\n preserved: string[]\n}\n\nexport function listVendoredFrameworkFiles(\n payloadRoot: string,\n projectRoot: string\n): VendoredFileReport {\n const report: VendoredFileReport = { removable: [], modified: [], preserved: [] }\n\n function walk(dir: string): void {\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n const relativePath = path.relative(projectRoot, fullPath)\n\n if (entry.isDirectory()) {\n if (isPreservedDir(relativePath)) {\n walk(fullPath)\n } else if (!isDenied(relativePath)) {\n walk(fullPath)\n }\n continue\n }\n\n if (isPreserved(relativePath)) {\n report.preserved.push(relativePath)\n continue\n }\n\n if (isDenied(relativePath)) continue\n if (!isAllowlisted(relativePath)) continue\n\n const payloadFile = path.join(payloadRoot, relativePath)\n if (!fs.existsSync(payloadFile)) {\n report.modified.push(relativePath)\n continue\n }\n\n if (sha256(fullPath) === sha256(payloadFile)) {\n report.removable.push(relativePath)\n } else {\n report.modified.push(relativePath)\n }\n }\n }\n\n if (fs.existsSync(projectRoot)) {\n walk(projectRoot)\n }\n\n return report\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport { EventEmitter } from 'node:events'\n\nexport interface RecordDeps {\n spawn: (\n command: string,\n args: readonly string[],\n options: { stdio: 'inherit' }\n ) => ChildProcess\n}\n\nexport function createDefaultDeps(): RecordDeps {\n return { spawn }\n}\n\nexport function record(args: string[], deps: RecordDeps = createDefaultDeps()): Promise<number> {\n return new Promise((resolve) => {\n const child = deps.spawn('lincoln-record', args, { stdio: 'inherit' })\n child.on('error', (err: Error) => {\n console.error(`Failed to start lincoln-record: ${err.message}`)\n resolve(1)\n })\n child.on('close', (code: number | null) => {\n resolve(code ?? 0)\n })\n })\n}\n\nexport function makeFakeChildProcess(exitCode: number | null = 0): ChildProcess {\n const emitter = new EventEmitter() as ChildProcess\n process.nextTick(() => {\n emitter.emit('close', exitCode)\n })\n return emitter\n}\n\nexport function makeFailingFakeChildProcess(message: string): ChildProcess {\n const emitter = new EventEmitter() as ChildProcess\n process.nextTick(() => {\n emitter.emit('error', new Error(message))\n })\n return emitter\n}\n"],"mappings":"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","names":["fs","path","fileURLToPath","fs","path","path","path","fs","fs","path","fs","path","fs","path","spawn","fs","path","fs","path","spawn","report","fs","path","os","createDefaultDeps","fs","path","runCommand","spawn","MIN_PYTHON_MAJOR","MIN_PYTHON_MINOR","parsePythonVersion","spawn","createDefaultDeps","spawn","fs","path","spawn","PACKAGE_NAME","createDefaultDeps","runNpmInstallGlobal","path","fs","defaultInstallOptions","spawn","fs","path","fs","path","crypto","sha256","createDefaultDeps","fs","path","spawn","createDefaultDeps","path","fs","fileURLToPath"]}
|
|
1
|
+
{"version":3,"sources":["../src/main.ts","../src/cli.ts","../src/commands/doctor.ts","../src/lib/paths.ts","../src/lib/versionMarker.ts","../src/lib/packageInfo.ts","../src/lib/marker.ts","../src/commands/initProject.ts","../src/commands/install.ts","../src/lib/syncClaude.ts","../src/lib/claudeMdMerge.ts","../src/lib/runHarnessAdapter.ts","../src/lib/syncHarness.ts","../src/lib/syncSkills.ts","../src/lib/semver.ts","../src/lib/harnessDetect.ts","../src/lib/harnessSelect.ts","../src/lib/prompt.ts","../src/commands/update.ts","../src/lib/npmRegistry.ts","../src/commands/use.ts","../src/commands/migrateProject.ts","../src/lib/projectFiles.ts","../src/commands/record.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { parseArgs } from './cli.js'\nimport { doctor } from './commands/doctor.js'\nimport { initProject } from './commands/initProject.js'\nimport { install } from './commands/install.js'\nimport { update } from './commands/update.js'\nimport { use } from './commands/use.js'\nimport { migrateProject } from './commands/migrateProject.js'\nimport { record } from './commands/record.js'\nimport { readLocalPackageVersion } from './lib/packageInfo.js'\n\nconst USAGE = `Lincoln — Global agent harness plugin CLI\n\nUsage:\n lincoln <command> [options]\n\nCommands:\n install One-time global setup: sync to ~/.claude/, ~/.codex/, ~/.opencode/\n update Pull latest release and re-sync globally\n use <version> Switch active global version\n doctor Diagnose harness integration\n init-project Create .lincoln.yaml in current project\n migrate-project Remove vendored framework files from an existing project\n record Launch the Lincoln interview recorder TUI\n help Show this help message\n\nOptions:\n --yes, -y Skip confirmation prompts\n --dry-run Show what would be done without making changes\n --force Force re-install even if up to date\n --harnesses Comma-separated harness ids (claude-code, codex, opencode)\n --no-interactive Never prompt; fail if --yes is also missing\n --check Check for available updates without installing (update)\n --json Output machine-readable JSON (where supported)\n --help, -h Show this help message\n --version, -v Show the installed Lincoln version\n`\n\nexport async function main(argv: string[]): Promise<number> {\n const parsed = parseArgs(argv)\n\n if (parsed.flags.version || parsed.flags.v) {\n const version = readLocalPackageVersion()\n console.log(version ? `Lincoln ${version}` : 'Lincoln (unknown version)')\n return 0\n }\n\n if (parsed.command === 'help') {\n console.log(USAGE)\n return 0\n }\n\n if (parsed.command === 'install') {\n const harnessesFlag = typeof parsed.flags.harnesses === 'string'\n ? String(parsed.flags.harnesses).split(',').map((id) => id.trim()).filter((id) => id.length > 0)\n : []\n const harnesses = harnessesFlag.length > 0 ? harnessesFlag : parsed.args\n return install({\n yes: Boolean(parsed.flags.yes || parsed.flags.y),\n dryRun: Boolean(parsed.flags['dry-run']),\n force: Boolean(parsed.flags.force),\n harnesses,\n noVenv: Boolean(parsed.flags['no-venv']),\n noInteractive: Boolean(parsed.flags['no-interactive'])\n })\n }\n\n if (parsed.command === 'update') {\n return update({\n check: Boolean(parsed.flags.check),\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y)\n })\n }\n\n if (parsed.command === 'use') {\n const version = parsed.args[0]\n if (!version) {\n console.error('Usage: lincoln use <version> [--yes] [--dry-run]')\n return 1\n }\n return use(version, {\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y)\n })\n }\n\n if (parsed.command === 'doctor') {\n const result = await doctor({ json: Boolean(parsed.flags.json) })\n return result.code\n }\n\n if (parsed.command === 'init-project') {\n return initProject(process.cwd(), {\n force: Boolean(parsed.flags.force),\n dryRun: Boolean(parsed.flags['dry-run'])\n })\n }\n\n if (parsed.command === 'migrate-project') {\n return migrateProject(process.cwd(), {\n dryRun: Boolean(parsed.flags['dry-run']),\n yes: Boolean(parsed.flags.yes || parsed.flags.y),\n force: Boolean(parsed.flags.force)\n })\n }\n\n if (parsed.command === 'record') {\n return record(parsed.args)\n }\n\n console.log(USAGE)\n return 0\n}\n\nif (\n process.argv[1] &&\n path.resolve(fs.realpathSync(fileURLToPath(import.meta.url))) ===\n path.resolve(fs.realpathSync(process.argv[1]))\n) {\n main(process.argv)\n .then((code) => process.exit(code))\n .catch((err) => {\n console.error(err instanceof Error ? err.message : String(err))\n process.exit(1)\n })\n}\n","export interface ParsedArgs {\n command: string\n args: string[]\n flags: Record<string, unknown>\n}\n\n/**\n * Flags that never take a value. Boolean flags must not consume the next\n * token, otherwise `lincoln use --yes 1.6.0` would swallow the positional\n * version argument into `flags.yes`.\n */\nconst BOOLEAN_FLAGS = new Set([\n 'yes',\n 'y',\n 'dry-run',\n 'force',\n 'check',\n 'json',\n 'help',\n 'h',\n 'no-venv',\n 'no-interactive',\n 'version',\n 'v'\n])\n\nexport function parseArgs(argv: string[]): ParsedArgs {\n const args = argv.slice(2)\n const flags: Record<string, unknown> = {}\n const positional: string[] = []\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (arg.startsWith('--')) {\n const key = arg.replace(/^--/, '')\n const next = args[i + 1]\n if (!BOOLEAN_FLAGS.has(key) && next && !next.startsWith('-')) {\n flags[key] = next\n i++\n } else {\n flags[key] = true\n }\n } else if (arg.startsWith('-')) {\n const key = arg.replace(/^-/, '')\n const next = args[i + 1]\n if (!BOOLEAN_FLAGS.has(key) && next && !next.startsWith('-')) {\n flags[key] = next\n i++\n } else {\n flags[key] = true\n }\n } else {\n positional.push(arg)\n }\n }\n\n const command = positional[0] || 'help'\n const validCommands = new Set([\n 'install',\n 'update',\n 'use',\n 'doctor',\n 'init-project',\n 'migrate-project',\n 'record',\n 'help',\n '--help',\n '-h'\n ])\n\n if (command === 'help' || command === '--help' || command === '-h') {\n return { command: 'help', args: positional.slice(1), flags }\n }\n\n if (!validCommands.has(command)) {\n return { command: 'help', args: positional, flags }\n }\n\n return { command, args: positional.slice(1), flags }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { readVersionMarker } from '../lib/versionMarker.js'\n\nexport interface DoctorCheck {\n name: string\n status: 'ok' | 'warn' | 'skip' | 'error'\n message: string\n}\n\nexport interface DoctorOptions {\n json?: boolean\n}\n\nexport interface DoctorDeps {\n paths: LincolnPaths\n nodeVersion: () => string\n pythonVersion: () => Promise<string | undefined>\n pyyamlVersion: () => Promise<string | undefined>\n npmVersion: () => Promise<string | undefined>\n projectRoot: string\n}\n\nexport interface DoctorResult {\n code: number\n checks: DoctorCheck[]\n}\n\nconst MIN_NODE_MAJOR = 20\nconst MIN_PYTHON_MAJOR = 3\nconst MIN_PYTHON_MINOR = 10\n\nexport function createDefaultDeps(): DoctorDeps {\n const paths = resolveLincolnPaths()\n const pythonCommand = resolvePythonCommand(paths)\n return {\n paths,\n nodeVersion: () => process.version,\n pythonVersion: () => queryCommandVersion(pythonCommand, ['--version']),\n pyyamlVersion: () => queryPyyamlVersion(pythonCommand),\n npmVersion: () => queryCommandVersion('npm', ['--version']),\n projectRoot: process.cwd()\n }\n}\n\nexport async function doctor(\n options: DoctorOptions = {},\n deps: DoctorDeps = createDefaultDeps()\n): Promise<DoctorResult> {\n const checks: DoctorCheck[] = []\n\n checks.push(checkNode(deps.nodeVersion()))\n checks.push(await checkPython(deps.pythonVersion))\n checks.push(await checkPyyaml(deps.pyyamlVersion))\n checks.push(await checkNpm(deps.npmVersion))\n checks.push(checkGlobalMarker(deps.paths))\n checks.push(checkPayloadHooks(deps.paths))\n checks.push(checkVenv(deps.paths))\n checks.push(checkProjectMarker(deps.projectRoot))\n\n const hasError = checks.some((c) => c.status === 'error')\n const result: DoctorResult = { code: hasError ? 1 : 0, checks }\n\n if (options.json) {\n console.log(JSON.stringify({ checks }, null, 2))\n } else {\n for (const check of checks) {\n const icon = check.status === 'ok' ? '✓' : check.status === 'error' ? '✗' : check.status === 'warn' ? '!' : '-'\n console.log(`${icon} ${check.name}: ${check.message}`)\n }\n if (hasError) {\n console.error('\\nOne or more checks failed.')\n }\n }\n\n return result\n}\n\nfunction checkNode(version: string): DoctorCheck {\n const major = parseNodeMajor(version)\n if (major === undefined) {\n return { name: 'node', status: 'warn', message: `Could not parse Node version: ${version}` }\n }\n if (major < MIN_NODE_MAJOR) {\n return { name: 'node', status: 'error', message: `Node ${version} is below the minimum required v${MIN_NODE_MAJOR}` }\n }\n return { name: 'node', status: 'ok', message: `Node ${version}` }\n}\n\nasync function checkPython(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = (await query())?.trim()\n if (!version) {\n return { name: 'python', status: 'error', message: 'Python 3 is not available' }\n }\n const parsed = parsePythonVersion(version)\n if (!parsed) {\n return { name: 'python', status: 'warn', message: `Could not parse Python version: ${version}` }\n }\n if (parsed.major < MIN_PYTHON_MAJOR || (parsed.major === MIN_PYTHON_MAJOR && parsed.minor < MIN_PYTHON_MINOR)) {\n return {\n name: 'python',\n status: 'error',\n message: `Python ${version} is below the minimum required ${MIN_PYTHON_MAJOR}.${MIN_PYTHON_MINOR}`\n }\n }\n const display = version.replace(/^Python\\s+/, '')\n return { name: 'python', status: 'ok', message: `Python ${display}` }\n}\n\nasync function checkPyyaml(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = await query()\n if (!version) {\n return { name: 'pyyaml', status: 'error', message: 'PyYAML is not installed for Python 3' }\n }\n return { name: 'pyyaml', status: 'ok', message: `PyYAML ${version}` }\n}\n\nasync function checkNpm(query: () => Promise<string | undefined>): Promise<DoctorCheck> {\n const version = await query()\n if (!version) {\n return { name: 'npm', status: 'warn', message: 'npm is not available' }\n }\n return { name: 'npm', status: 'ok', message: `npm ${version}` }\n}\n\nfunction checkGlobalMarker(paths: LincolnPaths): DoctorCheck {\n const marker = readVersionMarker(paths)\n if (!marker) {\n return { name: 'global-marker', status: 'warn', message: `No version marker at ${paths.versionMarker}` }\n }\n return { name: 'global-marker', status: 'ok', message: `Lincoln ${marker.version} installed` }\n}\n\nfunction checkPayloadHooks(paths: LincolnPaths): DoctorCheck {\n const hooksDir = path.join(paths.currentDir, '.claude', 'hooks')\n if (!fs.existsSync(hooksDir)) {\n return { name: 'payload-hooks', status: 'warn', message: `Payload hooks not found at ${hooksDir}` }\n }\n const required = ['on-session-start.sh']\n const missing = required.filter((f) => !fs.existsSync(path.join(hooksDir, f)))\n if (missing.length > 0) {\n return { name: 'payload-hooks', status: 'warn', message: `Missing hooks: ${missing.join(', ')}` }\n }\n return { name: 'payload-hooks', status: 'ok', message: `Payload hooks present at ${hooksDir}` }\n}\n\nfunction checkVenv(paths: LincolnPaths): DoctorCheck {\n if (!fs.existsSync(paths.venvDir)) {\n return { name: 'venv', status: 'warn', message: `Virtual environment not found at ${paths.venvDir}` }\n }\n const pythonExe = path.join(paths.venvDir, process.platform === 'win32' ? 'Scripts' : 'bin', 'python')\n if (!fs.existsSync(pythonExe)) {\n return { name: 'venv', status: 'warn', message: `Virtual environment exists but python executable is missing` }\n }\n return { name: 'venv', status: 'ok', message: `Virtual environment present at ${paths.venvDir}` }\n}\n\nfunction checkProjectMarker(projectRoot: string): DoctorCheck {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (!fs.existsSync(markerPath)) {\n return { name: 'project-marker', status: 'skip', message: `No .lincoln.yaml in ${projectRoot}` }\n }\n return { name: 'project-marker', status: 'ok', message: `Project marker found at ${markerPath}` }\n}\n\nfunction resolvePythonCommand(paths: LincolnPaths): string {\n const venvPython = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n if (fs.existsSync(venvPython)) {\n return venvPython\n }\n return 'python3'\n}\n\nfunction parseNodeMajor(version: string): number | undefined {\n const match = /^v?(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return Number(match[1])\n}\n\nfunction parsePythonVersion(version: string): { major: number; minor: number } | undefined {\n const match = /(\\d+)\\.(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return { major: Number(match[1]), minor: Number(match[2]) }\n}\n\nasync function queryCommandVersion(command: string, args: string[]): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(command, args, {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n\nasync function queryPyyamlVersion(pythonCommand: string): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(\n pythonCommand,\n ['-c', 'import yaml; print(yaml.__version__)'],\n { stdio: ['ignore', 'pipe', 'ignore'], shell: process.platform === 'win32' }\n )\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n","import path from 'node:path'\nimport os from 'node:os'\n\nexport interface LincolnPaths {\n homeDir: string\n lincolnHome: string\n versionsDir: string\n currentDir: string\n versionMarker: string\n venvDir: string\n claudeDir: string\n codexDir: string\n opencodeDir: string\n}\n\nexport function resolveLincolnPaths(overrideHomeDir?: string): LincolnPaths {\n const homeDir = overrideHomeDir ?? os.homedir()\n const lincolnHome = process.env.LINCOLN_HOME\n ? path.resolve(process.env.LINCOLN_HOME)\n : path.join(homeDir, '.lincoln')\n\n return {\n homeDir,\n lincolnHome,\n versionsDir: path.join(lincolnHome, 'versions'),\n currentDir: path.join(lincolnHome, 'current'),\n versionMarker: path.join(lincolnHome, 'marker.json'),\n venvDir: path.join(lincolnHome, 'venv'),\n claudeDir: path.join(homeDir, '.claude'),\n codexDir: path.join(homeDir, '.codex'),\n opencodeDir: path.join(homeDir, '.opencode')\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport type { LincolnPaths } from './paths.js'\n\nexport interface VersionMarker {\n version: string\n installedAt: string\n harnesses: string[]\n managedFiles: string[]\n}\n\nexport function readVersionMarker(paths: LincolnPaths): VersionMarker | undefined {\n try {\n const raw = fs.readFileSync(paths.versionMarker, 'utf8')\n const parsed = JSON.parse(raw) as VersionMarker\n if (\n typeof parsed.version === 'string' &&\n typeof parsed.installedAt === 'string' &&\n Array.isArray(parsed.harnesses)\n ) {\n return parsed\n }\n return undefined\n } catch {\n return undefined\n }\n}\n\nexport function writeVersionMarker(\n paths: LincolnPaths,\n marker: VersionMarker\n): void {\n fs.mkdirSync(path.dirname(paths.versionMarker), { recursive: true })\n fs.writeFileSync(paths.versionMarker, JSON.stringify(marker, null, 2) + '\\n')\n}\n\nexport function isUpToDate(paths: LincolnPaths, version: string): boolean {\n const marker = readVersionMarker(paths)\n return marker?.version === version\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\n/**\n * Finds the directory containing the running lincoln package's package.json.\n * Returns undefined when no package.json can be located.\n */\nexport function readLocalPackageRoot(): string | undefined {\n try {\n let dir = path.dirname(fileURLToPath(import.meta.url))\n const root = path.parse(dir).root\n while (dir !== root) {\n const pkgPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgPath)) {\n const parsed = JSON.parse(fs.readFileSync(pkgPath, 'utf8')) as { name?: string }\n if (parsed.name === '@sushanglewis/lincoln') {\n return dir\n }\n }\n dir = path.dirname(dir)\n }\n } catch {\n // ignore and return undefined\n }\n return undefined\n}\n\n/**\n * Reads the version of the running lincoln package from its own package.json.\n * Walks upward from the current module file until it finds the package.json.\n * Returns undefined when the package.json cannot be located or parsed.\n */\nexport function readLocalPackageVersion(): string | undefined {\n try {\n const root = readLocalPackageRoot()\n if (!root) return undefined\n const parsed = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8')) as {\n version?: string\n }\n return typeof parsed.version === 'string' ? parsed.version : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Resolves the bundled framework payload directory inside the running package.\n */\nexport function resolvePayloadRoot(): string | undefined {\n const root = readLocalPackageRoot()\n if (!root) return undefined\n const payload = path.join(root, 'framework')\n return fs.existsSync(payload) ? payload : undefined\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport yaml from 'js-yaml'\n\nexport interface ProjectMarker {\n enabled: boolean\n workflow_template?: string\n min_lincoln_version?: string\n}\n\nexport interface WriteMarkerOptions {\n force?: boolean\n dryRun?: boolean\n}\n\nexport function readProjectMarker(projectRoot: string): ProjectMarker | undefined {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (!fs.existsSync(markerPath)) {\n return undefined\n }\n try {\n const parsed = yaml.load(fs.readFileSync(markerPath, 'utf8')) as Record<string, unknown> | null | undefined\n if (!parsed || typeof parsed !== 'object') {\n return undefined\n }\n return {\n enabled: Boolean(parsed.enabled),\n workflow_template: typeof parsed.workflow_template === 'string' ? parsed.workflow_template : undefined,\n min_lincoln_version: typeof parsed.min_lincoln_version === 'string' ? parsed.min_lincoln_version : undefined\n }\n } catch {\n return undefined\n }\n}\n\nexport function writeProjectMarker(\n projectRoot: string,\n marker: ProjectMarker,\n opts: WriteMarkerOptions = {}\n): void {\n const markerPath = path.join(projectRoot, '.lincoln.yaml')\n if (fs.existsSync(markerPath) && !opts.force) {\n throw new Error(`.lincoln.yaml already exists at ${markerPath}; use --force to overwrite`)\n }\n const content = yaml.dump(marker, { sortKeys: false, lineWidth: -1 })\n if (!opts.dryRun) {\n fs.mkdirSync(projectRoot, { recursive: true })\n fs.writeFileSync(markerPath, content)\n }\n}\n","import { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { writeProjectMarker, readProjectMarker } from '../lib/marker.js'\n\nexport interface InitProjectOptions {\n force?: boolean\n dryRun?: boolean\n}\n\nexport function initProject(projectRoot: string, options: InitProjectOptions = {}): number {\n if (!options.force && readProjectMarker(projectRoot) !== undefined) {\n console.error(`Project already has a .lincoln.yaml. Use --force to overwrite.`)\n return 1\n }\n\n try {\n writeProjectMarker(\n projectRoot,\n {\n enabled: true,\n workflow_template: 'interview-to-knowledge',\n min_lincoln_version: readLocalPackageVersion() ?? '1.5.0'\n },\n { force: options.force, dryRun: options.dryRun }\n )\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to write .lincoln.yaml: ${message}`)\n return 1\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would create ${projectRoot}/.lincoln.yaml`)\n } else {\n console.log(`Created ${projectRoot}/.lincoln.yaml`)\n }\n return 0\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { writeVersionMarker } from '../lib/versionMarker.js'\nimport { readLocalPackageVersion, resolvePayloadRoot } from '../lib/packageInfo.js'\nimport type { HarnessSyncReport, SyncHarnessesOptions } from '../lib/syncHarness.js'\nimport { syncHarnesses } from '../lib/syncHarness.js'\nimport type { SkillSyncReport, SyncExternalSkillsOptions } from '../lib/syncSkills.js'\nimport { syncExternalSkills } from '../lib/syncSkills.js'\nimport { detectGlobalHarnesses, installedHarnessIds, isValidHarnessId, HARNESS_IDS } from '../lib/harnessDetect.js'\nimport type { HarnessId } from '../lib/harnessDetect.js'\nimport { buildHarnessOptions, resolveHarnessSelection } from '../lib/harnessSelect.js'\nimport { createPrompt } from '../lib/prompt.js'\nimport type { Prompt } from '../lib/prompt.js'\n\nexport interface InstallOptions {\n yes: boolean\n dryRun: boolean\n force: boolean\n harnesses: string[]\n noVenv: boolean\n noInteractive: boolean\n}\n\nexport interface InstallDeps {\n paths: LincolnPaths\n payloadRoot: string\n syncHarnesses: (opts: SyncHarnessesOptions) => Promise<HarnessSyncReport>\n syncExternalSkills?: (opts: SyncExternalSkillsOptions) => Promise<SkillSyncReport>\n createPrompt: () => Prompt\n resolvePythonForVenv: (\n envOverride?: string,\n candidates?: string[],\n queryVersion?: (cmd: string) => Promise<string | undefined>\n ) => Promise<string | undefined>\n isTTY: boolean\n}\n\nexport function createDefaultDeps(): InstallDeps {\n return {\n paths: resolveLincolnPaths(),\n payloadRoot: resolvePayloadRoot() || '',\n syncHarnesses,\n syncExternalSkills,\n createPrompt,\n resolvePythonForVenv,\n isTTY: Boolean(process.stdin.isTTY && process.stdout.isTTY)\n }\n}\n\nexport async function install(\n options: InstallOptions,\n deps: InstallDeps = createDefaultDeps()\n): Promise<number> {\n const version = readLocalPackageVersion()\n if (!version) {\n console.error('Could not determine Lincoln version')\n return 1\n }\n\n const payloadRoot = deps.payloadRoot\n if (!payloadRoot || !fs.existsSync(payloadRoot)) {\n console.error('Lincoln payload not found. Run \"npm install -g @sushanglewis/lincoln\" first.')\n return 1\n }\n\n if (!options.dryRun && !options.yes && (options.noInteractive || !deps.isTTY)) {\n console.error(\n 'This will install Lincoln globally. Run with --yes to proceed, or run interactively in a TTY.'\n )\n return 1\n }\n\n const harnesses = await resolveHarnesses(options, deps)\n if (harnesses.length === 0) {\n return 1\n }\n\n const pythonPath = await resolvePythonIfNeeded(options, deps, harnesses)\n if (pythonPath === null) {\n return 1\n }\n\n if (!options.dryRun) {\n const versionDir = path.join(deps.paths.versionsDir, version)\n fs.mkdirSync(versionDir, { recursive: true })\n fs.cpSync(payloadRoot, versionDir, { recursive: true, force: true })\n try {\n fs.rmSync(deps.paths.currentDir, { recursive: true, force: true })\n fs.symlinkSync(versionDir, deps.paths.currentDir)\n } catch {\n fs.rmSync(deps.paths.currentDir, { recursive: true, force: true })\n fs.cpSync(versionDir, deps.paths.currentDir, { recursive: true, force: true })\n }\n }\n\n const reports = await deps.syncHarnesses({\n harnesses,\n payloadRoot: deps.paths.currentDir,\n paths: deps.paths,\n projectDir: deps.paths.lincolnHome,\n version,\n dryRun: options.dryRun,\n pythonPath\n })\n\n if (!options.dryRun) {\n writeVersionMarker(deps.paths, {\n version,\n installedAt: new Date().toISOString(),\n harnesses,\n managedFiles: collectManagedFiles(reports)\n })\n }\n\n const skillReport = await syncSkillLibraries(options, deps, harnesses)\n\n printSummary(options, version, harnesses, reports, skillReport)\n return 0\n}\n\nasync function syncSkillLibraries(\n options: InstallOptions,\n deps: InstallDeps,\n harnesses: HarnessId[]\n): Promise<SkillSyncReport | undefined> {\n if (!harnesses.includes('claude-code') || !deps.syncExternalSkills) {\n return undefined\n }\n const payloadRoot = deps.paths.currentDir\n const manifestPath = path.join(payloadRoot, '.claude', 'skills', 'dependencies.yaml')\n if (!fs.existsSync(manifestPath)) {\n return undefined\n }\n try {\n return await deps.syncExternalSkills({\n payloadRoot,\n skillsDir: path.join(deps.paths.claudeDir, 'skills'),\n dryRun: options.dryRun\n })\n } catch (err) {\n console.warn(` warning: external skill sync failed: ${err instanceof Error ? err.message : String(err)}`)\n return undefined\n }\n}\n\nasync function resolvePythonIfNeeded(\n options: InstallOptions,\n deps: InstallDeps,\n harnesses: HarnessId[]\n): Promise<string | undefined | null> {\n const needsPython =\n !options.dryRun && !options.noVenv && harnesses.some((id) => id === 'codex' || id === 'opencode')\n if (!needsPython) {\n return undefined\n }\n\n const pythonCommand = await deps.resolvePythonForVenv()\n if (!pythonCommand) {\n console.error(\n 'Python 3.10+ is required for Codex/OpenCode sync but was not found. Set LINCOLN_PYTHON to a compatible Python executable, or run with --no-venv.'\n )\n return null\n }\n\n await setupVenv(deps.paths, deps.payloadRoot, pythonCommand)\n return venvPythonPath(deps.paths)\n}\n\nasync function resolveHarnesses(options: InstallOptions, deps: InstallDeps): Promise<HarnessId[]> {\n const detected = detectGlobalHarnesses(deps.paths.homeDir)\n\n if (options.harnesses.length > 0) {\n const invalid = options.harnesses.filter((id) => !isValidHarnessId(id))\n if (invalid.length > 0) {\n console.error(`Unknown harness id(s): ${invalid.join(', ')}`)\n console.error(`Valid ids: ${HARNESS_IDS.join(', ')}`)\n return []\n }\n return options.harnesses as HarnessId[]\n }\n\n const selected = installedHarnessIds(deps.paths.homeDir)\n if (selected.length > 0 && !options.dryRun && !options.yes && !options.noInteractive && deps.isTTY) {\n const prompt = deps.createPrompt()\n try {\n const answer = await prompt.multiSelect(\n 'Select agent harnesses to install Lincoln into:',\n buildHarnessOptions(detected)\n )\n const resolved = resolveHarnessSelection(detected, answer)\n if (resolved.length === 0) {\n console.error('No harnesses selected. Aborting.')\n return []\n }\n return resolved\n } catch (err) {\n console.error(`Interactive selection failed: ${err instanceof Error ? err.message : String(err)}`)\n return []\n } finally {\n prompt.close()\n }\n }\n\n if (selected.length === 0 && !options.dryRun) {\n console.error('No agent harness detected. Install Claude Code, Codex, or OpenCode first.')\n return []\n }\n\n return selected\n}\n\nfunction collectManagedFiles(reports: HarnessSyncReport): string[] {\n const files: string[] = []\n for (const report of Object.values(reports)) {\n files.push(...report.written, ...report.skipped, ...report.preserved)\n }\n return files\n}\n\nfunction printSummary(\n options: InstallOptions,\n version: string,\n harnesses: HarnessId[],\n reports: HarnessSyncReport,\n skillReport?: SkillSyncReport\n): void {\n const warnings = collectWarnings(reports)\n if (options.dryRun) {\n console.log(`Dry run: would install Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n } else {\n console.log(`Installed Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n }\n for (const [harnessId, report] of Object.entries(reports)) {\n const count = report.written.length + report.skipped.length + report.preserved.length\n console.log(` ${harnessId}: ${count} file(s)`)\n }\n if (skillReport) {\n for (const entry of skillReport.entries) {\n const detail = entry.detail ? ` (${entry.detail})` : ''\n console.log(` skill ${entry.name}: ${entry.status}${detail}`)\n }\n warnings.push(...skillReport.warnings)\n }\n for (const warning of warnings) {\n console.warn(` warning: ${warning}`)\n }\n}\n\nfunction collectWarnings(reports: HarnessSyncReport): string[] {\n const warnings: string[] = []\n for (const report of Object.values(reports)) {\n warnings.push(...report.warnings)\n }\n return warnings\n}\n\nfunction runCommand(command: string, args: string[]): Promise<number> {\n return new Promise((resolvePromise, rejectPromise) => {\n const child = spawn(command, args, { stdio: 'inherit' })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', (err) => rejectPromise(err))\n })\n}\n\nconst MIN_PYTHON_MAJOR = 3\nconst MIN_PYTHON_MINOR = 10\nconst DEFAULT_PYTHON_CANDIDATES = ['python3.12', 'python3.11', 'python3.10', 'python3']\n\nfunction parsePythonVersion(version: string): { major: number; minor: number } | undefined {\n const match = /(\\d+)\\.(\\d+)/.exec(version)\n if (!match) {\n return undefined\n }\n return { major: Number(match[1]), minor: Number(match[2]) }\n}\n\nasync function queryPythonVersion(command: string): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn(command, ['--version'], {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const text = stdout.trim()\n resolvePromise(code === 0 && text.length > 0 ? text : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n\nexport async function resolvePythonForVenv(\n envOverride: string | undefined = process.env.LINCOLN_PYTHON,\n candidates: string[] = DEFAULT_PYTHON_CANDIDATES,\n queryVersion: (cmd: string) => Promise<string | undefined> = queryPythonVersion\n): Promise<string | undefined> {\n const list = envOverride ? [envOverride] : candidates\n for (const cmd of list) {\n const version = await queryVersion(cmd)\n if (!version) {\n continue\n }\n const parsed = parsePythonVersion(version)\n if (\n parsed &&\n parsed.major >= MIN_PYTHON_MAJOR &&\n (parsed.major > MIN_PYTHON_MAJOR || parsed.minor >= MIN_PYTHON_MINOR)\n ) {\n return cmd\n }\n }\n return undefined\n}\n\nfunction venvPythonPath(paths: LincolnPaths): string {\n return path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n}\n\nasync function setupVenv(paths: LincolnPaths, payloadRoot: string, pythonCommand: string): Promise<void> {\n const pythonExe = venvPythonPath(paths)\n\n if (!fs.existsSync(pythonExe)) {\n console.log('Creating Lincoln virtual environment...')\n const venvCode = await runCommand(pythonCommand, ['-m', 'venv', paths.venvDir])\n if (venvCode !== 0) {\n throw new Error(`Failed to create virtual environment (exit code ${venvCode})`)\n }\n }\n\n const requirementsPath = path.join(payloadRoot, 'requirements.txt')\n if (fs.existsSync(requirementsPath)) {\n console.log('Installing Python dependencies...')\n const pipExe = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'pip.exe' : 'pip'\n )\n const pipCode = await runCommand(pipExe, ['install', '-r', requirementsPath])\n if (pipCode !== 0) {\n throw new Error(`Failed to install Python dependencies (exit code ${pipCode})`)\n }\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\nimport { mergeManagedBlock } from './claudeMdMerge.js'\n\nexport interface SyncOptions {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n}\n\nexport interface SyncReport {\n written: string[]\n skipped: string[]\n preserved: string[]\n warnings: string[]\n settingsTouched?: string[]\n}\n\nconst COPY_SUBDIRS = [\n 'agents',\n 'skills',\n 'workflows',\n 'stages',\n 'schemas',\n 'templates',\n 'harnesses'\n]\n\nfunction sha256(filePath: string): string {\n const data = fs.readFileSync(filePath)\n return crypto.createHash('sha256').update(data).digest('hex')\n}\n\nfunction sameContent(a: string, b: string): boolean {\n return sha256(a) === sha256(b)\n}\n\nfunction deepMergeSettings(existing: unknown, incoming: unknown): unknown {\n if (Array.isArray(existing) && Array.isArray(incoming)) {\n return incoming\n }\n if (\n typeof existing === 'object' &&\n existing !== null &&\n typeof incoming === 'object' &&\n incoming !== null\n ) {\n const result: Record<string, unknown> = { ...existing }\n for (const [key, value] of Object.entries(incoming)) {\n if (key in result) {\n result[key] = deepMergeSettings(result[key], value)\n } else {\n result[key] = value\n }\n }\n return result\n }\n return incoming\n}\n\nexport function syncClaudeCode(opts: SyncOptions): SyncReport {\n const report: SyncReport = {\n written: [],\n skipped: [],\n preserved: [],\n warnings: [],\n settingsTouched: []\n }\n\n const payloadClaude = path.join(opts.payloadRoot, '.claude')\n if (!fs.existsSync(payloadClaude)) {\n report.warnings.push(`payload .claude directory not found: ${payloadClaude}`)\n return report\n }\n\n if (!opts.dryRun) {\n fs.mkdirSync(opts.targetDir, { recursive: true })\n }\n\n for (const subdir of COPY_SUBDIRS) {\n const srcDir = path.join(payloadClaude, subdir)\n if (!fs.existsSync(srcDir)) {\n continue\n }\n\n const destDir = path.join(opts.targetDir, subdir)\n if (!opts.dryRun) {\n fs.mkdirSync(destDir, { recursive: true })\n }\n\n for (const entry of walkSync(srcDir)) {\n const relativePath = path.relative(srcDir, entry)\n const srcFile = entry\n const destFile = path.join(destDir, relativePath)\n\n if (fs.existsSync(destFile) && sameContent(srcFile, destFile)) {\n report.skipped.push(path.join('.claude', subdir, relativePath))\n continue\n }\n\n if (!opts.dryRun) {\n fs.mkdirSync(path.dirname(destFile), { recursive: true })\n fs.copyFileSync(srcFile, destFile)\n }\n report.written.push(path.join('.claude', subdir, relativePath))\n }\n }\n\n // settings.json merge\n const payloadSettings = path.join(payloadClaude, 'settings.json')\n const targetSettings = path.join(opts.targetDir, 'settings.json')\n if (fs.existsSync(payloadSettings)) {\n const incoming = JSON.parse(fs.readFileSync(payloadSettings, 'utf8'))\n let merged = incoming\n if (fs.existsSync(targetSettings)) {\n const existing = JSON.parse(fs.readFileSync(targetSettings, 'utf8'))\n merged = deepMergeSettings(existing, incoming)\n }\n\n const wouldChange =\n !fs.existsSync(targetSettings) ||\n JSON.stringify(merged) !== JSON.stringify(JSON.parse(fs.readFileSync(targetSettings, 'utf8')))\n\n if (wouldChange) {\n if (!opts.dryRun) {\n fs.writeFileSync(targetSettings, JSON.stringify(merged, null, 2) + '\\n')\n }\n report.written.push('.claude/settings.json')\n report.settingsTouched = ['.claude/settings.json']\n } else {\n report.skipped.push('.claude/settings.json')\n }\n }\n\n // CLAUDE.md merge\n const payloadClaudeMd = path.join(opts.payloadRoot, 'CLAUDE.md')\n const targetClaudeMd = path.join(path.dirname(opts.targetDir), 'CLAUDE.md')\n if (fs.existsSync(payloadClaudeMd)) {\n const incomingBlock = fs.readFileSync(payloadClaudeMd, 'utf8')\n const existing = fs.existsSync(targetClaudeMd)\n ? fs.readFileSync(targetClaudeMd, 'utf8')\n : undefined\n const merged = mergeManagedBlock(existing, incomingBlock)\n\n if (merged !== existing) {\n if (!opts.dryRun) {\n fs.writeFileSync(targetClaudeMd, merged)\n }\n report.written.push('CLAUDE.md')\n } else {\n report.skipped.push('CLAUDE.md')\n }\n }\n\n return report\n}\n\nfunction* walkSync(dir: string): Generator<string> {\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n if (entry.isDirectory()) {\n yield* walkSync(fullPath)\n } else {\n yield fullPath\n }\n }\n}\n","const BEGIN = '<!-- lincoln:begin -->'\nconst END = '<!-- lincoln:end -->'\n\nexport function mergeManagedBlock(\n existing: string | undefined,\n block: string\n): string {\n const wrapped = `${BEGIN}\\n${block}\\n${END}`\n const text = existing ?? ''\n\n const beginIndex = text.indexOf(BEGIN)\n const endIndex = text.indexOf(END)\n\n if (beginIndex !== -1 && endIndex !== -1 && endIndex > beginIndex) {\n return (\n text.slice(0, beginIndex) +\n wrapped +\n text.slice(endIndex + END.length)\n )\n }\n\n if (text.trim().length === 0) {\n return wrapped\n }\n\n return `${text.trimEnd()}\\n\\n${wrapped}\\n`\n}\n\nexport function extractManagedBlock(existing: string): string | undefined {\n const beginIndex = existing.indexOf(BEGIN)\n const endIndex = existing.indexOf(END)\n if (beginIndex === -1 || endIndex === -1 || endIndex <= beginIndex) {\n return undefined\n }\n return existing\n .slice(beginIndex + BEGIN.length, endIndex)\n .replace(/^\\n+|\\n+$/g, '')\n}\n","import { spawn, type ChildProcess, type SpawnOptions } from 'node:child_process'\nimport type { SyncReport } from './syncClaude.js'\n\nexport interface RunHarnessAdapterOptions {\n harnessId: 'codex' | 'opencode'\n payloadRoot: string\n projectDir: string\n homeDir: string\n pythonPath: string\n dryRun: boolean\n spawnCommand?: SpawnCommand\n}\n\ntype SpawnCommand = (command: string, args: string[], options?: SpawnOptions) => ChildProcess\n\nfunction runCommand(\n command: string,\n args: string[],\n spawnCommand: SpawnCommand\n): Promise<number | null> {\n return new Promise((resolvePromise, rejectPromise) => {\n const child = spawnCommand(command, args, { stdio: 'inherit' })\n child.on('close', (code) => {\n resolvePromise(code)\n })\n child.on('error', (err) => {\n rejectPromise(err)\n })\n })\n}\n\nexport async function runHarnessAdapter(opts: RunHarnessAdapterOptions): Promise<SyncReport> {\n const report: SyncReport = {\n written: [],\n skipped: [],\n preserved: [],\n warnings: []\n }\n\n if (opts.dryRun) {\n report.written.push(`${opts.harnessId} (dry run)`)\n return report\n }\n\n const args = [\n `${opts.payloadRoot}/scripts/lincoln_harness_adapter.py`,\n '--harness',\n opts.harnessId,\n '--root',\n opts.payloadRoot,\n '--project-dir',\n opts.projectDir,\n '--home-dir',\n opts.homeDir\n ]\n\n try {\n const spawnCommand = (opts.spawnCommand ?? spawn) as SpawnCommand\n const code = await runCommand(opts.pythonPath, args, spawnCommand)\n if (code === 0) {\n report.written.push(opts.harnessId)\n } else {\n report.warnings.push(\n `Adapter for ${opts.harnessId} exited with code ${code}. Run manually to diagnose.`\n )\n }\n } catch (err) {\n report.warnings.push(\n `Failed to run adapter for ${opts.harnessId}: ${err instanceof Error ? err.message : String(err)}`\n )\n }\n\n return report\n}\n","import type { SyncReport } from './syncClaude.js'\nimport { syncClaudeCode } from './syncClaude.js'\nimport type { HarnessId } from './harnessDetect.js'\nimport type { LincolnPaths } from './paths.js'\nimport { runHarnessAdapter } from './runHarnessAdapter.js'\n\nexport interface SyncHarnessesOptions {\n harnesses: HarnessId[]\n payloadRoot: string\n paths: LincolnPaths\n projectDir: string\n version: string\n dryRun: boolean\n pythonPath?: string\n syncClaude?: (opts: {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n }) => SyncReport\n}\n\nexport type HarnessSyncReport = Record<HarnessId, SyncReport>\n\nfunction emptyReport(): SyncReport {\n return {\n written: [],\n skipped: [],\n preserved: [],\n warnings: []\n }\n}\n\nexport async function syncHarnesses(opts: SyncHarnessesOptions): Promise<HarnessSyncReport> {\n const reports: HarnessSyncReport = {} as HarnessSyncReport\n const syncClaude = opts.syncClaude ?? syncClaudeCode\n\n for (const harnessId of opts.harnesses) {\n reports[harnessId] = await syncHarness(harnessId, opts, syncClaude)\n }\n\n return reports\n}\n\nasync function syncHarness(\n harnessId: HarnessId,\n opts: SyncHarnessesOptions,\n syncClaude: NonNullable<SyncHarnessesOptions['syncClaude']>\n): Promise<SyncReport> {\n if (harnessId === 'claude-code') {\n return syncClaude({\n payloadRoot: opts.payloadRoot,\n targetDir: opts.paths.claudeDir,\n version: opts.version,\n dryRun: opts.dryRun\n })\n }\n\n if (harnessId === 'codex' || harnessId === 'opencode') {\n if (opts.dryRun) {\n const report = emptyReport()\n report.written.push(`${harnessId} (dry run)`)\n return report\n }\n if (!opts.pythonPath) {\n const report = emptyReport()\n report.warnings.push(\n `Skipped ${harnessId} sync because Python is not available. Install Python 3.10+ or run without --no-venv.`\n )\n return report\n }\n return runHarnessAdapter({\n harnessId,\n payloadRoot: opts.payloadRoot,\n projectDir: opts.projectDir,\n homeDir: opts.paths.homeDir,\n pythonPath: opts.pythonPath,\n dryRun: opts.dryRun\n })\n }\n\n const report = emptyReport()\n report.warnings.push(`Unsupported harness: ${harnessId}`)\n return report\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { execFile } from 'node:child_process'\nimport yaml from 'js-yaml'\nimport { compareVersions } from './semver.js'\n\nexport type CommandRunner = (\n cmd: string,\n args: string[]\n) => Promise<{ code: number; stdout: string; stderr: string }>\n\nexport type SkillSyncStatus =\n | 'installed'\n | 'updated'\n | 'current'\n | 'failed'\n | 'skipped-optional'\n | 'skipped-dirty'\n | 'dry-run'\n\nexport interface SkillSyncEntry {\n name: string\n status: SkillSyncStatus\n detail?: string\n}\n\nexport interface SkillSyncReport {\n entries: SkillSyncEntry[]\n warnings: string[]\n}\n\nexport interface SyncExternalSkillsOptions {\n payloadRoot: string\n skillsDir: string\n dryRun: boolean\n runCommand?: CommandRunner\n platform?: string\n}\n\ninterface ManifestEntry {\n source?: string\n ref?: string\n type?: string\n required?: boolean\n default_install?: boolean\n binary?: string\n platforms?: Record<string, string>\n}\n\ninterface SkillManifest {\n skills?: Record<string, ManifestEntry>\n}\n\nconst GIT_SOURCE = /^(https?:\\/\\/|git@)/\nconst FULL_SHA = /^[0-9a-f]{40}$/i\nconst PINNED_SEMVER = /^v?(\\d+\\.\\d+\\.\\d+)$/\nconst NPM_GLOBAL_INSTALL = /^npm install -g (\\S+)$/\nconst MAX_BUFFER = 16 * 1024 * 1024\n\nconst defaultRunner: CommandRunner = (cmd, args) =>\n new Promise((resolvePromise, rejectPromise) => {\n execFile(cmd, args, { maxBuffer: MAX_BUFFER }, (err, stdout, stderr) => {\n if (err && !('code' in err && typeof err.code === 'number')) {\n rejectPromise(err)\n return\n }\n const code = err && typeof err.code === 'number' ? err.code : 0\n resolvePromise({ code, stdout: String(stdout), stderr: String(stderr) })\n })\n })\n\nexport async function syncExternalSkills(options: SyncExternalSkillsOptions): Promise<SkillSyncReport> {\n const report: SkillSyncReport = { entries: [], warnings: [] }\n const manifestPath = path.join(options.payloadRoot, '.claude', 'skills', 'dependencies.yaml')\n if (!fs.existsSync(manifestPath)) {\n report.warnings.push(`skill dependency manifest not found at ${manifestPath}; skipping external skill sync`)\n return report\n }\n\n let manifest: SkillManifest\n try {\n manifest = (yaml.load(fs.readFileSync(manifestPath, 'utf8')) as SkillManifest) ?? {}\n } catch (err) {\n report.warnings.push(\n `failed to parse ${manifestPath}: ${err instanceof Error ? err.message : String(err)}`\n )\n return report\n }\n\n const runCommand = options.runCommand ?? defaultRunner\n const platform =\n options.platform ?? (process.platform === 'darwin' ? 'macos' : process.platform === 'linux' ? 'linux' : process.platform)\n for (const [name, cfg] of Object.entries(manifest.skills ?? {})) {\n if (!cfg.source || cfg.source === 'inline' || !GIT_SOURCE.test(cfg.source)) {\n continue\n }\n const enabled = cfg.default_install ?? cfg.required ?? true\n if (!enabled) {\n report.entries.push({ name, status: 'skipped-optional', detail: 'default_install is false' })\n continue\n }\n if (cfg.type === 'cli') {\n await syncCli(name, cfg, options, platform, runCommand, report)\n } else {\n await syncGitSkill(name, cfg, options, runCommand, report)\n }\n }\n return report\n}\n\nasync function syncGitSkill(\n name: string,\n cfg: ManifestEntry,\n options: SyncExternalSkillsOptions,\n runCommand: CommandRunner,\n report: SkillSyncReport\n): Promise<void> {\n const source = cfg.source as string\n const ref = cfg.ref ?? ''\n const target = path.join(options.skillsDir, name)\n\n if (options.dryRun) {\n const planned = fs.existsSync(target) ? 'verify pinned ref and update if behind' : `clone and pin to ${ref}`\n report.entries.push({ name, status: 'dry-run', detail: `would ${planned}` })\n return\n }\n\n if (!fs.existsSync(target)) {\n const clone = await runCommand('git', ['clone', source, target])\n if (clone.code !== 0) {\n fail(report, name, `git clone failed: ${clone.stderr.trim() || `exit code ${clone.code}`}`)\n return\n }\n const checkout = await runCommand('git', ['-C', target, 'checkout', ref])\n if (checkout.code !== 0) {\n fail(report, name, `git checkout ${ref} failed: ${checkout.stderr.trim() || `exit code ${checkout.code}`}`)\n return\n }\n report.entries.push({ name, status: 'installed', detail: ref })\n return\n }\n\n const status = await runCommand('git', ['-C', target, 'status', '--porcelain'])\n if (status.code !== 0) {\n fail(report, name, `git status failed (not a git repository?): ${status.stderr.trim() || `exit code ${status.code}`}`)\n return\n }\n if (status.stdout.trim() !== '') {\n const detail = 'working tree is dirty; skipping update (commit or stash local changes first)'\n report.entries.push({ name, status: 'skipped-dirty', detail })\n report.warnings.push(`${name}: ${detail}`)\n return\n }\n\n const head = await runCommand('git', ['-C', target, 'rev-parse', 'HEAD'])\n if (head.code !== 0) {\n fail(report, name, `git rev-parse failed: ${head.stderr.trim() || `exit code ${head.code}`}`)\n return\n }\n if (head.stdout.trim() === ref) {\n report.entries.push({ name, status: 'current', detail: ref })\n return\n }\n\n const advertised = await isPinAdvertised(source, ref, runCommand)\n if (advertised) {\n const fetch = await runCommand('git', ['-C', target, 'fetch', 'origin', ref])\n if (fetch.code === 0 && (await checkoutFetchHead(name, target, runCommand, report))) {\n return\n }\n if (fetch.code !== 0) {\n fail(report, name, `git fetch origin ${ref} failed: ${fetch.stderr.trim() || `exit code ${fetch.code}`}`)\n return\n }\n return\n }\n\n const fetch = await runCommand('git', ['-C', target, 'fetch', 'origin', ref])\n if (fetch.code === 0) {\n await checkoutFetchHead(name, target, runCommand, report)\n return\n }\n if (FULL_SHA.test(ref)) {\n const fetchAll = await runCommand('git', ['-C', target, 'fetch', 'origin'])\n if (fetchAll.code !== 0) {\n fail(report, name, `git fetch origin failed: ${fetchAll.stderr.trim() || `exit code ${fetchAll.code}`}`)\n return\n }\n const checkout = await runCommand('git', ['-C', target, 'checkout', ref])\n if (checkout.code !== 0) {\n fail(report, name, `git checkout ${ref} failed: ${checkout.stderr.trim() || `exit code ${checkout.code}`}`)\n return\n }\n report.entries.push({ name, status: 'updated', detail: ref })\n return\n }\n fail(report, name, `git fetch origin ${ref} failed: ${fetch.stderr.trim() || `exit code ${fetch.code}`}`)\n}\n\nasync function isPinAdvertised(\n source: string,\n ref: string,\n runCommand: CommandRunner\n): Promise<boolean> {\n const remote = await runCommand('git', ['ls-remote', source])\n if (remote.code !== 0) {\n return false\n }\n return remote.stdout\n .split('\\n')\n .some((line) => line.split('\\t')[0]?.trim() === ref)\n}\n\nasync function checkoutFetchHead(\n name: string,\n target: string,\n runCommand: CommandRunner,\n report: SkillSyncReport\n): Promise<boolean> {\n const checkout = await runCommand('git', ['-C', target, 'checkout', 'FETCH_HEAD'])\n if (checkout.code !== 0) {\n fail(report, name, `git checkout FETCH_HEAD failed: ${checkout.stderr.trim() || `exit code ${checkout.code}`}`)\n return false\n }\n report.entries.push({ name, status: 'updated', detail: 'checked out FETCH_HEAD' })\n return true\n}\n\nasync function syncCli(\n name: string,\n cfg: ManifestEntry,\n options: SyncExternalSkillsOptions,\n platform: string,\n runCommand: CommandRunner,\n report: SkillSyncReport\n): Promise<void> {\n const binary = cfg.binary ?? name\n const installCommand = cfg.platforms?.[platform] ?? cfg.platforms?.linux\n const npmPackage = installCommand ? parseNpmGlobalInstall(installCommand) : undefined\n const pinned = cfg.ref ? pinnedSemver(cfg.ref) : undefined\n\n if (options.dryRun) {\n const managed = npmPackage && pinned ? `install ${npmPackage}@${pinned} if missing or older` : 'verify presence'\n report.entries.push({ name, status: 'dry-run', detail: `would ${managed}` })\n return\n }\n\n const whichCmd = process.platform === 'win32' ? 'where' : 'which'\n const found = await runCommand(whichCmd, [binary])\n if (found.code !== 0) {\n if (npmPackage && pinned) {\n await npmInstall(name, npmPackage, pinned, runCommand, report, 'installed')\n return\n }\n fail(report, name, `CLI '${binary}' not found. Install manually (${platform}): ${installCommand ?? 'see dependency manifest'}`)\n return\n }\n\n if (!npmPackage || !pinned) {\n report.entries.push({ name, status: 'current', detail: `${binary} present` })\n return\n }\n\n const version = await runCommand(binary, ['--version'])\n const installed = version.code === 0 ? version.stdout.split('\\n')[0]?.trim() ?? '' : ''\n const comparison = installed ? compareVersions(installed, pinned) : undefined\n if (comparison === undefined) {\n report.entries.push({\n name,\n status: 'current',\n detail: `could not parse installed version '${installed}'; leaving ${binary} as-is`\n })\n return\n }\n if (comparison >= 0) {\n report.entries.push({ name, status: 'current', detail: `${binary} ${installed}` })\n return\n }\n await npmInstall(name, npmPackage, pinned, runCommand, report, 'updated')\n}\n\nasync function npmInstall(\n name: string,\n npmPackage: string,\n version: string,\n runCommand: CommandRunner,\n report: SkillSyncReport,\n status: 'installed' | 'updated'\n): Promise<void> {\n const result = await runCommand('npm', ['install', '-g', `${npmPackage}@${version}`])\n if (result.code !== 0) {\n fail(report, name, `npm install -g ${npmPackage}@${version} failed: ${result.stderr.trim() || `exit code ${result.code}`}`)\n return\n }\n report.entries.push({ name, status, detail: `${npmPackage}@${version}` })\n}\n\nfunction parseNpmGlobalInstall(command: string): string | undefined {\n const match = NPM_GLOBAL_INSTALL.exec(command.trim())\n return match?.[1]\n}\n\nfunction pinnedSemver(ref: string): string | undefined {\n const match = PINNED_SEMVER.exec(ref.trim())\n return match?.[0].replace(/^v/, '')\n}\n\nfunction fail(report: SkillSyncReport, name: string, detail: string): void {\n report.entries.push({ name, status: 'failed', detail })\n report.warnings.push(`${name}: ${detail}`)\n}\n","const SEMVER_CORE = /^v?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/\nconst NUMERIC_IDENTIFIER = /^\\d+$/\n\ninterface ParsedVersion {\n major: number\n minor: number\n patch: number\n prerelease: string[]\n}\n\n/**\n * Compares two semver strings per semver.org precedence rules (build metadata\n * ignored). Returns a negative number when a < b, 0 when equal, a positive\n * number when a > b, or undefined when either input is not a parseable semver.\n */\nexport function compareVersions(a: string, b: string): number | undefined {\n const pa = parseVersion(a)\n const pb = parseVersion(b)\n if (!pa || !pb) {\n return undefined\n }\n if (pa.major !== pb.major) return pa.major - pb.major\n if (pa.minor !== pb.minor) return pa.minor - pb.minor\n if (pa.patch !== pb.patch) return pa.patch - pb.patch\n return comparePrerelease(pa.prerelease, pb.prerelease)\n}\n\nfunction parseVersion(version: string): ParsedVersion | undefined {\n const match = SEMVER_CORE.exec(version.trim())\n if (!match) {\n return undefined\n }\n return {\n major: Number(match[1]),\n minor: Number(match[2]),\n patch: Number(match[3]),\n prerelease: match[4] ? match[4].split('.') : []\n }\n}\n\nfunction comparePrerelease(a: string[], b: string[]): number {\n if (a.length === 0 && b.length === 0) return 0\n // A version without a prerelease has higher precedence than one with it.\n if (a.length === 0) return 1\n if (b.length === 0) return -1\n const shared = Math.min(a.length, b.length)\n for (let i = 0; i < shared; i++) {\n const x = a[i]\n const y = b[i]\n if (x === y) continue\n const xNumeric = NUMERIC_IDENTIFIER.test(x)\n const yNumeric = NUMERIC_IDENTIFIER.test(y)\n if (xNumeric && yNumeric) return Number(x) - Number(y)\n // Numeric identifiers have lower precedence than alphanumeric ones.\n if (xNumeric) return -1\n if (yNumeric) return 1\n return x < y ? -1 : 1\n }\n return a.length - b.length\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport type HarnessId = 'claude-code' | 'codex' | 'opencode'\n\nexport interface GlobalHarnessInfo {\n id: HarnessId\n installed: boolean\n configDir: string\n pluginManaged: boolean\n}\n\ninterface HarnessSpec {\n id: HarnessId\n configDirName: string\n pluginMarker?: string\n}\n\nconst HARNESS_SPECS: HarnessSpec[] = [\n {\n id: 'claude-code',\n configDirName: '.claude',\n pluginMarker: 'plugins/lincoln'\n },\n { id: 'codex', configDirName: '.codex' },\n { id: 'opencode', configDirName: '.opencode' }\n]\n\nexport function detectGlobalHarnesses(\n overrideHomeDir?: string\n): GlobalHarnessInfo[] {\n const homeDir = overrideHomeDir ?? os.homedir()\n\n return HARNESS_SPECS.map((spec) => {\n const configDir = path.join(homeDir, spec.configDirName)\n const installed = fs.existsSync(configDir)\n const pluginManaged = spec.pluginMarker\n ? fs.existsSync(path.join(configDir, spec.pluginMarker))\n : false\n\n return {\n id: spec.id,\n installed,\n configDir,\n pluginManaged\n }\n })\n}\n\nexport function installedHarnessIds(homeDir?: string): HarnessId[] {\n return detectGlobalHarnesses(homeDir)\n .filter((h) => h.installed)\n .map((h) => h.id)\n}\n\nexport const HARNESS_IDS: HarnessId[] = HARNESS_SPECS.map((spec) => spec.id)\n\nexport function isValidHarnessId(value: string): value is HarnessId {\n return HARNESS_SPECS.some((spec) => spec.id === value)\n}\n","import type { GlobalHarnessInfo, HarnessId } from './harnessDetect.js'\nimport type { MultiSelectOption } from './prompt.js'\n\nexport const HARNESS_LABELS: Record<HarnessId, string> = {\n 'claude-code': 'Claude Code',\n codex: 'Codex',\n opencode: 'OpenCode'\n}\n\nexport function buildHarnessOptions(\n detected: ReadonlyArray<GlobalHarnessInfo>\n): MultiSelectOption[] {\n return detected.map((harness) => ({\n id: harness.id,\n label: HARNESS_LABELS[harness.id],\n checked: harness.installed\n }))\n}\n\nexport function resolveHarnessSelection(\n detected: ReadonlyArray<GlobalHarnessInfo>,\n selection: string[] | undefined\n): HarnessId[] {\n if (selection === undefined) {\n return detected.filter((harness) => harness.installed).map((harness) => harness.id)\n }\n const validIds = new Set<HarnessId>()\n for (const id of selection) {\n const match = detected.find((harness) => harness.id === id)\n if (match) {\n validIds.add(match.id)\n }\n }\n return Array.from(validIds)\n}\n","import type { Readable, Writable } from 'node:stream'\n\nexport interface PromptOptions {\n input?: Readable\n output?: Writable\n}\n\nexport interface MultiSelectOption {\n id: string\n label: string\n checked: boolean\n}\n\nexport interface Prompt {\n confirm(question: string, defaultValue?: boolean): Promise<boolean>\n multiSelect(question: string, options: ReadonlyArray<MultiSelectOption>): Promise<string[]>\n close(): void\n}\n\ninterface LineReader {\n readLine(prompt: string): Promise<string>\n close(): void\n}\n\nfunction createLineReader(input: Readable, output: Writable): LineReader {\n const buffer: string[] = []\n const queue: Array<{ resolve: (line: string) => void; reject: (err: Error) => void }> = []\n let remainder = ''\n let ended = false\n\n function flushQueue(): void {\n while (queue.length > 0 && buffer.length > 0) {\n const next = queue.shift()\n const line = buffer.shift()\n if (next && line !== undefined) {\n next.resolve(line)\n }\n }\n }\n\n input.on('data', (chunk: Buffer | string) => {\n const text = remainder + chunk.toString('utf-8')\n const lines = text.split('\\n')\n remainder = lines.pop() ?? ''\n for (const line of lines) {\n buffer.push(line.replace(/\\r$/, ''))\n }\n flushQueue()\n })\n\n input.on('end', () => {\n ended = true\n if (remainder.length > 0) {\n buffer.push(remainder.replace(/\\r$/, ''))\n remainder = ''\n }\n flushQueue()\n while (queue.length > 0) {\n const next = queue.shift()\n next?.resolve('')\n }\n })\n\n input.on('error', (err) => {\n while (queue.length > 0) {\n queue.shift()?.reject(err)\n }\n })\n\n return {\n readLine(prompt: string): Promise<string> {\n output.write(prompt)\n if (buffer.length > 0) {\n return Promise.resolve(buffer.shift() ?? '')\n }\n if (ended) {\n return Promise.resolve('')\n }\n return new Promise<string>((resolve, reject) => {\n queue.push({ resolve, reject })\n })\n },\n close(): void {\n // nothing to close for raw streams\n }\n }\n}\n\nfunction normalizeAnswer(text: string): string {\n return text.trim().toLowerCase()\n}\n\nexport function createPrompt(streams: PromptOptions = {}): Prompt {\n const input = streams.input ?? process.stdin\n const output = streams.output ?? process.stdout\n const reader = createLineReader(input, output)\n\n async function ask(question: string): Promise<string> {\n return reader.readLine(question)\n }\n\n return {\n async confirm(question: string, defaultValue = true): Promise<boolean> {\n const hint = defaultValue ? '[Y/n]' : '[y/N]'\n const first = await ask(`${question} ${hint} `)\n const normalized = normalizeAnswer(first)\n if (normalized === 'y' || normalized === 'yes') {\n return true\n }\n if (normalized === 'n' || normalized === 'no') {\n return false\n }\n if (normalized === '') {\n return defaultValue\n }\n const second = await ask('Please answer y or n: ')\n const secondNormalized = normalizeAnswer(second)\n if (secondNormalized === 'y' || secondNormalized === 'yes') {\n return true\n }\n if (secondNormalized === 'n' || secondNormalized === 'no') {\n return false\n }\n return defaultValue\n },\n\n async multiSelect(\n question: string,\n options: ReadonlyArray<MultiSelectOption>\n ): Promise<string[]> {\n const lines = options.map((opt, index) => {\n const mark = opt.checked ? 'x' : ' '\n return ` [${mark}] ${index + 1}. ${opt.label}`\n })\n const promptText = `${question}\\n${lines.join('\\n')}\\nEnter numbers (e.g. 1,3), 'all', 'none', or harness names: `\n\n async function parse(answer: string): Promise<string[] | undefined> {\n const normalized = normalizeAnswer(answer)\n if (normalized === 'all') {\n return options.map((opt) => opt.id)\n }\n if (normalized === 'none') {\n return []\n }\n if (normalized === '') {\n return options.filter((opt) => opt.checked).map((opt) => opt.id)\n }\n const parts = normalized.split(/[,\\s]+/).filter((part) => part.length > 0)\n const selected = new Set<string>()\n for (const part of parts) {\n const index = Number(part)\n if (!Number.isNaN(index) && index >= 1 && index <= options.length) {\n selected.add(options[index - 1].id)\n continue\n }\n const match = options.find((opt) => opt.id === part)\n if (match) {\n selected.add(match.id)\n continue\n }\n return undefined\n }\n return Array.from(selected)\n }\n\n let result = await parse(await ask(promptText))\n if (result !== undefined) {\n return result\n }\n const retry = await ask('Invalid selection. Please try again: ')\n result = await parse(retry)\n return result ?? []\n },\n\n close(): void {\n reader.close()\n }\n }\n}\n","import { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { readVersionMarker } from '../lib/versionMarker.js'\nimport { createRegistryClient } from '../lib/npmRegistry.js'\nimport { compareVersions } from '../lib/semver.js'\nimport { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { install } from './install.js'\nimport type { InstallOptions } from './install.js'\n\nconst PACKAGE_NAME = '@sushanglewis/lincoln'\n\nexport interface UpdateOptions {\n check: boolean\n dryRun: boolean\n yes: boolean\n}\n\nexport interface UpdateDeps {\n paths: LincolnPaths\n latestVersion: () => Promise<string>\n currentVersion: () => string | undefined\n npmInstallGlobal: (version: string) => Promise<number>\n runInstall: (options: InstallOptions) => Promise<number>\n}\n\nexport function createDefaultDeps(): UpdateDeps {\n const paths = resolveLincolnPaths()\n const registry = createRegistryClient()\n return {\n paths,\n latestVersion: () => registry.latestVersion(PACKAGE_NAME),\n currentVersion: () => readVersionMarker(paths)?.version ?? readLocalPackageVersion(),\n npmInstallGlobal: (version) => runNpmInstallGlobal(PACKAGE_NAME, version),\n runInstall: (options) => install(options)\n }\n}\n\nexport async function update(\n options: UpdateOptions,\n deps: Partial<UpdateDeps> = {}\n): Promise<number> {\n const resolved: UpdateDeps = { ...createDefaultDeps(), ...deps }\n\n let latest: string\n try {\n latest = await resolved.latestVersion()\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to query npm registry: ${message}`)\n return 1\n }\n\n const current = resolved.currentVersion()\n\n if (current !== undefined) {\n const comparison = compareVersions(current, latest)\n if (comparison !== undefined ? comparison > 0 : false) {\n console.log(\n `Lincoln ${current} is ahead of the latest release (${latest}); nothing to do.`\n )\n return 0\n }\n if (comparison !== undefined ? comparison === 0 : current === latest) {\n console.log(`Lincoln ${current} is already up to date.`)\n return 0\n }\n }\n\n const summary = `${current ?? 'unknown'} -> ${latest}`\n\n if (options.check) {\n console.log(`Lincoln update available: ${summary}`)\n return 0\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would update Lincoln ${summary}`)\n return 0\n }\n\n if (!options.yes) {\n console.error(`Will update Lincoln ${summary}. Run with --yes to proceed.`)\n return 1\n }\n\n const installCode = await resolved.npmInstallGlobal(latest)\n if (installCode !== 0) {\n console.error(`npm install -g ${PACKAGE_NAME}@${latest} failed with exit code ${installCode}`)\n return 1\n }\n\n // NOTE: this runs the *current* process's install(), not the just-installed\n // new version's. Re-executing the freshly installed `lincoln` binary would\n // rely on PATH/npx resolution picking up the new shim, which is fragile\n // mid-upgrade. The tradeoff is that sync logic changes shipped in the new\n // version only take effect on the next command run.\n const syncCode = await resolved.runInstall(defaultInstallOptions())\n if (syncCode !== 0) {\n console.error(`lincoln install failed with exit code ${syncCode}`)\n return 1\n }\n\n console.log(`Updated Lincoln to ${latest}`)\n return 0\n}\n\nfunction defaultInstallOptions(): InstallOptions {\n return { yes: true, dryRun: false, force: false, harnesses: [], noVenv: true, noInteractive: true }\n}\n\nfunction runNpmInstallGlobal(packageName: string, version: string): Promise<number> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['install', '-g', `${packageName}@${version}`], {\n stdio: 'inherit',\n shell: process.platform === 'win32',\n env: { ...process.env, LINCOLN_SKIP_POSTINSTALL: '1' }\n })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', () => resolvePromise(1))\n })\n}\n","const DEFAULT_REGISTRY_URL = 'https://registry.npmjs.org'\nconst FETCH_TIMEOUT_MS = 15_000\n\nexport interface NpmDistTags {\n latest?: string\n [tag: string]: string | undefined\n}\n\nexport interface NpmVersionMetadata {\n version?: string\n dist?: {\n tarball?: string\n }\n}\n\nexport interface NpmPackument {\n name?: string\n 'dist-tags'?: NpmDistTags\n versions?: Record<string, NpmVersionMetadata>\n}\n\nexport interface RegistryClient {\n latestVersion(packageName: string): Promise<string>\n versions(packageName: string): Promise<string[]>\n resolveVersion(packageName: string, spec: string): Promise<string>\n}\n\nexport function createRegistryClient(\n registryUrl: string = DEFAULT_REGISTRY_URL,\n fetchImpl: typeof fetch = fetch\n): RegistryClient {\n const baseUrl = registryUrl.replace(/\\/+$/, '')\n\n async function fetchPackument(packageName: string): Promise<NpmPackument> {\n const url = `${baseUrl}/${encodePackageName(packageName)}`\n const response = await fetchImpl(url, {\n headers: { Accept: 'application/json' },\n signal: AbortSignal.timeout(FETCH_TIMEOUT_MS)\n })\n if (!response.ok) {\n throw new Error(\n `npm registry returned ${response.status} ${response.statusText} for ${packageName}`\n )\n }\n return (await response.json()) as NpmPackument\n }\n\n return {\n async latestVersion(packageName: string): Promise<string> {\n const packument = await fetchPackument(packageName)\n const latest = packument['dist-tags']?.latest\n if (!latest) {\n throw new Error(`npm registry has no latest dist-tag for ${packageName}`)\n }\n return latest\n },\n\n async versions(packageName: string): Promise<string[]> {\n const packument = await fetchPackument(packageName)\n return Object.keys(packument.versions ?? {})\n },\n\n async resolveVersion(packageName: string, spec: string): Promise<string> {\n const packument = await fetchPackument(packageName)\n const tagTarget = packument['dist-tags']?.[spec]\n if (tagTarget) {\n return tagTarget\n }\n if (packument.versions && spec in packument.versions) {\n return spec\n }\n throw new Error(`Version not found for ${packageName}: ${spec}`)\n }\n }\n}\n\nfunction encodePackageName(packageName: string): string {\n if (packageName.startsWith('@')) {\n const slash = packageName.indexOf('/')\n if (slash === -1) {\n return encodeURIComponent(packageName)\n }\n const scope = packageName.slice(1, slash)\n const name = packageName.slice(slash + 1)\n return `@${encodeURIComponent(scope)}%2F${encodeURIComponent(name)}`\n }\n return encodeURIComponent(packageName)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { spawn } from 'node:child_process'\nimport type { LincolnPaths } from '../lib/paths.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport { createRegistryClient } from '../lib/npmRegistry.js'\nimport { install } from './install.js'\nimport type { InstallOptions } from './install.js'\n\nconst PACKAGE_NAME = '@sushanglewis/lincoln'\nconst SEMVER_REGEX = /^v?\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst STRICT_SEMVER_REGEX = /^\\d+\\.\\d+\\.\\d+(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?$/\nconst DIST_TAG_REGEX = /^[a-zA-Z][a-zA-Z0-9._-]*$/\n\nexport interface UseOptions {\n dryRun: boolean\n yes: boolean\n}\n\nexport interface UseDeps {\n paths: LincolnPaths\n resolveVersion: (spec: string) => Promise<string>\n ensureVersionAvailable: (version: string) => Promise<void>\n npmGlobalRoot: () => Promise<string | undefined>\n runInstall: (options: InstallOptions) => Promise<number>\n}\n\nexport function createDefaultDeps(): UseDeps {\n const paths = resolveLincolnPaths()\n const registry = createRegistryClient()\n return {\n paths,\n resolveVersion: async (spec) => {\n // Exact (optionally v-prefixed) versions resolve locally without a\n // registry round-trip, so switching between installed versions works\n // offline. Dist-tags (latest, next, ...) need the registry.\n const normalized = spec.startsWith('v') ? spec.slice(1) : spec\n if (STRICT_SEMVER_REGEX.test(normalized)) {\n return normalized\n }\n return registry.resolveVersion(PACKAGE_NAME, spec)\n },\n ensureVersionAvailable: async (version) => {\n const code = await runNpmInstallGlobal(PACKAGE_NAME, version)\n if (code !== 0) {\n throw new Error(`npm install -g ${PACKAGE_NAME}@${version} exited with ${code}`)\n }\n },\n npmGlobalRoot: () => runNpmRootGlobal(),\n runInstall: (options) => install(options)\n }\n}\n\nexport async function use(\n spec: string,\n options: UseOptions,\n deps: Partial<UseDeps> = {}\n): Promise<number> {\n if (!isValidVersion(spec)) {\n console.error(`Invalid version: ${spec}`)\n return 1\n }\n\n const resolved: UseDeps = { ...createDefaultDeps(), ...deps }\n\n let version: string\n try {\n version = await resolved.resolveVersion(spec)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to resolve version ${spec}: ${message}`)\n return 1\n }\n\n const versionDir = path.join(resolved.paths.versionsDir, version)\n const alreadyInstalled = fs.existsSync(versionDir)\n\n if (options.dryRun) {\n if (alreadyInstalled) {\n console.log(`Dry run: would switch ${resolved.paths.currentDir} to ${versionDir}`)\n } else {\n console.log(\n `Dry run: would install ${PACKAGE_NAME}@${version} globally, then switch ${resolved.paths.currentDir} to ${versionDir}`\n )\n }\n return 0\n }\n\n if (!options.yes) {\n console.error(`Will switch Lincoln to ${version}. Run with --yes to proceed.`)\n return 1\n }\n\n if (!alreadyInstalled) {\n try {\n await resolved.ensureVersionAvailable(version)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to install ${PACKAGE_NAME}@${version}: ${message}`)\n return 1\n }\n\n if (!fs.existsSync(versionDir)) {\n // `npm install -g` places the package in the npm global root; it does\n // not populate ~/.lincoln/versions. Copy the payload over so the\n // version switch below has a real directory to point at.\n try {\n await copyVersionFromNpmGlobal(resolved, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to populate ${versionDir}: ${message}`)\n return 1\n }\n }\n\n if (!fs.existsSync(versionDir)) {\n console.error(\n `Provisioning ${PACKAGE_NAME}@${version} did not produce ${versionDir}; cannot switch versions.`\n )\n return 1\n }\n }\n\n try {\n switchCurrentLink(resolved.paths, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to switch ${resolved.paths.currentDir}: ${message}`)\n return 1\n }\n\n const syncCode = await resolved.runInstall(defaultInstallOptions())\n if (syncCode !== 0) {\n console.error(`lincoln install failed with exit code ${syncCode}`)\n return 1\n }\n\n // The trailing install re-points ~/.lincoln/current at the *running* CLI's\n // own version dir (Task 9 behavior, pending the install payload fix).\n // Re-assert the requested version so the switch actually sticks.\n try {\n switchCurrentLink(resolved.paths, versionDir)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to switch ${resolved.paths.currentDir}: ${message}`)\n return 1\n }\n\n console.log(`Switched Lincoln to ${version}`)\n return 0\n}\n\nfunction isValidVersion(version: string): boolean {\n return SEMVER_REGEX.test(version) || DIST_TAG_REGEX.test(version)\n}\n\nasync function copyVersionFromNpmGlobal(deps: UseDeps, versionDir: string): Promise<void> {\n const globalRoot = await deps.npmGlobalRoot()\n if (!globalRoot) {\n return\n }\n const packageRoot = path.join(globalRoot, ...PACKAGE_NAME.split('/'))\n if (!fs.existsSync(packageRoot)) {\n return\n }\n fs.mkdirSync(path.dirname(versionDir), { recursive: true })\n fs.cpSync(packageRoot, versionDir, { recursive: true })\n}\n\nfunction switchCurrentLink(paths: LincolnPaths, versionDir: string): void {\n fs.mkdirSync(paths.lincolnHome, { recursive: true })\n try {\n fs.rmSync(paths.currentDir, { recursive: true, force: true })\n fs.symlinkSync(versionDir, paths.currentDir)\n } catch {\n fs.rmSync(paths.currentDir, { recursive: true, force: true })\n fs.cpSync(versionDir, paths.currentDir, { recursive: true, force: true })\n }\n}\n\nfunction defaultInstallOptions(): InstallOptions {\n return { yes: true, dryRun: false, force: false, harnesses: [], noVenv: true, noInteractive: true }\n}\n\nfunction runNpmInstallGlobal(packageName: string, version: string): Promise<number> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['install', '-g', `${packageName}@${version}`], {\n stdio: 'inherit',\n shell: process.platform === 'win32',\n env: { ...process.env, LINCOLN_SKIP_POSTINSTALL: '1' }\n })\n child.on('close', (code) => resolvePromise(code ?? 1))\n child.on('error', () => resolvePromise(1))\n })\n}\n\nfunction runNpmRootGlobal(): Promise<string | undefined> {\n return new Promise((resolvePromise) => {\n const child = spawn('npm', ['root', '-g'], {\n stdio: ['ignore', 'pipe', 'ignore'],\n shell: process.platform === 'win32'\n })\n let stdout = ''\n child.stdout?.on('data', (chunk: Buffer | string) => {\n stdout += chunk.toString()\n })\n child.on('close', (code) => {\n const root = stdout.trim()\n resolvePromise(code === 0 && root.length > 0 ? root : undefined)\n })\n child.on('error', () => resolvePromise(undefined))\n })\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { listVendoredFrameworkFiles } from '../lib/projectFiles.js'\nimport { readLocalPackageVersion } from '../lib/packageInfo.js'\nimport { writeProjectMarker } from '../lib/marker.js'\nimport { resolveLincolnPaths } from '../lib/paths.js'\nimport type { LincolnPaths } from '../lib/paths.js'\n\nexport interface MigrateProjectOptions {\n dryRun?: boolean\n yes?: boolean\n force?: boolean\n}\n\nexport interface MigrateProjectDeps {\n paths: LincolnPaths\n listVendoredFrameworkFiles: (\n payloadRoot: string,\n projectRoot: string\n ) => ReturnType<typeof listVendoredFrameworkFiles>\n writeProjectMarker: typeof writeProjectMarker\n}\n\nexport function createDefaultDeps(): MigrateProjectDeps {\n return {\n paths: resolveLincolnPaths(),\n listVendoredFrameworkFiles,\n writeProjectMarker\n }\n}\n\nexport async function migrateProject(\n projectRoot: string,\n options: MigrateProjectOptions = {},\n deps: MigrateProjectDeps = createDefaultDeps()\n): Promise<number> {\n const payloadRoot = deps.paths.currentDir\n if (!fs.existsSync(payloadRoot)) {\n console.error(`Lincoln payload not found at ${payloadRoot}. Run \"lincoln install\" first.`)\n return 1\n }\n\n const absoluteProjectRoot = path.resolve(projectRoot)\n const report = deps.listVendoredFrameworkFiles(payloadRoot, absoluteProjectRoot)\n\n if (options.dryRun) {\n console.log(`Dry run: would migrate ${absoluteProjectRoot}`)\n if (report.removable.length > 0) {\n console.log('Would remove unmodified framework files:')\n for (const f of report.removable) console.log(` - ${f}`)\n }\n if (report.modified.length > 0) {\n console.log('Would preserve modified framework files:')\n for (const f of report.modified) console.log(` - ${f}`)\n }\n if (report.preserved.length > 0) {\n console.log('Would preserve project-local files:')\n for (const f of report.preserved) console.log(` - ${f}`)\n }\n console.log('Would create .lincoln.yaml')\n return 0\n }\n\n if (!options.yes) {\n console.error('This will remove vendored framework files. Run with --yes to proceed.')\n return 1\n }\n\n for (const file of report.removable) {\n const filePath = path.join(absoluteProjectRoot, file)\n try {\n fs.rmSync(filePath)\n // Remove empty parent directories up to project root\n let dir = path.dirname(filePath)\n while (dir !== absoluteProjectRoot && fs.existsSync(dir)) {\n const entries = fs.readdirSync(dir)\n if (entries.length === 0) {\n fs.rmdirSync(dir)\n dir = path.dirname(dir)\n } else {\n break\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to remove ${file}: ${message}`)\n return 1\n }\n }\n\n if (report.modified.length > 0) {\n console.log('Preserved modified framework files:')\n for (const f of report.modified) console.log(` - ${f}`)\n }\n\n if (report.preserved.length > 0) {\n console.log('Preserved project-local files:')\n for (const f of report.preserved) console.log(` - ${f}`)\n }\n\n try {\n deps.writeProjectMarker(\n absoluteProjectRoot,\n {\n enabled: true,\n workflow_template: 'interview-to-knowledge',\n min_lincoln_version: readLocalPackageVersion() ?? '1.5.0'\n },\n { force: options.force }\n )\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n console.error(`Failed to write .lincoln.yaml: ${message}`)\n return 1\n }\n\n console.log(`Migrated project at ${absoluteProjectRoot}`)\n console.log(`Removed ${report.removable.length} unmodified framework files`)\n return 0\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport crypto from 'node:crypto'\n\n// Mirrors scripts/package-lincoln-plugin.py and scripts/sync-framework-package.mjs\nexport const FRAMEWORK_ALLOWLIST_DIRS = ['.claude', '.claude-plugin', 'scripts', 'tools']\nexport const FRAMEWORK_ALLOWLIST_FILES = [\n 'README.md',\n 'README.en.md',\n 'USAGE.md',\n 'CONTRIBUTING.md',\n 'CLAUDE.md',\n 'LICENSE',\n 'RELEASE.md',\n '.version-bump.json',\n 'requirements.txt',\n 'SKILL.md'\n]\nexport const FRAMEWORK_DENYLIST_NAMES = new Set([\n '.git',\n '.context',\n '.venv',\n 'venv',\n 'dist',\n 'oss',\n '.pytest_cache',\n '__pycache__',\n '.DS_Store',\n 'node_modules'\n])\nexport const FRAMEWORK_DENYLIST_PREFIXES = ['issue-']\nexport const FRAMEWORK_SKIP_PATHS = new Set([\n '.claude/templates/issue-package',\n 'tools/lincoln-installer/dist',\n 'tools/lincoln-installer/node_modules',\n 'tools/lincoln-installer/coverage'\n])\n\nfunction sha256(filePath: string): string {\n return crypto.createHash('sha256').update(fs.readFileSync(filePath)).digest('hex')\n}\n\nfunction isDenied(relativePath: string): boolean {\n const parts = relativePath.split(path.sep)\n for (const part of parts) {\n if (FRAMEWORK_DENYLIST_NAMES.has(part)) return true\n for (const prefix of FRAMEWORK_DENYLIST_PREFIXES) {\n if (part.startsWith(prefix)) return true\n }\n }\n for (const skip of FRAMEWORK_SKIP_PATHS) {\n if (relativePath === skip || relativePath.startsWith(skip + path.sep)) return true\n }\n return false\n}\n\nfunction isAllowlisted(relativePath: string): boolean {\n if (FRAMEWORK_ALLOWLIST_FILES.includes(relativePath)) return true\n for (const dir of FRAMEWORK_ALLOWLIST_DIRS) {\n if (relativePath === dir || relativePath.startsWith(dir + path.sep)) return true\n }\n return false\n}\n\nfunction isPreservedDir(relativePath: string): boolean {\n const normalized = relativePath.replace(/\\\\/g, '/')\n if (normalized === '.context' || normalized.startsWith('.context/')) return true\n const parts = normalized.split('/')\n for (const part of parts) {\n if (part.startsWith('issue-')) return true\n }\n return false\n}\n\nfunction isPreserved(relativePath: string): boolean {\n const normalized = relativePath.replace(/\\\\/g, '/')\n if (normalized === '.github/openspec-config.yml') return true\n return isPreservedDir(relativePath)\n}\n\nexport interface VendoredFileReport {\n removable: string[]\n modified: string[]\n preserved: string[]\n}\n\nexport function listVendoredFrameworkFiles(\n payloadRoot: string,\n projectRoot: string\n): VendoredFileReport {\n const report: VendoredFileReport = { removable: [], modified: [], preserved: [] }\n\n function walk(dir: string): void {\n const entries = fs.readdirSync(dir, { withFileTypes: true })\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name)\n const relativePath = path.relative(projectRoot, fullPath)\n\n if (entry.isDirectory()) {\n if (isPreservedDir(relativePath)) {\n walk(fullPath)\n } else if (!isDenied(relativePath)) {\n walk(fullPath)\n }\n continue\n }\n\n if (isPreserved(relativePath)) {\n report.preserved.push(relativePath)\n continue\n }\n\n if (isDenied(relativePath)) continue\n if (!isAllowlisted(relativePath)) continue\n\n const payloadFile = path.join(payloadRoot, relativePath)\n if (!fs.existsSync(payloadFile)) {\n report.modified.push(relativePath)\n continue\n }\n\n if (sha256(fullPath) === sha256(payloadFile)) {\n report.removable.push(relativePath)\n } else {\n report.modified.push(relativePath)\n }\n }\n }\n\n if (fs.existsSync(projectRoot)) {\n walk(projectRoot)\n }\n\n return report\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport { EventEmitter } from 'node:events'\n\nexport interface RecordDeps {\n spawn: (\n command: string,\n args: readonly string[],\n options: { stdio: 'inherit' }\n ) => ChildProcess\n}\n\nexport function createDefaultDeps(): RecordDeps {\n return { spawn }\n}\n\nexport function record(args: string[], deps: RecordDeps = createDefaultDeps()): Promise<number> {\n return new Promise((resolve) => {\n const child = deps.spawn('lincoln-record', args, { stdio: 'inherit' })\n child.on('error', (err: Error) => {\n console.error(`Failed to start lincoln-record: ${err.message}`)\n resolve(1)\n })\n child.on('close', (code: number | null) => {\n resolve(code ?? 0)\n })\n })\n}\n\nexport function makeFakeChildProcess(exitCode: number | null = 0): ChildProcess {\n const emitter = new EventEmitter() as ChildProcess\n process.nextTick(() => {\n emitter.emit('close', exitCode)\n })\n return emitter\n}\n\nexport function makeFailingFakeChildProcess(message: string): ChildProcess {\n const emitter = new EventEmitter() as ChildProcess\n process.nextTick(() => {\n emitter.emit('error', new Error(message))\n })\n return emitter\n}\n"],"mappings":"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","names":["fs","path","fileURLToPath","fs","path","path","path","fs","fs","path","fs","path","fs","path","spawn","fs","path","fs","path","spawn","report","fs","path","yaml","path","fs","yaml","runCommand","fetch","fs","path","os","createDefaultDeps","fs","path","runCommand","spawn","MIN_PYTHON_MAJOR","MIN_PYTHON_MINOR","parsePythonVersion","spawn","createDefaultDeps","spawn","fs","path","spawn","PACKAGE_NAME","createDefaultDeps","runNpmInstallGlobal","path","fs","defaultInstallOptions","spawn","fs","path","fs","path","crypto","sha256","createDefaultDeps","fs","path","spawn","createDefaultDeps","path","fs","fileURLToPath"]}
|