@sushanglewis/lincoln 1.5.2 → 1.5.3

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 CHANGED
@@ -15,7 +15,9 @@ var BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
15
15
  "json",
16
16
  "help",
17
17
  "h",
18
- "no-venv"
18
+ "no-venv",
19
+ "version",
20
+ "v"
19
21
  ]);
20
22
  function parseArgs(argv) {
21
23
  const args = argv.slice(2);
@@ -1313,9 +1315,15 @@ Options:
1313
1315
  --check Check for available updates without installing (update)
1314
1316
  --json Output machine-readable JSON (where supported)
1315
1317
  --help, -h Show this help message
1318
+ --version, -v Show the installed Lincoln version
1316
1319
  `;
1317
1320
  async function main(argv) {
1318
1321
  const parsed = parseArgs(argv);
1322
+ if (parsed.flags.version || parsed.flags.v) {
1323
+ const version = readLocalPackageVersion();
1324
+ console.log(version ? `Lincoln ${version}` : "Lincoln (unknown version)");
1325
+ return 0;
1326
+ }
1319
1327
  if (parsed.command === "help") {
1320
1328
  console.log(USAGE);
1321
1329
  return 0;
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/harnessDetect.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'\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 --check Check for available updates without installing (update)\n --json Output machine-readable JSON (where supported)\n --help, -h Show this help message\n`\n\nexport async function main(argv: string[]): Promise<number> {\n const parsed = parseArgs(argv)\n\n if (parsed.command === 'help') {\n console.log(USAGE)\n return 0\n }\n\n if (parsed.command === 'install') {\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: parsed.args,\n noVenv: Boolean(parsed.flags['no-venv'])\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).then((code) => process.exit(code))\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])\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 { SyncReport } from '../lib/syncClaude.js'\nimport { syncClaudeCode } from '../lib/syncClaude.js'\nimport { installedHarnessIds } from '../lib/harnessDetect.js'\n\nexport interface InstallOptions {\n yes: boolean\n dryRun: boolean\n force: boolean\n harnesses: string[]\n noVenv: boolean\n}\n\nexport interface InstallDeps {\n paths: LincolnPaths\n payloadRoot: string\n syncClaude: (opts: {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n }) => SyncReport\n}\n\nexport function createDefaultDeps(): InstallDeps {\n return {\n paths: resolveLincolnPaths(),\n payloadRoot: resolvePayloadRoot() || '',\n syncClaude: syncClaudeCode\n }\n}\n\nexport async function install(\n options: InstallOptions,\n deps: InstallDeps = createDefaultDeps()\n): Promise<number> {\n if (!options.dryRun && !options.yes) {\n console.error('This will install Lincoln globally. Run with --yes to proceed.')\n return 1\n }\n\n const version = readLocalPackageVersion()\n if (!version) {\n console.error('Could not determine Lincoln version')\n return 1\n }\n\n const harnesses =\n options.harnesses.length > 0 ? options.harnesses : installedHarnessIds(deps.paths.homeDir)\n\n if (harnesses.length === 0) {\n console.error('No agent harness detected. Install Claude Code, Codex, or OpenCode first.')\n return 1\n }\n\n const payloadRoot = deps.payloadRoot\n if (!payloadRoot || !fs.existsSync(payloadRoot)) {\n console.error(\n `Lincoln payload not found. Run \"npm install -g @sushanglewis/lincoln\" first.`\n )\n return 1\n }\n\n const versionDir = path.join(deps.paths.versionsDir, version)\n if (!options.dryRun) {\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 report = deps.syncClaude({\n payloadRoot: deps.paths.currentDir,\n targetDir: deps.paths.claudeDir,\n version,\n dryRun: options.dryRun\n })\n\n if (!options.dryRun && !options.noVenv) {\n const python = await resolvePythonForVenv()\n if (!python) {\n console.error(\n 'Python 3.10+ is required but was not found. Set LINCOLN_PYTHON to a compatible Python executable.'\n )\n return 1\n }\n await setupVenv(deps.paths, payloadRoot, python)\n }\n\n if (!options.dryRun) {\n writeVersionMarker(deps.paths, {\n version,\n installedAt: new Date().toISOString(),\n harnesses,\n managedFiles: report.written\n })\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would install Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n console.log(`Would write ${report.written.length} files`)\n } else {\n console.log(`Installed Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n console.log(`Wrote ${report.written.length} files`)\n }\n\n return 0\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\nasync function setupVenv(paths: LincolnPaths, payloadRoot: string, pythonCommand: string): Promise<void> {\n const pythonExe = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n\n if (!fs.existsSync(pythonExe)) {\n console.log('Creating Lincoln virtual environment...')\n await runCommand(pythonCommand, ['-m', 'venv', paths.venvDir])\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 await runCommand(pipExe, ['install', '-r', requirementsPath])\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 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","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 }\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 })\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 }\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 })\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","fs","path","os","createDefaultDeps","fs","path","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/harnessDetect.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 --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 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: parsed.args,\n noVenv: Boolean(parsed.flags['no-venv'])\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).then((code) => process.exit(code))\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 '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 { SyncReport } from '../lib/syncClaude.js'\nimport { syncClaudeCode } from '../lib/syncClaude.js'\nimport { installedHarnessIds } from '../lib/harnessDetect.js'\n\nexport interface InstallOptions {\n yes: boolean\n dryRun: boolean\n force: boolean\n harnesses: string[]\n noVenv: boolean\n}\n\nexport interface InstallDeps {\n paths: LincolnPaths\n payloadRoot: string\n syncClaude: (opts: {\n payloadRoot: string\n targetDir: string\n version: string\n dryRun: boolean\n }) => SyncReport\n}\n\nexport function createDefaultDeps(): InstallDeps {\n return {\n paths: resolveLincolnPaths(),\n payloadRoot: resolvePayloadRoot() || '',\n syncClaude: syncClaudeCode\n }\n}\n\nexport async function install(\n options: InstallOptions,\n deps: InstallDeps = createDefaultDeps()\n): Promise<number> {\n if (!options.dryRun && !options.yes) {\n console.error('This will install Lincoln globally. Run with --yes to proceed.')\n return 1\n }\n\n const version = readLocalPackageVersion()\n if (!version) {\n console.error('Could not determine Lincoln version')\n return 1\n }\n\n const harnesses =\n options.harnesses.length > 0 ? options.harnesses : installedHarnessIds(deps.paths.homeDir)\n\n if (harnesses.length === 0) {\n console.error('No agent harness detected. Install Claude Code, Codex, or OpenCode first.')\n return 1\n }\n\n const payloadRoot = deps.payloadRoot\n if (!payloadRoot || !fs.existsSync(payloadRoot)) {\n console.error(\n `Lincoln payload not found. Run \"npm install -g @sushanglewis/lincoln\" first.`\n )\n return 1\n }\n\n const versionDir = path.join(deps.paths.versionsDir, version)\n if (!options.dryRun) {\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 report = deps.syncClaude({\n payloadRoot: deps.paths.currentDir,\n targetDir: deps.paths.claudeDir,\n version,\n dryRun: options.dryRun\n })\n\n if (!options.dryRun && !options.noVenv) {\n const python = await resolvePythonForVenv()\n if (!python) {\n console.error(\n 'Python 3.10+ is required but was not found. Set LINCOLN_PYTHON to a compatible Python executable.'\n )\n return 1\n }\n await setupVenv(deps.paths, payloadRoot, python)\n }\n\n if (!options.dryRun) {\n writeVersionMarker(deps.paths, {\n version,\n installedAt: new Date().toISOString(),\n harnesses,\n managedFiles: report.written\n })\n }\n\n if (options.dryRun) {\n console.log(`Dry run: would install Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n console.log(`Would write ${report.written.length} files`)\n } else {\n console.log(`Installed Lincoln ${version} for harnesses: ${harnesses.join(', ')}`)\n console.log(`Wrote ${report.written.length} files`)\n }\n\n return 0\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\nasync function setupVenv(paths: LincolnPaths, payloadRoot: string, pythonCommand: string): Promise<void> {\n const pythonExe = path.join(\n paths.venvDir,\n process.platform === 'win32' ? 'Scripts' : 'bin',\n process.platform === 'win32' ? 'python.exe' : 'python'\n )\n\n if (!fs.existsSync(pythonExe)) {\n console.log('Creating Lincoln virtual environment...')\n await runCommand(pythonCommand, ['-m', 'venv', paths.venvDir])\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 await runCommand(pipExe, ['install', '-r', requirementsPath])\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 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","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 }\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 })\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 }\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 })\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","fs","path","os","createDefaultDeps","fs","path","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"]}
@@ -9,7 +9,7 @@
9
9
  {
10
10
  "name": "lincoln",
11
11
  "description": "AI-Native product R&D collaboration system for Conductor + Claude Code. Orchestrates stages, gates, artifacts, skills, and roles across product, design, and engineering into a repeatable workflow from recordings to GitHub Issues to Obsidian knowledge base.",
12
- "version": "1.5.2",
12
+ "version": "1.5.3",
13
13
  "author": {
14
14
  "name": "Lincoln contributors"
15
15
  },
@@ -28,5 +28,5 @@
28
28
  ]
29
29
  }
30
30
  ],
31
- "version": "1.5.2"
31
+ "version": "1.5.3"
32
32
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lincoln",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "AI-Native product R&D collaboration system for Conductor + Claude Code + OpenSpec + GitHub + Obsidian",
5
5
  "author": {
6
6
  "name": "Lincoln contributors"
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.5.2",
2
+ "version": "1.5.3",
3
3
  "manifests": [
4
4
  {
5
5
  "path": ".claude-plugin/plugin.json",
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.5.2",
3
- "generatedAt": "2026-08-06T03:07:34.713Z",
2
+ "version": "1.5.3",
3
+ "generatedAt": "2026-08-06T03:31:08.059Z",
4
4
  "files": [
5
5
  {
6
6
  "path": ".claude-plugin/hooks.json",
@@ -8,11 +8,11 @@
8
8
  },
9
9
  {
10
10
  "path": ".claude-plugin/marketplace.json",
11
- "sha256": "e3d11b11dc35a096064cff03df0fdef5dec12f75387d44634a22b02c160affab"
11
+ "sha256": "5b1c9d8405192544541b0ef657ff3ce664302e5eb252f0e83298f1d312ce1317"
12
12
  },
13
13
  {
14
14
  "path": ".claude-plugin/plugin.json",
15
- "sha256": "78a1c6fbc6c3cee62560e64edd8fe4d10beab2b080de4bd8e4f02743933e79f9"
15
+ "sha256": "ffaade236ca59df4e879e293c61c13ad473c2758749137353adec94811081d4b"
16
16
  },
17
17
  {
18
18
  "path": ".claude/agents/_contract.md",
@@ -488,7 +488,7 @@
488
488
  },
489
489
  {
490
490
  "path": ".version-bump.json",
491
- "sha256": "06f7b8cf78e406b87124b1a3c38c917517c4e6b1a37c5d812c485a64ef2c53e6"
491
+ "sha256": "db61facbb56f164fbfa5a550bd59dc24dae475a46e3102aef5da2f693a0d849e"
492
492
  },
493
493
  {
494
494
  "path": "CLAUDE.md",
@@ -696,7 +696,7 @@
696
696
  },
697
697
  {
698
698
  "path": "tools/lincoln-installer/package.json",
699
- "sha256": "8b069894f9cde9a2f724810d92e8f14ba1e8e909d39c1fd40a971731b3d79ece"
699
+ "sha256": "56d4137e0478df47b5f5ecf8217bb1fc8b5ed89c1a324c1a81e9fc94e4b80566"
700
700
  },
701
701
  {
702
702
  "path": "tools/lincoln-installer/src/cli.tsx",
@@ -988,11 +988,11 @@
988
988
  },
989
989
  {
990
990
  "path": "tools/lincoln/package-lock.json",
991
- "sha256": "dbbd918a124e77006738ed4830d026eecf4304cfd4b8937159b53d304ef16743"
991
+ "sha256": "17a8339ef610d41d3f0c7d57ac5c2e70eb5c32eca57f7e367601d34ae678394e"
992
992
  },
993
993
  {
994
994
  "path": "tools/lincoln/package.json",
995
- "sha256": "d23a2993785b5eabccbb3d11341f935e60dfdc28d3dc6435f8479417e9f204a5"
995
+ "sha256": "f861a3d7795239e7fe9fb8f39758d36f5d6f7468190212f71a9feab2a163c409"
996
996
  },
997
997
  {
998
998
  "path": "tools/lincoln/src/cli.tsx",
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@sushanglewis/lincoln",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@sushanglewis/lincoln",
9
- "version": "1.5.2",
9
+ "version": "1.5.3",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "ink": "^5.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sushanglewis/lincoln-recorder",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "Cross-tool terminal UI for recording Lincoln interviews",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lincoln-install",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "Terminal TUI installer for the Lincoln AI-Native R&D workflow system",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sushanglewis/lincoln",
3
- "version": "1.5.2",
3
+ "version": "1.5.3",
4
4
  "description": "Global Lincoln agent harness plugin CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",