@hiveai/cli 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +514 -208
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/commands/embeddings.ts","../src/utils/ui.ts","../src/commands/init.ts","../src/commands/mcp.ts","../src/commands/memory-add.ts","../src/commands/memory-list.ts","../src/utils/fs.ts","../src/commands/memory-promote.ts","../src/commands/memory-approve.ts","../src/commands/memory-auto-promote.ts","../src/commands/memory-edit.ts","../src/commands/memory-for-files.ts","../src/commands/memory-pending.ts","../src/commands/memory-query.ts","../src/commands/memory-reject.ts","../src/commands/memory-rm.ts","../src/commands/memory-show.ts","../src/commands/memory-stats.ts","../src/commands/memory-verify.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { registerEmbeddings } from \"./commands/embeddings.js\";\nimport { registerInit } from \"./commands/init.js\";\nimport { registerMcp } from \"./commands/mcp.js\";\nimport { registerMemoryAdd } from \"./commands/memory-add.js\";\nimport { registerMemoryList } from \"./commands/memory-list.js\";\nimport { registerMemoryPromote } from \"./commands/memory-promote.js\";\nimport { registerMemoryApprove } from \"./commands/memory-approve.js\";\nimport { registerMemoryAutoPromote } from \"./commands/memory-auto-promote.js\";\nimport { registerMemoryEdit } from \"./commands/memory-edit.js\";\nimport { registerMemoryForFiles } from \"./commands/memory-for-files.js\";\nimport { registerMemoryPending } from \"./commands/memory-pending.js\";\nimport { registerMemoryQuery } from \"./commands/memory-query.js\";\nimport { registerMemoryReject } from \"./commands/memory-reject.js\";\nimport { registerMemoryRm } from \"./commands/memory-rm.js\";\nimport { registerMemoryShow } from \"./commands/memory-show.js\";\nimport { registerMemoryStats } from \"./commands/memory-stats.js\";\nimport { registerMemoryVerify } from \"./commands/memory-verify.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"haive\")\n .description(\"hAIve — team-first persistent memory layer for AI coding agents\")\n .version(\"0.1.0\");\n\nregisterInit(program);\nregisterMcp(program);\nregisterEmbeddings(program);\n\nconst memory = program.command(\"memory\").description(\"Manage memory entries\");\nregisterMemoryAdd(memory);\nregisterMemoryList(memory);\nregisterMemoryQuery(memory);\nregisterMemoryPromote(memory);\nregisterMemoryVerify(memory);\nregisterMemoryStats(memory);\nregisterMemoryReject(memory);\nregisterMemoryAutoPromote(memory);\nregisterMemoryForFiles(memory);\nregisterMemoryShow(memory);\nregisterMemoryEdit(memory);\nregisterMemoryRm(memory);\nregisterMemoryPending(memory);\nregisterMemoryApprove(memory);\n\nprogram.parseAsync(process.argv).catch((err: unknown) => {\n console.error(err instanceof Error ? err.message : err);\n process.exit(1);\n});\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface EmbeddingsOptions {\n dir?: string;\n}\n\ninterface EmbeddingsQueryOptions extends EmbeddingsOptions {\n limit?: string;\n minScore?: string;\n}\n\nexport function registerEmbeddings(program: Command): void {\n const embeddings = program\n .command(\"embeddings\")\n .description(\"Manage local embeddings index for semantic search\");\n\n embeddings\n .command(\"index\")\n .description(\"Generate or refresh the embeddings index for all memories\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: EmbeddingsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n const { Embedder, rebuildIndex } = await loadEmbeddings();\n ui.info(\"Loading embedding model (first run downloads ~110MB)…\");\n const embedder = await Embedder.create();\n ui.info(`Model ready: ${embedder.model} (dim=${embedder.dimension}). Indexing memories…`);\n const { report } = await rebuildIndex(paths, embedder);\n ui.success(\n `Indexed ${report.total} memories — added=${report.added} updated=${report.updated} unchanged=${report.unchanged} removed=${report.removed}`,\n );\n });\n\n embeddings\n .command(\"query <text>\")\n .description(\"Run a semantic search against the local embeddings index\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--limit <n>\", \"max results\", \"10\")\n .option(\"--min-score <n>\", \"minimum cosine similarity (0-1)\", \"0\")\n .action(async (text: string, opts: EmbeddingsQueryOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n const { semanticSearch } = await loadEmbeddings();\n const result = await semanticSearch(paths, text, {\n limit: Number(opts.limit ?? 10),\n minScore: Number(opts.minScore ?? 0),\n });\n if (!result) {\n ui.error(\"No embeddings index found. Run `haive embeddings index` first.\");\n process.exitCode = 1;\n return;\n }\n if (result.hits.length === 0) {\n ui.info(\"No semantic matches above the threshold.\");\n return;\n }\n for (const hit of result.hits) {\n const score = hit.score.toFixed(3);\n console.log(`${ui.bold(score)} ${hit.id}`);\n console.log(` ${ui.dim(path.relative(root, hit.file_path))}`);\n }\n });\n\n embeddings\n .command(\"status\")\n .description(\"Show the embeddings index status\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: EmbeddingsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n const { indexStat } = await loadEmbeddings();\n const stat = await indexStat(paths);\n if (!stat.exists) {\n ui.warn(\"No embeddings index. Run `haive embeddings index` to create one.\");\n return;\n }\n console.log(`${ui.bold(\"entries:\")} ${stat.count}`);\n console.log(`${ui.bold(\"model:\")} ${stat.model}`);\n console.log(`${ui.bold(\"updated_at:\")} ${stat.updatedAt}`);\n console.log(`${ui.bold(\"size:\")} ${(stat.sizeBytes / 1024).toFixed(1)} KB`);\n });\n}\n\nasync function loadEmbeddings() {\n try {\n return await import(\"@hiveai/embeddings\");\n } catch (err) {\n ui.error(\n \"Could not load @hiveai/embeddings. Install it or run `pnpm build` in the monorepo.\",\n );\n throw err;\n }\n}\n","import pc from \"picocolors\";\n\nexport const ui = {\n info: (msg: string) => console.log(pc.cyan(\"ℹ\"), msg),\n success: (msg: string) => console.log(pc.green(\"✓\"), msg),\n warn: (msg: string) => console.log(pc.yellow(\"⚠\"), msg),\n error: (msg: string) => console.error(pc.red(\"✗\"), msg),\n dim: (msg: string) => pc.dim(msg),\n bold: (msg: string) => pc.bold(msg),\n};\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\nconst PROJECT_CONTEXT_TEMPLATE = `# Project context\n\n> Generated by \\`haive init\\`. Edit this file (or let your AI agent fill it via the upcoming MCP \\`bootstrap_project\\` tool).\n\n## Architecture\nTODO — high-level overview of the codebase.\n\n## Key modules\nTODO — list main modules and their purpose.\n\n## Conventions\nTODO — coding conventions, naming, patterns the team follows.\n\n## Glossary\nTODO — domain terms and what they mean here.\n\n## Gotchas\nTODO — known traps, surprising behavior, things newcomers stub their toes on.\n`;\n\nconst BRIDGE_BODY = `<!-- hAIve bridge file — do not edit by hand. -->\n<!-- This file points your AI tool at the shared hAIve project context. -->\n\nSee \\`.ai/project-context.md\\` for the full project context.\nMemories live under \\`.ai/memories/\\` (personal/team/module).\n`;\n\nexport function registerInit(program: Command): void {\n program\n .command(\"init\")\n .description(\"Initialize a hAIve project (.ai/ structure + bridge files)\")\n .option(\"-d, --dir <dir>\", \"project root\", process.cwd())\n .option(\"--no-bridges\", \"do not generate CLAUDE.md / .cursorrules / copilot-instructions.md\")\n .action(async (opts: { dir: string; bridges: boolean }) => {\n const root = path.resolve(opts.dir);\n const paths = resolveHaivePaths(root);\n\n if (existsSync(paths.haiveDir)) {\n ui.warn(`.ai/ already exists at ${paths.haiveDir} — leaving existing files in place.`);\n }\n\n await mkdir(paths.personalDir, { recursive: true });\n await mkdir(paths.teamDir, { recursive: true });\n await mkdir(paths.moduleDir, { recursive: true });\n await mkdir(paths.modulesContextDir, { recursive: true });\n\n if (!existsSync(paths.projectContext)) {\n await writeFile(paths.projectContext, PROJECT_CONTEXT_TEMPLATE, \"utf8\");\n ui.success(`Created ${path.relative(root, paths.projectContext)}`);\n }\n\n if (opts.bridges) {\n await writeBridge(root, \"CLAUDE.md\");\n await writeBridge(root, \".cursorrules\");\n await writeBridge(root, path.join(\".github\", \"copilot-instructions.md\"));\n }\n\n ui.success(`hAIve initialized at ${root}`);\n ui.info(\"Next: \" + ui.bold(\"haive memory add --type convention --slug <name>\"));\n });\n}\n\nasync function writeBridge(root: string, relPath: string): Promise<void> {\n const target = path.join(root, relPath);\n if (existsSync(target)) {\n ui.info(`Bridge ${relPath} already exists — skipped`);\n return;\n }\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, BRIDGE_BODY, \"utf8\");\n ui.success(`Created bridge ${relPath}`);\n}\n\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command } from \"commander\";\nimport { findProjectRoot } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\nconst require = createRequire(import.meta.url);\n\ninterface McpOptions {\n dir?: string;\n}\n\nexport function registerMcp(program: Command): void {\n program\n .command(\"mcp\")\n .description(\"Start the hAIve MCP server (stdio transport)\")\n .option(\"-d, --dir <dir>\", \"project root (defaults to nearest .ai/ or .git/)\")\n .action((opts: McpOptions) => {\n const root = findProjectRoot(opts.dir);\n const bin = locateMcpBin();\n if (!bin) {\n ui.error(\n \"@hiveai/mcp binary not found. Install @hiveai/mcp or run `pnpm build` in the monorepo.\",\n );\n process.exit(1);\n }\n const child = spawn(\"node\", [bin, \"--root\", root], {\n stdio: [\"inherit\", \"inherit\", \"inherit\"],\n env: process.env,\n });\n child.on(\"exit\", (code) => process.exit(code ?? 0));\n });\n}\n\nfunction locateMcpBin(): string | null {\n // 1. Resolve the @hiveai/mcp package and use its bin entry.\n try {\n const pkgPath = require.resolve(\"@hiveai/mcp/package.json\");\n const pkgDir = path.dirname(pkgPath);\n const candidate = path.join(pkgDir, \"dist\", \"index.js\");\n if (existsSync(candidate)) return candidate;\n } catch {\n // not installed — fall through\n }\n\n // 2. Fallback: look for sibling package in monorepo dev mode.\n const here = path.dirname(fileURLToPath(import.meta.url));\n const sibling = path.resolve(here, \"..\", \"..\", \"..\", \"mcp\", \"dist\", \"index.js\");\n if (existsSync(sibling)) return sibling;\n\n return null;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n buildFrontmatter,\n findProjectRoot,\n memoryFilePath,\n resolveHaivePaths,\n serializeMemory,\n type MemoryScope,\n type MemoryType,\n} from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface AddOptions {\n type: MemoryType;\n slug: string;\n scope?: MemoryScope;\n module?: string;\n tags?: string;\n domain?: string;\n author?: string;\n paths?: string;\n symbols?: string;\n commit?: string;\n body?: string;\n dir?: string;\n}\n\nexport function registerMemoryAdd(memory: Command): void {\n memory\n .command(\"add\")\n .description(\"Add a new memory (defaults to personal scope — v0.1 approach B)\")\n .requiredOption(\"--type <type>\", \"convention | decision | gotcha | architecture | glossary\")\n .requiredOption(\"--slug <slug>\", \"short identifier used in the file name\")\n .option(\"--scope <scope>\", \"personal | team | module\", \"personal\")\n .option(\"--module <name>\", \"module name (required when scope=module)\")\n .option(\"--tags <csv>\", \"comma-separated tags\")\n .option(\"--domain <domain>\", \"domain (e.g. transactions)\")\n .option(\"--author <author>\", \"author email or handle\")\n .option(\"--paths <csv>\", \"anchor paths, comma-separated\")\n .option(\"--symbols <csv>\", \"anchor symbols, comma-separated\")\n .option(\"--commit <sha>\", \"anchor commit SHA\")\n .option(\"--body <text>\", \"memory body content (Markdown)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: AddOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.haiveDir)) {\n ui.error(`No .ai/ found at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const frontmatter = buildFrontmatter({\n type: opts.type,\n slug: opts.slug,\n scope: opts.scope,\n module: opts.module,\n tags: parseCsv(opts.tags),\n domain: opts.domain,\n author: opts.author,\n paths: parseCsv(opts.paths),\n symbols: parseCsv(opts.symbols),\n commit: opts.commit,\n });\n\n const body = opts.body ?? `# ${opts.slug}\\n\\nTODO — write the memory body.\\n`;\n const file = memoryFilePath(paths, frontmatter.scope, frontmatter.id, frontmatter.module);\n await mkdir(path.dirname(file), { recursive: true });\n\n if (existsSync(file)) {\n ui.error(`Memory already exists at ${file}`);\n process.exitCode = 1;\n return;\n }\n\n await writeFile(file, serializeMemory({ frontmatter, body }), \"utf8\");\n ui.success(`Created ${path.relative(root, file)}`);\n ui.info(`scope=${frontmatter.scope} status=${frontmatter.status} id=${frontmatter.id}`);\n });\n}\n\nfunction parseCsv(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths, type MemoryScope, type MemoryType } from \"@hiveai/core\";\nimport { loadMemoriesFromDir, type LoadedMemory } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ListOptions {\n scope?: MemoryScope;\n type?: MemoryType;\n tag?: string;\n module?: string;\n dir?: string;\n}\n\nexport function registerMemoryList(memory: Command): void {\n memory\n .command(\"list\")\n .description(\"List memories with optional filters\")\n .option(\"--scope <scope>\", \"personal | team | module\")\n .option(\"--type <type>\", \"filter by type\")\n .option(\"--tag <tag>\", \"filter by tag\")\n .option(\"--module <name>\", \"filter by module name\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: ListOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const filtered = all.filter((m) => matchesFilters(m, opts));\n\n if (filtered.length === 0) {\n ui.info(\"No memories match the filters.\");\n return;\n }\n\n for (const { memory: mem, filePath } of filtered) {\n const fm = mem.frontmatter;\n const tagStr = fm.tags.length ? ui.dim(` [${fm.tags.join(\", \")}]`) : \"\";\n const moduleStr = fm.module ? ui.dim(` (${fm.module})`) : \"\";\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(fm.scope)}/${ui.dim(fm.type)}${moduleStr}${tagStr}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n console.log(ui.dim(`\\n${filtered.length} memor${filtered.length === 1 ? \"y\" : \"ies\"}`));\n });\n}\n\nfunction matchesFilters(loaded: LoadedMemory, opts: ListOptions): boolean {\n const fm = loaded.memory.frontmatter;\n if (opts.scope && fm.scope !== opts.scope) return false;\n if (opts.type && fm.type !== opts.type) return false;\n if (opts.tag && !fm.tags.includes(opts.tag)) return false;\n if (opts.module && fm.module !== opts.module) return false;\n return true;\n}\n","export {\n loadMemoriesFromDir,\n loadMemory,\n listMarkdownFilesRecursive,\n type LoadedMemory,\n} from \"@hiveai/core\";\n","import { mkdir, unlink, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n memoryFilePath,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface PromoteOptions {\n dir?: string;\n}\n\nexport function registerMemoryPromote(memory: Command): void {\n memory\n .command(\"promote <id>\")\n .description(\"Promote a personal memory to team scope (status -> proposed)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: PromoteOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.personalDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No personal memory with id \"${id}\". (Promotion only applies to personal scope.)`);\n process.exitCode = 1;\n return;\n }\n\n const updated = {\n frontmatter: {\n ...found.memory.frontmatter,\n scope: \"team\" as const,\n status: \"proposed\" as const,\n },\n body: found.memory.body,\n };\n\n const newPath = memoryFilePath(paths, \"team\", updated.frontmatter.id);\n await mkdir(path.dirname(newPath), { recursive: true });\n await writeFile(newPath, serializeMemory(updated), \"utf8\");\n await unlink(found.filePath);\n\n ui.success(`Promoted ${id} to team scope (status=proposed)`);\n ui.info(`Now at ${path.relative(root, newPath)}`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ApproveOptions {\n dir?: string;\n}\n\nexport function registerMemoryApprove(memory: Command): void {\n memory\n .command(\"approve <id>\")\n .description(\"Mark a 'proposed' memory as 'validated' immediately (explicit review)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: ApproveOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const current = found.memory.frontmatter.status;\n if (current === \"validated\") {\n ui.info(`${id} is already validated.`);\n return;\n }\n if (current !== \"proposed\" && current !== \"draft\") {\n ui.warn(`Memory has status \"${current}\"; approve still sets it to validated.`);\n }\n\n const next = {\n frontmatter: { ...found.memory.frontmatter, status: \"validated\" as const },\n body: found.memory.body,\n };\n await writeFile(found.filePath, serializeMemory(next), \"utf8\");\n ui.success(`Approved ${id} (status=validated)`);\n ui.info(path.relative(root, found.filePath));\n });\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n DEFAULT_AUTO_PROMOTE_RULE,\n findProjectRoot,\n getUsage,\n isAutoPromoteEligible,\n loadUsageIndex,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface AutoPromoteOptions {\n minReads?: string;\n maxRejections?: string;\n apply?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryAutoPromote(memory: Command): void {\n memory\n .command(\"auto-promote\")\n .description(\"Promote eligible 'proposed' memories to 'validated' based on usage\")\n .option(\"--min-reads <n>\", \"minimum read_count to qualify\", String(DEFAULT_AUTO_PROMOTE_RULE.minReads))\n .option(\n \"--max-rejections <n>\",\n \"memories with more rejections than this are skipped\",\n String(DEFAULT_AUTO_PROMOTE_RULE.maxRejections),\n )\n .option(\"--apply\", \"actually write status=validated to disk (default: dry-run)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: AutoPromoteOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const rule = {\n minReads: Number(opts.minReads ?? DEFAULT_AUTO_PROMOTE_RULE.minReads),\n maxRejections: Number(opts.maxRejections ?? DEFAULT_AUTO_PROMOTE_RULE.maxRejections),\n };\n\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const eligible = memories.filter(({ memory }) =>\n isAutoPromoteEligible(memory.frontmatter, getUsage(usage, memory.frontmatter.id), rule),\n );\n\n if (eligible.length === 0) {\n ui.info(\n `No memories eligible (minReads=${rule.minReads}, maxRejections=${rule.maxRejections}).`,\n );\n return;\n }\n\n let written = 0;\n for (const { memory: mem, filePath } of eligible) {\n const u = getUsage(usage, mem.frontmatter.id);\n console.log(\n `${ui.bold(opts.apply ? \"PROMOTE\" : \"would promote\")} ${mem.frontmatter.id} ${ui.dim(`reads=${u.read_count} rejections=${u.rejected_count}`)}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n if (opts.apply) {\n const next = {\n frontmatter: { ...mem.frontmatter, status: \"validated\" as const },\n body: mem.body,\n };\n await writeFile(filePath, serializeMemory(next), \"utf8\");\n written++;\n }\n }\n\n const summary = `${eligible.length} eligible`;\n ui.info(opts.apply ? `${summary} · ${written} promoted` : `${summary} · dry-run (use --apply)`);\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n parseMemory,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface EditOptions {\n editor?: string;\n dir?: string;\n}\n\nexport function registerMemoryEdit(memory: Command): void {\n memory\n .command(\"edit <id>\")\n .description(\"Open a memory in $EDITOR and re-validate when you save\")\n .option(\"-e, --editor <cmd>\", \"editor command (defaults to $EDITOR or 'vi')\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: EditOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const editor = opts.editor ?? process.env.EDITOR ?? process.env.VISUAL ?? \"vi\";\n ui.info(`Opening ${path.relative(root, found.filePath)} with ${editor}…`);\n const code = await runEditor(editor, found.filePath);\n if (code !== 0) {\n ui.warn(`Editor exited with status ${code}.`);\n }\n\n try {\n const fresh = await readFile(found.filePath, \"utf8\");\n parseMemory(fresh);\n ui.success(\"Memory still parses cleanly.\");\n } catch (err) {\n ui.error(\n `Memory no longer parses: ${err instanceof Error ? err.message : String(err)}`,\n );\n ui.warn(\"File left as-is on disk; fix it and re-run a parse-aware command to confirm.\");\n process.exitCode = 1;\n }\n });\n}\n\nfunction runEditor(editor: string, file: string): Promise<number> {\n return new Promise((resolve) => {\n const child = spawn(editor, [file], { stdio: \"inherit\" });\n child.on(\"exit\", (code) => resolve(code ?? 0));\n child.on(\"error\", () => resolve(127));\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n inferModulesFromPaths,\n loadUsageIndex,\n memoryMatchesAnchorPaths,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ForFilesOptions {\n dir?: string;\n}\n\nexport function registerMemoryForFiles(memory: Command): void {\n memory\n .command(\"for-files <files...>\")\n .description(\"Show memories relevant to the given files (anchor overlap, module, domain)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (files: string[], opts: ForFilesOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const inferred = inferModulesFromPaths(files);\n\n const byAnchor: typeof all = [];\n const byModule: typeof all = [];\n const byDomain: typeof all = [];\n const seen = new Set<string>();\n\n for (const loaded of all) {\n if (memoryMatchesAnchorPaths(loaded.memory, files)) {\n byAnchor.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n for (const loaded of all) {\n if (seen.has(loaded.memory.frontmatter.id)) continue;\n const mod = loaded.memory.frontmatter.module;\n if (mod && inferred.includes(mod)) {\n byModule.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n for (const loaded of all) {\n if (seen.has(loaded.memory.frontmatter.id)) continue;\n const domain = loaded.memory.frontmatter.domain;\n if (domain && inferred.includes(domain)) {\n byDomain.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n\n console.log(ui.dim(`inferred modules: ${inferred.length ? inferred.join(\", \") : \"(none)\"}`));\n printGroup(root, \"anchor overlap\", byAnchor, usage);\n printGroup(root, \"module match\", byModule, usage);\n printGroup(root, \"domain match\", byDomain, usage);\n\n const total = byAnchor.length + byModule.length + byDomain.length;\n ui.info(\n `${total} relevant memor${total === 1 ? \"y\" : \"ies\"} (${byAnchor.length} anchor · ${byModule.length} module · ${byDomain.length} domain)`,\n );\n });\n}\n\nfunction printGroup(\n root: string,\n label: string,\n loaded: Array<Awaited<ReturnType<typeof loadMemoriesFromDir>>[number]>,\n usage: Awaited<ReturnType<typeof loadUsageIndex>>,\n): void {\n if (loaded.length === 0) return;\n console.log(ui.bold(`\\n— ${label} —`));\n for (const { memory: mem, filePath } of loaded) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n console.log(`${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.bold(conf)}`);\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface PendingOptions {\n scope?: \"personal\" | \"team\" | \"module\";\n dir?: string;\n}\n\nexport function registerMemoryPending(memory: Command): void {\n memory\n .command(\"pending\")\n .description(\"List 'proposed' memories awaiting review (sorted by reads desc)\")\n .option(\"--scope <scope>\", \"filter by scope (personal | team | module)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: PendingOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const proposed = all.filter(({ memory: mem }) => {\n if (mem.frontmatter.status !== \"proposed\") return false;\n if (opts.scope && mem.frontmatter.scope !== opts.scope) return false;\n return true;\n });\n\n if (proposed.length === 0) {\n ui.info(\"No memories awaiting review.\");\n return;\n }\n\n proposed.sort(\n (a, b) =>\n getUsage(usage, b.memory.frontmatter.id).read_count -\n getUsage(usage, a.memory.frontmatter.id).read_count,\n );\n\n const now = Date.now();\n for (const { memory: mem, filePath } of proposed) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const ageDays = Math.floor((now - new Date(fm.created_at).getTime()) / 86_400_000);\n const ageStr = ageDays === 0 ? \"today\" : `${ageDays}d`;\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.dim(`age=${ageStr} reads=${u.read_count} rejections=${u.rejected_count}`)}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n ui.info(`${proposed.length} pending`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n extractSnippet,\n findProjectRoot,\n literalMatchesAllTokens,\n pickSnippetNeedle,\n resolveHaivePaths,\n tokenizeQuery,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface QueryOptions {\n dir?: string;\n limit?: string;\n}\n\nexport function registerMemoryQuery(memory: Command): void {\n memory\n .command(\"query <text>\")\n .description(\"Search memories by id, tag, or substring (multi-word AND)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--limit <n>\", \"max results\", \"20\")\n .action(async (text: string, opts: QueryOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const tokens = tokenizeQuery(text);\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const matches = all.filter(({ memory: mem }) => literalMatchesAllTokens(mem, tokens));\n\n const limit = Math.max(1, Number(opts.limit ?? 20));\n const top = matches.slice(0, limit);\n\n if (top.length === 0) {\n ui.info(`No matches for \"${text}\".`);\n return;\n }\n\n const snippetNeedle = pickSnippetNeedle(text);\n for (const { memory: mem, filePath } of top) {\n const snippet = extractSnippet(mem.body, snippetNeedle);\n console.log(`${ui.bold(mem.frontmatter.id)} ${ui.dim(mem.frontmatter.scope)}`);\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n if (snippet) console.log(` ${snippet}`);\n }\n console.log(\n ui.dim(`\\n${top.length} of ${matches.length} match${matches.length === 1 ? \"\" : \"es\"}`),\n );\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n loadUsageIndex,\n recordRejection,\n resolveHaivePaths,\n saveUsageIndex,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface RejectOptions {\n reason?: string;\n dir?: string;\n}\n\nexport function registerMemoryReject(memory: Command): void {\n memory\n .command(\"reject <id>\")\n .description(\"Record a rejection (blocks auto-promotion and lowers confidence)\")\n .option(\"-r, --reason <reason>\", \"why this memory is being rejected\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: RejectOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n if (!memories.some((m) => m.memory.frontmatter.id === id)) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const idx = await loadUsageIndex(paths);\n recordRejection(idx, id, opts.reason ?? null);\n await saveUsageIndex(paths, idx);\n const u = idx.by_id[id]!;\n ui.success(\n `Recorded rejection for ${id} (now ${u.rejected_count} rejection${u.rejected_count === 1 ? \"\" : \"s\"})`,\n );\n if (opts.reason) ui.info(`reason: ${opts.reason}`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n loadUsageIndex,\n resolveHaivePaths,\n saveUsageIndex,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface RmOptions {\n yes?: boolean;\n keepUsage?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryRm(memory: Command): void {\n memory\n .command(\"rm <id>\")\n .description(\"Delete a memory file (and its usage entry by default)\")\n .option(\"-y, --yes\", \"skip the confirmation prompt\")\n .option(\"--keep-usage\", \"do not remove the usage.json entry\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: RmOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const rel = path.relative(root, found.filePath);\n if (!opts.yes) {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = (await rl.question(`Delete ${rel}? [y/N] `)).trim().toLowerCase();\n rl.close();\n if (answer !== \"y\" && answer !== \"yes\") {\n ui.info(\"Aborted.\");\n return;\n }\n }\n\n await unlink(found.filePath);\n ui.success(`Deleted ${rel}`);\n\n if (!opts.keepUsage) {\n const idx = await loadUsageIndex(paths);\n if (idx.by_id[id]) {\n delete idx.by_id[id];\n await saveUsageIndex(paths, idx);\n ui.info(\"Removed usage entry\");\n }\n }\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ShowOptions {\n raw?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryShow(memory: Command): void {\n memory\n .command(\"show <id>\")\n .description(\"Print a memory's frontmatter, body, and confidence/usage\")\n .option(\"--raw\", \"print the raw file contents instead of a summary\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: ShowOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n if (opts.raw) {\n console.log(await readFile(found.filePath, \"utf8\"));\n return;\n }\n\n const fm = found.memory.frontmatter;\n const usage = await loadUsageIndex(paths);\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n\n console.log(ui.bold(fm.id));\n console.log(`${ui.dim(\"scope:\")} ${fm.scope}${fm.module ? ` / ${fm.module}` : \"\"}`);\n console.log(`${ui.dim(\"type:\")} ${fm.type}`);\n console.log(`${ui.dim(\"status:\")} ${fm.status} ${ui.dim(\"→ confidence:\")} ${ui.bold(conf)}`);\n console.log(`${ui.dim(\"tags:\")} ${fm.tags.length ? fm.tags.join(\", \") : \"(none)\"}`);\n console.log(`${ui.dim(\"created:\")} ${fm.created_at}`);\n if (fm.verified_at) console.log(`${ui.dim(\"verified:\")} ${fm.verified_at}`);\n if (fm.stale_reason) console.log(`${ui.dim(\"stale:\")} ${fm.stale_reason}`);\n console.log(`${ui.dim(\"reads:\")} ${u.read_count} ${ui.dim(\"rejections:\")} ${u.rejected_count}`);\n console.log(`${ui.dim(\"file:\")} ${path.relative(root, found.filePath)}`);\n if (fm.anchor.paths.length || fm.anchor.symbols.length) {\n console.log(ui.dim(\"anchor:\"));\n if (fm.anchor.commit) console.log(` ${ui.dim(\"commit:\")} ${fm.anchor.commit}`);\n if (fm.anchor.paths.length)\n console.log(` ${ui.dim(\"paths:\")} ${fm.anchor.paths.join(\", \")}`);\n if (fm.anchor.symbols.length)\n console.log(` ${ui.dim(\"symbols:\")} ${fm.anchor.symbols.join(\", \")}`);\n }\n console.log();\n console.log(found.memory.body);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface StatsOptions {\n id?: string;\n dir?: string;\n}\n\nexport function registerMemoryStats(memory: Command): void {\n memory\n .command(\"stats\")\n .description(\"Show usage stats and confidence levels per memory\")\n .option(\"--id <id>\", \"show stats for a single memory id\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: StatsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const target = opts.id\n ? all.filter((m) => m.memory.frontmatter.id === opts.id)\n : all;\n\n if (target.length === 0) {\n ui.info(opts.id ? `No memory with id \"${opts.id}\".` : \"No memories.\");\n return;\n }\n\n // Sort by read_count desc to surface the popular ones.\n target.sort(\n (a, b) =>\n getUsage(usage, b.memory.frontmatter.id).read_count -\n getUsage(usage, a.memory.frontmatter.id).read_count,\n );\n\n for (const { memory: mem, filePath } of target) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.bold(conf)}`,\n );\n console.log(\n ` ${ui.dim(\"status:\")} ${fm.status} ${ui.dim(\"reads:\")} ${u.read_count} ${ui.dim(\"rejections:\")} ${u.rejected_count}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n });\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n resolveHaivePaths,\n serializeMemory,\n verifyAnchor,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface VerifyOptions {\n id?: string;\n all?: boolean;\n update?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryVerify(memory: Command): void {\n memory\n .command(\"verify\")\n .description(\"Check memory anchors against current code, optionally marking stale ones\")\n .option(\"--id <id>\", \"verify a single memory by id\")\n .option(\"--all\", \"verify every memory (default if --id is omitted)\")\n .option(\"--update\", \"write status=stale (or status=validated for re-freshed) back to disk\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: VerifyOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const targets = opts.id\n ? all.filter((m) => m.memory.frontmatter.id === opts.id)\n : all;\n\n if (opts.id && targets.length === 0) {\n ui.error(`No memory with id \"${opts.id}\".`);\n process.exitCode = 1;\n return;\n }\n\n let staleCount = 0;\n let freshCount = 0;\n let anchorless = 0;\n let updated = 0;\n\n for (const { memory: mem, filePath } of targets) {\n const result = await verifyAnchor(mem, { projectRoot: root });\n const isAnchored =\n mem.frontmatter.anchor.paths.length > 0 ||\n mem.frontmatter.anchor.symbols.length > 0;\n\n if (!isAnchored) {\n anchorless++;\n continue;\n }\n\n const rel = path.relative(root, filePath);\n if (result.stale) {\n staleCount++;\n console.log(`${ui.bold(\"STALE\")} ${mem.frontmatter.id}`);\n console.log(` ${ui.dim(rel)}`);\n console.log(` ${result.reason}`);\n } else {\n freshCount++;\n console.log(`${ui.dim(\"fresh\")} ${mem.frontmatter.id}`);\n }\n\n if (opts.update) {\n const next = applyVerification(mem, result);\n await writeFile(filePath, serializeMemory(next), \"utf8\");\n updated++;\n }\n }\n\n const summary = [\n `${freshCount} fresh`,\n `${staleCount} stale`,\n `${anchorless} anchorless (skipped)`,\n ];\n if (opts.update) summary.push(`${updated} updated on disk`);\n ui.info(summary.join(\" · \"));\n });\n}\n\nfunction applyVerification(\n mem: Parameters<typeof serializeMemory>[0],\n result: { stale: boolean; reason: string | null },\n): Parameters<typeof serializeMemory>[0] {\n const verifiedAt = new Date().toISOString();\n if (result.stale) {\n return {\n frontmatter: {\n ...mem.frontmatter,\n status: \"stale\",\n verified_at: verifiedAt,\n stale_reason: result.reason,\n },\n body: mem.body,\n };\n }\n // Reset stale_reason when re-validating; keep validated/proposed status as is,\n // promote draft→validated when verification passes.\n const nextStatus =\n mem.frontmatter.status === \"stale\" || mem.frontmatter.status === \"draft\"\n ? \"validated\"\n : mem.frontmatter.status;\n return {\n frontmatter: {\n ...mem.frontmatter,\n status: nextStatus,\n verified_at: verifiedAt,\n stale_reason: null,\n },\n body: mem.body,\n };\n}\n"],"mappings":"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","names":["Command","program","existsSync","path","resolveHaivePaths","program","path","resolveHaivePaths","existsSync","existsSync","path","findProjectRoot","require","program","findProjectRoot","path","existsSync","mkdir","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","mkdir","path","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","path","mkdir","writeFile","existsSync","path","findProjectRoot","memoryFilePath","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","memoryFilePath","mkdir","path","writeFile","serializeMemory","existsSync","writeFile","path","findProjectRoot","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","writeFile","serializeMemory","path","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","path","writeFile","serializeMemory","spawn","existsSync","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","path","spawn","existsSync","path","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadUsageIndex","getUsage","path","existsSync","path","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadUsageIndex","getUsage","path","existsSync","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","path","existsSync","findProjectRoot","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadUsageIndex","existsSync","unlink","path","findProjectRoot","loadUsageIndex","resolveHaivePaths","saveUsageIndex","memory","findProjectRoot","resolveHaivePaths","existsSync","path","unlink","loadUsageIndex","saveUsageIndex","existsSync","readFile","path","deriveConfidence","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","readFile","loadUsageIndex","getUsage","deriveConfidence","path","existsSync","path","deriveConfidence","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadUsageIndex","getUsage","deriveConfidence","path","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","path","writeFile","serializeMemory","Command"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/commands/embeddings.ts","../src/utils/ui.ts","../src/commands/index-code.ts","../src/commands/init.ts","../src/commands/install-hooks.ts","../src/commands/mcp.ts","../src/commands/sync.ts","../src/commands/memory-add.ts","../src/commands/memory-list.ts","../src/utils/fs.ts","../src/commands/memory-promote.ts","../src/commands/memory-approve.ts","../src/commands/memory-auto-promote.ts","../src/commands/memory-edit.ts","../src/commands/memory-for-files.ts","../src/commands/memory-hot.ts","../src/commands/memory-pending.ts","../src/commands/memory-query.ts","../src/commands/memory-reject.ts","../src/commands/memory-rm.ts","../src/commands/memory-show.ts","../src/commands/memory-stats.ts","../src/commands/memory-verify.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { registerEmbeddings } from \"./commands/embeddings.js\";\nimport { registerIndexCode } from \"./commands/index-code.js\";\nimport { registerInit } from \"./commands/init.js\";\nimport { registerInstallHooks } from \"./commands/install-hooks.js\";\nimport { registerMcp } from \"./commands/mcp.js\";\nimport { registerSync } from \"./commands/sync.js\";\nimport { registerMemoryAdd } from \"./commands/memory-add.js\";\nimport { registerMemoryList } from \"./commands/memory-list.js\";\nimport { registerMemoryPromote } from \"./commands/memory-promote.js\";\nimport { registerMemoryApprove } from \"./commands/memory-approve.js\";\nimport { registerMemoryAutoPromote } from \"./commands/memory-auto-promote.js\";\nimport { registerMemoryEdit } from \"./commands/memory-edit.js\";\nimport { registerMemoryForFiles } from \"./commands/memory-for-files.js\";\nimport { registerMemoryHot } from \"./commands/memory-hot.js\";\nimport { registerMemoryPending } from \"./commands/memory-pending.js\";\nimport { registerMemoryQuery } from \"./commands/memory-query.js\";\nimport { registerMemoryReject } from \"./commands/memory-reject.js\";\nimport { registerMemoryRm } from \"./commands/memory-rm.js\";\nimport { registerMemoryShow } from \"./commands/memory-show.js\";\nimport { registerMemoryStats } from \"./commands/memory-stats.js\";\nimport { registerMemoryVerify } from \"./commands/memory-verify.js\";\n\nconst program = new Command();\n\ndeclare const __HAIVE_VERSION__: string;\n\nprogram\n .name(\"haive\")\n .description(\"hAIve — team-first persistent memory layer for AI coding agents\")\n .version(__HAIVE_VERSION__);\n\nregisterInit(program);\nregisterMcp(program);\nregisterEmbeddings(program);\nregisterSync(program);\nregisterInstallHooks(program);\nregisterIndexCode(program);\n\nconst memory = program.command(\"memory\").description(\"Manage memory entries\");\nregisterMemoryAdd(memory);\nregisterMemoryList(memory);\nregisterMemoryQuery(memory);\nregisterMemoryPromote(memory);\nregisterMemoryVerify(memory);\nregisterMemoryStats(memory);\nregisterMemoryReject(memory);\nregisterMemoryAutoPromote(memory);\nregisterMemoryForFiles(memory);\nregisterMemoryShow(memory);\nregisterMemoryEdit(memory);\nregisterMemoryRm(memory);\nregisterMemoryPending(memory);\nregisterMemoryApprove(memory);\nregisterMemoryHot(memory);\n\nprogram.parseAsync(process.argv).catch((err: unknown) => {\n if (isZodError(err)) {\n for (const issue of err.issues) {\n const field = issue.path.length > 0 ? `${String(issue.path.join(\".\"))}: ` : \"\";\n console.error(`\\x1b[31m✗\\x1b[0m ${field}${issue.message}`);\n }\n } else {\n console.error(err instanceof Error ? err.message : err);\n }\n process.exit(1);\n});\n\nfunction isZodError(\n err: unknown,\n): err is { issues: Array<{ path: unknown[]; message: string }> } {\n return (\n err !== null &&\n typeof err === \"object\" &&\n \"issues\" in err &&\n Array.isArray((err as Record<string, unknown>).issues)\n );\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface EmbeddingsOptions {\n dir?: string;\n}\n\ninterface EmbeddingsQueryOptions extends EmbeddingsOptions {\n limit?: string;\n minScore?: string;\n}\n\nexport function registerEmbeddings(program: Command): void {\n const embeddings = program\n .command(\"embeddings\")\n .description(\"Manage local embeddings index for semantic search\");\n\n embeddings\n .command(\"index\")\n .description(\"Generate or refresh the embeddings index for all memories\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: EmbeddingsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n const { Embedder, rebuildIndex } = await loadEmbeddings();\n ui.info(\"Loading embedding model (first run downloads ~110MB)…\");\n const embedder = await Embedder.create();\n ui.info(`Model ready: ${embedder.model} (dim=${embedder.dimension}). Indexing memories…`);\n const { report } = await rebuildIndex(paths, embedder);\n ui.success(\n `Indexed ${report.total} memories — added=${report.added} updated=${report.updated} unchanged=${report.unchanged} removed=${report.removed}`,\n );\n });\n\n embeddings\n .command(\"query <text>\")\n .description(\"Run a semantic search against the local embeddings index\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--limit <n>\", \"max results\", \"10\")\n .option(\"--min-score <n>\", \"minimum cosine similarity (0-1)\", \"0\")\n .action(async (text: string, opts: EmbeddingsQueryOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n const { semanticSearch } = await loadEmbeddings();\n const result = await semanticSearch(paths, text, {\n limit: Number(opts.limit ?? 10),\n minScore: Number(opts.minScore ?? 0),\n });\n if (!result) {\n ui.error(\"No embeddings index found. Run `haive embeddings index` first.\");\n process.exitCode = 1;\n return;\n }\n if (result.hits.length === 0) {\n ui.info(\"No semantic matches above the threshold.\");\n return;\n }\n for (const hit of result.hits) {\n const score = hit.score.toFixed(3);\n console.log(`${ui.bold(score)} ${hit.id}`);\n console.log(` ${ui.dim(path.relative(root, hit.file_path))}`);\n }\n });\n\n embeddings\n .command(\"status\")\n .description(\"Show the embeddings index status\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: EmbeddingsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n const { indexStat } = await loadEmbeddings();\n const stat = await indexStat(paths);\n if (!stat.exists) {\n ui.warn(\"No embeddings index. Run `haive embeddings index` to create one.\");\n return;\n }\n console.log(`${ui.bold(\"entries:\")} ${stat.count}`);\n console.log(`${ui.bold(\"model:\")} ${stat.model}`);\n console.log(`${ui.bold(\"updated_at:\")} ${stat.updatedAt}`);\n console.log(`${ui.bold(\"size:\")} ${(stat.sizeBytes / 1024).toFixed(1)} KB`);\n });\n}\n\nasync function loadEmbeddings() {\n try {\n return await import(\"@hiveai/embeddings\");\n } catch (err) {\n ui.error(\n \"Could not load @hiveai/embeddings. Run: npm install -g @hiveai/embeddings (or `pnpm build` in the monorepo)\",\n );\n throw err;\n }\n}\n","import pc from \"picocolors\";\n\nexport const ui = {\n info: (msg: string) => console.log(pc.cyan(\"ℹ\"), msg),\n success: (msg: string) => console.log(pc.green(\"✓\"), msg),\n warn: (msg: string) => console.log(pc.yellow(\"⚠\"), msg),\n error: (msg: string) => console.error(pc.red(\"✗\"), msg),\n dim: (msg: string) => pc.dim(msg),\n bold: (msg: string) => pc.bold(msg),\n};\n","import path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n buildCodeMap,\n codeMapPath,\n findProjectRoot,\n resolveHaivePaths,\n saveCodeMap,\n} from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface IndexCodeOptions {\n dir?: string;\n exclude?: string;\n}\n\nexport function registerIndexCode(program: Command): void {\n const idx = program.command(\"index\").description(\"Build local indexes that help AIs read less code\");\n idx.action(() => idx.help());\n idx\n .command(\"code\")\n .description(\"Scan source files and write .ai/code-map.json (file → exports + 1-line description)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\n \"--exclude <csv>\",\n \"extra directory names to skip (comma-separated)\",\n \"\",\n )\n .action(async (opts: IndexCodeOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n const extraExcludes = (opts.exclude ?? \"\")\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n\n ui.info(`Indexing source files in ${root}…`);\n const map = await buildCodeMap(root, {\n excludeDirs: [\n \"node_modules\",\n \"dist\",\n \"build\",\n \"out\",\n \".git\",\n \".next\",\n \".turbo\",\n \".vitest-cache\",\n \"coverage\",\n ...extraExcludes,\n ],\n });\n\n await saveCodeMap(paths, map);\n const fileCount = Object.keys(map.files).length;\n const exportCount = Object.values(map.files).reduce((s, f) => s + f.exports.length, 0);\n ui.success(\n `Indexed ${fileCount} file(s) with ${exportCount} export(s) → ${path.relative(root, codeMapPath(paths))}`,\n );\n });\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\nconst PROJECT_CONTEXT_TEMPLATE = `# Project context\n\n> Generated by \\`haive init\\`. Edit this file (or let your AI agent fill it via the upcoming MCP \\`bootstrap_project\\` tool).\n\n## Architecture\nTODO — high-level overview of the codebase.\n\n## Key modules\nTODO — list main modules and their purpose.\n\n## Conventions\nTODO — coding conventions, naming, patterns the team follows.\n\n## Glossary\nTODO — domain terms and what they mean here.\n\n## Gotchas\nTODO — known traps, surprising behavior, things newcomers stub their toes on.\n`;\n\nconst BRIDGE_BODY = `<!-- hAIve bridge file — do not edit by hand. -->\n<!-- This file points your AI tool at the shared hAIve project context. -->\n\nSee \\`.ai/project-context.md\\` for the full project context.\nMemories live under \\`.ai/memories/\\` (personal/team/module).\n`;\n\nexport function registerInit(program: Command): void {\n program\n .command(\"init\")\n .description(\"Initialize a hAIve project (.ai/ structure + bridge files)\")\n .option(\"-d, --dir <dir>\", \"project root\", process.cwd())\n .option(\"--no-bridges\", \"do not generate CLAUDE.md / .cursorrules / copilot-instructions.md\")\n .action(async (opts: { dir: string; bridges: boolean }) => {\n const root = path.resolve(opts.dir);\n const paths = resolveHaivePaths(root);\n\n if (existsSync(paths.haiveDir)) {\n ui.warn(`.ai/ already exists at ${paths.haiveDir} — leaving existing files in place.`);\n }\n\n await mkdir(paths.personalDir, { recursive: true });\n await mkdir(paths.teamDir, { recursive: true });\n await mkdir(paths.moduleDir, { recursive: true });\n await mkdir(paths.modulesContextDir, { recursive: true });\n\n if (!existsSync(paths.projectContext)) {\n await writeFile(paths.projectContext, PROJECT_CONTEXT_TEMPLATE, \"utf8\");\n ui.success(`Created ${path.relative(root, paths.projectContext)}`);\n }\n\n if (opts.bridges) {\n await writeBridge(root, \"CLAUDE.md\");\n await writeBridge(root, \".cursorrules\");\n await writeBridge(root, path.join(\".github\", \"copilot-instructions.md\"));\n }\n\n ui.success(`hAIve initialized at ${root}`);\n ui.info(\"Next: \" + ui.bold(\"haive memory add --type convention --slug <name>\"));\n });\n}\n\nasync function writeBridge(root: string, relPath: string): Promise<void> {\n const target = path.join(root, relPath);\n if (existsSync(target)) {\n ui.info(`Bridge ${relPath} already exists — skipped`);\n return;\n }\n await mkdir(path.dirname(target), { recursive: true });\n await writeFile(target, BRIDGE_BODY, \"utf8\");\n ui.success(`Created bridge ${relPath}`);\n}\n\n","import { mkdir, writeFile, chmod, readFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface InstallHooksOptions {\n dir?: string;\n force?: boolean;\n}\n\nconst HOOK_MARKER = \"# hAIve auto-generated\";\n\nconst HOOK_BODY = `#!/bin/sh\n${HOOK_MARKER} — keep this block to allow upgrades. Hand-edit anything outside it.\n\n# After a merge or pull, refresh memory anchors and auto-promote eligible\n# memories so that everyone on this branch sees consistent confidence levels.\nif command -v haive >/dev/null 2>&1; then\n haive sync --quiet --since ORIG_HEAD || true\nelif [ -x ./node_modules/.bin/haive ]; then\n ./node_modules/.bin/haive sync --quiet --since ORIG_HEAD || true\nfi\n`;\n\nconst HOOKS = [\"post-merge\", \"post-rewrite\"] as const;\n\nexport function registerInstallHooks(program: Command): void {\n program\n .command(\"install-hooks\")\n .description(\"Install git hooks that run `haive sync` after pull/merge\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--force\", \"overwrite existing hooks\")\n .action(async (opts: InstallHooksOptions) => {\n const root = findProjectRoot(opts.dir);\n const gitDir = path.join(root, \".git\");\n if (!existsSync(gitDir)) {\n ui.error(`No .git directory at ${root}.`);\n process.exitCode = 1;\n return;\n }\n const hooksDir = path.join(gitDir, \"hooks\");\n await mkdir(hooksDir, { recursive: true });\n\n let installed = 0;\n let skipped = 0;\n for (const name of HOOKS) {\n const file = path.join(hooksDir, name);\n if (existsSync(file) && !opts.force) {\n const existing = await readFile(file, \"utf8\");\n if (!existing.includes(HOOK_MARKER)) {\n ui.warn(`${name} already exists and was not written by hAIve. Re-run with --force to overwrite.`);\n skipped++;\n continue;\n }\n }\n await writeFile(file, HOOK_BODY, \"utf8\");\n await chmod(file, 0o755);\n installed++;\n }\n ui.success(`Installed ${installed} hook(s) in .git/hooks/${skipped ? `, skipped ${skipped}` : \"\"}`);\n ui.info(\"Test with: git pull (or any merge), then check .ai/memories for status updates.\");\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Command } from \"commander\";\nimport { findProjectRoot } from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\nconst require = createRequire(import.meta.url);\n\ninterface McpOptions {\n dir?: string;\n}\n\nexport function registerMcp(program: Command): void {\n program\n .command(\"mcp\")\n .description(\"Start the hAIve MCP server (stdio transport)\")\n .option(\"-d, --dir <dir>\", \"project root (defaults to nearest .ai/ or .git/)\")\n .action((opts: McpOptions) => {\n const root = findProjectRoot(opts.dir);\n const bin = locateMcpBin();\n if (!bin) {\n ui.error(\n \"@hiveai/mcp binary not found. Install @hiveai/mcp or run `pnpm build` in the monorepo.\",\n );\n process.exit(1);\n }\n const child = spawn(\"node\", [bin, \"--root\", root], {\n stdio: [\"inherit\", \"inherit\", \"inherit\"],\n env: process.env,\n });\n child.on(\"exit\", (code) => process.exit(code ?? 0));\n });\n}\n\nfunction locateMcpBin(): string | null {\n // 1. Resolve the @hiveai/mcp package and use its bin entry.\n try {\n const pkgPath = require.resolve(\"@hiveai/mcp/package.json\");\n const pkgDir = path.dirname(pkgPath);\n const candidate = path.join(pkgDir, \"dist\", \"index.js\");\n if (existsSync(candidate)) return candidate;\n } catch {\n // not installed — fall through\n }\n\n // 2. Fallback: look for sibling package in monorepo dev mode.\n const here = path.dirname(fileURLToPath(import.meta.url));\n const sibling = path.resolve(here, \"..\", \"..\", \"..\", \"mcp\", \"dist\", \"index.js\");\n if (existsSync(sibling)) return sibling;\n\n return null;\n}\n","import { spawnSync } from \"node:child_process\";\nimport { writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n DEFAULT_AUTO_PROMOTE_RULE,\n findProjectRoot,\n getUsage,\n isAutoPromoteEligible,\n loadMemoriesFromDir,\n loadUsageIndex,\n resolveHaivePaths,\n serializeMemory,\n verifyAnchor,\n} from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface SyncOptions {\n dir?: string;\n quiet?: boolean;\n since?: string;\n verify?: boolean;\n promote?: boolean;\n}\n\nexport function registerSync(program: Command): void {\n program\n .command(\"sync\")\n .description(\"Refresh memory state after a pull/merge: verify anchors, auto-promote, report changes\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--quiet\", \"minimal output (suitable for git hooks)\")\n .option(\n \"--since <ref>\",\n \"git ref/commit to compare against; report memories added/modified/removed since\",\n )\n .option(\"--no-verify\", \"skip the anchor verification step\")\n .option(\"--no-promote\", \"skip the auto-promotion step\")\n .action(async (opts: SyncOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n if (!opts.quiet) ui.warn(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const log = (msg: string): void => {\n if (!opts.quiet) console.log(msg);\n };\n\n let staleMarked = 0;\n let revalidated = 0;\n let promoted = 0;\n\n if (opts.verify !== false) {\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n for (const { memory, filePath } of memories) {\n const isAnchored =\n memory.frontmatter.anchor.paths.length > 0 ||\n memory.frontmatter.anchor.symbols.length > 0;\n if (!isAnchored) continue;\n\n const result = await verifyAnchor(memory, { projectRoot: root });\n const verifiedAt = new Date().toISOString();\n\n if (result.stale) {\n if (memory.frontmatter.status !== \"stale\") {\n await writeFile(\n filePath,\n serializeMemory({\n frontmatter: {\n ...memory.frontmatter,\n status: \"stale\",\n verified_at: verifiedAt,\n stale_reason: result.reason,\n },\n body: memory.body,\n }),\n \"utf8\",\n );\n staleMarked++;\n }\n } else if (memory.frontmatter.status === \"stale\") {\n await writeFile(\n filePath,\n serializeMemory({\n frontmatter: {\n ...memory.frontmatter,\n status: \"validated\",\n verified_at: verifiedAt,\n stale_reason: null,\n },\n body: memory.body,\n }),\n \"utf8\",\n );\n revalidated++;\n }\n }\n }\n\n if (opts.promote !== false) {\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n for (const { memory, filePath } of memories) {\n if (\n isAutoPromoteEligible(\n memory.frontmatter,\n getUsage(usage, memory.frontmatter.id),\n DEFAULT_AUTO_PROMOTE_RULE,\n )\n ) {\n await writeFile(\n filePath,\n serializeMemory({\n frontmatter: { ...memory.frontmatter, status: \"validated\" },\n body: memory.body,\n }),\n \"utf8\",\n );\n promoted++;\n }\n }\n }\n\n const sinceReport = opts.since ? collectSinceChanges(root, opts.since) : null;\n\n log(\n `${ui.dim(\"sync:\")} ${staleMarked} stale · ${revalidated} revalidated · ${promoted} promoted${sinceReport ? ` · ${sinceReport.added.length}+/${sinceReport.modified.length}~/${sinceReport.removed.length}- since ${opts.since}` : \"\"}`,\n );\n\n if (sinceReport && !opts.quiet) {\n if (sinceReport.added.length > 0) {\n log(ui.bold(\"\\nNew memories:\"));\n for (const f of sinceReport.added) log(` + ${f}`);\n }\n if (sinceReport.modified.length > 0) {\n log(ui.bold(\"\\nModified:\"));\n for (const f of sinceReport.modified) log(` ~ ${f}`);\n }\n if (sinceReport.removed.length > 0) {\n log(ui.bold(\"\\nRemoved:\"));\n for (const f of sinceReport.removed) log(` - ${f}`);\n }\n }\n });\n}\n\ninterface SinceReport {\n added: string[];\n modified: string[];\n removed: string[];\n}\n\nfunction collectSinceChanges(root: string, ref: string): SinceReport | null {\n const result = spawnSync(\n \"git\",\n [\"-C\", root, \"diff\", \"--name-status\", \"--diff-filter=AMD\", `${ref}...HEAD`, \"--\", \".ai/memories\"],\n { encoding: \"utf8\" },\n );\n if (result.status !== 0) return null;\n\n const report: SinceReport = { added: [], modified: [], removed: [] };\n for (const line of result.stdout.split(\"\\n\")) {\n const [status, ...rest] = line.split(\"\\t\");\n const file = rest.join(\"\\t\").trim();\n if (!file) continue;\n if (status === \"A\") report.added.push(file);\n else if (status === \"M\") report.modified.push(file);\n else if (status === \"D\") report.removed.push(file);\n }\n return report;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n buildFrontmatter,\n findProjectRoot,\n inferModulesFromPaths,\n memoryFilePath,\n resolveHaivePaths,\n serializeMemory,\n type MemoryScope,\n type MemoryType,\n} from \"@hiveai/core\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface AddOptions {\n type: MemoryType;\n slug: string;\n scope?: MemoryScope;\n module?: string;\n tags?: string;\n domain?: string;\n author?: string;\n paths?: string;\n symbols?: string;\n commit?: string;\n body?: string;\n dir?: string;\n}\n\nexport function registerMemoryAdd(memory: Command): void {\n memory\n .command(\"add\")\n .description(\"Add a new memory (defaults to personal scope — v0.1 approach B)\")\n .requiredOption(\"--type <type>\", \"convention | decision | gotcha | architecture | glossary\")\n .requiredOption(\"--slug <slug>\", \"short identifier used in the file name\")\n .option(\"--scope <scope>\", \"personal | team | module\", \"personal\")\n .option(\"--module <name>\", \"module name (required when scope=module)\")\n .option(\"--tags <csv>\", \"comma-separated tags\")\n .option(\"--domain <domain>\", \"domain (e.g. transactions)\")\n .option(\"--author <author>\", \"author email or handle\")\n .option(\"--paths <csv>\", \"anchor paths, comma-separated\")\n .option(\"--symbols <csv>\", \"anchor symbols, comma-separated\")\n .option(\"--commit <sha>\", \"anchor commit SHA\")\n .option(\"--body <text>\", \"memory body content (Markdown)\")\n .option(\"--no-auto-tag\", \"disable automatic tag suggestions inferred from anchor paths\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: AddOptions & { autoTag?: boolean }) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.haiveDir)) {\n ui.error(`No .ai/ found at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const userTags = parseCsv(opts.tags);\n const anchorPaths = parseCsv(opts.paths);\n const autoTagsEnabled = opts.autoTag !== false;\n const inferredTags = autoTagsEnabled ? inferModulesFromPaths(anchorPaths) : [];\n const mergedTags = Array.from(new Set([...userTags, ...inferredTags]));\n\n const frontmatter = buildFrontmatter({\n type: opts.type,\n slug: opts.slug,\n scope: opts.scope,\n module: opts.module,\n tags: mergedTags,\n domain: opts.domain,\n author: opts.author,\n paths: anchorPaths,\n symbols: parseCsv(opts.symbols),\n commit: opts.commit,\n });\n\n const body = opts.body ?? `# ${opts.slug}\\n\\nTODO — write the memory body.\\n`;\n const file = memoryFilePath(paths, frontmatter.scope, frontmatter.id, frontmatter.module);\n await mkdir(path.dirname(file), { recursive: true });\n\n if (existsSync(file)) {\n ui.error(`Memory already exists at ${file}`);\n process.exitCode = 1;\n return;\n }\n\n await writeFile(file, serializeMemory({ frontmatter, body }), \"utf8\");\n ui.success(`Created ${path.relative(root, file)}`);\n ui.info(`scope=${frontmatter.scope} status=${frontmatter.status} id=${frontmatter.id}`);\n if (inferredTags.length > 0) {\n ui.info(`auto-tagged: ${inferredTags.join(\", \")} (use --no-auto-tag to disable)`);\n }\n });\n}\n\nfunction parseCsv(value: string | undefined): string[] {\n if (!value) return [];\n return value\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { findProjectRoot, resolveHaivePaths, type MemoryScope, type MemoryType } from \"@hiveai/core\";\nimport { loadMemoriesFromDir, type LoadedMemory } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ListOptions {\n scope?: MemoryScope;\n type?: MemoryType;\n tag?: string;\n module?: string;\n dir?: string;\n}\n\nexport function registerMemoryList(memory: Command): void {\n memory\n .command(\"list\")\n .description(\"List memories with optional filters\")\n .option(\"--scope <scope>\", \"personal | team | module\")\n .option(\"--type <type>\", \"filter by type\")\n .option(\"--tag <tag>\", \"filter by tag\")\n .option(\"--module <name>\", \"filter by module name\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: ListOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const filtered = all.filter((m) => matchesFilters(m, opts));\n\n if (filtered.length === 0) {\n ui.info(\"No memories match the filters.\");\n return;\n }\n\n for (const { memory: mem, filePath } of filtered) {\n const fm = mem.frontmatter;\n const tagStr = fm.tags.length ? ui.dim(` [${fm.tags.join(\", \")}]`) : \"\";\n const moduleStr = fm.module ? ui.dim(` (${fm.module})`) : \"\";\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(fm.scope)}/${ui.dim(fm.type)}${moduleStr}${tagStr}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n console.log(ui.dim(`\\n${filtered.length} memor${filtered.length === 1 ? \"y\" : \"ies\"}`));\n });\n}\n\nfunction matchesFilters(loaded: LoadedMemory, opts: ListOptions): boolean {\n const fm = loaded.memory.frontmatter;\n if (opts.scope && fm.scope !== opts.scope) return false;\n if (opts.type && fm.type !== opts.type) return false;\n if (opts.tag && !fm.tags.includes(opts.tag)) return false;\n if (opts.module && fm.module !== opts.module) return false;\n return true;\n}\n","export {\n loadMemoriesFromDir,\n loadMemory,\n listMarkdownFilesRecursive,\n type LoadedMemory,\n} from \"@hiveai/core\";\n","import { mkdir, unlink, writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n memoryFilePath,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface PromoteOptions {\n dir?: string;\n}\n\nexport function registerMemoryPromote(memory: Command): void {\n memory\n .command(\"promote <id>\")\n .description(\"Promote a personal memory to team scope (status -> proposed)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: PromoteOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.personalDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No personal memory with id \"${id}\". (Promotion only applies to personal scope.)`);\n process.exitCode = 1;\n return;\n }\n\n const updated = {\n frontmatter: {\n ...found.memory.frontmatter,\n scope: \"team\" as const,\n status: \"proposed\" as const,\n },\n body: found.memory.body,\n };\n\n const newPath = memoryFilePath(paths, \"team\", updated.frontmatter.id);\n await mkdir(path.dirname(newPath), { recursive: true });\n await writeFile(newPath, serializeMemory(updated), \"utf8\");\n await unlink(found.filePath);\n\n ui.success(`Promoted ${id} to team scope (status=proposed)`);\n ui.info(`Now at ${path.relative(root, newPath)}`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ApproveOptions {\n dir?: string;\n}\n\nexport function registerMemoryApprove(memory: Command): void {\n memory\n .command(\"approve <id>\")\n .description(\"Mark a 'proposed' memory as 'validated' immediately (explicit review)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: ApproveOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const current = found.memory.frontmatter.status;\n if (current === \"validated\") {\n ui.info(`${id} is already validated.`);\n return;\n }\n if (current !== \"proposed\" && current !== \"draft\") {\n ui.warn(`Memory has status \"${current}\"; approve still sets it to validated.`);\n }\n\n const next = {\n frontmatter: { ...found.memory.frontmatter, status: \"validated\" as const },\n body: found.memory.body,\n };\n await writeFile(found.filePath, serializeMemory(next), \"utf8\");\n ui.success(`Approved ${id} (status=validated)`);\n ui.info(path.relative(root, found.filePath));\n });\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n DEFAULT_AUTO_PROMOTE_RULE,\n findProjectRoot,\n getUsage,\n isAutoPromoteEligible,\n loadUsageIndex,\n resolveHaivePaths,\n serializeMemory,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface AutoPromoteOptions {\n minReads?: string;\n maxRejections?: string;\n apply?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryAutoPromote(memory: Command): void {\n memory\n .command(\"auto-promote\")\n .description(\"Promote eligible 'proposed' memories to 'validated' based on usage\")\n .option(\"--min-reads <n>\", \"minimum read_count to qualify\", String(DEFAULT_AUTO_PROMOTE_RULE.minReads))\n .option(\n \"--max-rejections <n>\",\n \"memories with more rejections than this are skipped\",\n String(DEFAULT_AUTO_PROMOTE_RULE.maxRejections),\n )\n .option(\"--apply\", \"actually write status=validated to disk (default: dry-run)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: AutoPromoteOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const rule = {\n minReads: Number(opts.minReads ?? DEFAULT_AUTO_PROMOTE_RULE.minReads),\n maxRejections: Number(opts.maxRejections ?? DEFAULT_AUTO_PROMOTE_RULE.maxRejections),\n };\n\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const eligible = memories.filter(({ memory }) =>\n isAutoPromoteEligible(memory.frontmatter, getUsage(usage, memory.frontmatter.id), rule),\n );\n\n if (eligible.length === 0) {\n ui.info(\n `No memories eligible (minReads=${rule.minReads}, maxRejections=${rule.maxRejections}).`,\n );\n return;\n }\n\n let written = 0;\n for (const { memory: mem, filePath } of eligible) {\n const u = getUsage(usage, mem.frontmatter.id);\n console.log(\n `${ui.bold(opts.apply ? \"PROMOTE\" : \"would promote\")} ${mem.frontmatter.id} ${ui.dim(`reads=${u.read_count} rejections=${u.rejected_count}`)}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n if (opts.apply) {\n const next = {\n frontmatter: { ...mem.frontmatter, status: \"validated\" as const },\n body: mem.body,\n };\n await writeFile(filePath, serializeMemory(next), \"utf8\");\n written++;\n }\n }\n\n const summary = `${eligible.length} eligible`;\n ui.info(opts.apply ? `${summary} · ${written} promoted` : `${summary} · dry-run (use --apply)`);\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n parseMemory,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface EditOptions {\n editor?: string;\n dir?: string;\n}\n\nexport function registerMemoryEdit(memory: Command): void {\n memory\n .command(\"edit <id>\")\n .description(\"Open a memory in $EDITOR and re-validate when you save\")\n .option(\"-e, --editor <cmd>\", \"editor command (defaults to $EDITOR or 'vi')\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: EditOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const editor = opts.editor ?? process.env.EDITOR ?? process.env.VISUAL ?? \"vi\";\n ui.info(`Opening ${path.relative(root, found.filePath)} with ${editor}…`);\n const code = await runEditor(editor, found.filePath);\n if (code !== 0) {\n ui.warn(`Editor exited with status ${code}.`);\n }\n\n try {\n const fresh = await readFile(found.filePath, \"utf8\");\n parseMemory(fresh);\n ui.success(\"Memory still parses cleanly.\");\n } catch (err) {\n ui.error(\n `Memory no longer parses: ${err instanceof Error ? err.message : String(err)}`,\n );\n ui.warn(\"File left as-is on disk; fix it and re-run a parse-aware command to confirm.\");\n process.exitCode = 1;\n }\n });\n}\n\nfunction runEditor(editor: string, file: string): Promise<number> {\n return new Promise((resolve) => {\n const child = spawn(editor, [file], { stdio: \"inherit\" });\n child.on(\"exit\", (code) => resolve(code ?? 0));\n child.on(\"error\", () => resolve(127));\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n inferModulesFromPaths,\n loadUsageIndex,\n memoryMatchesAnchorPaths,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ForFilesOptions {\n dir?: string;\n}\n\nexport function registerMemoryForFiles(memory: Command): void {\n memory\n .command(\"for-files <files...>\")\n .description(\"Show memories relevant to the given files (anchor overlap, module, domain)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (files: string[], opts: ForFilesOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const inferred = inferModulesFromPaths(files);\n\n const byAnchor: typeof all = [];\n const byModule: typeof all = [];\n const byDomain: typeof all = [];\n const seen = new Set<string>();\n\n for (const loaded of all) {\n if (memoryMatchesAnchorPaths(loaded.memory, files)) {\n byAnchor.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n for (const loaded of all) {\n if (seen.has(loaded.memory.frontmatter.id)) continue;\n const mod = loaded.memory.frontmatter.module;\n if (mod && inferred.includes(mod)) {\n byModule.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n for (const loaded of all) {\n if (seen.has(loaded.memory.frontmatter.id)) continue;\n const domain = loaded.memory.frontmatter.domain;\n if (domain && inferred.includes(domain)) {\n byDomain.push(loaded);\n seen.add(loaded.memory.frontmatter.id);\n }\n }\n\n console.log(ui.dim(`inferred modules: ${inferred.length ? inferred.join(\", \") : \"(none)\"}`));\n printGroup(root, \"anchor overlap\", byAnchor, usage);\n printGroup(root, \"module match\", byModule, usage);\n printGroup(root, \"domain match\", byDomain, usage);\n\n const total = byAnchor.length + byModule.length + byDomain.length;\n ui.info(\n `${total} relevant memor${total === 1 ? \"y\" : \"ies\"} (${byAnchor.length} anchor · ${byModule.length} module · ${byDomain.length} domain)`,\n );\n });\n}\n\nfunction printGroup(\n root: string,\n label: string,\n loaded: Array<Awaited<ReturnType<typeof loadMemoriesFromDir>>[number]>,\n usage: Awaited<ReturnType<typeof loadUsageIndex>>,\n): void {\n if (loaded.length === 0) return;\n console.log(ui.bold(`\\n— ${label} —`));\n for (const { memory: mem, filePath } of loaded) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n console.log(`${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.bold(conf)}`);\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface HotOptions {\n threshold?: string;\n status?: \"draft\" | \"proposed\";\n dir?: string;\n}\n\nexport function registerMemoryHot(memory: Command): void {\n memory\n .command(\"hot\")\n .description(\"List memories actively used but not yet validated (good promotion candidates)\")\n .option(\"--threshold <n>\", \"minimum read_count to qualify\", \"3\")\n .option(\"--status <status>\", \"limit to one status (default: draft + proposed)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: HotOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n const threshold = Math.max(1, Number(opts.threshold ?? 3));\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const candidates = all\n .filter(({ memory: mem }) => {\n const fm = mem.frontmatter;\n if (opts.status && fm.status !== opts.status) return false;\n if (opts.status === undefined && fm.status !== \"draft\" && fm.status !== \"proposed\") {\n return false;\n }\n return getUsage(usage, fm.id).read_count >= threshold;\n })\n .sort(\n (a, b) =>\n getUsage(usage, b.memory.frontmatter.id).read_count -\n getUsage(usage, a.memory.frontmatter.id).read_count,\n );\n\n if (candidates.length === 0) {\n ui.info(`No hot memories (threshold=${threshold}).`);\n return;\n }\n\n for (const { memory: mem, filePath } of candidates) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.bold(fm.status)} ${ui.dim(`reads=${u.read_count} rejections=${u.rejected_count}`)}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n ui.info(\n `${candidates.length} hot — promote drafts with \\`haive memory promote <id>\\`, then \\`haive memory auto-promote --apply\\`.`,\n );\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface PendingOptions {\n scope?: \"personal\" | \"team\" | \"module\";\n dir?: string;\n}\n\nexport function registerMemoryPending(memory: Command): void {\n memory\n .command(\"pending\")\n .description(\"List 'proposed' memories awaiting review (sorted by reads desc)\")\n .option(\"--scope <scope>\", \"filter by scope (personal | team | module)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: PendingOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const proposed = all.filter(({ memory: mem }) => {\n if (mem.frontmatter.status !== \"proposed\") return false;\n if (opts.scope && mem.frontmatter.scope !== opts.scope) return false;\n return true;\n });\n\n if (proposed.length === 0) {\n ui.info(\"No memories awaiting review.\");\n return;\n }\n\n proposed.sort(\n (a, b) =>\n getUsage(usage, b.memory.frontmatter.id).read_count -\n getUsage(usage, a.memory.frontmatter.id).read_count,\n );\n\n const now = Date.now();\n for (const { memory: mem, filePath } of proposed) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const ageDays = Math.floor((now - new Date(fm.created_at).getTime()) / 86_400_000);\n const ageStr = ageDays === 0 ? \"today\" : `${ageDays}d`;\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.dim(`age=${ageStr} reads=${u.read_count} rejections=${u.rejected_count}`)}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n ui.info(`${proposed.length} pending`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n extractSnippet,\n findProjectRoot,\n literalMatchesAllTokens,\n pickSnippetNeedle,\n resolveHaivePaths,\n tokenizeQuery,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface QueryOptions {\n dir?: string;\n limit?: string;\n}\n\nexport function registerMemoryQuery(memory: Command): void {\n memory\n .command(\"query <text>\")\n .description(\"Search memories by id, tag, or substring (multi-word AND)\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .option(\"--limit <n>\", \"max results\", \"20\")\n .action(async (text: string, opts: QueryOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No memories directory at ${paths.memoriesDir}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const tokens = tokenizeQuery(text);\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const matches = all.filter(({ memory: mem }) => literalMatchesAllTokens(mem, tokens));\n\n const limit = Math.max(1, Number(opts.limit ?? 20));\n const top = matches.slice(0, limit);\n\n if (top.length === 0) {\n ui.info(`No matches for \"${text}\".`);\n return;\n }\n\n const snippetNeedle = pickSnippetNeedle(text);\n for (const { memory: mem, filePath } of top) {\n const snippet = extractSnippet(mem.body, snippetNeedle);\n console.log(`${ui.bold(mem.frontmatter.id)} ${ui.dim(mem.frontmatter.scope)}`);\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n if (snippet) console.log(` ${snippet}`);\n }\n console.log(\n ui.dim(`\\n${top.length} of ${matches.length} match${matches.length === 1 ? \"\" : \"es\"}`),\n );\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n loadUsageIndex,\n recordRejection,\n resolveHaivePaths,\n saveUsageIndex,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface RejectOptions {\n reason?: string;\n dir?: string;\n}\n\nexport function registerMemoryReject(memory: Command): void {\n memory\n .command(\"reject <id>\")\n .description(\"Record a rejection (blocks auto-promotion and lowers confidence)\")\n .option(\"-r, --reason <reason>\", \"why this memory is being rejected\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: RejectOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const memories = await loadMemoriesFromDir(paths.memoriesDir);\n if (!memories.some((m) => m.memory.frontmatter.id === id)) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const idx = await loadUsageIndex(paths);\n recordRejection(idx, id, opts.reason ?? null);\n await saveUsageIndex(paths, idx);\n const u = idx.by_id[id]!;\n ui.success(\n `Recorded rejection for ${id} (now ${u.rejected_count} rejection${u.rejected_count === 1 ? \"\" : \"s\"})`,\n );\n if (opts.reason) ui.info(`reason: ${opts.reason}`);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { unlink } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n loadUsageIndex,\n resolveHaivePaths,\n saveUsageIndex,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface RmOptions {\n yes?: boolean;\n keepUsage?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryRm(memory: Command): void {\n memory\n .command(\"rm <id>\")\n .description(\"Delete a memory file (and its usage entry by default)\")\n .option(\"-y, --yes\", \"skip the confirmation prompt\")\n .option(\"--keep-usage\", \"do not remove the usage.json entry\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: RmOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n const rel = path.relative(root, found.filePath);\n if (!opts.yes) {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = (await rl.question(`Delete ${rel}? [y/N] `)).trim().toLowerCase();\n rl.close();\n if (answer !== \"y\" && answer !== \"yes\") {\n ui.info(\"Aborted.\");\n return;\n }\n }\n\n await unlink(found.filePath);\n ui.success(`Deleted ${rel}`);\n\n if (!opts.keepUsage) {\n const idx = await loadUsageIndex(paths);\n if (idx.by_id[id]) {\n delete idx.by_id[id];\n await saveUsageIndex(paths, idx);\n ui.info(\"Removed usage entry\");\n }\n }\n });\n}\n","import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface ShowOptions {\n raw?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryShow(memory: Command): void {\n memory\n .command(\"show <id>\")\n .description(\"Print a memory's frontmatter, body, and confidence/usage\")\n .option(\"--raw\", \"print the raw file contents instead of a summary\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (id: string, opts: ShowOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const found = all.find((m) => m.memory.frontmatter.id === id);\n if (!found) {\n ui.error(`No memory with id \"${id}\".`);\n process.exitCode = 1;\n return;\n }\n\n if (opts.raw) {\n console.log(await readFile(found.filePath, \"utf8\"));\n return;\n }\n\n const fm = found.memory.frontmatter;\n const usage = await loadUsageIndex(paths);\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n\n console.log(ui.bold(fm.id));\n console.log(`${ui.dim(\"scope:\")} ${fm.scope}${fm.module ? ` / ${fm.module}` : \"\"}`);\n console.log(`${ui.dim(\"type:\")} ${fm.type}`);\n console.log(`${ui.dim(\"status:\")} ${fm.status} ${ui.dim(\"→ confidence:\")} ${ui.bold(conf)}`);\n console.log(`${ui.dim(\"tags:\")} ${fm.tags.length ? fm.tags.join(\", \") : \"(none)\"}`);\n console.log(`${ui.dim(\"created:\")} ${fm.created_at}`);\n if (fm.verified_at) console.log(`${ui.dim(\"verified:\")} ${fm.verified_at}`);\n if (fm.stale_reason) console.log(`${ui.dim(\"stale:\")} ${fm.stale_reason}`);\n console.log(`${ui.dim(\"reads:\")} ${u.read_count} ${ui.dim(\"rejections:\")} ${u.rejected_count}`);\n console.log(`${ui.dim(\"file:\")} ${path.relative(root, found.filePath)}`);\n if (fm.anchor.paths.length || fm.anchor.symbols.length) {\n console.log(ui.dim(\"anchor:\"));\n if (fm.anchor.commit) console.log(` ${ui.dim(\"commit:\")} ${fm.anchor.commit}`);\n if (fm.anchor.paths.length)\n console.log(` ${ui.dim(\"paths:\")} ${fm.anchor.paths.join(\", \")}`);\n if (fm.anchor.symbols.length)\n console.log(` ${ui.dim(\"symbols:\")} ${fm.anchor.symbols.join(\", \")}`);\n }\n console.log();\n console.log(found.memory.body);\n });\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n deriveConfidence,\n findProjectRoot,\n getUsage,\n loadUsageIndex,\n resolveHaivePaths,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface StatsOptions {\n id?: string;\n dir?: string;\n}\n\nexport function registerMemoryStats(memory: Command): void {\n memory\n .command(\"stats\")\n .description(\"Show usage stats and confidence levels per memory\")\n .option(\"--id <id>\", \"show stats for a single memory id\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: StatsOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const usage = await loadUsageIndex(paths);\n const target = opts.id\n ? all.filter((m) => m.memory.frontmatter.id === opts.id)\n : all;\n\n if (target.length === 0) {\n ui.info(opts.id ? `No memory with id \"${opts.id}\".` : \"No memories.\");\n return;\n }\n\n // Sort by read_count desc to surface the popular ones.\n target.sort(\n (a, b) =>\n getUsage(usage, b.memory.frontmatter.id).read_count -\n getUsage(usage, a.memory.frontmatter.id).read_count,\n );\n\n for (const { memory: mem, filePath } of target) {\n const fm = mem.frontmatter;\n const u = getUsage(usage, fm.id);\n const conf = deriveConfidence(fm, u);\n console.log(\n `${ui.bold(fm.id)} ${ui.dim(`${fm.scope}/${fm.type}`)} ${ui.bold(conf)}`,\n );\n console.log(\n ` ${ui.dim(\"status:\")} ${fm.status} ${ui.dim(\"reads:\")} ${u.read_count} ${ui.dim(\"rejections:\")} ${u.rejected_count}`,\n );\n console.log(` ${ui.dim(path.relative(root, filePath))}`);\n }\n });\n}\n","import { writeFile } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport {\n findProjectRoot,\n resolveHaivePaths,\n serializeMemory,\n verifyAnchor,\n} from \"@hiveai/core\";\nimport { loadMemoriesFromDir } from \"../utils/fs.js\";\nimport { ui } from \"../utils/ui.js\";\n\ninterface VerifyOptions {\n id?: string;\n all?: boolean;\n update?: boolean;\n dir?: string;\n}\n\nexport function registerMemoryVerify(memory: Command): void {\n memory\n .command(\"verify\")\n .description(\"Check memory anchors against current code, optionally marking stale ones\")\n .option(\"--id <id>\", \"verify a single memory by id\")\n .option(\"--all\", \"verify every memory (default if --id is omitted)\")\n .option(\"--update\", \"write status=stale (or status=validated for re-freshed) back to disk\")\n .option(\"-d, --dir <dir>\", \"project root\")\n .action(async (opts: VerifyOptions) => {\n const root = findProjectRoot(opts.dir);\n const paths = resolveHaivePaths(root);\n if (!existsSync(paths.memoriesDir)) {\n ui.error(`No .ai/memories at ${root}. Run \\`haive init\\` first.`);\n process.exitCode = 1;\n return;\n }\n\n const all = await loadMemoriesFromDir(paths.memoriesDir);\n const targets = opts.id\n ? all.filter((m) => m.memory.frontmatter.id === opts.id)\n : all;\n\n if (opts.id && targets.length === 0) {\n ui.error(`No memory with id \"${opts.id}\".`);\n process.exitCode = 1;\n return;\n }\n\n let staleCount = 0;\n let freshCount = 0;\n let anchorless = 0;\n let updated = 0;\n\n for (const { memory: mem, filePath } of targets) {\n const result = await verifyAnchor(mem, { projectRoot: root });\n const isAnchored =\n mem.frontmatter.anchor.paths.length > 0 ||\n mem.frontmatter.anchor.symbols.length > 0;\n\n if (!isAnchored) {\n anchorless++;\n continue;\n }\n\n const rel = path.relative(root, filePath);\n if (result.stale) {\n staleCount++;\n console.log(`${ui.bold(\"STALE\")} ${mem.frontmatter.id}`);\n console.log(` ${ui.dim(rel)}`);\n console.log(` ${result.reason}`);\n } else {\n freshCount++;\n console.log(`${ui.dim(\"fresh\")} ${mem.frontmatter.id}`);\n }\n\n if (opts.update) {\n const next = applyVerification(mem, result);\n await writeFile(filePath, serializeMemory(next), \"utf8\");\n updated++;\n }\n }\n\n const summary = [\n `${freshCount} fresh`,\n `${staleCount} stale`,\n `${anchorless} anchorless (skipped)`,\n ];\n if (opts.update) summary.push(`${updated} updated on disk`);\n ui.info(summary.join(\" · \"));\n });\n}\n\nfunction applyVerification(\n mem: Parameters<typeof serializeMemory>[0],\n result: { stale: boolean; reason: string | null },\n): Parameters<typeof serializeMemory>[0] {\n const verifiedAt = new Date().toISOString();\n if (result.stale) {\n return {\n frontmatter: {\n ...mem.frontmatter,\n status: \"stale\",\n verified_at: verifiedAt,\n stale_reason: result.reason,\n },\n body: mem.body,\n };\n }\n // Reset stale_reason when re-validating; keep validated/proposed status as is,\n // promote draft→validated when verification passes.\n const nextStatus =\n mem.frontmatter.status === \"stale\" || mem.frontmatter.status === \"draft\"\n ? \"validated\"\n : mem.frontmatter.status;\n return {\n frontmatter: {\n ...mem.frontmatter,\n status: nextStatus,\n verified_at: verifiedAt,\n stale_reason: null,\n },\n body: mem.body,\n };\n}\n"],"mappings":"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","names":["Command","program","path","findProjectRoot","resolveHaivePaths","program","findProjectRoot","resolveHaivePaths","path","existsSync","path","resolveHaivePaths","program","path","resolveHaivePaths","existsSync","mkdir","writeFile","existsSync","path","findProjectRoot","program","findProjectRoot","path","existsSync","mkdir","writeFile","existsSync","path","findProjectRoot","require","program","findProjectRoot","path","existsSync","writeFile","existsSync","findProjectRoot","resolveHaivePaths","program","findProjectRoot","resolveHaivePaths","existsSync","memory","writeFile","mkdir","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","mkdir","path","writeFile","serializeMemory","existsSync","path","findProjectRoot","resolveHaivePaths","loadMemoriesFromDir","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","path","mkdir","writeFile","existsSync","path","findProjectRoot","memoryFilePath","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","memoryFilePath","mkdir","path","writeFile","serializeMemory","existsSync","writeFile","path","findProjectRoot","resolveHaivePaths","serializeMemory","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","writeFile","serializeMemory","path","writeFile","existsSync","path","DEFAULT_AUTO_PROMOTE_RULE","findProjectRoot","getUsage","isAutoPromoteEligible","loadUsageIndex","resolveHaivePaths","serializeMemory","memory","DEFAULT_AUTO_PROMOTE_RULE","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","isAutoPromoteEligible","getUsage","path","writeFile","serializeMemory","spawn","existsSync","readFile","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","path","readFile","spawn","existsSync","path","findProjectRoot","getUsage","inferModulesFromPaths","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","inferModulesFromPaths","getUsage","path","existsSync","path","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","getUsage","path","existsSync","path","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","getUsage","path","existsSync","path","findProjectRoot","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","path","existsSync","findProjectRoot","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","existsSync","unlink","path","findProjectRoot","loadUsageIndex","resolveHaivePaths","saveUsageIndex","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","path","unlink","loadUsageIndex","saveUsageIndex","existsSync","readFile","path","deriveConfidence","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","readFile","loadUsageIndex","getUsage","deriveConfidence","path","existsSync","path","deriveConfidence","findProjectRoot","getUsage","loadUsageIndex","resolveHaivePaths","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","loadUsageIndex","getUsage","deriveConfidence","path","writeFile","existsSync","path","findProjectRoot","resolveHaivePaths","serializeMemory","verifyAnchor","memory","findProjectRoot","resolveHaivePaths","existsSync","loadMemoriesFromDir","verifyAnchor","path","writeFile","serializeMemory","Command"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hiveai/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "hAIve CLI — manage shared AI memories from the terminal",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"commander": "^12.1.0",
|
|
32
32
|
"picocolors": "^1.1.1",
|
|
33
|
-
"@hiveai/
|
|
34
|
-
"@hiveai/
|
|
33
|
+
"@hiveai/core": "0.2.1",
|
|
34
|
+
"@hiveai/mcp": "0.2.1"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
|
-
"@hiveai/embeddings": "^0.1
|
|
37
|
+
"@hiveai/embeddings": "^0.2.1"
|
|
38
38
|
},
|
|
39
39
|
"peerDependenciesMeta": {
|
|
40
40
|
"@hiveai/embeddings": {
|