@agentskit/doc-bridge 0.1.0-alpha.2 → 1.0.0

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +139 -57
  3. package/action.yml +78 -0
  4. package/dist/cli/program.js +1122 -114
  5. package/dist/cli/program.js.map +1 -1
  6. package/dist/index.d.ts +258 -28
  7. package/dist/index.js +824 -54
  8. package/dist/index.js.map +1 -1
  9. package/docs/DOGFOOD-ROUND2.md +142 -0
  10. package/docs/DOGFOOD-ROUND3.md +74 -0
  11. package/docs/POSITIONING.md +2 -0
  12. package/docs/RELEASE.md +5 -3
  13. package/docs/chat-and-rag.md +2 -0
  14. package/docs/getting-started.md +14 -1
  15. package/docs/landing/index.html +299 -0
  16. package/docs/mcp.md +10 -1
  17. package/docs/ollama-demo.md +64 -0
  18. package/docs/playbook/doc-bridge-pattern.md +114 -0
  19. package/docs/recipes/index-pipeline.md +89 -0
  20. package/docs/skills/doc-bridge.md +64 -0
  21. package/docs/spec/cli.md +6 -0
  22. package/docs/spec/playbook-feedback.md +12 -4
  23. package/examples/demo-example/doc-bridge.config.json +23 -0
  24. package/examples/demo-example/docs/for-agents/INDEX.md +3 -0
  25. package/examples/demo-example/docs/for-agents/packages/example.md +14 -0
  26. package/examples/demo-example/package.json +7 -0
  27. package/examples/demo-example/src/.gitkeep +0 -0
  28. package/examples/demo-monorepo/doc-bridge.config.json +37 -0
  29. package/examples/demo-monorepo/docs/for-agents/INDEX.md +4 -0
  30. package/examples/demo-monorepo/docs/for-agents/packages/auth.md +22 -0
  31. package/examples/demo-monorepo/docs/for-agents/packages/billing.md +19 -0
  32. package/examples/demo-monorepo/docs/human/guides/auth.md +7 -0
  33. package/examples/demo-monorepo/package.json +7 -0
  34. package/examples/demo-monorepo/packages/auth/package.json +8 -0
  35. package/examples/demo-monorepo/packages/billing/package.json +7 -0
  36. package/examples/demo-monorepo/pnpm-workspace.yaml +2 -0
  37. package/examples/ollama-chat.config.ts +42 -0
  38. package/package.json +12 -9
  39. package/src/cli/demo.ts +143 -0
  40. package/src/cli/program.ts +220 -26
  41. package/src/doctor/badge.ts +53 -0
  42. package/src/doctor/run-doctor.ts +286 -0
  43. package/src/federation/llms.ts +20 -11
  44. package/src/index-builder/build-handoffs.ts +35 -2
  45. package/src/index-builder/scan-corpus.ts +5 -1
  46. package/src/index-builder/watch-index.ts +94 -0
  47. package/src/index.ts +24 -0
  48. package/src/lib/markdown.ts +31 -4
  49. package/src/mcp/install.ts +84 -0
  50. package/src/memory/github-pr.ts +190 -0
  51. package/src/playbook/doc-bridge-pattern.ts +121 -0
  52. package/src/query/query.ts +19 -1
  53. package/src/query/search.ts +85 -17
  54. package/src/schemas/agent-handoff.ts +11 -0
  55. package/src/schemas/doc-bridge-index.ts +3 -1
  56. package/src/schemas/json-schemas.ts +2 -1
  57. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/program.ts","../../src/config/load-config.ts","../../src/config/defaults.ts","../../src/config/schema.ts","../../src/index-builder/build-index.ts","../../src/lib/paths.ts","../../src/lib/package-manager.ts","../../src/index-builder/scan-corpus.ts","../../src/lib/markdown.ts","../../src/lib/walk.ts","../../src/index-builder/build-handoffs.ts","../../src/version.ts","../../src/index-builder/capabilities.ts","../../src/index-builder/content-hash.ts","../../src/index-builder/llms-txt.ts","../../src/index-builder/human-adapters/docusaurus.ts","../../src/index-builder/human-adapters/core.ts","../../src/index-builder/human-adapters/fumadocs.ts","../../src/index-builder/human-adapters/plain-markdown.ts","../../src/index-builder/human-adapters/index.ts","../../src/index-builder/plugins/pnpm-monorepo.ts","../../src/lib/glob-expand.ts","../../src/federation/llms.ts","../../src/query/search.ts","../../src/retriever/doc-bridge-retriever.ts","../../src/gates/run-gates.ts","../../src/query/load-index.ts","../../src/schemas/agent-handoff.ts","../../src/schemas/doc-bridge-index.ts","../../src/schemas/memory-candidate.ts","../../src/validate.ts","../../src/query/query.ts","../../src/intelligence/adapter.ts","../../src/intelligence/peers.ts","../../src/intelligence/rag.ts","../../src/intelligence/chat.ts","../../src/memory/ingest.ts","../../src/memory/pipeline.ts","../../src/mcp/server.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { createInterface } from 'node:readline/promises'\n\nimport { loadConfig, projectRootFromConfigPath } from '../config/load-config.js'\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { discoverPnpmPackages } from '../index-builder/plugins/pnpm-monorepo.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { retrieveHybridChunks } from '../federation/llms.js'\nimport { runGates, type GateId } from '../gates/run-gates.js'\nimport { runChatOnce, startInkChat } from '../intelligence/chat.js'\nimport { PeerMissingError, layer1InstallHint } from '../intelligence/peers.js'\nimport { createDocBridgeRag } from '../intelligence/rag.js'\nimport { firstHeading, firstParagraph } from '../lib/markdown.js'\nimport { ingestMemoryCandidates } from '../memory/ingest.js'\nimport { classifyMemoryCandidates, draftMemoryPromotion } from '../memory/pipeline.js'\nimport { startMcpStdioServer } from '../mcp/server.js'\nimport { IndexNotFoundError, loadDocBridgeIndex } from '../query/load-index.js'\nimport { runQuery, type QueryKind } from '../query/query.js'\nimport { searchIndex } from '../query/search.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { parseAgentHandoff, parseDocBridgeConfig } from '../validate.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\ntype Command =\n | 'help'\n | 'version'\n | 'validate-config'\n | 'validate-handoff'\n | 'init'\n | 'bootstrap'\n | 'memory'\n | 'playbook'\n | 'registry'\n | 'index'\n | 'gate'\n | 'mcp'\n | 'query'\n | 'search'\n | 'retrieve'\n | 'ask'\n | 'chat'\n | 'rag'\n | 'list'\n\nconst usage = `ak-docs — human↔agent documentation bridge (@agentskit/doc-bridge)\n\nCore (no API key):\n ak-docs init [--demo] [--scaffold-workspaces]\n ak-docs index\n ak-docs query <package|ownership|intent|change> <id> [--agent] [--text]\n ak-docs search <term> [--agent] [--text]\n ak-docs list <packages|intents|changes|knowledge> [--text]\n ak-docs ask [question] local consult (no LLM)\n ak-docs gate run [gate-id]\n ak-docs mcp\n ak-docs memory ingest|classify|promote\n ak-docs bootstrap agent-docs\n ak-docs validate-config | validate-handoff <file>\n\nIntelligence (optional AgentsKit peers):\n ak-docs rag ingest|search <query>\n ak-docs chat terminal chat (Ink + RAG)\n ak-docs ask <question> --chat one-shot grounded answer\n\nAdvanced / ecosystem:\n ak-docs retrieve <query>\n ak-docs registry topology\n ak-docs playbook draft\n\nGlobal flags:\n -h, --help --version\n --config <path> (project root = config file directory)\n --agent --json --text --chat --demo\n`\n\nconst QUERY_KINDS = new Set<QueryKind>(['package', 'ownership', 'intent', 'change', 'search'])\nconst LIST_KINDS = new Set(['packages', 'intents', 'changes', 'knowledge'])\nconst GATE_IDS = new Set<GateId>(['index-freshness', 'human-guide-links', 'okf-type', 'docs-style'])\n\nconst parseArgs = (argv: readonly string[]) => {\n const flags = new Set<string>()\n let configPath: string | undefined\n const positional: string[] = []\n\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i]\n if (!arg) continue\n if (arg === '--config') {\n configPath = argv[i + 1]\n i += 1\n continue\n }\n if (arg.startsWith('-')) {\n flags.add(arg)\n continue\n }\n positional.push(arg)\n }\n\n let command: Command = 'help'\n if (flags.has('--version') || flags.has('-V')) command = 'version'\n else if (flags.has('--help') || flags.has('-h')) command = 'help'\n else if (positional[0] === 'validate-config') command = 'validate-config'\n else if (positional[0] === 'validate-handoff') command = 'validate-handoff'\n else if (positional[0] === 'init') command = 'init'\n else if (positional[0] === 'bootstrap') command = 'bootstrap'\n else if (positional[0] === 'memory') command = 'memory'\n else if (positional[0] === 'playbook') command = 'playbook'\n else if (positional[0] === 'registry') command = 'registry'\n else if (positional[0] === 'index') command = 'index'\n else if (positional[0] === 'gate') command = 'gate'\n else if (positional[0] === 'mcp') command = 'mcp'\n else if (positional[0] === 'query') command = 'query'\n else if (positional[0] === 'search') command = 'search'\n else if (positional[0] === 'retrieve') command = 'retrieve'\n else if (positional[0] === 'ask') command = 'ask'\n else if (positional[0] === 'chat') command = 'chat'\n else if (positional[0] === 'rag') command = 'rag'\n else if (positional[0] === 'list') command = 'list'\n\n return { command, flags, configPath, positional }\n}\n\nconst writeJson = (payload: unknown): void => {\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`)\n}\n\nconst writeLines = (lines: readonly string[]): void => {\n process.stdout.write(lines.length ? `${lines.join('\\n')}\\n` : '')\n}\n\nconst textValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'Not found'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return JSON.stringify(value, null, 2)\n}\n\nconst writeTextQuery = (payload: unknown): void => {\n if (!payload || typeof payload !== 'object' || !('data' in payload)) {\n writeLines([textValue(payload)])\n return\n }\n\n const result = payload as { readonly type?: unknown; readonly data?: unknown }\n if (result.type === 'search') {\n const data = result.data as {\n readonly term?: unknown\n readonly count?: unknown\n readonly matches?: readonly {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n }[]\n }\n const matches = data.matches ?? []\n writeLines([\n `Search: ${String(data.term ?? '')}`,\n `Matches: ${String(data.count ?? matches.length)}`,\n ...matches.map((match) =>\n [match.type, match.id, match.path, match.summary].filter(Boolean).join('\\t'),\n ),\n ])\n return\n }\n\n writeLines([textValue(result.data)])\n}\n\nconst writeTextSearch = (\n term: string,\n matches: readonly {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n }[],\n): void => {\n writeLines([\n `Search: ${term}`,\n `Matches: ${matches.length}`,\n ...matches.map((match) =>\n [match.type, match.id, match.path, match.summary].filter(Boolean).join('\\t'),\n ),\n ])\n}\n\nconst writeAsk = (\n question: string,\n matches: ReturnType<typeof searchIndex>,\n index: DocBridgeIndexV1,\n): void => {\n const best = matches[0]\n const owner = matches.find((match) => match.type === 'ownership' || index.lookup?.ownership?.[match.id])\n const bestQuery =\n owner\n ? `ak-docs query ownership ${owner.id} --agent`\n : 'ak-docs list knowledge --text'\n writeLines([\n `Question: ${question}`,\n best ? `Best match: ${best.type} ${best.id} (${best.path})` : 'Best match: none',\n '',\n 'Matches:',\n ...(\n matches.length\n ? matches.slice(0, 5).map((match) =>\n [match.type, match.id, match.path, match.summary].filter(Boolean).join('\\t'),\n )\n : ['No local matches. Try: ak-docs search <term>']\n ),\n '',\n 'Next commands:',\n ...(best\n ? [\n `ak-docs search \"${question}\" --agent`,\n bestQuery,\n ]\n : ['ak-docs list knowledge --text']),\n ])\n}\n\nconst readIndexedDoc = (root: string, config: DocBridgeConfigV1, idOrPath: string): string => {\n const index = loadDocBridgeIndex(root, config)\n const entry = index.knowledge.find((doc) => doc.id === idOrPath || doc.path === idOrPath)\n if (!entry) throw new Error(`Unknown indexed doc \"${idOrPath}\". Try: search ${idOrPath}`)\n\n const abs = resolve(root, entry.path)\n const rootAbs = resolve(root)\n if (abs !== rootAbs && !abs.startsWith(`${rootAbs}/`)) {\n throw new Error(`Indexed doc escapes project root: ${entry.path}`)\n }\n return readFileSync(abs, 'utf8')\n}\n\nconst runAskRepl = async (root: string, config: DocBridgeConfigV1): Promise<number> => {\n const index = loadDocBridgeIndex(root, config)\n const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true })\n try {\n for (;;) {\n const line = (await rl.question('ak-docs> ')).trim()\n if (!line) continue\n if (line === 'exit' || line === 'quit') return 0\n\n const [command, ...rest] = line.split(/\\s+/)\n const value = rest.join(' ').trim()\n try {\n if (command === 'search') {\n writeTextSearch(value, searchIndex(index, value))\n } else if (command === 'read' || command === 'open') {\n process.stdout.write(`${readIndexedDoc(root, config, value).slice(0, 8000)}\\n`)\n } else if (command === 'resolve') {\n writeJson(runQuery(index, config, { kind: 'ownership', id: value, agent: true }))\n } else if (command === 'gate') {\n const gateId = value || undefined\n writeJson(runGates(root, config, gateId ? [gateId as GateId] : undefined))\n } else {\n writeAsk(line, searchIndex(index, line, 8), index)\n }\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n }\n }\n } finally {\n rl.close()\n }\n}\n\nconst wantsTextOutput = (flags: ReadonlySet<string>, config: DocBridgeConfigV1): boolean =>\n !flags.has('--agent') &&\n (flags.has('--text') || (!flags.has('--json') && config.surfaces?.cli?.defaultFormat === 'text'))\n\nconst loadProject = (configPath?: string) => {\n const loadOpts = configPath ? { explicitPath: configPath } : {}\n const { config, path } = loadConfig(loadOpts)\n parseDocBridgeConfig(config)\n const root = projectRootFromConfigPath(path, config.project?.root)\n return { config, configPath: path, root }\n}\n\nconst indexDiagnostics = (config: DocBridgeConfigV1, result: ReturnType<typeof buildDocBridgeIndex>): string[] => {\n const diagnostics: string[] = []\n const onlyDoc = result.index.knowledge.length === 1 ? result.index.knowledge[0] : undefined\n if (onlyDoc?.path === config.corpus.agent.index) {\n diagnostics.push(\n `Only the starter ${config.corpus.agent.index} was indexed.`,\n `Add agent docs under ${config.corpus.agent.root}/, then run ak-docs index again.`,\n )\n }\n const handoffCount = Object.keys(result.index.handoffs ?? {}).length\n if (handoffCount === 0) {\n diagnostics.push(\n 'No ownership handoffs yet. Add routing.options.ownership, package frontmatter (package + editRoot), or a monorepo plugin.',\n )\n }\n return diagnostics\n}\n\nconst diagnosticNextCommands = (\n config: DocBridgeConfigV1,\n result: ReturnType<typeof buildDocBridgeIndex>,\n): string[] => {\n const handoffIds = Object.keys(result.index.handoffs ?? {})\n if (handoffIds[0]) {\n return [\n `ak-docs query package ${handoffIds[0]} --agent`,\n `ak-docs list packages --text`,\n 'ak-docs mcp',\n ]\n }\n return [\n `mkdir -p ${config.corpus.agent.root}/packages`,\n `edit ${config.corpus.agent.root}/packages/<module>.md # frontmatter: package + editRoot`,\n 'ak-docs index',\n ]\n}\n\nconst writeIfMissing = (path: string, contents: string): boolean => {\n if (existsSync(path)) return false\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, contents, 'utf8')\n return true\n}\n\nconst demoOwnership = {\n example: {\n path: 'src',\n purpose: 'Starter ownership target — replace with your real modules',\n checks: ['npm test'],\n agentDoc: 'docs/for-agents/packages/example.md',\n },\n}\n\nconst initConfigObject = (withDemo: boolean) => ({\n schemaVersion: 1 as const,\n corpus: { agent: { root: 'docs/for-agents' } },\n ...(withDemo\n ? {\n routing: {\n options: {\n ownership: demoOwnership,\n },\n },\n }\n : {}),\n gates: { preset: 'minimal' as const },\n})\n\nconst initConfigContents = (path: string, withDemo: boolean): string => {\n if (path.endsWith('.ts') || path.endsWith('.mts')) {\n return [\n \"import { defineConfig } from '@agentskit/doc-bridge/config'\",\n '',\n 'export default defineConfig({',\n ' schemaVersion: 1,',\n \" corpus: { agent: { root: 'docs/for-agents' } },\",\n ...(withDemo\n ? [\n ' routing: {',\n ' options: {',\n ' ownership: {',\n \" example: { path: 'src', purpose: 'Starter ownership target', checks: ['npm test'], agentDoc: 'docs/for-agents/packages/example.md' },\",\n ' },',\n ' },',\n ' },',\n ]\n : []),\n \" gates: { preset: 'minimal' },\",\n '})',\n '',\n ].join('\\n')\n }\n\n return `${JSON.stringify(initConfigObject(withDemo), null, 2)}\\n`\n}\n\nconst exampleAgentDoc = `---\ntype: package\npackage: example\neditRoot: src\nchecks: [npm test]\n---\n\n# example\n\nStarter agent doc generated by \\`ak-docs init --demo\\`.\n\nDescribe ownership, boundaries, and how agents should change this module.\n\n## Checks\n\n- \\`npm test\\`\n`\n\nconst agentsMdSnippet = `# AGENTS.md\n\n## Documentation routing (doc-bridge)\n\nBefore editing a package or module:\n\n1. Run \\`ak-docs query ownership <id> --agent\\` (or MCP tool \\`handoff.resolve\\`)\n2. Read \\`startHere\\` and respect \\`editRoots\\` + \\`checks\\`\n3. Prefer agent docs under \\`docs/for-agents/\\`; human site links appear as \\`humanDoc\\`\n\nLocal consult without LLM: \\`ak-docs ask \"<question>\"\\`\nOptional grounded chat (AgentsKit peers): \\`ak-docs chat\\`\n`\n\nconst workspaceDocDraft = (id: string, path: string): string => [\n '---',\n 'type: package',\n 'draft: true',\n `package: ${id}`,\n `editRoot: ${path}`,\n '---',\n '',\n `# ${id}`,\n '',\n 'Draft generated by `ak-docs init --scaffold-workspaces`.',\n '',\n '## Ownership',\n '',\n `- Package: \\`${path}\\``,\n '',\n '## Notes',\n '',\n '- TODO: describe responsibility, boundaries, and checks.',\n '',\n].join('\\n')\n\nconst scaffoldWorkspaceDocs = (\n root: string,\n config: DocBridgeConfigV1,\n): { created: string[]; skipped: string[] } => {\n const created: string[] = []\n const skipped: string[] = []\n for (const pkg of discoverPnpmPackages(root, config)) {\n const path = resolve(root, config.corpus.agent.root, 'packages', `${pkg.id}.md`)\n if (writeIfMissing(path, workspaceDocDraft(pkg.id, pkg.path))) created.push(path)\n else skipped.push(path)\n }\n return { created, skipped }\n}\n\nconst bootstrapAgentDocs = (\n root: string,\n config: DocBridgeConfigV1,\n): { created: string[]; skipped: string[] } => {\n const created: string[] = []\n const skipped: string[] = []\n for (const doc of scanHumanDocRecords(root, config)) {\n const raw = readFileSync(doc.path, 'utf8')\n const body = raw.replace(/^---\\n[\\s\\S]*?\\n---\\n?/, '')\n const title = firstHeading(body) ?? doc.id\n const description = firstParagraph(body)\n const draftPath = resolve(root, config.corpus.agent.root, 'human', `${doc.id}.md`)\n const draft = [\n '---',\n 'type: knowledge',\n 'draft: true',\n `id: ${doc.id}`,\n `humanDoc: ${doc.url}`,\n '---',\n '',\n `# ${title}`,\n '',\n 'Draft generated by `ak-docs bootstrap agent-docs` from existing human docs.',\n '',\n ...(description ? ['## Source summary', '', description, ''] : []),\n '## Review checklist',\n '',\n '- TODO: confirm ownership, edit roots, and checks.',\n '- TODO: move this draft to the right agent-doc location if needed.',\n '',\n ].join('\\n')\n if (writeIfMissing(draftPath, draft)) created.push(draftPath)\n else skipped.push(draftPath)\n }\n return { created, skipped }\n}\n\nconst registryTopology = () => ({\n id: 'doc-curator',\n delegates: ['docs-chat', 'knowledge-promoter', 'code-review'],\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query'],\n steps: ['classify', 'draft', 'verify', 'review'],\n mergePolicy: { autoMerge: false, requiresHuman: true },\n})\n\nexport const runCli = (argv: readonly string[]): number | undefined | Promise<number> => {\n const { command, flags, configPath, positional } = parseArgs(argv)\n\n if (command === 'help') {\n process.stdout.write(usage)\n return 0\n }\n\n if (command === 'version') {\n process.stdout.write(`ak-docs ${PACKAGE_VERSION} (@agentskit/doc-bridge)\\n`)\n return 0\n }\n\n if (command === 'validate-config') {\n try {\n const { config, path } = loadConfig(\n configPath ? { explicitPath: configPath } : {},\n )\n parseDocBridgeConfig(config)\n writeJson({ ok: true, path, schemaVersion: config.schemaVersion })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'validate-handoff') {\n const file = positional[1]\n if (!file) {\n process.stderr.write('Missing handoff JSON file path.\\n')\n return 1\n }\n try {\n const abs = resolve(file)\n const raw = readFileSync(abs, 'utf8')\n const handoff = parseAgentHandoff(JSON.parse(raw) as unknown)\n writeJson({ ok: true, handoff })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'init') {\n const root = process.cwd()\n const withDemo = flags.has('--demo') || !flags.has('--no-demo')\n const configFile = resolve(root, configPath ?? 'doc-bridge.config.json')\n const docsIndex = resolve(root, 'docs/for-agents/INDEX.md')\n const exampleDoc = resolve(root, 'docs/for-agents/packages/example.md')\n const agentsMd = resolve(root, 'AGENTS.md')\n const configWritten = writeIfMissing(configFile, initConfigContents(configFile, withDemo))\n const indexWritten = writeIfMissing(\n docsIndex,\n withDemo\n ? '# Agent docs index\\n\\n- [example](./packages/example.md) — starter ownership target\\n'\n : '# Agent docs index\\n\\nStart here for ownership, architecture, and task handoffs.\\n',\n )\n const exampleWritten = withDemo ? writeIfMissing(exampleDoc, exampleAgentDoc) : false\n const agentsWritten = writeIfMissing(agentsMd, agentsMdSnippet)\n if (withDemo) writeIfMissing(resolve(root, 'src/.gitkeep'), '')\n const scaffold = flags.has('--scaffold-workspaces')\n ? scaffoldWorkspaceDocs(root, loadProject(configFile).config)\n : undefined\n writeJson({\n ok: true,\n configPath: configFile,\n demo: withDemo,\n created: {\n config: configWritten,\n index: indexWritten,\n ...(withDemo ? { exampleDoc: exampleWritten, srcStub: true } : {}),\n agentsMd: agentsWritten,\n ...(scaffold ? { workspaceDocs: scaffold.created } : {}),\n },\n ...(scaffold ? { skipped: { workspaceDocs: scaffold.skipped } } : {}),\n nextCommands: withDemo\n ? ['ak-docs index', 'ak-docs query package example --agent', 'ak-docs list packages --text']\n : ['ak-docs index', 'ak-docs list knowledge --text'],\n })\n return 0\n }\n\n if (command === 'bootstrap') {\n if (positional[1] !== 'agent-docs') {\n process.stderr.write('Usage: ak-docs bootstrap agent-docs [--config <path>]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const result = bootstrapAgentDocs(root, config)\n writeJson({ ok: true, ...result })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'memory') {\n if (!['ingest', 'classify', 'promote'].includes(positional[1] ?? '')) {\n process.stderr.write('Usage: ak-docs memory <ingest|classify|promote> [--config <path>]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const candidates = ingestMemoryCandidates(root)\n if (positional[1] === 'ingest') {\n writeJson({ ok: true, count: candidates.length, candidates })\n return 0\n }\n const index = loadDocBridgeIndex(root, config)\n const classifications = classifyMemoryCandidates(candidates, index)\n if (positional[1] === 'classify') {\n writeJson({ ok: true, count: classifications.length, classifications })\n return 0\n }\n const draft = draftMemoryPromotion(classifications)\n writeJson(draft)\n return draft.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'registry') {\n if (positional[1] !== 'topology') {\n process.stderr.write('Usage: ak-docs registry topology\\n')\n return 1\n }\n writeJson(registryTopology())\n return 0\n }\n\n if (command === 'playbook') {\n if (positional[1] !== 'draft') {\n process.stderr.write('Usage: ak-docs playbook draft [--config <path>]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const draft = draftMemoryPromotion(classifyMemoryCandidates(ingestMemoryCandidates(root), index))\n writeJson({\n ...draft,\n title: 'Draft Playbook feedback promotion',\n pattern: 'Doc Bridge Pattern',\n })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'index') {\n try {\n const { config, root } = loadProject(configPath)\n const result = buildDocBridgeIndex({ root, config })\n const diagnostics = indexDiagnostics(config, result)\n const handoffCount = Object.keys(result.index.handoffs ?? {}).length\n writeJson({\n ok: true,\n indexPath: result.indexPath,\n ...(result.llmsTxtPath ? { llmsTxtPath: result.llmsTxtPath } : {}),\n ...(result.capabilitiesPath ? { capabilitiesPath: result.capabilitiesPath } : {}),\n contentHash: result.index.contentHash,\n knowledgeCount: result.index.knowledge.length,\n packageCount: result.index.lookup?.packages.length ?? 0,\n handoffCount,\n ...(diagnostics.length ? { diagnostics } : {}),\n nextCommands: diagnosticNextCommands(config, result),\n })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'gate') {\n const action = positional[1]\n const gateId = positional[2] as GateId | undefined\n if (action !== 'run') {\n process.stderr.write('Usage: ak-docs gate run [index-freshness]\\n')\n return 1\n }\n if (gateId && !GATE_IDS.has(gateId)) {\n process.stderr.write(\n `Unsupported gate \"${gateId}\". Supported gates: index-freshness, human-guide-links, okf-type, docs-style\\n`,\n )\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const result = runGates(root, config, gateId ? [gateId] : undefined)\n writeJson(result)\n return result.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'mcp') {\n try {\n const { config, root } = loadProject(configPath)\n startMcpStdioServer({ root, config })\n return undefined\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'query') {\n const kind = positional[1] as QueryKind | undefined\n const id = positional[2]\n if (!kind || !QUERY_KINDS.has(kind) || kind === 'search') {\n process.stderr.write('Usage: ak-docs query <package|ownership|intent|change> <id> [--agent]\\n')\n return 1\n }\n if (!id) {\n process.stderr.write(`Missing id for query kind \"${kind}\".\\n`)\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const result = runQuery(index, config, { kind, id, agent: flags.has('--agent') })\n if (wantsTextOutput(flags, config)) writeTextQuery(result)\n else writeJson(result)\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'search') {\n const term = positional.slice(1).join(' ').trim()\n if (!term) {\n process.stderr.write('Usage: ak-docs search <term> [--agent]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n if (flags.has('--agent')) {\n const result = runQuery(index, config, { kind: 'search', term, agent: true })\n writeJson(result)\n } else {\n const matches = searchIndex(index, term)\n if (wantsTextOutput(flags, config)) writeTextSearch(term, matches)\n else writeJson({ term, count: matches.length, matches })\n }\n return 0\n } catch (error) {\n if (error instanceof IndexNotFoundError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'retrieve') {\n const query = positional.slice(1).join(' ').trim()\n if (!query) {\n process.stderr.write('Usage: ak-docs retrieve <query> [--config <path>]\\n')\n return 1\n }\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n writeJson({ query, chunks: await retrieveHybridChunks(root, config, index, query) })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'rag') {\n const action = positional[1]\n if (action !== 'ingest' && action !== 'search') {\n process.stderr.write('Usage: ak-docs rag ingest | ak-docs rag search <query>\\n')\n return 1\n }\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const rag = await createDocBridgeRag(root, config, index)\n if (action === 'ingest') {\n const result = await rag.ingest()\n writeJson({ ok: true, ...result })\n return 0\n }\n const query = positional.slice(2).join(' ').trim()\n if (!query) {\n process.stderr.write('Usage: ak-docs rag search <query>\\n')\n return 1\n }\n const hits = await rag.search(query)\n writeJson({ query, count: hits.length, hits })\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'chat') {\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n if (!config.intelligence?.enabled || !config.intelligence.adapter) {\n process.stderr.write(\n 'Chat requires intelligence.enabled and intelligence.adapter in doc-bridge config.\\n' +\n `Layer 1 peers: ${layer1InstallHint()}\\n`,\n )\n return 1\n }\n const index = loadDocBridgeIndex(root, config)\n await startInkChat(root, config, index)\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'ask') {\n const question = positional.slice(1).join(' ').trim()\n try {\n const { config, root } = loadProject(configPath)\n if (flags.has('--chat')) {\n if (!config.intelligence?.enabled || !config.intelligence.adapter) {\n process.stderr.write(\n 'Chat mode requires intelligence.enabled and intelligence.adapter in doc-bridge config.\\n' +\n `Install peers: ${layer1InstallHint()}\\n`,\n )\n return 1\n }\n if (!question) {\n process.stderr.write('Usage: ak-docs ask <question> --chat\\n')\n return 1\n }\n return (async () => {\n try {\n const index = loadDocBridgeIndex(root, config)\n const result = await runChatOnce(root, config, index, question)\n writeLines([result.content])\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n if (!question) {\n if (process.stdin.isTTY) return runAskRepl(root, config)\n process.stderr.write('Usage: ak-docs ask <question>, or run ak-docs ask in an interactive terminal.\\n')\n return 1\n }\n const index = loadDocBridgeIndex(root, config)\n writeAsk(question, searchIndex(index, question, 8), index)\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'list') {\n const kind = positional[1]\n if (!kind || !LIST_KINDS.has(kind)) {\n process.stderr.write('Usage: ak-docs list <packages|intents|changes|knowledge>\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n\n if (kind === 'packages') {\n const items = index.lookup?.packages ?? []\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n if (kind === 'intents') {\n const items = Object.keys(index.lookup?.intents ?? {})\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n if (kind === 'changes') {\n const items = Object.keys(index.lookup?.changes ?? {})\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n const items = index.knowledge.map((entry) => ({\n id: entry.id,\n title: entry.title,\n path: entry.path,\n }))\n if (wantsTextOutput(flags, config)) {\n writeLines(items.map((item) => [item.id, item.path, item.title].join('\\t')))\n } else {\n writeJson({ kind, items })\n }\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n process.stdout.write(usage)\n return 1\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, join, resolve } from 'node:path'\nimport vm from 'node:vm'\n\nimport { applyConfigDefaults } from './defaults.js'\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './schema.js'\n\nconst CONFIG_CANDIDATES = [\n 'doc-bridge.config.ts',\n 'doc-bridge.config.mts',\n 'doc-bridge.config.js',\n 'doc-bridge.config.mjs',\n 'doc-bridge.config.json',\n 'doc-bridge.config.yaml',\n 'doc-bridge.config.yml',\n 'package.json',\n] as const\n\nexport type LoadConfigOptions = {\n readonly cwd?: string\n readonly explicitPath?: string\n}\n\nexport type LoadConfigResult = {\n readonly config: DocBridgeConfigV1\n readonly path: string\n}\n\nexport class ConfigNotFoundError extends Error {\n constructor(readonly cwd: string) {\n super(\n `No doc-bridge config found in ${cwd}. Run: ak-docs init — or pass --config <path>.`,\n )\n this.name = 'ConfigNotFoundError'\n }\n}\n\nconst findConfigPath = (cwd: string, explicitPath?: string): string | null => {\n if (explicitPath) {\n const abs = resolve(cwd, explicitPath)\n return existsSync(abs) ? abs : null\n }\n for (const name of CONFIG_CANDIDATES) {\n const candidate = join(cwd, name)\n if (!existsSync(candidate)) continue\n if (name !== 'package.json') return candidate\n const pkg = parseJsonConfig(readFileSync(candidate, 'utf8'), candidate) as { docBridge?: unknown }\n if (pkg.docBridge) return candidate\n }\n return null\n}\n\nconst parseJsonConfig = (raw: string, path: string): unknown => {\n try {\n return JSON.parse(raw) as unknown\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to parse JSON config at ${path}: ${message}`)\n }\n}\n\nconst parseCodeConfig = (raw: string, path: string): unknown => {\n const code = raw\n .replace(/import\\s+type\\s+[\\s\\S]*?;?\\n/g, '')\n .replace(/import\\s+\\{\\s*defineConfig\\s*\\}\\s+from\\s+['\"]@agentskit\\/doc-bridge(?:\\/config)?['\"];?\\n?/g, '')\n .replace(/\\s+satisfies\\s+[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*(?:;|\\)|$))/g, '')\n .replace(/export\\s+default/, 'module.exports.default =')\n\n if (/\\bimport\\b/.test(code)) {\n throw new Error(`Unsupported import in ${path}. Static config only supports defineConfig imports.`)\n }\n\n const sandbox = {\n module: { exports: {} as { default?: unknown } },\n exports: {},\n defineConfig: (config: unknown) => config,\n }\n try {\n vm.runInNewContext(code, sandbox, { timeout: 250, filename: path })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to load config at ${path}: ${message}`)\n }\n return sandbox.module.exports.default\n}\n\nconst parseConfig = (input: unknown): DocBridgeConfigV1 => {\n const result = DocBridgeConfigV1Schema.safeParse(input)\n if (result.success) return result.data\n throw new Error(\n `Invalid doc-bridge config:\\n${result.error.issues.map((issue) =>\n ` - ${issue.path.join('.') || '(root)'}: ${issue.message}`,\n ).join('\\n')}`,\n )\n}\n\n/** v0.1 — static JS/TS config, JSON config files, and package.json#docBridge. */\nexport const loadConfig = (opts: LoadConfigOptions = {}): LoadConfigResult => {\n const cwd = resolve(opts.cwd ?? process.cwd())\n const path = findConfigPath(cwd, opts.explicitPath)\n if (!path) throw new ConfigNotFoundError(cwd)\n\n const raw = readFileSync(path, 'utf8')\n const ext = path.split('.').pop()?.toLowerCase()\n if (ext === 'yaml' || ext === 'yml') {\n throw new Error(`YAML config is not supported yet (${path}). Use doc-bridge.config.json for now.`)\n }\n\n const parsed =\n basename(path) === 'package.json'\n ? (parseJsonConfig(raw, path) as { docBridge?: unknown }).docBridge\n : ext === 'ts' || ext === 'mts' || ext === 'js' || ext === 'mjs'\n ? parseCodeConfig(raw, path)\n : parseJsonConfig(raw, path)\n const config = applyConfigDefaults(parseConfig(parsed))\n return { config, path }\n}\n\nexport const resolveProjectRoot = (start = process.cwd()): string => {\n let cur = resolve(start)\n for (let i = 0; i < 12; i += 1) {\n if (findConfigPath(cur)) return cur\n const parent = dirname(cur)\n if (parent === cur) break\n cur = parent\n }\n return resolve(start)\n}\n\n/** Project root for a loaded config file path (directory of the config). */\nexport const projectRootFromConfigPath = (\n configFilePath: string,\n projectRootField?: string,\n): string => {\n const configDir = dirname(resolve(configFilePath))\n if (projectRootField) return resolve(configDir, projectRootField)\n return configDir\n}\n","import type { DocBridgeConfigV1 } from './schema.js'\n\nconst DEFAULT_AGENT_EXCLUDE = ['**/node_modules/**', '**/.git/**'] as const\n\nexport const applyConfigDefaults = (config: DocBridgeConfigV1): DocBridgeConfigV1 => {\n const agentRoot = config.corpus.agent.root\n const agentIndex = config.corpus.agent.index ?? `${agentRoot}/INDEX.md`\n\n return {\n ...config,\n corpus: {\n ...config.corpus,\n agent: {\n ...config.corpus.agent,\n index: agentIndex,\n include: config.corpus.agent.include ?? ['**/*.{md,mdx}'],\n exclude: config.corpus.agent.exclude ?? [...DEFAULT_AGENT_EXCLUDE],\n },\n },\n index: {\n outFile: '.doc-bridge/index.json',\n contentHash: 'sha256-normalized-v1',\n llmsTxt: {\n enabled: true,\n outFile: 'llms.txt',\n ...config.index?.llmsTxt,\n },\n capabilities: {\n enabled: true,\n outFile: '.doc-bridge/capabilities.json',\n ...config.index?.capabilities,\n },\n ...config.index,\n },\n gates: {\n preset: 'minimal',\n ...config.gates,\n },\n surfaces: {\n cli: {\n bin: 'ak-docs',\n defaultFormat: 'json',\n ...config.surfaces?.cli,\n },\n mcp: {\n enabled: true,\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status'],\n transport: 'stdio',\n ...config.surfaces?.mcp,\n },\n ...config.surfaces,\n },\n intelligence: config.intelligence\n ? {\n enabled: false,\n ...config.intelligence,\n chat: config.intelligence.chat\n ? { handoffFirst: true, ...config.intelligence.chat }\n : undefined,\n }\n : { enabled: false },\n }\n}\n","import { z } from 'zod'\n\nexport const CONFIG_SCHEMA_VERSION = 1 as const\n\nexport const HumanCorpusPluginIdSchema = z.enum([\n 'plain-markdown',\n 'fumadocs',\n 'docusaurus',\n 'mkdocs',\n 'vitepress',\n 'custom',\n])\n\nexport const AgentCorpusConfigSchema = z\n .object({\n root: z.string().min(1).max(512),\n index: z.string().min(1).max(512).optional(),\n include: z.array(z.string().min(1).max(256)).max(64).optional(),\n exclude: z.array(z.string().min(1).max(256)).max(64).optional(),\n okf: z\n .object({\n requireType: z.boolean().optional(),\n allowedTypes: z.array(z.string().min(1).max(128)).max(64).optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const HumanCorpusConfigSchema = z\n .object({\n plugin: HumanCorpusPluginIdSchema,\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const IndexConfigSchema = z\n .object({\n outFile: z.string().min(1).max(512).optional(),\n llmsTxt: z\n .object({\n enabled: z.boolean().optional(),\n outFile: z.string().min(1).max(512).optional(),\n preamble: z.string().max(4_000).optional(),\n })\n .strict()\n .optional(),\n capabilities: z\n .object({\n enabled: z.boolean().optional(),\n outFile: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n contentHash: z.literal('sha256-normalized-v1').optional(),\n })\n .strict()\n\nexport const OwnershipEntrySchema = z\n .object({\n path: z.string().min(1).max(512),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n purpose: z.string().max(1024).optional(),\n checks: z.array(z.string().min(1).max(256)).max(32).optional(),\n agentDoc: z.string().min(1).max(512).optional(),\n humanDoc: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const RoutingConfigSchema = z\n .object({\n plugin: z\n .enum(['pnpm-monorepo', 'npm-workspaces', 'yarn-workspaces', 'pattern-files', 'custom'])\n .optional(),\n options: z\n .object({\n packages: z.array(z.string().min(1).max(256)).max(128).optional(),\n /** Infer ownership from corpus paths/frontmatter (default true). */\n ownershipFromCorpus: z.boolean().optional(),\n ownership: z.record(z.string().min(1).max(256), OwnershipEntrySchema).optional(),\n intents: z\n .array(\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n paths: z.array(z.string().min(1).max(512)).max(32),\n })\n .strict(),\n )\n .max(128)\n .optional(),\n changes: z\n .array(\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n startHere: z.string().min(1).max(512),\n relatedPackages: z.array(z.string().min(1).max(256)).max(32).optional(),\n })\n .strict(),\n )\n .max(128)\n .optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const GatesConfigSchema = z\n .object({\n /** minimal: freshness · standard: + human links · strict: + okf-type · playbook: freshness + okf soft style */\n preset: z.enum(['minimal', 'standard', 'strict', 'playbook']).optional(),\n include: z\n .array(\n z.enum([\n 'index-freshness',\n 'human-guide-links',\n 'link-rot',\n 'okf-type',\n 'docs-style',\n 'routing-currency',\n 'bootstrap-size',\n ]),\n )\n .max(16)\n .optional(),\n exclude: z\n .array(\n z.enum([\n 'index-freshness',\n 'human-guide-links',\n 'link-rot',\n 'okf-type',\n 'docs-style',\n 'routing-currency',\n 'bootstrap-size',\n ]),\n )\n .max(16)\n .optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const SurfacesConfigSchema = z\n .object({\n cli: z\n .object({\n bin: z.string().min(1).max(64).optional(),\n defaultFormat: z.enum(['json', 'text']).optional(),\n })\n .strict()\n .optional(),\n mcp: z\n .object({\n enabled: z.boolean().optional(),\n tools: z\n .array(\n z.enum([\n 'handoff.resolve',\n 'doc.search',\n 'doc.get',\n 'gate.status',\n 'playbook.pattern.get',\n 'retriever.query',\n 'memory.classify',\n 'memory.promoteDraft',\n 'registry.topology',\n ]),\n )\n .max(16)\n .optional(),\n transport: z.enum(['stdio', 'http']).optional(),\n http: z\n .object({\n port: z.number().int().min(1).max(65_535).optional(),\n path: z.string().min(1).max(256).optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const IntelligenceConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n adapter: z\n .object({\n provider: z.enum(['openai', 'anthropic', 'ollama', 'openrouter', 'custom']),\n model: z.string().min(1).max(128).optional(),\n apiKeyEnv: z.string().min(0).max(128).optional(),\n baseUrl: z.string().url().optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n .optional(),\n chat: z\n .object({\n enabled: z.boolean().optional(),\n sources: z.array(z.enum(['agent', 'human', 'federation'])).max(8).optional(),\n handoffFirst: z.boolean().optional(),\n })\n .strict()\n .optional(),\n retriever: z\n .object({\n enabled: z.boolean().optional(),\n mode: z.enum(['local', 'remote', 'bm25', 'agentskit-rag']).optional(),\n embedModel: z.string().min(1).max(128).optional(),\n chunkSize: z.number().int().min(128).max(16_384).optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n .optional(),\n memory: z\n .object({\n enabled: z.boolean().optional(),\n adapters: z\n .array(z.enum(['playbook-memory', 'cursor-rules', 'session-export', 'bootstrap-delta']))\n .max(8)\n .optional(),\n ingestDir: z.string().min(1).max(512).optional(),\n classify: z.boolean().optional(),\n promote: z\n .object({\n enabled: z.boolean().optional(),\n targets: z.array(z.enum(['agent', 'human', 'agents-md'])).max(8).optional(),\n requireApproval: z.boolean().optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .optional(),\n runtime: z.enum(['agentskit', 'custom']).optional(),\n runtimeModule: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const FederationConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n sources: z\n .array(\n z\n .object({\n id: z.string().min(1).max(64),\n llmsTxt: z.string().min(1).max(512).optional(),\n rawBaseUrl: z.string().url().optional(),\n includeInRetriever: z.boolean().optional(),\n includeInChat: z.boolean().optional(),\n })\n .strict(),\n )\n .max(16)\n .optional(),\n })\n .strict()\n\nexport const DocBridgeConfigV1Schema = z\n .object({\n schemaVersion: z.literal(CONFIG_SCHEMA_VERSION),\n project: z\n .object({\n name: z.string().min(1).max(128).optional(),\n root: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n corpus: z\n .object({\n agent: AgentCorpusConfigSchema,\n human: z.union([HumanCorpusConfigSchema, z.array(HumanCorpusConfigSchema).max(8)]).optional(),\n })\n .strict(),\n index: IndexConfigSchema.optional(),\n routing: RoutingConfigSchema.optional(),\n gates: GatesConfigSchema.optional(),\n surfaces: SurfacesConfigSchema.optional(),\n intelligence: IntelligenceConfigSchema.optional(),\n federation: FederationConfigSchema.optional(),\n })\n .strict()\n\nexport type DocBridgeConfigV1 = z.infer<typeof DocBridgeConfigV1Schema>\nexport type AgentCorpusConfig = z.infer<typeof AgentCorpusConfigSchema>\nexport type HumanCorpusConfig = z.infer<typeof HumanCorpusConfigSchema>\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { toPosix } from '../lib/paths.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { buildLookup, collectPackages } from './build-handoffs.js'\nimport { renderCapabilitiesJson } from './capabilities.js'\nimport { sha256NormalizedV1 } from './content-hash.js'\nimport { renderLlmsTxt } from './llms-txt.js'\nimport { scanHumanDocs } from './human-adapters/index.js'\nimport { discoverPnpmPackages } from './plugins/pnpm-monorepo.js'\nimport { scanAgentCorpus } from './scan-corpus.js'\n\nexport type BuildIndexOptions = {\n readonly root?: string\n readonly config: DocBridgeConfigV1\n readonly write?: boolean\n}\n\nexport type BuildIndexResult = {\n readonly index: DocBridgeIndexV1\n readonly indexPath: string\n readonly llmsTxtPath?: string\n readonly capabilitiesPath?: string\n}\n\nconst projectName = (root: string, config: DocBridgeConfigV1): string => {\n if (config.project?.name) return config.project.name\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as { name?: string }\n if (pkg.name) return pkg.name\n } catch {\n // ignore\n }\n return toPosix(root.split('/').pop() ?? 'project')\n}\n\nconst existingGeneratedAt = (indexPath: string, contentHash: string): string | undefined => {\n try {\n const index = JSON.parse(readFileSync(indexPath, 'utf8')) as {\n contentHash?: unknown\n generatedAt?: unknown\n }\n return index.contentHash === contentHash && typeof index.generatedAt === 'string'\n ? index.generatedAt\n : undefined\n } catch {\n return undefined\n }\n}\n\nexport const buildDocBridgeIndex = (opts: BuildIndexOptions): BuildIndexResult => {\n const root = opts.root ?? process.cwd()\n const config = opts.config\n const write = opts.write ?? true\n const outFile = config.index?.outFile ?? '.doc-bridge/index.json'\n const indexPath = join(root, outFile)\n\n const corpus = scanAgentCorpus(root, config)\n const knowledge = corpus.map(({ absPath: _a, relPath: _r, frontmatter: _f, ...entry }) => entry)\n\n const shouldDiscover =\n config.routing?.plugin === 'pnpm-monorepo' ||\n Boolean(config.routing?.options?.packages?.length) ||\n config.routing?.plugin === 'npm-workspaces' ||\n config.routing?.plugin === 'yarn-workspaces'\n\n const discovered = shouldDiscover ? discoverPnpmPackages(root, config) : []\n const packages = collectPackages(config, discovered, corpus)\n const humanDocs = scanHumanDocs(root, config)\n\n const { lookup, handoffs } = buildLookup(config, packages, corpus, outFile, humanDocs, root)\n\n const hashPayload = {\n schemaVersion: 1,\n knowledge,\n handoffs,\n lookup,\n }\n\n const contentHash = sha256NormalizedV1(hashPayload)\n const index: DocBridgeIndexV1 = {\n schemaVersion: 1,\n contentHash,\n contentHashAlgo: 'sha256-normalized-v1',\n generatedAt: existingGeneratedAt(indexPath, contentHash) ?? new Date().toISOString(),\n project: { name: projectName(root, config), root: '.' },\n knowledge,\n handoffs,\n lookup,\n }\n\n if (write) {\n mkdirSync(dirname(indexPath), { recursive: true })\n writeFileSync(indexPath, `${JSON.stringify(index, null, 2)}\\n`, 'utf8')\n }\n\n let llmsTxtPath: string | undefined\n let llmsTxtRelPath: string | undefined\n if (config.index?.llmsTxt?.enabled !== false) {\n const llmsOut = config.index?.llmsTxt?.outFile ?? 'llms.txt'\n llmsTxtRelPath = toPosix(llmsOut)\n llmsTxtPath = join(root, llmsOut)\n if (write) {\n writeFileSync(\n llmsTxtPath,\n renderLlmsTxt(config, knowledge, index.project?.name ?? 'project'),\n 'utf8',\n )\n }\n }\n\n let capabilitiesPath: string | undefined\n if (config.index?.capabilities?.enabled !== false) {\n const capabilitiesOut = config.index?.capabilities?.outFile ?? '.doc-bridge/capabilities.json'\n capabilitiesPath = join(root, capabilitiesOut)\n if (write) {\n mkdirSync(dirname(capabilitiesPath), { recursive: true })\n writeFileSync(\n capabilitiesPath,\n renderCapabilitiesJson(config, index, {\n index: toPosix(outFile),\n ...(llmsTxtRelPath ? { llmsTxt: llmsTxtRelPath } : {}),\n }),\n 'utf8',\n )\n }\n }\n\n return {\n index,\n indexPath: toPosix(indexPath),\n ...(llmsTxtPath ? { llmsTxtPath: toPosix(llmsTxtPath) } : {}),\n ...(capabilitiesPath ? { capabilitiesPath: toPosix(capabilitiesPath) } : {}),\n }\n}\n","import { resolve } from 'node:path'\n\nexport const toPosix = (value: string): string => value.split('\\\\').join('/')\n\nexport const resolveFromRoot = (root: string, rel: string): string =>\n resolve(root, rel)","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun'\n\nexport const detectPackageManager = (root: string): PackageManager => {\n if (existsSync(join(root, 'pnpm-lock.yaml')) || existsSync(join(root, 'pnpm-workspace.yaml'))) {\n return 'pnpm'\n }\n if (existsSync(join(root, 'yarn.lock'))) return 'yarn'\n if (existsSync(join(root, 'bun.lockb')) || existsSync(join(root, 'bun.lock'))) return 'bun'\n if (existsSync(join(root, 'package-lock.json'))) return 'npm'\n\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n packageManager?: string\n }\n const pm = pkg.packageManager?.split('@')[0]\n if (pm === 'pnpm' || pm === 'npm' || pm === 'yarn' || pm === 'bun') return pm\n } catch {\n // ignore\n }\n\n return 'npm'\n}\n\nexport const defaultChecksForTarget = (\n root: string,\n opts: {\n readonly packageId: string\n readonly packagePath: string\n readonly packageName?: string\n readonly strict?: boolean\n },\n): string[] => {\n const pm = detectPackageManager(root)\n\n // Pattern / markdown ownership targets (playbook, etc.) — project-level scripts\n if (/\\.mdx?$/.test(opts.packagePath) || opts.packagePath.includes('/pillars/')) {\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n scripts?: Record<string, string>\n }\n const scripts = pkg.scripts ?? {}\n if (scripts['check:okf-type']) return ['pnpm run check:okf-type']\n if (scripts['docs:bridge:gate']) return ['pnpm run docs:bridge:gate']\n if (scripts.test) return [pm === 'pnpm' ? 'pnpm test' : 'npm test']\n } catch {\n // fall through\n }\n }\n\n const isWorkspace =\n existsSync(join(root, 'pnpm-workspace.yaml')) ||\n existsSync(join(root, 'lerna.json')) ||\n Boolean(\n (() => {\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n workspaces?: unknown\n }\n return Boolean(pkg.workspaces)\n } catch {\n return false\n }\n })(),\n )\n\n const filter =\n opts.packageName ??\n (opts.packagePath.startsWith('packages/') || opts.packagePath.startsWith('apps/')\n ? opts.packageId\n : undefined)\n\n if (pm === 'pnpm') {\n if (isWorkspace && filter) {\n const base = [`pnpm --filter ${filter} test`]\n if (opts.strict) base.push(`pnpm --filter ${filter} lint`)\n return base\n }\n return opts.strict ? ['pnpm test', 'pnpm run lint'] : ['pnpm test']\n }\n\n if (pm === 'yarn') {\n if (isWorkspace && filter) {\n return opts.strict\n ? [`yarn workspace ${filter} test`, `yarn workspace ${filter} lint`]\n : [`yarn workspace ${filter} test`]\n }\n return opts.strict ? ['yarn test', 'yarn lint'] : ['yarn test']\n }\n\n if (pm === 'bun') {\n return opts.strict ? ['bun test', 'bun run lint'] : ['bun test']\n }\n\n // npm\n if (isWorkspace && filter) {\n return opts.strict\n ? [`npm test -w ${filter}`, `npm run lint -w ${filter}`]\n : [`npm test -w ${filter}`]\n }\n return opts.strict ? ['npm test', 'npm run lint'] : ['npm test']\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n firstHeading,\n firstParagraph,\n frontmatterString,\n frontmatterStringList,\n parseFrontmatter,\n slugFromPath,\n type FrontmatterData,\n} from '../lib/markdown.js'\nimport { toPosix } from '../lib/paths.js'\nimport { walkFiles } from '../lib/walk.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nexport type CorpusDoc = KnowledgeEntry & {\n readonly absPath: string\n readonly relPath: string\n readonly frontmatter: FrontmatterData\n}\n\nexport type OwnershipSeed = {\n readonly id: string\n readonly path: string\n readonly purpose?: string\n readonly checks?: readonly string[]\n readonly agentDoc: string\n readonly humanDoc?: string\n}\n\nconst relFromRoot = (root: string, abs: string): string => toPosix(abs.replace(`${toPosix(root)}/`, ''))\n\nexport const scanAgentCorpus = (root: string, config: DocBridgeConfigV1): CorpusDoc[] => {\n const agentRoot = join(root, config.corpus.agent.root)\n const files = walkFiles(agentRoot, { extensions: ['.md', '.mdx'] })\n const corpusRelRoot = toPosix(config.corpus.agent.root)\n\n return files.map((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n const relPath = `${corpusRelRoot}/${relToCorpus}`\n const raw = readFileSync(abs, 'utf8')\n const { data: frontmatter } = parseFrontmatter(raw)\n const id =\n frontmatterString(frontmatter, 'id') ??\n frontmatterString(frontmatter, 'package') ??\n slugFromPath(relToCorpus)\n const title = firstHeading(raw) ?? id\n const description = firstParagraph(raw)\n return {\n id,\n type: 'agent-doc',\n title,\n path: relPath,\n absPath: abs,\n relPath,\n frontmatter,\n ...(description ? { description } : {}),\n }\n })\n}\n\nexport const guessAgentDocForPackage = (\n corpus: readonly CorpusDoc[],\n packageId: string,\n): string | undefined => {\n const candidates = [\n (doc: CorpusDoc) => frontmatterString(doc.frontmatter, 'package') === packageId,\n (doc: CorpusDoc) => doc.id === packageId,\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}.mdx`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}/index.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}/index.mdx`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/${packageId}.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/${packageId}.mdx`),\n (doc: CorpusDoc) => doc.relPath.includes(`/packages/${packageId}/`),\n ]\n for (const match of candidates) {\n const hit = corpus.find(match)\n if (hit) return hit.path\n }\n return undefined\n}\n\n/** Ownership seeds from agent-doc frontmatter (`package` + `editRoot`). */\nexport const ownershipFromFrontmatter = (corpus: readonly CorpusDoc[]): readonly OwnershipSeed[] => {\n const out: OwnershipSeed[] = []\n\n for (const doc of corpus) {\n const type = frontmatterString(doc.frontmatter, 'type')\n const id =\n frontmatterString(doc.frontmatter, 'package') ??\n (type === 'package' || type === 'module' || type === 'pattern'\n ? frontmatterString(doc.frontmatter, 'id') ?? doc.id\n : undefined)\n const path =\n frontmatterString(doc.frontmatter, 'editRoot') ??\n frontmatterString(doc.frontmatter, 'path') ??\n (type === 'package' || type === 'module' ? `packages/${id}` : undefined)\n if (!id || !path) continue\n const purpose = frontmatterString(doc.frontmatter, 'purpose') ?? doc.description\n const checks = frontmatterStringList(doc.frontmatter, 'checks')\n const humanDoc = frontmatterString(doc.frontmatter, 'humanDoc')\n out.push({\n id,\n path,\n agentDoc: doc.path,\n ...(purpose ? { purpose } : {}),\n ...(checks ? { checks } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n })\n }\n\n return out\n}\n\n/**\n * Path-based ownership when frontmatter is incomplete:\n * - packages/id.md(x) → package path packages/id\n * - pillars/.../name-pattern.md → pattern ownership (edit root = file)\n * - registry/id/README.md → registry agent\n */\nexport const ownershipFromCorpus = (corpus: readonly CorpusDoc[]): readonly OwnershipSeed[] => {\n const out: OwnershipSeed[] = []\n const seen = new Set<string>()\n\n for (const doc of corpus) {\n // already handled if package+editRoot present\n if (frontmatterString(doc.frontmatter, 'package') && frontmatterString(doc.frontmatter, 'editRoot')) {\n continue\n }\n\n let id: string | undefined\n let path: string | undefined\n let purpose = frontmatterString(doc.frontmatter, 'purpose') ?? doc.description\n\n const packagesFile = /(?:^|\\/)packages\\/([^/]+)\\.(?:md|mdx)$/.exec(doc.relPath)\n const packagesIndex = /(?:^|\\/)packages\\/([^/]+)\\/index\\.(?:md|mdx)$/.exec(doc.relPath)\n const registryReadme = /(?:^|\\/)registry\\/([^/]+)\\/README\\.(?:md|mdx)$/i.exec(doc.relPath)\n const patternFile = /(?:^|\\/)pillars\\/[^/]+\\/([^/]+(?:-pattern)?)\\.(?:md|mdx)$/.exec(doc.relPath)\n const topLevelPkg = /(?:^|\\/)for-agents\\/([^/]+)\\.(?:md|mdx)$/.exec(doc.relPath)\n\n if (packagesFile?.[1] && packagesFile[1] !== 'index') {\n id = packagesFile[1]\n path = `packages/${id}`\n } else if (packagesIndex?.[1]) {\n id = packagesIndex[1]\n path = `packages/${id}`\n } else if (registryReadme?.[1]) {\n id = registryReadme[1]\n path = `registry/${id}`\n } else if (patternFile?.[1] && patternFile[1] !== 'index' && patternFile[1] !== 'universal') {\n id = patternFile[1]\n path = doc.path\n purpose = purpose ?? `Playbook pattern: ${id}`\n } else if (topLevelPkg?.[1] && topLevelPkg[1] !== 'index' && topLevelPkg[1] !== 'INDEX') {\n // agentskit for-agents/core.mdx style\n id = topLevelPkg[1]\n path = `packages/${id}`\n }\n\n if (!id || !path || seen.has(id)) continue\n seen.add(id)\n\n const humanDoc = frontmatterString(doc.frontmatter, 'humanDoc')\n const checks = frontmatterStringList(doc.frontmatter, 'checks')\n out.push({\n id,\n path,\n agentDoc: doc.path,\n ...(purpose ? { purpose } : {}),\n ...(checks ? { checks } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n })\n }\n\n return out\n}\n\nexport { relFromRoot }\n","export type FrontmatterValue = string | boolean | readonly string[]\nexport type FrontmatterData = Record<string, FrontmatterValue>\n\nexport const parseFrontmatter = (\n markdown: string,\n): { readonly data: FrontmatterData; readonly body: string } => {\n const normalized = markdown.replace(/^\\uFEFF/, '')\n if (!normalized.startsWith('---\\n') && !normalized.startsWith('---\\r\\n')) {\n return { data: {}, body: markdown }\n }\n const endMatch = /\\r?\\n---\\r?\\n/.exec(normalized.slice(3))\n if (!endMatch || endMatch.index === undefined) {\n return { data: {}, body: markdown }\n }\n const block = normalized.slice(4, 3 + endMatch.index)\n const body = normalized.slice(3 + endMatch.index + endMatch[0].length)\n const data: Record<string, FrontmatterValue> = {}\n for (const rawLine of block.split(/\\r?\\n/)) {\n const line = rawLine.trim()\n if (!line || line.startsWith('#')) continue\n const m = /^([A-Za-z0-9_-]+):\\s*(.*)$/.exec(line)\n if (!m?.[1]) continue\n const key = m[1]\n const raw = (m[2] ?? '').trim()\n if (raw === 'true') data[key] = true\n else if (raw === 'false') data[key] = false\n else if (raw.startsWith('[') && raw.endsWith(']')) {\n data[key] = raw\n .slice(1, -1)\n .split(',')\n .map((part) => part.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean)\n } else {\n data[key] = raw.replace(/^['\"]|['\"]$/g, '')\n }\n }\n return { data, body }\n}\n\nexport const frontmatterString = (\n data: FrontmatterData,\n key: string,\n): string | undefined => {\n const value = data[key]\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nexport const frontmatterStringList = (\n data: FrontmatterData,\n key: string,\n): string[] | undefined => {\n const value = data[key]\n if (Array.isArray(value)) return value.filter((item): item is string => typeof item === 'string')\n if (typeof value === 'string' && value.length > 0) return [value]\n return undefined\n}\n\nexport const firstHeading = (markdown: string): string | undefined => {\n const { body } = parseFrontmatter(markdown)\n for (const line of body.split('\\n')) {\n const m = /^#\\s+(.+)$/.exec(line.trim())\n if (m?.[1]) return m[1].trim()\n }\n return undefined\n}\n\nexport const firstParagraph = (markdown: string): string | undefined => {\n const { body } = parseFrontmatter(markdown)\n const lines = body.split('\\n')\n const buf: string[] = []\n for (const line of lines) {\n const t = line.trim()\n if (!t) {\n if (buf.length) break\n continue\n }\n if (t.startsWith('#')) continue\n if (t.startsWith('---')) continue\n buf.push(t)\n if (buf.join(' ').length > 40) break\n }\n const text = buf.join(' ').trim()\n return text || undefined\n}\n\nexport const slugFromPath = (relPath: string): string => {\n const base = relPath.replace(/\\.mdx?$/, '')\n const parts = base.split('/')\n return parts[parts.length - 1] ?? base\n}\n","import { readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { toPosix } from './paths.js'\n\nconst DEFAULT_SKIP = new Set(['node_modules', '.git', 'dist', 'coverage', '.doc-bridge'])\n\nexport const walkFiles = (\n root: string,\n opts?: { readonly extensions?: readonly string[]; readonly skipDirs?: ReadonlySet<string> },\n): string[] => {\n const extensions = opts?.extensions ?? ['.md']\n const skip = opts?.skipDirs ?? DEFAULT_SKIP\n const out: string[] = []\n\n const visit = (dir: string) => {\n let entries: string[] = []\n try {\n entries = readdirSync(dir)\n } catch {\n return\n }\n for (const name of entries) {\n const abs = join(dir, name)\n let st\n try {\n st = statSync(abs)\n } catch {\n continue\n }\n if (st.isDirectory()) {\n if (skip.has(name)) continue\n visit(abs)\n continue\n }\n if (!st.isFile()) continue\n if (extensions.some((ext) => name.endsWith(ext))) {\n out.push(toPosix(abs))\n }\n }\n }\n\n visit(root)\n return out.sort()\n}","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { defaultChecksForTarget } from '../lib/package-manager.js'\nimport type { AgentHandoffV1 } from '../schemas/agent-handoff.js'\nimport {\n guessAgentDocForPackage,\n ownershipFromCorpus,\n ownershipFromFrontmatter,\n type CorpusDoc,\n} from './scan-corpus.js'\nimport type { DiscoveredPackage } from './plugins/pnpm-monorepo.js'\nimport type { HumanDocMap } from './plugins/human-markdown.js'\n\nexport type IndexLookup = {\n packages: string[]\n ownership: Record<string, OwnershipRecord>\n intents: Record<string, IntentRecord>\n changes: Record<string, ChangeRecord>\n}\n\nexport type OwnershipRecord = {\n id: string\n path: string\n group?: string\n layer?: string\n purpose?: string\n checks: string[]\n agentDoc?: string\n humanDoc?: string\n readme?: string\n}\n\nexport type IntentRecord = {\n id: string\n title: string\n paths: string[]\n}\n\nexport type ChangeRecord = {\n id: string\n title: string\n startHere: string\n relatedPackages?: string[]\n}\n\n/**\n * Merge package identity from:\n * 1. routing.options.ownership (explicit)\n * 2. pnpm / workspace discovery\n * 3. agent-doc frontmatter (package + editRoot)\n * 4. corpus path heuristics (packages/<id>.md, pillars patterns, etc.)\n */\nexport const collectPackages = (\n config: DocBridgeConfigV1,\n discovered: readonly DiscoveredPackage[],\n corpus: readonly CorpusDoc[],\n): DiscoveredPackage[] => {\n const byId = new Map<string, DiscoveredPackage>()\n\n for (const [id, entry] of Object.entries(config.routing?.options?.ownership ?? {})) {\n byId.set(id, { id, path: entry.path })\n }\n\n for (const pkg of discovered) {\n const existing = byId.get(pkg.id)\n if (!existing) {\n byId.set(pkg.id, pkg)\n continue\n }\n byId.set(pkg.id, {\n id: pkg.id,\n path: existing.path || pkg.path,\n ...(pkg.name ? { name: pkg.name } : existing.name ? { name: existing.name } : {}),\n })\n }\n\n const seeds = [\n ...ownershipFromFrontmatter(corpus),\n ...(config.routing?.options?.ownershipFromCorpus === false\n ? []\n : ownershipFromCorpus(corpus)),\n ]\n\n for (const seed of seeds) {\n const existing = byId.get(seed.id)\n if (!existing) {\n byId.set(seed.id, { id: seed.id, path: seed.path })\n continue\n }\n if (!existing.path) {\n byId.set(seed.id, { ...existing, path: seed.path })\n }\n }\n\n return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id))\n}\n\nconst resolveHumanDoc = (\n packageId: string,\n override?: string,\n fmHuman?: string,\n humanDocs: HumanDocMap = {},\n): string | undefined => {\n if (override) return override\n if (fmHuman) return fmHuman\n if (humanDocs[packageId]) return humanDocs[packageId]\n // common aliases: scoped package name tail, path segments\n const aliases = [\n packageId,\n packageId.replace(/^@[^/]+\\//, ''),\n packageId.replace(/^os-/, ''),\n packageId.replace(/-pattern$/, ''),\n ]\n for (const alias of aliases) {\n if (humanDocs[alias]) return humanDocs[alias]\n }\n return undefined\n}\n\nexport const buildLookup = (\n config: DocBridgeConfigV1,\n packages: readonly DiscoveredPackage[],\n corpus: readonly CorpusDoc[],\n indexOutFile: string,\n humanDocs: HumanDocMap = {},\n root = process.cwd(),\n): { lookup: IndexLookup; handoffs: Record<string, AgentHandoffV1> } => {\n const ownership: Record<string, OwnershipRecord> = {}\n const handoffs: Record<string, AgentHandoffV1> = {}\n const strict = (config.gates?.preset ?? 'minimal') !== 'minimal'\n const fmSeeds = new Map(\n [...ownershipFromFrontmatter(corpus), ...ownershipFromCorpus(corpus)].map((seed) => [\n seed.id,\n seed,\n ]),\n )\n\n for (const pkg of packages) {\n const override = config.routing?.options?.ownership?.[pkg.id]\n const fm = fmSeeds.get(pkg.id)\n const agentDoc =\n override?.agentDoc ??\n fm?.agentDoc ??\n guessAgentDocForPackage(corpus, pkg.id) ??\n config.corpus.agent.index\n const startHere = agentDoc ?? ''\n const purpose = override?.purpose ?? fm?.purpose\n const path = override?.path ?? fm?.path ?? pkg.path\n const checks = [\n ...(override?.checks ??\n fm?.checks ??\n defaultChecksForTarget(root, {\n packageId: pkg.id,\n packagePath: path,\n ...(pkg.name ? { packageName: pkg.name } : {}),\n strict,\n })),\n ]\n const humanDoc = resolveHumanDoc(pkg.id, override?.humanDoc, fm?.humanDoc, humanDocs)\n const record: OwnershipRecord = {\n id: pkg.id,\n path,\n checks,\n ...(override?.group ? { group: override.group } : {}),\n ...(override?.layer ? { layer: override.layer } : {}),\n ...(purpose ? { purpose } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n ...(agentDoc ? { agentDoc } : {}),\n }\n ownership[pkg.id] = record\n\n handoffs[pkg.id] = {\n type: 'agent-handoff',\n schemaVersion: 1,\n source: indexOutFile,\n target: {\n type: 'package',\n id: pkg.id,\n path: record.path,\n ...(record.group ? { group: record.group } : {}),\n ...(record.layer ? { layer: record.layer } : {}),\n },\n startHere,\n readBeforeEditing: [agentDoc, 'AGENTS.md'].filter((v, i, a): v is string =>\n Boolean(v) && a.indexOf(v) === i,\n ),\n editRoots: [record.path],\n checks: [...record.checks],\n ...(record.humanDoc ? { humanDoc: record.humanDoc } : {}),\n notes: record.purpose ? [record.purpose] : [],\n }\n }\n\n const intents: Record<string, IntentRecord> = {}\n for (const intent of config.routing?.options?.intents ?? []) {\n intents[intent.id] = { id: intent.id, title: intent.title, paths: intent.paths }\n }\n\n const changes: Record<string, ChangeRecord> = {}\n for (const change of config.routing?.options?.changes ?? []) {\n changes[change.id] = {\n id: change.id,\n title: change.title,\n startHere: change.startHere,\n ...(change.relatedPackages ? { relatedPackages: change.relatedPackages } : {}),\n }\n }\n\n return {\n lookup: {\n packages: packages.map((p) => p.id),\n ownership,\n intents,\n changes,\n },\n handoffs,\n }\n}\n","export const PACKAGE_VERSION = '0.1.0-alpha.2'","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\nexport const renderCapabilitiesJson = (\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n paths: { readonly index: string; readonly llmsTxt?: string },\n): string => {\n const payload = {\n schemaVersion: 1,\n type: 'doc-bridge-capabilities',\n package: '@agentskit/doc-bridge',\n version: PACKAGE_VERSION,\n project: index.project,\n contentHash: index.contentHash,\n artifacts: {\n index: paths.index,\n ...(paths.llmsTxt ? { llmsTxt: paths.llmsTxt } : {}),\n },\n capabilities: [\n 'index',\n 'query',\n 'search',\n 'agent-handoff',\n 'gates',\n ...(config.surfaces?.mcp?.enabled === false ? [] : ['mcp']),\n ...(config.corpus.human ? ['human-docs'] : []),\n ],\n surfaces: {\n cli: config.surfaces?.cli,\n mcp: config.surfaces?.mcp,\n },\n }\n\n return `${JSON.stringify(payload, null, 2)}\\n`\n}\n","import { createHash } from 'node:crypto'\n\nconst sortValue = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(sortValue)\n if (value && typeof value === 'object') {\n const record = value as Record<string, unknown>\n return Object.fromEntries(\n Object.keys(record)\n .sort()\n .map((key) => [key, sortValue(record[key])]),\n )\n }\n return value\n}\n\nexport const sha256NormalizedV1 = (payload: unknown): string => {\n const normalized = JSON.stringify(sortValue(payload))\n return createHash('sha256').update(normalized, 'utf8').digest('hex')\n}","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nexport const renderLlmsTxt = (\n config: DocBridgeConfigV1,\n knowledge: readonly KnowledgeEntry[],\n projectName: string,\n): string => {\n const preamble =\n config.index?.llmsTxt?.preamble ??\n `# ${projectName}\\n\\n> Agent-readable documentation index generated by ak-docs (@agentskit/doc-bridge).\\n`\n\n const lines = knowledge.slice(0, 500).map((entry) => {\n const desc = entry.description ? `: ${entry.description}` : ''\n return `- [${entry.title}](${entry.path})${desc}`\n })\n\n return `${preamble.trim()}\\n\\n## Knowledge\\n\\n${lines.join('\\n')}\\n`\n}","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport vm from 'node:vm'\n\nimport {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n} from './core.js'\n\ntype SidebarDocFilter = {\n readonly ids: ReadonlySet<string>\n readonly autogenDirs: readonly string[]\n readonly enabled: boolean\n}\n\nconst docusaurusFileSlug = (relPath: string): string => {\n const parts = relPath.split('/')\n const file = parts.at(-1) ?? ''\n const base = file.replace(/\\.mdx?$/, '')\n const parent = parts.at(-2)\n if (/^(index|readme)$/i.test(base) || base === parent) return parts.slice(0, -1).join('/')\n return routeSlug(relPath)\n}\n\nconst docusaurusSlug = (relPath: string, raw: string): string => {\n const slug = parseFrontmatter(raw).slug\n if (!slug) return docusaurusFileSlug(relPath)\n return slug.replace(/^\\.\\//, '').replace(/^\\//, '').replace(/\\/$/, '')\n}\n\nconst docusaurusSidebarId = (relPath: string, raw: string): string => {\n const id = parseFrontmatter(raw).id\n if (!id) return routeSlug(relPath)\n const parts = relPath.split('/').slice(0, -1)\n return [...parts, id].filter(Boolean).join('/')\n}\n\nconst docusaurusRecordId = (relPath: string, raw: string): string => {\n const frontmatter = parseFrontmatter(raw)\n return frontmatter.package ?? frontmatter.module ?? docusaurusSidebarId(relPath, raw)\n}\n\nconst sidebarsValue = (file: string): unknown => {\n if (!existsSync(file)) return undefined\n const raw = readFileSync(file, 'utf8')\n .replace(/import\\s+type\\s+[\\s\\S]*?;?\\n/g, '')\n .replace(/:\\s*[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*=)/g, '')\n .replace(/\\s+satisfies\\s+[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*(?:;|\\n|$))/g, '')\n .replace(/export\\s+default/, 'module.exports =')\n const sandbox = { module: { exports: {} as unknown }, exports: {} }\n vm.runInNewContext(raw, sandbox, { timeout: 250 })\n return sandbox.module.exports\n}\n\nconst visitSidebar = (value: unknown, filter: { ids: Set<string>; autogenDirs: string[] }): void => {\n if (typeof value === 'string') {\n filter.ids.add(value)\n return\n }\n if (Array.isArray(value)) {\n for (const item of value) visitSidebar(item, filter)\n return\n }\n if (!value || typeof value !== 'object') return\n\n const item = value as Record<string, unknown>\n if ((item.type === 'doc' || item.type === 'ref') && typeof item.id === 'string') {\n filter.ids.add(item.id)\n }\n if (item.type === 'autogenerated' && typeof item.dirName === 'string') {\n filter.autogenDirs.push(item.dirName)\n }\n if (Array.isArray(item.items)) visitSidebar(item.items, filter)\n if (item.link && typeof item.link === 'object') visitSidebar(item.link, filter)\n for (const child of Object.values(item)) {\n if (Array.isArray(child)) visitSidebar(child, filter)\n }\n}\n\nconst readSidebars = (root: string, sidebarsFile: string | undefined): SidebarDocFilter => {\n if (!sidebarsFile) return { enabled: false, ids: new Set(), autogenDirs: [] }\n const value = sidebarsValue(join(root, sidebarsFile))\n const filter = { ids: new Set<string>(), autogenDirs: [] as string[] }\n visitSidebar(value, filter)\n return { enabled: true, ...filter }\n}\n\nconst isIncludedBySidebar = (filter: SidebarDocFilter, id: string): boolean => {\n if (!filter.enabled) return true\n if (filter.ids.has(id)) return true\n return filter.autogenDirs.some((dir) => {\n const prefix = dir === '.' ? '' : dir.replace(/\\/$/, '')\n return prefix ? id === prefix || id.startsWith(`${prefix}/`) : true\n })\n}\n\nexport const docusaurusAdapter: HumanAdapter = {\n plugin: 'docusaurus',\n scan: ({ root, config }) => {\n const docsDir = optionString(config.options, ['docsDir', 'root'])\n if (!docsDir) return []\n const sidebarFilter = readSidebars(root, optionString(config.options, ['sidebarsFile']))\n return scanMarkdownDocs(root, docsDir, {\n includeRelPath: (relPath, raw) => isIncludedBySidebar(sidebarFilter, docusaurusSidebarId(relPath, raw)),\n idForDoc: docusaurusRecordId,\n slugForDoc: docusaurusSlug,\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { HumanCorpusConfig } from '../../config/schema.js'\nimport { slugFromPath } from '../../lib/markdown.js'\nimport { toPosix } from '../../lib/paths.js'\nimport { walkFiles } from '../../lib/walk.js'\n\nexport type HumanDocRecord = {\n readonly id: string\n readonly url: string\n readonly path: string\n}\n\nexport type HumanDocMap = Record<string, string>\n\nexport type HumanAdapterContext = {\n readonly root: string\n readonly config: HumanCorpusConfig\n}\n\nexport type HumanAdapter = {\n readonly plugin: HumanCorpusConfig['plugin']\n readonly scan: (ctx: HumanAdapterContext) => HumanDocRecord[]\n}\n\nexport const optionString = (\n options: Record<string, unknown> | undefined,\n keys: readonly string[],\n): string | undefined => {\n for (const key of keys) {\n const value = options?.[key]\n if (typeof value === 'string' && value) return value\n }\n return undefined\n}\n\nexport const parseFrontmatter = (raw: string): Record<string, string> => {\n if (!raw.startsWith('---\\n')) return {}\n const end = raw.indexOf('\\n---', 4)\n if (end === -1) return {}\n\n const out: Record<string, string> = {}\n for (const line of raw.slice(4, end).split('\\n')) {\n const match = /^([A-Za-z0-9_-]+):\\s*(.+?)\\s*$/.exec(line)\n if (match?.[1] && match[2]) out[match[1]] = match[2].replace(/^['\"]|['\"]$/g, '')\n }\n return out\n}\n\nexport const docId = (relToHumanRoot: string, raw: string): string => {\n const meta = parseFrontmatter(raw)\n return meta.package ?? meta.module ?? meta.id ?? slugFromPath(relToHumanRoot)\n}\n\nexport const routeSlug = (relToHumanRoot: string, opts?: { stripGroups?: boolean }): string =>\n relToHumanRoot\n .split('/')\n .filter((part) => !opts?.stripGroups || !/^\\(.+\\)$/.test(part))\n .join('/')\n .replace(/(?:^|\\/)index\\.mdx?$/, '')\n .replace(/\\.mdx?$/, '')\n\nexport const humanUrl = (slug: string, urlPrefix: unknown): string => {\n if (typeof urlPrefix !== 'string' || !urlPrefix) return slug\n const prefix = urlPrefix.replace(/\\/$/, '')\n return slug ? `${prefix}/${slug.replace(/^\\//, '')}` : prefix\n}\n\nexport const scanMarkdownDocs = (\n root: string,\n humanRoot: string,\n options?: {\n readonly includeRelPath?: (relToHumanRoot: string, raw: string) => boolean\n readonly idForDoc?: (relToHumanRoot: string, raw: string) => string\n readonly slugForDoc?: (relToHumanRoot: string, raw: string) => string\n readonly urlPrefix?: unknown\n readonly stripGroups?: boolean\n },\n): HumanDocRecord[] => {\n const out: HumanDocRecord[] = []\n const absRoot = join(root, humanRoot)\n\n for (const abs of walkFiles(absRoot, { extensions: ['.md', '.mdx'] })) {\n const relToHumanRoot = toPosix(abs.replace(`${toPosix(absRoot)}/`, ''))\n const raw = readFileSync(abs, 'utf8')\n if (options?.includeRelPath && !options.includeRelPath(relToHumanRoot, raw)) continue\n out.push({\n id: options?.idForDoc?.(relToHumanRoot, raw) ?? docId(relToHumanRoot, raw),\n url: humanUrl(\n options?.slugForDoc?.(relToHumanRoot, raw) ??\n routeSlug(relToHumanRoot, options?.stripGroups ? { stripGroups: true } : undefined),\n options?.urlPrefix,\n ),\n path: abs,\n })\n }\n\n return out\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\n\nimport { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\ntype FumadocsMeta = {\n readonly pages?: unknown\n}\n\nconst readMetaPages = (dir: string): string[] | undefined => {\n const file = join(dir, 'meta.json')\n if (!existsSync(file)) return undefined\n try {\n const meta = JSON.parse(readFileSync(file, 'utf8')) as FumadocsMeta\n return Array.isArray(meta.pages) ? meta.pages.filter((page): page is string => typeof page === 'string') : undefined\n } catch {\n return undefined\n }\n}\n\nconst pageKey = (part: string): string => part.replace(/\\.mdx?$/, '')\n\nconst isDotFile = (relPath: string): boolean => {\n const file = relPath.split('/').at(-1) ?? ''\n return file.startsWith('.')\n}\n\nconst isListedByMeta = (contentRoot: string, relPath: string): boolean => {\n if (isDotFile(relPath)) return false\n\n const parts = relPath.split('/')\n\n for (let i = 0; i < parts.length; i += 1) {\n const dir = join(contentRoot, ...parts.slice(0, i))\n const pages = readMetaPages(dir)\n if (!pages?.length || pages.includes('...')) continue\n\n const key = pageKey(parts[i] ?? '')\n if (!pages.includes(key) && !pages.includes(`./${key}`)) return false\n }\n\n return true\n}\n\nexport const fumadocsAdapter: HumanAdapter = {\n plugin: 'fumadocs',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'root'])\n if (!contentDir) return []\n const contentRoot = join(root, contentDir)\n const excludePrefixes = Array.isArray(config.options?.excludePrefixes)\n ? config.options.excludePrefixes.filter((v): v is string => typeof v === 'string')\n : typeof config.options?.excludePrefix === 'string'\n ? [config.options.excludePrefix]\n : []\n // Nested agent corpora under Fumadocs (e.g. content/docs/for-agents) should not be human docs\n if (!excludePrefixes.includes('for-agents')) excludePrefixes.push('for-agents')\n\n return scanMarkdownDocs(root, contentDir, {\n includeRelPath: (relPath) => {\n if (excludePrefixes.some((prefix) => relPath === prefix || relPath.startsWith(`${prefix}/`))) {\n return false\n }\n return isListedByMeta(contentRoot, relPath)\n },\n urlPrefix: config.options?.urlPrefix,\n stripGroups: true,\n })\n },\n}\n","import { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nexport const plainMarkdownAdapter: HumanAdapter = {\n plugin: 'plain-markdown',\n scan: ({ root, config }) => {\n const humanRoot =\n optionString(config.options, ['contentDir', 'root', 'docsDir']) ?? 'docs'\n return scanMarkdownDocs(root, humanRoot, { urlPrefix: config.options?.urlPrefix })\n },\n}\n","import type { DocBridgeConfigV1, HumanCorpusConfig } from '../../config/schema.js'\nimport { docusaurusAdapter } from './docusaurus.js'\nimport { fumadocsAdapter } from './fumadocs.js'\nimport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\nimport { plainMarkdownAdapter } from './plain-markdown.js'\n\nexport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\n\nconst ADAPTERS: readonly HumanAdapter[] = [\n plainMarkdownAdapter,\n fumadocsAdapter,\n docusaurusAdapter,\n]\n\nconst humanConfigs = (config: DocBridgeConfigV1): HumanCorpusConfig[] => {\n const human = config.corpus.human\n if (!human) return []\n return Array.isArray(human) ? human : [human]\n}\n\nexport const scanHumanDocRecords = (\n root: string,\n config: DocBridgeConfigV1,\n): HumanDocRecord[] => {\n const out: HumanDocRecord[] = []\n const seen = new Set<string>()\n const agentRoot = config.corpus.agent.root.replace(/\\/$/, '')\n\n for (const human of humanConfigs(config)) {\n const adapter = ADAPTERS.find((candidate) => candidate.plugin === human.plugin)\n if (!adapter) continue\n for (const record of adapter.scan({ root, config: human })) {\n // Never treat agent-corpus files as human docs (nested for-agents, etc.)\n if (\n record.path === agentRoot ||\n record.path.startsWith(`${agentRoot}/`) ||\n record.path.includes('/for-agents/') ||\n record.path.endsWith('/for-agents')\n ) {\n continue\n }\n if (seen.has(record.id)) continue\n seen.add(record.id)\n out.push(record)\n }\n }\n\n return out\n}\n\nexport const scanHumanDocs = (root: string, config: DocBridgeConfigV1): HumanDocMap =>\n Object.fromEntries(scanHumanDocRecords(root, config).map((doc) => [doc.id, doc.url]))\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../../config/schema.js'\nimport { expandWorkspaceGlobs } from '../../lib/glob-expand.js'\nimport { toPosix } from '../../lib/paths.js'\n\nexport type DiscoveredPackage = {\n readonly id: string\n readonly path: string\n readonly name?: string\n}\n\nconst parsePnpmWorkspace = (yaml: string): string[] => {\n const lines = yaml.split('\\n')\n const patterns: string[] = []\n let inPackages = false\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages) {\n if (trimmed.startsWith('- ')) {\n patterns.push(trimmed.slice(2).trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n if (trimmed && !trimmed.startsWith('#')) inPackages = false\n }\n }\n return patterns\n}\n\nconst readPackageJson = (dir: string): { name?: string } | null => {\n const file = join(dir, 'package.json')\n if (!existsSync(file)) return null\n try {\n return JSON.parse(readFileSync(file, 'utf8')) as { name?: string }\n } catch {\n return null\n }\n}\n\nexport const discoverPnpmPackages = (\n root: string,\n config: DocBridgeConfigV1,\n): DiscoveredPackage[] => {\n const explicit = config.routing?.options?.packages\n let patterns = explicit\n if (!patterns?.length) {\n const workspaceFile = join(root, 'pnpm-workspace.yaml')\n if (existsSync(workspaceFile)) {\n patterns = parsePnpmWorkspace(readFileSync(workspaceFile, 'utf8'))\n }\n }\n if (!patterns?.length) return []\n\n const dirs = expandWorkspaceGlobs(root, patterns)\n const out: DiscoveredPackage[] = []\n\n for (const abs of dirs) {\n const pkg = readPackageJson(abs)\n if (!pkg) continue\n const rel = toPosix(abs.replace(`${toPosix(root)}/`, ''))\n const folderId = basename(abs)\n const id = pkg.name?.startsWith('@') ? pkg.name.split('/').pop() ?? folderId : (pkg.name ?? folderId)\n out.push({ id, path: rel, ...(pkg.name ? { name: pkg.name } : {}) })\n }\n\n return out.sort((a, b) => a.id.localeCompare(b.id))\n}\n","import { existsSync, readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { toPosix } from './paths.js'\n\n/** Expand simple workspace globs: `packages/*`, `apps/*`, literal paths. */\nexport const expandWorkspaceGlobs = (root: string, patterns: readonly string[]): string[] => {\n const dirs = new Set<string>()\n\n for (const pattern of patterns) {\n const normalized = toPosix(pattern).replace(/\\/$/, '')\n if (!normalized.includes('*')) {\n const abs = join(root, normalized)\n if (existsSync(abs)) dirs.add(toPosix(abs))\n continue\n }\n\n const star = normalized.indexOf('*')\n const base = join(root, normalized.slice(0, star).replace(/\\/$/, ''))\n if (!existsSync(base)) continue\n\n for (const name of readdirSync(base)) {\n const abs = join(base, name)\n try {\n if (statSync(abs).isDirectory()) dirs.add(toPosix(abs))\n } catch {\n // skip\n }\n }\n }\n\n return [...dirs].sort()\n}","import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { slugFromPath } from '../lib/markdown.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport {\n retrieveDocBridgeChunks,\n type DocBridgeRetrievedChunk,\n} from '../retriever/doc-bridge-retriever.js'\n\nexport type FetchText = (url: string) => Promise<string>\n\nexport type FederatedRetrieverOptions = {\n readonly fetchText?: FetchText\n readonly limit?: number\n}\n\nconst tokenize = (value: string): string[] =>\n value.toLowerCase().split(/[^a-z0-9]+/).filter((token) => token.length >= 2)\n\nconst scoreText = (query: string, text: string): number => {\n const hay = text.toLowerCase()\n return tokenize(query).reduce((score, token) => score + (hay.includes(token) ? token.length : 0), 0)\n}\n\nconst defaultFetchText: FetchText = async (url) => {\n const signal = AbortSignal.timeout(5_000)\n const res = await fetch(url, { signal })\n if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.status}`)\n return res.text()\n}\n\nconst sourceText = async (\n root: string,\n source: string,\n fetchText: FetchText,\n): Promise<string> => {\n if (/^https?:\\/\\//.test(source)) return fetchText(source)\n const path = resolve(root, source)\n if (!existsSync(path)) throw new Error(`Federation source not found: ${source}`)\n return readFileSync(path, 'utf8')\n}\n\nconst sameOrigin = (base: string, target: string): boolean => {\n if (!/^https?:\\/\\//.test(base) || !/^https?:\\/\\//.test(target)) return true\n return new URL(base).origin === new URL(target).origin\n}\n\nexport const parseLlmsTxtLinks = (raw: string): { title: string; url: string; description?: string }[] => {\n const links = [...raw.matchAll(/\\[([^\\]]+)\\]\\(([^)]+)\\)(?::\\s*([^\\n]+))?/g)].map((match) => ({\n title: match[1] ?? match[2] ?? 'link',\n url: match[2] ?? '',\n ...(match[3]?.trim() ? { description: match[3].trim() } : {}),\n })).filter((link) => link.url)\n\n for (const match of raw.matchAll(/(?:^|\\s)(?:Raw|llms\\.txt|Full bundle|ZIP bundle)?:?\\s*(https?:\\/\\/\\S+)/gi)) {\n const url = match[1]?.replace(/[),.;]+$/, '')\n if (url && !links.some((link) => link.url === url)) links.push({ title: slugFromPath(url), url })\n }\n return links\n}\n\nexport const chunksFromMarkdown = (\n property: string,\n raw: string,\n sourceUrl: string,\n): DocBridgeRetrievedChunk[] => {\n const searchable = raw.includes('\\n==== ') ? raw : raw.replace(/^---\\n[\\s\\S]*?\\n---\\n?/, '')\n const sections = searchable.includes('\\n==== ')\n ? searchable.split(/\\n====\\s+/).filter((section) => section.trim())\n : searchable.split(/\\n(?=##?\\s+)/)\n return sections.map((section, index) => {\n const title =\n /^title:\\s*(.+)$/m.exec(section)?.[1]?.trim() ??\n /^https?:\\/\\/\\S+\\/([^/\\s]+)$/m.exec(section)?.[1]?.trim() ??\n /^#+\\s+(.+)$/m.exec(section)?.[1]?.trim() ??\n slugFromPath(sourceUrl)\n const id = slugFromPath(title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')) || `${index}`\n return {\n chunkKey: `${property}:federated:${id}`,\n property,\n type: 'federated',\n id,\n path: sourceUrl,\n title,\n summary: section.trim().slice(0, 500),\n score: 0,\n }\n })\n}\n\nexport const loadFederatedChunks = async (\n root: string,\n config: DocBridgeConfigV1,\n options: FederatedRetrieverOptions = {},\n): Promise<DocBridgeRetrievedChunk[]> => {\n const fetchText = options.fetchText ?? defaultFetchText\n const chunks: DocBridgeRetrievedChunk[] = []\n for (const source of config.federation?.sources ?? []) {\n if (source.includeInRetriever === false || !source.llmsTxt) continue\n const llms = await sourceText(root, source.llmsTxt, fetchText)\n chunks.push(...chunksFromMarkdown(source.id, llms, source.llmsTxt))\n const links = parseLlmsTxtLinks(llms)\n for (const link of links) {\n const url = !/^https?:\\/\\//.test(link.url) && source.rawBaseUrl\n ? `${source.rawBaseUrl.replace(/\\/$/, '')}/${link.url.replace(/^\\//, '')}`\n : link.url\n if (!/\\.(md|txt)(?:$|\\?)/.test(url)) continue\n if (!sameOrigin(source.llmsTxt, url)) continue\n try {\n const raw = await sourceText(root, url, fetchText)\n chunks.push(...chunksFromMarkdown(source.id, raw, url))\n } catch {\n // ponytail: federation is best-effort; surface-level health belongs in a future diagnostic command.\n }\n }\n }\n return chunks\n}\n\nexport const retrieveHybridChunks = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n query: string,\n options: FederatedRetrieverOptions = {},\n): Promise<DocBridgeRetrievedChunk[]> => {\n const limit = options.limit ?? 8\n const local = retrieveDocBridgeChunks(index, query, {\n property: config.project?.name ?? index.project?.name ?? 'local',\n limit,\n })\n const federated = (await loadFederatedChunks(root, config, options)).map((chunk) => ({\n ...chunk,\n score: scoreText(query, `${chunk.title ?? ''} ${chunk.summary ?? ''} ${chunk.path}`),\n })).filter((chunk) => chunk.score > 0)\n\n const byKey = new Map<string, DocBridgeRetrievedChunk>()\n for (const chunk of [...local, ...federated]) {\n const existing = byKey.get(chunk.chunkKey)\n if (!existing || chunk.score > existing.score) byKey.set(chunk.chunkKey, chunk)\n }\n return [...byKey.values()].sort((a, b) => b.score - a.score).slice(0, limit)\n}\n","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\n\nexport type SearchMatch = {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n readonly score: number\n}\n\nconst tokenize = (value: string): string[] =>\n value\n .toLowerCase()\n .split(/[^a-z0-9]+/)\n .filter((t) => t.length >= 2)\n\nexport const searchIndex = (index: DocBridgeIndexV1, term: string, limit = 20): SearchMatch[] => {\n const tokens = tokenize(term)\n if (!tokens.length) return []\n\n const matches: SearchMatch[] = []\n\n for (const entry of index.knowledge) {\n const hay = `${entry.id} ${entry.title} ${entry.description ?? ''} ${entry.path}`.toLowerCase()\n let score = 0\n for (const token of tokens) {\n if (hay.includes(token)) score += token.length\n }\n if (score > 0) {\n matches.push({\n type: 'knowledge',\n id: entry.id,\n path: entry.path,\n ...(entry.description ? { summary: entry.description } : {}),\n score,\n })\n }\n }\n\n for (const [id, owner] of Object.entries(index.lookup?.ownership ?? {})) {\n const hay = `${id} ${owner.path} ${owner.purpose ?? ''} ${owner.group ?? ''}`.toLowerCase()\n let score = 0\n for (const token of tokens) {\n if (hay.includes(token)) score += token.length * 2\n }\n if (score > 0) {\n matches.push({\n type: 'ownership',\n id,\n path: owner.agentDoc ?? owner.path,\n ...(owner.purpose ? { summary: owner.purpose } : {}),\n score,\n })\n }\n }\n\n return matches.sort((a, b) => b.score - a.score).slice(0, limit)\n}","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { searchIndex } from '../query/search.js'\n\nexport type DocBridgeRetrieverOptions = {\n readonly property?: string\n readonly limit?: number\n}\n\nexport type DocBridgeRetrievedChunk = {\n readonly chunkKey: string\n readonly property: string\n readonly type: string\n readonly id: string\n readonly path: string\n readonly title?: string\n readonly summary?: string\n readonly score: number\n}\n\nexport type DocBridgeRetriever = {\n readonly retrieve: (\n query: string,\n options?: Pick<DocBridgeRetrieverOptions, 'limit'>,\n ) => DocBridgeRetrievedChunk[]\n}\n\nconst chunkKey = (property: string, type: string, id: string): string =>\n `${property}:${type}:${id}`\n\nexport const retrieveDocBridgeChunks = (\n index: DocBridgeIndexV1,\n query: string,\n options: DocBridgeRetrieverOptions = {},\n): DocBridgeRetrievedChunk[] => {\n const property = options.property ?? index.project?.name ?? 'local'\n const limit = options.limit ?? 8\n\n return searchIndex(index, query, limit).map((match) => {\n const knowledge = index.knowledge.find((entry) => entry.id === match.id && entry.path === match.path)\n const owner = index.lookup?.ownership?.[match.id]\n const type = match.type === 'ownership' ? 'ownership' : (knowledge?.type ?? match.type)\n const summary = match.summary ?? owner?.purpose\n return {\n chunkKey: chunkKey(property, type, match.id),\n property,\n type,\n id: match.id,\n path: match.path,\n ...(knowledge?.title ? { title: knowledge.title } : {}),\n ...(summary ? { summary } : {}),\n score: match.score,\n }\n })\n}\n\nexport const createDocBridgeRetriever = (\n index: DocBridgeIndexV1,\n options: DocBridgeRetrieverOptions = {},\n): DocBridgeRetriever => ({\n retrieve: (query, req = {}) =>\n retrieveDocBridgeChunks(index, query, { ...options, ...req }),\n})\n","import { readFileSync } from 'node:fs'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { scanAgentCorpus } from '../index-builder/scan-corpus.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { IndexNotFoundError, loadDocBridgeIndex } from '../query/load-index.js'\n\nexport type GateId = 'index-freshness' | 'human-guide-links' | 'okf-type' | 'docs-style'\n\nconst SUPPORTED_GATES = ['index-freshness', 'human-guide-links', 'okf-type', 'docs-style'] as const\n\nexport type GateResult = {\n readonly id: GateId\n readonly ok: boolean\n readonly message: string\n readonly expected?: string\n readonly actual?: string\n}\n\nexport type GateRunResult = {\n readonly ok: boolean\n readonly results: GateResult[]\n}\n\nexport const runGate = (\n root: string,\n config: DocBridgeConfigV1,\n id: GateId,\n): GateResult => {\n if (id === 'human-guide-links') return runHumanGuideLinksGate(root, config)\n if (id === 'okf-type') return runOkfTypeGate(root, config)\n if (id === 'docs-style') return runDocsStyleGate(root, config)\n if (id !== 'index-freshness') throw new Error(`Unsupported gate \"${id}\"`)\n\n let current: string\n try {\n current = loadDocBridgeIndex(root, config).contentHash\n } catch (error) {\n if (error instanceof IndexNotFoundError) {\n return { id, ok: false, message: error.message }\n }\n throw error\n }\n\n const next = buildDocBridgeIndex({ root, config, write: false }).index.contentHash\n if (current !== next) {\n return {\n id,\n ok: false,\n message: 'Index is stale. Run: ak-docs index',\n expected: next,\n actual: current,\n }\n }\n\n return { id, ok: true, message: 'Index is fresh', expected: next, actual: current }\n}\n\nconst runHumanGuideLinksGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const urls = new Set(scanHumanDocRecords(root, config).map((doc) => doc.url))\n const index = buildDocBridgeIndex({ root, config, write: false }).index\n const localHumanDocs = Object.values(index.handoffs ?? {})\n .map((handoff) => handoff.humanDoc)\n .filter((url): url is string => typeof url === 'string' && url.length > 0)\n .filter((url) => !/^https?:\\/\\//.test(url))\n const missing = localHumanDocs.filter((url, i, all) => !urls.has(url) && all.indexOf(url) === i)\n\n if (missing.length) {\n return {\n id: 'human-guide-links',\n ok: false,\n message: `Broken humanDoc links: ${missing.join(', ')}`,\n expected: 'all local humanDoc links resolve',\n actual: `${missing.length} broken`,\n }\n }\n\n return {\n id: 'human-guide-links',\n ok: true,\n message: `Resolved ${localHumanDocs.length} humanDoc link(s)`,\n }\n}\n\nconst frontmatterType = (markdown: string): string | undefined => {\n const match = /^---\\n([\\s\\S]*?)\\n---/.exec(markdown)\n return match?.[1]?.match(/^type:\\s*['\"]?([^'\"\\n#]+)['\"]?/m)?.[1]?.trim()\n}\n\nconst frontmatterField = (markdown: string, field: string): string | undefined => {\n const match = /^---\\n([\\s\\S]*?)\\n---/.exec(markdown)\n return match?.[1]?.match(new RegExp(`^${field}:\\\\s*['\"]?([^'\\\"\\\\n#]+)['\"]?`, 'm'))?.[1]?.trim()\n}\n\nconst runOkfTypeGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const required = config.corpus.agent.okf?.requireType ?? config.gates?.preset === 'strict'\n if (!required) return { id: 'okf-type', ok: true, message: 'OKF type frontmatter not required' }\n\n const allowed = config.corpus.agent.okf?.allowedTypes\n const bad = scanAgentCorpus(root, config)\n .filter((doc) => doc.path !== config.corpus.agent.index)\n .map((doc) => ({ path: doc.path, type: frontmatterType(readFileSync(doc.absPath, 'utf8')) }))\n .filter((doc) => !doc.type || (allowed && !allowed.includes(doc.type)))\n\n if (bad.length) {\n return {\n id: 'okf-type',\n ok: false,\n message: `Missing or invalid OKF type frontmatter: ${bad.map((doc) => doc.path).join(', ')}`,\n expected: allowed?.length ? `type: ${allowed.join(' | ')}` : 'type frontmatter',\n actual: `${bad.length} invalid`,\n }\n }\n\n return { id: 'okf-type', ok: true, message: 'All agent docs have OKF type frontmatter' }\n}\n\ntype DocsStyleRule =\n | 'title'\n | 'purpose'\n | 'audience'\n | 'task-orientation'\n | 'examples'\n | 'owner-source'\n | 'no-stale-wording'\n\ntype DocsStyleProfile =\n | 'google-dev-docs'\n | 'playbook-okf'\n | 'playbook-okf-soft'\n | 'title-only'\n | 'custom'\n\nconst DOCS_STYLE_RULES: Record<Exclude<DocsStyleProfile, 'custom'>, DocsStyleRule[]> = {\n 'google-dev-docs': [\n 'title',\n 'purpose',\n 'audience',\n 'task-orientation',\n 'examples',\n 'no-stale-wording',\n ],\n /** Full playbook OKF style (strict). */\n 'playbook-okf': ['title', 'purpose', 'owner-source', 'no-stale-wording'],\n /** Soft profile for large existing OKF corpora (title + no stale placeholders). */\n 'playbook-okf-soft': ['title', 'no-stale-wording'],\n 'title-only': ['title'],\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst docsStyleOptions = (\n config: DocBridgeConfigV1,\n): { profile: DocsStyleProfile; required: DocsStyleRule[] } => {\n const raw = config.gates?.options?.['docs-style']\n if (!isRecord(raw)) {\n if (config.gates?.preset === 'playbook') {\n return { profile: 'playbook-okf-soft', required: DOCS_STYLE_RULES['playbook-okf-soft'] }\n }\n return { profile: 'playbook-okf', required: DOCS_STYLE_RULES['playbook-okf'] }\n }\n\n const profile =\n raw.profile === 'google-dev-docs' ||\n raw.profile === 'playbook-okf' ||\n raw.profile === 'playbook-okf-soft' ||\n raw.profile === 'title-only' ||\n raw.profile === 'custom'\n ? raw.profile\n : 'playbook-okf'\n const customRequired = Array.isArray(raw.required)\n ? raw.required.filter((rule): rule is DocsStyleRule =>\n [\n 'title',\n 'purpose',\n 'audience',\n 'task-orientation',\n 'examples',\n 'owner-source',\n 'no-stale-wording',\n ].includes(String(rule)),\n )\n : []\n\n return {\n profile,\n required: profile === 'custom' ? customRequired : DOCS_STYLE_RULES[profile],\n }\n}\n\nconst missingStyleRules = (markdown: string, rules: readonly DocsStyleRule[]): DocsStyleRule[] => {\n const checks: Record<DocsStyleRule, boolean> = {\n title: /^#\\s+\\S+/m.test(markdown),\n purpose: Boolean(frontmatterField(markdown, 'purpose') || /^##\\s+(Purpose|Goal)\\b/im.test(markdown)),\n audience: Boolean(frontmatterField(markdown, 'audience') || /^##\\s+Audience\\b/im.test(markdown)),\n 'task-orientation': /^##\\s+(How to|Usage|Workflow|Tasks?)\\b/im.test(markdown),\n examples: /^##\\s+Examples?\\b/im.test(markdown) || /```[\\s\\S]*?```/.test(markdown),\n 'owner-source': Boolean(\n frontmatterField(markdown, 'owner') ||\n frontmatterField(markdown, 'source') ||\n /^(Owner|Source):\\s+\\S+/im.test(markdown),\n ),\n 'no-stale-wording': !/\\b(TODO|TBD|coming soon|eventually|placeholder)\\b/i.test(markdown),\n }\n\n return rules.filter((rule) => !checks[rule])\n}\n\nconst runDocsStyleGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const { profile, required } = docsStyleOptions(config)\n if (!required.length) {\n return { id: 'docs-style', ok: true, message: 'No docs-style rules configured' }\n }\n\n const bad = scanAgentCorpus(root, config)\n .filter((doc) => doc.path !== config.corpus.agent.index)\n .map((doc) => ({\n path: doc.path,\n missing: missingStyleRules(readFileSync(doc.absPath, 'utf8'), required),\n }))\n .filter((doc) => doc.missing.length > 0)\n\n if (bad.length) {\n return {\n id: 'docs-style',\n ok: false,\n message: `Docs style issues: ${bad\n .map((doc) => `${doc.path} (${doc.missing.join(', ')})`)\n .join('; ')}`,\n expected: `${profile}: ${required.join(', ')}`,\n actual: `${bad.length} file(s) with style issues`,\n }\n }\n\n return {\n id: 'docs-style',\n ok: true,\n message: `All agent docs pass ${profile} docs-style rules`,\n }\n}\n\nexport const runGates = (\n root: string,\n config: DocBridgeConfigV1,\n ids?: readonly GateId[],\n): GateRunResult => {\n const results = (ids ?? resolveGateIds(config)).map((id) => runGate(root, config, id))\n return { ok: results.every((result) => result.ok), results }\n}\n\nexport const resolveGateIds = (config: DocBridgeConfigV1): GateId[] => {\n const preset = config.gates?.preset ?? 'minimal'\n const ids = new Set<GateId>(\n preset === 'minimal'\n ? ['index-freshness']\n : preset === 'strict'\n ? ['index-freshness', 'human-guide-links', 'okf-type', 'docs-style']\n : preset === 'playbook'\n ? // okf-type only — docs-style soft is opt-in via include (large corpora vary)\n ['index-freshness', 'okf-type']\n : ['index-freshness', 'human-guide-links'],\n )\n\n for (const id of config.gates?.include ?? []) {\n if (SUPPORTED_GATES.includes(id as GateId)) ids.add(id as GateId)\n }\n for (const id of config.gates?.exclude ?? []) {\n if (SUPPORTED_GATES.includes(id as GateId)) ids.delete(id as GateId)\n }\n\n return [...ids]\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { parseDocBridgeIndex } from '../validate.js'\n\nexport class IndexNotFoundError extends Error {\n constructor(readonly path: string) {\n super(`Missing index at ${path}. Run: ak-docs index`)\n this.name = 'IndexNotFoundError'\n }\n}\n\nexport const indexFilePath = (root: string, config: DocBridgeConfigV1): string =>\n join(root, config.index?.outFile ?? '.doc-bridge/index.json')\n\nexport const loadDocBridgeIndex = (root: string, config: DocBridgeConfigV1): DocBridgeIndexV1 => {\n const path = indexFilePath(root, config)\n if (!existsSync(path)) throw new IndexNotFoundError(path)\n const raw = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return parseDocBridgeIndex(raw)\n}\n\nexport const resolveRoot = (cwd?: string): string => resolve(cwd ?? process.cwd())","import { z } from 'zod'\n\nexport const HANDOFF_SCHEMA_VERSION = 1 as const\n\nexport const HandoffTargetTypeSchema = z.enum([\n 'package',\n 'module',\n 'app',\n 'screen',\n 'flow',\n 'component',\n 'intent',\n 'change',\n 'search',\n])\n\nexport type HandoffTargetType = z.infer<typeof HandoffTargetTypeSchema>\n\nexport const HandoffTargetSchema = z\n .object({\n type: HandoffTargetTypeSchema,\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512).optional(),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n })\n .strict()\n\nexport type HandoffTarget = z.infer<typeof HandoffTargetSchema>\n\n/** v1 — canonical AgentHandoff. Legacy payloads may omit schemaVersion. */\nexport const AgentHandoffV1Schema = z\n .object({\n type: z.literal('agent-handoff'),\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).default(HANDOFF_SCHEMA_VERSION),\n source: z.string().min(1).max(512),\n target: HandoffTargetSchema,\n startHere: z.string().min(1).max(512),\n readBeforeEditing: z.array(z.string().min(1).max(512)).max(64),\n editRoots: z.array(z.string().min(1).max(512)).max(32),\n checks: z.array(z.string().min(1).max(256)).max(32),\n humanDoc: z.string().min(1).max(512).nullable().optional(),\n playbookPatterns: z.array(z.string().url()).max(16).optional(),\n notes: z.array(z.string().min(1).max(1024)).max(16),\n })\n .strict()\n\nexport type AgentHandoffV1 = z.infer<typeof AgentHandoffV1Schema>\n\n/** Accept legacy handoffs without schemaVersion. */\nexport const AgentHandoffLegacySchema = AgentHandoffV1Schema.omit({ schemaVersion: true }).extend({\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).optional(),\n})\n\nexport const AgentSearchMatchSchema = z\n .object({\n type: z.string().min(1).max(64),\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n summary: z.string().max(2048).optional(),\n score: z.number().optional(),\n refs: z.number().int().nonnegative().optional(),\n })\n .strict()\n\nexport const AgentSearchV1Schema = z\n .object({\n type: z.literal('agent-search'),\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).default(HANDOFF_SCHEMA_VERSION),\n source: z.string().min(1).max(512),\n term: z.string().min(1).max(512),\n count: z.number().int().nonnegative(),\n bestMatch: AgentSearchMatchSchema.nullable(),\n matches: z.array(AgentSearchMatchSchema).max(32),\n nextCommands: z.array(z.string().min(1).max(512)).max(16),\n })\n .strict()\n\nexport type AgentSearchV1 = z.infer<typeof AgentSearchV1Schema>\n\nexport const normalizeAgentHandoff = (input: unknown): AgentHandoffV1 =>\n AgentHandoffV1Schema.parse(AgentHandoffLegacySchema.parse(input))\n","import { z } from 'zod'\n\nimport { AgentHandoffLegacySchema } from './agent-handoff.js'\n\nexport const INDEX_SCHEMA_VERSION = 1 as const\n\nexport const ContentHashAlgoSchema = z.literal('sha256-normalized-v1')\n\nexport const EcosystemPropertySchema = z\n .object({\n id: z.string().min(1).max(64),\n name: z.string().min(1).max(128),\n url: z.string().url().optional(),\n llms: z.string().url().optional(),\n })\n .strict()\n\nexport const KnowledgeEntrySchema = z\n .object({\n id: z.string().min(1).max(256),\n type: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n description: z.string().max(1024).optional(),\n links: z.array(z.string().min(1).max(512)).max(64).optional(),\n tags: z.array(z.string().min(1).max(64)).max(32).optional(),\n })\n .strict()\n\nexport const CapabilityRefSchema = z\n .object({\n id: z.string().min(1).max(256),\n kind: z.string().min(1).max(64),\n description: z.string().max(512).optional(),\n })\n .strict()\n\nexport const OwnershipRecordSchema = z\n .object({\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n purpose: z.string().max(1024).optional(),\n checks: z.array(z.string().min(1).max(256)).max(32),\n agentDoc: z.string().min(1).max(512).optional(),\n humanDoc: z.string().min(1).max(512).optional(),\n readme: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const IndexLookupSchema = z\n .object({\n packages: z.array(z.string().min(1).max(256)).max(2_000),\n ownership: z.record(z.string().min(1).max(256), OwnershipRecordSchema).optional(),\n intents: z\n .record(\n z.string().min(1).max(128),\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n paths: z.array(z.string().min(1).max(512)).max(32),\n })\n .strict(),\n )\n .optional(),\n changes: z\n .record(\n z.string().min(1).max(128),\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n startHere: z.string().min(1).max(512),\n relatedPackages: z.array(z.string().min(1).max(256)).max(32).optional(),\n })\n .strict(),\n )\n .optional(),\n })\n .strict()\n\nexport const DocBridgeIndexV1Schema = z\n .object({\n schemaVersion: z.literal(INDEX_SCHEMA_VERSION),\n contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n contentHashAlgo: ContentHashAlgoSchema,\n generatedAt: z.string().datetime().optional(),\n project: z\n .object({\n name: z.string().min(1).max(128),\n root: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n properties: z.array(EcosystemPropertySchema).max(16).optional(),\n knowledge: z.array(KnowledgeEntrySchema).max(10_000),\n capabilities: z.array(CapabilityRefSchema).max(5_000).optional(),\n handoffs: z.record(z.string().min(1).max(256), AgentHandoffLegacySchema).optional(),\n lookup: IndexLookupSchema.optional(),\n })\n .strict()\n\nexport type DocBridgeIndexV1 = z.infer<typeof DocBridgeIndexV1Schema>\nexport type KnowledgeEntry = z.infer<typeof KnowledgeEntrySchema>","import { z } from 'zod'\n\nexport const MEMORY_CANDIDATE_SCHEMA_VERSION = 1 as const\n\nexport const MemorySourceSchema = z.enum([\n 'cursor',\n 'claude',\n 'codex',\n 'copilot',\n 'agent-memory',\n 'manual',\n])\n\nexport const MemorySuggestedTypeSchema = z.enum([\n 'user',\n 'feedback',\n 'project',\n 'reference',\n 'unknown',\n])\n\nexport const MemoryCandidateV1Schema = z\n .object({\n schemaVersion: z.literal(MEMORY_CANDIDATE_SCHEMA_VERSION),\n id: z.string().min(1).max(256),\n source: MemorySourceSchema,\n rawPath: z.string().min(1).max(512).optional(),\n fact: z.string().min(1).max(8_000),\n why: z.string().max(4_000).optional(),\n howToApply: z.string().max(4_000).optional(),\n suggestedType: MemorySuggestedTypeSchema,\n confidence: z.number().min(0).max(1),\n references: z.array(z.string().min(1).max(512)).max(64),\n })\n .strict()\n\nexport type MemoryCandidateV1 = z.infer<typeof MemoryCandidateV1Schema>","import { ZodError } from 'zod'\n\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './config/schema.js'\nimport {\n AgentHandoffLegacySchema,\n AgentHandoffV1Schema,\n AgentSearchV1Schema,\n normalizeAgentHandoff,\n type AgentHandoffV1,\n type AgentSearchV1,\n} from './schemas/agent-handoff.js'\nimport { DocBridgeIndexV1Schema, type DocBridgeIndexV1 } from './schemas/doc-bridge-index.js'\nimport {\n MemoryCandidateV1Schema,\n type MemoryCandidateV1,\n} from './schemas/memory-candidate.js'\n\nexport type ParseIssue = {\n readonly path: string\n readonly message: string\n}\n\nexport type ParseResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly ParseIssue[] }\n\nconst zodIssues = (error: ZodError): readonly ParseIssue[] =>\n error.issues.map((issue) => ({\n path: issue.path.join('.') || '(root)',\n message: issue.message,\n }))\n\nexport const safeParseAgentHandoff = (input: unknown): ParseResult<AgentHandoffV1> => {\n const legacy = AgentHandoffLegacySchema.safeParse(input)\n if (!legacy.success) return { ok: false, issues: zodIssues(legacy.error) }\n const normalized = AgentHandoffV1Schema.safeParse(normalizeAgentHandoff(legacy.data))\n if (!normalized.success) return { ok: false, issues: zodIssues(normalized.error) }\n return { ok: true, value: normalized.data }\n}\n\nexport const parseAgentHandoff = (input: unknown): AgentHandoffV1 => {\n const result = safeParseAgentHandoff(input)\n if (!result.ok) {\n throw new Error(\n `Invalid AgentHandoff:\\n${result.issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n )\n }\n return result.value\n}\n\nexport const parseAgentSearch = (input: unknown): AgentSearchV1 => AgentSearchV1Schema.parse(input)\n\nexport const parseDocBridgeIndex = (input: unknown): DocBridgeIndexV1 =>\n DocBridgeIndexV1Schema.parse(input)\n\nexport const parseMemoryCandidate = (input: unknown): MemoryCandidateV1 =>\n MemoryCandidateV1Schema.parse(input)\n\nexport const parseDocBridgeConfig = (input: unknown): DocBridgeConfigV1 => {\n const result = DocBridgeConfigV1Schema.safeParse(input)\n if (!result.success) {\n throw new Error(\n `Invalid doc-bridge config:\\n${zodIssues(result.error).map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n )\n }\n return result.data\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n normalizeAgentHandoff,\n type AgentHandoffV1,\n type AgentSearchV1,\n} from '../schemas/agent-handoff.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { searchIndex } from './search.js'\n\nexport type QueryKind = 'package' | 'ownership' | 'intent' | 'change' | 'search'\n\nexport type QueryRequest = {\n readonly kind: QueryKind\n readonly id?: string\n readonly term?: string\n readonly agent?: boolean\n}\n\nexport type QueryResult =\n | { readonly type: 'package' | 'ownership' | 'intent' | 'change' | 'search'; readonly data: unknown }\n | AgentHandoffV1\n | AgentSearchV1\n\nconst handoffForPackage = (\n index: DocBridgeIndexV1,\n id: string,\n config: DocBridgeConfigV1,\n): AgentHandoffV1 => {\n const fromIndex = index.handoffs?.[id]\n if (fromIndex) return normalizeAgentHandoff(fromIndex)\n\n const owner = index.lookup?.ownership?.[id]\n if (!owner) throw new Error(`Unknown package/ownership id \"${id}\". Try: ak-docs list packages`)\n\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: {\n type: 'package',\n id,\n path: owner.path,\n ...(owner.group ? { group: owner.group } : {}),\n ...(owner.layer ? { layer: owner.layer } : {}),\n },\n startHere: owner.agentDoc ?? config.corpus.agent.index ?? '',\n readBeforeEditing: [owner.agentDoc, 'AGENTS.md'].filter(Boolean),\n editRoots: [owner.path],\n checks: [...owner.checks],\n ...(owner.humanDoc ? { humanDoc: owner.humanDoc } : {}),\n notes: owner.purpose ? [owner.purpose] : [],\n })\n}\n\nexport const runQuery = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n req: QueryRequest,\n): QueryResult => {\n if (req.kind === 'search') {\n const term = req.term ?? req.id ?? ''\n const matches = searchIndex(index, term)\n if (req.agent) {\n const payload: AgentSearchV1 = {\n type: 'agent-search',\n schemaVersion: 1,\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n term,\n count: matches.length,\n bestMatch: matches[0]\n ? {\n type: matches[0].type,\n id: matches[0].id,\n path: matches[0].path,\n ...(matches[0].summary ? { summary: matches[0].summary } : {}),\n score: matches[0].score,\n }\n : null,\n matches: matches.slice(0, 8).map((m) => ({\n type: m.type,\n id: m.id,\n path: m.path,\n ...(m.summary ? { summary: m.summary } : {}),\n score: m.score,\n })),\n nextCommands: [...new Set(matches.slice(0, 5).map((m) =>\n m.type === 'ownership' || index.lookup?.ownership?.[m.id]\n ? `ak-docs query ownership ${m.id} --agent`\n : 'ak-docs list knowledge --text',\n ))],\n }\n return payload\n }\n return { type: 'search', data: { term, count: matches.length, matches } }\n }\n\n const id = req.id\n if (!id) throw new Error(`Missing id for query kind \"${req.kind}\"`)\n\n if (req.kind === 'package' || req.kind === 'ownership') {\n if (req.agent) return handoffForPackage(index, id, config)\n const owner = index.lookup?.ownership?.[id]\n return { type: req.kind, data: owner ?? index.handoffs?.[id] ?? null }\n }\n\n if (req.kind === 'intent') {\n const intent = index.lookup?.intents?.[id]\n if (!intent) throw new Error(`Unknown intent \"${id}\"`)\n if (req.agent) {\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: { type: 'intent', id },\n startHere: intent.paths[0] ?? '',\n readBeforeEditing: [...intent.paths],\n editRoots: [],\n checks: [],\n notes: [intent.title],\n })\n }\n return { type: 'intent', data: intent }\n }\n\n if (req.kind === 'change') {\n const change = index.lookup?.changes?.[id]\n if (!change) throw new Error(`Unknown change route \"${id}\"`)\n if (req.agent) {\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: { type: 'change', id },\n startHere: change.startHere,\n readBeforeEditing: ['AGENTS.md', config.corpus.agent.index ?? ''].filter(Boolean),\n editRoots: [change.startHere],\n checks: [],\n notes: [change.title],\n })\n }\n return { type: 'change', data: change }\n }\n\n throw new Error(`Unsupported query kind: ${req.kind as string}`)\n}\n","import { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { importPeer } from './peers.js'\n\nconst readEnv = (name: string | undefined): string | undefined => {\n if (!name) return undefined\n const value = process.env[name]\n return value && value.length > 0 ? value : undefined\n}\n\nexport type ResolvedIntelligence = {\n readonly adapter: unknown\n readonly embed: unknown\n readonly provider: string\n readonly model?: string\n}\n\nexport const resolveIntelligenceRuntime = async (\n config: DocBridgeConfigV1,\n): Promise<ResolvedIntelligence> => {\n if (!config.intelligence?.enabled) {\n throw new Error('Intelligence is disabled. Set intelligence.enabled: true in doc-bridge config.')\n }\n const adapterCfg = config.intelligence.adapter\n if (!adapterCfg) {\n throw new Error('intelligence.adapter is required for chat/RAG (provider + optional model).')\n }\n\n const adapters = await importPeer<typeof import('@agentskit/adapters')>('@agentskit/adapters')\n const provider = adapterCfg.provider\n const model = adapterCfg.model\n const apiKey = readEnv(adapterCfg.apiKeyEnv) ?? readEnv('OPENAI_API_KEY') ?? readEnv('ANTHROPIC_API_KEY')\n const baseUrl = adapterCfg.baseUrl\n\n let adapter: unknown\n let embed: unknown\n\n switch (provider) {\n case 'ollama': {\n adapter = adapters.ollama({ model: model ?? 'llama3.2', ...(baseUrl ? { baseUrl } : {}) })\n embed = adapters.ollamaEmbedder({\n model: typeof adapterCfg.options?.embedModel === 'string'\n ? adapterCfg.options.embedModel\n : 'nomic-embed-text',\n ...(baseUrl ? { baseUrl } : {}),\n })\n break\n }\n case 'openai': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'OPENAI_API_KEY'}`)\n adapter = adapters.openai({ apiKey, ...(model ? { model } : {}), ...(baseUrl ? { baseUrl } : {}) })\n embed = adapters.openaiEmbedder({ apiKey, model: 'text-embedding-3-small' })\n break\n }\n case 'anthropic': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'ANTHROPIC_API_KEY'}`)\n adapter = adapters.anthropic({ apiKey, ...(model ? { model } : {}) })\n // Anthropic has no default embedder in adapters — fall back to openai-compatible if key present\n const openaiKey = readEnv('OPENAI_API_KEY')\n if (openaiKey) embed = adapters.openaiEmbedder({ apiKey: openaiKey })\n else {\n throw new Error(\n 'Anthropic chat requires an embedder for RAG. Set OPENAI_API_KEY for embeddings or use provider: ollama.',\n )\n }\n break\n }\n case 'openrouter': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'OPENROUTER_API_KEY'}`)\n adapter = adapters.openrouter({ apiKey, ...(model ? { model } : {}) })\n embed = adapters.openaiEmbedder({\n apiKey,\n model: 'text-embedding-3-small',\n // openrouter embeddings path may vary; adapters handle openai-compatible\n })\n break\n }\n case 'custom':\n throw new Error(\n 'provider: custom requires a programmatic integration. Use ollama, openai, anthropic, or openrouter in v0.1.',\n )\n default:\n throw new Error(`Unsupported intelligence.adapter.provider: ${String(provider)}`)\n }\n\n return { adapter, embed, provider, ...(model ? { model } : {}) }\n}\n\nexport const defaultVectorStorePath = (root: string): string => join(root, '.doc-bridge', 'vectors')\n","export class PeerMissingError extends Error {\n constructor(\n readonly peer: string,\n readonly installHint: string,\n ) {\n super(\n `Optional peer \"${peer}\" is not installed.\\nInstall Layer 1 intelligence peers:\\n ${installHint}`,\n )\n this.name = 'PeerMissingError'\n }\n}\n\nconst LAYER1_INSTALL =\n 'npm i -D @agentskit/rag @agentskit/ink @agentskit/adapters @agentskit/memory react'\n\n/** True when a dynamic import failed because the package could not be resolved/loaded. */\nexport const isPeerResolutionFailure = (error: unknown): boolean => {\n const parts: string[] = []\n let cur: unknown = error\n for (let i = 0; i < 6 && cur; i += 1) {\n if (cur instanceof Error) {\n parts.push(cur.message, cur.name)\n const code = (cur as NodeJS.ErrnoException).code\n if (code) parts.push(String(code))\n cur = cur.cause\n continue\n }\n parts.push(String(cur))\n break\n }\n const text = parts.join(' ').toLowerCase()\n return (\n text.includes('cannot find package') ||\n text.includes('cannot find module') ||\n text.includes('module not found') ||\n text.includes('err_module_not_found') ||\n text.includes('err_package_not_found') ||\n text.includes('err_package_path_not_exported') ||\n text.includes('failed to resolve module') ||\n text.includes('failed to resolve') ||\n // Node / network resolution edge cases for bare package imports\n text.includes('fetch failed') ||\n text.includes('enotfound') ||\n text.includes('getaddrinfo')\n )\n}\n\nexport const importPeer = async <T>(name: string): Promise<T> => {\n try {\n return (await import(name)) as T\n } catch (error) {\n if (isPeerResolutionFailure(error)) {\n throw new PeerMissingError(name, LAYER1_INSTALL)\n }\n throw error\n }\n}\n\nexport const layer1InstallHint = (): string => LAYER1_INSTALL\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { defaultVectorStorePath, resolveIntelligenceRuntime } from './adapter.js'\nimport { importPeer } from './peers.js'\n\nexport type RagSearchHit = {\n readonly id?: string\n readonly content: string\n readonly score?: number\n readonly source?: string\n readonly metadata?: Record<string, unknown>\n}\n\nexport type DocBridgeRag = {\n readonly ingest: () => Promise<{ documentCount: number; storePath: string }>\n readonly search: (query: string, topK?: number) => Promise<RagSearchHit[]>\n readonly retriever: unknown\n readonly storePath: string\n}\n\nconst loadDocuments = (\n root: string,\n index: DocBridgeIndexV1,\n sources: readonly string[],\n): Array<{ id: string; content: string; source: string; metadata: Record<string, unknown> }> => {\n const includeAgent = sources.includes('agent') || sources.length === 0\n const docs: Array<{ id: string; content: string; source: string; metadata: Record<string, unknown> }> = []\n\n if (includeAgent) {\n for (const entry of index.knowledge) {\n const abs = join(root, entry.path)\n let content = ''\n try {\n content = readFileSync(abs, 'utf8')\n } catch {\n content = [entry.title, entry.description].filter(Boolean).join('\\n\\n')\n }\n docs.push({\n id: entry.id,\n content,\n source: entry.path,\n metadata: { type: entry.type, title: entry.title, path: entry.path },\n })\n }\n }\n\n // Human corpus is linked via humanDoc URLs; optional future: ingest human paths from adapters\n return docs\n}\n\nexport const createDocBridgeRag = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n): Promise<DocBridgeRag> => {\n const { embed } = await resolveIntelligenceRuntime(config)\n const ragMod = await importPeer<typeof import('@agentskit/rag')>('@agentskit/rag')\n const memoryMod = await importPeer<typeof import('@agentskit/memory')>('@agentskit/memory')\n\n const storePath =\n typeof config.intelligence?.retriever?.options?.storePath === 'string'\n ? join(root, config.intelligence.retriever.options.storePath)\n : defaultVectorStorePath(root)\n\n const store = memoryMod.fileVectorMemory({ path: storePath })\n const rag = ragMod.createRAG({\n embed,\n store,\n topK: 6,\n chunkSize: 900,\n chunkOverlap: 120,\n })\n\n const sources = config.intelligence?.chat?.sources ?? ['agent', 'human']\n\n return {\n storePath,\n retriever: rag,\n ingest: async () => {\n const documents = loadDocuments(root, index, sources)\n await rag.ingest(documents)\n return { documentCount: documents.length, storePath }\n },\n search: async (query, topK = 6) => {\n const hits = await rag.search(query, { topK })\n return hits.map((hit) => ({\n ...(hit.id ? { id: hit.id } : {}),\n content: hit.content,\n ...(hit.score !== undefined ? { score: hit.score } : {}),\n ...(hit.source ? { source: hit.source } : {}),\n ...(hit.metadata ? { metadata: hit.metadata } : {}),\n }))\n },\n }\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { runQuery } from '../query/query.js'\nimport { resolveIntelligenceRuntime } from './adapter.js'\nimport {\n PeerMissingError,\n importPeer,\n isPeerResolutionFailure,\n layer1InstallHint,\n} from './peers.js'\nimport { createDocBridgeRag } from './rag.js'\n\nconst wrapIntelligenceError = (error: unknown): Error => {\n if (error instanceof PeerMissingError) return error\n if (isPeerResolutionFailure(error)) {\n return new PeerMissingError('@agentskit/*', layer1InstallHint())\n }\n const message = error instanceof Error ? error.message : String(error)\n if (/fetch failed|econnrefused|enotfound|network|socket/i.test(message)) {\n return new Error(\n `Intelligence provider request failed (${message}).\\n` +\n `Check the model server (e.g. \\`ollama serve\\`) and Layer 1 peers:\\n ${layer1InstallHint()}`,\n )\n }\n return error instanceof Error ? error : new Error(message)\n}\n\nconst handoffFirstHint = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n question: string,\n): string | undefined => {\n if (config.intelligence?.chat?.handoffFirst === false) return undefined\n const tokens = question\n .toLowerCase()\n .split(/[^a-z0-9@/_-]+/)\n .filter((t) => t.length >= 2)\n const packages = index.lookup?.packages ?? []\n const hit = packages.find((id) => tokens.includes(id.toLowerCase()))\n if (!hit) return undefined\n try {\n const handoff = runQuery(index, config, { kind: 'ownership', id: hit, agent: true })\n return [\n '## Deterministic AgentHandoff (prefer for edits)',\n '```json',\n JSON.stringify(handoff, null, 2),\n '```',\n 'Use startHere / editRoots / checks before broad exploration.',\n ].join('\\n')\n } catch {\n return undefined\n }\n}\n\nconst systemPrompt = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n provider: string,\n model: string | undefined,\n question?: string,\n): string => {\n const prefix = question ? handoffFirstHint(index, config, question) : undefined\n return [\n 'You are a documentation assistant for this repository (doc-bridge).',\n 'Prefer deterministic AgentHandoff fields for code edits.',\n 'Cite file paths from retrieved context.',\n `Provider: ${provider}${model ? ` / ${model}` : ''}.`,\n 'If unsure, suggest: ak-docs query ownership <id> --agent or MCP handoff.resolve.',\n prefix ?? '',\n ]\n .filter(Boolean)\n .join('\\n\\n')\n}\n\nexport const runChatOnce = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n question: string,\n): Promise<{ content: string; handoffPrefixed: boolean }> => {\n try {\n const { adapter, provider, model } = await resolveIntelligenceRuntime(config)\n const core = await importPeer<typeof import('@agentskit/core')>('@agentskit/core')\n const rag = await createDocBridgeRag(root, config, index)\n await rag.ingest()\n\n const controller = core.createChatController({\n adapter,\n retriever: rag.retriever,\n system: systemPrompt(index, config, provider, model, question),\n })\n\n const result = await controller.send(question)\n const content =\n typeof result?.content === 'string' ? result.content : JSON.stringify(result, null, 2)\n\n return {\n content,\n handoffPrefixed: Boolean(handoffFirstHint(index, config, question)),\n }\n } catch (error) {\n throw wrapIntelligenceError(error)\n }\n}\n\nexport const startInkChat = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n): Promise<void> => {\n try {\n const { adapter, provider, model } = await resolveIntelligenceRuntime(config)\n const rag = await createDocBridgeRag(root, config, index)\n await rag.ingest()\n\n const React = await importPeer<typeof import('react')>('react')\n const ink = await importPeer<typeof import('ink')>('ink')\n const agentskitInk = await importPeer<typeof import('@agentskit/ink')>('@agentskit/ink')\n\n const App = () => {\n const chat = agentskitInk.useChat({\n adapter,\n retriever: rag.retriever,\n system: systemPrompt(index, config, provider, model),\n })\n\n return React.createElement(\n agentskitInk.ChatContainer as never,\n null,\n ...chat.messages.map((msg) =>\n React.createElement(agentskitInk.Message as never, {\n key: msg.id,\n message: msg,\n } as never),\n ),\n React.createElement(agentskitInk.InputBar as never, {\n chat,\n placeholder: 'Ask about project docs (handoff-first RAG)…',\n } as never),\n )\n }\n\n const instance = ink.render(React.createElement(App))\n await instance.waitUntilExit()\n } catch (error) {\n throw wrapIntelligenceError(error)\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { firstHeading, firstParagraph, slugFromPath } from '../lib/markdown.js'\nimport { toPosix } from '../lib/paths.js'\nimport { walkFiles } from '../lib/walk.js'\nimport type { MemoryCandidateV1 } from '../schemas/memory-candidate.js'\n\nconst memoryFact = (raw: string, id: string): string =>\n firstParagraph(raw) ?? firstHeading(raw) ?? id\n\nconst relativePath = (root: string, abs: string): string =>\n toPosix(abs).replace(`${toPosix(root)}/`, '')\n\nconst ingestMarkdownDir = (\n root: string,\n dir: string,\n source: MemoryCandidateV1['source'],\n confidence: number,\n): MemoryCandidateV1[] => {\n if (!existsSync(dir)) return []\n\n return walkFiles(dir, { extensions: ['.md', '.mdc'] }).map((abs) => {\n const rel = relativePath(root, abs)\n const raw = readFileSync(abs, 'utf8')\n const id = slugFromPath(rel)\n return {\n schemaVersion: 1,\n id,\n source,\n rawPath: rel,\n fact: memoryFact(raw, id),\n suggestedType: 'project',\n confidence,\n references: [],\n }\n })\n}\n\nexport const ingestCursorRules = (root: string): MemoryCandidateV1[] => {\n const dir = join(root, '.cursor', 'rules')\n return ingestMarkdownDir(root, dir, 'cursor', 0.6)\n}\n\nexport const ingestAgentMemory = (root: string): MemoryCandidateV1[] =>\n ingestMarkdownDir(root, join(root, '.agent-memory'), 'agent-memory', 0.7)\n\nexport const ingestMemoryCandidates = (root: string): MemoryCandidateV1[] => [\n ...ingestAgentMemory(root),\n ...ingestCursorRules(root),\n]\n","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport type { MemoryCandidateV1 } from '../schemas/memory-candidate.js'\nimport { searchIndex } from '../query/search.js'\n\nexport type MemoryRoute = 'agent' | 'human' | 'playbook' | 'discard'\n\nexport type MemoryClassification = {\n readonly candidate: MemoryCandidateV1\n readonly route: MemoryRoute\n readonly reason: string\n readonly target?: string\n readonly duplicateOf?: string\n}\n\nexport type SafetyFinding = {\n readonly candidateId: string\n readonly kind: 'secret' | 'private-email'\n readonly message: string\n}\n\nexport type MemoryPromotionDraft = {\n readonly ok: boolean\n readonly title: string\n readonly body: string\n readonly findings: SafetyFinding[]\n readonly classifications: MemoryClassification[]\n}\n\nconst packageOwnership = /\\b(?:package|module)\\s+([a-z0-9._/-]+)\\s+(?:owns|owner|responsible|routes?)\\b/i\nconst secretPattern = /\\b(?:api[_-]?key|token|secret|password)\\s*[:=]\\s*\\S+/i\nconst privateEmailPattern = /\\b[A-Z0-9._%+-]+@(?!example\\.com\\b)[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i\n\nconst classifyRoute = (fact: string): Pick<MemoryClassification, 'route' | 'reason'> => {\n if (/\\b(noise|scratch|ignore|discard)\\b/i.test(fact)) {\n return { route: 'discard', reason: 'marked as noise' }\n }\n if (/\\b(playbook|pattern|principle|best practice)\\b/i.test(fact)) {\n return { route: 'playbook', reason: 'generalizable pattern' }\n }\n if (/\\b(user-facing|human guide|docs site|tutorial|guide)\\b/i.test(fact)) {\n return { route: 'human', reason: 'user-facing documentation' }\n }\n return { route: 'agent', reason: 'project convention or ownership note' }\n}\n\nexport const classifyMemoryCandidates = (\n candidates: readonly MemoryCandidateV1[],\n index: DocBridgeIndexV1,\n): MemoryClassification[] =>\n candidates.map((candidate) => {\n const duplicate = searchIndex(index, candidate.fact, 1)[0]\n const targetMatch = packageOwnership.exec(candidate.fact)\n const route = classifyRoute(candidate.fact)\n return {\n candidate,\n ...route,\n ...(targetMatch?.[1] ? { target: targetMatch[1] } : {}),\n ...(duplicate && duplicate.score >= 16 ? { duplicateOf: duplicate.path } : {}),\n }\n })\n\nexport const scanMemorySafety = (\n classifications: readonly MemoryClassification[],\n): SafetyFinding[] =>\n classifications.flatMap(({ candidate }) => {\n const findings: SafetyFinding[] = []\n if (secretPattern.test(candidate.fact)) {\n findings.push({\n candidateId: candidate.id,\n kind: 'secret',\n message: 'Potential secret-like value in memory fact',\n })\n }\n if (privateEmailPattern.test(candidate.fact)) {\n findings.push({\n candidateId: candidate.id,\n kind: 'private-email',\n message: 'Potential private email in memory fact',\n })\n }\n return findings\n })\n\nexport const draftMemoryPromotion = (\n classifications: readonly MemoryClassification[],\n): MemoryPromotionDraft => {\n const findings = scanMemorySafety(classifications)\n const safe = findings.length === 0\n const lines = classifications.map(({ candidate, route, reason, target, duplicateOf }) =>\n [\n `- ${candidate.id}: ${route}`,\n `reason=${reason}`,\n target ? `target=${target}` : undefined,\n duplicateOf ? `duplicateOf=${duplicateOf}` : undefined,\n `fact=${candidate.fact}`,\n ].filter(Boolean).join(' | '),\n )\n\n return {\n ok: safe,\n title: 'Draft doc-bridge memory promotion',\n body: [\n '# Draft doc-bridge memory promotion',\n '',\n safe ? 'Safety scan: pass.' : 'Safety scan: blocked. Redact findings before PR.',\n '',\n '## Candidates',\n '',\n ...lines,\n '',\n '## Policy',\n '',\n '- Draft only; never auto-merge.',\n '- Run doc-bridge gates before opening a PR.',\n ].join('\\n'),\n findings,\n classifications: [...classifications],\n }\n}\n","import { readFileSync, realpathSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\n\nimport { z, ZodError } from 'zod'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { retrieveDocBridgeChunks } from '../retriever/doc-bridge-retriever.js'\nimport { runGates } from '../gates/run-gates.js'\nimport { ingestMemoryCandidates } from '../memory/ingest.js'\nimport { classifyMemoryCandidates, draftMemoryPromotion } from '../memory/pipeline.js'\nimport { loadDocBridgeIndex } from '../query/load-index.js'\nimport { runQuery } from '../query/query.js'\nimport { searchIndex } from '../query/search.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\ntype JsonRpcRequest = {\n readonly jsonrpc?: '2.0'\n readonly id?: string | number | null\n readonly method?: string\n readonly params?: unknown\n}\n\ntype McpContext = {\n readonly root: string\n readonly config: DocBridgeConfigV1\n readonly loadIndex?: () => DocBridgeIndexV1\n}\n\nexport const MCP_TOOLS = [\n {\n name: 'handoff.resolve',\n description: 'Resolve a package or ownership id to an AgentHandoff.',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, kind: { type: 'string', enum: ['package', 'ownership'] } },\n required: ['id'],\n },\n },\n {\n name: 'doc.search',\n description: 'Search the deterministic doc-bridge index.',\n inputSchema: {\n type: 'object',\n properties: { term: { type: 'string' }, limit: { type: 'number' } },\n required: ['term'],\n },\n },\n {\n name: 'doc.get',\n description: 'Read an indexed agent documentation file by id or path.',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, path: { type: 'string' } },\n },\n },\n {\n name: 'gate.status',\n description: 'Run the index-freshness gate.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'retriever.query',\n description: 'Return local doc-bridge retriever chunks for a query.',\n inputSchema: {\n type: 'object',\n properties: { query: { type: 'string' }, limit: { type: 'number' } },\n required: ['query'],\n },\n },\n {\n name: 'memory.classify',\n description: 'Classify local memory candidates into agent/human/playbook/discard routes.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'memory.promoteDraft',\n description: 'Build a safe draft promotion body for local memory candidates.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'registry.topology',\n description: 'Return the doc-curator registry topology.',\n inputSchema: { type: 'object', properties: {} },\n },\n] as const\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value && typeof value === 'object' ? (value as Record<string, unknown>) : {}\n\nconst HandoffResolveArgsSchema = z.object({\n id: z.string().min(1),\n kind: z.enum(['package', 'ownership']).optional(),\n})\n\nconst DocSearchArgsSchema = z.object({\n term: z.string().min(1),\n limit: z.number().int().positive().max(100).optional(),\n})\n\nconst RetrieverQueryArgsSchema = z.object({\n query: z.string().min(1),\n limit: z.number().int().positive().max(100).optional(),\n})\n\nconst DocGetArgsSchema = z\n .object({\n id: z.string().min(1).optional(),\n path: z.string().min(1).optional(),\n })\n .refine((args) => args.id || args.path, 'doc.get requires id or path')\n\nconst parseToolArgs = <T>(tool: string, schema: z.ZodType<T>, value: unknown): T => {\n try {\n return schema.parse(value)\n } catch (error) {\n if (error instanceof ZodError) {\n throw new Error(`${tool} invalid arguments: ${error.issues.map((issue) => issue.message).join(', ')}`)\n }\n throw error\n }\n}\n\nconst textResult = (value: unknown) => ({\n content: [\n {\n type: 'text',\n text: typeof value === 'string' ? value : JSON.stringify(value, null, 2),\n },\n ],\n})\n\nconst findDocPath = (index: DocBridgeIndexV1, args: z.infer<typeof DocGetArgsSchema>): string => {\n if (args.path) {\n const doc = index.knowledge.find((entry) => entry.path === args.path)\n if (!doc) throw new Error(`Unknown indexed doc path \"${args.path}\"`)\n return doc.path\n }\n const id = args.id ?? ''\n const doc = index.knowledge.find((entry) => entry.id === args.id)\n if (!doc) throw new Error(`Unknown doc id \"${id}\"`)\n return doc.path\n}\n\nconst resolveDocPath = (root: string, relPath: string): string => {\n const rootAbs = realpathSync.native(root)\n const unresolved = resolve(rootAbs, relPath)\n const unresolvedRel = relative(rootAbs, unresolved)\n if (unresolvedRel.startsWith('..')) throw new Error('doc.get path escapes project root')\n const abs = realpathSync.native(unresolved)\n const rel = relative(rootAbs, abs)\n if (rel.startsWith('..')) throw new Error('doc.get path escapes project root')\n return abs\n}\n\nexport const handleMcpRequest = (ctx: McpContext, request: JsonRpcRequest): unknown => {\n if (request.method === 'initialize') {\n return {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {} },\n serverInfo: { name: 'ak-docs', version: PACKAGE_VERSION },\n }\n }\n\n if (request.method === 'tools/list') return { tools: MCP_TOOLS }\n\n if (request.method === 'tools/call') {\n const params = asRecord(request.params)\n const name = params.name\n const args = asRecord(params.arguments)\n const index = () => ctx.loadIndex?.() ?? loadDocBridgeIndex(ctx.root, ctx.config)\n\n if (name === 'handoff.resolve') {\n const parsed = parseToolArgs('handoff.resolve', HandoffResolveArgsSchema, args)\n return textResult(\n runQuery(index(), ctx.config, {\n kind: parsed.kind === 'package' ? 'package' : 'ownership',\n id: parsed.id,\n agent: true,\n }),\n )\n }\n\n if (name === 'doc.search') {\n const parsed = parseToolArgs('doc.search', DocSearchArgsSchema, args)\n return textResult(searchIndex(index(), parsed.term, parsed.limit ?? 20))\n }\n\n if (name === 'doc.get') {\n const relPath = findDocPath(index(), parseToolArgs('doc.get', DocGetArgsSchema, args))\n return textResult(readFileSync(resolveDocPath(ctx.root, relPath), 'utf8'))\n }\n\n if (name === 'gate.status') return textResult(runGates(ctx.root, ctx.config))\n\n if (name === 'retriever.query') {\n const parsed = parseToolArgs('retriever.query', RetrieverQueryArgsSchema, args)\n return textResult(retrieveDocBridgeChunks(index(), parsed.query, parsed.limit ? { limit: parsed.limit } : {}))\n }\n\n if (name === 'memory.classify') {\n return textResult(classifyMemoryCandidates(ingestMemoryCandidates(ctx.root), index()))\n }\n\n if (name === 'memory.promoteDraft') {\n return textResult(draftMemoryPromotion(classifyMemoryCandidates(ingestMemoryCandidates(ctx.root), index())))\n }\n\n if (name === 'registry.topology') {\n return textResult({\n id: 'doc-curator',\n delegates: ['docs-chat', 'knowledge-promoter', 'code-review'],\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query'],\n steps: ['classify', 'draft', 'verify', 'review'],\n mergePolicy: { autoMerge: false, requiresHuman: true },\n })\n }\n\n throw new Error(`Unknown tool \"${String(name)}\"`)\n }\n\n if (request.method?.startsWith('notifications/')) return undefined\n throw new Error(`Unsupported MCP method \"${request.method ?? ''}\"`)\n}\n\nconst writeFrame = (payload: unknown): void => {\n const body = JSON.stringify(payload)\n process.stdout.write(`Content-Length: ${Buffer.byteLength(body)}\\r\\n\\r\\n${body}`)\n}\n\nconst respond = (ctx: McpContext, request: JsonRpcRequest): void => {\n if (request.id === undefined) {\n try {\n handleMcpRequest(ctx, request)\n } catch {\n // Notifications do not get responses.\n }\n return\n }\n\n try {\n const result = handleMcpRequest(ctx, request)\n writeFrame({ jsonrpc: '2.0', id: request.id, result: result ?? {} })\n } catch (error) {\n writeFrame({\n jsonrpc: '2.0',\n id: request.id,\n error: { code: -32000, message: error instanceof Error ? error.message : String(error) },\n })\n }\n}\n\nexport const startMcpStdioServer = (ctx: McpContext): void => {\n let buffer = Buffer.alloc(0)\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk])\n while (true) {\n const headerEnd = buffer.indexOf('\\r\\n\\r\\n')\n if (headerEnd === -1) return\n const header = buffer.subarray(0, headerEnd).toString('utf8')\n const match = /content-length:\\s*(\\d+)/i.exec(header)\n if (!match?.[1]) {\n buffer = buffer.subarray(headerEnd + 4)\n continue\n }\n const length = Number(match[1])\n const bodyStart = headerEnd + 4\n const bodyEnd = bodyStart + length\n if (buffer.length < bodyEnd) return\n const raw = buffer.subarray(bodyStart, bodyEnd).toString('utf8')\n buffer = buffer.subarray(bodyEnd)\n respond(ctx, JSON.parse(raw) as JsonRpcRequest)\n }\n })\n process.stdin.resume()\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","readFileSync","writeFileSync","dirname","resolve","readFileSync","dirname","join","resolve","existsSync","readFileSync","join","readFileSync","join","join","join","join","readFileSync","projectName","existsSync","readFileSync","join","vm","readFileSync","join","parseFrontmatter","join","readFileSync","parseFrontmatter","existsSync","readFileSync","vm","item","join","existsSync","readFileSync","join","join","existsSync","readFileSync","existsSync","readFileSync","basename","join","existsSync","readdirSync","statSync","join","join","existsSync","readdirSync","statSync","join","existsSync","readFileSync","basename","readFileSync","join","dirname","existsSync","readFileSync","resolve","tokenize","resolve","existsSync","readFileSync","readFileSync","existsSync","readFileSync","join","resolve","z","z","z","z","join","existsSync","readFileSync","readFileSync","join","join","readFileSync","join","join","readFileSync","existsSync","readFileSync","join","existsSync","readFileSync","join","readFileSync","resolve","z","z","doc","resolve","readFileSync","resolve","readFileSync","existsSync","mkdirSync","dirname","writeFileSync","index","items"]}
1
+ {"version":3,"sources":["../../src/cli/program.ts","../../src/config/load-config.ts","../../src/config/defaults.ts","../../src/config/schema.ts","../../src/index-builder/build-index.ts","../../src/lib/paths.ts","../../src/lib/package-manager.ts","../../src/index-builder/scan-corpus.ts","../../src/lib/markdown.ts","../../src/lib/walk.ts","../../src/index-builder/build-handoffs.ts","../../src/version.ts","../../src/index-builder/capabilities.ts","../../src/index-builder/content-hash.ts","../../src/index-builder/llms-txt.ts","../../src/index-builder/human-adapters/docusaurus.ts","../../src/index-builder/human-adapters/core.ts","../../src/index-builder/human-adapters/fumadocs.ts","../../src/index-builder/human-adapters/plain-markdown.ts","../../src/index-builder/human-adapters/index.ts","../../src/index-builder/plugins/pnpm-monorepo.ts","../../src/lib/glob-expand.ts","../../src/federation/llms.ts","../../src/query/search.ts","../../src/retriever/doc-bridge-retriever.ts","../../src/gates/run-gates.ts","../../src/query/load-index.ts","../../src/schemas/agent-handoff.ts","../../src/schemas/doc-bridge-index.ts","../../src/schemas/memory-candidate.ts","../../src/validate.ts","../../src/query/query.ts","../../src/intelligence/adapter.ts","../../src/intelligence/peers.ts","../../src/intelligence/rag.ts","../../src/intelligence/chat.ts","../../src/memory/ingest.ts","../../src/memory/pipeline.ts","../../src/memory/github-pr.ts","../../src/index-builder/watch-index.ts","../../src/doctor/badge.ts","../../src/playbook/doc-bridge-pattern.ts","../../src/cli/demo.ts","../../src/mcp/install.ts","../../src/doctor/run-doctor.ts","../../src/mcp/server.ts"],"sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { createInterface } from 'node:readline/promises'\n\nimport { loadConfig, projectRootFromConfigPath } from '../config/load-config.js'\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { discoverPnpmPackages } from '../index-builder/plugins/pnpm-monorepo.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { retrieveHybridChunks } from '../federation/llms.js'\nimport { runGates, type GateId } from '../gates/run-gates.js'\nimport { runChatOnce, startInkChat } from '../intelligence/chat.js'\nimport { PeerMissingError, layer1InstallHint } from '../intelligence/peers.js'\nimport { createDocBridgeRag } from '../intelligence/rag.js'\nimport { firstHeading, firstParagraph } from '../lib/markdown.js'\nimport { ingestMemoryCandidates } from '../memory/ingest.js'\nimport { classifyMemoryCandidates, draftMemoryPromotion } from '../memory/pipeline.js'\nimport { promoteMemoryToGithubPr } from '../memory/github-pr.js'\nimport { watchDocBridgeIndex } from '../index-builder/watch-index.js'\nimport {\n formatDoctorBadgeJson,\n formatDoctorBadgeMarkdown,\n} from '../doctor/badge.js'\nimport { docBridgePatternMarkdown, docBridgePatternPayload } from '../playbook/doc-bridge-pattern.js'\nimport { formatDemoText, runDemo, withDemoWorkspace, type DemoFixture } from './demo.js'\nimport { formatDoctorText, runDoctor } from '../doctor/run-doctor.js'\nimport { installMcpConfig, mcpSnippet } from '../mcp/install.js'\nimport { startMcpStdioServer } from '../mcp/server.js'\nimport { IndexNotFoundError, loadDocBridgeIndex } from '../query/load-index.js'\nimport { runQuery, type QueryKind } from '../query/query.js'\nimport { searchIndex } from '../query/search.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { parseAgentHandoff, parseDocBridgeConfig } from '../validate.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\ntype Command =\n | 'help'\n | 'version'\n | 'validate-config'\n | 'validate-handoff'\n | 'init'\n | 'bootstrap'\n | 'memory'\n | 'playbook'\n | 'registry'\n | 'index'\n | 'gate'\n | 'mcp'\n | 'doctor'\n | 'demo'\n | 'query'\n | 'search'\n | 'retrieve'\n | 'ask'\n | 'chat'\n | 'rag'\n | 'list'\n\nconst usage = `ak-docs — human↔agent documentation bridge (@agentskit/doc-bridge)\n\nCore (no API key):\n ak-docs init [--demo] [--scaffold-workspaces]\n ak-docs demo [--fixture example|monorepo] [--text] [--in-project]\n ak-docs doctor [--text] [--badge] [--write-badge]\n ak-docs index [--watch]\n ak-docs query <package|ownership|intent|change> <id> [--agent] [--text]\n ak-docs search <term> [--agent] [--text]\n ak-docs list <packages|intents|changes|knowledge> [--text]\n ak-docs ask [question] local consult (no LLM)\n ak-docs gate run [gate-id]\n ak-docs mcp\n ak-docs mcp install --cursor | --claude\n ak-docs memory ingest|classify|promote [--pr] [--dry-run]\n ak-docs bootstrap agent-docs\n ak-docs validate-config | validate-handoff <file>\n\nIntelligence (optional AgentsKit peers):\n ak-docs rag ingest|search <query>\n ak-docs chat terminal chat (Ink + RAG)\n ak-docs ask <question> --chat one-shot grounded answer\n\nAdvanced / ecosystem:\n ak-docs retrieve <query>\n ak-docs registry topology\n ak-docs playbook draft | pattern [--text]\n\nGlobal flags:\n -h, --help --version\n --config <path> (project root = config file directory)\n --agent --json --text --chat --demo\n`\n\nconst QUERY_KINDS = new Set<QueryKind>(['package', 'ownership', 'intent', 'change', 'search'])\nconst LIST_KINDS = new Set(['packages', 'intents', 'changes', 'knowledge'])\nconst GATE_IDS = new Set<GateId>(['index-freshness', 'human-guide-links', 'okf-type', 'docs-style'])\n\nconst parseArgs = (argv: readonly string[]) => {\n const flags = new Set<string>()\n let configPath: string | undefined\n const positional: string[] = []\n\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i]\n if (!arg) continue\n if (arg === '--config') {\n configPath = argv[i + 1]\n i += 1\n continue\n }\n if (arg.startsWith('-')) {\n flags.add(arg)\n continue\n }\n positional.push(arg)\n }\n\n let command: Command = 'help'\n if (flags.has('--version') || flags.has('-V')) command = 'version'\n else if (flags.has('--help') || flags.has('-h')) command = 'help'\n else if (positional[0] === 'validate-config') command = 'validate-config'\n else if (positional[0] === 'validate-handoff') command = 'validate-handoff'\n else if (positional[0] === 'init') command = 'init'\n else if (positional[0] === 'bootstrap') command = 'bootstrap'\n else if (positional[0] === 'memory') command = 'memory'\n else if (positional[0] === 'playbook') command = 'playbook'\n else if (positional[0] === 'registry') command = 'registry'\n else if (positional[0] === 'index') command = 'index'\n else if (positional[0] === 'gate') command = 'gate'\n else if (positional[0] === 'mcp') command = 'mcp'\n else if (positional[0] === 'doctor') command = 'doctor'\n else if (positional[0] === 'demo') command = 'demo'\n else if (positional[0] === 'query') command = 'query'\n else if (positional[0] === 'search') command = 'search'\n else if (positional[0] === 'retrieve') command = 'retrieve'\n else if (positional[0] === 'ask') command = 'ask'\n else if (positional[0] === 'chat') command = 'chat'\n else if (positional[0] === 'rag') command = 'rag'\n else if (positional[0] === 'list') command = 'list'\n\n return { command, flags, configPath, positional }\n}\n\nconst writeJson = (payload: unknown): void => {\n process.stdout.write(`${JSON.stringify(payload, null, 2)}\\n`)\n}\n\nconst writeLines = (lines: readonly string[]): void => {\n process.stdout.write(lines.length ? `${lines.join('\\n')}\\n` : '')\n}\n\nconst textValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'Not found'\n if (typeof value === 'string') return value\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return JSON.stringify(value, null, 2)\n}\n\nconst writeTextQuery = (payload: unknown): void => {\n if (!payload || typeof payload !== 'object' || !('data' in payload)) {\n writeLines([textValue(payload)])\n return\n }\n\n const result = payload as { readonly type?: unknown; readonly data?: unknown }\n if (result.type === 'search') {\n const data = result.data as {\n readonly term?: unknown\n readonly count?: unknown\n readonly matches?: readonly {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n }[]\n }\n const matches = data.matches ?? []\n writeLines([\n `Search: ${String(data.term ?? '')}`,\n `Matches: ${String(data.count ?? matches.length)}`,\n ...(matches.length\n ? matches.map((match) =>\n formatSearchMatch(match as { type: string; id: string; path: string; summary?: string }),\n )\n : [' (none)']),\n ])\n return\n }\n\n writeLines([textValue(result.data)])\n}\n\nconst formatSearchMatch = (match: {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n readonly score?: number\n}): string => {\n const summary = match.summary ? match.summary.replace(/\\s+/g, ' ').slice(0, 100) : ''\n const score = typeof match.score === 'number' ? ` score=${match.score}` : ''\n return ` [${match.type}] ${match.id}${score}\\n ${match.path}${summary ? `\\n ${summary}` : ''}`\n}\n\nconst writeTextSearch = (\n term: string,\n matches: readonly {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n readonly score?: number\n }[],\n): void => {\n writeLines([\n `Search: ${term}`,\n `Matches: ${matches.length}`,\n ...(matches.length ? matches.map(formatSearchMatch) : [' (none)']),\n ])\n}\n\nconst handoffSummaryLines = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n ownerId: string,\n): string[] => {\n try {\n const handoff = runQuery(index, config, { kind: 'ownership', id: ownerId, agent: true })\n if (!handoff || typeof handoff !== 'object' || !('editRoots' in handoff)) return []\n const payload = handoff as {\n startHere?: string\n editRoots?: string[]\n checks?: string[]\n humanDoc?: string | null\n bridge?: { humanDoc?: string; action?: string }\n }\n const bridgeLine =\n payload.bridge?.humanDoc === 'missing'\n ? `Bridge: human guide missing → ${payload.bridge.action ?? 'ak-docs bootstrap agent-docs'}`\n : payload.humanDoc\n ? `Bridge: ${payload.humanDoc}`\n : 'Bridge: (no human plugin configured)'\n return [\n '',\n 'Handoff preview',\n ` start: ${payload.startHere ?? '(unknown)'}`,\n ` edit: ${(payload.editRoots ?? []).join(', ') || '(none)'}`,\n ` checks: ${(payload.checks ?? []).join(' · ') || '(none)'}`,\n ` ${bridgeLine}`,\n ]\n } catch {\n return []\n }\n}\n\nconst writeAsk = (\n question: string,\n matches: ReturnType<typeof searchIndex>,\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n): void => {\n // Prefer ownership match for routing questions\n const owner =\n matches.find((match) => match.type === 'ownership') ??\n matches.find((match) => Boolean(index.lookup?.ownership?.[match.id]))\n const best = owner ?? matches[0]\n const ownerId =\n best && (best.type === 'ownership' || index.lookup?.ownership?.[best.id]) ? best.id : undefined\n const bestQuery = ownerId\n ? `ak-docs query ownership ${ownerId} --agent`\n : 'ak-docs list knowledge --text'\n writeLines([\n `Question: ${question}`,\n best ? `Best match: ${best.type} ${best.id} (${best.path})` : 'Best match: none',\n ...(ownerId ? handoffSummaryLines(index, config, ownerId) : []),\n '',\n 'Matches:',\n ...(\n matches.length\n ? matches.slice(0, 5).map(formatSearchMatch)\n : [' No local matches. Try: ak-docs search <term>']\n ),\n '',\n 'Next commands:',\n ...(best\n ? [\n `ak-docs search \"${question}\" --agent`,\n bestQuery,\n ...(ownerId ? [`ak-docs doctor --text`] : []),\n ]\n : ['ak-docs list knowledge --text', 'ak-docs doctor --text']),\n ])\n}\n\nconst readIndexedDoc = (root: string, config: DocBridgeConfigV1, idOrPath: string): string => {\n const index = loadDocBridgeIndex(root, config)\n const entry = index.knowledge.find((doc) => doc.id === idOrPath || doc.path === idOrPath)\n if (!entry) throw new Error(`Unknown indexed doc \"${idOrPath}\". Try: search ${idOrPath}`)\n\n const abs = resolve(root, entry.path)\n const rootAbs = resolve(root)\n if (abs !== rootAbs && !abs.startsWith(`${rootAbs}/`)) {\n throw new Error(`Indexed doc escapes project root: ${entry.path}`)\n }\n return readFileSync(abs, 'utf8')\n}\n\nconst runAskRepl = async (root: string, config: DocBridgeConfigV1): Promise<number> => {\n const index = loadDocBridgeIndex(root, config)\n const rl = createInterface({ input: process.stdin, output: process.stdout, terminal: true })\n try {\n for (;;) {\n const line = (await rl.question('ak-docs> ')).trim()\n if (!line) continue\n if (line === 'exit' || line === 'quit') return 0\n\n const [command, ...rest] = line.split(/\\s+/)\n const value = rest.join(' ').trim()\n try {\n if (command === 'search') {\n writeTextSearch(value, searchIndex(index, value))\n } else if (command === 'read' || command === 'open') {\n process.stdout.write(`${readIndexedDoc(root, config, value).slice(0, 8000)}\\n`)\n } else if (command === 'resolve') {\n writeJson(runQuery(index, config, { kind: 'ownership', id: value, agent: true }))\n } else if (command === 'gate') {\n const gateId = value || undefined\n writeJson(runGates(root, config, gateId ? [gateId as GateId] : undefined))\n } else {\n writeAsk(line, searchIndex(index, line, 8), index, config)\n }\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n }\n }\n } finally {\n rl.close()\n }\n}\n\nconst wantsTextOutput = (flags: ReadonlySet<string>, config: DocBridgeConfigV1): boolean =>\n !flags.has('--agent') &&\n (flags.has('--text') || (!flags.has('--json') && config.surfaces?.cli?.defaultFormat === 'text'))\n\nconst loadProject = (configPath?: string) => {\n const loadOpts = configPath ? { explicitPath: configPath } : {}\n const { config, path } = loadConfig(loadOpts)\n parseDocBridgeConfig(config)\n const root = projectRootFromConfigPath(path, config.project?.root)\n return { config, configPath: path, root }\n}\n\nconst indexDiagnostics = (config: DocBridgeConfigV1, result: ReturnType<typeof buildDocBridgeIndex>): string[] => {\n const diagnostics: string[] = []\n const onlyDoc = result.index.knowledge.length === 1 ? result.index.knowledge[0] : undefined\n if (onlyDoc?.path === config.corpus.agent.index) {\n diagnostics.push(\n `Only the starter ${config.corpus.agent.index} was indexed.`,\n `Add agent docs under ${config.corpus.agent.root}/, then run ak-docs index again.`,\n )\n }\n const handoffCount = Object.keys(result.index.handoffs ?? {}).length\n if (handoffCount === 0) {\n diagnostics.push(\n 'No ownership handoffs yet. Add routing.options.ownership, package frontmatter (package + editRoot), or a monorepo plugin.',\n )\n }\n return diagnostics\n}\n\nconst diagnosticNextCommands = (\n config: DocBridgeConfigV1,\n result: ReturnType<typeof buildDocBridgeIndex>,\n): string[] => {\n const handoffIds = Object.keys(result.index.handoffs ?? {})\n if (handoffIds[0]) {\n return [\n `ak-docs query package ${handoffIds[0]} --agent`,\n `ak-docs list packages --text`,\n 'ak-docs mcp',\n ]\n }\n return [\n `mkdir -p ${config.corpus.agent.root}/packages`,\n `edit ${config.corpus.agent.root}/packages/<module>.md # frontmatter: package + editRoot`,\n 'ak-docs index',\n ]\n}\n\nconst writeIfMissing = (path: string, contents: string): boolean => {\n if (existsSync(path)) return false\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, contents, 'utf8')\n return true\n}\n\nconst demoOwnership = {\n example: {\n path: 'src',\n purpose: 'Starter ownership target — replace with your real modules',\n checks: ['npm test'],\n agentDoc: 'docs/for-agents/packages/example.md',\n },\n}\n\nconst initConfigObject = (withDemo: boolean) => ({\n schemaVersion: 1 as const,\n corpus: { agent: { root: 'docs/for-agents' } },\n ...(withDemo\n ? {\n routing: {\n options: {\n ownership: demoOwnership,\n },\n },\n }\n : {}),\n gates: { preset: 'minimal' as const },\n})\n\nconst initConfigContents = (path: string, withDemo: boolean): string => {\n if (path.endsWith('.ts') || path.endsWith('.mts')) {\n return [\n \"import { defineConfig } from '@agentskit/doc-bridge/config'\",\n '',\n 'export default defineConfig({',\n ' schemaVersion: 1,',\n \" corpus: { agent: { root: 'docs/for-agents' } },\",\n ...(withDemo\n ? [\n ' routing: {',\n ' options: {',\n ' ownership: {',\n \" example: { path: 'src', purpose: 'Starter ownership target', checks: ['npm test'], agentDoc: 'docs/for-agents/packages/example.md' },\",\n ' },',\n ' },',\n ' },',\n ]\n : []),\n \" gates: { preset: 'minimal' },\",\n '})',\n '',\n ].join('\\n')\n }\n\n return `${JSON.stringify(initConfigObject(withDemo), null, 2)}\\n`\n}\n\nconst exampleAgentDoc = `---\ntype: package\npackage: example\neditRoot: src\nchecks: [npm test]\n---\n\n# example\n\nStarter agent doc generated by \\`ak-docs init --demo\\`.\n\nDescribe ownership, boundaries, and how agents should change this module.\n\n## Checks\n\n- \\`npm test\\`\n`\n\nconst agentsMdSnippet = `# AGENTS.md\n\n## Documentation routing (doc-bridge)\n\nBefore editing a package or module:\n\n1. Run \\`ak-docs query ownership <id> --agent\\` (or MCP tool \\`handoff.resolve\\`)\n2. Read \\`startHere\\` and respect \\`editRoots\\` + \\`checks\\`\n3. Prefer agent docs under \\`docs/for-agents/\\`; human site links appear as \\`humanDoc\\`\n\nLocal consult without LLM: \\`ak-docs ask \"<question>\"\\`\nOptional grounded chat (AgentsKit peers): \\`ak-docs chat\\`\n`\n\nconst workspaceDocDraft = (id: string, path: string): string => [\n '---',\n 'type: package',\n 'draft: true',\n `package: ${id}`,\n `editRoot: ${path}`,\n '---',\n '',\n `# ${id}`,\n '',\n 'Draft generated by `ak-docs init --scaffold-workspaces`.',\n '',\n '## Ownership',\n '',\n `- Package: \\`${path}\\``,\n '',\n '## Notes',\n '',\n '- TODO: describe responsibility, boundaries, and checks.',\n '',\n].join('\\n')\n\nconst scaffoldWorkspaceDocs = (\n root: string,\n config: DocBridgeConfigV1,\n): { created: string[]; skipped: string[] } => {\n const created: string[] = []\n const skipped: string[] = []\n for (const pkg of discoverPnpmPackages(root, config)) {\n const path = resolve(root, config.corpus.agent.root, 'packages', `${pkg.id}.md`)\n if (writeIfMissing(path, workspaceDocDraft(pkg.id, pkg.path))) created.push(path)\n else skipped.push(path)\n }\n return { created, skipped }\n}\n\nconst bootstrapAgentDocs = (\n root: string,\n config: DocBridgeConfigV1,\n): { created: string[]; skipped: string[] } => {\n const created: string[] = []\n const skipped: string[] = []\n for (const doc of scanHumanDocRecords(root, config)) {\n const raw = readFileSync(doc.path, 'utf8')\n const body = raw.replace(/^---\\n[\\s\\S]*?\\n---\\n?/, '')\n const title = firstHeading(body) ?? doc.id\n const description = firstParagraph(body)\n const draftPath = resolve(root, config.corpus.agent.root, 'human', `${doc.id}.md`)\n const draft = [\n '---',\n 'type: knowledge',\n 'draft: true',\n `id: ${doc.id}`,\n `humanDoc: ${doc.url}`,\n '---',\n '',\n `# ${title}`,\n '',\n 'Draft generated by `ak-docs bootstrap agent-docs` from existing human docs.',\n '',\n ...(description ? ['## Source summary', '', description, ''] : []),\n '## Review checklist',\n '',\n '- TODO: confirm ownership, edit roots, and checks.',\n '- TODO: move this draft to the right agent-doc location if needed.',\n '',\n ].join('\\n')\n if (writeIfMissing(draftPath, draft)) created.push(draftPath)\n else skipped.push(draftPath)\n }\n return { created, skipped }\n}\n\nconst registryTopology = () => ({\n id: 'doc-curator',\n delegates: ['docs-chat', 'knowledge-promoter', 'code-review'],\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query'],\n steps: ['classify', 'draft', 'verify', 'review'],\n mergePolicy: { autoMerge: false, requiresHuman: true },\n})\n\nexport const runCli = (argv: readonly string[]): number | undefined | Promise<number> => {\n const { command, flags, configPath, positional } = parseArgs(argv)\n\n if (command === 'help') {\n process.stdout.write(usage)\n return 0\n }\n\n if (command === 'version') {\n process.stdout.write(`ak-docs ${PACKAGE_VERSION} (@agentskit/doc-bridge)\\n`)\n return 0\n }\n\n if (command === 'validate-config') {\n try {\n const { config, path } = loadConfig(\n configPath ? { explicitPath: configPath } : {},\n )\n parseDocBridgeConfig(config)\n writeJson({ ok: true, path, schemaVersion: config.schemaVersion })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'validate-handoff') {\n const file = positional[1]\n if (!file) {\n process.stderr.write('Missing handoff JSON file path.\\n')\n return 1\n }\n try {\n const abs = resolve(file)\n const raw = readFileSync(abs, 'utf8')\n const handoff = parseAgentHandoff(JSON.parse(raw) as unknown)\n writeJson({ ok: true, handoff })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'init') {\n const root = process.cwd()\n const withDemo = flags.has('--demo') || !flags.has('--no-demo')\n const configFile = resolve(root, configPath ?? 'doc-bridge.config.json')\n const docsIndex = resolve(root, 'docs/for-agents/INDEX.md')\n const exampleDoc = resolve(root, 'docs/for-agents/packages/example.md')\n const agentsMd = resolve(root, 'AGENTS.md')\n const configWritten = writeIfMissing(configFile, initConfigContents(configFile, withDemo))\n const indexWritten = writeIfMissing(\n docsIndex,\n withDemo\n ? '# Agent docs index\\n\\n- [example](./packages/example.md) — starter ownership target\\n'\n : '# Agent docs index\\n\\nStart here for ownership, architecture, and task handoffs.\\n',\n )\n const exampleWritten = withDemo ? writeIfMissing(exampleDoc, exampleAgentDoc) : false\n const agentsWritten = writeIfMissing(agentsMd, agentsMdSnippet)\n if (withDemo) writeIfMissing(resolve(root, 'src/.gitkeep'), '')\n const scaffold = flags.has('--scaffold-workspaces')\n ? scaffoldWorkspaceDocs(root, loadProject(configFile).config)\n : undefined\n writeJson({\n ok: true,\n configPath: configFile,\n demo: withDemo,\n created: {\n config: configWritten,\n index: indexWritten,\n ...(withDemo ? { exampleDoc: exampleWritten, srcStub: true } : {}),\n agentsMd: agentsWritten,\n ...(scaffold ? { workspaceDocs: scaffold.created } : {}),\n },\n ...(scaffold ? { skipped: { workspaceDocs: scaffold.skipped } } : {}),\n nextCommands: withDemo\n ? ['ak-docs index', 'ak-docs query package example --agent', 'ak-docs list packages --text']\n : ['ak-docs index', 'ak-docs list knowledge --text'],\n })\n return 0\n }\n\n if (command === 'bootstrap') {\n if (positional[1] !== 'agent-docs') {\n process.stderr.write('Usage: ak-docs bootstrap agent-docs [--config <path>]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const result = bootstrapAgentDocs(root, config)\n writeJson({ ok: true, ...result })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'memory') {\n if (!['ingest', 'classify', 'promote'].includes(positional[1] ?? '')) {\n process.stderr.write(\n 'Usage: ak-docs memory <ingest|classify|promote> [--pr] [--dry-run] [--force] [--config <path>]\\n',\n )\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const candidates = ingestMemoryCandidates(root)\n if (positional[1] === 'ingest') {\n writeJson({ ok: true, count: candidates.length, candidates })\n return 0\n }\n const index = loadDocBridgeIndex(root, config)\n const classifications = classifyMemoryCandidates(candidates, index)\n if (positional[1] === 'classify') {\n writeJson({ ok: true, count: classifications.length, classifications })\n return 0\n }\n const draft = draftMemoryPromotion(classifications)\n if (flags.has('--pr') || flags.has('--github')) {\n const pr = promoteMemoryToGithubPr(root, draft, {\n dryRun: flags.has('--dry-run'),\n force: flags.has('--force'),\n })\n if (flags.has('--text')) {\n writeLines([\n pr.message,\n ...(pr.draftPath ? [`Draft: ${pr.draftPath}`] : []),\n ...(pr.prUrl ? [`PR: ${pr.prUrl}`] : []),\n ...(pr.commands.length ? ['', 'Commands:', ...pr.commands.map((cmd) => ` ${cmd}`)] : []),\n ])\n } else {\n writeJson({ ...draft, pr })\n }\n return pr.ok ? 0 : 1\n }\n writeJson(draft)\n return draft.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'registry') {\n if (positional[1] !== 'topology') {\n process.stderr.write('Usage: ak-docs registry topology\\n')\n return 1\n }\n writeJson(registryTopology())\n return 0\n }\n\n if (command === 'playbook') {\n const action = positional[1]\n if (action === 'pattern') {\n const payload = docBridgePatternPayload()\n if (flags.has('--text') || wantsTextOutput(flags, { schemaVersion: 1, corpus: { agent: { root: 'docs' } } } as DocBridgeConfigV1)) {\n process.stdout.write(`${docBridgePatternMarkdown()}\\n`)\n } else {\n writeJson(payload)\n }\n return 0\n }\n if (action !== 'draft') {\n process.stderr.write('Usage: ak-docs playbook draft | pattern [--text] [--config <path>]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const draft = draftMemoryPromotion(classifyMemoryCandidates(ingestMemoryCandidates(root), index))\n writeJson({\n ...draft,\n title: 'Draft Playbook feedback promotion',\n pattern: 'Doc Bridge Pattern',\n patternDoc: 'docs/playbook/doc-bridge-pattern.md',\n exportCommand: 'ak-docs playbook pattern --text',\n })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'index') {\n try {\n const { config, root, configPath: loadedConfigPath } = loadProject(configPath)\n if (flags.has('--watch')) {\n return watchDocBridgeIndex({\n root,\n config,\n configPath: loadedConfigPath,\n })\n }\n const result = buildDocBridgeIndex({ root, config })\n const diagnostics = indexDiagnostics(config, result)\n const handoffCount = Object.keys(result.index.handoffs ?? {}).length\n writeJson({\n ok: true,\n indexPath: result.indexPath,\n ...(result.llmsTxtPath ? { llmsTxtPath: result.llmsTxtPath } : {}),\n ...(result.capabilitiesPath ? { capabilitiesPath: result.capabilitiesPath } : {}),\n contentHash: result.index.contentHash,\n knowledgeCount: result.index.knowledge.length,\n packageCount: result.index.lookup?.packages.length ?? 0,\n handoffCount,\n ...(diagnostics.length ? { diagnostics } : {}),\n nextCommands: diagnosticNextCommands(config, result),\n })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'gate') {\n const action = positional[1]\n const gateId = positional[2] as GateId | undefined\n if (action !== 'run') {\n process.stderr.write('Usage: ak-docs gate run [index-freshness]\\n')\n return 1\n }\n if (gateId && !GATE_IDS.has(gateId)) {\n process.stderr.write(\n `Unsupported gate \"${gateId}\". Supported gates: index-freshness, human-guide-links, okf-type, docs-style\\n`,\n )\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const result = runGates(root, config, gateId ? [gateId] : undefined)\n writeJson(result)\n return result.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'mcp') {\n if (positional[1] === 'install') {\n const target = flags.has('--claude') ? 'claude' : flags.has('--cursor') ? 'cursor' : undefined\n if (!target) {\n process.stderr.write('Usage: ak-docs mcp install --cursor | --claude\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const result = installMcpConfig(root, target)\n if (wantsTextOutput(flags, config)) {\n writeLines([\n `Installed MCP server \"${result.serverName}\" for ${result.target}`,\n `Config: ${result.configPath}`,\n ...(result.created ? ['Created new config file'] : ['Merged into existing config']),\n '',\n 'Next steps:',\n ...result.nextSteps.map((step) => ` → ${step}`),\n ])\n } else {\n writeJson({ ...result, snippet: mcpSnippet(root) })\n }\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n try {\n const { config, root } = loadProject(configPath)\n startMcpStdioServer({ root, config })\n return undefined\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'doctor') {\n try {\n const { config, root } = loadProject(configPath)\n const report = runDoctor(root, config)\n if (flags.has('--write-badge')) {\n const badgePath = resolve(root, '.doc-bridge', 'coverage-badge.json')\n mkdirSync(dirname(badgePath), { recursive: true })\n writeFileSync(badgePath, `${formatDoctorBadgeJson(report.badge)}\\n`, 'utf8')\n }\n if (flags.has('--badge')) {\n writeLines([formatDoctorBadgeMarkdown(report.badge)])\n return 0\n }\n if (wantsTextOutput(flags, config)) writeLines(formatDoctorText(report))\n else writeJson(report)\n return report.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'demo') {\n const resolveDemoFixture = (): DemoFixture => {\n const fixtureFlagIndex = positional.indexOf('--fixture')\n if (fixtureFlagIndex >= 0) {\n const value = positional[fixtureFlagIndex + 1]\n if (value === 'monorepo' || value === 'example') return value\n }\n if (flags.has('--monorepo') || positional.includes('monorepo')) return 'monorepo'\n if (positional[1] === 'monorepo') return 'monorepo'\n return 'example'\n }\n const resolvedFixture = resolveDemoFixture()\n\n try {\n const useProject = flags.has('--in-project') || flags.has('--copy-fixture')\n if (!useProject) {\n const result = withDemoWorkspace(resolvedFixture, (root, config) =>\n runDemo(root, config, resolvedFixture),\n )\n const textMode =\n flags.has('--text') || (!flags.has('--json') && !flags.has('--agent'))\n if (textMode) writeLines(formatDemoText(result))\n else writeJson(result)\n return result.ok ? 0 : 1\n }\n\n const { config, root } = loadProject(configPath)\n const result = runDemo(root, config, resolvedFixture, { copyFixture: flags.has('--copy-fixture') })\n if (wantsTextOutput(flags, config)) writeLines(formatDemoText(result))\n else writeJson(result)\n return result.ok ? 0 : 1\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'query') {\n const kind = positional[1] as QueryKind | undefined\n const id = positional[2]\n if (!kind || !QUERY_KINDS.has(kind) || kind === 'search') {\n process.stderr.write('Usage: ak-docs query <package|ownership|intent|change> <id> [--agent]\\n')\n return 1\n }\n if (!id) {\n process.stderr.write(`Missing id for query kind \"${kind}\".\\n`)\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const result = runQuery(index, config, { kind, id, agent: flags.has('--agent') })\n if (wantsTextOutput(flags, config)) writeTextQuery(result)\n else writeJson(result)\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'search') {\n const term = positional.slice(1).join(' ').trim()\n if (!term) {\n process.stderr.write('Usage: ak-docs search <term> [--agent]\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n if (flags.has('--agent')) {\n const result = runQuery(index, config, { kind: 'search', term, agent: true })\n writeJson(result)\n } else {\n const matches = searchIndex(index, term)\n if (wantsTextOutput(flags, config)) writeTextSearch(term, matches)\n else writeJson({ term, count: matches.length, matches })\n }\n return 0\n } catch (error) {\n if (error instanceof IndexNotFoundError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'retrieve') {\n const query = positional.slice(1).join(' ').trim()\n if (!query) {\n process.stderr.write('Usage: ak-docs retrieve <query> [--config <path>]\\n')\n return 1\n }\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n writeJson({ query, chunks: await retrieveHybridChunks(root, config, index, query) })\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'rag') {\n const action = positional[1]\n if (action !== 'ingest' && action !== 'search') {\n process.stderr.write('Usage: ak-docs rag ingest | ak-docs rag search <query>\\n')\n return 1\n }\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n const rag = await createDocBridgeRag(root, config, index)\n if (action === 'ingest') {\n const result = await rag.ingest()\n writeJson({ ok: true, ...result })\n return 0\n }\n const query = positional.slice(2).join(' ').trim()\n if (!query) {\n process.stderr.write('Usage: ak-docs rag search <query>\\n')\n return 1\n }\n const hits = await rag.search(query)\n writeJson({ query, count: hits.length, hits })\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'chat') {\n return (async () => {\n try {\n const { config, root } = loadProject(configPath)\n if (!config.intelligence?.enabled || !config.intelligence.adapter) {\n process.stderr.write(\n 'Chat requires intelligence.enabled and intelligence.adapter in doc-bridge config.\\n' +\n `Layer 1 peers: ${layer1InstallHint()}\\n`,\n )\n return 1\n }\n const index = loadDocBridgeIndex(root, config)\n await startInkChat(root, config, index)\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n\n if (command === 'ask') {\n const question = positional.slice(1).join(' ').trim()\n try {\n const { config, root } = loadProject(configPath)\n if (flags.has('--chat')) {\n if (!config.intelligence?.enabled || !config.intelligence.adapter) {\n process.stderr.write(\n 'Chat mode requires intelligence.enabled and intelligence.adapter in doc-bridge config.\\n' +\n `Install peers: ${layer1InstallHint()}\\n`,\n )\n return 1\n }\n if (!question) {\n process.stderr.write('Usage: ak-docs ask <question> --chat\\n')\n return 1\n }\n return (async () => {\n try {\n const index = loadDocBridgeIndex(root, config)\n const result = await runChatOnce(root, config, index, question)\n writeLines([result.content])\n return 0\n } catch (error) {\n if (error instanceof PeerMissingError) {\n process.stderr.write(`${error.message}\\n`)\n return 1\n }\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n })()\n }\n if (!question) {\n if (process.stdin.isTTY) return runAskRepl(root, config)\n process.stderr.write('Usage: ak-docs ask <question>, or run ak-docs ask in an interactive terminal.\\n')\n return 1\n }\n const index = loadDocBridgeIndex(root, config)\n writeAsk(question, searchIndex(index, question, 8), index, config)\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n if (command === 'list') {\n const kind = positional[1]\n if (!kind || !LIST_KINDS.has(kind)) {\n process.stderr.write('Usage: ak-docs list <packages|intents|changes|knowledge>\\n')\n return 1\n }\n try {\n const { config, root } = loadProject(configPath)\n const index = loadDocBridgeIndex(root, config)\n\n if (kind === 'packages') {\n const items = index.lookup?.packages ?? []\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n if (kind === 'intents') {\n const items = Object.keys(index.lookup?.intents ?? {})\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n if (kind === 'changes') {\n const items = Object.keys(index.lookup?.changes ?? {})\n if (wantsTextOutput(flags, config)) writeLines(items)\n else writeJson({ kind, items })\n return 0\n }\n const items = index.knowledge.map((entry) => ({\n id: entry.id,\n title: entry.title,\n path: entry.path,\n }))\n if (wantsTextOutput(flags, config)) {\n writeLines(items.map((item) => [item.id, item.path, item.title].join('\\t')))\n } else {\n writeJson({ kind, items })\n }\n return 0\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 1\n }\n }\n\n process.stdout.write(usage)\n return 1\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, join, resolve } from 'node:path'\nimport vm from 'node:vm'\n\nimport { applyConfigDefaults } from './defaults.js'\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './schema.js'\n\nconst CONFIG_CANDIDATES = [\n 'doc-bridge.config.ts',\n 'doc-bridge.config.mts',\n 'doc-bridge.config.js',\n 'doc-bridge.config.mjs',\n 'doc-bridge.config.json',\n 'doc-bridge.config.yaml',\n 'doc-bridge.config.yml',\n 'package.json',\n] as const\n\nexport type LoadConfigOptions = {\n readonly cwd?: string\n readonly explicitPath?: string\n}\n\nexport type LoadConfigResult = {\n readonly config: DocBridgeConfigV1\n readonly path: string\n}\n\nexport class ConfigNotFoundError extends Error {\n constructor(readonly cwd: string) {\n super(\n `No doc-bridge config found in ${cwd}. Run: ak-docs init — or pass --config <path>.`,\n )\n this.name = 'ConfigNotFoundError'\n }\n}\n\nconst findConfigPath = (cwd: string, explicitPath?: string): string | null => {\n if (explicitPath) {\n const abs = resolve(cwd, explicitPath)\n return existsSync(abs) ? abs : null\n }\n for (const name of CONFIG_CANDIDATES) {\n const candidate = join(cwd, name)\n if (!existsSync(candidate)) continue\n if (name !== 'package.json') return candidate\n const pkg = parseJsonConfig(readFileSync(candidate, 'utf8'), candidate) as { docBridge?: unknown }\n if (pkg.docBridge) return candidate\n }\n return null\n}\n\nconst parseJsonConfig = (raw: string, path: string): unknown => {\n try {\n return JSON.parse(raw) as unknown\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to parse JSON config at ${path}: ${message}`)\n }\n}\n\nconst parseCodeConfig = (raw: string, path: string): unknown => {\n const code = raw\n .replace(/import\\s+type\\s+[\\s\\S]*?;?\\n/g, '')\n .replace(/import\\s+\\{\\s*defineConfig\\s*\\}\\s+from\\s+['\"]@agentskit\\/doc-bridge(?:\\/config)?['\"];?\\n?/g, '')\n .replace(/\\s+satisfies\\s+[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*(?:;|\\)|$))/g, '')\n .replace(/export\\s+default/, 'module.exports.default =')\n\n if (/\\bimport\\b/.test(code)) {\n throw new Error(`Unsupported import in ${path}. Static config only supports defineConfig imports.`)\n }\n\n const sandbox = {\n module: { exports: {} as { default?: unknown } },\n exports: {},\n defineConfig: (config: unknown) => config,\n }\n try {\n vm.runInNewContext(code, sandbox, { timeout: 250, filename: path })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to load config at ${path}: ${message}`)\n }\n return sandbox.module.exports.default\n}\n\nconst parseConfig = (input: unknown): DocBridgeConfigV1 => {\n const result = DocBridgeConfigV1Schema.safeParse(input)\n if (result.success) return result.data\n throw new Error(\n `Invalid doc-bridge config:\\n${result.error.issues.map((issue) =>\n ` - ${issue.path.join('.') || '(root)'}: ${issue.message}`,\n ).join('\\n')}`,\n )\n}\n\n/** v0.1 — static JS/TS config, JSON config files, and package.json#docBridge. */\nexport const loadConfig = (opts: LoadConfigOptions = {}): LoadConfigResult => {\n const cwd = resolve(opts.cwd ?? process.cwd())\n const path = findConfigPath(cwd, opts.explicitPath)\n if (!path) throw new ConfigNotFoundError(cwd)\n\n const raw = readFileSync(path, 'utf8')\n const ext = path.split('.').pop()?.toLowerCase()\n if (ext === 'yaml' || ext === 'yml') {\n throw new Error(`YAML config is not supported yet (${path}). Use doc-bridge.config.json for now.`)\n }\n\n const parsed =\n basename(path) === 'package.json'\n ? (parseJsonConfig(raw, path) as { docBridge?: unknown }).docBridge\n : ext === 'ts' || ext === 'mts' || ext === 'js' || ext === 'mjs'\n ? parseCodeConfig(raw, path)\n : parseJsonConfig(raw, path)\n const config = applyConfigDefaults(parseConfig(parsed))\n return { config, path }\n}\n\nexport const resolveProjectRoot = (start = process.cwd()): string => {\n let cur = resolve(start)\n for (let i = 0; i < 12; i += 1) {\n if (findConfigPath(cur)) return cur\n const parent = dirname(cur)\n if (parent === cur) break\n cur = parent\n }\n return resolve(start)\n}\n\n/** Project root for a loaded config file path (directory of the config). */\nexport const projectRootFromConfigPath = (\n configFilePath: string,\n projectRootField?: string,\n): string => {\n const configDir = dirname(resolve(configFilePath))\n if (projectRootField) return resolve(configDir, projectRootField)\n return configDir\n}\n","import type { DocBridgeConfigV1 } from './schema.js'\n\nconst DEFAULT_AGENT_EXCLUDE = ['**/node_modules/**', '**/.git/**'] as const\n\nexport const applyConfigDefaults = (config: DocBridgeConfigV1): DocBridgeConfigV1 => {\n const agentRoot = config.corpus.agent.root\n const agentIndex = config.corpus.agent.index ?? `${agentRoot}/INDEX.md`\n\n return {\n ...config,\n corpus: {\n ...config.corpus,\n agent: {\n ...config.corpus.agent,\n index: agentIndex,\n include: config.corpus.agent.include ?? ['**/*.{md,mdx}'],\n exclude: config.corpus.agent.exclude ?? [...DEFAULT_AGENT_EXCLUDE],\n },\n },\n index: {\n outFile: '.doc-bridge/index.json',\n contentHash: 'sha256-normalized-v1',\n llmsTxt: {\n enabled: true,\n outFile: 'llms.txt',\n ...config.index?.llmsTxt,\n },\n capabilities: {\n enabled: true,\n outFile: '.doc-bridge/capabilities.json',\n ...config.index?.capabilities,\n },\n ...config.index,\n },\n gates: {\n preset: 'minimal',\n ...config.gates,\n },\n surfaces: {\n cli: {\n bin: 'ak-docs',\n defaultFormat: 'json',\n ...config.surfaces?.cli,\n },\n mcp: {\n enabled: true,\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status'],\n transport: 'stdio',\n ...config.surfaces?.mcp,\n },\n ...config.surfaces,\n },\n intelligence: config.intelligence\n ? {\n enabled: false,\n ...config.intelligence,\n chat: config.intelligence.chat\n ? { handoffFirst: true, ...config.intelligence.chat }\n : undefined,\n }\n : { enabled: false },\n }\n}\n","import { z } from 'zod'\n\nexport const CONFIG_SCHEMA_VERSION = 1 as const\n\nexport const HumanCorpusPluginIdSchema = z.enum([\n 'plain-markdown',\n 'fumadocs',\n 'docusaurus',\n 'mkdocs',\n 'vitepress',\n 'custom',\n])\n\nexport const AgentCorpusConfigSchema = z\n .object({\n root: z.string().min(1).max(512),\n index: z.string().min(1).max(512).optional(),\n include: z.array(z.string().min(1).max(256)).max(64).optional(),\n exclude: z.array(z.string().min(1).max(256)).max(64).optional(),\n okf: z\n .object({\n requireType: z.boolean().optional(),\n allowedTypes: z.array(z.string().min(1).max(128)).max(64).optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const HumanCorpusConfigSchema = z\n .object({\n plugin: HumanCorpusPluginIdSchema,\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const IndexConfigSchema = z\n .object({\n outFile: z.string().min(1).max(512).optional(),\n llmsTxt: z\n .object({\n enabled: z.boolean().optional(),\n outFile: z.string().min(1).max(512).optional(),\n preamble: z.string().max(4_000).optional(),\n })\n .strict()\n .optional(),\n capabilities: z\n .object({\n enabled: z.boolean().optional(),\n outFile: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n contentHash: z.literal('sha256-normalized-v1').optional(),\n })\n .strict()\n\nexport const OwnershipEntrySchema = z\n .object({\n path: z.string().min(1).max(512),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n purpose: z.string().max(1024).optional(),\n checks: z.array(z.string().min(1).max(256)).max(32).optional(),\n agentDoc: z.string().min(1).max(512).optional(),\n humanDoc: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const RoutingConfigSchema = z\n .object({\n plugin: z\n .enum(['pnpm-monorepo', 'npm-workspaces', 'yarn-workspaces', 'pattern-files', 'custom'])\n .optional(),\n options: z\n .object({\n packages: z.array(z.string().min(1).max(256)).max(128).optional(),\n /** Infer ownership from corpus paths/frontmatter (default true). */\n ownershipFromCorpus: z.boolean().optional(),\n ownership: z.record(z.string().min(1).max(256), OwnershipEntrySchema).optional(),\n intents: z\n .array(\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n paths: z.array(z.string().min(1).max(512)).max(32),\n })\n .strict(),\n )\n .max(128)\n .optional(),\n changes: z\n .array(\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n startHere: z.string().min(1).max(512),\n relatedPackages: z.array(z.string().min(1).max(256)).max(32).optional(),\n })\n .strict(),\n )\n .max(128)\n .optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const GatesConfigSchema = z\n .object({\n /** minimal: freshness · standard: + human links · strict: + okf-type · playbook: freshness + okf soft style */\n preset: z.enum(['minimal', 'standard', 'strict', 'playbook']).optional(),\n include: z\n .array(\n z.enum([\n 'index-freshness',\n 'human-guide-links',\n 'link-rot',\n 'okf-type',\n 'docs-style',\n 'routing-currency',\n 'bootstrap-size',\n ]),\n )\n .max(16)\n .optional(),\n exclude: z\n .array(\n z.enum([\n 'index-freshness',\n 'human-guide-links',\n 'link-rot',\n 'okf-type',\n 'docs-style',\n 'routing-currency',\n 'bootstrap-size',\n ]),\n )\n .max(16)\n .optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const SurfacesConfigSchema = z\n .object({\n cli: z\n .object({\n bin: z.string().min(1).max(64).optional(),\n defaultFormat: z.enum(['json', 'text']).optional(),\n })\n .strict()\n .optional(),\n mcp: z\n .object({\n enabled: z.boolean().optional(),\n tools: z\n .array(\n z.enum([\n 'handoff.resolve',\n 'doc.search',\n 'doc.get',\n 'gate.status',\n 'playbook.pattern.get',\n 'retriever.query',\n 'memory.classify',\n 'memory.promoteDraft',\n 'registry.topology',\n ]),\n )\n .max(16)\n .optional(),\n transport: z.enum(['stdio', 'http']).optional(),\n http: z\n .object({\n port: z.number().int().min(1).max(65_535).optional(),\n path: z.string().min(1).max(256).optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n\nexport const IntelligenceConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n adapter: z\n .object({\n provider: z.enum(['openai', 'anthropic', 'ollama', 'openrouter', 'custom']),\n model: z.string().min(1).max(128).optional(),\n apiKeyEnv: z.string().min(0).max(128).optional(),\n baseUrl: z.string().url().optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n .optional(),\n chat: z\n .object({\n enabled: z.boolean().optional(),\n sources: z.array(z.enum(['agent', 'human', 'federation'])).max(8).optional(),\n handoffFirst: z.boolean().optional(),\n })\n .strict()\n .optional(),\n retriever: z\n .object({\n enabled: z.boolean().optional(),\n mode: z.enum(['local', 'remote', 'bm25', 'agentskit-rag']).optional(),\n embedModel: z.string().min(1).max(128).optional(),\n chunkSize: z.number().int().min(128).max(16_384).optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n .optional(),\n memory: z\n .object({\n enabled: z.boolean().optional(),\n adapters: z\n .array(z.enum(['playbook-memory', 'cursor-rules', 'session-export', 'bootstrap-delta']))\n .max(8)\n .optional(),\n ingestDir: z.string().min(1).max(512).optional(),\n classify: z.boolean().optional(),\n promote: z\n .object({\n enabled: z.boolean().optional(),\n targets: z.array(z.enum(['agent', 'human', 'agents-md'])).max(8).optional(),\n requireApproval: z.boolean().optional(),\n })\n .strict()\n .optional(),\n })\n .strict()\n .optional(),\n runtime: z.enum(['agentskit', 'custom']).optional(),\n runtimeModule: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const FederationConfigSchema = z\n .object({\n enabled: z.boolean().optional(),\n sources: z\n .array(\n z\n .object({\n id: z.string().min(1).max(64),\n llmsTxt: z.string().min(1).max(512).optional(),\n rawBaseUrl: z.string().url().optional(),\n includeInRetriever: z.boolean().optional(),\n includeInChat: z.boolean().optional(),\n })\n .strict(),\n )\n .max(16)\n .optional(),\n })\n .strict()\n\nexport const DocBridgeConfigV1Schema = z\n .object({\n schemaVersion: z.literal(CONFIG_SCHEMA_VERSION),\n project: z\n .object({\n name: z.string().min(1).max(128).optional(),\n root: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n corpus: z\n .object({\n agent: AgentCorpusConfigSchema,\n human: z.union([HumanCorpusConfigSchema, z.array(HumanCorpusConfigSchema).max(8)]).optional(),\n })\n .strict(),\n index: IndexConfigSchema.optional(),\n routing: RoutingConfigSchema.optional(),\n gates: GatesConfigSchema.optional(),\n surfaces: SurfacesConfigSchema.optional(),\n intelligence: IntelligenceConfigSchema.optional(),\n federation: FederationConfigSchema.optional(),\n })\n .strict()\n\nexport type DocBridgeConfigV1 = z.infer<typeof DocBridgeConfigV1Schema>\nexport type AgentCorpusConfig = z.infer<typeof AgentCorpusConfigSchema>\nexport type HumanCorpusConfig = z.infer<typeof HumanCorpusConfigSchema>\n","import { mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { toPosix } from '../lib/paths.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { buildLookup, collectPackages } from './build-handoffs.js'\nimport { renderCapabilitiesJson } from './capabilities.js'\nimport { sha256NormalizedV1 } from './content-hash.js'\nimport { renderLlmsTxt } from './llms-txt.js'\nimport { scanHumanDocs } from './human-adapters/index.js'\nimport { discoverPnpmPackages } from './plugins/pnpm-monorepo.js'\nimport { scanAgentCorpus } from './scan-corpus.js'\n\nexport type BuildIndexOptions = {\n readonly root?: string\n readonly config: DocBridgeConfigV1\n readonly write?: boolean\n}\n\nexport type BuildIndexResult = {\n readonly index: DocBridgeIndexV1\n readonly indexPath: string\n readonly llmsTxtPath?: string\n readonly capabilitiesPath?: string\n}\n\nconst projectName = (root: string, config: DocBridgeConfigV1): string => {\n if (config.project?.name) return config.project.name\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as { name?: string }\n if (pkg.name) return pkg.name\n } catch {\n // ignore\n }\n return toPosix(root.split('/').pop() ?? 'project')\n}\n\nconst existingGeneratedAt = (indexPath: string, contentHash: string): string | undefined => {\n try {\n const index = JSON.parse(readFileSync(indexPath, 'utf8')) as {\n contentHash?: unknown\n generatedAt?: unknown\n }\n return index.contentHash === contentHash && typeof index.generatedAt === 'string'\n ? index.generatedAt\n : undefined\n } catch {\n return undefined\n }\n}\n\nexport const buildDocBridgeIndex = (opts: BuildIndexOptions): BuildIndexResult => {\n const root = opts.root ?? process.cwd()\n const config = opts.config\n const write = opts.write ?? true\n const outFile = config.index?.outFile ?? '.doc-bridge/index.json'\n const indexPath = join(root, outFile)\n\n const corpus = scanAgentCorpus(root, config)\n const knowledge = corpus.map(({ absPath: _a, relPath: _r, frontmatter: _f, ...entry }) => entry)\n\n const shouldDiscover =\n config.routing?.plugin === 'pnpm-monorepo' ||\n Boolean(config.routing?.options?.packages?.length) ||\n config.routing?.plugin === 'npm-workspaces' ||\n config.routing?.plugin === 'yarn-workspaces'\n\n const discovered = shouldDiscover ? discoverPnpmPackages(root, config) : []\n const packages = collectPackages(config, discovered, corpus)\n const humanDocs = scanHumanDocs(root, config)\n\n const { lookup, handoffs } = buildLookup(config, packages, corpus, outFile, humanDocs, root)\n\n const hashPayload = {\n schemaVersion: 1,\n knowledge,\n handoffs,\n lookup,\n }\n\n const contentHash = sha256NormalizedV1(hashPayload)\n const index: DocBridgeIndexV1 = {\n schemaVersion: 1,\n contentHash,\n contentHashAlgo: 'sha256-normalized-v1',\n generatedAt: existingGeneratedAt(indexPath, contentHash) ?? new Date().toISOString(),\n project: { name: projectName(root, config), root: '.' },\n knowledge,\n handoffs,\n lookup,\n }\n\n if (write) {\n mkdirSync(dirname(indexPath), { recursive: true })\n writeFileSync(indexPath, `${JSON.stringify(index, null, 2)}\\n`, 'utf8')\n }\n\n let llmsTxtPath: string | undefined\n let llmsTxtRelPath: string | undefined\n if (config.index?.llmsTxt?.enabled !== false) {\n const llmsOut = config.index?.llmsTxt?.outFile ?? 'llms.txt'\n llmsTxtRelPath = toPosix(llmsOut)\n llmsTxtPath = join(root, llmsOut)\n if (write) {\n writeFileSync(\n llmsTxtPath,\n renderLlmsTxt(config, knowledge, index.project?.name ?? 'project'),\n 'utf8',\n )\n }\n }\n\n let capabilitiesPath: string | undefined\n if (config.index?.capabilities?.enabled !== false) {\n const capabilitiesOut = config.index?.capabilities?.outFile ?? '.doc-bridge/capabilities.json'\n capabilitiesPath = join(root, capabilitiesOut)\n if (write) {\n mkdirSync(dirname(capabilitiesPath), { recursive: true })\n writeFileSync(\n capabilitiesPath,\n renderCapabilitiesJson(config, index, {\n index: toPosix(outFile),\n ...(llmsTxtRelPath ? { llmsTxt: llmsTxtRelPath } : {}),\n }),\n 'utf8',\n )\n }\n }\n\n return {\n index,\n indexPath: toPosix(indexPath),\n ...(llmsTxtPath ? { llmsTxtPath: toPosix(llmsTxtPath) } : {}),\n ...(capabilitiesPath ? { capabilitiesPath: toPosix(capabilitiesPath) } : {}),\n }\n}\n","import { resolve } from 'node:path'\n\nexport const toPosix = (value: string): string => value.split('\\\\').join('/')\n\nexport const resolveFromRoot = (root: string, rel: string): string =>\n resolve(root, rel)","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun'\n\nexport const detectPackageManager = (root: string): PackageManager => {\n if (existsSync(join(root, 'pnpm-lock.yaml')) || existsSync(join(root, 'pnpm-workspace.yaml'))) {\n return 'pnpm'\n }\n if (existsSync(join(root, 'yarn.lock'))) return 'yarn'\n if (existsSync(join(root, 'bun.lockb')) || existsSync(join(root, 'bun.lock'))) return 'bun'\n if (existsSync(join(root, 'package-lock.json'))) return 'npm'\n\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n packageManager?: string\n }\n const pm = pkg.packageManager?.split('@')[0]\n if (pm === 'pnpm' || pm === 'npm' || pm === 'yarn' || pm === 'bun') return pm\n } catch {\n // ignore\n }\n\n return 'npm'\n}\n\nexport const defaultChecksForTarget = (\n root: string,\n opts: {\n readonly packageId: string\n readonly packagePath: string\n readonly packageName?: string\n readonly strict?: boolean\n },\n): string[] => {\n const pm = detectPackageManager(root)\n\n // Pattern / markdown ownership targets (playbook, etc.) — project-level scripts\n if (/\\.mdx?$/.test(opts.packagePath) || opts.packagePath.includes('/pillars/')) {\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n scripts?: Record<string, string>\n }\n const scripts = pkg.scripts ?? {}\n if (scripts['check:okf-type']) return ['pnpm run check:okf-type']\n if (scripts['docs:bridge:gate']) return ['pnpm run docs:bridge:gate']\n if (scripts.test) return [pm === 'pnpm' ? 'pnpm test' : 'npm test']\n } catch {\n // fall through\n }\n }\n\n const isWorkspace =\n existsSync(join(root, 'pnpm-workspace.yaml')) ||\n existsSync(join(root, 'lerna.json')) ||\n Boolean(\n (() => {\n try {\n const pkg = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8')) as {\n workspaces?: unknown\n }\n return Boolean(pkg.workspaces)\n } catch {\n return false\n }\n })(),\n )\n\n const filter =\n opts.packageName ??\n (opts.packagePath.startsWith('packages/') || opts.packagePath.startsWith('apps/')\n ? opts.packageId\n : undefined)\n\n if (pm === 'pnpm') {\n if (isWorkspace && filter) {\n const base = [`pnpm --filter ${filter} test`]\n if (opts.strict) base.push(`pnpm --filter ${filter} lint`)\n return base\n }\n return opts.strict ? ['pnpm test', 'pnpm run lint'] : ['pnpm test']\n }\n\n if (pm === 'yarn') {\n if (isWorkspace && filter) {\n return opts.strict\n ? [`yarn workspace ${filter} test`, `yarn workspace ${filter} lint`]\n : [`yarn workspace ${filter} test`]\n }\n return opts.strict ? ['yarn test', 'yarn lint'] : ['yarn test']\n }\n\n if (pm === 'bun') {\n return opts.strict ? ['bun test', 'bun run lint'] : ['bun test']\n }\n\n // npm\n if (isWorkspace && filter) {\n return opts.strict\n ? [`npm test -w ${filter}`, `npm run lint -w ${filter}`]\n : [`npm test -w ${filter}`]\n }\n return opts.strict ? ['npm test', 'npm run lint'] : ['npm test']\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n extractSearchBody,\n firstHeading,\n firstParagraph,\n frontmatterString,\n frontmatterStringList,\n parseFrontmatter,\n slugFromPath,\n type FrontmatterData,\n} from '../lib/markdown.js'\nimport { toPosix } from '../lib/paths.js'\nimport { walkFiles } from '../lib/walk.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nexport type CorpusDoc = KnowledgeEntry & {\n readonly absPath: string\n readonly relPath: string\n readonly frontmatter: FrontmatterData\n}\n\nexport type OwnershipSeed = {\n readonly id: string\n readonly path: string\n readonly purpose?: string\n readonly checks?: readonly string[]\n readonly agentDoc: string\n readonly humanDoc?: string\n}\n\nconst relFromRoot = (root: string, abs: string): string => toPosix(abs.replace(`${toPosix(root)}/`, ''))\n\nexport const scanAgentCorpus = (root: string, config: DocBridgeConfigV1): CorpusDoc[] => {\n const agentRoot = join(root, config.corpus.agent.root)\n const files = walkFiles(agentRoot, { extensions: ['.md', '.mdx'] })\n const corpusRelRoot = toPosix(config.corpus.agent.root)\n\n return files.map((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n const relPath = `${corpusRelRoot}/${relToCorpus}`\n const raw = readFileSync(abs, 'utf8')\n const { data: frontmatter } = parseFrontmatter(raw)\n const id =\n frontmatterString(frontmatter, 'id') ??\n frontmatterString(frontmatter, 'package') ??\n slugFromPath(relToCorpus)\n const title = firstHeading(raw) ?? id\n const purpose = frontmatterString(frontmatter, 'purpose')\n const description = purpose ?? firstParagraph(raw, 400)\n const body = extractSearchBody(raw)\n return {\n id,\n type: 'agent-doc',\n title,\n path: relPath,\n absPath: abs,\n relPath,\n frontmatter,\n ...(description ? { description } : {}),\n ...(body ? { body } : {}),\n }\n })\n}\n\nexport const guessAgentDocForPackage = (\n corpus: readonly CorpusDoc[],\n packageId: string,\n): string | undefined => {\n const candidates = [\n (doc: CorpusDoc) => frontmatterString(doc.frontmatter, 'package') === packageId,\n (doc: CorpusDoc) => doc.id === packageId,\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}.mdx`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}/index.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/packages/${packageId}/index.mdx`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/${packageId}.md`),\n (doc: CorpusDoc) => doc.relPath.endsWith(`/${packageId}.mdx`),\n (doc: CorpusDoc) => doc.relPath.includes(`/packages/${packageId}/`),\n ]\n for (const match of candidates) {\n const hit = corpus.find(match)\n if (hit) return hit.path\n }\n return undefined\n}\n\n/** Ownership seeds from agent-doc frontmatter (`package` + `editRoot`). */\nexport const ownershipFromFrontmatter = (corpus: readonly CorpusDoc[]): readonly OwnershipSeed[] => {\n const out: OwnershipSeed[] = []\n\n for (const doc of corpus) {\n const type = frontmatterString(doc.frontmatter, 'type')\n const id =\n frontmatterString(doc.frontmatter, 'package') ??\n (type === 'package' || type === 'module' || type === 'pattern'\n ? frontmatterString(doc.frontmatter, 'id') ?? doc.id\n : undefined)\n const path =\n frontmatterString(doc.frontmatter, 'editRoot') ??\n frontmatterString(doc.frontmatter, 'path') ??\n (type === 'package' || type === 'module' ? `packages/${id}` : undefined)\n if (!id || !path) continue\n const purpose = frontmatterString(doc.frontmatter, 'purpose') ?? doc.description\n const checks = frontmatterStringList(doc.frontmatter, 'checks')\n const humanDoc = frontmatterString(doc.frontmatter, 'humanDoc')\n out.push({\n id,\n path,\n agentDoc: doc.path,\n ...(purpose ? { purpose } : {}),\n ...(checks ? { checks } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n })\n }\n\n return out\n}\n\n/**\n * Path-based ownership when frontmatter is incomplete:\n * - packages/id.md(x) → package path packages/id\n * - pillars/.../name-pattern.md → pattern ownership (edit root = file)\n * - registry/id/README.md → registry agent\n */\nexport const ownershipFromCorpus = (corpus: readonly CorpusDoc[]): readonly OwnershipSeed[] => {\n const out: OwnershipSeed[] = []\n const seen = new Set<string>()\n\n for (const doc of corpus) {\n // already handled if package+editRoot present\n if (frontmatterString(doc.frontmatter, 'package') && frontmatterString(doc.frontmatter, 'editRoot')) {\n continue\n }\n\n let id: string | undefined\n let path: string | undefined\n let purpose = frontmatterString(doc.frontmatter, 'purpose') ?? doc.description\n\n const packagesFile = /(?:^|\\/)packages\\/([^/]+)\\.(?:md|mdx)$/.exec(doc.relPath)\n const packagesIndex = /(?:^|\\/)packages\\/([^/]+)\\/index\\.(?:md|mdx)$/.exec(doc.relPath)\n const registryReadme = /(?:^|\\/)registry\\/([^/]+)\\/README\\.(?:md|mdx)$/i.exec(doc.relPath)\n const patternFile = /(?:^|\\/)pillars\\/[^/]+\\/([^/]+(?:-pattern)?)\\.(?:md|mdx)$/.exec(doc.relPath)\n const topLevelPkg = /(?:^|\\/)for-agents\\/([^/]+)\\.(?:md|mdx)$/.exec(doc.relPath)\n\n if (packagesFile?.[1] && packagesFile[1] !== 'index') {\n id = packagesFile[1]\n path = `packages/${id}`\n } else if (packagesIndex?.[1]) {\n id = packagesIndex[1]\n path = `packages/${id}`\n } else if (registryReadme?.[1]) {\n id = registryReadme[1]\n path = `registry/${id}`\n } else if (patternFile?.[1] && patternFile[1] !== 'index' && patternFile[1] !== 'universal') {\n id = patternFile[1]\n path = doc.path\n purpose = purpose ?? `Playbook pattern: ${id}`\n } else if (topLevelPkg?.[1] && topLevelPkg[1] !== 'index' && topLevelPkg[1] !== 'INDEX') {\n // agentskit for-agents/core.mdx style\n id = topLevelPkg[1]\n path = `packages/${id}`\n }\n\n if (!id || !path || seen.has(id)) continue\n seen.add(id)\n\n const humanDoc = frontmatterString(doc.frontmatter, 'humanDoc')\n const checks = frontmatterStringList(doc.frontmatter, 'checks')\n out.push({\n id,\n path,\n agentDoc: doc.path,\n ...(purpose ? { purpose } : {}),\n ...(checks ? { checks } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n })\n }\n\n return out\n}\n\nexport { relFromRoot }\n","export type FrontmatterValue = string | boolean | readonly string[]\nexport type FrontmatterData = Record<string, FrontmatterValue>\n\nexport const parseFrontmatter = (\n markdown: string,\n): { readonly data: FrontmatterData; readonly body: string } => {\n const normalized = markdown.replace(/^\\uFEFF/, '')\n if (!normalized.startsWith('---\\n') && !normalized.startsWith('---\\r\\n')) {\n return { data: {}, body: markdown }\n }\n const endMatch = /\\r?\\n---\\r?\\n/.exec(normalized.slice(3))\n if (!endMatch || endMatch.index === undefined) {\n return { data: {}, body: markdown }\n }\n const block = normalized.slice(4, 3 + endMatch.index)\n const body = normalized.slice(3 + endMatch.index + endMatch[0].length)\n const data: Record<string, FrontmatterValue> = {}\n for (const rawLine of block.split(/\\r?\\n/)) {\n const line = rawLine.trim()\n if (!line || line.startsWith('#')) continue\n const m = /^([A-Za-z0-9_-]+):\\s*(.*)$/.exec(line)\n if (!m?.[1]) continue\n const key = m[1]\n const raw = (m[2] ?? '').trim()\n if (raw === 'true') data[key] = true\n else if (raw === 'false') data[key] = false\n else if (raw.startsWith('[') && raw.endsWith(']')) {\n data[key] = raw\n .slice(1, -1)\n .split(',')\n .map((part) => part.trim().replace(/^['\"]|['\"]$/g, ''))\n .filter(Boolean)\n } else {\n data[key] = raw.replace(/^['\"]|['\"]$/g, '')\n }\n }\n return { data, body }\n}\n\nexport const frontmatterString = (\n data: FrontmatterData,\n key: string,\n): string | undefined => {\n const value = data[key]\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nexport const frontmatterStringList = (\n data: FrontmatterData,\n key: string,\n): string[] | undefined => {\n const value = data[key]\n if (Array.isArray(value)) return value.filter((item): item is string => typeof item === 'string')\n if (typeof value === 'string' && value.length > 0) return [value]\n return undefined\n}\n\nexport const firstHeading = (markdown: string): string | undefined => {\n const { body } = parseFrontmatter(markdown)\n for (const line of body.split('\\n')) {\n const m = /^#\\s+(.+)$/.exec(line.trim())\n if (m?.[1]) return m[1].trim()\n }\n return undefined\n}\n\n/** Complete first prose block — prefer full sentences, cap length without mid-word cuts. */\nexport const firstParagraph = (markdown: string, maxLen = 400): string | undefined => {\n const { body } = parseFrontmatter(markdown)\n const lines = body.split('\\n')\n const buf: string[] = []\n for (const line of lines) {\n const t = line.trim()\n if (!t) {\n if (buf.length) break\n continue\n }\n if (t.startsWith('#')) continue\n if (t.startsWith('---')) continue\n if (t.startsWith('```')) break\n if (t.startsWith('|') || t.startsWith('- [') || t.startsWith('* [')) {\n if (buf.length) break\n continue\n }\n buf.push(t)\n if (buf.join(' ').length >= maxLen) break\n }\n let text = buf.join(' ').replace(/\\s+/g, ' ').trim()\n if (!text) return undefined\n if (text.length <= maxLen) return text\n // Prefer ending on sentence boundary\n const sliced = text.slice(0, maxLen)\n const sentenceEnd = Math.max(sliced.lastIndexOf('. '), sliced.lastIndexOf('! '), sliced.lastIndexOf('? '))\n if (sentenceEnd > maxLen * 0.4) return sliced.slice(0, sentenceEnd + 1).trim()\n const wordEnd = sliced.lastIndexOf(' ')\n return (wordEnd > 0 ? sliced.slice(0, wordEnd) : sliced).trim()\n}\n\n/** Flatten markdown body for search (strip fences/links noise lightly). */\nexport const extractSearchBody = (markdown: string, maxLen = 6_000): string => {\n const { body } = parseFrontmatter(markdown)\n const text = body\n .replace(/```[\\s\\S]*?```/g, ' ')\n .replace(/!\\[[^\\]]*\\]\\([^)]+\\)/g, ' ')\n .replace(/\\[[^\\]]*\\]\\([^)]+\\)/g, ' ')\n .replace(/^#+\\s+/gm, '')\n .replace(/[|>*_`#]/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n return text.length > maxLen ? text.slice(0, maxLen) : text\n}\n\nexport const slugFromPath = (relPath: string): string => {\n const base = relPath.replace(/\\.mdx?$/, '')\n const parts = base.split('/')\n return parts[parts.length - 1] ?? base\n}\n","import { readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { toPosix } from './paths.js'\n\nconst DEFAULT_SKIP = new Set(['node_modules', '.git', 'dist', 'coverage', '.doc-bridge'])\n\nexport const walkFiles = (\n root: string,\n opts?: { readonly extensions?: readonly string[]; readonly skipDirs?: ReadonlySet<string> },\n): string[] => {\n const extensions = opts?.extensions ?? ['.md']\n const skip = opts?.skipDirs ?? DEFAULT_SKIP\n const out: string[] = []\n\n const visit = (dir: string) => {\n let entries: string[] = []\n try {\n entries = readdirSync(dir)\n } catch {\n return\n }\n for (const name of entries) {\n const abs = join(dir, name)\n let st\n try {\n st = statSync(abs)\n } catch {\n continue\n }\n if (st.isDirectory()) {\n if (skip.has(name)) continue\n visit(abs)\n continue\n }\n if (!st.isFile()) continue\n if (extensions.some((ext) => name.endsWith(ext))) {\n out.push(toPosix(abs))\n }\n }\n }\n\n visit(root)\n return out.sort()\n}","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { defaultChecksForTarget } from '../lib/package-manager.js'\nimport type { AgentHandoffV1 } from '../schemas/agent-handoff.js'\nimport {\n guessAgentDocForPackage,\n ownershipFromCorpus,\n ownershipFromFrontmatter,\n type CorpusDoc,\n} from './scan-corpus.js'\nimport type { DiscoveredPackage } from './plugins/pnpm-monorepo.js'\nimport type { HumanDocMap } from './plugins/human-markdown.js'\n\nexport type IndexLookup = {\n packages: string[]\n ownership: Record<string, OwnershipRecord>\n intents: Record<string, IntentRecord>\n changes: Record<string, ChangeRecord>\n}\n\nexport type OwnershipRecord = {\n id: string\n path: string\n group?: string\n layer?: string\n purpose?: string\n checks: string[]\n agentDoc?: string\n humanDoc?: string\n readme?: string\n}\n\nexport type IntentRecord = {\n id: string\n title: string\n paths: string[]\n}\n\nexport type ChangeRecord = {\n id: string\n title: string\n startHere: string\n relatedPackages?: string[]\n}\n\n/**\n * Merge package identity from:\n * 1. routing.options.ownership (explicit)\n * 2. pnpm / workspace discovery\n * 3. agent-doc frontmatter (package + editRoot)\n * 4. corpus path heuristics (packages/<id>.md, pillars patterns, etc.)\n */\nexport const collectPackages = (\n config: DocBridgeConfigV1,\n discovered: readonly DiscoveredPackage[],\n corpus: readonly CorpusDoc[],\n): DiscoveredPackage[] => {\n const byId = new Map<string, DiscoveredPackage>()\n\n for (const [id, entry] of Object.entries(config.routing?.options?.ownership ?? {})) {\n byId.set(id, { id, path: entry.path })\n }\n\n for (const pkg of discovered) {\n const existing = byId.get(pkg.id)\n if (!existing) {\n byId.set(pkg.id, pkg)\n continue\n }\n byId.set(pkg.id, {\n id: pkg.id,\n path: existing.path || pkg.path,\n ...(pkg.name ? { name: pkg.name } : existing.name ? { name: existing.name } : {}),\n })\n }\n\n const seeds = [\n ...ownershipFromFrontmatter(corpus),\n ...(config.routing?.options?.ownershipFromCorpus === false\n ? []\n : ownershipFromCorpus(corpus)),\n ]\n\n for (const seed of seeds) {\n const existing = byId.get(seed.id)\n if (!existing) {\n byId.set(seed.id, { id: seed.id, path: seed.path })\n continue\n }\n if (!existing.path) {\n byId.set(seed.id, { ...existing, path: seed.path })\n }\n }\n\n return [...byId.values()].sort((a, b) => a.id.localeCompare(b.id))\n}\n\nconst resolveHumanDoc = (\n packageId: string,\n override?: string,\n fmHuman?: string,\n humanDocs: HumanDocMap = {},\n): string | undefined => {\n if (override) return override\n if (fmHuman) return fmHuman\n if (humanDocs[packageId]) return humanDocs[packageId]\n\n const aliases = [\n packageId,\n packageId.replace(/^@[^/]+\\//, ''),\n packageId.replace(/^os-/, ''),\n packageId.replace(/-pattern$/, ''),\n `packages/${packageId}`,\n `reference/packages/${packageId}`,\n `packages/${packageId}/index`,\n ]\n for (const alias of aliases) {\n if (humanDocs[alias]) return humanDocs[alias]\n }\n\n // Fuzzy: id is a path segment or suffix of a human doc id\n for (const [key, url] of Object.entries(humanDocs)) {\n if (\n key === packageId ||\n key.endsWith(`/${packageId}`) ||\n key.endsWith(`/${packageId}/index`) ||\n key.endsWith(`-${packageId}`)\n ) {\n return url\n }\n }\n return undefined\n}\n\nexport const buildLookup = (\n config: DocBridgeConfigV1,\n packages: readonly DiscoveredPackage[],\n corpus: readonly CorpusDoc[],\n indexOutFile: string,\n humanDocs: HumanDocMap = {},\n root = process.cwd(),\n): { lookup: IndexLookup; handoffs: Record<string, AgentHandoffV1> } => {\n const ownership: Record<string, OwnershipRecord> = {}\n const handoffs: Record<string, AgentHandoffV1> = {}\n const strict = (config.gates?.preset ?? 'minimal') !== 'minimal'\n const fmSeeds = new Map(\n [...ownershipFromFrontmatter(corpus), ...ownershipFromCorpus(corpus)].map((seed) => [\n seed.id,\n seed,\n ]),\n )\n\n for (const pkg of packages) {\n const override = config.routing?.options?.ownership?.[pkg.id]\n const fm = fmSeeds.get(pkg.id)\n const agentDoc =\n override?.agentDoc ??\n fm?.agentDoc ??\n guessAgentDocForPackage(corpus, pkg.id) ??\n config.corpus.agent.index\n const startHere = agentDoc ?? ''\n const purpose = override?.purpose ?? fm?.purpose\n const path = override?.path ?? fm?.path ?? pkg.path\n const checks = [\n ...(override?.checks ??\n fm?.checks ??\n defaultChecksForTarget(root, {\n packageId: pkg.id,\n packagePath: path,\n ...(pkg.name ? { packageName: pkg.name } : {}),\n strict,\n })),\n ]\n const humanDoc = resolveHumanDoc(pkg.id, override?.humanDoc, fm?.humanDoc, humanDocs)\n const record: OwnershipRecord = {\n id: pkg.id,\n path,\n checks,\n ...(override?.group ? { group: override.group } : {}),\n ...(override?.layer ? { layer: override.layer } : {}),\n ...(purpose ? { purpose } : {}),\n ...(humanDoc ? { humanDoc } : {}),\n ...(agentDoc ? { agentDoc } : {}),\n }\n ownership[pkg.id] = record\n\n const bridge = record.humanDoc\n ? /^https?:\\/\\//.test(record.humanDoc)\n ? { humanDoc: 'external' as const }\n : { humanDoc: 'linked' as const }\n : config.corpus.human\n ? {\n humanDoc: 'missing' as const,\n action: 'ak-docs bootstrap agent-docs',\n bootstrap: `docs/for-agents/human/${pkg.id}.md`,\n }\n : undefined\n\n handoffs[pkg.id] = {\n type: 'agent-handoff',\n schemaVersion: 1,\n source: indexOutFile,\n target: {\n type: 'package',\n id: pkg.id,\n path: record.path,\n ...(record.group ? { group: record.group } : {}),\n ...(record.layer ? { layer: record.layer } : {}),\n },\n startHere,\n readBeforeEditing: [agentDoc, 'AGENTS.md'].filter((v, i, a): v is string =>\n Boolean(v) && a.indexOf(v) === i,\n ),\n editRoots: [record.path],\n checks: [...record.checks],\n ...(record.humanDoc ? { humanDoc: record.humanDoc } : {}),\n ...(bridge ? { bridge } : {}),\n notes: [\n ...(record.purpose ? [record.purpose] : []),\n ...(!record.humanDoc && config.corpus.human\n ? [`Human guide missing for ${pkg.id}. Run: ak-docs bootstrap agent-docs`]\n : []),\n ],\n }\n }\n\n const intents: Record<string, IntentRecord> = {}\n for (const intent of config.routing?.options?.intents ?? []) {\n intents[intent.id] = { id: intent.id, title: intent.title, paths: intent.paths }\n }\n\n const changes: Record<string, ChangeRecord> = {}\n for (const change of config.routing?.options?.changes ?? []) {\n changes[change.id] = {\n id: change.id,\n title: change.title,\n startHere: change.startHere,\n ...(change.relatedPackages ? { relatedPackages: change.relatedPackages } : {}),\n }\n }\n\n return {\n lookup: {\n packages: packages.map((p) => p.id),\n ownership,\n intents,\n changes,\n },\n handoffs,\n }\n}\n","export const PACKAGE_VERSION = '1.0.0'","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\nexport const renderCapabilitiesJson = (\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n paths: { readonly index: string; readonly llmsTxt?: string },\n): string => {\n const payload = {\n schemaVersion: 1,\n type: 'doc-bridge-capabilities',\n package: '@agentskit/doc-bridge',\n version: PACKAGE_VERSION,\n project: index.project,\n contentHash: index.contentHash,\n artifacts: {\n index: paths.index,\n ...(paths.llmsTxt ? { llmsTxt: paths.llmsTxt } : {}),\n },\n capabilities: [\n 'index',\n 'query',\n 'search',\n 'agent-handoff',\n 'gates',\n ...(config.surfaces?.mcp?.enabled === false ? [] : ['mcp']),\n ...(config.corpus.human ? ['human-docs'] : []),\n ],\n surfaces: {\n cli: config.surfaces?.cli,\n mcp: config.surfaces?.mcp,\n },\n }\n\n return `${JSON.stringify(payload, null, 2)}\\n`\n}\n","import { createHash } from 'node:crypto'\n\nconst sortValue = (value: unknown): unknown => {\n if (Array.isArray(value)) return value.map(sortValue)\n if (value && typeof value === 'object') {\n const record = value as Record<string, unknown>\n return Object.fromEntries(\n Object.keys(record)\n .sort()\n .map((key) => [key, sortValue(record[key])]),\n )\n }\n return value\n}\n\nexport const sha256NormalizedV1 = (payload: unknown): string => {\n const normalized = JSON.stringify(sortValue(payload))\n return createHash('sha256').update(normalized, 'utf8').digest('hex')\n}","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nexport const renderLlmsTxt = (\n config: DocBridgeConfigV1,\n knowledge: readonly KnowledgeEntry[],\n projectName: string,\n): string => {\n const preamble =\n config.index?.llmsTxt?.preamble ??\n `# ${projectName}\\n\\n> Agent-readable documentation index generated by ak-docs (@agentskit/doc-bridge).\\n`\n\n const lines = knowledge.slice(0, 500).map((entry) => {\n const desc = entry.description ? `: ${entry.description}` : ''\n return `- [${entry.title}](${entry.path})${desc}`\n })\n\n return `${preamble.trim()}\\n\\n## Knowledge\\n\\n${lines.join('\\n')}\\n`\n}","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport vm from 'node:vm'\n\nimport {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n} from './core.js'\n\ntype SidebarDocFilter = {\n readonly ids: ReadonlySet<string>\n readonly autogenDirs: readonly string[]\n readonly enabled: boolean\n}\n\nconst docusaurusFileSlug = (relPath: string): string => {\n const parts = relPath.split('/')\n const file = parts.at(-1) ?? ''\n const base = file.replace(/\\.mdx?$/, '')\n const parent = parts.at(-2)\n if (/^(index|readme)$/i.test(base) || base === parent) return parts.slice(0, -1).join('/')\n return routeSlug(relPath)\n}\n\nconst docusaurusSlug = (relPath: string, raw: string): string => {\n const slug = parseFrontmatter(raw).slug\n if (!slug) return docusaurusFileSlug(relPath)\n return slug.replace(/^\\.\\//, '').replace(/^\\//, '').replace(/\\/$/, '')\n}\n\nconst docusaurusSidebarId = (relPath: string, raw: string): string => {\n const id = parseFrontmatter(raw).id\n if (!id) return routeSlug(relPath)\n const parts = relPath.split('/').slice(0, -1)\n return [...parts, id].filter(Boolean).join('/')\n}\n\nconst docusaurusRecordId = (relPath: string, raw: string): string => {\n const frontmatter = parseFrontmatter(raw)\n return frontmatter.package ?? frontmatter.module ?? docusaurusSidebarId(relPath, raw)\n}\n\nconst sidebarsValue = (file: string): unknown => {\n if (!existsSync(file)) return undefined\n const raw = readFileSync(file, 'utf8')\n .replace(/import\\s+type\\s+[\\s\\S]*?;?\\n/g, '')\n .replace(/:\\s*[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*=)/g, '')\n .replace(/\\s+satisfies\\s+[A-Za-z0-9_.$<>{}\\[\\],\\s]+(?=\\s*(?:;|\\n|$))/g, '')\n .replace(/export\\s+default/, 'module.exports =')\n const sandbox = { module: { exports: {} as unknown }, exports: {} }\n vm.runInNewContext(raw, sandbox, { timeout: 250 })\n return sandbox.module.exports\n}\n\nconst visitSidebar = (value: unknown, filter: { ids: Set<string>; autogenDirs: string[] }): void => {\n if (typeof value === 'string') {\n filter.ids.add(value)\n return\n }\n if (Array.isArray(value)) {\n for (const item of value) visitSidebar(item, filter)\n return\n }\n if (!value || typeof value !== 'object') return\n\n const item = value as Record<string, unknown>\n if ((item.type === 'doc' || item.type === 'ref') && typeof item.id === 'string') {\n filter.ids.add(item.id)\n }\n if (item.type === 'autogenerated' && typeof item.dirName === 'string') {\n filter.autogenDirs.push(item.dirName)\n }\n if (Array.isArray(item.items)) visitSidebar(item.items, filter)\n if (item.link && typeof item.link === 'object') visitSidebar(item.link, filter)\n for (const child of Object.values(item)) {\n if (Array.isArray(child)) visitSidebar(child, filter)\n }\n}\n\nconst readSidebars = (root: string, sidebarsFile: string | undefined): SidebarDocFilter => {\n if (!sidebarsFile) return { enabled: false, ids: new Set(), autogenDirs: [] }\n const value = sidebarsValue(join(root, sidebarsFile))\n const filter = { ids: new Set<string>(), autogenDirs: [] as string[] }\n visitSidebar(value, filter)\n return { enabled: true, ...filter }\n}\n\nconst isIncludedBySidebar = (filter: SidebarDocFilter, id: string): boolean => {\n if (!filter.enabled) return true\n if (filter.ids.has(id)) return true\n return filter.autogenDirs.some((dir) => {\n const prefix = dir === '.' ? '' : dir.replace(/\\/$/, '')\n return prefix ? id === prefix || id.startsWith(`${prefix}/`) : true\n })\n}\n\nexport const docusaurusAdapter: HumanAdapter = {\n plugin: 'docusaurus',\n scan: ({ root, config }) => {\n const docsDir = optionString(config.options, ['docsDir', 'root'])\n if (!docsDir) return []\n const sidebarFilter = readSidebars(root, optionString(config.options, ['sidebarsFile']))\n return scanMarkdownDocs(root, docsDir, {\n includeRelPath: (relPath, raw) => isIncludedBySidebar(sidebarFilter, docusaurusSidebarId(relPath, raw)),\n idForDoc: docusaurusRecordId,\n slugForDoc: docusaurusSlug,\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { HumanCorpusConfig } from '../../config/schema.js'\nimport { slugFromPath } from '../../lib/markdown.js'\nimport { toPosix } from '../../lib/paths.js'\nimport { walkFiles } from '../../lib/walk.js'\n\nexport type HumanDocRecord = {\n readonly id: string\n readonly url: string\n readonly path: string\n}\n\nexport type HumanDocMap = Record<string, string>\n\nexport type HumanAdapterContext = {\n readonly root: string\n readonly config: HumanCorpusConfig\n}\n\nexport type HumanAdapter = {\n readonly plugin: HumanCorpusConfig['plugin']\n readonly scan: (ctx: HumanAdapterContext) => HumanDocRecord[]\n}\n\nexport const optionString = (\n options: Record<string, unknown> | undefined,\n keys: readonly string[],\n): string | undefined => {\n for (const key of keys) {\n const value = options?.[key]\n if (typeof value === 'string' && value) return value\n }\n return undefined\n}\n\nexport const parseFrontmatter = (raw: string): Record<string, string> => {\n if (!raw.startsWith('---\\n')) return {}\n const end = raw.indexOf('\\n---', 4)\n if (end === -1) return {}\n\n const out: Record<string, string> = {}\n for (const line of raw.slice(4, end).split('\\n')) {\n const match = /^([A-Za-z0-9_-]+):\\s*(.+?)\\s*$/.exec(line)\n if (match?.[1] && match[2]) out[match[1]] = match[2].replace(/^['\"]|['\"]$/g, '')\n }\n return out\n}\n\nexport const docId = (relToHumanRoot: string, raw: string): string => {\n const meta = parseFrontmatter(raw)\n return meta.package ?? meta.module ?? meta.id ?? slugFromPath(relToHumanRoot)\n}\n\nexport const routeSlug = (relToHumanRoot: string, opts?: { stripGroups?: boolean }): string =>\n relToHumanRoot\n .split('/')\n .filter((part) => !opts?.stripGroups || !/^\\(.+\\)$/.test(part))\n .join('/')\n .replace(/(?:^|\\/)index\\.mdx?$/, '')\n .replace(/\\.mdx?$/, '')\n\nexport const humanUrl = (slug: string, urlPrefix: unknown): string => {\n if (typeof urlPrefix !== 'string' || !urlPrefix) return slug\n const prefix = urlPrefix.replace(/\\/$/, '')\n return slug ? `${prefix}/${slug.replace(/^\\//, '')}` : prefix\n}\n\nexport const scanMarkdownDocs = (\n root: string,\n humanRoot: string,\n options?: {\n readonly includeRelPath?: (relToHumanRoot: string, raw: string) => boolean\n readonly idForDoc?: (relToHumanRoot: string, raw: string) => string\n readonly slugForDoc?: (relToHumanRoot: string, raw: string) => string\n readonly urlPrefix?: unknown\n readonly stripGroups?: boolean\n },\n): HumanDocRecord[] => {\n const out: HumanDocRecord[] = []\n const absRoot = join(root, humanRoot)\n\n for (const abs of walkFiles(absRoot, { extensions: ['.md', '.mdx'] })) {\n const relToHumanRoot = toPosix(abs.replace(`${toPosix(absRoot)}/`, ''))\n const raw = readFileSync(abs, 'utf8')\n if (options?.includeRelPath && !options.includeRelPath(relToHumanRoot, raw)) continue\n out.push({\n id: options?.idForDoc?.(relToHumanRoot, raw) ?? docId(relToHumanRoot, raw),\n url: humanUrl(\n options?.slugForDoc?.(relToHumanRoot, raw) ??\n routeSlug(relToHumanRoot, options?.stripGroups ? { stripGroups: true } : undefined),\n options?.urlPrefix,\n ),\n path: abs,\n })\n }\n\n return out\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\n\nimport { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\ntype FumadocsMeta = {\n readonly pages?: unknown\n}\n\nconst readMetaPages = (dir: string): string[] | undefined => {\n const file = join(dir, 'meta.json')\n if (!existsSync(file)) return undefined\n try {\n const meta = JSON.parse(readFileSync(file, 'utf8')) as FumadocsMeta\n return Array.isArray(meta.pages) ? meta.pages.filter((page): page is string => typeof page === 'string') : undefined\n } catch {\n return undefined\n }\n}\n\nconst pageKey = (part: string): string => part.replace(/\\.mdx?$/, '')\n\nconst isDotFile = (relPath: string): boolean => {\n const file = relPath.split('/').at(-1) ?? ''\n return file.startsWith('.')\n}\n\nconst isListedByMeta = (contentRoot: string, relPath: string): boolean => {\n if (isDotFile(relPath)) return false\n\n const parts = relPath.split('/')\n\n for (let i = 0; i < parts.length; i += 1) {\n const dir = join(contentRoot, ...parts.slice(0, i))\n const pages = readMetaPages(dir)\n if (!pages?.length || pages.includes('...')) continue\n\n const key = pageKey(parts[i] ?? '')\n if (!pages.includes(key) && !pages.includes(`./${key}`)) return false\n }\n\n return true\n}\n\nexport const fumadocsAdapter: HumanAdapter = {\n plugin: 'fumadocs',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'root'])\n if (!contentDir) return []\n const contentRoot = join(root, contentDir)\n const excludePrefixes = Array.isArray(config.options?.excludePrefixes)\n ? config.options.excludePrefixes.filter((v): v is string => typeof v === 'string')\n : typeof config.options?.excludePrefix === 'string'\n ? [config.options.excludePrefix]\n : []\n // Nested agent corpora under Fumadocs (e.g. content/docs/for-agents) should not be human docs\n if (!excludePrefixes.includes('for-agents')) excludePrefixes.push('for-agents')\n\n return scanMarkdownDocs(root, contentDir, {\n includeRelPath: (relPath) => {\n if (excludePrefixes.some((prefix) => relPath === prefix || relPath.startsWith(`${prefix}/`))) {\n return false\n }\n return isListedByMeta(contentRoot, relPath)\n },\n urlPrefix: config.options?.urlPrefix,\n stripGroups: true,\n })\n },\n}\n","import { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nexport const plainMarkdownAdapter: HumanAdapter = {\n plugin: 'plain-markdown',\n scan: ({ root, config }) => {\n const humanRoot =\n optionString(config.options, ['contentDir', 'root', 'docsDir']) ?? 'docs'\n return scanMarkdownDocs(root, humanRoot, { urlPrefix: config.options?.urlPrefix })\n },\n}\n","import type { DocBridgeConfigV1, HumanCorpusConfig } from '../../config/schema.js'\nimport { docusaurusAdapter } from './docusaurus.js'\nimport { fumadocsAdapter } from './fumadocs.js'\nimport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\nimport { plainMarkdownAdapter } from './plain-markdown.js'\n\nexport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\n\nconst ADAPTERS: readonly HumanAdapter[] = [\n plainMarkdownAdapter,\n fumadocsAdapter,\n docusaurusAdapter,\n]\n\nconst humanConfigs = (config: DocBridgeConfigV1): HumanCorpusConfig[] => {\n const human = config.corpus.human\n if (!human) return []\n return Array.isArray(human) ? human : [human]\n}\n\nexport const scanHumanDocRecords = (\n root: string,\n config: DocBridgeConfigV1,\n): HumanDocRecord[] => {\n const out: HumanDocRecord[] = []\n const seen = new Set<string>()\n const agentRoot = config.corpus.agent.root.replace(/\\/$/, '')\n\n for (const human of humanConfigs(config)) {\n const adapter = ADAPTERS.find((candidate) => candidate.plugin === human.plugin)\n if (!adapter) continue\n for (const record of adapter.scan({ root, config: human })) {\n // Never treat agent-corpus files as human docs (nested for-agents, etc.)\n if (\n record.path === agentRoot ||\n record.path.startsWith(`${agentRoot}/`) ||\n record.path.includes('/for-agents/') ||\n record.path.endsWith('/for-agents')\n ) {\n continue\n }\n if (seen.has(record.id)) continue\n seen.add(record.id)\n out.push(record)\n }\n }\n\n return out\n}\n\nexport const scanHumanDocs = (root: string, config: DocBridgeConfigV1): HumanDocMap =>\n Object.fromEntries(scanHumanDocRecords(root, config).map((doc) => [doc.id, doc.url]))\n","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../../config/schema.js'\nimport { expandWorkspaceGlobs } from '../../lib/glob-expand.js'\nimport { toPosix } from '../../lib/paths.js'\n\nexport type DiscoveredPackage = {\n readonly id: string\n readonly path: string\n readonly name?: string\n}\n\nconst parsePnpmWorkspace = (yaml: string): string[] => {\n const lines = yaml.split('\\n')\n const patterns: string[] = []\n let inPackages = false\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed === 'packages:') {\n inPackages = true\n continue\n }\n if (inPackages) {\n if (trimmed.startsWith('- ')) {\n patterns.push(trimmed.slice(2).trim().replace(/^['\"]|['\"]$/g, ''))\n continue\n }\n if (trimmed && !trimmed.startsWith('#')) inPackages = false\n }\n }\n return patterns\n}\n\nconst readPackageJson = (dir: string): { name?: string } | null => {\n const file = join(dir, 'package.json')\n if (!existsSync(file)) return null\n try {\n return JSON.parse(readFileSync(file, 'utf8')) as { name?: string }\n } catch {\n return null\n }\n}\n\nexport const discoverPnpmPackages = (\n root: string,\n config: DocBridgeConfigV1,\n): DiscoveredPackage[] => {\n const explicit = config.routing?.options?.packages\n let patterns = explicit\n if (!patterns?.length) {\n const workspaceFile = join(root, 'pnpm-workspace.yaml')\n if (existsSync(workspaceFile)) {\n patterns = parsePnpmWorkspace(readFileSync(workspaceFile, 'utf8'))\n }\n }\n if (!patterns?.length) return []\n\n const dirs = expandWorkspaceGlobs(root, patterns)\n const out: DiscoveredPackage[] = []\n\n for (const abs of dirs) {\n const pkg = readPackageJson(abs)\n if (!pkg) continue\n const rel = toPosix(abs.replace(`${toPosix(root)}/`, ''))\n const folderId = basename(abs)\n const id = pkg.name?.startsWith('@') ? pkg.name.split('/').pop() ?? folderId : (pkg.name ?? folderId)\n out.push({ id, path: rel, ...(pkg.name ? { name: pkg.name } : {}) })\n }\n\n return out.sort((a, b) => a.id.localeCompare(b.id))\n}\n","import { existsSync, readdirSync, statSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { toPosix } from './paths.js'\n\n/** Expand simple workspace globs: `packages/*`, `apps/*`, literal paths. */\nexport const expandWorkspaceGlobs = (root: string, patterns: readonly string[]): string[] => {\n const dirs = new Set<string>()\n\n for (const pattern of patterns) {\n const normalized = toPosix(pattern).replace(/\\/$/, '')\n if (!normalized.includes('*')) {\n const abs = join(root, normalized)\n if (existsSync(abs)) dirs.add(toPosix(abs))\n continue\n }\n\n const star = normalized.indexOf('*')\n const base = join(root, normalized.slice(0, star).replace(/\\/$/, ''))\n if (!existsSync(base)) continue\n\n for (const name of readdirSync(base)) {\n const abs = join(base, name)\n try {\n if (statSync(abs).isDirectory()) dirs.add(toPosix(abs))\n } catch {\n // skip\n }\n }\n }\n\n return [...dirs].sort()\n}","import { existsSync, readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { slugFromPath } from '../lib/markdown.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport {\n retrieveDocBridgeChunks,\n type DocBridgeRetrievedChunk,\n} from '../retriever/doc-bridge-retriever.js'\n\nexport type FetchText = (url: string) => Promise<string>\n\nexport type FederatedRetrieverOptions = {\n readonly fetchText?: FetchText\n readonly limit?: number\n}\n\nconst tokenize = (value: string): string[] =>\n value.toLowerCase().split(/[^a-z0-9]+/).filter((token) => token.length >= 2)\n\nconst scoreText = (query: string, text: string): number => {\n const hay = text.toLowerCase()\n return tokenize(query).reduce((score, token) => score + (hay.includes(token) ? token.length : 0), 0)\n}\n\nconst defaultFetchText: FetchText = async (url) => {\n const signal = AbortSignal.timeout(5_000)\n const res = await fetch(url, { signal })\n if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.status}`)\n return res.text()\n}\n\nconst sourceText = async (\n root: string,\n source: string,\n fetchText: FetchText,\n): Promise<string | null> => {\n try {\n if (/^https?:\\/\\//.test(source)) return await fetchText(source)\n const path = resolve(root, source)\n if (!existsSync(path)) return null\n return readFileSync(path, 'utf8')\n } catch {\n return null\n }\n}\n\nconst sameOrigin = (base: string, target: string): boolean => {\n if (!/^https?:\\/\\//.test(base) || !/^https?:\\/\\//.test(target)) return true\n return new URL(base).origin === new URL(target).origin\n}\n\nexport const parseLlmsTxtLinks = (raw: string): { title: string; url: string; description?: string }[] => {\n const links = [...raw.matchAll(/\\[([^\\]]+)\\]\\(([^)]+)\\)(?::\\s*([^\\n]+))?/g)].map((match) => ({\n title: match[1] ?? match[2] ?? 'link',\n url: match[2] ?? '',\n ...(match[3]?.trim() ? { description: match[3].trim() } : {}),\n })).filter((link) => link.url)\n\n for (const match of raw.matchAll(/(?:^|\\s)(?:Raw|llms\\.txt|Full bundle|ZIP bundle)?:?\\s*(https?:\\/\\/\\S+)/gi)) {\n const url = match[1]?.replace(/[),.;]+$/, '')\n if (url && !links.some((link) => link.url === url)) links.push({ title: slugFromPath(url), url })\n }\n return links\n}\n\nexport const chunksFromMarkdown = (\n property: string,\n raw: string,\n sourceUrl: string,\n): DocBridgeRetrievedChunk[] => {\n const searchable = raw.includes('\\n==== ') ? raw : raw.replace(/^---\\n[\\s\\S]*?\\n---\\n?/, '')\n const sections = searchable.includes('\\n==== ')\n ? searchable.split(/\\n====\\s+/).filter((section) => section.trim())\n : searchable.split(/\\n(?=##?\\s+)/)\n return sections.map((section, index) => {\n const title =\n /^title:\\s*(.+)$/m.exec(section)?.[1]?.trim() ??\n /^https?:\\/\\/\\S+\\/([^/\\s]+)$/m.exec(section)?.[1]?.trim() ??\n /^#+\\s+(.+)$/m.exec(section)?.[1]?.trim() ??\n slugFromPath(sourceUrl)\n const id = slugFromPath(title.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '')) || `${index}`\n return {\n chunkKey: `${property}:federated:${id}`,\n property,\n type: 'federated',\n id,\n path: sourceUrl,\n title,\n summary: section.trim().slice(0, 500),\n score: 0,\n }\n })\n}\n\nexport const loadFederatedChunks = async (\n root: string,\n config: DocBridgeConfigV1,\n options: FederatedRetrieverOptions = {},\n): Promise<DocBridgeRetrievedChunk[]> => {\n const fetchText = options.fetchText ?? defaultFetchText\n const chunks: DocBridgeRetrievedChunk[] = []\n const warnings: string[] = []\n for (const source of config.federation?.sources ?? []) {\n if (source.includeInRetriever === false || !source.llmsTxt) continue\n const llms = await sourceText(root, source.llmsTxt, fetchText)\n if (!llms) {\n warnings.push(`federation source skipped (unavailable): ${source.id} → ${source.llmsTxt}`)\n continue\n }\n chunks.push(...chunksFromMarkdown(source.id, llms, source.llmsTxt))\n const links = parseLlmsTxtLinks(llms)\n for (const link of links) {\n const url = !/^https?:\\/\\//.test(link.url) && source.rawBaseUrl\n ? `${source.rawBaseUrl.replace(/\\/$/, '')}/${link.url.replace(/^\\//, '')}`\n : link.url\n if (!/\\.(md|txt)(?:$|\\?)/.test(url)) continue\n if (!sameOrigin(source.llmsTxt, url)) continue\n const raw = await sourceText(root, url, fetchText)\n if (raw) chunks.push(...chunksFromMarkdown(source.id, raw, url))\n }\n }\n // Soft-fail: never throw for missing remote sources; one-line warn for agents/humans.\n if (warnings.length && process.stderr.isTTY) {\n for (const w of warnings) process.stderr.write(`${w}\\n`)\n }\n return chunks\n}\n\nexport const retrieveHybridChunks = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n query: string,\n options: FederatedRetrieverOptions = {},\n): Promise<DocBridgeRetrievedChunk[]> => {\n const limit = options.limit ?? 8\n const local = retrieveDocBridgeChunks(index, query, {\n property: config.project?.name ?? index.project?.name ?? 'local',\n limit,\n })\n const federated = (await loadFederatedChunks(root, config, options)).map((chunk) => ({\n ...chunk,\n score: scoreText(query, `${chunk.title ?? ''} ${chunk.summary ?? ''} ${chunk.path}`),\n })).filter((chunk) => chunk.score > 0)\n\n const byKey = new Map<string, DocBridgeRetrievedChunk>()\n for (const chunk of [...local, ...federated]) {\n const existing = byKey.get(chunk.chunkKey)\n if (!existing || chunk.score > existing.score) byKey.set(chunk.chunkKey, chunk)\n }\n return [...byKey.values()].sort((a, b) => b.score - a.score).slice(0, limit)\n}\n","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\n\nexport type SearchMatch = {\n readonly type: string\n readonly id: string\n readonly path: string\n readonly summary?: string\n readonly score: number\n}\n\nconst tokenize = (value: string): string[] =>\n value\n .toLowerCase()\n .split(/[^a-z0-9@/_-]+/)\n .filter((t) => t.length >= 2)\n\nconst PACKAGE_INTENT =\n /\\b(package|module|pkg|edit|change|where|owns?|ownership|handoff|start)\\b/i\n\nconst scoreHay = (tokens: readonly string[], hay: string, weight = 1): number => {\n let score = 0\n for (const token of tokens) {\n if (!hay.includes(token)) continue\n score += token.length * weight\n // whole-word-ish bonus\n if (new RegExp(`(?:^|[^a-z0-9])${token}(?:[^a-z0-9]|$)`).test(hay)) {\n score += token.length\n }\n }\n return score\n}\n\n/** Exact / near-exact identity boost so \"core\" ranks the core package over mentions of @agentskit/core. */\nconst identityBoost = (id: string, path: string, tokens: readonly string[], term: string): number => {\n const idLower = id.toLowerCase()\n const termLower = term.toLowerCase().trim()\n const base = path.split('/').pop()?.replace(/\\.mdx?$/i, '').toLowerCase() ?? ''\n let boost = 0\n\n if (idLower === termLower || base === termLower) boost += 200\n if (tokens.length === 1 && (idLower === tokens[0] || base === tokens[0])) boost += 200\n\n for (const token of tokens) {\n if (idLower === token) boost += 120\n else if (idLower.startsWith(`${token}-`) || idLower.endsWith(`-${token}`)) boost += 40\n else if (idLower.includes(token) && idLower.length <= token.length + 4) boost += 30\n if (base === token) boost += 100\n }\n\n // Prefer short ids when term is the id (package name)\n if (tokens.includes(idLower)) boost += Math.max(0, 40 - idLower.length)\n\n return boost\n}\n\nconst preferOwnership = (term: string): boolean =>\n PACKAGE_INTENT.test(term) || /^(where|how).*(edit|change|package|module)/i.test(term)\n\nexport const searchIndex = (index: DocBridgeIndexV1, term: string, limit = 20): SearchMatch[] => {\n const tokens = tokenize(term)\n if (!tokens.length) return []\n\n const wantOwnership = preferOwnership(term)\n const byPath = new Map<string, SearchMatch>()\n\n const consider = (match: SearchMatch) => {\n const key = match.path\n const existing = byPath.get(key)\n if (!existing) {\n byPath.set(key, match)\n return\n }\n // Prefer ownership over knowledge for same path; else higher score\n const prefer =\n match.score > existing.score ||\n (match.score === existing.score && match.type === 'ownership' && existing.type !== 'ownership') ||\n (wantOwnership && match.type === 'ownership' && existing.type !== 'ownership' && match.score >= existing.score - 20)\n if (prefer) byPath.set(key, match)\n }\n\n for (const entry of index.knowledge) {\n const body = (entry as { body?: string }).body ?? ''\n const hay = `${entry.id} ${entry.title} ${entry.description ?? ''} ${entry.path} ${body}`.toLowerCase()\n let score = scoreHay(tokens, hay, 1)\n score += identityBoost(entry.id, entry.path, tokens, term)\n if (score > 0) {\n consider({\n type: 'knowledge',\n id: entry.id,\n path: entry.path,\n ...(entry.description ? { summary: entry.description } : {}),\n score,\n })\n }\n }\n\n for (const [id, owner] of Object.entries(index.lookup?.ownership ?? {})) {\n const path = owner.agentDoc ?? owner.path\n const hay = `${id} ${owner.path} ${owner.purpose ?? ''} ${owner.group ?? ''} ${owner.agentDoc ?? ''} ${owner.humanDoc ?? ''}`.toLowerCase()\n let score = scoreHay(tokens, hay, 2)\n score += identityBoost(id, path, tokens, term)\n // Ownership is primary for routing questions\n if (wantOwnership) score += 25\n score += 15 // slight base preference for actionable ownership targets\n if (score > 0) {\n consider({\n type: 'ownership',\n id,\n path,\n ...(owner.purpose ? { summary: owner.purpose } : {}),\n score,\n })\n }\n }\n\n return [...byPath.values()].sort((a, b) => {\n if (b.score !== a.score) return b.score - a.score\n // Tie-break: exact id match, then ownership, then shorter id\n const aExact = tokens.includes(a.id.toLowerCase()) ? 1 : 0\n const bExact = tokens.includes(b.id.toLowerCase()) ? 1 : 0\n if (bExact !== aExact) return bExact - aExact\n if (a.type === 'ownership' && b.type !== 'ownership') return -1\n if (b.type === 'ownership' && a.type !== 'ownership') return 1\n return a.id.localeCompare(b.id)\n }).slice(0, limit)\n}\n","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { searchIndex } from '../query/search.js'\n\nexport type DocBridgeRetrieverOptions = {\n readonly property?: string\n readonly limit?: number\n}\n\nexport type DocBridgeRetrievedChunk = {\n readonly chunkKey: string\n readonly property: string\n readonly type: string\n readonly id: string\n readonly path: string\n readonly title?: string\n readonly summary?: string\n readonly score: number\n}\n\nexport type DocBridgeRetriever = {\n readonly retrieve: (\n query: string,\n options?: Pick<DocBridgeRetrieverOptions, 'limit'>,\n ) => DocBridgeRetrievedChunk[]\n}\n\nconst chunkKey = (property: string, type: string, id: string): string =>\n `${property}:${type}:${id}`\n\nexport const retrieveDocBridgeChunks = (\n index: DocBridgeIndexV1,\n query: string,\n options: DocBridgeRetrieverOptions = {},\n): DocBridgeRetrievedChunk[] => {\n const property = options.property ?? index.project?.name ?? 'local'\n const limit = options.limit ?? 8\n\n return searchIndex(index, query, limit).map((match) => {\n const knowledge = index.knowledge.find((entry) => entry.id === match.id && entry.path === match.path)\n const owner = index.lookup?.ownership?.[match.id]\n const type = match.type === 'ownership' ? 'ownership' : (knowledge?.type ?? match.type)\n const summary = match.summary ?? owner?.purpose\n return {\n chunkKey: chunkKey(property, type, match.id),\n property,\n type,\n id: match.id,\n path: match.path,\n ...(knowledge?.title ? { title: knowledge.title } : {}),\n ...(summary ? { summary } : {}),\n score: match.score,\n }\n })\n}\n\nexport const createDocBridgeRetriever = (\n index: DocBridgeIndexV1,\n options: DocBridgeRetrieverOptions = {},\n): DocBridgeRetriever => ({\n retrieve: (query, req = {}) =>\n retrieveDocBridgeChunks(index, query, { ...options, ...req }),\n})\n","import { readFileSync } from 'node:fs'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { scanAgentCorpus } from '../index-builder/scan-corpus.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { IndexNotFoundError, loadDocBridgeIndex } from '../query/load-index.js'\n\nexport type GateId = 'index-freshness' | 'human-guide-links' | 'okf-type' | 'docs-style'\n\nconst SUPPORTED_GATES = ['index-freshness', 'human-guide-links', 'okf-type', 'docs-style'] as const\n\nexport type GateResult = {\n readonly id: GateId\n readonly ok: boolean\n readonly message: string\n readonly expected?: string\n readonly actual?: string\n}\n\nexport type GateRunResult = {\n readonly ok: boolean\n readonly results: GateResult[]\n}\n\nexport const runGate = (\n root: string,\n config: DocBridgeConfigV1,\n id: GateId,\n): GateResult => {\n if (id === 'human-guide-links') return runHumanGuideLinksGate(root, config)\n if (id === 'okf-type') return runOkfTypeGate(root, config)\n if (id === 'docs-style') return runDocsStyleGate(root, config)\n if (id !== 'index-freshness') throw new Error(`Unsupported gate \"${id}\"`)\n\n let current: string\n try {\n current = loadDocBridgeIndex(root, config).contentHash\n } catch (error) {\n if (error instanceof IndexNotFoundError) {\n return { id, ok: false, message: error.message }\n }\n throw error\n }\n\n const next = buildDocBridgeIndex({ root, config, write: false }).index.contentHash\n if (current !== next) {\n return {\n id,\n ok: false,\n message: 'Index is stale. Run: ak-docs index',\n expected: next,\n actual: current,\n }\n }\n\n return { id, ok: true, message: 'Index is fresh', expected: next, actual: current }\n}\n\nconst runHumanGuideLinksGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const urls = new Set(scanHumanDocRecords(root, config).map((doc) => doc.url))\n const index = buildDocBridgeIndex({ root, config, write: false }).index\n const localHumanDocs = Object.values(index.handoffs ?? {})\n .map((handoff) => handoff.humanDoc)\n .filter((url): url is string => typeof url === 'string' && url.length > 0)\n .filter((url) => !/^https?:\\/\\//.test(url))\n const missing = localHumanDocs.filter((url, i, all) => !urls.has(url) && all.indexOf(url) === i)\n\n if (missing.length) {\n return {\n id: 'human-guide-links',\n ok: false,\n message: `Broken humanDoc links: ${missing.join(', ')}`,\n expected: 'all local humanDoc links resolve',\n actual: `${missing.length} broken`,\n }\n }\n\n return {\n id: 'human-guide-links',\n ok: true,\n message: `Resolved ${localHumanDocs.length} humanDoc link(s)`,\n }\n}\n\nconst frontmatterType = (markdown: string): string | undefined => {\n const match = /^---\\n([\\s\\S]*?)\\n---/.exec(markdown)\n return match?.[1]?.match(/^type:\\s*['\"]?([^'\"\\n#]+)['\"]?/m)?.[1]?.trim()\n}\n\nconst frontmatterField = (markdown: string, field: string): string | undefined => {\n const match = /^---\\n([\\s\\S]*?)\\n---/.exec(markdown)\n return match?.[1]?.match(new RegExp(`^${field}:\\\\s*['\"]?([^'\\\"\\\\n#]+)['\"]?`, 'm'))?.[1]?.trim()\n}\n\nconst runOkfTypeGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const required = config.corpus.agent.okf?.requireType ?? config.gates?.preset === 'strict'\n if (!required) return { id: 'okf-type', ok: true, message: 'OKF type frontmatter not required' }\n\n const allowed = config.corpus.agent.okf?.allowedTypes\n const bad = scanAgentCorpus(root, config)\n .filter((doc) => doc.path !== config.corpus.agent.index)\n .map((doc) => ({ path: doc.path, type: frontmatterType(readFileSync(doc.absPath, 'utf8')) }))\n .filter((doc) => !doc.type || (allowed && !allowed.includes(doc.type)))\n\n if (bad.length) {\n return {\n id: 'okf-type',\n ok: false,\n message: `Missing or invalid OKF type frontmatter: ${bad.map((doc) => doc.path).join(', ')}`,\n expected: allowed?.length ? `type: ${allowed.join(' | ')}` : 'type frontmatter',\n actual: `${bad.length} invalid`,\n }\n }\n\n return { id: 'okf-type', ok: true, message: 'All agent docs have OKF type frontmatter' }\n}\n\ntype DocsStyleRule =\n | 'title'\n | 'purpose'\n | 'audience'\n | 'task-orientation'\n | 'examples'\n | 'owner-source'\n | 'no-stale-wording'\n\ntype DocsStyleProfile =\n | 'google-dev-docs'\n | 'playbook-okf'\n | 'playbook-okf-soft'\n | 'title-only'\n | 'custom'\n\nconst DOCS_STYLE_RULES: Record<Exclude<DocsStyleProfile, 'custom'>, DocsStyleRule[]> = {\n 'google-dev-docs': [\n 'title',\n 'purpose',\n 'audience',\n 'task-orientation',\n 'examples',\n 'no-stale-wording',\n ],\n /** Full playbook OKF style (strict). */\n 'playbook-okf': ['title', 'purpose', 'owner-source', 'no-stale-wording'],\n /** Soft profile for large existing OKF corpora (title + no stale placeholders). */\n 'playbook-okf-soft': ['title', 'no-stale-wording'],\n 'title-only': ['title'],\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst docsStyleOptions = (\n config: DocBridgeConfigV1,\n): { profile: DocsStyleProfile; required: DocsStyleRule[] } => {\n const raw = config.gates?.options?.['docs-style']\n if (!isRecord(raw)) {\n if (config.gates?.preset === 'playbook') {\n return { profile: 'playbook-okf-soft', required: DOCS_STYLE_RULES['playbook-okf-soft'] }\n }\n return { profile: 'playbook-okf', required: DOCS_STYLE_RULES['playbook-okf'] }\n }\n\n const profile =\n raw.profile === 'google-dev-docs' ||\n raw.profile === 'playbook-okf' ||\n raw.profile === 'playbook-okf-soft' ||\n raw.profile === 'title-only' ||\n raw.profile === 'custom'\n ? raw.profile\n : 'playbook-okf'\n const customRequired = Array.isArray(raw.required)\n ? raw.required.filter((rule): rule is DocsStyleRule =>\n [\n 'title',\n 'purpose',\n 'audience',\n 'task-orientation',\n 'examples',\n 'owner-source',\n 'no-stale-wording',\n ].includes(String(rule)),\n )\n : []\n\n return {\n profile,\n required: profile === 'custom' ? customRequired : DOCS_STYLE_RULES[profile],\n }\n}\n\nconst missingStyleRules = (markdown: string, rules: readonly DocsStyleRule[]): DocsStyleRule[] => {\n const checks: Record<DocsStyleRule, boolean> = {\n title: /^#\\s+\\S+/m.test(markdown),\n purpose: Boolean(frontmatterField(markdown, 'purpose') || /^##\\s+(Purpose|Goal)\\b/im.test(markdown)),\n audience: Boolean(frontmatterField(markdown, 'audience') || /^##\\s+Audience\\b/im.test(markdown)),\n 'task-orientation': /^##\\s+(How to|Usage|Workflow|Tasks?)\\b/im.test(markdown),\n examples: /^##\\s+Examples?\\b/im.test(markdown) || /```[\\s\\S]*?```/.test(markdown),\n 'owner-source': Boolean(\n frontmatterField(markdown, 'owner') ||\n frontmatterField(markdown, 'source') ||\n /^(Owner|Source):\\s+\\S+/im.test(markdown),\n ),\n 'no-stale-wording': !/\\b(TODO|TBD|coming soon|eventually|placeholder)\\b/i.test(markdown),\n }\n\n return rules.filter((rule) => !checks[rule])\n}\n\nconst runDocsStyleGate = (root: string, config: DocBridgeConfigV1): GateResult => {\n const { profile, required } = docsStyleOptions(config)\n if (!required.length) {\n return { id: 'docs-style', ok: true, message: 'No docs-style rules configured' }\n }\n\n const bad = scanAgentCorpus(root, config)\n .filter((doc) => doc.path !== config.corpus.agent.index)\n .map((doc) => ({\n path: doc.path,\n missing: missingStyleRules(readFileSync(doc.absPath, 'utf8'), required),\n }))\n .filter((doc) => doc.missing.length > 0)\n\n if (bad.length) {\n return {\n id: 'docs-style',\n ok: false,\n message: `Docs style issues: ${bad\n .map((doc) => `${doc.path} (${doc.missing.join(', ')})`)\n .join('; ')}`,\n expected: `${profile}: ${required.join(', ')}`,\n actual: `${bad.length} file(s) with style issues`,\n }\n }\n\n return {\n id: 'docs-style',\n ok: true,\n message: `All agent docs pass ${profile} docs-style rules`,\n }\n}\n\nexport const runGates = (\n root: string,\n config: DocBridgeConfigV1,\n ids?: readonly GateId[],\n): GateRunResult => {\n const results = (ids ?? resolveGateIds(config)).map((id) => runGate(root, config, id))\n return { ok: results.every((result) => result.ok), results }\n}\n\nexport const resolveGateIds = (config: DocBridgeConfigV1): GateId[] => {\n const preset = config.gates?.preset ?? 'minimal'\n const ids = new Set<GateId>(\n preset === 'minimal'\n ? ['index-freshness']\n : preset === 'strict'\n ? ['index-freshness', 'human-guide-links', 'okf-type', 'docs-style']\n : preset === 'playbook'\n ? // okf-type only — docs-style soft is opt-in via include (large corpora vary)\n ['index-freshness', 'okf-type']\n : ['index-freshness', 'human-guide-links'],\n )\n\n for (const id of config.gates?.include ?? []) {\n if (SUPPORTED_GATES.includes(id as GateId)) ids.add(id as GateId)\n }\n for (const id of config.gates?.exclude ?? []) {\n if (SUPPORTED_GATES.includes(id as GateId)) ids.delete(id as GateId)\n }\n\n return [...ids]\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { parseDocBridgeIndex } from '../validate.js'\n\nexport class IndexNotFoundError extends Error {\n constructor(readonly path: string) {\n super(`Missing index at ${path}. Run: ak-docs index`)\n this.name = 'IndexNotFoundError'\n }\n}\n\nexport const indexFilePath = (root: string, config: DocBridgeConfigV1): string =>\n join(root, config.index?.outFile ?? '.doc-bridge/index.json')\n\nexport const loadDocBridgeIndex = (root: string, config: DocBridgeConfigV1): DocBridgeIndexV1 => {\n const path = indexFilePath(root, config)\n if (!existsSync(path)) throw new IndexNotFoundError(path)\n const raw = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return parseDocBridgeIndex(raw)\n}\n\nexport const resolveRoot = (cwd?: string): string => resolve(cwd ?? process.cwd())","import { z } from 'zod'\n\nexport const HANDOFF_SCHEMA_VERSION = 1 as const\n\nexport const HandoffTargetTypeSchema = z.enum([\n 'package',\n 'module',\n 'app',\n 'screen',\n 'flow',\n 'component',\n 'intent',\n 'change',\n 'search',\n])\n\nexport type HandoffTargetType = z.infer<typeof HandoffTargetTypeSchema>\n\nexport const HandoffTargetSchema = z\n .object({\n type: HandoffTargetTypeSchema,\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512).optional(),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n })\n .strict()\n\nexport type HandoffTarget = z.infer<typeof HandoffTargetSchema>\n\nexport const HandoffBridgeSchema = z\n .object({\n humanDoc: z.enum(['linked', 'missing', 'external']),\n action: z.string().min(1).max(256).optional(),\n bootstrap: z.string().min(1).max(256).optional(),\n })\n .strict()\n\nexport type HandoffBridge = z.infer<typeof HandoffBridgeSchema>\n\n/** v1 — canonical AgentHandoff. Legacy payloads may omit schemaVersion. */\nexport const AgentHandoffV1Schema = z\n .object({\n type: z.literal('agent-handoff'),\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).default(HANDOFF_SCHEMA_VERSION),\n source: z.string().min(1).max(512),\n target: HandoffTargetSchema,\n startHere: z.string().min(1).max(512),\n readBeforeEditing: z.array(z.string().min(1).max(512)).max(64),\n editRoots: z.array(z.string().min(1).max(512)).max(32),\n checks: z.array(z.string().min(1).max(256)).max(32),\n humanDoc: z.string().min(1).max(512).nullable().optional(),\n bridge: HandoffBridgeSchema.optional(),\n playbookPatterns: z.array(z.string().url()).max(16).optional(),\n notes: z.array(z.string().min(1).max(1024)).max(16),\n })\n .strict()\n\nexport type AgentHandoffV1 = z.infer<typeof AgentHandoffV1Schema>\n\n/** Accept legacy handoffs without schemaVersion. */\nexport const AgentHandoffLegacySchema = AgentHandoffV1Schema.omit({ schemaVersion: true }).extend({\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).optional(),\n})\n\nexport const AgentSearchMatchSchema = z\n .object({\n type: z.string().min(1).max(64),\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n summary: z.string().max(2048).optional(),\n score: z.number().optional(),\n refs: z.number().int().nonnegative().optional(),\n })\n .strict()\n\nexport const AgentSearchV1Schema = z\n .object({\n type: z.literal('agent-search'),\n schemaVersion: z.literal(HANDOFF_SCHEMA_VERSION).default(HANDOFF_SCHEMA_VERSION),\n source: z.string().min(1).max(512),\n term: z.string().min(1).max(512),\n count: z.number().int().nonnegative(),\n bestMatch: AgentSearchMatchSchema.nullable(),\n matches: z.array(AgentSearchMatchSchema).max(32),\n nextCommands: z.array(z.string().min(1).max(512)).max(16),\n })\n .strict()\n\nexport type AgentSearchV1 = z.infer<typeof AgentSearchV1Schema>\n\nexport const normalizeAgentHandoff = (input: unknown): AgentHandoffV1 =>\n AgentHandoffV1Schema.parse(AgentHandoffLegacySchema.parse(input))\n","import { z } from 'zod'\n\nimport { AgentHandoffLegacySchema } from './agent-handoff.js'\n\nexport const INDEX_SCHEMA_VERSION = 1 as const\n\nexport const ContentHashAlgoSchema = z.literal('sha256-normalized-v1')\n\nexport const EcosystemPropertySchema = z\n .object({\n id: z.string().min(1).max(64),\n name: z.string().min(1).max(128),\n url: z.string().url().optional(),\n llms: z.string().url().optional(),\n })\n .strict()\n\nexport const KnowledgeEntrySchema = z\n .object({\n id: z.string().min(1).max(256),\n type: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n description: z.string().max(2_048).optional(),\n /** Flattened body excerpt for full-text search (not for display). */\n body: z.string().max(8_000).optional(),\n links: z.array(z.string().min(1).max(512)).max(64).optional(),\n tags: z.array(z.string().min(1).max(64)).max(32).optional(),\n })\n .strict()\n\nexport const CapabilityRefSchema = z\n .object({\n id: z.string().min(1).max(256),\n kind: z.string().min(1).max(64),\n description: z.string().max(512).optional(),\n })\n .strict()\n\nexport const OwnershipRecordSchema = z\n .object({\n id: z.string().min(1).max(256),\n path: z.string().min(1).max(512),\n group: z.string().min(1).max(128).optional(),\n layer: z.string().min(1).max(32).optional(),\n purpose: z.string().max(1024).optional(),\n checks: z.array(z.string().min(1).max(256)).max(32),\n agentDoc: z.string().min(1).max(512).optional(),\n humanDoc: z.string().min(1).max(512).optional(),\n readme: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const IndexLookupSchema = z\n .object({\n packages: z.array(z.string().min(1).max(256)).max(2_000),\n ownership: z.record(z.string().min(1).max(256), OwnershipRecordSchema).optional(),\n intents: z\n .record(\n z.string().min(1).max(128),\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n paths: z.array(z.string().min(1).max(512)).max(32),\n })\n .strict(),\n )\n .optional(),\n changes: z\n .record(\n z.string().min(1).max(128),\n z\n .object({\n id: z.string().min(1).max(128),\n title: z.string().min(1).max(256),\n startHere: z.string().min(1).max(512),\n relatedPackages: z.array(z.string().min(1).max(256)).max(32).optional(),\n })\n .strict(),\n )\n .optional(),\n })\n .strict()\n\nexport const DocBridgeIndexV1Schema = z\n .object({\n schemaVersion: z.literal(INDEX_SCHEMA_VERSION),\n contentHash: z.string().regex(/^[a-f0-9]{64}$/),\n contentHashAlgo: ContentHashAlgoSchema,\n generatedAt: z.string().datetime().optional(),\n project: z\n .object({\n name: z.string().min(1).max(128),\n root: z.string().min(1).max(512).optional(),\n })\n .strict()\n .optional(),\n properties: z.array(EcosystemPropertySchema).max(16).optional(),\n knowledge: z.array(KnowledgeEntrySchema).max(10_000),\n capabilities: z.array(CapabilityRefSchema).max(5_000).optional(),\n handoffs: z.record(z.string().min(1).max(256), AgentHandoffLegacySchema).optional(),\n lookup: IndexLookupSchema.optional(),\n })\n .strict()\n\nexport type DocBridgeIndexV1 = z.infer<typeof DocBridgeIndexV1Schema>\nexport type KnowledgeEntry = z.infer<typeof KnowledgeEntrySchema>","import { z } from 'zod'\n\nexport const MEMORY_CANDIDATE_SCHEMA_VERSION = 1 as const\n\nexport const MemorySourceSchema = z.enum([\n 'cursor',\n 'claude',\n 'codex',\n 'copilot',\n 'agent-memory',\n 'manual',\n])\n\nexport const MemorySuggestedTypeSchema = z.enum([\n 'user',\n 'feedback',\n 'project',\n 'reference',\n 'unknown',\n])\n\nexport const MemoryCandidateV1Schema = z\n .object({\n schemaVersion: z.literal(MEMORY_CANDIDATE_SCHEMA_VERSION),\n id: z.string().min(1).max(256),\n source: MemorySourceSchema,\n rawPath: z.string().min(1).max(512).optional(),\n fact: z.string().min(1).max(8_000),\n why: z.string().max(4_000).optional(),\n howToApply: z.string().max(4_000).optional(),\n suggestedType: MemorySuggestedTypeSchema,\n confidence: z.number().min(0).max(1),\n references: z.array(z.string().min(1).max(512)).max(64),\n })\n .strict()\n\nexport type MemoryCandidateV1 = z.infer<typeof MemoryCandidateV1Schema>","import { ZodError } from 'zod'\n\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './config/schema.js'\nimport {\n AgentHandoffLegacySchema,\n AgentHandoffV1Schema,\n AgentSearchV1Schema,\n normalizeAgentHandoff,\n type AgentHandoffV1,\n type AgentSearchV1,\n} from './schemas/agent-handoff.js'\nimport { DocBridgeIndexV1Schema, type DocBridgeIndexV1 } from './schemas/doc-bridge-index.js'\nimport {\n MemoryCandidateV1Schema,\n type MemoryCandidateV1,\n} from './schemas/memory-candidate.js'\n\nexport type ParseIssue = {\n readonly path: string\n readonly message: string\n}\n\nexport type ParseResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly issues: readonly ParseIssue[] }\n\nconst zodIssues = (error: ZodError): readonly ParseIssue[] =>\n error.issues.map((issue) => ({\n path: issue.path.join('.') || '(root)',\n message: issue.message,\n }))\n\nexport const safeParseAgentHandoff = (input: unknown): ParseResult<AgentHandoffV1> => {\n const legacy = AgentHandoffLegacySchema.safeParse(input)\n if (!legacy.success) return { ok: false, issues: zodIssues(legacy.error) }\n const normalized = AgentHandoffV1Schema.safeParse(normalizeAgentHandoff(legacy.data))\n if (!normalized.success) return { ok: false, issues: zodIssues(normalized.error) }\n return { ok: true, value: normalized.data }\n}\n\nexport const parseAgentHandoff = (input: unknown): AgentHandoffV1 => {\n const result = safeParseAgentHandoff(input)\n if (!result.ok) {\n throw new Error(\n `Invalid AgentHandoff:\\n${result.issues.map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n )\n }\n return result.value\n}\n\nexport const parseAgentSearch = (input: unknown): AgentSearchV1 => AgentSearchV1Schema.parse(input)\n\nexport const parseDocBridgeIndex = (input: unknown): DocBridgeIndexV1 =>\n DocBridgeIndexV1Schema.parse(input)\n\nexport const parseMemoryCandidate = (input: unknown): MemoryCandidateV1 =>\n MemoryCandidateV1Schema.parse(input)\n\nexport const parseDocBridgeConfig = (input: unknown): DocBridgeConfigV1 => {\n const result = DocBridgeConfigV1Schema.safeParse(input)\n if (!result.success) {\n throw new Error(\n `Invalid doc-bridge config:\\n${zodIssues(result.error).map((i) => ` - ${i.path}: ${i.message}`).join('\\n')}`,\n )\n }\n return result.data\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n normalizeAgentHandoff,\n type AgentHandoffV1,\n type AgentSearchV1,\n} from '../schemas/agent-handoff.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { searchIndex } from './search.js'\n\nexport type QueryKind = 'package' | 'ownership' | 'intent' | 'change' | 'search'\n\nexport type QueryRequest = {\n readonly kind: QueryKind\n readonly id?: string\n readonly term?: string\n readonly agent?: boolean\n}\n\nexport type QueryResult =\n | { readonly type: 'package' | 'ownership' | 'intent' | 'change' | 'search'; readonly data: unknown }\n | AgentHandoffV1\n | AgentSearchV1\n\nconst handoffForPackage = (\n index: DocBridgeIndexV1,\n id: string,\n config: DocBridgeConfigV1,\n): AgentHandoffV1 => {\n const fromIndex = index.handoffs?.[id]\n if (fromIndex) return normalizeAgentHandoff(fromIndex)\n\n const owner = index.lookup?.ownership?.[id]\n if (!owner) throw new Error(`Unknown package/ownership id \"${id}\". Try: ak-docs list packages`)\n\n const bridge = owner.humanDoc\n ? /^https?:\\/\\//.test(owner.humanDoc)\n ? { humanDoc: 'external' as const }\n : { humanDoc: 'linked' as const }\n : config.corpus.human\n ? {\n humanDoc: 'missing' as const,\n action: 'ak-docs bootstrap agent-docs',\n bootstrap: `docs/for-agents/human/${id}.md`,\n }\n : undefined\n\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: {\n type: 'package',\n id,\n path: owner.path,\n ...(owner.group ? { group: owner.group } : {}),\n ...(owner.layer ? { layer: owner.layer } : {}),\n },\n startHere: owner.agentDoc ?? config.corpus.agent.index ?? '',\n readBeforeEditing: [owner.agentDoc, 'AGENTS.md'].filter(Boolean),\n editRoots: [owner.path],\n checks: [...owner.checks],\n ...(owner.humanDoc ? { humanDoc: owner.humanDoc } : {}),\n ...(bridge ? { bridge } : {}),\n notes: [\n ...(owner.purpose ? [owner.purpose] : []),\n ...(!owner.humanDoc && config.corpus.human\n ? [`Human guide missing for ${id}. Run: ak-docs bootstrap agent-docs`]\n : []),\n ],\n })\n}\n\nexport const runQuery = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n req: QueryRequest,\n): QueryResult => {\n if (req.kind === 'search') {\n const term = req.term ?? req.id ?? ''\n const matches = searchIndex(index, term)\n if (req.agent) {\n const payload: AgentSearchV1 = {\n type: 'agent-search',\n schemaVersion: 1,\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n term,\n count: matches.length,\n bestMatch: matches[0]\n ? {\n type: matches[0].type,\n id: matches[0].id,\n path: matches[0].path,\n ...(matches[0].summary ? { summary: matches[0].summary } : {}),\n score: matches[0].score,\n }\n : null,\n matches: matches.slice(0, 8).map((m) => ({\n type: m.type,\n id: m.id,\n path: m.path,\n ...(m.summary ? { summary: m.summary } : {}),\n score: m.score,\n })),\n nextCommands: [...new Set(matches.slice(0, 5).map((m) =>\n m.type === 'ownership' || index.lookup?.ownership?.[m.id]\n ? `ak-docs query ownership ${m.id} --agent`\n : 'ak-docs list knowledge --text',\n ))],\n }\n return payload\n }\n return { type: 'search', data: { term, count: matches.length, matches } }\n }\n\n const id = req.id\n if (!id) throw new Error(`Missing id for query kind \"${req.kind}\"`)\n\n if (req.kind === 'package' || req.kind === 'ownership') {\n if (req.agent) return handoffForPackage(index, id, config)\n const owner = index.lookup?.ownership?.[id]\n return { type: req.kind, data: owner ?? index.handoffs?.[id] ?? null }\n }\n\n if (req.kind === 'intent') {\n const intent = index.lookup?.intents?.[id]\n if (!intent) throw new Error(`Unknown intent \"${id}\"`)\n if (req.agent) {\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: { type: 'intent', id },\n startHere: intent.paths[0] ?? '',\n readBeforeEditing: [...intent.paths],\n editRoots: [],\n checks: [],\n notes: [intent.title],\n })\n }\n return { type: 'intent', data: intent }\n }\n\n if (req.kind === 'change') {\n const change = index.lookup?.changes?.[id]\n if (!change) throw new Error(`Unknown change route \"${id}\"`)\n if (req.agent) {\n return normalizeAgentHandoff({\n type: 'agent-handoff',\n source: config.index?.outFile ?? '.doc-bridge/index.json',\n target: { type: 'change', id },\n startHere: change.startHere,\n readBeforeEditing: ['AGENTS.md', config.corpus.agent.index ?? ''].filter(Boolean),\n editRoots: [change.startHere],\n checks: [],\n notes: [change.title],\n })\n }\n return { type: 'change', data: change }\n }\n\n throw new Error(`Unsupported query kind: ${req.kind as string}`)\n}\n","import { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { importPeer } from './peers.js'\n\nconst readEnv = (name: string | undefined): string | undefined => {\n if (!name) return undefined\n const value = process.env[name]\n return value && value.length > 0 ? value : undefined\n}\n\nexport type ResolvedIntelligence = {\n readonly adapter: unknown\n readonly embed: unknown\n readonly provider: string\n readonly model?: string\n}\n\nexport const resolveIntelligenceRuntime = async (\n config: DocBridgeConfigV1,\n): Promise<ResolvedIntelligence> => {\n if (!config.intelligence?.enabled) {\n throw new Error('Intelligence is disabled. Set intelligence.enabled: true in doc-bridge config.')\n }\n const adapterCfg = config.intelligence.adapter\n if (!adapterCfg) {\n throw new Error('intelligence.adapter is required for chat/RAG (provider + optional model).')\n }\n\n const adapters = await importPeer<typeof import('@agentskit/adapters')>('@agentskit/adapters')\n const provider = adapterCfg.provider\n const model = adapterCfg.model\n const apiKey = readEnv(adapterCfg.apiKeyEnv) ?? readEnv('OPENAI_API_KEY') ?? readEnv('ANTHROPIC_API_KEY')\n const baseUrl = adapterCfg.baseUrl\n\n let adapter: unknown\n let embed: unknown\n\n switch (provider) {\n case 'ollama': {\n adapter = adapters.ollama({ model: model ?? 'llama3.2', ...(baseUrl ? { baseUrl } : {}) })\n embed = adapters.ollamaEmbedder({\n model: typeof adapterCfg.options?.embedModel === 'string'\n ? adapterCfg.options.embedModel\n : 'nomic-embed-text',\n ...(baseUrl ? { baseUrl } : {}),\n })\n break\n }\n case 'openai': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'OPENAI_API_KEY'}`)\n adapter = adapters.openai({ apiKey, ...(model ? { model } : {}), ...(baseUrl ? { baseUrl } : {}) })\n embed = adapters.openaiEmbedder({ apiKey, model: 'text-embedding-3-small' })\n break\n }\n case 'anthropic': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'ANTHROPIC_API_KEY'}`)\n adapter = adapters.anthropic({ apiKey, ...(model ? { model } : {}) })\n // Anthropic has no default embedder in adapters — fall back to openai-compatible if key present\n const openaiKey = readEnv('OPENAI_API_KEY')\n if (openaiKey) embed = adapters.openaiEmbedder({ apiKey: openaiKey })\n else {\n throw new Error(\n 'Anthropic chat requires an embedder for RAG. Set OPENAI_API_KEY for embeddings or use provider: ollama.',\n )\n }\n break\n }\n case 'openrouter': {\n if (!apiKey) throw new Error(`Missing API key env ${adapterCfg.apiKeyEnv ?? 'OPENROUTER_API_KEY'}`)\n adapter = adapters.openrouter({ apiKey, ...(model ? { model } : {}) })\n embed = adapters.openaiEmbedder({\n apiKey,\n model: 'text-embedding-3-small',\n // openrouter embeddings path may vary; adapters handle openai-compatible\n })\n break\n }\n case 'custom':\n throw new Error(\n 'provider: custom requires a programmatic integration. Use ollama, openai, anthropic, or openrouter in v0.1.',\n )\n default:\n throw new Error(`Unsupported intelligence.adapter.provider: ${String(provider)}`)\n }\n\n return { adapter, embed, provider, ...(model ? { model } : {}) }\n}\n\nexport const defaultVectorStorePath = (root: string): string => join(root, '.doc-bridge', 'vectors')\n","export class PeerMissingError extends Error {\n constructor(\n readonly peer: string,\n readonly installHint: string,\n ) {\n super(\n `Optional peer \"${peer}\" is not installed.\\nInstall Layer 1 intelligence peers:\\n ${installHint}`,\n )\n this.name = 'PeerMissingError'\n }\n}\n\nconst LAYER1_INSTALL =\n 'npm i -D @agentskit/rag @agentskit/ink @agentskit/adapters @agentskit/memory react'\n\n/** True when a dynamic import failed because the package could not be resolved/loaded. */\nexport const isPeerResolutionFailure = (error: unknown): boolean => {\n const parts: string[] = []\n let cur: unknown = error\n for (let i = 0; i < 6 && cur; i += 1) {\n if (cur instanceof Error) {\n parts.push(cur.message, cur.name)\n const code = (cur as NodeJS.ErrnoException).code\n if (code) parts.push(String(code))\n cur = cur.cause\n continue\n }\n parts.push(String(cur))\n break\n }\n const text = parts.join(' ').toLowerCase()\n return (\n text.includes('cannot find package') ||\n text.includes('cannot find module') ||\n text.includes('module not found') ||\n text.includes('err_module_not_found') ||\n text.includes('err_package_not_found') ||\n text.includes('err_package_path_not_exported') ||\n text.includes('failed to resolve module') ||\n text.includes('failed to resolve') ||\n // Node / network resolution edge cases for bare package imports\n text.includes('fetch failed') ||\n text.includes('enotfound') ||\n text.includes('getaddrinfo')\n )\n}\n\nexport const importPeer = async <T>(name: string): Promise<T> => {\n try {\n return (await import(name)) as T\n } catch (error) {\n if (isPeerResolutionFailure(error)) {\n throw new PeerMissingError(name, LAYER1_INSTALL)\n }\n throw error\n }\n}\n\nexport const layer1InstallHint = (): string => LAYER1_INSTALL\n","import { readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { defaultVectorStorePath, resolveIntelligenceRuntime } from './adapter.js'\nimport { importPeer } from './peers.js'\n\nexport type RagSearchHit = {\n readonly id?: string\n readonly content: string\n readonly score?: number\n readonly source?: string\n readonly metadata?: Record<string, unknown>\n}\n\nexport type DocBridgeRag = {\n readonly ingest: () => Promise<{ documentCount: number; storePath: string }>\n readonly search: (query: string, topK?: number) => Promise<RagSearchHit[]>\n readonly retriever: unknown\n readonly storePath: string\n}\n\nconst loadDocuments = (\n root: string,\n index: DocBridgeIndexV1,\n sources: readonly string[],\n): Array<{ id: string; content: string; source: string; metadata: Record<string, unknown> }> => {\n const includeAgent = sources.includes('agent') || sources.length === 0\n const docs: Array<{ id: string; content: string; source: string; metadata: Record<string, unknown> }> = []\n\n if (includeAgent) {\n for (const entry of index.knowledge) {\n const abs = join(root, entry.path)\n let content = ''\n try {\n content = readFileSync(abs, 'utf8')\n } catch {\n content = [entry.title, entry.description].filter(Boolean).join('\\n\\n')\n }\n docs.push({\n id: entry.id,\n content,\n source: entry.path,\n metadata: { type: entry.type, title: entry.title, path: entry.path },\n })\n }\n }\n\n // Human corpus is linked via humanDoc URLs; optional future: ingest human paths from adapters\n return docs\n}\n\nexport const createDocBridgeRag = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n): Promise<DocBridgeRag> => {\n const { embed } = await resolveIntelligenceRuntime(config)\n const ragMod = await importPeer<typeof import('@agentskit/rag')>('@agentskit/rag')\n const memoryMod = await importPeer<typeof import('@agentskit/memory')>('@agentskit/memory')\n\n const storePath =\n typeof config.intelligence?.retriever?.options?.storePath === 'string'\n ? join(root, config.intelligence.retriever.options.storePath)\n : defaultVectorStorePath(root)\n\n const store = memoryMod.fileVectorMemory({ path: storePath })\n const rag = ragMod.createRAG({\n embed,\n store,\n topK: 6,\n chunkSize: 900,\n chunkOverlap: 120,\n })\n\n const sources = config.intelligence?.chat?.sources ?? ['agent', 'human']\n\n return {\n storePath,\n retriever: rag,\n ingest: async () => {\n const documents = loadDocuments(root, index, sources)\n await rag.ingest(documents)\n return { documentCount: documents.length, storePath }\n },\n search: async (query, topK = 6) => {\n const hits = await rag.search(query, { topK })\n return hits.map((hit) => ({\n ...(hit.id ? { id: hit.id } : {}),\n content: hit.content,\n ...(hit.score !== undefined ? { score: hit.score } : {}),\n ...(hit.source ? { source: hit.source } : {}),\n ...(hit.metadata ? { metadata: hit.metadata } : {}),\n }))\n },\n }\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { runQuery } from '../query/query.js'\nimport { resolveIntelligenceRuntime } from './adapter.js'\nimport {\n PeerMissingError,\n importPeer,\n isPeerResolutionFailure,\n layer1InstallHint,\n} from './peers.js'\nimport { createDocBridgeRag } from './rag.js'\n\nconst wrapIntelligenceError = (error: unknown): Error => {\n if (error instanceof PeerMissingError) return error\n if (isPeerResolutionFailure(error)) {\n return new PeerMissingError('@agentskit/*', layer1InstallHint())\n }\n const message = error instanceof Error ? error.message : String(error)\n if (/fetch failed|econnrefused|enotfound|network|socket/i.test(message)) {\n return new Error(\n `Intelligence provider request failed (${message}).\\n` +\n `Check the model server (e.g. \\`ollama serve\\`) and Layer 1 peers:\\n ${layer1InstallHint()}`,\n )\n }\n return error instanceof Error ? error : new Error(message)\n}\n\nconst handoffFirstHint = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n question: string,\n): string | undefined => {\n if (config.intelligence?.chat?.handoffFirst === false) return undefined\n const tokens = question\n .toLowerCase()\n .split(/[^a-z0-9@/_-]+/)\n .filter((t) => t.length >= 2)\n const packages = index.lookup?.packages ?? []\n const hit = packages.find((id) => tokens.includes(id.toLowerCase()))\n if (!hit) return undefined\n try {\n const handoff = runQuery(index, config, { kind: 'ownership', id: hit, agent: true })\n return [\n '## Deterministic AgentHandoff (prefer for edits)',\n '```json',\n JSON.stringify(handoff, null, 2),\n '```',\n 'Use startHere / editRoots / checks before broad exploration.',\n ].join('\\n')\n } catch {\n return undefined\n }\n}\n\nconst systemPrompt = (\n index: DocBridgeIndexV1,\n config: DocBridgeConfigV1,\n provider: string,\n model: string | undefined,\n question?: string,\n): string => {\n const prefix = question ? handoffFirstHint(index, config, question) : undefined\n return [\n 'You are a documentation assistant for this repository (doc-bridge).',\n 'Prefer deterministic AgentHandoff fields for code edits.',\n 'Cite file paths from retrieved context.',\n `Provider: ${provider}${model ? ` / ${model}` : ''}.`,\n 'If unsure, suggest: ak-docs query ownership <id> --agent or MCP handoff.resolve.',\n prefix ?? '',\n ]\n .filter(Boolean)\n .join('\\n\\n')\n}\n\nexport const runChatOnce = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n question: string,\n): Promise<{ content: string; handoffPrefixed: boolean }> => {\n try {\n const { adapter, provider, model } = await resolveIntelligenceRuntime(config)\n const core = await importPeer<typeof import('@agentskit/core')>('@agentskit/core')\n const rag = await createDocBridgeRag(root, config, index)\n await rag.ingest()\n\n const controller = core.createChatController({\n adapter,\n retriever: rag.retriever,\n system: systemPrompt(index, config, provider, model, question),\n })\n\n const result = await controller.send(question)\n const content =\n typeof result?.content === 'string' ? result.content : JSON.stringify(result, null, 2)\n\n return {\n content,\n handoffPrefixed: Boolean(handoffFirstHint(index, config, question)),\n }\n } catch (error) {\n throw wrapIntelligenceError(error)\n }\n}\n\nexport const startInkChat = async (\n root: string,\n config: DocBridgeConfigV1,\n index: DocBridgeIndexV1,\n): Promise<void> => {\n try {\n const { adapter, provider, model } = await resolveIntelligenceRuntime(config)\n const rag = await createDocBridgeRag(root, config, index)\n await rag.ingest()\n\n const React = await importPeer<typeof import('react')>('react')\n const ink = await importPeer<typeof import('ink')>('ink')\n const agentskitInk = await importPeer<typeof import('@agentskit/ink')>('@agentskit/ink')\n\n const App = () => {\n const chat = agentskitInk.useChat({\n adapter,\n retriever: rag.retriever,\n system: systemPrompt(index, config, provider, model),\n })\n\n return React.createElement(\n agentskitInk.ChatContainer as never,\n null,\n ...chat.messages.map((msg) =>\n React.createElement(agentskitInk.Message as never, {\n key: msg.id,\n message: msg,\n } as never),\n ),\n React.createElement(agentskitInk.InputBar as never, {\n chat,\n placeholder: 'Ask about project docs (handoff-first RAG)…',\n } as never),\n )\n }\n\n const instance = ink.render(React.createElement(App))\n await instance.waitUntilExit()\n } catch (error) {\n throw wrapIntelligenceError(error)\n }\n}\n","import { existsSync, readFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport { firstHeading, firstParagraph, slugFromPath } from '../lib/markdown.js'\nimport { toPosix } from '../lib/paths.js'\nimport { walkFiles } from '../lib/walk.js'\nimport type { MemoryCandidateV1 } from '../schemas/memory-candidate.js'\n\nconst memoryFact = (raw: string, id: string): string =>\n firstParagraph(raw) ?? firstHeading(raw) ?? id\n\nconst relativePath = (root: string, abs: string): string =>\n toPosix(abs).replace(`${toPosix(root)}/`, '')\n\nconst ingestMarkdownDir = (\n root: string,\n dir: string,\n source: MemoryCandidateV1['source'],\n confidence: number,\n): MemoryCandidateV1[] => {\n if (!existsSync(dir)) return []\n\n return walkFiles(dir, { extensions: ['.md', '.mdc'] }).map((abs) => {\n const rel = relativePath(root, abs)\n const raw = readFileSync(abs, 'utf8')\n const id = slugFromPath(rel)\n return {\n schemaVersion: 1,\n id,\n source,\n rawPath: rel,\n fact: memoryFact(raw, id),\n suggestedType: 'project',\n confidence,\n references: [],\n }\n })\n}\n\nexport const ingestCursorRules = (root: string): MemoryCandidateV1[] => {\n const dir = join(root, '.cursor', 'rules')\n return ingestMarkdownDir(root, dir, 'cursor', 0.6)\n}\n\nexport const ingestAgentMemory = (root: string): MemoryCandidateV1[] =>\n ingestMarkdownDir(root, join(root, '.agent-memory'), 'agent-memory', 0.7)\n\nexport const ingestMemoryCandidates = (root: string): MemoryCandidateV1[] => [\n ...ingestAgentMemory(root),\n ...ingestCursorRules(root),\n]\n","import type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport type { MemoryCandidateV1 } from '../schemas/memory-candidate.js'\nimport { searchIndex } from '../query/search.js'\n\nexport type MemoryRoute = 'agent' | 'human' | 'playbook' | 'discard'\n\nexport type MemoryClassification = {\n readonly candidate: MemoryCandidateV1\n readonly route: MemoryRoute\n readonly reason: string\n readonly target?: string\n readonly duplicateOf?: string\n}\n\nexport type SafetyFinding = {\n readonly candidateId: string\n readonly kind: 'secret' | 'private-email'\n readonly message: string\n}\n\nexport type MemoryPromotionDraft = {\n readonly ok: boolean\n readonly title: string\n readonly body: string\n readonly findings: SafetyFinding[]\n readonly classifications: MemoryClassification[]\n}\n\nconst packageOwnership = /\\b(?:package|module)\\s+([a-z0-9._/-]+)\\s+(?:owns|owner|responsible|routes?)\\b/i\nconst secretPattern = /\\b(?:api[_-]?key|token|secret|password)\\s*[:=]\\s*\\S+/i\nconst privateEmailPattern = /\\b[A-Z0-9._%+-]+@(?!example\\.com\\b)[A-Z0-9.-]+\\.[A-Z]{2,}\\b/i\n\nconst classifyRoute = (fact: string): Pick<MemoryClassification, 'route' | 'reason'> => {\n if (/\\b(noise|scratch|ignore|discard)\\b/i.test(fact)) {\n return { route: 'discard', reason: 'marked as noise' }\n }\n if (/\\b(playbook|pattern|principle|best practice)\\b/i.test(fact)) {\n return { route: 'playbook', reason: 'generalizable pattern' }\n }\n if (/\\b(user-facing|human guide|docs site|tutorial|guide)\\b/i.test(fact)) {\n return { route: 'human', reason: 'user-facing documentation' }\n }\n return { route: 'agent', reason: 'project convention or ownership note' }\n}\n\nexport const classifyMemoryCandidates = (\n candidates: readonly MemoryCandidateV1[],\n index: DocBridgeIndexV1,\n): MemoryClassification[] =>\n candidates.map((candidate) => {\n const duplicate = searchIndex(index, candidate.fact, 1)[0]\n const targetMatch = packageOwnership.exec(candidate.fact)\n const route = classifyRoute(candidate.fact)\n return {\n candidate,\n ...route,\n ...(targetMatch?.[1] ? { target: targetMatch[1] } : {}),\n ...(duplicate && duplicate.score >= 16 ? { duplicateOf: duplicate.path } : {}),\n }\n })\n\nexport const scanMemorySafety = (\n classifications: readonly MemoryClassification[],\n): SafetyFinding[] =>\n classifications.flatMap(({ candidate }) => {\n const findings: SafetyFinding[] = []\n if (secretPattern.test(candidate.fact)) {\n findings.push({\n candidateId: candidate.id,\n kind: 'secret',\n message: 'Potential secret-like value in memory fact',\n })\n }\n if (privateEmailPattern.test(candidate.fact)) {\n findings.push({\n candidateId: candidate.id,\n kind: 'private-email',\n message: 'Potential private email in memory fact',\n })\n }\n return findings\n })\n\nexport const draftMemoryPromotion = (\n classifications: readonly MemoryClassification[],\n): MemoryPromotionDraft => {\n const findings = scanMemorySafety(classifications)\n const safe = findings.length === 0\n const lines = classifications.map(({ candidate, route, reason, target, duplicateOf }) =>\n [\n `- ${candidate.id}: ${route}`,\n `reason=${reason}`,\n target ? `target=${target}` : undefined,\n duplicateOf ? `duplicateOf=${duplicateOf}` : undefined,\n `fact=${candidate.fact}`,\n ].filter(Boolean).join(' | '),\n )\n\n return {\n ok: safe,\n title: 'Draft doc-bridge memory promotion',\n body: [\n '# Draft doc-bridge memory promotion',\n '',\n safe ? 'Safety scan: pass.' : 'Safety scan: blocked. Redact findings before PR.',\n '',\n '## Candidates',\n '',\n ...lines,\n '',\n '## Policy',\n '',\n '- Draft only; never auto-merge.',\n '- Run doc-bridge gates before opening a PR.',\n ].join('\\n'),\n findings,\n classifications: [...classifications],\n }\n}\n","import { execFileSync, spawnSync } from 'node:child_process'\nimport { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\n\nimport type { MemoryPromotionDraft } from './pipeline.js'\n\nexport type GithubPrOptions = {\n readonly dryRun?: boolean\n readonly force?: boolean\n readonly branch?: string\n readonly base?: string\n}\n\nexport type GithubPrResult = {\n readonly ok: boolean\n readonly dryRun: boolean\n readonly draftPath: string\n readonly branch: string\n readonly prUrl?: string\n readonly previewUrl?: string\n readonly commands: readonly string[]\n readonly message: string\n}\n\nconst run = (cmd: string, args: readonly string[], cwd: string): { ok: boolean; out: string } => {\n const result = spawnSync(cmd, [...args], { cwd, encoding: 'utf8' })\n const out = `${result.stdout ?? ''}${result.stderr ?? ''}`.trim()\n return { ok: result.status === 0, out }\n}\n\nconst hasGh = (): boolean => run('gh', ['--version'], process.cwd()).ok\n\nconst slug = (): string => new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19)\n\nexport const defaultPromotionDraftPath = (root: string): string =>\n join(root, '.doc-bridge', 'drafts', `memory-promotion-${slug()}.md`)\n\nexport const writePromotionDraft = (root: string, draft: MemoryPromotionDraft, path?: string): string => {\n const draftPath = path ?? defaultPromotionDraftPath(root)\n mkdirSync(join(root, '.doc-bridge', 'drafts'), { recursive: true })\n writeFileSync(draftPath, `${draft.body}\\n`, 'utf8')\n return draftPath\n}\n\nexport const promoteMemoryToGithubPr = (\n root: string,\n draft: MemoryPromotionDraft,\n options: GithubPrOptions = {},\n): GithubPrResult => {\n if (!draft.ok && !options.force) {\n return {\n ok: false,\n dryRun: Boolean(options.dryRun),\n draftPath: '',\n branch: '',\n commands: [],\n message: 'Safety scan blocked promotion. Fix findings or pass --force to draft anyway.',\n }\n }\n\n const branch = options.branch ?? `doc-bridge/memory-promotion-${slug()}`\n const draftPath = writePromotionDraft(root, draft)\n const relDraft = draftPath.startsWith(`${root}/`) ? draftPath.slice(root.length + 1) : draftPath\n\n const commands = [\n `git checkout -b ${branch}`,\n `git add ${relDraft}`,\n `git commit -m \"draft: doc-bridge memory promotion\"`,\n `git push -u origin ${branch}`,\n `gh pr create --draft --title \"${draft.title}\" --body-file ${relDraft}${options.base ? ` --base ${options.base}` : ''}`,\n ]\n\n if (options.dryRun) {\n return {\n ok: true,\n dryRun: true,\n draftPath,\n branch,\n commands,\n message: `Wrote draft to ${relDraft}. Run the printed git/gh commands to open a draft PR.`,\n }\n }\n\n if (!existsSync(join(root, '.git'))) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: 'Not a git repository. Commit the draft manually or run with --dry-run.',\n }\n }\n\n if (!hasGh()) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: 'GitHub CLI (gh) not found. Install gh or use --dry-run for local draft + commands.',\n }\n }\n\n const auth = run('gh', ['auth', 'status'], root)\n if (!auth.ok) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: `gh is not authenticated. Run: gh auth login\\n${auth.out}`,\n }\n }\n\n const checkout = run('git', ['checkout', '-b', branch], root)\n if (!checkout.ok) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: `git checkout failed: ${checkout.out}`,\n }\n }\n\n run('git', ['add', relDraft], root)\n const commit = run('git', ['commit', '-m', 'draft: doc-bridge memory promotion'], root)\n if (!commit.ok) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: `git commit failed: ${commit.out}`,\n }\n }\n\n const push = run('git', ['push', '-u', 'origin', branch], root)\n if (!push.ok) {\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: `git push failed: ${push.out}`,\n }\n }\n\n const prArgs = [\n 'pr',\n 'create',\n '--draft',\n '--title',\n draft.title,\n '--body-file',\n relDraft,\n ...(options.base ? ['--base', options.base] : []),\n ]\n let prUrl = ''\n try {\n prUrl = execFileSync('gh', prArgs, { cwd: root, encoding: 'utf8' }).trim()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n return {\n ok: false,\n dryRun: false,\n draftPath,\n branch,\n commands,\n message: `gh pr create failed: ${message}`,\n }\n }\n\n return {\n ok: true,\n dryRun: false,\n draftPath,\n branch,\n prUrl,\n ...(prUrl ? { previewUrl: prUrl } : {}),\n commands,\n message: prUrl ? `Draft PR opened: ${prUrl}` : 'Draft PR created.',\n }\n}","import { existsSync, watch } from 'node:fs'\nimport { dirname, join, resolve } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from './build-index.js'\n\nexport type WatchIndexOptions = {\n readonly root: string\n readonly config: DocBridgeConfigV1\n readonly configPath?: string\n readonly debounceMs?: number\n readonly onRebuild?: (summary: { knowledgeCount: number; handoffCount: number; hash: string }) => void\n}\n\nconst WATCH_PATTERN = /\\.(md|mdx|json|ya?ml|mdc)$/i\n\nconst collectWatchRoots = (root: string, config: DocBridgeConfigV1, configPath?: string): string[] => {\n const roots = new Set<string>()\n roots.add(resolve(root, config.corpus.agent.root))\n const humanSources = config.corpus.human\n ? Array.isArray(config.corpus.human)\n ? config.corpus.human\n : [config.corpus.human]\n : []\n for (const source of humanSources) {\n const humanOpts = source.options ?? {}\n for (const key of ['contentDir', 'docsDir', 'root']) {\n const value = humanOpts[key]\n if (typeof value === 'string' && value.length) roots.add(resolve(root, value))\n }\n }\n if (configPath) roots.add(dirname(resolve(configPath)))\n return [...roots].filter((dir) => existsSync(dir))\n}\n\nexport const watchDocBridgeIndex = (opts: WatchIndexOptions): Promise<number> => {\n const debounceMs = opts.debounceMs ?? 350\n let timer: ReturnType<typeof setTimeout> | undefined\n let running = false\n\n const rebuild = (): void => {\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n if (running) return\n running = true\n try {\n const result = buildDocBridgeIndex({ root: opts.root, config: opts.config })\n const handoffCount = Object.keys(result.index.handoffs ?? {}).length\n const summary = {\n knowledgeCount: result.index.knowledge.length,\n handoffCount,\n hash: result.index.contentHash.slice(0, 8),\n }\n opts.onRebuild?.(summary)\n process.stdout.write(\n `[ak-docs] indexed ${summary.knowledgeCount} docs, ${summary.handoffCount} handoffs (${summary.hash}…)\\n`,\n )\n } catch (error) {\n process.stderr.write(\n `[ak-docs] index failed: ${error instanceof Error ? error.message : String(error)}\\n`,\n )\n } finally {\n running = false\n }\n }, debounceMs)\n }\n\n rebuild()\n\n for (const dir of collectWatchRoots(opts.root, opts.config, opts.configPath)) {\n watch(dir, { recursive: true }, (_event, filename) => {\n if (!filename || !WATCH_PATTERN.test(filename)) return\n rebuild()\n })\n }\n\n const configDir = resolve(opts.root)\n if (existsSync(configDir)) {\n watch(configDir, (_event, filename) => {\n if (!filename || !/doc-bridge\\.config/.test(filename)) return\n rebuild()\n })\n }\n\n process.stdout.write(\n `[ak-docs] watching ${collectWatchRoots(opts.root, opts.config, opts.configPath).join(', ') || opts.root} (Ctrl+C to stop)\\n`,\n )\n\n return new Promise((resolvePromise) => {\n const onSignal = () => resolvePromise(0)\n process.once('SIGINT', onSignal)\n process.once('SIGTERM', onSignal)\n })\n}","import type { DoctorReport } from './run-doctor.js'\n\nexport type DoctorBadgeMetrics = {\n readonly handoffPct: number\n readonly bridgePct: number\n readonly score: number\n readonly grade: DoctorReport['grade']\n readonly packages: number\n}\n\nexport const doctorBadgeMetrics = (report: DoctorReport): DoctorBadgeMetrics => {\n const { packages } = report.coverage\n const handoffPct =\n packages.total > 0 ? Math.round((packages.withAgentDoc / packages.total) * 100) : 0\n const bridgePct =\n packages.total > 0 ? Math.round((packages.withHumanDoc / packages.total) * 100) : 0\n\n return {\n handoffPct,\n bridgePct,\n score: report.score,\n grade: report.grade,\n packages: packages.total,\n }\n}\n\nconst badgeColor = (pct: number): string => {\n if (pct >= 80) return '2ea44f'\n if (pct >= 50) return 'dbab09'\n return 'cb2431'\n}\n\nexport const formatDoctorBadgeMarkdown = (metrics: DoctorBadgeMetrics): string => {\n const handoff = `handoff_coverage-${metrics.handoffPct}%25-${badgeColor(metrics.handoffPct)}`\n const bridge = `human_bridge-${metrics.bridgePct}%25-${badgeColor(metrics.bridgePct)}`\n return [\n `![handoff coverage](https://img.shields.io/badge/${handoff}?style=flat-square)`,\n `![human bridge](https://img.shields.io/badge/${bridge}?style=flat-square)`,\n `![doc-bridge score](https://img.shields.io/badge/doc--bridge_score-${metrics.score}%2F100-${badgeColor(metrics.score)}?style=flat-square)`,\n ].join(' ')\n}\n\nexport const formatDoctorBadgeJson = (metrics: DoctorBadgeMetrics): string =>\n JSON.stringify(\n {\n schemaVersion: 1,\n ...metrics,\n markdown: formatDoctorBadgeMarkdown(metrics),\n updatedAt: new Date().toISOString(),\n },\n null,\n 2,\n )","export const DOC_BRIDGE_PATTERN_ID = 'doc-bridge-pattern' as const\n\nexport const DOC_BRIDGE_PATTERN_META = {\n id: DOC_BRIDGE_PATTERN_ID,\n title: 'Doc Bridge Pattern',\n slug: 'pillars/ai-collaboration/doc-bridge-pattern',\n license: 'CC-BY-4.0',\n visibility: 'public',\n playbookUrl: 'https://playbook.agentskit.io/patterns/doc-bridge-pattern',\n npmPackage: '@agentskit/doc-bridge',\n cli: 'ak-docs',\n} as const\n\nexport const docBridgePatternMarkdown = (): string => `---\ntype: pattern\nid: ${DOC_BRIDGE_PATTERN_ID}\npurpose: Route coding agents to the correct package, checks, and human docs in any monorepo.\nowner: AgentsKit\nlicense: CC-BY-4.0\nvisibility: public\ntags: [agents, documentation, monorepo, handoff, mcp]\n---\n\n# Doc Bridge Pattern\n\n**AgentHandoff for your monorepo** — deterministic routing so agents edit the right roots, run the right checks, and stay linked to human documentation.\n\n## Problem\n\nCoding agents guess package ownership. They edit sibling modules, run repo-wide tests, and ship changes without a bridge to human-facing guides. Wikis and RAG explain concepts but weakly answer *where to act*.\n\n## Solution (three artifacts)\n\n| Artifact | Role |\n|----------|------|\n| **AgentHandoff** | JSON handoff: \\`startHere\\`, \\`editRoots\\`, \\`checks\\`, \\`humanDoc\\`, \\`bridge\\` |\n| **DocBridgeIndex** | Deterministic index + \\`contentHash\\` for CI freshness gates |\n| **Self-describe** | \\`llms.txt\\`, \\`capabilities.json\\` for discovery |\n\n## Four loops\n\n| Loop | Command | Outcome |\n|------|---------|---------|\n| **Act** | \\`ak-docs query package <id> --agent\\` | Agent edits only \\`editRoots\\` |\n| **Bridge** | \\`ak-docs bootstrap agent-docs\\` | Link agent corpus ↔ human site |\n| **Learn** | \\`ak-docs memory promote --pr\\` | HITL draft PR from agent memory |\n| **Explain** | \\`ak-docs ask \"<question>\"\\` | Local consult + handoff preview |\n\n## 60-second proof\n\n\\`\\`\\`bash\nnpm i -D @agentskit/doc-bridge\nnpx ak-docs demo --text\nak-docs mcp install --cursor\n\\`\\`\\`\n\n## AgentHandoff example\n\n\\`\\`\\`json\n{\n \"type\": \"agent-handoff\",\n \"startHere\": \"docs/for-agents/packages/auth.md\",\n \"editRoots\": [\"packages/auth\"],\n \"checks\": [\"pnpm --filter @demo/auth test\"],\n \"humanDoc\": \"/docs/guides/auth\",\n \"bridge\": { \"humanDoc\": \"linked\" }\n}\n\\`\\`\\`\n\nWhen \\`humanDoc\\` is missing, handoffs surface \\`bridge.action: \"ak-docs bootstrap agent-docs\"\\` — a feature, not a silent gap.\n\n## MCP contract\n\nAgents call \\`handoff.resolve\\` before editing \\`packages/*\\`:\n\n1. Read \\`startHere\\`\n2. Stay inside \\`editRoots\\`\n3. Run every \\`checks\\` command\n4. Link \\`humanDoc\\` or escalate missing bridge\n\n## CI gate\n\n\\`\\`\\`yaml\n- uses: AgentsKit-io/doc-bridge@v1.0.0\n\\`\\`\\`\n\nOr: \\`ak-docs index && ak-docs gate run\\` — stale index fails the PR.\n\n## Coverage metric\n\n\\`\\`\\`bash\nak-docs doctor --text\nak-docs doctor --badge\n\\`\\`\\`\n\nTeams track handoff % and human-bridge % daily.\n\n## When to use\n\n- pnpm/npm monorepos with real package ownership\n- Fumadocus / Docusaurus human sites + dense agent corpus\n- Cursor / Claude / Codex agents that should not guess edit roots\n\n## When not to use\n\n- Single-file repos with no ownership boundaries (AGENTS.md may suffice)\n- Hosted doc chat as primary product (doc-bridge is routing + bridge, not SaaS chat)\n\n## References\n\n- npm: https://www.npmjs.com/package/@agentskit/doc-bridge\n- repo: https://github.com/AgentsKit-io/doc-bridge\n- skill: https://github.com/AgentsKit-io/doc-bridge/blob/master/docs/skills/doc-bridge.md\n- landing: https://agentskit-io.github.io/doc-bridge/\n`\n\nexport const docBridgePatternPayload = () => ({\n ...DOC_BRIDGE_PATTERN_META,\n format: 'okf-pattern-v1',\n body: docBridgePatternMarkdown(),\n})","import { cpSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync } from 'node:fs'\nimport { tmpdir } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { runGates } from '../gates/run-gates.js'\nimport { mcpSnippet } from '../mcp/install.js'\nimport { loadDocBridgeIndex } from '../query/load-index.js'\nimport { runQuery } from '../query/query.js'\nimport type { AgentHandoffV1 } from '../schemas/agent-handoff.js'\n\nexport type DemoFixture = 'example' | 'monorepo'\n\nconst packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..')\n\nconst fixturePath = (fixture: DemoFixture): string => {\n if (fixture === 'monorepo') {\n return join(packageRoot, 'examples', 'demo-monorepo')\n }\n return join(packageRoot, 'examples', 'demo-example')\n}\n\nconst formatHandoffText = (handoff: AgentHandoffV1): string[] => {\n const bridge =\n handoff.bridge?.humanDoc === 'missing'\n ? `human guide: missing → ${handoff.bridge.action ?? 'ak-docs bootstrap agent-docs'}`\n : handoff.humanDoc\n ? `human guide: ${handoff.humanDoc}`\n : 'human guide: (none)'\n\n return [\n `target: ${handoff.target.id} (${handoff.target.path ?? 'n/a'})`,\n `start: ${handoff.startHere}`,\n `edit: ${handoff.editRoots.join(', ')}`,\n `checks: ${handoff.checks.length ? handoff.checks.join(' · ') : '(none)'}`,\n bridge,\n ...(handoff.notes.length ? [`notes: ${handoff.notes[0]}`] : []),\n ]\n}\n\nexport type DemoResult = {\n readonly ok: boolean\n readonly fixture: DemoFixture\n readonly handoff: AgentHandoffV1\n readonly gateBefore: { readonly ok: boolean; readonly message: string }\n readonly gateAfter: { readonly ok: boolean; readonly message: string }\n readonly mcpSnippet: string\n readonly nextCommands: readonly string[]\n}\n\nexport const runDemo = (\n root: string,\n config: DocBridgeConfigV1,\n fixture: DemoFixture = 'example',\n options: { readonly copyFixture?: boolean } = {},\n): DemoResult => {\n const targetPackage = fixture === 'monorepo' ? 'auth' : 'example'\n const fixtureDir = fixturePath(fixture)\n\n if (options.copyFixture && existsSync(fixtureDir)) {\n for (const rel of ['doc-bridge.config.json', 'docs', 'packages', 'pnpm-workspace.yaml', 'package.json']) {\n const src = join(fixtureDir, rel)\n if (!existsSync(src)) continue\n const dest = join(root, rel)\n cpSync(src, dest, { recursive: true })\n }\n }\n\n const gateBeforeStale = runGates(root, config, ['index-freshness'])\n const beforeGate = gateBeforeStale.results[0] ?? { ok: false, message: 'index-freshness unavailable' }\n\n buildDocBridgeIndex({ root, config })\n const index = loadDocBridgeIndex(root, config)\n const handoff = runQuery(index, config, {\n kind: 'package',\n id: targetPackage,\n agent: true,\n }) as AgentHandoffV1\n\n const gateAfter = runGates(root, config, ['index-freshness'])\n const afterGate = gateAfter.results[0] ?? { ok: true, message: 'Index is fresh' }\n\n return {\n ok: afterGate.ok,\n fixture,\n handoff,\n gateBefore: { ok: beforeGate.ok, message: beforeGate.message },\n gateAfter: { ok: afterGate.ok, message: afterGate.message },\n mcpSnippet: mcpSnippet(root),\n nextCommands: [\n `ak-docs query package ${targetPackage} --agent`,\n 'ak-docs doctor --text',\n 'ak-docs mcp install --cursor',\n 'ak-docs ask \"where do I change auth?\"',\n ],\n }\n}\n\nexport const formatDemoText = (result: DemoResult): string[] => {\n const lines = [\n 'ak-docs demo — AgentHandoff in 60s',\n '═'.repeat(44),\n '',\n 'Before (agent guesses package)',\n ' ✗ edits packages/billing when task mentions \"auth\"',\n ' ✗ runs repo-wide test instead of package checks',\n '',\n 'After (handoff.resolve / query --agent)',\n ...formatHandoffText(result.handoff).map((line) => ` ✓ ${line}`),\n '',\n `Gate: ${result.gateBefore.ok ? 'green' : 'red'} → ${result.gateAfter.ok ? 'green' : 'red'}`,\n ` before: ${result.gateBefore.message}`,\n ` after: ${result.gateAfter.message}`,\n '',\n 'MCP snippet (.cursor/mcp.json)',\n ...result.mcpSnippet.split('\\n').map((line) => ` ${line}`),\n '',\n 'Next',\n ...result.nextCommands.map((cmd) => ` → ${cmd}`),\n ]\n return lines\n}\n\n/** Ephemeral demo workspace for `ak-docs demo` without polluting cwd. */\nexport const withDemoWorkspace = (\n fixture: DemoFixture,\n fn: (root: string, config: DocBridgeConfigV1) => DemoResult,\n): DemoResult => {\n const dir = mkdtempSync(join(tmpdir(), 'ak-docs-demo-'))\n try {\n const fixtureDir = fixturePath(fixture)\n if (!existsSync(fixtureDir)) {\n throw new Error(`Demo fixture \"${fixture}\" not found at ${fixtureDir}`)\n }\n cpSync(fixtureDir, dir, { recursive: true })\n const config = JSON.parse(readFileSync(join(dir, 'doc-bridge.config.json'), 'utf8')) as DocBridgeConfigV1\n return fn(dir, config)\n } finally {\n rmSync(dir, { recursive: true, force: true })\n }\n}","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\n\nexport type McpInstallTarget = 'cursor' | 'claude'\n\nexport type McpInstallResult = {\n readonly ok: boolean\n readonly target: McpInstallTarget\n readonly configPath: string\n readonly created: boolean\n readonly serverName: string\n readonly nextSteps: readonly string[]\n}\n\nconst SERVER_NAME = 'ak-docs'\n\nconst mcpServerEntry = (root: string) => ({\n command: 'npx',\n args: ['ak-docs', 'mcp'],\n cwd: root,\n})\n\nconst readJson = (path: string): Record<string, unknown> => {\n if (!existsSync(path)) return {}\n try {\n const parsed = JSON.parse(readFileSync(path, 'utf8')) as unknown\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {}\n } catch {\n return {}\n }\n}\n\nconst writeJson = (path: string, value: Record<string, unknown>): void => {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n}\n\nconst resolveTargetPath = (target: McpInstallTarget, root: string): string => {\n if (target === 'cursor') return resolve(root, '.cursor', 'mcp.json')\n return join(homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json')\n}\n\nexport const installMcpConfig = (\n root: string,\n target: McpInstallTarget,\n): McpInstallResult => {\n const configPath = resolveTargetPath(target, root)\n const created = !existsSync(configPath)\n const existing = readJson(configPath)\n const servers =\n existing.mcpServers && typeof existing.mcpServers === 'object' && !Array.isArray(existing.mcpServers)\n ? { ...(existing.mcpServers as Record<string, unknown>) }\n : {}\n\n servers[SERVER_NAME] = mcpServerEntry(root)\n writeJson(configPath, { ...existing, mcpServers: servers })\n\n const nextSteps =\n target === 'cursor'\n ? [\n 'Restart Cursor or reload MCP servers',\n 'Paste the doc-bridge skill into Cursor rules (see docs/skills/doc-bridge.md)',\n 'Before editing packages/* call handoff.resolve',\n ]\n : [\n 'Restart Claude Desktop',\n 'Run ak-docs index after doc changes',\n ]\n\n return {\n ok: true,\n target,\n configPath,\n created,\n serverName: SERVER_NAME,\n nextSteps,\n }\n}\n\nexport const mcpSnippet = (root: string): string =>\n JSON.stringify({ mcpServers: { [SERVER_NAME]: mcpServerEntry(root) } }, null, 2)","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { scanAgentCorpus } from '../index-builder/scan-corpus.js'\nimport { runGates, type GateRunResult } from '../gates/run-gates.js'\nimport { IndexNotFoundError, loadDocBridgeIndex } from '../query/load-index.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { doctorBadgeMetrics, type DoctorBadgeMetrics } from './badge.js'\n\nexport type DoctorIssue = {\n readonly severity: 'error' | 'warn' | 'info'\n readonly code: string\n readonly message: string\n readonly action?: string\n}\n\nexport type DoctorCoverage = {\n readonly packages: {\n readonly total: number\n readonly withAgentDoc: number\n readonly withHumanDoc: number\n readonly missingAgentDoc: readonly string[]\n readonly missingHumanDoc: readonly string[]\n }\n readonly agentDocs: {\n readonly total: number\n readonly indexed: number\n readonly unindexed: readonly string[]\n }\n readonly freshness: {\n readonly ok: boolean\n readonly message: string\n readonly hasIndex: boolean\n }\n readonly gates: GateRunResult\n}\n\nexport type DoctorReport = {\n readonly ok: boolean\n readonly score: number\n readonly grade: 'A' | 'B' | 'C' | 'D' | 'F'\n readonly coverage: DoctorCoverage\n readonly badge: DoctorBadgeMetrics\n readonly issues: readonly DoctorIssue[]\n readonly nextActions: readonly string[]\n}\n\nconst gradeForScore = (score: number): DoctorReport['grade'] => {\n if (score >= 90) return 'A'\n if (score >= 75) return 'B'\n if (score >= 60) return 'C'\n if (score >= 40) return 'D'\n return 'F'\n}\n\nconst agentDocPaths = (index: DocBridgeIndexV1): Set<string> => {\n const paths = new Set<string>()\n for (const owner of Object.values(index.lookup?.ownership ?? {})) {\n if (owner.agentDoc) paths.add(owner.agentDoc)\n }\n for (const handoff of Object.values(index.handoffs ?? {})) {\n if (handoff.startHere) paths.add(handoff.startHere)\n }\n return paths\n}\n\nconst computeScore = (coverage: DoctorCoverage): number => {\n let score = 0\n\n if (coverage.freshness.hasIndex) score += 15\n if (coverage.freshness.ok) score += 15\n\n const { total, withAgentDoc, withHumanDoc } = coverage.packages\n if (total > 0) {\n score += Math.round((withAgentDoc / total) * 35)\n score += Math.round((withHumanDoc / total) * 20)\n } else if (coverage.agentDocs.indexed > 0) {\n score += 35\n }\n\n if (coverage.gates.ok) score += 15\n else {\n const passed = coverage.gates.results.filter((gate) => gate.ok).length\n const totalGates = coverage.gates.results.length || 1\n score += Math.round((passed / totalGates) * 10)\n }\n\n return Math.min(100, Math.max(0, score))\n}\n\nconst buildIssues = (coverage: DoctorCoverage): DoctorIssue[] => {\n const issues: DoctorIssue[] = []\n\n if (!coverage.freshness.hasIndex) {\n issues.push({\n severity: 'error',\n code: 'index-missing',\n message: 'No doc-bridge index found.',\n action: 'ak-docs index',\n })\n } else if (!coverage.freshness.ok) {\n issues.push({\n severity: 'error',\n code: 'index-stale',\n message: coverage.freshness.message,\n action: 'ak-docs index',\n })\n }\n\n for (const id of coverage.packages.missingAgentDoc) {\n issues.push({\n severity: 'warn',\n code: 'missing-agent-doc',\n message: `Package \"${id}\" has no dedicated agent doc.`,\n action: `ak-docs init --scaffold-workspaces # or edit docs/for-agents/packages/${id}.md`,\n })\n }\n\n for (const id of coverage.packages.missingHumanDoc) {\n issues.push({\n severity: 'info',\n code: 'missing-human-doc',\n message: `Package \"${id}\" has no linked human guide.`,\n action: 'ak-docs bootstrap agent-docs',\n })\n }\n\n for (const gate of coverage.gates.results.filter((result) => !result.ok)) {\n issues.push({\n severity: gate.id === 'index-freshness' ? 'error' : 'warn',\n code: `gate-${gate.id}`,\n message: gate.message,\n action: gate.id === 'index-freshness' ? 'ak-docs index' : 'ak-docs gate run',\n })\n }\n\n return issues\n}\n\nconst buildNextActions = (issues: readonly DoctorIssue[], coverage: DoctorCoverage): string[] => {\n const actions = new Set<string>()\n for (const issue of issues) {\n if (issue.action) actions.add(issue.action)\n }\n\n if (!coverage.freshness.hasIndex || !coverage.freshness.ok) {\n actions.add('ak-docs index')\n }\n if (coverage.packages.missingHumanDoc.length) {\n actions.add('ak-docs bootstrap agent-docs')\n }\n if (coverage.packages.total > 0) {\n const sample =\n coverage.packages.missingAgentDoc[0] ??\n coverage.packages.missingHumanDoc[0]\n if (sample) actions.add(`ak-docs query package ${sample} --agent`)\n }\n if (!actions.size) {\n actions.add('ak-docs mcp install --cursor')\n actions.add('ak-docs gate run')\n }\n\n return [...actions].slice(0, 6)\n}\n\nexport const runDoctor = (root: string, config: DocBridgeConfigV1): DoctorReport => {\n let index: DocBridgeIndexV1 | undefined\n let hasIndex = true\n let freshnessOk = false\n let freshnessMessage = 'Index is fresh'\n\n try {\n index = loadDocBridgeIndex(root, config)\n const next = buildDocBridgeIndex({ root, config, write: false }).index.contentHash\n freshnessOk = index.contentHash === next\n freshnessMessage = freshnessOk ? 'Index is fresh' : 'Index is stale. Run: ak-docs index'\n } catch (error) {\n if (error instanceof IndexNotFoundError) {\n hasIndex = false\n freshnessOk = false\n freshnessMessage = error.message\n index = buildDocBridgeIndex({ root, config, write: false }).index\n } else {\n throw error\n }\n }\n\n const ownership = Object.entries(index.lookup?.ownership ?? {})\n const missingAgentDoc = ownership\n .filter(([, owner]) => !owner.agentDoc || owner.agentDoc === config.corpus.agent.index)\n .map(([id]) => id)\n const missingHumanDoc = ownership.filter(([, owner]) => !owner.humanDoc).map(([id]) => id)\n\n const indexedPaths = new Set(index.knowledge.map((entry) => entry.path))\n const expectedAgentDocs = agentDocPaths(index)\n const unindexed = [...expectedAgentDocs].filter((path) => !indexedPaths.has(path))\n\n const corpusDocs = scanAgentCorpus(root, config).filter(\n (doc) => doc.path !== config.corpus.agent.index,\n )\n\n const gates = runGates(root, config)\n\n const coverage: DoctorCoverage = {\n packages: {\n total: ownership.length,\n withAgentDoc: ownership.length - missingAgentDoc.length,\n withHumanDoc: ownership.length - missingHumanDoc.length,\n missingAgentDoc,\n missingHumanDoc,\n },\n agentDocs: {\n total: corpusDocs.length,\n indexed: corpusDocs.filter((doc) => indexedPaths.has(doc.path)).length,\n unindexed: corpusDocs.filter((doc) => !indexedPaths.has(doc.path)).map((doc) => doc.path),\n },\n freshness: {\n ok: freshnessOk,\n message: freshnessMessage,\n hasIndex,\n },\n gates,\n }\n\n const issues = buildIssues(coverage)\n const score = computeScore(coverage)\n const nextActions = buildNextActions(issues, coverage)\n\n const report: DoctorReport = {\n ok: issues.every((issue) => issue.severity !== 'error') && gates.ok,\n score,\n grade: gradeForScore(score),\n coverage,\n badge: { handoffPct: 0, bridgePct: 0, score, grade: gradeForScore(score), packages: 0 },\n issues,\n nextActions,\n }\n return { ...report, badge: doctorBadgeMetrics(report) }\n}\n\nexport const formatDoctorText = (report: DoctorReport): string[] => {\n const { coverage } = report\n const handoffPct =\n coverage.packages.total > 0\n ? Math.round((coverage.packages.withAgentDoc / coverage.packages.total) * 100)\n : 0\n const humanPct =\n coverage.packages.total > 0\n ? Math.round((coverage.packages.withHumanDoc / coverage.packages.total) * 100)\n : 0\n\n const lines = [\n 'doc-bridge doctor',\n '─'.repeat(40),\n `Score: ${report.score}/100 (${report.grade})`,\n '',\n 'Coverage',\n ` Packages: ${coverage.packages.total}`,\n ` Agent docs: ${coverage.packages.withAgentDoc}/${coverage.packages.total} (${handoffPct}% handoff-ready)`,\n ` Human guides: ${coverage.packages.withHumanDoc}/${coverage.packages.total} (${humanPct}% bridged)`,\n ` Corpus indexed: ${coverage.agentDocs.indexed}/${coverage.agentDocs.total} agent docs`,\n ` Index freshness: ${coverage.freshness.ok ? 'fresh' : 'stale or missing'}`,\n ` Gates: ${coverage.gates.results.filter((g) => g.ok).length}/${coverage.gates.results.length} passing`,\n ` Badge: handoff ${report.badge.handoffPct}% · bridge ${report.badge.bridgePct}%`,\n ]\n\n if (coverage.packages.missingHumanDoc.length) {\n lines.push('', 'Missing humanDoc (bridge gap)', ...coverage.packages.missingHumanDoc.map((id) => ` • ${id}`))\n }\n if (coverage.packages.missingAgentDoc.length) {\n lines.push('', 'Missing agent doc', ...coverage.packages.missingAgentDoc.map((id) => ` • ${id}`))\n }\n\n if (report.issues.length) {\n lines.push('', 'Issues')\n for (const issue of report.issues.slice(0, 8)) {\n const icon = issue.severity === 'error' ? '✗' : issue.severity === 'warn' ? '!' : '·'\n lines.push(` ${icon} [${issue.code}] ${issue.message}`)\n }\n if (report.issues.length > 8) {\n lines.push(` … +${report.issues.length - 8} more`)\n }\n }\n\n lines.push('', 'Next actions', ...report.nextActions.map((action) => ` → ${action}`))\n return lines\n}","import { readFileSync, realpathSync } from 'node:fs'\nimport { relative, resolve } from 'node:path'\n\nimport { z, ZodError } from 'zod'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { retrieveDocBridgeChunks } from '../retriever/doc-bridge-retriever.js'\nimport { runGates } from '../gates/run-gates.js'\nimport { ingestMemoryCandidates } from '../memory/ingest.js'\nimport { classifyMemoryCandidates, draftMemoryPromotion } from '../memory/pipeline.js'\nimport { loadDocBridgeIndex } from '../query/load-index.js'\nimport { runQuery } from '../query/query.js'\nimport { searchIndex } from '../query/search.js'\nimport type { DocBridgeIndexV1 } from '../schemas/doc-bridge-index.js'\nimport { PACKAGE_VERSION } from '../version.js'\n\ntype JsonRpcRequest = {\n readonly jsonrpc?: '2.0'\n readonly id?: string | number | null\n readonly method?: string\n readonly params?: unknown\n}\n\ntype McpContext = {\n readonly root: string\n readonly config: DocBridgeConfigV1\n readonly loadIndex?: () => DocBridgeIndexV1\n}\n\nexport const MCP_TOOLS = [\n {\n name: 'handoff.resolve',\n description: 'Resolve a package or ownership id to an AgentHandoff.',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, kind: { type: 'string', enum: ['package', 'ownership'] } },\n required: ['id'],\n },\n },\n {\n name: 'doc.search',\n description: 'Search the deterministic doc-bridge index.',\n inputSchema: {\n type: 'object',\n properties: { term: { type: 'string' }, limit: { type: 'number' } },\n required: ['term'],\n },\n },\n {\n name: 'doc.get',\n description: 'Read an indexed agent documentation file by id or path.',\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, path: { type: 'string' } },\n },\n },\n {\n name: 'gate.status',\n description: 'Run the index-freshness gate.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'retriever.query',\n description: 'Return local doc-bridge retriever chunks for a query.',\n inputSchema: {\n type: 'object',\n properties: { query: { type: 'string' }, limit: { type: 'number' } },\n required: ['query'],\n },\n },\n {\n name: 'memory.classify',\n description: 'Classify local memory candidates into agent/human/playbook/discard routes.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'memory.promoteDraft',\n description: 'Build a safe draft promotion body for local memory candidates.',\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'registry.topology',\n description: 'Return the doc-curator registry topology.',\n inputSchema: { type: 'object', properties: {} },\n },\n] as const\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n value && typeof value === 'object' ? (value as Record<string, unknown>) : {}\n\nconst HandoffResolveArgsSchema = z.object({\n id: z.string().min(1),\n kind: z.enum(['package', 'ownership']).optional(),\n})\n\nconst DocSearchArgsSchema = z.object({\n term: z.string().min(1),\n limit: z.number().int().positive().max(100).optional(),\n})\n\nconst RetrieverQueryArgsSchema = z.object({\n query: z.string().min(1),\n limit: z.number().int().positive().max(100).optional(),\n})\n\nconst DocGetArgsSchema = z\n .object({\n id: z.string().min(1).optional(),\n path: z.string().min(1).optional(),\n })\n .refine((args) => args.id || args.path, 'doc.get requires id or path')\n\nconst parseToolArgs = <T>(tool: string, schema: z.ZodType<T>, value: unknown): T => {\n try {\n return schema.parse(value)\n } catch (error) {\n if (error instanceof ZodError) {\n throw new Error(`${tool} invalid arguments: ${error.issues.map((issue) => issue.message).join(', ')}`)\n }\n throw error\n }\n}\n\nconst textResult = (value: unknown) => ({\n content: [\n {\n type: 'text',\n text: typeof value === 'string' ? value : JSON.stringify(value, null, 2),\n },\n ],\n})\n\nconst findDocPath = (index: DocBridgeIndexV1, args: z.infer<typeof DocGetArgsSchema>): string => {\n if (args.path) {\n const doc = index.knowledge.find((entry) => entry.path === args.path)\n if (!doc) throw new Error(`Unknown indexed doc path \"${args.path}\"`)\n return doc.path\n }\n const id = args.id ?? ''\n const doc = index.knowledge.find((entry) => entry.id === args.id)\n if (!doc) throw new Error(`Unknown doc id \"${id}\"`)\n return doc.path\n}\n\nconst resolveDocPath = (root: string, relPath: string): string => {\n const rootAbs = realpathSync.native(root)\n const unresolved = resolve(rootAbs, relPath)\n const unresolvedRel = relative(rootAbs, unresolved)\n if (unresolvedRel.startsWith('..')) throw new Error('doc.get path escapes project root')\n const abs = realpathSync.native(unresolved)\n const rel = relative(rootAbs, abs)\n if (rel.startsWith('..')) throw new Error('doc.get path escapes project root')\n return abs\n}\n\nexport const handleMcpRequest = (ctx: McpContext, request: JsonRpcRequest): unknown => {\n if (request.method === 'initialize') {\n return {\n protocolVersion: '2024-11-05',\n capabilities: { tools: {} },\n serverInfo: { name: 'ak-docs', version: PACKAGE_VERSION },\n }\n }\n\n if (request.method === 'tools/list') return { tools: MCP_TOOLS }\n\n if (request.method === 'tools/call') {\n const params = asRecord(request.params)\n const name = params.name\n const args = asRecord(params.arguments)\n const index = () => ctx.loadIndex?.() ?? loadDocBridgeIndex(ctx.root, ctx.config)\n\n if (name === 'handoff.resolve') {\n const parsed = parseToolArgs('handoff.resolve', HandoffResolveArgsSchema, args)\n return textResult(\n runQuery(index(), ctx.config, {\n kind: parsed.kind === 'package' ? 'package' : 'ownership',\n id: parsed.id,\n agent: true,\n }),\n )\n }\n\n if (name === 'doc.search') {\n const parsed = parseToolArgs('doc.search', DocSearchArgsSchema, args)\n return textResult(searchIndex(index(), parsed.term, parsed.limit ?? 20))\n }\n\n if (name === 'doc.get') {\n const relPath = findDocPath(index(), parseToolArgs('doc.get', DocGetArgsSchema, args))\n return textResult(readFileSync(resolveDocPath(ctx.root, relPath), 'utf8'))\n }\n\n if (name === 'gate.status') return textResult(runGates(ctx.root, ctx.config))\n\n if (name === 'retriever.query') {\n const parsed = parseToolArgs('retriever.query', RetrieverQueryArgsSchema, args)\n return textResult(retrieveDocBridgeChunks(index(), parsed.query, parsed.limit ? { limit: parsed.limit } : {}))\n }\n\n if (name === 'memory.classify') {\n return textResult(classifyMemoryCandidates(ingestMemoryCandidates(ctx.root), index()))\n }\n\n if (name === 'memory.promoteDraft') {\n return textResult(draftMemoryPromotion(classifyMemoryCandidates(ingestMemoryCandidates(ctx.root), index())))\n }\n\n if (name === 'registry.topology') {\n return textResult({\n id: 'doc-curator',\n delegates: ['docs-chat', 'knowledge-promoter', 'code-review'],\n tools: ['handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query'],\n steps: ['classify', 'draft', 'verify', 'review'],\n mergePolicy: { autoMerge: false, requiresHuman: true },\n })\n }\n\n throw new Error(`Unknown tool \"${String(name)}\"`)\n }\n\n if (request.method?.startsWith('notifications/')) return undefined\n throw new Error(`Unsupported MCP method \"${request.method ?? ''}\"`)\n}\n\nconst writeFrame = (payload: unknown): void => {\n const body = JSON.stringify(payload)\n process.stdout.write(`Content-Length: ${Buffer.byteLength(body)}\\r\\n\\r\\n${body}`)\n}\n\nconst respond = (ctx: McpContext, request: JsonRpcRequest): void => {\n if (request.id === undefined) {\n try {\n handleMcpRequest(ctx, request)\n } catch {\n // Notifications do not get responses.\n }\n return\n }\n\n try {\n const result = handleMcpRequest(ctx, request)\n writeFrame({ jsonrpc: '2.0', id: request.id, result: result ?? {} })\n } catch (error) {\n writeFrame({\n jsonrpc: '2.0',\n id: request.id,\n error: { code: -32000, message: error instanceof Error ? error.message : String(error) },\n })\n }\n}\n\nexport const startMcpStdioServer = (ctx: McpContext): void => {\n let buffer = Buffer.alloc(0)\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk])\n while (true) {\n const headerEnd = buffer.indexOf('\\r\\n\\r\\n')\n if (headerEnd === -1) return\n const header = buffer.subarray(0, headerEnd).toString('utf8')\n const match = /content-length:\\s*(\\d+)/i.exec(header)\n if (!match?.[1]) {\n buffer = buffer.subarray(headerEnd + 4)\n continue\n }\n const length = Number(match[1])\n const bodyStart = headerEnd + 4\n const bodyEnd = bodyStart + length\n if (buffer.length < bodyEnd) return\n const raw = buffer.subarray(bodyStart, bodyEnd).toString('utf8')\n buffer = buffer.subarray(bodyEnd)\n respond(ctx, JSON.parse(raw) as JsonRpcRequest)\n }\n })\n process.stdin.resume()\n}\n"],"mappings":"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","names":["existsSync","mkdirSync","readFileSync","writeFileSync","dirname","resolve","readFileSync","dirname","join","resolve","existsSync","readFileSync","join","readFileSync","join","join","join","join","readFileSync","projectName","existsSync","readFileSync","join","vm","readFileSync","join","parseFrontmatter","slug","join","readFileSync","slug","parseFrontmatter","existsSync","readFileSync","vm","item","join","existsSync","readFileSync","join","join","existsSync","readFileSync","existsSync","readFileSync","basename","join","existsSync","readdirSync","statSync","join","join","existsSync","readdirSync","statSync","join","existsSync","readFileSync","basename","readFileSync","join","dirname","existsSync","readFileSync","resolve","tokenize","resolve","existsSync","readFileSync","readFileSync","existsSync","readFileSync","join","resolve","z","z","z","z","join","existsSync","readFileSync","readFileSync","join","join","readFileSync","join","join","readFileSync","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","mkdirSync","writeFileSync","join","existsSync","dirname","resolve","resolve","dirname","existsSync","existsSync","readFileSync","dirname","join","resolve","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","join","resolve","resolve","dirname","join","existsSync","readFileSync","readFileSync","resolve","z","z","doc","resolve","readFileSync","writeJson","resolve","readFileSync","existsSync","mkdirSync","dirname","writeFileSync","result","root","config","index","items"]}