mindlink 1.0.3 → 1.0.4
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/README.md +2 -2
- package/commands/update.md +2 -2
- package/dist/cli.js +23 -8
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,9 +18,9 @@ MindLink fixes all three. One command per project.
|
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
21
|
-
> ### ◉ Latest — v1.0.
|
|
21
|
+
> ### ◉ Latest — v1.0.4
|
|
22
22
|
> **Session memory · Cross-session sync · Cross-agent · 8 AI agents supported**
|
|
23
|
-
> [→ Full release notes](https://github.com/404-not-found/mindlink/releases/tag/v1.0.
|
|
23
|
+
> [→ Full release notes](https://github.com/404-not-found/mindlink/releases/tag/v1.0.4)
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
package/commands/update.md
CHANGED
|
@@ -37,7 +37,7 @@ mindlink update
|
|
|
37
37
|
|
|
38
38
|
**Update available:**
|
|
39
39
|
```
|
|
40
|
-
Current version : 1.0.
|
|
40
|
+
Current version : 1.0.4
|
|
41
41
|
Latest version : 1.2.0
|
|
42
42
|
|
|
43
43
|
❯ Update to 1.2.0
|
|
@@ -52,7 +52,7 @@ Latest version : 1.2.0
|
|
|
52
52
|
|
|
53
53
|
**Already up to date:**
|
|
54
54
|
```
|
|
55
|
-
✓ You're on the latest version (1.0.
|
|
55
|
+
✓ You're on the latest version (1.0.4).
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
---
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/cli.ts
|
|
4
|
-
import { Command as
|
|
5
|
-
import
|
|
4
|
+
import { Command as Command15 } from "commander";
|
|
5
|
+
import chalk16 from "chalk";
|
|
6
|
+
|
|
7
|
+
// src/utils/version.ts
|
|
8
|
+
var VERSION = "1.0.4";
|
|
6
9
|
|
|
7
10
|
// src/commands/init.ts
|
|
8
11
|
import { Command } from "commander";
|
|
@@ -1765,9 +1768,20 @@ function printChecks(checks) {
|
|
|
1765
1768
|
console.log("");
|
|
1766
1769
|
}
|
|
1767
1770
|
|
|
1771
|
+
// src/commands/version.ts
|
|
1772
|
+
import { Command as Command14 } from "commander";
|
|
1773
|
+
import chalk15 from "chalk";
|
|
1774
|
+
var versionCommand = new Command14("version").description("Show the current MindLink version").action(() => {
|
|
1775
|
+
console.log("");
|
|
1776
|
+
console.log(` ${chalk15.bold("\u25C9 MindLink")} v${VERSION}`);
|
|
1777
|
+
console.log("");
|
|
1778
|
+
console.log(` ${chalk15.dim("Run")} ${chalk15.cyan("mindlink update")} ${chalk15.dim("to check for a newer version.")}`);
|
|
1779
|
+
console.log("");
|
|
1780
|
+
});
|
|
1781
|
+
|
|
1768
1782
|
// src/cli.ts
|
|
1769
|
-
var program = new
|
|
1770
|
-
program.name("mindlink").description("Give your AI a brain.").version(
|
|
1783
|
+
var program = new Command15();
|
|
1784
|
+
program.name("mindlink").description("Give your AI a brain.").version(VERSION, "-v, --version");
|
|
1771
1785
|
program.addCommand(initCommand);
|
|
1772
1786
|
program.addCommand(statusCommand);
|
|
1773
1787
|
program.addCommand(logCommand);
|
|
@@ -1781,9 +1795,10 @@ program.addCommand(uninstallCommand);
|
|
|
1781
1795
|
program.addCommand(exportCommand);
|
|
1782
1796
|
program.addCommand(importCommand);
|
|
1783
1797
|
program.addCommand(doctorCommand);
|
|
1798
|
+
program.addCommand(versionCommand);
|
|
1784
1799
|
program.on("command:*", (operands) => {
|
|
1785
1800
|
const unknown = operands[0];
|
|
1786
|
-
const known = ["init", "status", "log", "clear", "reset", "config", "sync", "update", "summary", "uninstall", "export", "import", "doctor"];
|
|
1801
|
+
const known = ["init", "status", "log", "clear", "reset", "config", "sync", "update", "summary", "uninstall", "export", "import", "doctor", "version"];
|
|
1787
1802
|
function levenshtein(a, b) {
|
|
1788
1803
|
const m = a.length, n = b.length;
|
|
1789
1804
|
const dp = Array.from(
|
|
@@ -1799,11 +1814,11 @@ program.on("command:*", (operands) => {
|
|
|
1799
1814
|
}
|
|
1800
1815
|
const closest = known.map((cmd) => ({ cmd, dist: levenshtein(unknown, cmd) })).sort((a, b) => a.dist - b.dist)[0];
|
|
1801
1816
|
console.log("");
|
|
1802
|
-
console.log(` ${
|
|
1817
|
+
console.log(` ${chalk16.red("\u2717")} Unknown command: ${chalk16.bold(unknown)}`);
|
|
1803
1818
|
if (closest && closest.dist <= 3) {
|
|
1804
|
-
console.log(` Did you mean ${
|
|
1819
|
+
console.log(` Did you mean ${chalk16.cyan("mindlink " + closest.cmd)}?`);
|
|
1805
1820
|
}
|
|
1806
|
-
console.log(` Run ${
|
|
1821
|
+
console.log(` Run ${chalk16.cyan("mindlink --help")} to see all commands.`);
|
|
1807
1822
|
console.log("");
|
|
1808
1823
|
process.exit(1);
|
|
1809
1824
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/commands/init.ts","../src/utils/paths.ts","../src/utils/banner.ts","../src/utils/agents.ts","../src/commands/status.ts","../src/utils/parser.ts","../src/commands/log.ts","../src/commands/clear.ts","../src/commands/reset.ts","../src/commands/config.ts","../src/commands/sync.ts","../src/commands/update.ts","../src/commands/summary.ts","../src/commands/uninstall.ts","../src/commands/export.ts","../src/commands/import.ts","../src/commands/doctor.ts"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { initCommand } from './commands/init.js';\nimport { statusCommand } from './commands/status.js';\nimport { logCommand } from './commands/log.js';\nimport { clearCommand } from './commands/clear.js';\nimport { resetCommand } from './commands/reset.js';\nimport { configCommand } from './commands/config.js';\nimport { syncCommand } from './commands/sync.js';\nimport { updateCommand } from './commands/update.js';\nimport { summaryCommand } from './commands/summary.js';\nimport { uninstallCommand } from './commands/uninstall.js';\nimport { exportCommand } from './commands/export.js';\nimport { importCommand } from './commands/import.js';\nimport { doctorCommand } from './commands/doctor.js';\n\nconst program = new Command();\n\nprogram\n .name('mindlink')\n .description('Give your AI a brain.')\n .version('1.0.3', '-v, --version');\n\nprogram.addCommand(initCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(logCommand);\nprogram.addCommand(clearCommand);\nprogram.addCommand(resetCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(syncCommand);\nprogram.addCommand(updateCommand);\nprogram.addCommand(summaryCommand);\nprogram.addCommand(uninstallCommand);\nprogram.addCommand(exportCommand);\nprogram.addCommand(importCommand);\nprogram.addCommand(doctorCommand);\n\n// \"Did you mean?\" on unknown commands\nprogram.on('command:*', (operands: string[]) => {\n const unknown = operands[0];\n const known = ['init', 'status', 'log', 'clear', 'reset', 'config', 'sync', 'update', 'summary', 'uninstall', 'export', 'import', 'doctor'];\n\n // Simple Levenshtein-based suggestion\n function levenshtein(a: string, b: string): number {\n const m = a.length, n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, (_, i) =>\n Array.from({ length: n + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0))\n );\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] = a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1]\n : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);\n }\n }\n return dp[m][n];\n }\n\n const closest = known\n .map(cmd => ({ cmd, dist: levenshtein(unknown, cmd) }))\n .sort((a, b) => a.dist - b.dist)[0];\n\n console.log('');\n console.log(` ${chalk.red('✗')} Unknown command: ${chalk.bold(unknown)}`);\n if (closest && closest.dist <= 3) {\n console.log(` Did you mean ${chalk.cyan('mindlink ' + closest.cmd)}?`);\n }\n console.log(` Run ${chalk.cyan('mindlink --help')} to see all commands.`);\n console.log('');\n process.exit(1);\n});\n\nprogram.parse();\n","import { Command } from 'commander';\nimport {\n intro,\n multiselect,\n select,\n spinner,\n note,\n cancel,\n isCancel,\n} from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n appendFileSync,\n} from 'fs';\nimport { join, resolve, dirname, basename } from 'path';\nimport { BRAIN_TEMPLATES_DIR, AGENT_TEMPLATES_DIR, HOOKS_TEMPLATES_DIR, BRAIN_DIR } from '../utils/paths.js';\nimport { printBanner } from '../utils/banner.js';\nimport { AGENTS } from '../utils/agents.js';\n\ninterface ProjectInfo {\n name: string;\n description: string;\n stack: string;\n date: string;\n}\n\nfunction detectProjectInfo(projectPath: string): ProjectInfo {\n const date = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });\n\n let name = basename(projectPath);\n let description = '';\n let stack = '';\n\n // Try package.json\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.name) name = pkg.name;\n if (pkg.description) description = pkg.description;\n stack = 'Node.js';\n } catch {}\n }\n\n // Detect stack from manifest files (may override or extend)\n if (!stack) {\n if (existsSync(join(projectPath, 'Cargo.toml'))) stack = 'Rust';\n else if (existsSync(join(projectPath, 'go.mod'))) stack = 'Go';\n else if (existsSync(join(projectPath, 'pyproject.toml')) || existsSync(join(projectPath, 'requirements.txt'))) stack = 'Python';\n else if (existsSync(join(projectPath, 'pom.xml'))) stack = 'Java (Maven)';\n else if (existsSync(join(projectPath, 'build.gradle')) || existsSync(join(projectPath, 'build.gradle.kts'))) stack = 'Kotlin/Java (Gradle)';\n else if (existsSync(join(projectPath, 'composer.json'))) stack = 'PHP';\n else if (existsSync(join(projectPath, 'Gemfile'))) stack = 'Ruby';\n }\n\n return { name, description, stack, date };\n}\n\nfunction buildMemoryMd(templateContent: string, info: ProjectInfo): string {\n let content = templateContent;\n\n // Inject project name + description under \"What this project is\"\n const whatLine = info.description\n ? `**${info.name}** — ${info.description}`\n : `**${info.name}**`;\n content = content.replace(\n /### What this project is\\n<!--[^]*?-->/,\n `### What this project is\\n${whatLine}\\n<!-- 2–3 lines: what it does, who it's for, what problem it solves -->`\n );\n\n // Inject detected stack under \"Stack\"\n if (info.stack) {\n content = content.replace(\n /### Stack\\n<!--[^]*?-->/,\n `### Stack\\n${info.stack}\\n<!-- Add layers: Frontend, Backend, Infra, etc. -->`\n );\n }\n\n // Inject init date under \"Current focus\"\n content = content.replace(\n /### Current focus\\n<!--[^]*?-->/,\n `### Current focus\\n<!-- Initialized ${info.date} — ask your AI to fill this in after your first session -->`\n );\n\n return content;\n}\n\nconst BRAIN_FILES = [\n { templateFile: 'MEMORY.md', label: '.brain/MEMORY.md', desc: 'permanent project facts' },\n { templateFile: 'SESSION.md', label: '.brain/SESSION.md', desc: 'current session state' },\n { templateFile: 'SHARED.md', label: '.brain/SHARED.md', desc: 'shared across sessions' },\n { templateFile: 'LOG.md', label: '.brain/LOG.md', desc: 'full session history' },\n];\n\nconst DEFAULT_MAX_LOG_ENTRIES = 50;\n\n\nexport const initCommand = new Command('init')\n .description('Set up memory for the current project')\n .option('-y, --yes', 'Skip all prompts, use defaults')\n .addHelpText('after', `\nExamples:\n mindlink init\n mindlink init --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n printBanner();\n\n // --- Already initialized? Show recovery menu ---\n if (existsSync(brainDir)) {\n if (opts.yes) {\n console.log(` ${chalk.red('✗')} Already initialized at this path.`);\n console.log(` Run ${chalk.cyan('mindlink config')} to change settings.`);\n console.log('');\n process.exit(1);\n }\n\n const action = await select({\n message: '.brain/ already exists at this path. What would you like to do?',\n options: [\n { value: 'config', label: 'Change settings', hint: 'mindlink config' },\n { value: 'status', label: 'View current status', hint: 'mindlink status' },\n { value: 'exit', label: 'Nothing — exit', hint: '' },\n ],\n });\n\n if (isCancel(action) || action === 'exit') {\n process.exit(0);\n }\n if (action === 'status') {\n const { execSync } = await import('child_process');\n try { execSync('mindlink status', { stdio: 'inherit' }); } catch {}\n }\n if (action === 'config') {\n console.log(` Run ${chalk.cyan('mindlink config')} to change settings.`);\n }\n console.log('');\n process.exit(0);\n }\n\n intro(chalk.bold('Initializing memory for this project:'));\n console.log(` ${chalk.dim(projectPath)}`);\n console.log(` ${chalk.dim('This creates a .brain/ folder scoped to this project only.')}`);\n console.log(` ${chalk.dim('Run mindlink init once per project — never needs to be run again.')}`);\n console.log('');\n\n // --- Prompt 1: Agent selection ---\n let selectedAgents: string[];\n\n if (opts.yes) {\n selectedAgents = AGENTS.filter(a => a.selected).map(a => a.value);\n } else {\n const agentChoices = AGENTS.map(a => ({\n value: a.value,\n label: `${a.label.padEnd(18)} ${chalk.dim(a.hint)}`,\n hint: a.selected ? 'recommended' : undefined,\n }));\n\n const agentResult = await multiselect({\n message: 'Which AI agents do you use?',\n options: agentChoices,\n initialValues: AGENTS.filter(a => a.selected).map(a => a.value),\n required: false,\n });\n\n if (isCancel(agentResult)) { cancel('Cancelled.'); process.exit(0); }\n selectedAgents = agentResult as string[];\n console.log(` ${chalk.dim('↩ Add or remove agents anytime: mindlink config → Agent instruction files')}`);\n console.log('');\n }\n\n // --- Prompt 2: Git tracking ---\n let gitTracking: boolean;\n\n if (opts.yes) {\n gitTracking = true;\n } else {\n console.log(` ${chalk.dim('.brain/ is your AI\\'s memory — MEMORY.md, SESSION.md, SHARED.md, LOG.md.')}`);\n console.log(` ${chalk.dim('Plain Markdown files. Commit them to share with your team, or keep them local.')}`);\n console.log('');\n const gitResult = await select({\n message: 'Should .brain/ be committed to git?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'team shares the same AI memory' },\n { value: 'disable', label: 'Disable', hint: 'add to .gitignore — personal memory only' },\n ],\n });\n if (isCancel(gitResult)) { cancel('Cancelled.'); process.exit(0); }\n gitTracking = gitResult === 'enable';\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Git tracking')}`);\n console.log('');\n }\n\n // --- Prompt 3: Auto-sync ---\n let autoSync: boolean;\n\n if (opts.yes) {\n autoSync = true;\n } else {\n const syncResult = await select({\n message: 'Auto-sync between sessions?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'watch for changes, sync automatically (recommended)' },\n { value: 'disable', label: 'Disable', hint: 'run mindlink sync manually when needed' },\n ],\n });\n if (isCancel(syncResult)) { cancel('Cancelled.'); process.exit(0); }\n autoSync = syncResult === 'enable';\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Auto-sync')}`);\n console.log('');\n }\n\n // --- Create files ---\n const s = spinner();\n s.start('Creating memory files...');\n\n const created: string[] = [];\n const errors: string[] = [];\n\n try {\n mkdirSync(brainDir, { recursive: true });\n\n const projectInfo = detectProjectInfo(projectPath);\n\n // .brain/ template files\n for (const file of BRAIN_FILES) {\n const dest = join(brainDir, file.templateFile);\n const templateContent = readFileSync(join(BRAIN_TEMPLATES_DIR, file.templateFile), 'utf8');\n const content = file.templateFile === 'MEMORY.md'\n ? buildMemoryMd(templateContent, projectInfo)\n : templateContent;\n writeFileSync(dest, content);\n created.push(`${file.label.padEnd(32)} ${chalk.dim(file.desc)}`);\n }\n\n // Agent instruction files\n for (const agentValue of selectedAgents) {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n mkdirSync(dirname(destPath), { recursive: true });\n writeFileSync(destPath, readFileSync(join(AGENT_TEMPLATES_DIR, agent.templateFile), 'utf8'));\n created.push(`${agent.destFile.padEnd(32)} ${chalk.dim(agent.label)}`);\n }\n\n // .claude/settings.json hook for Claude Code\n if (selectedAgents.includes('claude')) {\n const hookDest = join(projectPath, '.claude', 'settings.json');\n if (!existsSync(hookDest)) {\n mkdirSync(dirname(hookDest), { recursive: true });\n writeFileSync(hookDest, readFileSync(join(HOOKS_TEMPLATES_DIR, 'claude-settings.json'), 'utf8'));\n created.push(`.claude/settings.json${' '.repeat(14)} ${chalk.dim('Claude Code compact hook')}`);\n }\n }\n\n // .gitignore\n if (!gitTracking) {\n const gitignorePath = join(projectPath, '.gitignore');\n const entry = '\\n# MindLink memory (personal — not shared with team)\\n.brain/\\n';\n if (existsSync(gitignorePath)) {\n const current = readFileSync(gitignorePath, 'utf8');\n if (!current.includes('.brain/')) appendFileSync(gitignorePath, entry);\n } else {\n writeFileSync(gitignorePath, entry.trim() + '\\n');\n }\n created.push(`.gitignore${' '.repeat(23)} ${chalk.dim('.brain/ excluded')}`);\n }\n\n // Save config (includes maxLogEntries for log rotation)\n const config = {\n gitTracking,\n autoSync,\n agents: selectedAgents,\n maxLogEntries: DEFAULT_MAX_LOG_ENTRIES,\n };\n writeFileSync(join(brainDir, 'config.json'), JSON.stringify(config, null, 2));\n\n } catch (err: unknown) {\n errors.push(err instanceof Error ? err.message : String(err));\n }\n\n s.stop('Done.');\n console.log('');\n\n for (const line of created) {\n console.log(` ${chalk.green('✓')} ${line}`);\n }\n if (errors.length > 0) {\n console.log('');\n for (const err of errors) console.log(` ${chalk.red('✗')} ${err}`);\n }\n\n console.log('');\n note(\n `Your AI finally has a brain.\\n\\nEvery new session wakes up knowing the project, past decisions,\\ncurrent task, and what other sessions have shared. No more\\nre-explaining from scratch. No more goldfish moments.\\n\\nLike any good brain, it remembers what matters and quietly\\nlets go of the old stuff — that's what MEMORY.md is for:\\npromote anything important there and it stays forever.\\n\\nStart a new AI session — it'll hit the ground running.\\n\\nRun ${chalk.cyan('mindlink help')} to see all commands.`,\n '◉ MindLink active'\n );\n console.log('');\n });\n","import { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Root of dist/ — templates live at dist/templates/\nexport const TEMPLATES_DIR = join(__dirname, 'templates');\n\nexport const BRAIN_TEMPLATES_DIR = join(TEMPLATES_DIR, 'brain');\nexport const AGENT_TEMPLATES_DIR = join(TEMPLATES_DIR, 'agents');\nexport const HOOKS_TEMPLATES_DIR = join(TEMPLATES_DIR, 'hooks');\n\nexport const BRAIN_DIR = '.brain';\n","import chalk from 'chalk';\n\nexport function printBanner(): void {\n console.log('');\n console.log(chalk.dim(' ≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋'));\n console.log(` ${chalk.cyan('◉')} ${chalk.bold('M I N D L I N K')}`);\n console.log(chalk.dim(' ≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋'));\n console.log('');\n}\n","export interface AgentDef {\n value: string;\n label: string;\n hint: string;\n templateFile: string;\n destFile: string;\n selected: boolean;\n}\n\nexport const AGENTS: AgentDef[] = [\n { value: 'claude', label: 'Claude Code', hint: 'CLAUDE.md', templateFile: 'CLAUDE.md', destFile: 'CLAUDE.md', selected: true },\n { value: 'cursor', label: 'Cursor', hint: 'CURSOR.md', templateFile: 'CURSOR.md', destFile: 'CURSOR.md', selected: true },\n { value: 'codex', label: 'Codex / OpenAI', hint: 'AGENTS.md', templateFile: 'AGENTS.md', destFile: 'AGENTS.md', selected: true },\n { value: 'gemini', label: 'Gemini CLI', hint: 'GEMINI.md', templateFile: 'GEMINI.md', destFile: 'GEMINI.md', selected: true },\n { value: 'copilot', label: 'GitHub Copilot', hint: '.github/copilot-instructions.md', templateFile: 'copilot-instructions.md', destFile: '.github/copilot-instructions.md', selected: true },\n { value: 'windsurf', label: 'Windsurf', hint: '.windsurfrules', templateFile: '.windsurfrules', destFile: '.windsurfrules', selected: true },\n { value: 'cline', label: 'Cline', hint: '.clinerules', templateFile: '.clinerules', destFile: '.clinerules', selected: false },\n { value: 'aider', label: 'Aider', hint: 'CONVENTIONS.md', templateFile: 'CONVENTIONS.md', destFile: 'CONVENTIONS.md', selected: false },\n];\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport { join, resolve } from 'path';\nimport {\n extractSection,\n extractBullets,\n countLogEntries,\n lastLogDate,\n countDecisions,\n relativeTime,\n} from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const statusCommand = new Command('status')\n .description('Show last session summary and what\\'s next')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink status\n mindlink status --json\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n // Not initialized?\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const memoryPath = join(brainDir, 'MEMORY.md');\n\n const sessionMd = existsSync(sessionPath) ? readFileSync(sessionPath, 'utf8') : '';\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n const memoryMd = existsSync(memoryPath) ? readFileSync(memoryPath, 'utf8') : '';\n\n // Parse SESSION.md — strip comment placeholders\n const rawTask = extractSection(sessionMd, 'Current Task');\n const currentTask = rawTask.startsWith('<!--') ? '' : rawTask;\n const inProgress = extractBullets(extractSection(sessionMd, 'In Progress'));\n const decisions = extractBullets(extractSection(sessionMd, 'Decisions Made This Session'));\n const blockers = extractBullets(extractSection(sessionMd, 'Blockers'));\n const upNext = extractBullets(extractSection(sessionMd, 'Up Next'));\n\n // Parse LOG.md\n const sessionCount = countLogEntries(logMd);\n const lastSession = lastLogDate(logMd);\n\n // Parse MEMORY.md\n const decisionCount = countDecisions(memoryMd);\n\n // Last updated\n const lastUpdated = existsSync(sessionPath)\n ? relativeTime(statSync(sessionPath).mtime)\n : 'never';\n\n const isEmpty =\n !currentTask &&\n inProgress.length === 0 &&\n decisions.length === 0 &&\n blockers.length === 0 &&\n upNext.length === 0 &&\n sessionCount === 0;\n\n // ── JSON output ───────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify({\n currentTask,\n inProgress,\n decisions,\n blockers,\n upNext,\n stats: { sessionsLogged: sessionCount, decisionsMade: decisionCount, lastUpdated },\n }, null, 2));\n return;\n }\n\n // ── Human output ──────────────────────────────────────────────────────────\n console.log('');\n\n if (isEmpty) {\n console.log(` ${chalk.dim('No sessions logged yet.')}`);\n console.log(` Start an AI session — it will read ${chalk.cyan('.brain/')} automatically.`);\n console.log('');\n return;\n }\n\n // Last session date\n if (lastSession) {\n console.log(` ${chalk.bold('Last session')} ${chalk.dim('—')} ${lastSession}`);\n console.log('');\n }\n\n // Current task\n if (currentTask && !currentTask.startsWith('<!--')) {\n console.log(` ${chalk.bold('Current task')}`);\n console.log(` ${chalk.cyan('◎')} ${currentTask}`);\n console.log('');\n }\n\n // In progress\n if (inProgress.length > 0) {\n console.log(` ${chalk.bold('In progress')}`);\n for (const item of inProgress) {\n console.log(` ${chalk.yellow('●')} ${item}`);\n }\n console.log('');\n }\n\n // Decisions this session\n if (decisions.length > 0) {\n console.log(` ${chalk.bold('Decided this session')}`);\n for (const item of decisions) {\n console.log(` ${chalk.green('✓')} ${item}`);\n }\n console.log('');\n }\n\n // Blockers\n if (blockers.length > 0) {\n console.log(` ${chalk.bold('Blockers')}`);\n for (const item of blockers) {\n console.log(` ${chalk.red('✗')} ${item}`);\n }\n console.log('');\n }\n\n // Up next\n if (upNext.length > 0) {\n console.log(` ${chalk.bold('Up next')}`);\n for (const item of upNext) {\n console.log(` ${chalk.dim('→')} ${item}`);\n }\n console.log('');\n }\n\n // Stats\n console.log(` ${chalk.dim('─────────────────────────────')}`);\n console.log(` ${chalk.dim('Sessions logged')} ${String(sessionCount).padStart(4)}`);\n console.log(` ${chalk.dim('Decisions made')} ${String(decisionCount).padStart(4)}`);\n console.log(` ${chalk.dim('Last updated')} ${lastUpdated}`);\n console.log('');\n console.log(` Run ${chalk.cyan('mindlink log')} to see full history.`);\n console.log('');\n });\n","/**\n * Extract the content of a markdown section by heading name.\n * Returns lines under the heading until the next heading of same/higher level.\n */\nexport function extractSection(markdown: string, heading: string): string {\n const lines = markdown.split('\\n');\n let inSection = false;\n let headingLevel = 0;\n const result: string[] = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n\n if (title.toLowerCase() === heading.toLowerCase()) {\n inSection = true;\n headingLevel = level;\n continue;\n }\n\n if (inSection && level <= headingLevel) {\n break;\n }\n }\n\n if (inSection) {\n result.push(line);\n }\n }\n\n return result.join('\\n').trim();\n}\n\n/**\n * Extract bullet list items from a markdown string.\n * Returns non-empty, non-comment lines that start with - or *.\n */\nexport function extractBullets(text: string): string[] {\n return text\n .split('\\n')\n .filter(l => /^[-*]\\s+/.test(l.trim()))\n .map(l => l.replace(/^[-*]\\s+/, '').trim())\n .filter(l => l.length > 0 && !l.startsWith('<!--'));\n}\n\n/**\n * Count how many top-level log entries exist in LOG.md.\n * Each entry starts with a ## heading.\n */\nexport function countLogEntries(markdown: string): number {\n return (markdown.match(/^##\\s+/gm) ?? []).length;\n}\n\n/**\n * Get the date of the last log entry in LOG.md.\n */\nexport function lastLogDate(markdown: string): string | null {\n const matches = markdown.match(/^##\\s+(.+)/m);\n return matches ? matches[1].trim() : null;\n}\n\n/**\n * Count how many rows exist in the Key Decisions table in MEMORY.md.\n * Skips the header and divider rows.\n */\nexport function countDecisions(markdown: string): number {\n const section = extractSection(markdown, 'Key Decisions');\n return section\n .split('\\n')\n .filter(l => l.startsWith('|') && !l.includes('---') && !l.toLowerCase().includes('decision'))\n .filter(l => {\n const cols = l.split('|').map(c => c.trim()).filter(Boolean);\n return cols.some(c => c.length > 0);\n }).length;\n}\n\n/**\n * Parse LOG.md into individual session entry objects.\n * Each entry starts with a ## heading.\n */\nexport interface LogEntry {\n heading: string;\n body: string;\n}\n\nexport function parseLogEntries(markdown: string): LogEntry[] {\n const blocks = markdown.split(/(?=^## )/m).filter(b => b.trimStart().startsWith('## '));\n return blocks.map(block => {\n const newline = block.indexOf('\\n');\n const heading = newline === -1 ? block.slice(3).trim() : block.slice(3, newline).trim();\n const body = newline === -1 ? '' : block.slice(newline + 1).trim();\n return { heading, body };\n });\n}\n\n/**\n * Get relative time string from a file's last modified date.\n */\nexport function relativeTime(date: Date): string {\n const diff = Date.now() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 2) return 'just now';\n if (minutes < 60) return `${minutes} minutes ago`;\n if (hours < 24) return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n return `${days} day${days > 1 ? 's' : ''} ago`;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { parseLogEntries } from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const logCommand = new Command('log')\n .description('Print session history')\n .option('--all', 'Show full history')\n .option('--limit <n>', 'Show last N sessions', '10')\n .option('--since <date>', 'Show sessions from a date (matched against heading text)')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink log\n mindlink log --all\n mindlink log --limit 20\n mindlink log --since \"Apr 1\"\n mindlink log --json\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const logPath = join(brainDir, 'LOG.md');\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n\n let entries = parseLogEntries(logMd);\n\n if (entries.length === 0) {\n console.log('');\n console.log(` ${chalk.dim('No sessions logged yet.')}`);\n console.log(` ${chalk.dim('Your AI will append an entry here at the end of each session.')}`);\n console.log('');\n return;\n }\n\n // Filter by --since\n if (opts.since) {\n const since = opts.since.toLowerCase();\n entries = entries.filter(e => e.heading.toLowerCase().includes(since));\n }\n\n // Limit (unless --all)\n const limit = opts.all ? entries.length : parseInt(opts.limit, 10);\n const total = entries.length;\n const shown = entries.slice(0, limit);\n\n // ── JSON output ───────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify(shown, null, 2));\n return;\n }\n\n // ── Human output ──────────────────────────────────────────────────────────\n console.log('');\n\n if (!opts.all) {\n const rest = total - shown.length;\n const hint = rest > 0 ? ` ${chalk.dim(`${rest} more — run mindlink log --all to see everything`)}` : '';\n console.log(` ${chalk.dim(`Showing last ${shown.length} of ${total} session${total !== 1 ? 's' : ''}`)}${hint ? '' : ''}`);\n if (rest > 0) console.log(` ${chalk.dim(`${rest} more — run mindlink log --all to see everything`)}`);\n console.log('');\n }\n\n for (const entry of shown) {\n console.log(` ${chalk.bold('──')} ${chalk.cyan(entry.heading)} ${'─'.repeat(Math.max(0, 40 - entry.heading.length))}`);\n if (entry.body) {\n const lines = entry.body.split('\\n');\n for (const line of lines) {\n console.log(` ${chalk.dim(line)}`);\n }\n }\n console.log('');\n }\n\n // Check for archive files and show friendly notice\n const archiveFiles = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}-\\d{2}\\.md$/.test(f)).sort();\n if (archiveFiles.length > 0) {\n console.log(` ${chalk.dim('─'.repeat(44))}`);\n console.log(` ${chalk.dim('Like all human brains, MindLink forgets old sessions')}`);\n console.log(` ${chalk.dim('that haven\\'t come up in a while — that\\'s by design.')}`);\n console.log(` ${chalk.dim(`Older entries archived to: ${archiveFiles.join(', ')}`)}`);\n console.log(` ${chalk.dim('Anything that truly matters belongs in MEMORY.md.')}`);\n console.log('');\n }\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR, BRAIN_TEMPLATES_DIR } from '../utils/paths.js';\n\nexport const clearCommand = new Command('clear')\n .description('Reset SESSION.md for a fresh session start')\n .option('-y, --yes', 'Skip confirmation prompt')\n .addHelpText('after', `\nWhat it does:\n Resets SESSION.md to a blank template — wipes current task, in-progress items,\n blockers, and up-next. MEMORY.md, LOG.md, and SHARED.md are untouched.\n\nNot what you need?\n mindlink reset — wipe ALL memory files back to blank (scorched earth)\n mindlink uninstall — remove MindLink from this project entirely\n\nExamples:\n mindlink clear\n mindlink clear --yes\n `)\n .action(async (_opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log('');\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n try {\n const templatePath = join(BRAIN_TEMPLATES_DIR, 'SESSION.md');\n const destPath = join(brainDir, 'SESSION.md');\n writeFileSync(destPath, readFileSync(templatePath, 'utf8'));\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n console.log(` ${chalk.green('✓')} SESSION.md cleared. Ready for a clean session.`);\n console.log(` ${chalk.dim('MEMORY.md, LOG.md, and SHARED.md are untouched.')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { confirm, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR, BRAIN_TEMPLATES_DIR } from '../utils/paths.js';\n\nconst BRAIN_FILES = ['MEMORY.md', 'SESSION.md', 'SHARED.md', 'LOG.md'];\n\nexport const resetCommand = new Command('reset')\n .description('Wipe all .brain/ memory files and start completely fresh')\n .option('-y, --yes', 'Skip confirmation prompt')\n .addHelpText('after', `\nWhat it does:\n Resets MEMORY.md, SESSION.md, SHARED.md, and LOG.md to blank templates.\n Your settings (config.json) and agent instruction files are untouched.\n\nNot what you need?\n mindlink clear — reset SESSION.md only (lighter option)\n mindlink uninstall — remove MindLink from this project entirely\n\nExamples:\n mindlink reset\n mindlink reset --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n if (!opts.yes) {\n console.log(` ${chalk.yellow('!')} This will wipe ALL .brain/ memory files and start fresh.`);\n console.log(` ${chalk.dim('MEMORY.md, SESSION.md, SHARED.md, and LOG.md → reset to blank templates.')}`);\n console.log(` ${chalk.dim('Settings and agent instruction files are untouched.')}`);\n console.log('');\n console.log(` ${chalk.dim('Lighter option: mindlink clear — resets SESSION.md only')}`);\n console.log(` ${chalk.dim('Remove entirely: mindlink uninstall — removes MindLink from this project')}`);\n console.log('');\n\n const confirmed = await confirm({\n message: 'Reset everything? This cannot be undone (unless .brain/ is tracked by git).',\n });\n\n if (isCancel(confirmed) || !confirmed) {\n cancel('Cancelled.');\n process.exit(0);\n }\n console.log('');\n }\n\n const errors: string[] = [];\n\n for (const file of BRAIN_FILES) {\n try {\n const templatePath = join(BRAIN_TEMPLATES_DIR, file);\n const destPath = join(brainDir, file);\n if (existsSync(templatePath)) {\n writeFileSync(destPath, readFileSync(templatePath, 'utf8'));\n }\n } catch (err: unknown) {\n errors.push(`${file}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n if (errors.length > 0) {\n for (const err of errors) console.log(` ${chalk.red('✗')} ${err}`);\n console.log('');\n process.exit(1);\n }\n\n console.log(` ${chalk.green('✓')} .brain/ reset. All memory files are blank.`);\n console.log(` ${chalk.dim('Your AI will wake up with no memory of past sessions.')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, multiselect, text, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n appendFileSync,\n mkdirSync,\n unlinkSync,\n} from 'fs';\nimport { join, resolve, dirname } from 'path';\nimport { BRAIN_DIR, AGENT_TEMPLATES_DIR, HOOKS_TEMPLATES_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\ninterface BrainConfig {\n gitTracking: boolean;\n autoSync: boolean;\n agents: string[];\n maxLogEntries: number;\n}\n\nfunction readConfig(brainDir: string): BrainConfig {\n return JSON.parse(readFileSync(join(brainDir, 'config.json'), 'utf8'));\n}\n\nfunction saveConfig(brainDir: string, config: BrainConfig): void {\n writeFileSync(join(brainDir, 'config.json'), JSON.stringify(config, null, 2));\n}\n\nfunction enableGitTracking(projectPath: string): void {\n const gitignorePath = join(projectPath, '.gitignore');\n if (!existsSync(gitignorePath)) return;\n const content = readFileSync(gitignorePath, 'utf8');\n // Remove the mindlink .brain/ block\n const cleaned = content\n .replace(/\\n# MindLink memory[^\\n]*\\n\\.brain\\/\\n?/g, '')\n .replace(/\\n?\\.brain\\/\\n?/g, '\\n');\n writeFileSync(gitignorePath, cleaned.trimEnd() + '\\n');\n}\n\nfunction disableGitTracking(projectPath: string): void {\n const gitignorePath = join(projectPath, '.gitignore');\n const entry = '\\n# MindLink memory (personal — not shared with team)\\n.brain/\\n';\n if (existsSync(gitignorePath)) {\n const content = readFileSync(gitignorePath, 'utf8');\n if (!content.includes('.brain/')) appendFileSync(gitignorePath, entry);\n } else {\n writeFileSync(gitignorePath, entry.trim() + '\\n');\n }\n}\n\nfunction addAgentFile(projectPath: string, agentValue: string): string | null {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) return null;\n const destPath = join(projectPath, agent.destFile);\n if (existsSync(destPath)) return null; // already there\n mkdirSync(dirname(destPath), { recursive: true });\n writeFileSync(destPath, readFileSync(join(AGENT_TEMPLATES_DIR, agent.templateFile), 'utf8'));\n return agent.destFile;\n}\n\nfunction removeAgentFile(projectPath: string, agentValue: string): string | null {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) return null;\n const destPath = join(projectPath, agent.destFile);\n if (!existsSync(destPath)) return null;\n unlinkSync(destPath);\n return agent.destFile;\n}\n\nfunction addClaudeHook(projectPath: string): boolean {\n const hookDest = join(projectPath, '.claude', 'settings.json');\n if (existsSync(hookDest)) return false;\n mkdirSync(dirname(hookDest), { recursive: true });\n writeFileSync(hookDest, readFileSync(join(HOOKS_TEMPLATES_DIR, 'claude-settings.json'), 'utf8'));\n return true;\n}\n\nexport const configCommand = new Command('config')\n .description('Change settings for the current project')\n .addHelpText('after', `\nExamples:\n mindlink config\n `)\n .action(async () => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n // Non-TTY: just print current settings and exit\n if (!process.stdin.isTTY) {\n const cfg = readConfig(brainDir);\n const agentLabels = cfg.agents\n .map((v: string) => AGENTS.find(a => a.value === v)?.hint ?? v)\n .join(', ');\n console.log(JSON.stringify({ ...cfg, agentFiles: agentLabels }, null, 2));\n return;\n }\n\n let config = readConfig(brainDir);\n\n // ── Main menu loop ────────────────────────────────────────────────────────\n while (true) {\n console.log('');\n console.log(` ${chalk.bold('Current settings')} ${chalk.dim('·')} ${chalk.dim(projectPath)}`);\n console.log('');\n console.log(` Git tracking : ${config.gitTracking ? chalk.green('enabled') : chalk.dim('disabled')} ${chalk.dim(config.gitTracking ? '(team shares memory)' : '(.brain/ excluded from git)')}`);\n console.log(` Auto-sync : ${config.autoSync ? chalk.green('enabled') : chalk.dim('disabled')} ${chalk.dim(config.autoSync ? '(watch mode)' : '(run mindlink sync manually)')}`);\n console.log(` Max log entries: ${chalk.dim(String(config.maxLogEntries))} ${chalk.dim('(archive rotation threshold)')}`);\n\n const agentLabels = config.agents\n .map(v => AGENTS.find(a => a.value === v)?.hint ?? v)\n .join(', ');\n console.log(` Agent files : ${chalk.dim(agentLabels || 'none')}`);\n console.log('');\n\n const action = await select({\n message: 'What would you like to change?',\n options: [\n { value: 'git', label: 'Git tracking' },\n { value: 'sync', label: 'Auto-sync' },\n { value: 'memory', label: 'Memory settings', hint: 'log rotation threshold' },\n { value: 'agents', label: 'Agent instruction files' },\n { value: 'exit', label: 'Exit' },\n ],\n });\n\n if (isCancel(action) || action === 'exit') break;\n\n // ── Git tracking ───────────────────────────────────────────────────────\n if (action === 'git') {\n const choice = await select({\n message: 'Git tracking — should .brain/ be committed to git?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'commit memory (share with your team)' },\n { value: 'disable', label: 'Disable', hint: 'add to .gitignore (keep memory personal)' },\n { value: 'back', label: '↩ Back' },\n ],\n initialValue: config.gitTracking ? 'enable' : 'disable',\n });\n\n if (isCancel(choice) || choice === 'back') continue;\n\n const newValue = choice === 'enable';\n if (newValue === config.gitTracking) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n if (newValue) {\n enableGitTracking(projectPath);\n console.log(` ${chalk.green('✓')} Git tracking enabled. .brain/ will be committed.`);\n } else {\n disableGitTracking(projectPath);\n console.log(` ${chalk.green('✓')} .gitignore updated. .brain/ will no longer be tracked.`);\n }\n\n config.gitTracking = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Git tracking')}`);\n }\n\n // ── Auto-sync ──────────────────────────────────────────────────────────\n if (action === 'sync') {\n const choice = await select({\n message: 'Auto-sync mode',\n options: [\n { value: 'enable', label: 'Enable', hint: 'watch for changes, sync automatically' },\n { value: 'disable', label: 'Disable', hint: 'run mindlink sync manually' },\n { value: 'back', label: '↩ Back' },\n ],\n initialValue: config.autoSync ? 'enable' : 'disable',\n });\n\n if (isCancel(choice) || choice === 'back') continue;\n\n const newValue = choice === 'enable';\n if (newValue === config.autoSync) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n config.autoSync = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.green('✓')} Auto-sync ${newValue ? 'enabled' : 'disabled'}.`);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Auto-sync')}`);\n }\n\n // ── Memory settings ───────────────────────────────────────────────────\n if (action === 'memory') {\n console.log('');\n console.log(` ${chalk.dim('How many session entries to keep in LOG.md before archiving older ones.')}`);\n console.log(` ${chalk.dim('Archived entries move to LOG-YYYY-MM-DD.md — never deleted.')}`);\n console.log(` ${chalk.dim('Lower = lighter context for your AI. Higher = more history visible.')}`);\n console.log('');\n\n const input = await text({\n message: `Max log entries before archiving (current: ${config.maxLogEntries})`,\n placeholder: String(config.maxLogEntries),\n validate(value) {\n const n = parseInt(value, 10);\n if (isNaN(n) || n < 1) return 'Enter a number greater than 0';\n },\n });\n\n if (isCancel(input)) continue;\n\n const newValue = parseInt(input as string, 10);\n if (newValue === config.maxLogEntries) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n config.maxLogEntries = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.green('✓')} Max log entries set to ${newValue}.`);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Memory settings')}`);\n }\n\n // ── Agent files ────────────────────────────────────────────────────────\n if (action === 'agents') {\n const agentChoices = AGENTS.map(a => ({\n value: a.value,\n label: `${a.label.padEnd(18)} ${chalk.dim(a.hint)}`,\n hint: a.selected ? 'recommended' : undefined,\n }));\n\n const result = await multiselect({\n message: 'Which AI agents do you use?',\n options: agentChoices,\n initialValues: config.agents,\n required: false,\n });\n\n if (isCancel(result)) continue;\n\n const newAgents = result as string[];\n const added = newAgents.filter(v => !config.agents.includes(v));\n const removed = config.agents.filter(v => !newAgents.includes(v));\n\n const addedFiles: string[] = [];\n const removedFiles: string[] = [];\n\n for (const v of added) {\n const f = addAgentFile(projectPath, v);\n if (f) addedFiles.push(f);\n if (v === 'claude') {\n if (addClaudeHook(projectPath)) addedFiles.push('.claude/settings.json');\n }\n }\n\n for (const v of removed) {\n const f = removeAgentFile(projectPath, v);\n if (f) removedFiles.push(f);\n }\n\n config.agents = newAgents;\n saveConfig(brainDir, config);\n\n if (addedFiles.length === 0 && removedFiles.length === 0) {\n console.log(` ${chalk.dim('No change.')}`);\n } else {\n for (const f of addedFiles) console.log(` ${chalk.green('✓')} ${f} added.`);\n for (const f of removedFiles) console.log(` ${chalk.dim('✗')} ${f} removed.`);\n }\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Agent instruction files')}`);\n }\n }\n\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport { join, resolve, basename } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nfunction timestamp(): string {\n const d = new Date();\n const month = d.toLocaleString('default', { month: 'short' });\n const day = d.getDate();\n const time = d.toTimeString().slice(0, 5);\n return `${month} ${day} ${time}`;\n}\n\nfunction describeFile(filePath: string): string {\n if (!existsSync(filePath)) return chalk.dim('(missing)');\n const stat = statSync(filePath);\n const kb = (stat.size / 1024).toFixed(1);\n const content = readFileSync(filePath, 'utf8');\n const entries = (content.match(/^## /gm) ?? []).length;\n const name = basename(filePath);\n if (name === 'LOG.md') return entries > 0 ? `${entries} session${entries !== 1 ? 's' : ''}` : chalk.dim('empty');\n if (name === 'SHARED.md') {\n const lines = content.split('\\n').filter(l => l.trim() && !l.startsWith('#') && !l.startsWith('<!--') && !l.startsWith('>') && l !== '---').length;\n return lines > 0 ? `${lines} line${lines !== 1 ? 's' : ''}` : chalk.dim('empty');\n }\n if (name === 'SESSION.md') {\n const hasTask = content.includes('## Current Task') && !content.includes('<!-- ');\n return hasTask ? chalk.green('active') : chalk.dim('idle');\n }\n return `${kb} KB`;\n}\n\nexport const syncCommand = new Command('sync')\n .description('Sync shared context between sessions')\n .option('--once', 'Sync once and exit (default: watch mode)')\n .addHelpText('after', `\nExamples:\n mindlink sync\n mindlink sync --once\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const sharedPath = join(brainDir, 'SHARED.md');\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const memoryPath = join(brainDir, 'MEMORY.md');\n\n // ── --once mode ───────────────────────────────────────────────────────────\n if (opts.once) {\n console.log('');\n console.log(` ${chalk.dim('Checking shared context...')}`);\n console.log('');\n\n const files = [\n { label: 'SHARED.md ', path: sharedPath },\n { label: 'SESSION.md ', path: sessionPath },\n { label: 'LOG.md ', path: logPath },\n { label: 'MEMORY.md ', path: memoryPath },\n ];\n\n for (const { label, path } of files) {\n const desc = describeFile(path);\n const mtime = existsSync(path) ? statSync(path).mtime : null;\n const age = mtime\n ? (() => {\n const diff = Date.now() - mtime.getTime();\n const min = Math.floor(diff / 60000);\n const hr = Math.floor(diff / 3600000);\n if (min < 2) return 'just now';\n if (min < 60) return `${min}m ago`;\n return `${hr}h ago`;\n })()\n : '';\n console.log(` ${chalk.dim(label)} ${desc} ${chalk.dim(age)}`);\n }\n\n console.log('');\n console.log(` ${chalk.green('✓')} All sessions share the same .brain/ folder.`);\n console.log(` ${chalk.dim('Any session that writes to SHARED.md is immediately visible to all others.')}`);\n console.log('');\n return;\n }\n\n // ── Watch mode ────────────────────────────────────────────────────────────\n // Dynamic import so chokidar is only loaded when needed\n const { watch } = await import('chokidar');\n\n console.log('');\n console.log(` ${chalk.dim('Watching for changes...')} ${chalk.dim('(Ctrl+C to stop)')}`);\n console.log('');\n\n const watcher = watch(brainDir, {\n ignoreInitial: true,\n ignored: /(^|[/\\\\])\\../,\n persistent: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n });\n\n watcher.on('change', (filePath: string) => {\n const name = basename(filePath);\n const stat = statSync(filePath);\n const kb = (stat.size / 1024).toFixed(1);\n console.log(` ${chalk.dim('[' + timestamp() + ']')} ${chalk.cyan(name)} updated ${chalk.dim(kb + ' KB')} ${chalk.green('→ synced ✓')}`);\n });\n\n watcher.on('add', (filePath: string) => {\n const name = basename(filePath);\n console.log(` ${chalk.dim('[' + timestamp() + ']')} ${chalk.cyan(name)} created ${chalk.green('→ synced ✓')}`);\n });\n\n watcher.on('error', (err: unknown) => {\n console.log(` ${chalk.red('✗')} Watch error: ${err instanceof Error ? err.message : String(err)}`);\n });\n\n // Keep process alive\n process.on('SIGINT', () => {\n watcher.close();\n console.log('');\n console.log(` ${chalk.dim('Stopped.')}`);\n console.log('');\n process.exit(0);\n });\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel, spinner } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst require = createRequire(import.meta.url);\n\nfunction currentVersion(): string {\n try {\n const pkg = require(join(__dirname, '..', '..', 'package.json'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nasync function latestVersion(): Promise<string | null> {\n try {\n const { default: https } = await import('https');\n return new Promise((resolve) => {\n const req = https.get(\n 'https://registry.npmjs.org/mindlink/latest',\n { headers: { 'User-Agent': 'mindlink-cli' } },\n (res) => {\n let data = '';\n res.on('data', (chunk: Buffer) => { data += chunk; });\n res.on('end', () => {\n try {\n const parsed = JSON.parse(data);\n resolve(parsed.version ?? null);\n } catch {\n resolve(null);\n }\n });\n }\n );\n req.on('error', () => resolve(null));\n req.setTimeout(8000, () => { req.destroy(); resolve(null); });\n });\n } catch {\n return null;\n }\n}\n\nfunction semverGt(a: string, b: string): boolean {\n const pa = a.split('.').map(Number);\n const pb = b.split('.').map(Number);\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return false;\n}\n\nexport const updateCommand = new Command('update')\n .description('Update mindlink to the latest version')\n .addHelpText('after', `\nExamples:\n mindlink update\n `)\n .action(async () => {\n const current = currentVersion();\n\n // Non-TTY: just check and report, don't prompt\n if (!process.stdin.isTTY) {\n const latest = await latestVersion();\n if (!latest) {\n console.log(JSON.stringify({ current, latest: null, upToDate: null }));\n process.exit(1);\n }\n const upToDate = !semverGt(latest, current);\n console.log(JSON.stringify({ current, latest, upToDate }));\n if (!upToDate) process.exit(2); // exit 2 = update available\n return;\n }\n\n const s = spinner();\n s.start('Checking for updates...');\n\n const latest = await latestVersion();\n\n if (!latest) {\n s.stop('Could not reach npm registry.');\n console.log('');\n console.log(` ${chalk.red('✗')} Could not check for updates. Check your internet connection.`);\n console.log(` ${chalk.dim('Latest releases: github.com/404-not-found/mindlink/releases')}`);\n console.log('');\n process.exit(1);\n }\n\n s.stop('Done.');\n console.log('');\n console.log(` Current version : ${chalk.dim(current)}`);\n console.log(` Latest version : ${semverGt(latest, current) ? chalk.green(latest) : chalk.dim(latest)}`);\n console.log('');\n\n if (!semverGt(latest, current)) {\n console.log(` ${chalk.green('✓')} You're on the latest version (${current}).`);\n console.log('');\n return;\n }\n\n const action = await select({\n message: `Update to ${latest}?`,\n options: [\n { value: 'update', label: `Update to ${latest}` },\n { value: 'skip', label: 'Skip this version' },\n { value: 'cancel', label: 'Cancel' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel' || action === 'skip') {\n if (action === 'skip') {\n console.log(` ${chalk.dim('Skipped. Run mindlink update again to install later.')}`);\n } else {\n cancel('Cancelled.');\n }\n console.log('');\n return;\n }\n\n // Install\n const s2 = spinner();\n s2.start(`Installing mindlink@${latest}...`);\n\n try {\n execSync(`npm install -g mindlink@${latest}`, { stdio: 'pipe' });\n s2.stop('Done.');\n console.log('');\n console.log(` ${chalk.green('✓')} Updated to ${latest}.`);\n console.log(` ${chalk.dim('See what\\'s new: github.com/404-not-found/mindlink/releases')}`);\n } catch (err: unknown) {\n s2.stop('Failed.');\n console.log('');\n console.log(` ${chalk.red('✗')} Update failed.`);\n console.log(` ${chalk.dim('Try: npm install -g mindlink@' + latest)}`);\n if (err instanceof Error && err.message.includes('EACCES')) {\n console.log(` ${chalk.dim('Permission error — try: sudo npm install -g mindlink@' + latest)}`);\n }\n process.exit(1);\n }\n\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport {\n extractSection,\n extractBullets,\n countLogEntries,\n lastLogDate,\n parseLogEntries,\n} from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const summaryCommand = new Command('summary')\n .description('Print a full briefing of what your AI knows — great for sharing or reviewing context')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink summary\n mindlink summary --json\n\nTip: your AI agent can run this itself — ask it to run \"mindlink summary\"\nto get a full briefing on the current project state.\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const memoryPath = join(brainDir, 'MEMORY.md');\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const sharedPath = join(brainDir, 'SHARED.md');\n\n const memoryMd = existsSync(memoryPath) ? readFileSync(memoryPath, 'utf8') : '';\n const sessionMd = existsSync(sessionPath) ? readFileSync(sessionPath, 'utf8') : '';\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n const sharedMd = existsSync(sharedPath) ? readFileSync(sharedPath, 'utf8') : '';\n\n // Parse memory\n const projectOverview = extractSection(memoryMd, 'Project Overview') ||\n extractSection(memoryMd, 'Project Identity') ||\n extractSection(memoryMd, 'What Is This Project');\n const techStack = extractSection(memoryMd, 'Tech Stack') ||\n extractSection(memoryMd, 'Stack');\n const decisions = extractBullets(\n extractSection(memoryMd, 'Key Decisions') ||\n extractSection(memoryMd, 'Decisions')\n );\n\n // Parse session\n const rawTask = extractSection(sessionMd, 'Current Task');\n const task = rawTask.startsWith('<!--') ? '' : rawTask;\n const inProg = extractBullets(extractSection(sessionMd, 'In Progress'));\n const upNext = extractBullets(extractSection(sessionMd, 'Up Next'));\n const blockers = extractBullets(extractSection(sessionMd, 'Blockers'));\n\n // Parse log\n const sessionCount = countLogEntries(logMd);\n const lastDate = lastLogDate(logMd);\n const recentLogs = parseLogEntries(logMd).slice(0, 3);\n\n // Parse shared\n const sharedLines = sharedMd\n .split('\\n')\n .filter(l => l.trim() && !l.startsWith('#') && !l.startsWith('<!--') && !l.startsWith('>') && l !== '---')\n .slice(0, 10);\n\n // ── JSON ─────────────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify({\n project: { overview: projectOverview, techStack, decisions },\n session: { currentTask: task, inProgress: inProg, upNext, blockers },\n log: { totalSessions: sessionCount, lastSession: lastDate, recent: recentLogs },\n shared: sharedLines,\n }, null, 2));\n return;\n }\n\n // ── Human ─────────────────────────────────────────────────────────────────\n console.log('');\n console.log(` ${chalk.bold('◉ MindLink Memory Summary')} ${chalk.dim('·')} ${chalk.dim(projectPath)}`);\n console.log('');\n\n // Project\n if (projectOverview) {\n console.log(` ${chalk.bold('Project')}`);\n for (const line of projectOverview.split('\\n').filter(Boolean)) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n if (techStack) {\n console.log(` ${chalk.bold('Tech stack')}`);\n for (const line of techStack.split('\\n').filter(Boolean)) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n if (decisions.length > 0) {\n console.log(` ${chalk.bold('Key decisions')}`);\n for (const d of decisions.slice(0, 5)) {\n console.log(` ${chalk.dim('·')} ${d}`);\n }\n if (decisions.length > 5) {\n console.log(` ${chalk.dim(` …and ${decisions.length - 5} more in MEMORY.md`)}`);\n }\n console.log('');\n }\n\n // Current session\n if (task || inProg.length > 0 || upNext.length > 0) {\n console.log(` ${chalk.bold('Current session')}`);\n if (task) console.log(` ${chalk.cyan('◎')} ${task}`);\n for (const item of inProg) console.log(` ${chalk.yellow('●')} ${item}`);\n for (const item of blockers) console.log(` ${chalk.red('✗')} ${item}`);\n for (const item of upNext) console.log(` ${chalk.dim('→')} ${item}`);\n console.log('');\n }\n\n // Shared context\n if (sharedLines.length > 0) {\n console.log(` ${chalk.bold('Shared context')} ${chalk.dim('(from other sessions)')}`);\n for (const line of sharedLines) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n // History\n if (recentLogs.length > 0) {\n console.log(` ${chalk.bold('Recent sessions')} ${chalk.dim(`(${sessionCount} total)`)}`);\n for (const entry of recentLogs) {\n console.log(` ${chalk.dim('──')} ${chalk.cyan(entry.heading)}`);\n if (entry.body) {\n const preview = entry.body.split('\\n').filter(Boolean)[0] ?? '';\n if (preview) console.log(` ${chalk.dim(preview.slice(0, 72))}`);\n }\n }\n console.log('');\n }\n\n if (!projectOverview && !task && sessionCount === 0 && sharedLines.length === 0) {\n console.log(` ${chalk.dim('Memory files are blank — your AI hasn\\'t written anything yet.')}`);\n console.log(` ${chalk.dim('Start a session and let it run — it will fill these in automatically.')}`);\n console.log('');\n }\n\n console.log(` ${chalk.dim('─────────────────────────────────────────────────')}`);\n console.log(` ${chalk.dim('Powered by MindLink — github.com/404-not-found/mindlink')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, rmSync, unlinkSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\nexport const uninstallCommand = new Command('uninstall')\n .description('Remove MindLink from the current project')\n .option('-y, --yes', 'Skip confirmation and remove all project files')\n .addHelpText('after', `\nWhat gets removed:\n - .brain/ folder (all memory files)\n - Agent instruction files (CLAUDE.md, CURSOR.md, etc.)\n - .claude/settings.json hook (if it was created by MindLink)\n\nWhat stays:\n - The mindlink CLI itself (run: npm uninstall -g mindlink)\n - Any files MindLink did not create\n\nNot what you need?\n mindlink clear — reset SESSION.md only (fresh session, keep everything else)\n mindlink reset — wipe memory back to blank (keep MindLink installed)\n\nExamples:\n mindlink uninstall\n mindlink uninstall --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Nothing to uninstall here.`);\n console.log('');\n process.exit(1);\n }\n\n // Read config to know which agent files to remove\n let agents: string[] = [];\n try {\n const cfg = JSON.parse(readFileSync(join(brainDir, 'config.json'), 'utf8'));\n agents = cfg.agents ?? [];\n } catch {\n // config unreadable — use all agents as a safe default\n agents = AGENTS.map(a => a.value);\n }\n\n console.log('');\n\n if (!opts.yes) {\n console.log(` ${chalk.yellow('!')} This will remove MindLink from this project:`);\n console.log(` ${chalk.dim('· .brain/ (all memory files)')}`);\n for (const v of agents) {\n const agent = AGENTS.find(a => a.value === v);\n if (agent) console.log(` ${chalk.dim('· ' + agent.destFile)}`);\n }\n if (agents.includes('claude')) {\n console.log(` ${chalk.dim('· .claude/settings.json (hook)')}`);\n }\n console.log('');\n console.log(` ${chalk.dim('The mindlink CLI itself is NOT removed.')}`);\n console.log(` ${chalk.dim('To remove the CLI: npm uninstall -g mindlink')}`);\n console.log('');\n console.log(` ${chalk.dim('Lighter options:')}`);\n console.log(` ${chalk.dim(' mindlink clear — fresh session only (keeps all memory)')}`);\n console.log(` ${chalk.dim(' mindlink reset — wipe memory (keeps MindLink installed)')}`);\n console.log('');\n\n const action = await select({\n message: 'Remove MindLink from this project?',\n options: [\n { value: 'remove', label: 'Yes, remove everything listed above' },\n { value: 'cancel', label: 'Cancel' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel') {\n cancel('Cancelled.');\n console.log('');\n return;\n }\n console.log('');\n }\n\n const removed: string[] = [];\n const errors: string[] = [];\n\n // Remove .brain/\n try {\n rmSync(brainDir, { recursive: true, force: true });\n removed.push('.brain/');\n } catch (err: unknown) {\n errors.push(`.brain/: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Remove agent instruction files\n for (const v of agents) {\n const agent = AGENTS.find(a => a.value === v);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n if (existsSync(destPath)) {\n try {\n unlinkSync(destPath);\n removed.push(agent.destFile);\n } catch (err: unknown) {\n errors.push(`${agent.destFile}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n }\n\n // Remove .claude/settings.json (only if agent was claude)\n if (agents.includes('claude')) {\n const hookPath = join(projectPath, '.claude', 'settings.json');\n if (existsSync(hookPath)) {\n try {\n unlinkSync(hookPath);\n removed.push('.claude/settings.json');\n } catch {\n // non-fatal — user may have customised this file\n }\n }\n }\n\n for (const f of removed) console.log(` ${chalk.green('✓')} ${f} removed.`);\n for (const e of errors) console.log(` ${chalk.red('✗')} ${e}`);\n\n console.log('');\n console.log(` ${chalk.dim('MindLink removed from this project.')}`);\n console.log(` ${chalk.dim('To remove the CLI itself: npm uninstall -g mindlink')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { text, confirm, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readdirSync } from 'fs';\nimport { join, resolve, basename } from 'path';\nimport AdmZip from 'adm-zip';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\nexport const exportCommand = new Command('export')\n .description('Export .brain/ memory to a shareable zip file')\n .option('--output <path>', 'Directory or full path to save the zip file')\n .option('--include-agents', 'Also include agent instruction files (CLAUDE.md, CURSOR.md, etc.)')\n .addHelpText('after', `\nWhat gets exported:\n - .brain/MEMORY.md — permanent project facts\n - .brain/SESSION.md — current session state\n - .brain/SHARED.md — shared context across sessions\n - .brain/LOG.md — full session history\n - .brain/config.json — settings (excluded by default; use --include-agents for agent files)\n\nUse cases:\n Onboard a new teammate — send them the zip; they run: mindlink import brain.zip\n Back up before reset — export first, then mindlink reset\n Share project context — hand off to a consultant without giving repo access\n\nExamples:\n mindlink export\n mindlink export --output ~/Desktop\n mindlink export --output ~/Desktop/my-app-brain.zip\n mindlink export --include-agents\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log('');\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n // --- Determine output path ---\n const projectName = basename(projectPath);\n const date = new Date().toISOString().slice(0, 10);\n const defaultFilename = `${projectName}-brain-${date}.zip`;\n\n let outputPath: string;\n\n if (opts.output) {\n // If they gave a directory, append default filename\n const given = resolve(opts.output);\n if (existsSync(given) && !given.endsWith('.zip')) {\n outputPath = join(given, defaultFilename);\n } else {\n outputPath = given;\n }\n } else if (process.stdin.isTTY) {\n // Interactive: prompt for location\n const answer = await text({\n message: 'Where should the zip be saved?',\n placeholder: projectPath,\n initialValue: projectPath,\n hint: `default filename: ${defaultFilename}`,\n });\n\n if (isCancel(answer)) { cancel('Cancelled.'); process.exit(0); }\n\n const dest = resolve(answer as string);\n // If the answer is a directory (or ends without .zip), append default filename\n if (!dest.endsWith('.zip')) {\n outputPath = join(dest, defaultFilename);\n } else {\n outputPath = dest;\n }\n } else {\n // Non-interactive: drop in cwd\n outputPath = join(projectPath, defaultFilename);\n }\n\n // --- Build zip ---\n const zip = new AdmZip();\n\n // Core .brain/ files\n const brainFiles = ['MEMORY.md', 'SESSION.md', 'SHARED.md', 'LOG.md'];\n const included: string[] = [];\n const skipped: string[] = [];\n\n for (const file of brainFiles) {\n const filePath = join(brainDir, file);\n if (existsSync(filePath)) {\n zip.addLocalFile(filePath, '.brain');\n included.push(`.brain/${file}`);\n } else {\n skipped.push(`.brain/${file}`);\n }\n }\n\n // Also include any LOG archive files\n const archiveFiles = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}-\\d{2}\\.md$/.test(f));\n for (const file of archiveFiles) {\n zip.addLocalFile(join(brainDir, file), '.brain');\n included.push(`.brain/${file}`);\n }\n\n // Agent instruction files (optional)\n if (opts.includeAgents) {\n for (const agent of AGENTS) {\n const agentPath = join(projectPath, agent.destFile);\n if (existsSync(agentPath)) {\n const dir = agent.destFile.includes('/') ? agent.destFile.split('/').slice(0, -1).join('/') : '';\n zip.addLocalFile(agentPath, dir);\n included.push(agent.destFile);\n }\n }\n }\n\n // Write zip\n try {\n zip.writeZip(outputPath);\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} Could not write zip: ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n // --- Output ---\n for (const f of included) console.log(` ${chalk.green('✓')} ${f}`);\n if (skipped.length > 0) {\n for (const f of skipped) console.log(` ${chalk.dim('–')} ${f} ${chalk.dim('(not found, skipped)')}`);\n }\n console.log('');\n console.log(` ${chalk.green('✓')} Exported to: ${chalk.bold(outputPath)}`);\n console.log('');\n console.log(` ${chalk.dim('To import on another machine or project:')}`);\n console.log(` ${chalk.cyan(`mindlink import ${basename(outputPath)}`)}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, mkdirSync } from 'fs';\nimport { join, resolve, extname } from 'path';\nimport AdmZip from 'adm-zip';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const importCommand = new Command('import')\n .description('Import a MindLink memory zip into the current project')\n .argument('<file>', 'Path to the .zip file exported by mindlink export')\n .option('-y, --yes', 'Skip confirmation and overwrite existing memory')\n .addHelpText('after', `\nWhat gets imported:\n All .brain/ files found in the zip (MEMORY.md, SESSION.md, SHARED.md, LOG.md,\n and any LOG archive files). Agent instruction files are also imported if the zip\n contains them.\n\nIf .brain/ already exists, you will be asked whether to:\n Merge — import only files that don't exist yet (keeps your current memory)\n Overwrite — replace everything (use when onboarding from a teammate's export)\n Cancel — do nothing\n\nUse cases:\n Onboard on a new machine — copy the zip, run: mindlink import brain.zip\n Restore from backup — mindlink import my-app-brain-2026-04-10.zip\n Accept a colleague's brain — merge their context into your project\n\nExamples:\n mindlink import my-app-brain-2026-04-10.zip\n mindlink import ~/Desktop/my-app-brain-2026-04-10.zip --yes\n `)\n .action(async (file, opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n const zipPath = resolve(file);\n\n console.log('');\n\n if (!existsSync(zipPath)) {\n console.log(` ${chalk.red('✗')} File not found: ${zipPath}`);\n console.log('');\n process.exit(1);\n }\n\n if (extname(zipPath) !== '.zip') {\n console.log(` ${chalk.red('✗')} Expected a .zip file. Got: ${zipPath}`);\n console.log('');\n process.exit(1);\n }\n\n // --- Load and validate zip ---\n let zip: AdmZip;\n try {\n zip = new AdmZip(zipPath);\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} Could not read zip: ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n const entries = zip.getEntries();\n const brainEntries = entries.filter(e => e.entryName.startsWith('.brain/') && !e.isDirectory);\n\n if (brainEntries.length === 0) {\n console.log(` ${chalk.red('✗')} This zip doesn't contain any .brain/ files.`);\n console.log(` Make sure it was created with ${chalk.cyan('mindlink export')}.`);\n console.log('');\n process.exit(1);\n }\n\n // --- Handle existing .brain/ ---\n let mode: 'merge' | 'overwrite' = 'overwrite';\n\n if (existsSync(brainDir)) {\n if (opts.yes) {\n mode = 'overwrite';\n } else {\n console.log(` ${chalk.yellow('!')} .brain/ already exists in this project.`);\n console.log('');\n\n const action = await select({\n message: 'How should the import handle existing memory?',\n options: [\n { value: 'merge', label: 'Merge', hint: 'add files that don\\'t exist yet — keep your current memory' },\n { value: 'overwrite', label: 'Overwrite', hint: 'replace everything with the imported version' },\n { value: 'cancel', label: 'Cancel', hint: '' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel') {\n cancel('Cancelled.');\n console.log('');\n return;\n }\n\n mode = action as 'merge' | 'overwrite';\n console.log('');\n }\n }\n\n // --- Extract ---\n mkdirSync(brainDir, { recursive: true });\n\n const written: string[] = [];\n const skipped: string[] = [];\n\n for (const entry of entries) {\n if (entry.isDirectory) continue;\n\n const destPath = join(projectPath, entry.entryName);\n const destDir = join(projectPath, entry.entryName.split('/').slice(0, -1).join('/'));\n\n if (mode === 'merge' && existsSync(destPath)) {\n skipped.push(entry.entryName);\n continue;\n }\n\n mkdirSync(destDir, { recursive: true });\n zip.extractEntryTo(entry, destDir, false, true);\n written.push(entry.entryName);\n }\n\n // --- Output ---\n for (const f of written) console.log(` ${chalk.green('✓')} ${f}`);\n for (const f of skipped) console.log(` ${chalk.dim('–')} ${f} ${chalk.dim('(already exists, kept)')}`);\n console.log('');\n\n if (written.length === 0) {\n console.log(` ${chalk.dim('Nothing imported — all files already exist (merge mode).')}`);\n } else {\n console.log(` ${chalk.green('✓')} Brain transplant complete. Your AI wakes up knowing everything.`);\n if (!existsSync(join(brainDir, '../CLAUDE.md')) && !existsSync(join(brainDir, '../CURSOR.md'))) {\n console.log(` ${chalk.dim('No agent instruction files found — run mindlink init to wire them up.')}`);\n }\n }\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync, readdirSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\nimport { extractSection, parseLogEntries, relativeTime } from '../utils/parser.js';\n\nconst CORE_LINE_LIMIT = 50;\nconst CORE_WARN_THRESHOLD = 40;\n\ntype CheckStatus = 'ok' | 'warn' | 'fail' | 'info';\n\ninterface Check {\n status: CheckStatus;\n label: string;\n detail?: string;\n}\n\nfunction ok(label: string, detail?: string): Check { return { status: 'ok', label, detail }; }\nfunction warn(label: string, detail?: string): Check { return { status: 'warn', label, detail }; }\nfunction fail(label: string, detail?: string): Check { return { status: 'fail', label, detail }; }\nfunction info(label: string, detail?: string): Check { return { status: 'info', label, detail }; }\n\nfunction icon(status: CheckStatus): string {\n switch (status) {\n case 'ok': return chalk.green('✓');\n case 'warn': return chalk.yellow('!');\n case 'fail': return chalk.red('✗');\n case 'info': return chalk.dim('·');\n }\n}\n\nexport const doctorCommand = new Command('doctor')\n .description('Check that your MindLink setup is healthy')\n .addHelpText('after', `\nWhat gets checked:\n .brain/ — exists and contains all expected files\n MEMORY.md — Core has content; warns if Core is getting too long to reliably read\n SESSION.md — has content (agent is updating it)\n LOG.md — session count, how far back history goes, warns when oldest sessions near rotation\n Agent files — instruction files exist per your config.json\n Hook — .claude/settings.json exists (if Claude Code is configured)\n\nExamples:\n mindlink doctor\n `)\n .action(() => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n console.log('');\n console.log(` ${chalk.bold('◉ MindLink Doctor')}`);\n console.log(` ${chalk.dim(projectPath)}`);\n console.log('');\n\n const checks: Check[] = [];\n let failCount = 0;\n let warnCount = 0;\n\n // ── 1. .brain/ exists ───────────────────────────────────────────────────\n if (!existsSync(brainDir)) {\n checks.push(fail('.brain/ missing', `Run ${chalk.cyan('mindlink init')} to get started.`));\n printChecks(checks);\n process.exit(1);\n }\n checks.push(ok('.brain/ found'));\n\n // ── 2. config.json ──────────────────────────────────────────────────────\n const configPath = join(brainDir, 'config.json');\n let config: { agents?: string[]; gitTracking?: boolean; autoSync?: boolean; maxLogEntries?: number } = {};\n if (!existsSync(configPath)) {\n checks.push(warn('config.json missing', `Run ${chalk.cyan('mindlink config')} to repair.`));\n } else {\n try {\n config = JSON.parse(readFileSync(configPath, 'utf8'));\n checks.push(ok('config.json valid'));\n } catch {\n checks.push(warn('config.json unreadable', 'File may be corrupted — delete and re-run mindlink init.'));\n }\n }\n\n // ── 3. MEMORY.md ────────────────────────────────────────────────────────\n const memoryPath = join(brainDir, 'MEMORY.md');\n if (!existsSync(memoryPath)) {\n checks.push(fail('MEMORY.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const memoryMd = readFileSync(memoryPath, 'utf8');\n const coreSection = extractSection(memoryMd, 'Core');\n const coreLines = coreSection.split('\\n').filter(l => l.trim().length > 0 && !l.startsWith('<!--')).length;\n\n if (coreLines === 0) {\n checks.push(warn('MEMORY.md Core is empty', 'Your AI has no permanent facts yet — ask it to fill in MEMORY.md after your next session.'));\n } else if (coreLines >= CORE_LINE_LIMIT) {\n checks.push(warn(\n 'MEMORY.md Core is getting too long',\n 'Ask your AI to consolidate — Core is read every session start, so keep it tight.'\n ));\n } else if (coreLines >= CORE_WARN_THRESHOLD) {\n checks.push(warn(\n 'MEMORY.md Core is getting long',\n 'Consider asking your AI to consolidate — Core is read on every session start.'\n ));\n } else {\n checks.push(ok('MEMORY.md Core has content'));\n }\n }\n\n // ── 4. SESSION.md ───────────────────────────────────────────────────────\n const sessionPath = join(brainDir, 'SESSION.md');\n if (!existsSync(sessionPath)) {\n checks.push(fail('SESSION.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const sessionMd = readFileSync(sessionPath, 'utf8');\n const hasContent = sessionMd.split('\\n').some(l => l.trim().length > 0 && !l.startsWith('<!--') && !l.startsWith('#'));\n const mtime = statSync(sessionPath).mtime;\n const age = relativeTime(mtime);\n\n if (!hasContent) {\n checks.push(warn('SESSION.md has no content yet', 'Start an AI session — it will fill this in automatically.'));\n } else {\n checks.push(ok(`SESSION.md — updated ${age}`));\n }\n }\n\n // ── 5. LOG.md ───────────────────────────────────────────────────────────\n const logPath = join(brainDir, 'LOG.md');\n if (!existsSync(logPath)) {\n checks.push(fail('LOG.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const logMd = readFileSync(logPath, 'utf8');\n const entries = parseLogEntries(logMd);\n const entryCount = entries.length;\n const maxEntries: number = (config as any).maxLogEntries ?? 50;\n\n if (entryCount === 0) {\n checks.push(info('LOG.md — no sessions yet, start your first AI session'));\n } else {\n // Newest entry = last in file (append order)\n const newestHeading = entries[entries.length - 1].heading;\n const oldestHeading = entries[0].heading;\n const remaining = maxEntries - entryCount;\n\n if (remaining <= 3 && remaining > 0) {\n checks.push(warn(\n `LOG.md — ${entryCount}/${maxEntries} sessions, ${remaining} until oldest start archiving`,\n `Oldest session on record: ${oldestHeading} — it will be archived soon. Important decisions belong in MEMORY.md where they never rotate out.`\n ));\n } else if (remaining <= 0) {\n checks.push(warn(\n `LOG.md — at ${maxEntries}-session limit, oldest are being archived`,\n `Oldest session on record: ${oldestHeading}. Anything important should be in MEMORY.md.`\n ));\n } else {\n checks.push(ok(`LOG.md — ${entryCount} sessions logged (last: ${newestHeading}, going back to: ${oldestHeading})`));\n }\n }\n\n // Archive files\n const archives = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}\\.md$/.test(f));\n if (archives.length > 0) {\n checks.push(info(`${archives.length} archive file${archives.length !== 1 ? 's' : ''} — old sessions are stored in LOG-*.md, not gone`));\n }\n }\n\n // ── 6. Agent instruction files ──────────────────────────────────────────\n const configuredAgents: string[] = config.agents ?? [];\n if (configuredAgents.length === 0) {\n checks.push(warn('No agents configured', `Run ${chalk.cyan('mindlink config')} → Agent instruction files.`));\n } else {\n for (const agentValue of configuredAgents) {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n if (!existsSync(destPath)) {\n checks.push(fail(`${agent.destFile} missing`, `Run ${chalk.cyan('mindlink config')} → Agent instruction files to recreate.`));\n } else {\n checks.push(ok(`${agent.destFile} — ${agent.label}`));\n }\n }\n }\n\n // ── 7. Claude Code hook ──────────────────────────────────────────────────\n if (configuredAgents.includes('claude')) {\n const hookPath = join(projectPath, '.claude', 'settings.json');\n if (!existsSync(hookPath)) {\n checks.push(warn(\n '.claude/settings.json missing',\n `Claude Code won't auto-reload after context compaction. Run ${chalk.cyan('mindlink config')} → Agent instruction files to restore.`\n ));\n } else {\n try {\n const settings = JSON.parse(readFileSync(hookPath, 'utf8'));\n const hasHook = settings?.hooks?.UserPromptSubmit != null;\n if (!hasHook) {\n checks.push(warn('.claude/settings.json exists but MindLink hook not found', 'Hook may have been removed — check the file manually.'));\n } else {\n checks.push(ok('.claude/settings.json — UserPromptSubmit hook active'));\n }\n } catch {\n checks.push(warn('.claude/settings.json is not valid JSON', 'Fix or delete it to restore the hook.'));\n }\n }\n }\n\n // ── 8. Git tracking notice ───────────────────────────────────────────────\n if (config.gitTracking === false) {\n checks.push(info('.brain/ is excluded from git (personal memory only)'));\n } else if (config.gitTracking === true) {\n checks.push(info('.brain/ is committed to git (shared team memory)'));\n }\n\n // ── Summary ──────────────────────────────────────────────────────────────\n for (const c of checks) {\n if (c.status === 'fail') failCount++;\n if (c.status === 'warn') warnCount++;\n }\n\n printChecks(checks);\n\n if (failCount > 0) {\n console.log(` ${chalk.red.bold(`${failCount} problem${failCount !== 1 ? 's' : ''} found`)} — fix the issues above and re-run ${chalk.cyan('mindlink doctor')}.`);\n } else if (warnCount > 0) {\n console.log(` ${chalk.yellow.bold(`${warnCount} warning${warnCount !== 1 ? 's' : ''}`)}, no critical issues. Your AI will still work.`);\n } else {\n console.log(` ${chalk.green.bold('All good.')} Your AI has a healthy brain.`);\n }\n console.log('');\n\n if (failCount > 0) process.exit(1);\n });\n\nfunction printChecks(checks: Check[]): void {\n for (const c of checks) {\n const prefix = ` ${icon(c.status)} `;\n console.log(`${prefix}${c.label}`);\n if (c.detail) {\n console.log(` ${chalk.dim(c.detail)}`);\n }\n }\n console.log('');\n}\n"],"mappings":"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","names":["Command","chalk","chalk","join","dirname","join","info","chalk","execSync","dirname","Command","chalk","existsSync","readFileSync","join","resolve","text","Command","resolve","join","existsSync","chalk","readFileSync","Command","chalk","existsSync","readFileSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","Command","chalk","existsSync","readFileSync","writeFileSync","join","resolve","Command","resolve","join","existsSync","chalk","writeFileSync","readFileSync","Command","isCancel","cancel","chalk","existsSync","readFileSync","writeFileSync","join","resolve","BRAIN_FILES","Command","resolve","join","existsSync","chalk","isCancel","cancel","writeFileSync","readFileSync","Command","select","multiselect","isCancel","chalk","existsSync","readFileSync","writeFileSync","appendFileSync","mkdirSync","join","resolve","dirname","readFileSync","join","writeFileSync","existsSync","appendFileSync","mkdirSync","dirname","Command","resolve","chalk","select","isCancel","multiselect","Command","chalk","existsSync","readFileSync","statSync","join","resolve","basename","existsSync","chalk","statSync","readFileSync","basename","Command","resolve","join","Command","select","isCancel","cancel","spinner","chalk","fileURLToPath","dirname","join","__filename","__dirname","require","resolve","latest","Command","chalk","existsSync","readFileSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","Command","select","isCancel","cancel","chalk","existsSync","readFileSync","unlinkSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","select","isCancel","cancel","unlinkSync","Command","text","isCancel","cancel","chalk","existsSync","readdirSync","join","resolve","basename","Command","resolve","join","existsSync","chalk","basename","text","isCancel","cancel","readdirSync","Command","select","isCancel","cancel","chalk","existsSync","mkdirSync","join","resolve","AdmZip","Command","resolve","join","existsSync","chalk","AdmZip","select","isCancel","cancel","mkdirSync","Command","chalk","existsSync","readFileSync","statSync","readdirSync","join","resolve","chalk","Command","resolve","join","existsSync","readFileSync","statSync","readdirSync","Command","_","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/utils/version.ts","../src/commands/init.ts","../src/utils/paths.ts","../src/utils/banner.ts","../src/utils/agents.ts","../src/commands/status.ts","../src/utils/parser.ts","../src/commands/log.ts","../src/commands/clear.ts","../src/commands/reset.ts","../src/commands/config.ts","../src/commands/sync.ts","../src/commands/update.ts","../src/commands/summary.ts","../src/commands/uninstall.ts","../src/commands/export.ts","../src/commands/import.ts","../src/commands/doctor.ts","../src/commands/version.ts"],"sourcesContent":["import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { VERSION } from './utils/version.js';\nimport { initCommand } from './commands/init.js';\nimport { statusCommand } from './commands/status.js';\nimport { logCommand } from './commands/log.js';\nimport { clearCommand } from './commands/clear.js';\nimport { resetCommand } from './commands/reset.js';\nimport { configCommand } from './commands/config.js';\nimport { syncCommand } from './commands/sync.js';\nimport { updateCommand } from './commands/update.js';\nimport { summaryCommand } from './commands/summary.js';\nimport { uninstallCommand } from './commands/uninstall.js';\nimport { exportCommand } from './commands/export.js';\nimport { importCommand } from './commands/import.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { versionCommand } from './commands/version.js';\n\nconst program = new Command();\n\nprogram\n .name('mindlink')\n .description('Give your AI a brain.')\n .version(VERSION, '-v, --version');\n\nprogram.addCommand(initCommand);\nprogram.addCommand(statusCommand);\nprogram.addCommand(logCommand);\nprogram.addCommand(clearCommand);\nprogram.addCommand(resetCommand);\nprogram.addCommand(configCommand);\nprogram.addCommand(syncCommand);\nprogram.addCommand(updateCommand);\nprogram.addCommand(summaryCommand);\nprogram.addCommand(uninstallCommand);\nprogram.addCommand(exportCommand);\nprogram.addCommand(importCommand);\nprogram.addCommand(doctorCommand);\nprogram.addCommand(versionCommand);\n\n// \"Did you mean?\" on unknown commands\nprogram.on('command:*', (operands: string[]) => {\n const unknown = operands[0];\n const known = ['init', 'status', 'log', 'clear', 'reset', 'config', 'sync', 'update', 'summary', 'uninstall', 'export', 'import', 'doctor', 'version'];\n\n // Simple Levenshtein-based suggestion\n function levenshtein(a: string, b: string): number {\n const m = a.length, n = b.length;\n const dp: number[][] = Array.from({ length: m + 1 }, (_, i) =>\n Array.from({ length: n + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0))\n );\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n dp[i][j] = a[i - 1] === b[j - 1]\n ? dp[i - 1][j - 1]\n : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);\n }\n }\n return dp[m][n];\n }\n\n const closest = known\n .map(cmd => ({ cmd, dist: levenshtein(unknown, cmd) }))\n .sort((a, b) => a.dist - b.dist)[0];\n\n console.log('');\n console.log(` ${chalk.red('✗')} Unknown command: ${chalk.bold(unknown)}`);\n if (closest && closest.dist <= 3) {\n console.log(` Did you mean ${chalk.cyan('mindlink ' + closest.cmd)}?`);\n }\n console.log(` Run ${chalk.cyan('mindlink --help')} to see all commands.`);\n console.log('');\n process.exit(1);\n});\n\nprogram.parse();\n","export const VERSION = '1.0.4';\n","import { Command } from 'commander';\nimport {\n intro,\n multiselect,\n select,\n spinner,\n note,\n cancel,\n isCancel,\n} from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n appendFileSync,\n} from 'fs';\nimport { join, resolve, dirname, basename } from 'path';\nimport { BRAIN_TEMPLATES_DIR, AGENT_TEMPLATES_DIR, HOOKS_TEMPLATES_DIR, BRAIN_DIR } from '../utils/paths.js';\nimport { printBanner } from '../utils/banner.js';\nimport { AGENTS } from '../utils/agents.js';\n\ninterface ProjectInfo {\n name: string;\n description: string;\n stack: string;\n date: string;\n}\n\nfunction detectProjectInfo(projectPath: string): ProjectInfo {\n const date = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });\n\n let name = basename(projectPath);\n let description = '';\n let stack = '';\n\n // Try package.json\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));\n if (pkg.name) name = pkg.name;\n if (pkg.description) description = pkg.description;\n stack = 'Node.js';\n } catch {}\n }\n\n // Detect stack from manifest files (may override or extend)\n if (!stack) {\n if (existsSync(join(projectPath, 'Cargo.toml'))) stack = 'Rust';\n else if (existsSync(join(projectPath, 'go.mod'))) stack = 'Go';\n else if (existsSync(join(projectPath, 'pyproject.toml')) || existsSync(join(projectPath, 'requirements.txt'))) stack = 'Python';\n else if (existsSync(join(projectPath, 'pom.xml'))) stack = 'Java (Maven)';\n else if (existsSync(join(projectPath, 'build.gradle')) || existsSync(join(projectPath, 'build.gradle.kts'))) stack = 'Kotlin/Java (Gradle)';\n else if (existsSync(join(projectPath, 'composer.json'))) stack = 'PHP';\n else if (existsSync(join(projectPath, 'Gemfile'))) stack = 'Ruby';\n }\n\n return { name, description, stack, date };\n}\n\nfunction buildMemoryMd(templateContent: string, info: ProjectInfo): string {\n let content = templateContent;\n\n // Inject project name + description under \"What this project is\"\n const whatLine = info.description\n ? `**${info.name}** — ${info.description}`\n : `**${info.name}**`;\n content = content.replace(\n /### What this project is\\n<!--[^]*?-->/,\n `### What this project is\\n${whatLine}\\n<!-- 2–3 lines: what it does, who it's for, what problem it solves -->`\n );\n\n // Inject detected stack under \"Stack\"\n if (info.stack) {\n content = content.replace(\n /### Stack\\n<!--[^]*?-->/,\n `### Stack\\n${info.stack}\\n<!-- Add layers: Frontend, Backend, Infra, etc. -->`\n );\n }\n\n // Inject init date under \"Current focus\"\n content = content.replace(\n /### Current focus\\n<!--[^]*?-->/,\n `### Current focus\\n<!-- Initialized ${info.date} — ask your AI to fill this in after your first session -->`\n );\n\n return content;\n}\n\nconst BRAIN_FILES = [\n { templateFile: 'MEMORY.md', label: '.brain/MEMORY.md', desc: 'permanent project facts' },\n { templateFile: 'SESSION.md', label: '.brain/SESSION.md', desc: 'current session state' },\n { templateFile: 'SHARED.md', label: '.brain/SHARED.md', desc: 'shared across sessions' },\n { templateFile: 'LOG.md', label: '.brain/LOG.md', desc: 'full session history' },\n];\n\nconst DEFAULT_MAX_LOG_ENTRIES = 50;\n\n\nexport const initCommand = new Command('init')\n .description('Set up memory for the current project')\n .option('-y, --yes', 'Skip all prompts, use defaults')\n .addHelpText('after', `\nExamples:\n mindlink init\n mindlink init --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n printBanner();\n\n // --- Already initialized? Show recovery menu ---\n if (existsSync(brainDir)) {\n if (opts.yes) {\n console.log(` ${chalk.red('✗')} Already initialized at this path.`);\n console.log(` Run ${chalk.cyan('mindlink config')} to change settings.`);\n console.log('');\n process.exit(1);\n }\n\n const action = await select({\n message: '.brain/ already exists at this path. What would you like to do?',\n options: [\n { value: 'config', label: 'Change settings', hint: 'mindlink config' },\n { value: 'status', label: 'View current status', hint: 'mindlink status' },\n { value: 'exit', label: 'Nothing — exit', hint: '' },\n ],\n });\n\n if (isCancel(action) || action === 'exit') {\n process.exit(0);\n }\n if (action === 'status') {\n const { execSync } = await import('child_process');\n try { execSync('mindlink status', { stdio: 'inherit' }); } catch {}\n }\n if (action === 'config') {\n console.log(` Run ${chalk.cyan('mindlink config')} to change settings.`);\n }\n console.log('');\n process.exit(0);\n }\n\n intro(chalk.bold('Initializing memory for this project:'));\n console.log(` ${chalk.dim(projectPath)}`);\n console.log(` ${chalk.dim('This creates a .brain/ folder scoped to this project only.')}`);\n console.log(` ${chalk.dim('Run mindlink init once per project — never needs to be run again.')}`);\n console.log('');\n\n // --- Prompt 1: Agent selection ---\n let selectedAgents: string[];\n\n if (opts.yes) {\n selectedAgents = AGENTS.filter(a => a.selected).map(a => a.value);\n } else {\n const agentChoices = AGENTS.map(a => ({\n value: a.value,\n label: `${a.label.padEnd(18)} ${chalk.dim(a.hint)}`,\n hint: a.selected ? 'recommended' : undefined,\n }));\n\n const agentResult = await multiselect({\n message: 'Which AI agents do you use?',\n options: agentChoices,\n initialValues: AGENTS.filter(a => a.selected).map(a => a.value),\n required: false,\n });\n\n if (isCancel(agentResult)) { cancel('Cancelled.'); process.exit(0); }\n selectedAgents = agentResult as string[];\n console.log(` ${chalk.dim('↩ Add or remove agents anytime: mindlink config → Agent instruction files')}`);\n console.log('');\n }\n\n // --- Prompt 2: Git tracking ---\n let gitTracking: boolean;\n\n if (opts.yes) {\n gitTracking = true;\n } else {\n console.log(` ${chalk.dim('.brain/ is your AI\\'s memory — MEMORY.md, SESSION.md, SHARED.md, LOG.md.')}`);\n console.log(` ${chalk.dim('Plain Markdown files. Commit them to share with your team, or keep them local.')}`);\n console.log('');\n const gitResult = await select({\n message: 'Should .brain/ be committed to git?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'team shares the same AI memory' },\n { value: 'disable', label: 'Disable', hint: 'add to .gitignore — personal memory only' },\n ],\n });\n if (isCancel(gitResult)) { cancel('Cancelled.'); process.exit(0); }\n gitTracking = gitResult === 'enable';\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Git tracking')}`);\n console.log('');\n }\n\n // --- Prompt 3: Auto-sync ---\n let autoSync: boolean;\n\n if (opts.yes) {\n autoSync = true;\n } else {\n const syncResult = await select({\n message: 'Auto-sync between sessions?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'watch for changes, sync automatically (recommended)' },\n { value: 'disable', label: 'Disable', hint: 'run mindlink sync manually when needed' },\n ],\n });\n if (isCancel(syncResult)) { cancel('Cancelled.'); process.exit(0); }\n autoSync = syncResult === 'enable';\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Auto-sync')}`);\n console.log('');\n }\n\n // --- Create files ---\n const s = spinner();\n s.start('Creating memory files...');\n\n const created: string[] = [];\n const errors: string[] = [];\n\n try {\n mkdirSync(brainDir, { recursive: true });\n\n const projectInfo = detectProjectInfo(projectPath);\n\n // .brain/ template files\n for (const file of BRAIN_FILES) {\n const dest = join(brainDir, file.templateFile);\n const templateContent = readFileSync(join(BRAIN_TEMPLATES_DIR, file.templateFile), 'utf8');\n const content = file.templateFile === 'MEMORY.md'\n ? buildMemoryMd(templateContent, projectInfo)\n : templateContent;\n writeFileSync(dest, content);\n created.push(`${file.label.padEnd(32)} ${chalk.dim(file.desc)}`);\n }\n\n // Agent instruction files\n for (const agentValue of selectedAgents) {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n mkdirSync(dirname(destPath), { recursive: true });\n writeFileSync(destPath, readFileSync(join(AGENT_TEMPLATES_DIR, agent.templateFile), 'utf8'));\n created.push(`${agent.destFile.padEnd(32)} ${chalk.dim(agent.label)}`);\n }\n\n // .claude/settings.json hook for Claude Code\n if (selectedAgents.includes('claude')) {\n const hookDest = join(projectPath, '.claude', 'settings.json');\n if (!existsSync(hookDest)) {\n mkdirSync(dirname(hookDest), { recursive: true });\n writeFileSync(hookDest, readFileSync(join(HOOKS_TEMPLATES_DIR, 'claude-settings.json'), 'utf8'));\n created.push(`.claude/settings.json${' '.repeat(14)} ${chalk.dim('Claude Code compact hook')}`);\n }\n }\n\n // .gitignore\n if (!gitTracking) {\n const gitignorePath = join(projectPath, '.gitignore');\n const entry = '\\n# MindLink memory (personal — not shared with team)\\n.brain/\\n';\n if (existsSync(gitignorePath)) {\n const current = readFileSync(gitignorePath, 'utf8');\n if (!current.includes('.brain/')) appendFileSync(gitignorePath, entry);\n } else {\n writeFileSync(gitignorePath, entry.trim() + '\\n');\n }\n created.push(`.gitignore${' '.repeat(23)} ${chalk.dim('.brain/ excluded')}`);\n }\n\n // Save config (includes maxLogEntries for log rotation)\n const config = {\n gitTracking,\n autoSync,\n agents: selectedAgents,\n maxLogEntries: DEFAULT_MAX_LOG_ENTRIES,\n };\n writeFileSync(join(brainDir, 'config.json'), JSON.stringify(config, null, 2));\n\n } catch (err: unknown) {\n errors.push(err instanceof Error ? err.message : String(err));\n }\n\n s.stop('Done.');\n console.log('');\n\n for (const line of created) {\n console.log(` ${chalk.green('✓')} ${line}`);\n }\n if (errors.length > 0) {\n console.log('');\n for (const err of errors) console.log(` ${chalk.red('✗')} ${err}`);\n }\n\n console.log('');\n note(\n `Your AI finally has a brain.\\n\\nEvery new session wakes up knowing the project, past decisions,\\ncurrent task, and what other sessions have shared. No more\\nre-explaining from scratch. No more goldfish moments.\\n\\nLike any good brain, it remembers what matters and quietly\\nlets go of the old stuff — that's what MEMORY.md is for:\\npromote anything important there and it stays forever.\\n\\nStart a new AI session — it'll hit the ground running.\\n\\nRun ${chalk.cyan('mindlink help')} to see all commands.`,\n '◉ MindLink active'\n );\n console.log('');\n });\n","import { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Root of dist/ — templates live at dist/templates/\nexport const TEMPLATES_DIR = join(__dirname, 'templates');\n\nexport const BRAIN_TEMPLATES_DIR = join(TEMPLATES_DIR, 'brain');\nexport const AGENT_TEMPLATES_DIR = join(TEMPLATES_DIR, 'agents');\nexport const HOOKS_TEMPLATES_DIR = join(TEMPLATES_DIR, 'hooks');\n\nexport const BRAIN_DIR = '.brain';\n","import chalk from 'chalk';\n\nexport function printBanner(): void {\n console.log('');\n console.log(chalk.dim(' ≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋'));\n console.log(` ${chalk.cyan('◉')} ${chalk.bold('M I N D L I N K')}`);\n console.log(chalk.dim(' ≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋≋'));\n console.log('');\n}\n","export interface AgentDef {\n value: string;\n label: string;\n hint: string;\n templateFile: string;\n destFile: string;\n selected: boolean;\n}\n\nexport const AGENTS: AgentDef[] = [\n { value: 'claude', label: 'Claude Code', hint: 'CLAUDE.md', templateFile: 'CLAUDE.md', destFile: 'CLAUDE.md', selected: true },\n { value: 'cursor', label: 'Cursor', hint: 'CURSOR.md', templateFile: 'CURSOR.md', destFile: 'CURSOR.md', selected: true },\n { value: 'codex', label: 'Codex / OpenAI', hint: 'AGENTS.md', templateFile: 'AGENTS.md', destFile: 'AGENTS.md', selected: true },\n { value: 'gemini', label: 'Gemini CLI', hint: 'GEMINI.md', templateFile: 'GEMINI.md', destFile: 'GEMINI.md', selected: true },\n { value: 'copilot', label: 'GitHub Copilot', hint: '.github/copilot-instructions.md', templateFile: 'copilot-instructions.md', destFile: '.github/copilot-instructions.md', selected: true },\n { value: 'windsurf', label: 'Windsurf', hint: '.windsurfrules', templateFile: '.windsurfrules', destFile: '.windsurfrules', selected: true },\n { value: 'cline', label: 'Cline', hint: '.clinerules', templateFile: '.clinerules', destFile: '.clinerules', selected: false },\n { value: 'aider', label: 'Aider', hint: 'CONVENTIONS.md', templateFile: 'CONVENTIONS.md', destFile: 'CONVENTIONS.md', selected: false },\n];\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport { join, resolve } from 'path';\nimport {\n extractSection,\n extractBullets,\n countLogEntries,\n lastLogDate,\n countDecisions,\n relativeTime,\n} from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const statusCommand = new Command('status')\n .description('Show last session summary and what\\'s next')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink status\n mindlink status --json\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n // Not initialized?\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const memoryPath = join(brainDir, 'MEMORY.md');\n\n const sessionMd = existsSync(sessionPath) ? readFileSync(sessionPath, 'utf8') : '';\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n const memoryMd = existsSync(memoryPath) ? readFileSync(memoryPath, 'utf8') : '';\n\n // Parse SESSION.md — strip comment placeholders\n const rawTask = extractSection(sessionMd, 'Current Task');\n const currentTask = rawTask.startsWith('<!--') ? '' : rawTask;\n const inProgress = extractBullets(extractSection(sessionMd, 'In Progress'));\n const decisions = extractBullets(extractSection(sessionMd, 'Decisions Made This Session'));\n const blockers = extractBullets(extractSection(sessionMd, 'Blockers'));\n const upNext = extractBullets(extractSection(sessionMd, 'Up Next'));\n\n // Parse LOG.md\n const sessionCount = countLogEntries(logMd);\n const lastSession = lastLogDate(logMd);\n\n // Parse MEMORY.md\n const decisionCount = countDecisions(memoryMd);\n\n // Last updated\n const lastUpdated = existsSync(sessionPath)\n ? relativeTime(statSync(sessionPath).mtime)\n : 'never';\n\n const isEmpty =\n !currentTask &&\n inProgress.length === 0 &&\n decisions.length === 0 &&\n blockers.length === 0 &&\n upNext.length === 0 &&\n sessionCount === 0;\n\n // ── JSON output ───────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify({\n currentTask,\n inProgress,\n decisions,\n blockers,\n upNext,\n stats: { sessionsLogged: sessionCount, decisionsMade: decisionCount, lastUpdated },\n }, null, 2));\n return;\n }\n\n // ── Human output ──────────────────────────────────────────────────────────\n console.log('');\n\n if (isEmpty) {\n console.log(` ${chalk.dim('No sessions logged yet.')}`);\n console.log(` Start an AI session — it will read ${chalk.cyan('.brain/')} automatically.`);\n console.log('');\n return;\n }\n\n // Last session date\n if (lastSession) {\n console.log(` ${chalk.bold('Last session')} ${chalk.dim('—')} ${lastSession}`);\n console.log('');\n }\n\n // Current task\n if (currentTask && !currentTask.startsWith('<!--')) {\n console.log(` ${chalk.bold('Current task')}`);\n console.log(` ${chalk.cyan('◎')} ${currentTask}`);\n console.log('');\n }\n\n // In progress\n if (inProgress.length > 0) {\n console.log(` ${chalk.bold('In progress')}`);\n for (const item of inProgress) {\n console.log(` ${chalk.yellow('●')} ${item}`);\n }\n console.log('');\n }\n\n // Decisions this session\n if (decisions.length > 0) {\n console.log(` ${chalk.bold('Decided this session')}`);\n for (const item of decisions) {\n console.log(` ${chalk.green('✓')} ${item}`);\n }\n console.log('');\n }\n\n // Blockers\n if (blockers.length > 0) {\n console.log(` ${chalk.bold('Blockers')}`);\n for (const item of blockers) {\n console.log(` ${chalk.red('✗')} ${item}`);\n }\n console.log('');\n }\n\n // Up next\n if (upNext.length > 0) {\n console.log(` ${chalk.bold('Up next')}`);\n for (const item of upNext) {\n console.log(` ${chalk.dim('→')} ${item}`);\n }\n console.log('');\n }\n\n // Stats\n console.log(` ${chalk.dim('─────────────────────────────')}`);\n console.log(` ${chalk.dim('Sessions logged')} ${String(sessionCount).padStart(4)}`);\n console.log(` ${chalk.dim('Decisions made')} ${String(decisionCount).padStart(4)}`);\n console.log(` ${chalk.dim('Last updated')} ${lastUpdated}`);\n console.log('');\n console.log(` Run ${chalk.cyan('mindlink log')} to see full history.`);\n console.log('');\n });\n","/**\n * Extract the content of a markdown section by heading name.\n * Returns lines under the heading until the next heading of same/higher level.\n */\nexport function extractSection(markdown: string, heading: string): string {\n const lines = markdown.split('\\n');\n let inSection = false;\n let headingLevel = 0;\n const result: string[] = [];\n\n for (const line of lines) {\n const match = line.match(/^(#{1,6})\\s+(.+)/);\n\n if (match) {\n const level = match[1].length;\n const title = match[2].trim();\n\n if (title.toLowerCase() === heading.toLowerCase()) {\n inSection = true;\n headingLevel = level;\n continue;\n }\n\n if (inSection && level <= headingLevel) {\n break;\n }\n }\n\n if (inSection) {\n result.push(line);\n }\n }\n\n return result.join('\\n').trim();\n}\n\n/**\n * Extract bullet list items from a markdown string.\n * Returns non-empty, non-comment lines that start with - or *.\n */\nexport function extractBullets(text: string): string[] {\n return text\n .split('\\n')\n .filter(l => /^[-*]\\s+/.test(l.trim()))\n .map(l => l.replace(/^[-*]\\s+/, '').trim())\n .filter(l => l.length > 0 && !l.startsWith('<!--'));\n}\n\n/**\n * Count how many top-level log entries exist in LOG.md.\n * Each entry starts with a ## heading.\n */\nexport function countLogEntries(markdown: string): number {\n return (markdown.match(/^##\\s+/gm) ?? []).length;\n}\n\n/**\n * Get the date of the last log entry in LOG.md.\n */\nexport function lastLogDate(markdown: string): string | null {\n const matches = markdown.match(/^##\\s+(.+)/m);\n return matches ? matches[1].trim() : null;\n}\n\n/**\n * Count how many rows exist in the Key Decisions table in MEMORY.md.\n * Skips the header and divider rows.\n */\nexport function countDecisions(markdown: string): number {\n const section = extractSection(markdown, 'Key Decisions');\n return section\n .split('\\n')\n .filter(l => l.startsWith('|') && !l.includes('---') && !l.toLowerCase().includes('decision'))\n .filter(l => {\n const cols = l.split('|').map(c => c.trim()).filter(Boolean);\n return cols.some(c => c.length > 0);\n }).length;\n}\n\n/**\n * Parse LOG.md into individual session entry objects.\n * Each entry starts with a ## heading.\n */\nexport interface LogEntry {\n heading: string;\n body: string;\n}\n\nexport function parseLogEntries(markdown: string): LogEntry[] {\n const blocks = markdown.split(/(?=^## )/m).filter(b => b.trimStart().startsWith('## '));\n return blocks.map(block => {\n const newline = block.indexOf('\\n');\n const heading = newline === -1 ? block.slice(3).trim() : block.slice(3, newline).trim();\n const body = newline === -1 ? '' : block.slice(newline + 1).trim();\n return { heading, body };\n });\n}\n\n/**\n * Get relative time string from a file's last modified date.\n */\nexport function relativeTime(date: Date): string {\n const diff = Date.now() - date.getTime();\n const minutes = Math.floor(diff / 60000);\n const hours = Math.floor(diff / 3600000);\n const days = Math.floor(diff / 86400000);\n\n if (minutes < 2) return 'just now';\n if (minutes < 60) return `${minutes} minutes ago`;\n if (hours < 24) return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n return `${days} day${days > 1 ? 's' : ''} ago`;\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, readdirSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { parseLogEntries } from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const logCommand = new Command('log')\n .description('Print session history')\n .option('--all', 'Show full history')\n .option('--limit <n>', 'Show last N sessions', '10')\n .option('--since <date>', 'Show sessions from a date (matched against heading text)')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink log\n mindlink log --all\n mindlink log --limit 20\n mindlink log --since \"Apr 1\"\n mindlink log --json\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const logPath = join(brainDir, 'LOG.md');\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n\n let entries = parseLogEntries(logMd);\n\n if (entries.length === 0) {\n console.log('');\n console.log(` ${chalk.dim('No sessions logged yet.')}`);\n console.log(` ${chalk.dim('Your AI will append an entry here at the end of each session.')}`);\n console.log('');\n return;\n }\n\n // Filter by --since\n if (opts.since) {\n const since = opts.since.toLowerCase();\n entries = entries.filter(e => e.heading.toLowerCase().includes(since));\n }\n\n // Limit (unless --all)\n const limit = opts.all ? entries.length : parseInt(opts.limit, 10);\n const total = entries.length;\n const shown = entries.slice(0, limit);\n\n // ── JSON output ───────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify(shown, null, 2));\n return;\n }\n\n // ── Human output ──────────────────────────────────────────────────────────\n console.log('');\n\n if (!opts.all) {\n const rest = total - shown.length;\n const hint = rest > 0 ? ` ${chalk.dim(`${rest} more — run mindlink log --all to see everything`)}` : '';\n console.log(` ${chalk.dim(`Showing last ${shown.length} of ${total} session${total !== 1 ? 's' : ''}`)}${hint ? '' : ''}`);\n if (rest > 0) console.log(` ${chalk.dim(`${rest} more — run mindlink log --all to see everything`)}`);\n console.log('');\n }\n\n for (const entry of shown) {\n console.log(` ${chalk.bold('──')} ${chalk.cyan(entry.heading)} ${'─'.repeat(Math.max(0, 40 - entry.heading.length))}`);\n if (entry.body) {\n const lines = entry.body.split('\\n');\n for (const line of lines) {\n console.log(` ${chalk.dim(line)}`);\n }\n }\n console.log('');\n }\n\n // Check for archive files and show friendly notice\n const archiveFiles = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}-\\d{2}\\.md$/.test(f)).sort();\n if (archiveFiles.length > 0) {\n console.log(` ${chalk.dim('─'.repeat(44))}`);\n console.log(` ${chalk.dim('Like all human brains, MindLink forgets old sessions')}`);\n console.log(` ${chalk.dim('that haven\\'t come up in a while — that\\'s by design.')}`);\n console.log(` ${chalk.dim(`Older entries archived to: ${archiveFiles.join(', ')}`)}`);\n console.log(` ${chalk.dim('Anything that truly matters belongs in MEMORY.md.')}`);\n console.log('');\n }\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR, BRAIN_TEMPLATES_DIR } from '../utils/paths.js';\n\nexport const clearCommand = new Command('clear')\n .description('Reset SESSION.md for a fresh session start')\n .option('-y, --yes', 'Skip confirmation prompt')\n .addHelpText('after', `\nWhat it does:\n Resets SESSION.md to a blank template — wipes current task, in-progress items,\n blockers, and up-next. MEMORY.md, LOG.md, and SHARED.md are untouched.\n\nNot what you need?\n mindlink reset — wipe ALL memory files back to blank (scorched earth)\n mindlink uninstall — remove MindLink from this project entirely\n\nExamples:\n mindlink clear\n mindlink clear --yes\n `)\n .action(async (_opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log('');\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n try {\n const templatePath = join(BRAIN_TEMPLATES_DIR, 'SESSION.md');\n const destPath = join(brainDir, 'SESSION.md');\n writeFileSync(destPath, readFileSync(templatePath, 'utf8'));\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n console.log(` ${chalk.green('✓')} SESSION.md cleared. Ready for a clean session.`);\n console.log(` ${chalk.dim('MEMORY.md, LOG.md, and SHARED.md are untouched.')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { confirm, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR, BRAIN_TEMPLATES_DIR } from '../utils/paths.js';\n\nconst BRAIN_FILES = ['MEMORY.md', 'SESSION.md', 'SHARED.md', 'LOG.md'];\n\nexport const resetCommand = new Command('reset')\n .description('Wipe all .brain/ memory files and start completely fresh')\n .option('-y, --yes', 'Skip confirmation prompt')\n .addHelpText('after', `\nWhat it does:\n Resets MEMORY.md, SESSION.md, SHARED.md, and LOG.md to blank templates.\n Your settings (config.json) and agent instruction files are untouched.\n\nNot what you need?\n mindlink clear — reset SESSION.md only (lighter option)\n mindlink uninstall — remove MindLink from this project entirely\n\nExamples:\n mindlink reset\n mindlink reset --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n if (!opts.yes) {\n console.log(` ${chalk.yellow('!')} This will wipe ALL .brain/ memory files and start fresh.`);\n console.log(` ${chalk.dim('MEMORY.md, SESSION.md, SHARED.md, and LOG.md → reset to blank templates.')}`);\n console.log(` ${chalk.dim('Settings and agent instruction files are untouched.')}`);\n console.log('');\n console.log(` ${chalk.dim('Lighter option: mindlink clear — resets SESSION.md only')}`);\n console.log(` ${chalk.dim('Remove entirely: mindlink uninstall — removes MindLink from this project')}`);\n console.log('');\n\n const confirmed = await confirm({\n message: 'Reset everything? This cannot be undone (unless .brain/ is tracked by git).',\n });\n\n if (isCancel(confirmed) || !confirmed) {\n cancel('Cancelled.');\n process.exit(0);\n }\n console.log('');\n }\n\n const errors: string[] = [];\n\n for (const file of BRAIN_FILES) {\n try {\n const templatePath = join(BRAIN_TEMPLATES_DIR, file);\n const destPath = join(brainDir, file);\n if (existsSync(templatePath)) {\n writeFileSync(destPath, readFileSync(templatePath, 'utf8'));\n }\n } catch (err: unknown) {\n errors.push(`${file}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n if (errors.length > 0) {\n for (const err of errors) console.log(` ${chalk.red('✗')} ${err}`);\n console.log('');\n process.exit(1);\n }\n\n console.log(` ${chalk.green('✓')} .brain/ reset. All memory files are blank.`);\n console.log(` ${chalk.dim('Your AI will wake up with no memory of past sessions.')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, multiselect, text, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n appendFileSync,\n mkdirSync,\n unlinkSync,\n} from 'fs';\nimport { join, resolve, dirname } from 'path';\nimport { BRAIN_DIR, AGENT_TEMPLATES_DIR, HOOKS_TEMPLATES_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\ninterface BrainConfig {\n gitTracking: boolean;\n autoSync: boolean;\n agents: string[];\n maxLogEntries: number;\n}\n\nfunction readConfig(brainDir: string): BrainConfig {\n return JSON.parse(readFileSync(join(brainDir, 'config.json'), 'utf8'));\n}\n\nfunction saveConfig(brainDir: string, config: BrainConfig): void {\n writeFileSync(join(brainDir, 'config.json'), JSON.stringify(config, null, 2));\n}\n\nfunction enableGitTracking(projectPath: string): void {\n const gitignorePath = join(projectPath, '.gitignore');\n if (!existsSync(gitignorePath)) return;\n const content = readFileSync(gitignorePath, 'utf8');\n // Remove the mindlink .brain/ block\n const cleaned = content\n .replace(/\\n# MindLink memory[^\\n]*\\n\\.brain\\/\\n?/g, '')\n .replace(/\\n?\\.brain\\/\\n?/g, '\\n');\n writeFileSync(gitignorePath, cleaned.trimEnd() + '\\n');\n}\n\nfunction disableGitTracking(projectPath: string): void {\n const gitignorePath = join(projectPath, '.gitignore');\n const entry = '\\n# MindLink memory (personal — not shared with team)\\n.brain/\\n';\n if (existsSync(gitignorePath)) {\n const content = readFileSync(gitignorePath, 'utf8');\n if (!content.includes('.brain/')) appendFileSync(gitignorePath, entry);\n } else {\n writeFileSync(gitignorePath, entry.trim() + '\\n');\n }\n}\n\nfunction addAgentFile(projectPath: string, agentValue: string): string | null {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) return null;\n const destPath = join(projectPath, agent.destFile);\n if (existsSync(destPath)) return null; // already there\n mkdirSync(dirname(destPath), { recursive: true });\n writeFileSync(destPath, readFileSync(join(AGENT_TEMPLATES_DIR, agent.templateFile), 'utf8'));\n return agent.destFile;\n}\n\nfunction removeAgentFile(projectPath: string, agentValue: string): string | null {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) return null;\n const destPath = join(projectPath, agent.destFile);\n if (!existsSync(destPath)) return null;\n unlinkSync(destPath);\n return agent.destFile;\n}\n\nfunction addClaudeHook(projectPath: string): boolean {\n const hookDest = join(projectPath, '.claude', 'settings.json');\n if (existsSync(hookDest)) return false;\n mkdirSync(dirname(hookDest), { recursive: true });\n writeFileSync(hookDest, readFileSync(join(HOOKS_TEMPLATES_DIR, 'claude-settings.json'), 'utf8'));\n return true;\n}\n\nexport const configCommand = new Command('config')\n .description('Change settings for the current project')\n .addHelpText('after', `\nExamples:\n mindlink config\n `)\n .action(async () => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n // Non-TTY: just print current settings and exit\n if (!process.stdin.isTTY) {\n const cfg = readConfig(brainDir);\n const agentLabels = cfg.agents\n .map((v: string) => AGENTS.find(a => a.value === v)?.hint ?? v)\n .join(', ');\n console.log(JSON.stringify({ ...cfg, agentFiles: agentLabels }, null, 2));\n return;\n }\n\n let config = readConfig(brainDir);\n\n // ── Main menu loop ────────────────────────────────────────────────────────\n while (true) {\n console.log('');\n console.log(` ${chalk.bold('Current settings')} ${chalk.dim('·')} ${chalk.dim(projectPath)}`);\n console.log('');\n console.log(` Git tracking : ${config.gitTracking ? chalk.green('enabled') : chalk.dim('disabled')} ${chalk.dim(config.gitTracking ? '(team shares memory)' : '(.brain/ excluded from git)')}`);\n console.log(` Auto-sync : ${config.autoSync ? chalk.green('enabled') : chalk.dim('disabled')} ${chalk.dim(config.autoSync ? '(watch mode)' : '(run mindlink sync manually)')}`);\n console.log(` Max log entries: ${chalk.dim(String(config.maxLogEntries))} ${chalk.dim('(archive rotation threshold)')}`);\n\n const agentLabels = config.agents\n .map(v => AGENTS.find(a => a.value === v)?.hint ?? v)\n .join(', ');\n console.log(` Agent files : ${chalk.dim(agentLabels || 'none')}`);\n console.log('');\n\n const action = await select({\n message: 'What would you like to change?',\n options: [\n { value: 'git', label: 'Git tracking' },\n { value: 'sync', label: 'Auto-sync' },\n { value: 'memory', label: 'Memory settings', hint: 'log rotation threshold' },\n { value: 'agents', label: 'Agent instruction files' },\n { value: 'exit', label: 'Exit' },\n ],\n });\n\n if (isCancel(action) || action === 'exit') break;\n\n // ── Git tracking ───────────────────────────────────────────────────────\n if (action === 'git') {\n const choice = await select({\n message: 'Git tracking — should .brain/ be committed to git?',\n options: [\n { value: 'enable', label: 'Enable', hint: 'commit memory (share with your team)' },\n { value: 'disable', label: 'Disable', hint: 'add to .gitignore (keep memory personal)' },\n { value: 'back', label: '↩ Back' },\n ],\n initialValue: config.gitTracking ? 'enable' : 'disable',\n });\n\n if (isCancel(choice) || choice === 'back') continue;\n\n const newValue = choice === 'enable';\n if (newValue === config.gitTracking) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n if (newValue) {\n enableGitTracking(projectPath);\n console.log(` ${chalk.green('✓')} Git tracking enabled. .brain/ will be committed.`);\n } else {\n disableGitTracking(projectPath);\n console.log(` ${chalk.green('✓')} .gitignore updated. .brain/ will no longer be tracked.`);\n }\n\n config.gitTracking = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Git tracking')}`);\n }\n\n // ── Auto-sync ──────────────────────────────────────────────────────────\n if (action === 'sync') {\n const choice = await select({\n message: 'Auto-sync mode',\n options: [\n { value: 'enable', label: 'Enable', hint: 'watch for changes, sync automatically' },\n { value: 'disable', label: 'Disable', hint: 'run mindlink sync manually' },\n { value: 'back', label: '↩ Back' },\n ],\n initialValue: config.autoSync ? 'enable' : 'disable',\n });\n\n if (isCancel(choice) || choice === 'back') continue;\n\n const newValue = choice === 'enable';\n if (newValue === config.autoSync) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n config.autoSync = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.green('✓')} Auto-sync ${newValue ? 'enabled' : 'disabled'}.`);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Auto-sync')}`);\n }\n\n // ── Memory settings ───────────────────────────────────────────────────\n if (action === 'memory') {\n console.log('');\n console.log(` ${chalk.dim('How many session entries to keep in LOG.md before archiving older ones.')}`);\n console.log(` ${chalk.dim('Archived entries move to LOG-YYYY-MM-DD.md — never deleted.')}`);\n console.log(` ${chalk.dim('Lower = lighter context for your AI. Higher = more history visible.')}`);\n console.log('');\n\n const input = await text({\n message: `Max log entries before archiving (current: ${config.maxLogEntries})`,\n placeholder: String(config.maxLogEntries),\n validate(value) {\n const n = parseInt(value, 10);\n if (isNaN(n) || n < 1) return 'Enter a number greater than 0';\n },\n });\n\n if (isCancel(input)) continue;\n\n const newValue = parseInt(input as string, 10);\n if (newValue === config.maxLogEntries) {\n console.log(` ${chalk.dim('No change.')}`);\n continue;\n }\n\n config.maxLogEntries = newValue;\n saveConfig(brainDir, config);\n console.log(` ${chalk.green('✓')} Max log entries set to ${newValue}.`);\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Memory settings')}`);\n }\n\n // ── Agent files ────────────────────────────────────────────────────────\n if (action === 'agents') {\n const agentChoices = AGENTS.map(a => ({\n value: a.value,\n label: `${a.label.padEnd(18)} ${chalk.dim(a.hint)}`,\n hint: a.selected ? 'recommended' : undefined,\n }));\n\n const result = await multiselect({\n message: 'Which AI agents do you use?',\n options: agentChoices,\n initialValues: config.agents,\n required: false,\n });\n\n if (isCancel(result)) continue;\n\n const newAgents = result as string[];\n const added = newAgents.filter(v => !config.agents.includes(v));\n const removed = config.agents.filter(v => !newAgents.includes(v));\n\n const addedFiles: string[] = [];\n const removedFiles: string[] = [];\n\n for (const v of added) {\n const f = addAgentFile(projectPath, v);\n if (f) addedFiles.push(f);\n if (v === 'claude') {\n if (addClaudeHook(projectPath)) addedFiles.push('.claude/settings.json');\n }\n }\n\n for (const v of removed) {\n const f = removeAgentFile(projectPath, v);\n if (f) removedFiles.push(f);\n }\n\n config.agents = newAgents;\n saveConfig(brainDir, config);\n\n if (addedFiles.length === 0 && removedFiles.length === 0) {\n console.log(` ${chalk.dim('No change.')}`);\n } else {\n for (const f of addedFiles) console.log(` ${chalk.green('✓')} ${f} added.`);\n for (const f of removedFiles) console.log(` ${chalk.dim('✗')} ${f} removed.`);\n }\n console.log(` ${chalk.dim('↩ Change anytime: mindlink config → Agent instruction files')}`);\n }\n }\n\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync } from 'fs';\nimport { join, resolve, basename } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nfunction timestamp(): string {\n const d = new Date();\n const month = d.toLocaleString('default', { month: 'short' });\n const day = d.getDate();\n const time = d.toTimeString().slice(0, 5);\n return `${month} ${day} ${time}`;\n}\n\nfunction describeFile(filePath: string): string {\n if (!existsSync(filePath)) return chalk.dim('(missing)');\n const stat = statSync(filePath);\n const kb = (stat.size / 1024).toFixed(1);\n const content = readFileSync(filePath, 'utf8');\n const entries = (content.match(/^## /gm) ?? []).length;\n const name = basename(filePath);\n if (name === 'LOG.md') return entries > 0 ? `${entries} session${entries !== 1 ? 's' : ''}` : chalk.dim('empty');\n if (name === 'SHARED.md') {\n const lines = content.split('\\n').filter(l => l.trim() && !l.startsWith('#') && !l.startsWith('<!--') && !l.startsWith('>') && l !== '---').length;\n return lines > 0 ? `${lines} line${lines !== 1 ? 's' : ''}` : chalk.dim('empty');\n }\n if (name === 'SESSION.md') {\n const hasTask = content.includes('## Current Task') && !content.includes('<!-- ');\n return hasTask ? chalk.green('active') : chalk.dim('idle');\n }\n return `${kb} KB`;\n}\n\nexport const syncCommand = new Command('sync')\n .description('Sync shared context between sessions')\n .option('--once', 'Sync once and exit (default: watch mode)')\n .addHelpText('after', `\nExamples:\n mindlink sync\n mindlink sync --once\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const sharedPath = join(brainDir, 'SHARED.md');\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const memoryPath = join(brainDir, 'MEMORY.md');\n\n // ── --once mode ───────────────────────────────────────────────────────────\n if (opts.once) {\n console.log('');\n console.log(` ${chalk.dim('Checking shared context...')}`);\n console.log('');\n\n const files = [\n { label: 'SHARED.md ', path: sharedPath },\n { label: 'SESSION.md ', path: sessionPath },\n { label: 'LOG.md ', path: logPath },\n { label: 'MEMORY.md ', path: memoryPath },\n ];\n\n for (const { label, path } of files) {\n const desc = describeFile(path);\n const mtime = existsSync(path) ? statSync(path).mtime : null;\n const age = mtime\n ? (() => {\n const diff = Date.now() - mtime.getTime();\n const min = Math.floor(diff / 60000);\n const hr = Math.floor(diff / 3600000);\n if (min < 2) return 'just now';\n if (min < 60) return `${min}m ago`;\n return `${hr}h ago`;\n })()\n : '';\n console.log(` ${chalk.dim(label)} ${desc} ${chalk.dim(age)}`);\n }\n\n console.log('');\n console.log(` ${chalk.green('✓')} All sessions share the same .brain/ folder.`);\n console.log(` ${chalk.dim('Any session that writes to SHARED.md is immediately visible to all others.')}`);\n console.log('');\n return;\n }\n\n // ── Watch mode ────────────────────────────────────────────────────────────\n // Dynamic import so chokidar is only loaded when needed\n const { watch } = await import('chokidar');\n\n console.log('');\n console.log(` ${chalk.dim('Watching for changes...')} ${chalk.dim('(Ctrl+C to stop)')}`);\n console.log('');\n\n const watcher = watch(brainDir, {\n ignoreInitial: true,\n ignored: /(^|[/\\\\])\\../,\n persistent: true,\n awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 50 },\n });\n\n watcher.on('change', (filePath: string) => {\n const name = basename(filePath);\n const stat = statSync(filePath);\n const kb = (stat.size / 1024).toFixed(1);\n console.log(` ${chalk.dim('[' + timestamp() + ']')} ${chalk.cyan(name)} updated ${chalk.dim(kb + ' KB')} ${chalk.green('→ synced ✓')}`);\n });\n\n watcher.on('add', (filePath: string) => {\n const name = basename(filePath);\n console.log(` ${chalk.dim('[' + timestamp() + ']')} ${chalk.cyan(name)} created ${chalk.green('→ synced ✓')}`);\n });\n\n watcher.on('error', (err: unknown) => {\n console.log(` ${chalk.red('✗')} Watch error: ${err instanceof Error ? err.message : String(err)}`);\n });\n\n // Keep process alive\n process.on('SIGINT', () => {\n watcher.close();\n console.log('');\n console.log(` ${chalk.dim('Stopped.')}`);\n console.log('');\n process.exit(0);\n });\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel, spinner } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { createRequire } from 'module';\nimport { fileURLToPath } from 'url';\nimport { dirname, join } from 'path';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst require = createRequire(import.meta.url);\n\nfunction currentVersion(): string {\n try {\n const pkg = require(join(__dirname, '..', '..', 'package.json'));\n return pkg.version;\n } catch {\n return '0.0.0';\n }\n}\n\nasync function latestVersion(): Promise<string | null> {\n try {\n const { default: https } = await import('https');\n return new Promise((resolve) => {\n const req = https.get(\n 'https://registry.npmjs.org/mindlink/latest',\n { headers: { 'User-Agent': 'mindlink-cli' } },\n (res) => {\n let data = '';\n res.on('data', (chunk: Buffer) => { data += chunk; });\n res.on('end', () => {\n try {\n const parsed = JSON.parse(data);\n resolve(parsed.version ?? null);\n } catch {\n resolve(null);\n }\n });\n }\n );\n req.on('error', () => resolve(null));\n req.setTimeout(8000, () => { req.destroy(); resolve(null); });\n });\n } catch {\n return null;\n }\n}\n\nfunction semverGt(a: string, b: string): boolean {\n const pa = a.split('.').map(Number);\n const pb = b.split('.').map(Number);\n for (let i = 0; i < 3; i++) {\n if ((pa[i] ?? 0) > (pb[i] ?? 0)) return true;\n if ((pa[i] ?? 0) < (pb[i] ?? 0)) return false;\n }\n return false;\n}\n\nexport const updateCommand = new Command('update')\n .description('Update mindlink to the latest version')\n .addHelpText('after', `\nExamples:\n mindlink update\n `)\n .action(async () => {\n const current = currentVersion();\n\n // Non-TTY: just check and report, don't prompt\n if (!process.stdin.isTTY) {\n const latest = await latestVersion();\n if (!latest) {\n console.log(JSON.stringify({ current, latest: null, upToDate: null }));\n process.exit(1);\n }\n const upToDate = !semverGt(latest, current);\n console.log(JSON.stringify({ current, latest, upToDate }));\n if (!upToDate) process.exit(2); // exit 2 = update available\n return;\n }\n\n const s = spinner();\n s.start('Checking for updates...');\n\n const latest = await latestVersion();\n\n if (!latest) {\n s.stop('Could not reach npm registry.');\n console.log('');\n console.log(` ${chalk.red('✗')} Could not check for updates. Check your internet connection.`);\n console.log(` ${chalk.dim('Latest releases: github.com/404-not-found/mindlink/releases')}`);\n console.log('');\n process.exit(1);\n }\n\n s.stop('Done.');\n console.log('');\n console.log(` Current version : ${chalk.dim(current)}`);\n console.log(` Latest version : ${semverGt(latest, current) ? chalk.green(latest) : chalk.dim(latest)}`);\n console.log('');\n\n if (!semverGt(latest, current)) {\n console.log(` ${chalk.green('✓')} You're on the latest version (${current}).`);\n console.log('');\n return;\n }\n\n const action = await select({\n message: `Update to ${latest}?`,\n options: [\n { value: 'update', label: `Update to ${latest}` },\n { value: 'skip', label: 'Skip this version' },\n { value: 'cancel', label: 'Cancel' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel' || action === 'skip') {\n if (action === 'skip') {\n console.log(` ${chalk.dim('Skipped. Run mindlink update again to install later.')}`);\n } else {\n cancel('Cancelled.');\n }\n console.log('');\n return;\n }\n\n // Install\n const s2 = spinner();\n s2.start(`Installing mindlink@${latest}...`);\n\n try {\n execSync(`npm install -g mindlink@${latest}`, { stdio: 'pipe' });\n s2.stop('Done.');\n console.log('');\n console.log(` ${chalk.green('✓')} Updated to ${latest}.`);\n console.log(` ${chalk.dim('See what\\'s new: github.com/404-not-found/mindlink/releases')}`);\n } catch (err: unknown) {\n s2.stop('Failed.');\n console.log('');\n console.log(` ${chalk.red('✗')} Update failed.`);\n console.log(` ${chalk.dim('Try: npm install -g mindlink@' + latest)}`);\n if (err instanceof Error && err.message.includes('EACCES')) {\n console.log(` ${chalk.dim('Permission error — try: sudo npm install -g mindlink@' + latest)}`);\n }\n process.exit(1);\n }\n\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport {\n extractSection,\n extractBullets,\n countLogEntries,\n lastLogDate,\n parseLogEntries,\n} from '../utils/parser.js';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const summaryCommand = new Command('summary')\n .description('Print a full briefing of what your AI knows — great for sharing or reviewing context')\n .option('--json', 'Output as JSON')\n .addHelpText('after', `\nExamples:\n mindlink summary\n mindlink summary --json\n\nTip: your AI agent can run this itself — ask it to run \"mindlink summary\"\nto get a full briefing on the current project state.\n `)\n .action((opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n const memoryPath = join(brainDir, 'MEMORY.md');\n const sessionPath = join(brainDir, 'SESSION.md');\n const logPath = join(brainDir, 'LOG.md');\n const sharedPath = join(brainDir, 'SHARED.md');\n\n const memoryMd = existsSync(memoryPath) ? readFileSync(memoryPath, 'utf8') : '';\n const sessionMd = existsSync(sessionPath) ? readFileSync(sessionPath, 'utf8') : '';\n const logMd = existsSync(logPath) ? readFileSync(logPath, 'utf8') : '';\n const sharedMd = existsSync(sharedPath) ? readFileSync(sharedPath, 'utf8') : '';\n\n // Parse memory\n const projectOverview = extractSection(memoryMd, 'Project Overview') ||\n extractSection(memoryMd, 'Project Identity') ||\n extractSection(memoryMd, 'What Is This Project');\n const techStack = extractSection(memoryMd, 'Tech Stack') ||\n extractSection(memoryMd, 'Stack');\n const decisions = extractBullets(\n extractSection(memoryMd, 'Key Decisions') ||\n extractSection(memoryMd, 'Decisions')\n );\n\n // Parse session\n const rawTask = extractSection(sessionMd, 'Current Task');\n const task = rawTask.startsWith('<!--') ? '' : rawTask;\n const inProg = extractBullets(extractSection(sessionMd, 'In Progress'));\n const upNext = extractBullets(extractSection(sessionMd, 'Up Next'));\n const blockers = extractBullets(extractSection(sessionMd, 'Blockers'));\n\n // Parse log\n const sessionCount = countLogEntries(logMd);\n const lastDate = lastLogDate(logMd);\n const recentLogs = parseLogEntries(logMd).slice(0, 3);\n\n // Parse shared\n const sharedLines = sharedMd\n .split('\\n')\n .filter(l => l.trim() && !l.startsWith('#') && !l.startsWith('<!--') && !l.startsWith('>') && l !== '---')\n .slice(0, 10);\n\n // ── JSON ─────────────────────────────────────────────────────────────────\n if (opts.json) {\n console.log(JSON.stringify({\n project: { overview: projectOverview, techStack, decisions },\n session: { currentTask: task, inProgress: inProg, upNext, blockers },\n log: { totalSessions: sessionCount, lastSession: lastDate, recent: recentLogs },\n shared: sharedLines,\n }, null, 2));\n return;\n }\n\n // ── Human ─────────────────────────────────────────────────────────────────\n console.log('');\n console.log(` ${chalk.bold('◉ MindLink Memory Summary')} ${chalk.dim('·')} ${chalk.dim(projectPath)}`);\n console.log('');\n\n // Project\n if (projectOverview) {\n console.log(` ${chalk.bold('Project')}`);\n for (const line of projectOverview.split('\\n').filter(Boolean)) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n if (techStack) {\n console.log(` ${chalk.bold('Tech stack')}`);\n for (const line of techStack.split('\\n').filter(Boolean)) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n if (decisions.length > 0) {\n console.log(` ${chalk.bold('Key decisions')}`);\n for (const d of decisions.slice(0, 5)) {\n console.log(` ${chalk.dim('·')} ${d}`);\n }\n if (decisions.length > 5) {\n console.log(` ${chalk.dim(` …and ${decisions.length - 5} more in MEMORY.md`)}`);\n }\n console.log('');\n }\n\n // Current session\n if (task || inProg.length > 0 || upNext.length > 0) {\n console.log(` ${chalk.bold('Current session')}`);\n if (task) console.log(` ${chalk.cyan('◎')} ${task}`);\n for (const item of inProg) console.log(` ${chalk.yellow('●')} ${item}`);\n for (const item of blockers) console.log(` ${chalk.red('✗')} ${item}`);\n for (const item of upNext) console.log(` ${chalk.dim('→')} ${item}`);\n console.log('');\n }\n\n // Shared context\n if (sharedLines.length > 0) {\n console.log(` ${chalk.bold('Shared context')} ${chalk.dim('(from other sessions)')}`);\n for (const line of sharedLines) {\n console.log(` ${chalk.dim(line)}`);\n }\n console.log('');\n }\n\n // History\n if (recentLogs.length > 0) {\n console.log(` ${chalk.bold('Recent sessions')} ${chalk.dim(`(${sessionCount} total)`)}`);\n for (const entry of recentLogs) {\n console.log(` ${chalk.dim('──')} ${chalk.cyan(entry.heading)}`);\n if (entry.body) {\n const preview = entry.body.split('\\n').filter(Boolean)[0] ?? '';\n if (preview) console.log(` ${chalk.dim(preview.slice(0, 72))}`);\n }\n }\n console.log('');\n }\n\n if (!projectOverview && !task && sessionCount === 0 && sharedLines.length === 0) {\n console.log(` ${chalk.dim('Memory files are blank — your AI hasn\\'t written anything yet.')}`);\n console.log(` ${chalk.dim('Start a session and let it run — it will fill these in automatically.')}`);\n console.log('');\n }\n\n console.log(` ${chalk.dim('─────────────────────────────────────────────────')}`);\n console.log(` ${chalk.dim('Powered by MindLink — github.com/404-not-found/mindlink')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, rmSync, unlinkSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\nexport const uninstallCommand = new Command('uninstall')\n .description('Remove MindLink from the current project')\n .option('-y, --yes', 'Skip confirmation and remove all project files')\n .addHelpText('after', `\nWhat gets removed:\n - .brain/ folder (all memory files)\n - Agent instruction files (CLAUDE.md, CURSOR.md, etc.)\n - .claude/settings.json hook (if it was created by MindLink)\n\nWhat stays:\n - The mindlink CLI itself (run: npm uninstall -g mindlink)\n - Any files MindLink did not create\n\nNot what you need?\n mindlink clear — reset SESSION.md only (fresh session, keep everything else)\n mindlink reset — wipe memory back to blank (keep MindLink installed)\n\nExamples:\n mindlink uninstall\n mindlink uninstall --yes\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Nothing to uninstall here.`);\n console.log('');\n process.exit(1);\n }\n\n // Read config to know which agent files to remove\n let agents: string[] = [];\n try {\n const cfg = JSON.parse(readFileSync(join(brainDir, 'config.json'), 'utf8'));\n agents = cfg.agents ?? [];\n } catch {\n // config unreadable — use all agents as a safe default\n agents = AGENTS.map(a => a.value);\n }\n\n console.log('');\n\n if (!opts.yes) {\n console.log(` ${chalk.yellow('!')} This will remove MindLink from this project:`);\n console.log(` ${chalk.dim('· .brain/ (all memory files)')}`);\n for (const v of agents) {\n const agent = AGENTS.find(a => a.value === v);\n if (agent) console.log(` ${chalk.dim('· ' + agent.destFile)}`);\n }\n if (agents.includes('claude')) {\n console.log(` ${chalk.dim('· .claude/settings.json (hook)')}`);\n }\n console.log('');\n console.log(` ${chalk.dim('The mindlink CLI itself is NOT removed.')}`);\n console.log(` ${chalk.dim('To remove the CLI: npm uninstall -g mindlink')}`);\n console.log('');\n console.log(` ${chalk.dim('Lighter options:')}`);\n console.log(` ${chalk.dim(' mindlink clear — fresh session only (keeps all memory)')}`);\n console.log(` ${chalk.dim(' mindlink reset — wipe memory (keeps MindLink installed)')}`);\n console.log('');\n\n const action = await select({\n message: 'Remove MindLink from this project?',\n options: [\n { value: 'remove', label: 'Yes, remove everything listed above' },\n { value: 'cancel', label: 'Cancel' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel') {\n cancel('Cancelled.');\n console.log('');\n return;\n }\n console.log('');\n }\n\n const removed: string[] = [];\n const errors: string[] = [];\n\n // Remove .brain/\n try {\n rmSync(brainDir, { recursive: true, force: true });\n removed.push('.brain/');\n } catch (err: unknown) {\n errors.push(`.brain/: ${err instanceof Error ? err.message : String(err)}`);\n }\n\n // Remove agent instruction files\n for (const v of agents) {\n const agent = AGENTS.find(a => a.value === v);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n if (existsSync(destPath)) {\n try {\n unlinkSync(destPath);\n removed.push(agent.destFile);\n } catch (err: unknown) {\n errors.push(`${agent.destFile}: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n }\n\n // Remove .claude/settings.json (only if agent was claude)\n if (agents.includes('claude')) {\n const hookPath = join(projectPath, '.claude', 'settings.json');\n if (existsSync(hookPath)) {\n try {\n unlinkSync(hookPath);\n removed.push('.claude/settings.json');\n } catch {\n // non-fatal — user may have customised this file\n }\n }\n }\n\n for (const f of removed) console.log(` ${chalk.green('✓')} ${f} removed.`);\n for (const e of errors) console.log(` ${chalk.red('✗')} ${e}`);\n\n console.log('');\n console.log(` ${chalk.dim('MindLink removed from this project.')}`);\n console.log(` ${chalk.dim('To remove the CLI itself: npm uninstall -g mindlink')}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { text, confirm, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, readdirSync } from 'fs';\nimport { join, resolve, basename } from 'path';\nimport AdmZip from 'adm-zip';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\n\nexport const exportCommand = new Command('export')\n .description('Export .brain/ memory to a shareable zip file')\n .option('--output <path>', 'Directory or full path to save the zip file')\n .option('--include-agents', 'Also include agent instruction files (CLAUDE.md, CURSOR.md, etc.)')\n .addHelpText('after', `\nWhat gets exported:\n - .brain/MEMORY.md — permanent project facts\n - .brain/SESSION.md — current session state\n - .brain/SHARED.md — shared context across sessions\n - .brain/LOG.md — full session history\n - .brain/config.json — settings (excluded by default; use --include-agents for agent files)\n\nUse cases:\n Onboard a new teammate — send them the zip; they run: mindlink import brain.zip\n Back up before reset — export first, then mindlink reset\n Share project context — hand off to a consultant without giving repo access\n\nExamples:\n mindlink export\n mindlink export --output ~/Desktop\n mindlink export --output ~/Desktop/my-app-brain.zip\n mindlink export --include-agents\n `)\n .action(async (opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n if (!existsSync(brainDir)) {\n console.log('');\n console.log(` ${chalk.red('✗')} No .brain/ found in this directory.`);\n console.log(` Run ${chalk.cyan('mindlink init')} to get started.`);\n console.log('');\n process.exit(1);\n }\n\n console.log('');\n\n // --- Determine output path ---\n const projectName = basename(projectPath);\n const date = new Date().toISOString().slice(0, 10);\n const defaultFilename = `${projectName}-brain-${date}.zip`;\n\n let outputPath: string;\n\n if (opts.output) {\n // If they gave a directory, append default filename\n const given = resolve(opts.output);\n if (existsSync(given) && !given.endsWith('.zip')) {\n outputPath = join(given, defaultFilename);\n } else {\n outputPath = given;\n }\n } else if (process.stdin.isTTY) {\n // Interactive: prompt for location\n const answer = await text({\n message: 'Where should the zip be saved?',\n placeholder: projectPath,\n initialValue: projectPath,\n hint: `default filename: ${defaultFilename}`,\n });\n\n if (isCancel(answer)) { cancel('Cancelled.'); process.exit(0); }\n\n const dest = resolve(answer as string);\n // If the answer is a directory (or ends without .zip), append default filename\n if (!dest.endsWith('.zip')) {\n outputPath = join(dest, defaultFilename);\n } else {\n outputPath = dest;\n }\n } else {\n // Non-interactive: drop in cwd\n outputPath = join(projectPath, defaultFilename);\n }\n\n // --- Build zip ---\n const zip = new AdmZip();\n\n // Core .brain/ files\n const brainFiles = ['MEMORY.md', 'SESSION.md', 'SHARED.md', 'LOG.md'];\n const included: string[] = [];\n const skipped: string[] = [];\n\n for (const file of brainFiles) {\n const filePath = join(brainDir, file);\n if (existsSync(filePath)) {\n zip.addLocalFile(filePath, '.brain');\n included.push(`.brain/${file}`);\n } else {\n skipped.push(`.brain/${file}`);\n }\n }\n\n // Also include any LOG archive files\n const archiveFiles = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}-\\d{2}\\.md$/.test(f));\n for (const file of archiveFiles) {\n zip.addLocalFile(join(brainDir, file), '.brain');\n included.push(`.brain/${file}`);\n }\n\n // Agent instruction files (optional)\n if (opts.includeAgents) {\n for (const agent of AGENTS) {\n const agentPath = join(projectPath, agent.destFile);\n if (existsSync(agentPath)) {\n const dir = agent.destFile.includes('/') ? agent.destFile.split('/').slice(0, -1).join('/') : '';\n zip.addLocalFile(agentPath, dir);\n included.push(agent.destFile);\n }\n }\n }\n\n // Write zip\n try {\n zip.writeZip(outputPath);\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} Could not write zip: ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n // --- Output ---\n for (const f of included) console.log(` ${chalk.green('✓')} ${f}`);\n if (skipped.length > 0) {\n for (const f of skipped) console.log(` ${chalk.dim('–')} ${f} ${chalk.dim('(not found, skipped)')}`);\n }\n console.log('');\n console.log(` ${chalk.green('✓')} Exported to: ${chalk.bold(outputPath)}`);\n console.log('');\n console.log(` ${chalk.dim('To import on another machine or project:')}`);\n console.log(` ${chalk.cyan(`mindlink import ${basename(outputPath)}`)}`);\n console.log('');\n });\n","import { Command } from 'commander';\nimport { select, isCancel, cancel } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { existsSync, mkdirSync } from 'fs';\nimport { join, resolve, extname } from 'path';\nimport AdmZip from 'adm-zip';\nimport { BRAIN_DIR } from '../utils/paths.js';\n\nexport const importCommand = new Command('import')\n .description('Import a MindLink memory zip into the current project')\n .argument('<file>', 'Path to the .zip file exported by mindlink export')\n .option('-y, --yes', 'Skip confirmation and overwrite existing memory')\n .addHelpText('after', `\nWhat gets imported:\n All .brain/ files found in the zip (MEMORY.md, SESSION.md, SHARED.md, LOG.md,\n and any LOG archive files). Agent instruction files are also imported if the zip\n contains them.\n\nIf .brain/ already exists, you will be asked whether to:\n Merge — import only files that don't exist yet (keeps your current memory)\n Overwrite — replace everything (use when onboarding from a teammate's export)\n Cancel — do nothing\n\nUse cases:\n Onboard on a new machine — copy the zip, run: mindlink import brain.zip\n Restore from backup — mindlink import my-app-brain-2026-04-10.zip\n Accept a colleague's brain — merge their context into your project\n\nExamples:\n mindlink import my-app-brain-2026-04-10.zip\n mindlink import ~/Desktop/my-app-brain-2026-04-10.zip --yes\n `)\n .action(async (file, opts) => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n const zipPath = resolve(file);\n\n console.log('');\n\n if (!existsSync(zipPath)) {\n console.log(` ${chalk.red('✗')} File not found: ${zipPath}`);\n console.log('');\n process.exit(1);\n }\n\n if (extname(zipPath) !== '.zip') {\n console.log(` ${chalk.red('✗')} Expected a .zip file. Got: ${zipPath}`);\n console.log('');\n process.exit(1);\n }\n\n // --- Load and validate zip ---\n let zip: AdmZip;\n try {\n zip = new AdmZip(zipPath);\n } catch (err: unknown) {\n console.log(` ${chalk.red('✗')} Could not read zip: ${err instanceof Error ? err.message : String(err)}`);\n console.log('');\n process.exit(1);\n }\n\n const entries = zip.getEntries();\n const brainEntries = entries.filter(e => e.entryName.startsWith('.brain/') && !e.isDirectory);\n\n if (brainEntries.length === 0) {\n console.log(` ${chalk.red('✗')} This zip doesn't contain any .brain/ files.`);\n console.log(` Make sure it was created with ${chalk.cyan('mindlink export')}.`);\n console.log('');\n process.exit(1);\n }\n\n // --- Handle existing .brain/ ---\n let mode: 'merge' | 'overwrite' = 'overwrite';\n\n if (existsSync(brainDir)) {\n if (opts.yes) {\n mode = 'overwrite';\n } else {\n console.log(` ${chalk.yellow('!')} .brain/ already exists in this project.`);\n console.log('');\n\n const action = await select({\n message: 'How should the import handle existing memory?',\n options: [\n { value: 'merge', label: 'Merge', hint: 'add files that don\\'t exist yet — keep your current memory' },\n { value: 'overwrite', label: 'Overwrite', hint: 'replace everything with the imported version' },\n { value: 'cancel', label: 'Cancel', hint: '' },\n ],\n });\n\n if (isCancel(action) || action === 'cancel') {\n cancel('Cancelled.');\n console.log('');\n return;\n }\n\n mode = action as 'merge' | 'overwrite';\n console.log('');\n }\n }\n\n // --- Extract ---\n mkdirSync(brainDir, { recursive: true });\n\n const written: string[] = [];\n const skipped: string[] = [];\n\n for (const entry of entries) {\n if (entry.isDirectory) continue;\n\n const destPath = join(projectPath, entry.entryName);\n const destDir = join(projectPath, entry.entryName.split('/').slice(0, -1).join('/'));\n\n if (mode === 'merge' && existsSync(destPath)) {\n skipped.push(entry.entryName);\n continue;\n }\n\n mkdirSync(destDir, { recursive: true });\n zip.extractEntryTo(entry, destDir, false, true);\n written.push(entry.entryName);\n }\n\n // --- Output ---\n for (const f of written) console.log(` ${chalk.green('✓')} ${f}`);\n for (const f of skipped) console.log(` ${chalk.dim('–')} ${f} ${chalk.dim('(already exists, kept)')}`);\n console.log('');\n\n if (written.length === 0) {\n console.log(` ${chalk.dim('Nothing imported — all files already exist (merge mode).')}`);\n } else {\n console.log(` ${chalk.green('✓')} Brain transplant complete. Your AI wakes up knowing everything.`);\n if (!existsSync(join(brainDir, '../CLAUDE.md')) && !existsSync(join(brainDir, '../CURSOR.md'))) {\n console.log(` ${chalk.dim('No agent instruction files found — run mindlink init to wire them up.')}`);\n }\n }\n console.log('');\n });\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { existsSync, readFileSync, statSync, readdirSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { BRAIN_DIR } from '../utils/paths.js';\nimport { AGENTS } from '../utils/agents.js';\nimport { extractSection, parseLogEntries, relativeTime } from '../utils/parser.js';\n\nconst CORE_LINE_LIMIT = 50;\nconst CORE_WARN_THRESHOLD = 40;\n\ntype CheckStatus = 'ok' | 'warn' | 'fail' | 'info';\n\ninterface Check {\n status: CheckStatus;\n label: string;\n detail?: string;\n}\n\nfunction ok(label: string, detail?: string): Check { return { status: 'ok', label, detail }; }\nfunction warn(label: string, detail?: string): Check { return { status: 'warn', label, detail }; }\nfunction fail(label: string, detail?: string): Check { return { status: 'fail', label, detail }; }\nfunction info(label: string, detail?: string): Check { return { status: 'info', label, detail }; }\n\nfunction icon(status: CheckStatus): string {\n switch (status) {\n case 'ok': return chalk.green('✓');\n case 'warn': return chalk.yellow('!');\n case 'fail': return chalk.red('✗');\n case 'info': return chalk.dim('·');\n }\n}\n\nexport const doctorCommand = new Command('doctor')\n .description('Check that your MindLink setup is healthy')\n .addHelpText('after', `\nWhat gets checked:\n .brain/ — exists and contains all expected files\n MEMORY.md — Core has content; warns if Core is getting too long to reliably read\n SESSION.md — has content (agent is updating it)\n LOG.md — session count, how far back history goes, warns when oldest sessions near rotation\n Agent files — instruction files exist per your config.json\n Hook — .claude/settings.json exists (if Claude Code is configured)\n\nExamples:\n mindlink doctor\n `)\n .action(() => {\n const projectPath = resolve(process.cwd());\n const brainDir = join(projectPath, BRAIN_DIR);\n\n console.log('');\n console.log(` ${chalk.bold('◉ MindLink Doctor')}`);\n console.log(` ${chalk.dim(projectPath)}`);\n console.log('');\n\n const checks: Check[] = [];\n let failCount = 0;\n let warnCount = 0;\n\n // ── 1. .brain/ exists ───────────────────────────────────────────────────\n if (!existsSync(brainDir)) {\n checks.push(fail('.brain/ missing', `Run ${chalk.cyan('mindlink init')} to get started.`));\n printChecks(checks);\n process.exit(1);\n }\n checks.push(ok('.brain/ found'));\n\n // ── 2. config.json ──────────────────────────────────────────────────────\n const configPath = join(brainDir, 'config.json');\n let config: { agents?: string[]; gitTracking?: boolean; autoSync?: boolean; maxLogEntries?: number } = {};\n if (!existsSync(configPath)) {\n checks.push(warn('config.json missing', `Run ${chalk.cyan('mindlink config')} to repair.`));\n } else {\n try {\n config = JSON.parse(readFileSync(configPath, 'utf8'));\n checks.push(ok('config.json valid'));\n } catch {\n checks.push(warn('config.json unreadable', 'File may be corrupted — delete and re-run mindlink init.'));\n }\n }\n\n // ── 3. MEMORY.md ────────────────────────────────────────────────────────\n const memoryPath = join(brainDir, 'MEMORY.md');\n if (!existsSync(memoryPath)) {\n checks.push(fail('MEMORY.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const memoryMd = readFileSync(memoryPath, 'utf8');\n const coreSection = extractSection(memoryMd, 'Core');\n const coreLines = coreSection.split('\\n').filter(l => l.trim().length > 0 && !l.startsWith('<!--')).length;\n\n if (coreLines === 0) {\n checks.push(warn('MEMORY.md Core is empty', 'Your AI has no permanent facts yet — ask it to fill in MEMORY.md after your next session.'));\n } else if (coreLines >= CORE_LINE_LIMIT) {\n checks.push(warn(\n 'MEMORY.md Core is getting too long',\n 'Ask your AI to consolidate — Core is read every session start, so keep it tight.'\n ));\n } else if (coreLines >= CORE_WARN_THRESHOLD) {\n checks.push(warn(\n 'MEMORY.md Core is getting long',\n 'Consider asking your AI to consolidate — Core is read on every session start.'\n ));\n } else {\n checks.push(ok('MEMORY.md Core has content'));\n }\n }\n\n // ── 4. SESSION.md ───────────────────────────────────────────────────────\n const sessionPath = join(brainDir, 'SESSION.md');\n if (!existsSync(sessionPath)) {\n checks.push(fail('SESSION.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const sessionMd = readFileSync(sessionPath, 'utf8');\n const hasContent = sessionMd.split('\\n').some(l => l.trim().length > 0 && !l.startsWith('<!--') && !l.startsWith('#'));\n const mtime = statSync(sessionPath).mtime;\n const age = relativeTime(mtime);\n\n if (!hasContent) {\n checks.push(warn('SESSION.md has no content yet', 'Start an AI session — it will fill this in automatically.'));\n } else {\n checks.push(ok(`SESSION.md — updated ${age}`));\n }\n }\n\n // ── 5. LOG.md ───────────────────────────────────────────────────────────\n const logPath = join(brainDir, 'LOG.md');\n if (!existsSync(logPath)) {\n checks.push(fail('LOG.md missing', `Run ${chalk.cyan('mindlink init')} to recreate it.`));\n } else {\n const logMd = readFileSync(logPath, 'utf8');\n const entries = parseLogEntries(logMd);\n const entryCount = entries.length;\n const maxEntries: number = (config as any).maxLogEntries ?? 50;\n\n if (entryCount === 0) {\n checks.push(info('LOG.md — no sessions yet, start your first AI session'));\n } else {\n // Newest entry = last in file (append order)\n const newestHeading = entries[entries.length - 1].heading;\n const oldestHeading = entries[0].heading;\n const remaining = maxEntries - entryCount;\n\n if (remaining <= 3 && remaining > 0) {\n checks.push(warn(\n `LOG.md — ${entryCount}/${maxEntries} sessions, ${remaining} until oldest start archiving`,\n `Oldest session on record: ${oldestHeading} — it will be archived soon. Important decisions belong in MEMORY.md where they never rotate out.`\n ));\n } else if (remaining <= 0) {\n checks.push(warn(\n `LOG.md — at ${maxEntries}-session limit, oldest are being archived`,\n `Oldest session on record: ${oldestHeading}. Anything important should be in MEMORY.md.`\n ));\n } else {\n checks.push(ok(`LOG.md — ${entryCount} sessions logged (last: ${newestHeading}, going back to: ${oldestHeading})`));\n }\n }\n\n // Archive files\n const archives = readdirSync(brainDir).filter(f => /^LOG-\\d{4}-\\d{2}\\.md$/.test(f));\n if (archives.length > 0) {\n checks.push(info(`${archives.length} archive file${archives.length !== 1 ? 's' : ''} — old sessions are stored in LOG-*.md, not gone`));\n }\n }\n\n // ── 6. Agent instruction files ──────────────────────────────────────────\n const configuredAgents: string[] = config.agents ?? [];\n if (configuredAgents.length === 0) {\n checks.push(warn('No agents configured', `Run ${chalk.cyan('mindlink config')} → Agent instruction files.`));\n } else {\n for (const agentValue of configuredAgents) {\n const agent = AGENTS.find(a => a.value === agentValue);\n if (!agent) continue;\n const destPath = join(projectPath, agent.destFile);\n if (!existsSync(destPath)) {\n checks.push(fail(`${agent.destFile} missing`, `Run ${chalk.cyan('mindlink config')} → Agent instruction files to recreate.`));\n } else {\n checks.push(ok(`${agent.destFile} — ${agent.label}`));\n }\n }\n }\n\n // ── 7. Claude Code hook ──────────────────────────────────────────────────\n if (configuredAgents.includes('claude')) {\n const hookPath = join(projectPath, '.claude', 'settings.json');\n if (!existsSync(hookPath)) {\n checks.push(warn(\n '.claude/settings.json missing',\n `Claude Code won't auto-reload after context compaction. Run ${chalk.cyan('mindlink config')} → Agent instruction files to restore.`\n ));\n } else {\n try {\n const settings = JSON.parse(readFileSync(hookPath, 'utf8'));\n const hasHook = settings?.hooks?.UserPromptSubmit != null;\n if (!hasHook) {\n checks.push(warn('.claude/settings.json exists but MindLink hook not found', 'Hook may have been removed — check the file manually.'));\n } else {\n checks.push(ok('.claude/settings.json — UserPromptSubmit hook active'));\n }\n } catch {\n checks.push(warn('.claude/settings.json is not valid JSON', 'Fix or delete it to restore the hook.'));\n }\n }\n }\n\n // ── 8. Git tracking notice ───────────────────────────────────────────────\n if (config.gitTracking === false) {\n checks.push(info('.brain/ is excluded from git (personal memory only)'));\n } else if (config.gitTracking === true) {\n checks.push(info('.brain/ is committed to git (shared team memory)'));\n }\n\n // ── Summary ──────────────────────────────────────────────────────────────\n for (const c of checks) {\n if (c.status === 'fail') failCount++;\n if (c.status === 'warn') warnCount++;\n }\n\n printChecks(checks);\n\n if (failCount > 0) {\n console.log(` ${chalk.red.bold(`${failCount} problem${failCount !== 1 ? 's' : ''} found`)} — fix the issues above and re-run ${chalk.cyan('mindlink doctor')}.`);\n } else if (warnCount > 0) {\n console.log(` ${chalk.yellow.bold(`${warnCount} warning${warnCount !== 1 ? 's' : ''}`)}, no critical issues. Your AI will still work.`);\n } else {\n console.log(` ${chalk.green.bold('All good.')} Your AI has a healthy brain.`);\n }\n console.log('');\n\n if (failCount > 0) process.exit(1);\n });\n\nfunction printChecks(checks: Check[]): void {\n for (const c of checks) {\n const prefix = ` ${icon(c.status)} `;\n console.log(`${prefix}${c.label}`);\n if (c.detail) {\n console.log(` ${chalk.dim(c.detail)}`);\n }\n }\n console.log('');\n}\n","import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { VERSION } from '../utils/version.js';\n\nexport const versionCommand = new Command('version')\n .description('Show the current MindLink version')\n .action(() => {\n console.log('');\n console.log(` ${chalk.bold('◉ MindLink')} v${VERSION}`);\n console.log('');\n console.log(` ${chalk.dim('Run')} ${chalk.cyan('mindlink update')} ${chalk.dim('to check for a newer version.')}`);\n console.log('');\n });\n"],"mappings":"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","names":["Command","chalk","chalk","join","dirname","join","info","chalk","execSync","dirname","Command","chalk","existsSync","readFileSync","join","resolve","text","Command","resolve","join","existsSync","chalk","readFileSync","Command","chalk","existsSync","readFileSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","Command","chalk","existsSync","readFileSync","writeFileSync","join","resolve","Command","resolve","join","existsSync","chalk","writeFileSync","readFileSync","Command","isCancel","cancel","chalk","existsSync","readFileSync","writeFileSync","join","resolve","BRAIN_FILES","Command","resolve","join","existsSync","chalk","isCancel","cancel","writeFileSync","readFileSync","Command","select","multiselect","isCancel","chalk","existsSync","readFileSync","writeFileSync","appendFileSync","mkdirSync","join","resolve","dirname","readFileSync","join","writeFileSync","existsSync","appendFileSync","mkdirSync","dirname","Command","resolve","chalk","select","isCancel","multiselect","Command","chalk","existsSync","readFileSync","statSync","join","resolve","basename","existsSync","chalk","statSync","readFileSync","basename","Command","resolve","join","Command","select","isCancel","cancel","spinner","chalk","fileURLToPath","dirname","join","__filename","__dirname","require","resolve","latest","Command","chalk","existsSync","readFileSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","Command","select","isCancel","cancel","chalk","existsSync","readFileSync","unlinkSync","join","resolve","Command","resolve","join","existsSync","chalk","readFileSync","select","isCancel","cancel","unlinkSync","Command","text","isCancel","cancel","chalk","existsSync","readdirSync","join","resolve","basename","Command","resolve","join","existsSync","chalk","basename","text","isCancel","cancel","readdirSync","Command","select","isCancel","cancel","chalk","existsSync","mkdirSync","join","resolve","AdmZip","Command","resolve","join","existsSync","chalk","AdmZip","select","isCancel","cancel","mkdirSync","Command","chalk","existsSync","readFileSync","statSync","readdirSync","join","resolve","chalk","Command","resolve","join","existsSync","readFileSync","statSync","readdirSync","Command","chalk","Command","chalk","Command","_","chalk"]}
|