@agentskit/doc-bridge 1.6.1 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/defaults.ts","../src/config/schema.ts","../src/config/define-config.ts","../src/config/load-config.ts","../src/lib/static-js-literal.ts","../src/schemas/agent-handoff.ts","../src/schemas/doc-bridge-index.ts","../src/schemas/memory-candidate.ts","../src/schemas/json-schemas.ts","../src/schemas/knowledge.ts","../src/validate.ts","../src/index-builder/build-index.ts","../src/lib/paths.ts","../src/lib/package-manager.ts","../src/index-builder/scan-corpus.ts","../src/lib/bounded-text.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/index.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/nextra.ts","../src/index-builder/human-adapters/plain-markdown.ts","../src/index-builder/human-adapters/starlight.ts","../src/index-builder/human-adapters/vitepress.ts","../src/index-builder/plugins/nx.ts","../src/index-builder/plugins/pnpm-monorepo.ts","../src/lib/glob-expand.ts","../src/discovery/repository.ts","../src/safety/repository.ts","../src/agents/registry-adapter.ts","../src/discovery/documentation.ts","../src/reconciliation/reconcile.ts","../src/report/html.ts","../src/fixes/proposals.ts","../src/workflow/engine.ts","../src/rules/engine.ts","../src/federation/ecosystem-llms.ts","../src/gates/run-gates.ts","../src/conformance/documentation-standard-v1.ts","../src/conformance/ecosystem-contract.ts","../src/query/load-index.ts","../src/mcp/server.ts","../src/query/search.ts","../src/retriever/doc-bridge-retriever.ts","../src/memory/ingest.ts","../src/memory/pipeline.ts","../src/query/query.ts","../src/mcp/install.ts","../src/doctor/badge.ts","../src/doctor/run-doctor.ts","../src/index-builder/watch-index.ts","../src/memory/github-pr.ts","../src/federation/llms.ts","../src/intelligence/rag.ts","../src/intelligence/adapter.ts","../src/intelligence/peers.ts","../src/intelligence/chat.ts","../src/playbook/doc-bridge-pattern.ts"],"sourcesContent":["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 rules: {\n mode: 'default',\n ...config.rules,\n },\n safety: {\n redactSecrets: true,\n ...config.safety,\n },\n surfaces: {\n cli: {\n bin: 'ak-docs',\n defaultFormat: 'json',\n ...config.surfaces?.cli,\n },\n mcp: {\n enabled: true,\n tools: [\n 'handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query',\n 'memory.classify', 'memory.promoteDraft', 'registry.topology',\n 'docbridge.snapshot', 'docbridge.report', 'docbridge.diagnostics',\n 'docbridge.relations', 'docbridge.run', 'docbridge.proposals',\n ],\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 'starlight',\n 'nextra',\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 urlPrefix: z.string().url().optional(),\n pathPrefix: z.string().min(1).max(512).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', 'nx', '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 'documentation-standard-v1',\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 'documentation-standard-v1',\n ]),\n )\n .max(16)\n .optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const RuleIdSchema = z.enum([\n 'documentation-quality',\n 'graph-undocumented-relation',\n 'declared-unobserved-relation',\n 'unresolved-reference',\n 'conflicting-declaration',\n 'not-analyzed-coverage',\n 'stale-documentation',\n 'centrality-risk',\n 'critical-path-risk',\n 'freshness',\n 'ownership',\n])\n\nexport const RuleSeveritySchema = z.enum(['off', 'info', 'warn', 'error'])\n\nexport const RulesConfigSchema = z\n .object({\n mode: z.enum(['default', 'recommended', 'strict']).optional(),\n severity: z.record(RuleIdSchema, RuleSeveritySchema).optional(),\n ignore: z.array(RuleIdSchema).max(128).optional(),\n criticalEntities: z.array(z.string().min(1).max(256)).max(128).optional(),\n criticalPaths: z.array(z.string().min(1).max(512)).max(128).optional(),\n warningThresholds: z.record(RuleIdSchema, z.number().int().min(1).max(100_000)).optional(),\n })\n .strict()\n\nexport const WorkflowConfigSchema = z\n .object({\n stateDir: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const RepositorySafetyConfigSchema = z\n .object({\n exclude: z.array(z.string().min(1).max(512)).max(128).optional(),\n maxFiles: z.number().int().positive().max(1_000_000).optional(),\n maxBytes: z.number().int().positive().max(10_000_000_000).optional(),\n maxTimeMs: z.number().int().positive().max(86_400_000).optional(),\n maxMemoryMb: z.number().int().positive().max(1_048_576).optional(),\n redactSecrets: z.boolean().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 'docbridge.snapshot',\n 'docbridge.report',\n 'docbridge.diagnostics',\n 'docbridge.relations',\n 'docbridge.run',\n 'docbridge.proposals',\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 registry: z\n .object({\n enabled: z.boolean().optional(),\n agentId: z.string().min(1).max(256).optional(),\n agentRoot: z.string().min(1).max(512).optional(),\n runnerModule: z.string().min(1).max(512).optional(),\n })\n .strict()\n .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 DocumentationEvidenceFileSchema = z\n .object({\n path: z.string().min(1).max(512),\n contains: z.array(z.string().min(1).max(512)).min(1).max(32),\n })\n .strict()\n\nexport const DocumentationLinkEvidenceSchema = z\n .object({\n url: z.string().url().max(512),\n paths: z.array(z.string().min(1).max(512)).min(1).max(32),\n })\n .strict()\n\nexport const DocumentationQuickstartEvidenceSchema = z\n .object({\n id: z.string().regex(/^[a-z][a-z0-9-]*$/).max(128),\n doc: z.string().min(1).max(512),\n test: z.string().min(1).max(512),\n command: z.string().min(1).max(512),\n testContains: z.array(z.string().min(1).max(256)).min(1).max(16),\n })\n .strict()\n\nexport const EcosystemContractEvidenceSchema = z\n .object({\n manifest: z.string().min(1).max(512),\n claims: z.string().min(1).max(512),\n productId: z.string().regex(/^[a-z][a-z0-9-]*$/).max(128),\n })\n .strict()\n\nexport const DocumentationStandardRuleIdSchema = z.enum([\n 'human-docs',\n 'llms-and-raw-source',\n 'agent-handoffs',\n 'contribution',\n 'metadata',\n 'cross-links',\n 'tested-quickstarts',\n 'visual-explanations',\n 'structured-diagrams',\n])\n\nexport const DocumentationStandardExceptionSchema = z\n .object({\n ruleId: DocumentationStandardRuleIdSchema,\n reason: z.string().min(10).max(1_024),\n approvedBy: z.string().min(1).max(256),\n trackingUrl: z.string().url().max(512),\n })\n .strict()\n\nexport const DocumentationStandardV1ConfigSchema = z\n .object({\n rawSources: z.array(z.string().min(1).max(512)).max(64).optional(),\n contributionPaths: z.array(z.string().min(1).max(512)).max(16).optional(),\n metadata: z.array(DocumentationEvidenceFileSchema).max(32).optional(),\n links: z.array(DocumentationLinkEvidenceSchema).max(64).optional(),\n quickstarts: z.array(DocumentationQuickstartEvidenceSchema).max(32).optional(),\n visuals: z.array(z.string().min(1).max(512)).max(64).optional(),\n diagrams: z.array(DocumentationEvidenceFileSchema).max(32).optional(),\n ecosystemContract: EcosystemContractEvidenceSchema.optional(),\n exceptions: z.array(DocumentationStandardExceptionSchema).max(32).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n const seen = new Set<string>()\n for (const [index, exception] of (value.exceptions ?? []).entries()) {\n if (seen.has(exception.ruleId)) {\n context.addIssue({\n code: 'custom',\n path: ['exceptions', index, 'ruleId'],\n message: `Duplicate exception for rule ${exception.ruleId}`,\n })\n }\n seen.add(exception.ruleId)\n }\n })\n\nexport const ConformanceConfigSchema = z\n .object({\n documentationStandardV1: DocumentationStandardV1ConfigSchema.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 rules: RulesConfigSchema.optional(),\n workflow: WorkflowConfigSchema.optional(),\n safety: RepositorySafetyConfigSchema.optional(),\n surfaces: SurfacesConfigSchema.optional(),\n intelligence: IntelligenceConfigSchema.optional(),\n federation: FederationConfigSchema.optional(),\n conformance: ConformanceConfigSchema.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>\nexport type DocumentationStandardV1Config = z.infer<typeof DocumentationStandardV1ConfigSchema>\nexport type DocumentationStandardRuleId = z.infer<typeof DocumentationStandardRuleIdSchema>\nexport type RuleId = z.infer<typeof RuleIdSchema>\nexport type RuleSeverity = z.infer<typeof RuleSeveritySchema>\nexport type RulesConfig = z.infer<typeof RulesConfigSchema>\nexport type WorkflowConfig = z.infer<typeof WorkflowConfigSchema>\nexport type RepositorySafetyConfig = z.infer<typeof RepositorySafetyConfigSchema>\n","import { applyConfigDefaults } from './defaults.js'\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './schema.js'\n\n/** Type-safe config helper for `doc-bridge.config.ts`. */\nexport const defineConfig = (config: DocBridgeConfigV1): DocBridgeConfigV1 =>\n applyConfigDefaults(DocBridgeConfigV1Schema.parse(config))","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, join, resolve } from 'node:path'\n\nimport { parseStaticJsObject } from '../lib/static-js-literal.js'\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 unsupportedImports = 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 if (/\\bimport\\b/.test(unsupportedImports)) {\n throw new Error(`Unsupported import in ${path}. Static config only supports defineConfig imports.`)\n }\n try {\n return parseStaticJsObject(raw)\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}\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","const stripComments = (source: string): string => {\n let out = ''\n let index = 0\n let quote: string | undefined\n while (index < source.length) {\n const char = source[index] ?? ''\n const next = source[index + 1] ?? ''\n if (quote) {\n out += char\n if (char === '\\\\') {\n out += next\n index += 2\n continue\n }\n if (char === quote) quote = undefined\n index += 1\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n out += char\n index += 1\n continue\n }\n if (char === '/' && next === '/') {\n while (index < source.length && source[index] !== '\\n') index += 1\n out += '\\n'\n index += 1\n continue\n }\n if (char === '/' && next === '*') {\n index += 2\n while (index < source.length && !(source[index] === '*' && source[index + 1] === '/')) index += 1\n index += 2\n out += ' '\n continue\n }\n out += char\n index += 1\n }\n if (quote) throw new Error('Unterminated string in static JavaScript literal.')\n return out\n}\n\nclass LiteralParser {\n private index = 0\n\n constructor(private readonly source: string) {}\n\n parseAt(index: number): unknown {\n this.index = index\n const value = this.value()\n this.space()\n return value\n }\n\n private space(): void {\n while (/\\s/.test(this.source[this.index] ?? '')) this.index += 1\n }\n\n private value(): unknown {\n this.space()\n const char = this.source[this.index]\n if (char === '{') return this.object()\n if (char === '[') return this.array()\n if (char === '\"' || char === \"'\") return this.string()\n const word = this.word()\n if (word === 'true') return true\n if (word === 'false') return false\n if (word === 'null') return null\n if (/^-?\\d+(?:\\.\\d+)?$/.test(word)) return Number(word)\n throw new Error(`Unsupported dynamic sidebar expression near \"${word || char || 'EOF'}\".`)\n }\n\n private object(): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n this.index += 1\n this.space()\n while (this.source[this.index] !== '}') {\n const key = this.source[this.index] === '\"' || this.source[this.index] === \"'\" ? this.string() : this.word()\n if (!key) throw new Error('Static sidebar object key is required.')\n this.space()\n if (this.source[this.index] !== ':') throw new Error(`Static sidebar key \"${key}\" requires a literal value.`)\n this.index += 1\n result[key] = this.value()\n this.space()\n if (this.source[this.index] === ',') {\n this.index += 1\n this.space()\n continue\n }\n if (this.source[this.index] !== '}') throw new Error('Expected comma or closing brace in static sidebar.')\n }\n this.index += 1\n return result\n }\n\n private array(): unknown[] {\n const result: unknown[] = []\n this.index += 1\n this.space()\n while (this.source[this.index] !== ']') {\n result.push(this.value())\n this.space()\n if (this.source[this.index] === ',') {\n this.index += 1\n this.space()\n continue\n }\n if (this.source[this.index] !== ']') throw new Error('Expected comma or closing bracket in static sidebar.')\n }\n this.index += 1\n return result\n }\n\n private string(): string {\n const quote = this.source[this.index] ?? ''\n this.index += 1\n let result = ''\n while (this.index < this.source.length) {\n const char = this.source[this.index] ?? ''\n if (char === quote) {\n this.index += 1\n return result\n }\n if (char === '\\\\') {\n const escaped = this.source[this.index + 1]\n if (escaped === undefined) break\n const escapes: Record<string, string> = { n: '\\n', r: '\\r', t: '\\t' }\n result += escapes[escaped] ?? escaped\n this.index += 2\n continue\n }\n result += char\n this.index += 1\n }\n throw new Error('Unterminated string in static sidebar.')\n }\n\n private word(): string {\n this.space()\n const start = this.index\n while (/[A-Za-z0-9_$.-]/.test(this.source[this.index] ?? '')) this.index += 1\n return this.source.slice(start, this.index)\n }\n}\n\nconst maskStrings = (source: string): string => {\n const chars = [...source]\n let quote: string | undefined\n let previousToken: string | undefined\n const regexPrefixKeywords = new Set([\n 'await', 'case', 'delete', 'do', 'else', 'in', 'instanceof', 'new',\n 'of', 'return', 'throw', 'typeof', 'void', 'yield',\n ])\n const canStartRegex = (): boolean => previousToken === undefined\n || '=(:,[!&|?{};'.includes(previousToken)\n || previousToken === '=>'\n || regexPrefixKeywords.has(previousToken)\n for (let index = 0; index < chars.length; index += 1) {\n const char = chars[index] ?? ''\n if (quote) {\n chars[index] = ' '\n if (char === '\\\\') {\n if (index + 1 < chars.length) chars[index + 1] = ' '\n index += 1\n } else if (char === quote) {\n quote = undefined\n previousToken = 'literal'\n }\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n chars[index] = ' '\n continue\n }\n if (char === '/' && canStartRegex()) {\n chars[index] = ' '\n let inClass = false\n for (index += 1; index < chars.length; index += 1) {\n const regexChar = chars[index] ?? ''\n chars[index] = ' '\n if (regexChar === '\\\\') {\n if (index + 1 < chars.length) chars[index + 1] = ' '\n index += 1\n } else if (regexChar === '[') {\n inClass = true\n } else if (regexChar === ']') {\n inClass = false\n } else if (regexChar === '/' && !inClass) {\n while (/[A-Za-z]/.test(chars[index + 1] ?? '')) {\n index += 1\n chars[index] = ' '\n }\n break\n }\n }\n previousToken = 'literal'\n continue\n }\n if (/[A-Za-z_$]/.test(char)) {\n const start = index\n while (/[A-Za-z0-9_$]/.test(chars[index + 1] ?? '')) index += 1\n previousToken = chars.slice(start, index + 1).join('')\n continue\n }\n if (char === '=' && chars[index + 1] === '>') {\n previousToken = '=>'\n index += 1\n continue\n }\n if (!/\\s/.test(char)) previousToken = char\n }\n return chars.join('')\n}\n\nconst nonSpace = (source: string, start: number): number => {\n let index = start\n while (/\\s/.test(source[index] ?? '')) index += 1\n return index\n}\n\nconst escapedRegex = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nexport const parseStaticJsObject = (source: string): unknown => {\n const clean = stripComments(source)\n const mask = maskStrings(clean)\n const parseBinding = (identifier: string): unknown => {\n const declaration = new RegExp(`\\\\b(?:const|let|var)\\\\s+${escapedRegex(identifier)}(?:\\\\s*:[^=;]+)?\\\\s*=`).exec(mask)\n if (!declaration) throw new Error(`Exported binding \"${identifier}\" must reference a static object declaration.`)\n const start = nonSpace(mask, declaration.index + declaration[0].length)\n if (mask[start] !== '{') throw new Error(`Exported binding \"${identifier}\" must be a static object literal.`)\n return new LiteralParser(clean).parseAt(start)\n }\n const commonJs = /\\bmodule\\.exports\\s*=/.exec(mask)\n if (commonJs) {\n const start = nonSpace(mask, commonJs.index + commonJs[0].length)\n if (mask[start] === '{') return new LiteralParser(clean).parseAt(start)\n const identifier = /^[A-Za-z_$][\\w$]*/.exec(mask.slice(start))?.[0]\n if (identifier) return parseBinding(identifier)\n throw new Error('module.exports must be assigned a static object literal or binding.')\n }\n\n const exported = /\\bexport\\s+default\\b/.exec(mask)\n if (exported) {\n let start = nonSpace(mask, exported.index + exported[0].length)\n if (mask.slice(start).startsWith('defineConfig')) {\n start = nonSpace(mask, start + 'defineConfig'.length)\n if (mask[start] !== '(') throw new Error('defineConfig must be called with a static object literal.')\n start = nonSpace(mask, start + 1)\n if (mask[start] !== '{') throw new Error('defineConfig must be called with a static object literal.')\n return new LiteralParser(clean).parseAt(start)\n }\n if (mask[start] === '{') return new LiteralParser(clean).parseAt(start)\n\n const identifier = /^[A-Za-z_$][\\w$]*/.exec(mask.slice(start))?.[0]\n if (identifier) return parseBinding(identifier)\n }\n throw new Error('Docusaurus sidebar must export a static object or assign one to a const.')\n}\n","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>","type JsonSchema = {\n readonly [key: string]: unknown\n}\n\nconst stringArray = (maxItems: number): JsonSchema => ({\n type: 'array',\n items: { type: 'string', minLength: 1 },\n maxItems,\n})\n\nexport const AgentHandoffV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/agent-handoff-v1.schema.json',\n title: 'AgentHandoff v1',\n type: 'object',\n additionalProperties: false,\n required: [\n 'type',\n 'schemaVersion',\n 'source',\n 'target',\n 'startHere',\n 'readBeforeEditing',\n 'editRoots',\n 'checks',\n 'notes',\n ],\n properties: {\n type: { const: 'agent-handoff' },\n schemaVersion: { const: 1 },\n source: { type: 'string', minLength: 1, maxLength: 512 },\n target: {\n type: 'object',\n additionalProperties: false,\n required: ['type', 'id'],\n properties: {\n type: {\n enum: ['package', 'module', 'app', 'screen', 'flow', 'component', 'intent', 'change', 'search'],\n },\n id: { type: 'string', minLength: 1, maxLength: 256 },\n path: { type: 'string', minLength: 1, maxLength: 512 },\n group: { type: 'string', minLength: 1, maxLength: 128 },\n layer: { type: 'string', minLength: 1, maxLength: 32 },\n },\n },\n startHere: { type: 'string', minLength: 1, maxLength: 512 },\n readBeforeEditing: stringArray(64),\n editRoots: stringArray(32),\n checks: stringArray(32),\n humanDoc: { anyOf: [{ type: 'string', minLength: 1, maxLength: 512 }, { type: 'null' }] },\n playbookPatterns: { type: 'array', items: { type: 'string', format: 'uri' }, maxItems: 16 },\n notes: stringArray(16),\n },\n} as const satisfies JsonSchema\n\nexport const MemoryCandidateV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/memory-candidate-v1.schema.json',\n title: 'MemoryCandidate v1',\n type: 'object',\n additionalProperties: false,\n required: ['schemaVersion', 'id', 'source', 'fact', 'suggestedType', 'confidence', 'references'],\n properties: {\n schemaVersion: { const: 1 },\n id: { type: 'string', minLength: 1, maxLength: 256 },\n source: { enum: ['cursor', 'claude', 'codex', 'copilot', 'agent-memory', 'manual'] },\n rawPath: { type: 'string', minLength: 1, maxLength: 512 },\n fact: { type: 'string', minLength: 1, maxLength: 8000 },\n why: { type: 'string', maxLength: 4000 },\n howToApply: { type: 'string', maxLength: 4000 },\n suggestedType: { enum: ['user', 'feedback', 'project', 'reference', 'unknown'] },\n confidence: { type: 'number', minimum: 0, maximum: 1 },\n references: stringArray(64),\n },\n} as const satisfies JsonSchema\n\nexport const DocBridgeIndexV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/doc-bridge-index-v1.schema.json',\n title: 'DocBridgeIndex v1',\n type: 'object',\n additionalProperties: false,\n required: ['schemaVersion', 'contentHash', 'contentHashAlgo', 'knowledge'],\n properties: {\n schemaVersion: { const: 1 },\n contentHash: { type: 'string', pattern: '^[a-f0-9]{64}$' },\n contentHashAlgo: { const: 'sha256-normalized-v1' },\n generatedAt: { type: 'string', format: 'date-time' },\n project: {\n type: 'object',\n additionalProperties: false,\n properties: {\n name: { type: 'string', minLength: 1, maxLength: 128 },\n root: { type: 'string', minLength: 1, maxLength: 512 },\n },\n },\n properties: {\n type: 'array',\n maxItems: 16,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'name'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 64 },\n name: { type: 'string', minLength: 1, maxLength: 128 },\n url: { type: 'string', format: 'uri' },\n llms: { type: 'string', format: 'uri' },\n },\n },\n },\n knowledge: {\n type: 'array',\n maxItems: 10000,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'type', 'title', 'path'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 256 },\n type: { type: 'string', minLength: 1, maxLength: 128 },\n title: { type: 'string', minLength: 1, maxLength: 256 },\n path: { type: 'string', minLength: 1, maxLength: 512 },\n description: { type: 'string', maxLength: 2048 },\n body: { type: 'string', maxLength: 8000 },\n links: stringArray(64),\n tags: stringArray(32),\n },\n },\n },\n capabilities: {\n type: 'array',\n maxItems: 5000,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'kind'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 256 },\n kind: { type: 'string', minLength: 1, maxLength: 64 },\n description: { type: 'string', maxLength: 512 },\n },\n },\n },\n handoffs: {\n type: 'object',\n additionalProperties: { type: 'object' },\n },\n lookup: { type: 'object' },\n },\n} as const satisfies JsonSchema\n\nexport const DocBridgeJsonSchemas = {\n agentHandoffV1: AgentHandoffV1JsonSchema,\n docBridgeIndexV1: DocBridgeIndexV1JsonSchema,\n memoryCandidateV1: MemoryCandidateV1JsonSchema,\n} as const\n","import { z } from 'zod'\n\nexport const KNOWLEDGE_SCHEMA_VERSION = 1 as const\nexport const KNOWLEDGE_CONTENT_HASH_ALGO = 'sha256-normalized-v1' as const\n\nconst hash = z.string().regex(/^[a-f0-9]{64}$/)\nconst boundedString = (max: number) => z.string().min(1).max(max)\n\nexport const ProvenanceSchema = z.enum(['observed', 'declared', 'proposed'])\nexport type Provenance = z.infer<typeof ProvenanceSchema>\n\nexport const FindingStatusSchema = z.enum([\n 'confirmed',\n 'undocumented',\n 'stale-or-unverified',\n 'conflict',\n 'unresolved',\n 'not-analyzed',\n])\nexport type FindingStatus = z.infer<typeof FindingStatusSchema>\n\nexport const DiagnosticSeveritySchema = z.enum(['off', 'info', 'warn', 'error'])\nexport type DiagnosticSeverity = z.infer<typeof DiagnosticSeveritySchema>\n\nexport const EvidenceSourceSchema = z.enum([\n 'code',\n 'configuration',\n 'documentation',\n 'agent',\n 'derived',\n])\n\nexport const EvidenceSchema = z\n .object({\n source: EvidenceSourceSchema,\n path: boundedString(512),\n lineStart: z.number().int().positive().optional(),\n lineEnd: z.number().int().positive().optional(),\n contentHash: hash.optional(),\n context: z.string().max(1_024).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.lineStart !== undefined && value.lineEnd !== undefined && value.lineEnd < value.lineStart) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['lineEnd'],\n message: 'Must be greater than or equal to lineStart',\n })\n }\n })\nexport type Evidence = z.infer<typeof EvidenceSchema>\n\nexport const CoverageStatusSchema = z.enum(['complete', 'partial', 'not-analyzed'])\n\nexport const CoverageSchema = z\n .object({\n analyzer: boundedString(128),\n scope: boundedString(512),\n status: CoverageStatusSchema,\n reason: z.string().max(1_024).optional(),\n evidence: z.array(EvidenceSchema).max(32).optional(),\n })\n .strict()\nexport type Coverage = z.infer<typeof CoverageSchema>\n\nexport const ProjectIdentitySchema = z\n .object({\n name: boundedString(128),\n root: boundedString(512).optional(),\n })\n .strict()\n\nconst ArtifactMetadata = {\n schemaVersion: z.literal(KNOWLEDGE_SCHEMA_VERSION),\n contentHash: hash,\n contentHashAlgo: z.literal(KNOWLEDGE_CONTENT_HASH_ALGO),\n project: ProjectIdentitySchema,\n sourceRevision: boundedString(128),\n sourceRevisionKind: z.enum(['git', 'content']),\n configurationHash: hash,\n pipelineVersion: boundedString(64),\n analyzerVersions: z.record(boundedString(128), boundedString(64)),\n}\n\nexport const EntitySchema = z\n .object({\n id: boundedString(256),\n kind: boundedString(128),\n name: boundedString(256),\n path: boundedString(512).optional(),\n aliases: z.array(boundedString(256)).max(32).optional(),\n provenance: ProvenanceSchema,\n evidence: z.array(EvidenceSchema).max(64),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict()\nexport type KnowledgeEntity = z.infer<typeof EntitySchema>\n\nexport const RelationSchema = z\n .object({\n id: boundedString(256),\n kind: boundedString(128),\n from: boundedString(256),\n to: boundedString(256),\n discriminator: boundedString(256).optional(),\n provenance: ProvenanceSchema,\n evidence: z.array(EvidenceSchema).max(64),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict()\nexport type KnowledgeRelation = z.infer<typeof RelationSchema>\n\nexport const DiscoverySnapshotV1Schema = z\n .object({\n type: z.literal('discovery-snapshot'),\n ...ArtifactMetadata,\n entities: z.array(EntitySchema).max(50_000),\n relations: z.array(RelationSchema).max(100_000),\n coverage: z.array(CoverageSchema).max(1_000),\n })\n .strict()\n .superRefine((value, context) => {\n const entityIds = new Set<string>()\n for (const [index, entity] of value.entities.entries()) {\n if (entityIds.has(entity.id)) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['entities', index, 'id'], message: `Duplicate entity id: ${entity.id}` })\n }\n entityIds.add(entity.id)\n }\n\n const relationIds = new Set<string>()\n for (const [index, relation] of value.relations.entries()) {\n if (relationIds.has(relation.id)) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['relations', index, 'id'], message: `Duplicate relation id: ${relation.id}` })\n }\n relationIds.add(relation.id)\n }\n })\nexport type DiscoverySnapshotV1 = z.infer<typeof DiscoverySnapshotV1Schema>\n\nexport const DiagnosticSchema = z\n .object({\n id: boundedString(256),\n code: boundedString(128),\n status: FindingStatusSchema,\n severity: DiagnosticSeveritySchema,\n message: boundedString(2_048),\n evidence: z.array(EvidenceSchema).max(64),\n entityIds: z.array(boundedString(256)).max(64).optional(),\n relationIds: z.array(boundedString(256)).max(64).optional(),\n remediation: z.string().max(2_048).optional(),\n })\n .strict()\nexport type KnowledgeDiagnostic = z.infer<typeof DiagnosticSchema>\n\nexport const ReconciliationReportV1Schema = z\n .object({\n type: z.literal('reconciliation-report'),\n ...ArtifactMetadata,\n snapshotHash: hash,\n diagnostics: z.array(DiagnosticSchema).max(100_000),\n summary: z\n .object({\n entityCount: z.number().int().nonnegative(),\n relationCount: z.number().int().nonnegative(),\n diagnosticCount: z.number().int().nonnegative(),\n })\n .strict(),\n })\n .strict()\nexport type ReconciliationReportV1 = z.infer<typeof ReconciliationReportV1Schema>\n\nexport const WorkflowStateSchema = z.enum([\n 'created',\n 'discovering',\n 'analyzed',\n 'compared',\n 'awaiting-agent',\n 'proposed',\n 'awaiting-approval',\n 'validating',\n 'delivered',\n 'failed',\n 'cancelled',\n 'stale',\n 'superseded',\n])\nexport type WorkflowState = z.infer<typeof WorkflowStateSchema>\n\nexport const WorkflowStepSchema = z\n .object({\n name: boundedString(128),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped']),\n inputHash: hash,\n outputHash: hash.optional(),\n artifactRefs: z.array(boundedString(512)).max(32).optional(),\n })\n .strict()\nexport type WorkflowStep = z.infer<typeof WorkflowStepSchema>\n\nexport const WorkflowTransitionSchema = z\n .object({\n from: WorkflowStateSchema.nullable(),\n to: WorkflowStateSchema,\n at: z.string().datetime(),\n reason: z.string().max(1_024).optional(),\n })\n .strict()\nexport type WorkflowTransition = z.infer<typeof WorkflowTransitionSchema>\n\nexport const WorkflowRunV1Schema = z\n .object({\n type: z.literal('workflow-run'),\n ...ArtifactMetadata,\n runId: boundedString(128),\n state: WorkflowStateSchema,\n steps: z.array(WorkflowStepSchema).max(32),\n transitions: z.array(WorkflowTransitionSchema).max(1_000),\n artifactRefs: z.array(boundedString(512)).max(128),\n })\n .strict()\nexport type WorkflowRunV1 = z.infer<typeof WorkflowRunV1Schema>\n\nexport const ProposalOriginSchema = z\n .object({\n kind: z.enum(['registry-agent', 'manual', 'deterministic']),\n id: boundedString(256).optional(),\n version: boundedString(64).optional(),\n provider: boundedString(128).optional(),\n model: boundedString(256).optional(),\n capabilities: z.array(boundedString(128)).max(32).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.kind === 'registry-agent' && value.id === undefined) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['id'], message: 'Registry agent origin requires an id' })\n }\n })\n\nexport const AgentProposalV1Schema = z\n .object({\n type: z.literal('agent-proposal'),\n ...ArtifactMetadata,\n proposalId: boundedString(128),\n baseSnapshotHash: hash,\n baseReportHash: hash,\n relatedDiagnosticIds: z.array(boundedString(256)).max(64),\n rationale: boundedString(4_000),\n confidence: z.number().min(0).max(1),\n evidence: z.array(EvidenceSchema).max(128),\n intendedChanges: z.array(boundedString(4_000)).max(64),\n origin: ProposalOriginSchema,\n checks: z.array(boundedString(512)).max(32),\n })\n .strict()\nexport type AgentProposalV1 = z.infer<typeof AgentProposalV1Schema>\n\nexport const FixProposalStatusSchema = z.enum(['proposed', 'approved', 'rejected', 'stale', 'applied', 'failed'])\n\nexport const AffectedFileSchema = z\n .object({\n path: boundedString(512),\n contentHash: hash,\n })\n .strict()\n\nexport const FixChangeSchema = z\n .object({\n path: boundedString(512),\n before: z.string().max(100_000),\n after: z.string().max(100_000),\n })\n .strict()\nexport type FixChange = z.infer<typeof FixChangeSchema>\n\nexport const FixProposalV1Schema = z\n .object({\n type: z.literal('fix-proposal'),\n ...ArtifactMetadata,\n proposalId: boundedString(128),\n baseRevision: boundedString(128),\n affectedFiles: z.array(AffectedFileSchema).max(256),\n changes: z.array(FixChangeSchema).max(256).optional(),\n preconditions: z.array(boundedString(2_048)).max(64),\n diff: boundedString(100_000),\n postconditions: z.array(boundedString(2_048)).max(64),\n approval: z\n .object({\n proposalHash: hash,\n approvedAt: z.string().datetime(),\n approvedBy: boundedString(256),\n })\n .strict()\n .optional(),\n status: FixProposalStatusSchema,\n })\n .strict()\n .superRefine((value, context) => {\n if ((value.status === 'approved' || value.status === 'applied') && value.approval === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['approval'],\n message: `Fix proposal status ${value.status} requires an approval record`,\n })\n }\n })\nexport type FixProposalV1 = z.infer<typeof FixProposalV1Schema>\n\nexport type KnowledgeArtifactV1 =\n | DiscoverySnapshotV1\n | ReconciliationReportV1\n | WorkflowRunV1\n | AgentProposalV1\n | FixProposalV1\n","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'\nimport {\n AgentProposalV1Schema,\n DiscoverySnapshotV1Schema,\n FixProposalV1Schema,\n ReconciliationReportV1Schema,\n WorkflowRunV1Schema,\n type AgentProposalV1,\n type DiscoverySnapshotV1,\n type FixProposalV1,\n type ReconciliationReportV1,\n type WorkflowRunV1,\n} from './schemas/knowledge.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 parseDiscoverySnapshot = (input: unknown): DiscoverySnapshotV1 =>\n DiscoverySnapshotV1Schema.parse(input)\n\nexport const parseReconciliationReport = (input: unknown): ReconciliationReportV1 =>\n ReconciliationReportV1Schema.parse(input)\n\nexport const parseWorkflowRun = (input: unknown): WorkflowRunV1 => WorkflowRunV1Schema.parse(input)\n\nexport const parseAgentProposal = (input: unknown): AgentProposalV1 => AgentProposalV1Schema.parse(input)\n\nexport const parseFixProposal = (input: unknown): FixProposalV1 => FixProposalV1Schema.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 { 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 { discoverNxProjects } from './plugins/nx.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 =\n config.routing?.plugin === 'nx'\n ? discoverNxProjects(root, config)\n : shouldDiscover\n ? discoverPnpmPackages(root, config)\n : []\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 { existsSync, realpathSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } 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)\n\nexport const containedProjectPath = (root: string, path: string): string | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const unresolved = resolve(projectRoot, path)\n const unresolvedRelative = relative(projectRoot, unresolved)\n if (\n isAbsolute(unresolvedRelative) ||\n unresolvedRelative === '..' ||\n unresolvedRelative.startsWith(`..${sep}`)\n ) return undefined\n\n const canonical = existsSync(unresolved) ? realpathSync.native(unresolved) : unresolved\n const canonicalRelative = relative(projectRoot, canonical)\n return isAbsolute(canonicalRelative) || canonicalRelative === '..' || canonicalRelative.startsWith(`..${sep}`)\n ? undefined\n : canonical\n}\n","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 type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { minimatch } from 'minimatch'\nimport { readBoundedText } from '../lib/bounded-text.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 { containedProjectPath, 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\nconst configuredPathMatches = (\n relPath: string,\n include: readonly string[] | undefined,\n exclude: readonly string[] | undefined,\n): boolean => {\n const normalize = (pattern: string): string => toPosix(pattern).replace(/^\\.\\//, '')\n const included = include?.filter(Boolean).map(normalize) ?? []\n const excluded = exclude?.filter(Boolean).map(normalize) ?? []\n if (excluded.some((pattern) => minimatch(relPath, pattern, { dot: true }))) return false\n return included.length === 0 || included.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n}\n\nexport const scanAgentCorpus = (root: string, config: DocBridgeConfigV1): CorpusDoc[] => {\n const agentRoot = containedProjectPath(root, config.corpus.agent.root)\n if (!agentRoot) throw new Error('Agent corpus root escapes the project root.')\n const files = walkFiles(agentRoot, { extensions: ['.md', '.mdx'] }).filter((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n return configuredPathMatches(relToCorpus, config.corpus.agent.include, config.corpus.agent.exclude)\n })\n const corpusRelRoot = toPosix(config.corpus.agent.root)\n\n const budget = { used: 0 }\n return files.map((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n const relPath = `${corpusRelRoot}/${relToCorpus}`\n const raw = readBoundedText(abs, budget)\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","import { readFileSync, statSync } from 'node:fs'\n\nexport const MAX_DOCUMENT_BYTES = 4 * 1_024 * 1_024\nexport const MAX_CORPUS_BYTES = 64 * 1_024 * 1_024\n\nexport type TextReadBudget = { used: number }\n\nexport const readBoundedText = (\n path: string,\n budget: TextReadBudget,\n limits?: { readonly maxFileBytes?: number; readonly maxCorpusBytes?: number },\n): string => {\n const maxFileBytes = limits?.maxFileBytes ?? MAX_DOCUMENT_BYTES\n const maxCorpusBytes = limits?.maxCorpusBytes ?? MAX_CORPUS_BYTES\n const stat = statSync(path)\n if (!stat.isFile()) throw new Error(`Documentation path is not a regular file: ${path}`)\n if (stat.size > maxFileBytes) {\n throw new Error(`Documentation file exceeds the ${maxFileBytes} byte limit: ${path}`)\n }\n if (budget.used + stat.size > maxCorpusBytes) {\n throw new Error(`Documentation corpus exceeds the ${maxCorpusBytes} byte read budget.`)\n }\n budget.used += stat.size\n return readFileSync(path, 'utf8')\n}\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 { lstatSync, readdirSync, realpathSync } 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'])\nconst DEFAULT_MAX_FILES = 10_000\n\nexport const walkFiles = (\n root: string,\n opts?: {\n readonly extensions?: readonly string[]\n readonly skipDirs?: ReadonlySet<string>\n readonly maxFiles?: number\n },\n): string[] => {\n const extensions = opts?.extensions ?? ['.md']\n const skip = opts?.skipDirs ?? DEFAULT_SKIP\n const out: string[] = []\n const visited = new Set<string>()\n\n const visit = (dir: string) => {\n let canonicalDir: string\n try {\n canonicalDir = realpathSync.native(dir)\n } catch {\n return\n }\n if (visited.has(canonicalDir)) return\n visited.add(canonicalDir)\n\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 = lstatSync(abs)\n } catch {\n continue\n }\n if (st.isSymbolicLink()) continue\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 if (out.length >= (opts?.maxFiles ?? DEFAULT_MAX_FILES)) {\n throw new Error(`Documentation corpus exceeds the ${opts?.maxFiles ?? DEFAULT_MAX_FILES} file limit.`)\n }\n out.push(toPosix(abs))\n }\n }\n }\n\n visit(root)\n return out.sort()\n}\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 ...(pkg.checks ? { checks: pkg.checks } : existing.checks ? { checks: existing.checks } : {}),\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 pkg.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.6.1'\n","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 canonicalJsonV1 = (payload: unknown): string => JSON.stringify(sortValue(payload))\n\nexport const sha256NormalizedV1 = (payload: unknown): string => {\n const normalized = canonicalJsonV1(payload)\n return createHash('sha256').update(normalized, 'utf8').digest('hex')\n}\n\nexport const contentHashForArtifactV1 = <T extends { readonly contentHash: string }>(artifact: T): string => {\n const { contentHash: _contentHash, ...payload } = artifact\n return sha256NormalizedV1(payload)\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nconst routePath = (path: string, pathPrefix: string | undefined): string => {\n const normalizedPath = path.replaceAll('\\\\', '/').replace(/\\.(?:md|mdx)$/, '')\n const normalizedPrefix = pathPrefix?.replaceAll('\\\\', '/').replace(/\\/$/, '')\n const relativePath = normalizedPrefix && normalizedPath.startsWith(`${normalizedPrefix}/`)\n ? normalizedPath.slice(normalizedPrefix.length + 1)\n : normalizedPath\n return relativePath.replace(/^\\/+/, '')\n}\n\nexport const knowledgeUrl = (\n path: string,\n options: { readonly urlPrefix?: string | undefined; readonly pathPrefix?: string | undefined } = {},\n): string => {\n const relativePath = routePath(path, options.pathPrefix)\n if (!options.urlPrefix) return path\n const base = options.urlPrefix.endsWith('/') ? options.urlPrefix : `${options.urlPrefix}/`\n return new URL(relativePath, base).toString()\n}\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 const url = knowledgeUrl(entry.path, config.index?.llmsTxt)\n return `- [${entry.title}](${url})${desc}`\n })\n\n return `${preamble.trim()}\\n\\n## Knowledge\\n\\n${lines.join('\\n')}\\n`\n}\n","import { realpathSync } from 'node:fs'\nimport { resolve, sep } from 'node:path'\n\nimport type { DocBridgeConfigV1, HumanCorpusConfig } from '../../config/schema.js'\nimport { docusaurusAdapter } from './docusaurus.js'\nimport { fumadocsAdapter } from './fumadocs.js'\nimport { nextraAdapter } from './nextra.js'\nimport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\nimport { plainMarkdownAdapter } from './plain-markdown.js'\nimport { starlightAdapter } from './starlight.js'\nimport { vitepressAdapter } from './vitepress.js'\n\nexport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\n\nconst ADAPTERS: readonly HumanAdapter[] = [\n plainMarkdownAdapter,\n fumadocsAdapter,\n docusaurusAdapter,\n vitepressAdapter,\n starlightAdapter,\n nextraAdapter,\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\nconst canonicalPath = (path: string): string => {\n try {\n return realpathSync.native(path)\n } catch {\n return resolve(path)\n }\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 = canonicalPath(resolve(root, config.corpus.agent.root))\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 const recordPath = canonicalPath(record.path)\n if (\n recordPath === agentRoot ||\n recordPath.startsWith(`${agentRoot}${sep}`) ||\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 } from 'node:fs'\n\nimport { readBoundedText } from '../../lib/bounded-text.js'\nimport { containedProjectPath } from '../../lib/paths.js'\nimport { parseStaticJsObject } from '../../lib/static-js-literal.js'\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 readSidebars = (sidebarsFile: string | undefined): SidebarDocFilter => {\n if (!sidebarsFile) return { enabled: false, ids: new Set(), autogenDirs: [] }\n if (!existsSync(sidebarsFile)) return { enabled: false, ids: new Set(), autogenDirs: [] }\n const raw = readBoundedText(sidebarsFile, { used: 0 }, { maxFileBytes: 1_048_576, maxCorpusBytes: 1_048_576 })\n const filter = { ids: new Set<string>(), autogenDirs: [] as string[] }\n const visit = (value: unknown): 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) visit(item)\n return\n }\n if (!value || typeof value !== 'object') return\n const item = value as Record<string, unknown>\n if ((item.type === 'doc' || item.type === 'ref') && typeof item.id === 'string') filter.ids.add(item.id)\n if (item.type === 'autogenerated' && typeof item.dirName === 'string') filter.autogenDirs.push(item.dirName)\n if (Array.isArray(item.items)) visit(item.items)\n if (item.link && typeof item.link === 'object') visit(item.link)\n for (const child of Object.values(item)) {\n if (Array.isArray(child)) visit(child)\n }\n }\n visit(parseStaticJsObject(raw))\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 sidebarsFile = optionString(config.options, ['sidebarsFile'])\n const sidebarFilter = readSidebars(sidebarsFile ? containedProjectPath(root, sidebarsFile) : undefined)\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 { realpathSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type { HumanCorpusConfig } from '../../config/schema.js'\nimport { slugFromPath } from '../../lib/markdown.js'\nimport { readBoundedText } from '../../lib/bounded-text.js'\nimport { containedProjectPath, 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 projectRoot = realpathSync.native(resolve(root))\n const absRoot = containedProjectPath(root, humanRoot)\n if (!absRoot) return out\n const budget = { used: 0 }\n\n for (const abs of walkFiles(absRoot, { extensions: ['.md', '.mdx'] })) {\n const canonical = realpathSync.native(abs)\n const fileRelative = relative(projectRoot, canonical)\n if (isAbsolute(fileRelative) || fileRelative === '..' || fileRelative.startsWith(`..${sep}`)) continue\n const relToHumanRoot = toPosix(abs.replace(`${toPosix(absRoot)}/`, ''))\n const raw = readBoundedText(abs, budget)\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 {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n type HumanDocRecord,\n} from './core.js'\n\nconst nextraRecordId = (relPath: string, raw: string): string => {\n const frontmatter = parseFrontmatter(raw)\n return frontmatter.package ?? frontmatter.module ?? frontmatter.id ?? (routeSlug(relPath) || 'index')\n}\n\nconst isIndexPage = (path: string): boolean => /(^|[/\\\\])index\\.mdx?$/i.test(path)\n\nconst resolveRouteCollisions = (records: readonly HumanDocRecord[]): HumanDocRecord[] => {\n const byUrl = new Map<string, { readonly record: HumanDocRecord; readonly indexPage: boolean }>()\n for (const record of records) {\n const normalized = { ...record, url: record.url || '/' }\n const indexPage = isIndexPage(record.path)\n const existing = byUrl.get(normalized.url)\n if (!existing || indexPage || !existing.indexPage) {\n byUrl.set(normalized.url, { record: normalized, indexPage })\n }\n }\n return [...byUrl.values()].map(({ record }) => record)\n}\n\nexport const nextraAdapter: HumanAdapter = {\n plugin: 'nextra',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'docsDir', 'root'])\n if (!contentDir) return []\n\n return resolveRouteCollisions(\n scanMarkdownDocs(root, contentDir, {\n idForDoc: nextraRecordId,\n urlPrefix: optionString(config.options, ['urlPrefix', 'contentDirBasePath']) ?? '/',\n }),\n )\n },\n}\n","import { minimatch } from 'minimatch'\n\nimport { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nconst stringPatterns = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string' && item.length > 0) : []\n\nconst matchesConfiguredPath = (relPath: string, options: Record<string, unknown> | undefined): boolean => {\n const normalize = (pattern: string): string => pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '')\n const include = stringPatterns(options?.include).map(normalize)\n const exclude = stringPatterns(options?.exclude).map(normalize)\n if (exclude.some((pattern) => minimatch(relPath, pattern, { dot: true }))) return false\n return include.length === 0 || include.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n}\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, {\n urlPrefix: config.options?.urlPrefix,\n includeRelPath: (relPath) => matchesConfiguredPath(relPath, config.options),\n })\n },\n}\n","import { slug as githubSlug } from 'github-slugger'\n\nimport {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n} from './core.js'\n\nconst isStarlightPage = (relPath: string, raw: string): boolean => {\n if (relPath.split('/').some((part) => part.startsWith('.') || part.startsWith('_'))) return false\n return parseFrontmatter(raw).draft !== 'true'\n}\n\nconst starlightFileSlug = (relPath: string): string =>\n routeSlug(relPath)\n .split('/')\n .map((part) => githubSlug(part))\n .filter(Boolean)\n .join('/')\n\nconst starlightSlug = (relPath: string, raw: string): string => {\n const slug = parseFrontmatter(raw).slug\n return slug ? slug.replace(/^\\/+|\\/+$/g, '') : starlightFileSlug(relPath)\n}\n\nexport const starlightAdapter: HumanAdapter = {\n plugin: 'starlight',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'docsDir', 'root'])\n if (!contentDir) return []\n\n return scanMarkdownDocs(root, contentDir, {\n includeRelPath: isStarlightPage,\n slugForDoc: starlightSlug,\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { minimatch } from 'minimatch'\n\nimport { optionString, routeSlug, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nconst isVitePressPage = (relPath: string): boolean =>\n !relPath.split('/').some((part) => part === '.vitepress' || part.startsWith('.'))\n\nconst srcExcludePatterns = (value: unknown): readonly string[] => {\n if (value === undefined) return []\n if (!Array.isArray(value) || value.length > 64) {\n throw new Error('VitePress srcExclude must be an array of at most 64 glob patterns.')\n }\n return value.map((pattern) => {\n if (typeof pattern !== 'string' || !pattern || pattern.length > 256 || pattern.includes('\\0')) {\n throw new Error('Each VitePress srcExclude pattern must be a non-empty string up to 256 characters.')\n }\n return pattern\n })\n}\n\nconst isExcluded = (relPath: string, patterns: readonly string[]): boolean =>\n patterns.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n\nconst vitepressSlug = (relPath: string, cleanUrls: boolean): string => {\n const slug = routeSlug(relPath)\n if (cleanUrls || /(?:^|\\/)index\\.mdx?$/.test(relPath)) return slug\n return `${slug}.html`\n}\n\nexport const vitepressAdapter: HumanAdapter = {\n plugin: 'vitepress',\n scan: ({ root, config }) => {\n const docsDir = optionString(config.options, ['docsDir', 'root', 'srcDir'])\n if (!docsDir) return []\n const srcExclude = srcExcludePatterns(config.options?.srcExclude)\n\n return scanMarkdownDocs(root, docsDir, {\n includeRelPath: (relPath) => isVitePressPage(relPath) && !isExcluded(relPath, srcExclude),\n slugForDoc: (relPath) => vitepressSlug(relPath, config.options?.cleanUrls === true),\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs'\nimport { basename, dirname, isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../../config/schema.js'\nimport { detectPackageManager } from '../../lib/package-manager.js'\nimport { toPosix } from '../../lib/paths.js'\nimport { walkFiles } from '../../lib/walk.js'\nimport type { DiscoveredPackage } from './pnpm-monorepo.js'\n\nconst NX_SCAN_SKIP = new Set([\n 'node_modules',\n '.git',\n '.nx',\n 'dist',\n 'coverage',\n '.doc-bridge',\n])\nconst NX_PROJECT_NAME = /^(?:@[A-Za-z0-9._-]+\\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/\n\ntype JsonRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst readJsonRecord = (path: string): JsonRecord | undefined => {\n try {\n const parsed: unknown = JSON.parse(readFileSync(path, 'utf8'))\n return isRecord(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n}\n\nconst safeProjectPath = (\n root: string,\n manifestDir: string,\n declaredRoot?: unknown,\n): string | undefined => {\n const candidate = typeof declaredRoot === 'string' ? resolve(root, declaredRoot) : manifestDir\n const rel = toPosix(relative(root, candidate)) || '.'\n if (isAbsolute(rel) || rel === '..' || rel.startsWith('../')) return undefined\n try {\n if (!lstatSync(candidate).isDirectory()) return undefined\n const canonicalRoot = realpathSync.native(root)\n const canonicalCandidate = realpathSync.native(candidate)\n const canonicalRel = relative(canonicalRoot, canonicalCandidate)\n if (\n isAbsolute(canonicalRel) ||\n canonicalRel === '..' ||\n canonicalRel.startsWith(`..${sep}`)\n ) {\n return undefined\n }\n } catch {\n return undefined\n }\n return rel\n}\n\nconst packageId = (name: string): string =>\n name.startsWith('@') ? (name.split('/').at(-1) ?? name) : name\n\nconst commandPrefix = (root: string): string => {\n const manager = detectPackageManager(root)\n if (manager === 'pnpm') return 'pnpm exec nx run'\n if (manager === 'yarn') return 'yarn nx run'\n if (manager === 'bun') return 'bunx nx run'\n return 'npx nx run'\n}\n\nconst inferredChecks = (\n root: string,\n config: DocBridgeConfigV1,\n projectName: string,\n targets: ReadonlySet<string>,\n): string[] | undefined => {\n const prefix = commandPrefix(root)\n const strict = (config.gates?.preset ?? 'minimal') !== 'minimal'\n const checks = [\n ...(targets.has('test') ? [`${prefix} ${projectName}:test`] : []),\n ...(strict && targets.has('lint') ? [`${prefix} ${projectName}:lint`] : []),\n ]\n return checks.length ? checks : undefined\n}\n\ntype RankedProject = DiscoveredPackage & {\n readonly rank: number\n readonly targets: readonly string[]\n}\n\nexport const discoverNxProjects = (\n root: string,\n config: DocBridgeConfigV1,\n): DiscoveredPackage[] => {\n if (!existsSync(resolve(root, 'nx.json'))) return []\n\n const manifests = walkFiles(root, {\n extensions: ['project.json', 'package.json'],\n skipDirs: NX_SCAN_SKIP,\n maxFiles: 10_000,\n })\n const projects = new Map<string, RankedProject>()\n\n for (const manifest of manifests) {\n const json = readJsonRecord(manifest)\n if (!json) continue\n const manifestDir = dirname(manifest)\n const manifestName = basename(manifest)\n const isProjectJson = manifestName === 'project.json'\n if (!isProjectJson && manifestName !== 'package.json') continue\n const nx = json.nx\n if (!isProjectJson && !isRecord(nx)) continue\n\n const path = safeProjectPath(root, manifestDir, isProjectJson ? json.root : undefined)\n if (!path) continue\n const projectPackage = isProjectJson\n ? readJsonRecord(resolve(root, path, 'package.json'))\n : undefined\n const projectName =\n typeof json.name === 'string'\n ? json.name\n : typeof projectPackage?.name === 'string'\n ? projectPackage.name\n : basename(path === '.' ? root : path)\n if (!NX_PROJECT_NAME.test(projectName)) continue\n\n const targets = new Set<string>()\n const targetRecord = isProjectJson ? json.targets : isRecord(nx) ? nx.targets : undefined\n if (isRecord(targetRecord)) {\n for (const target of Object.keys(targetRecord)) targets.add(target)\n }\n if (!isProjectJson && isRecord(json.scripts)) {\n for (const script of Object.keys(json.scripts)) targets.add(script)\n }\n\n const id = packageId(projectName)\n const rank = isProjectJson ? 2 : 1\n const existing = projects.get(id)\n if (existing && existing.path !== path) {\n throw new Error(\n `Nx project identity collision for \"${id}\": \"${existing.name ?? id}\" at \"${existing.path}\" and \"${projectName}\" at \"${path}\". Use unique Nx project names.`,\n )\n }\n const mergedTargets = [...new Set([...(existing?.targets ?? []), ...targets])]\n const projectJsonWins = rank >= (existing?.rank ?? 0)\n const resolvedName = projectJsonWins ? projectName : (existing?.name ?? projectName)\n const checks = inferredChecks(root, config, resolvedName, new Set(mergedTargets))\n projects.set(id, {\n id,\n path,\n name: resolvedName,\n ...(checks ? { checks } : {}),\n rank: projectJsonWins ? rank : (existing?.rank ?? rank),\n targets: mergedTargets,\n })\n }\n\n return [...projects.values()]\n .sort((a, b) => a.id.localeCompare(b.id))\n .map(({ rank: _rank, targets: _targets, ...project }) => project)\n}\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 readonly checks?: readonly 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 { execFileSync } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, extname, join, relative, resolve, sep } from 'node:path'\nimport * as ts from 'typescript'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { expandWorkspaceGlobs } from '../lib/glob-expand.js'\nimport { detectPackageManager } from '../lib/package-manager.js'\nimport { toPosix } from '../lib/paths.js'\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { DEFAULT_SAFETY_EXCLUDES, safeWalkFiles } from '../safety/repository.js'\nimport {\n DiscoverySnapshotV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n} from '../schemas/knowledge.js'\n\nconst SOURCE_EXTENSIONS = ['.js', '.jsx', '.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'] as const\nconst DOCUMENT_EXTENSIONS = ['.md', '.mdx'] as const\nconst DEFAULT_MAX_FILES = 10_000\nconst EMPTY_HASH = '0'.repeat(64)\n\ntype JsonRecord = Record<string, unknown>\n\ntype PackageInfo = {\n readonly id: string\n readonly name?: string\n readonly path: string\n readonly absPath: string\n readonly manifestPath: string\n readonly manifest: JsonRecord\n}\n\ntype ModuleInfo = {\n readonly absPath: string\n readonly path: string\n readonly entityId: string\n readonly packageId?: string\n}\n\ntype ImportReference = {\n readonly specifier: string\n readonly kind: 'imports' | 're-exports'\n readonly evidence: Evidence\n}\n\ntype DiscoveryOptions = {\n readonly root?: string\n readonly config?: DocBridgeConfigV1\n readonly maxFiles?: number\n readonly maxBytes?: number\n}\n\nconst isRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst readJson = (path: string): { readonly value?: JsonRecord; readonly error?: string } => {\n try {\n const value: unknown = JSON.parse(readFileSync(path, 'utf8'))\n return isRecord(value) ? { value } : { error: 'JSON root is not an object' }\n } catch (error) {\n return { error: error instanceof Error ? error.message : String(error) }\n }\n}\n\nconst relativePath = (root: string, path: string): string =>\n toPosix(relative(root, path)) || '.'\n\nconst MAX_ID_LENGTH = 256\nconst ID_HASH_LENGTH = 32\n\nconst entityId = (kind: string, value: string): string => {\n const fullId = `${kind}:${value}`\n if (fullId.length <= MAX_ID_LENGTH) return fullId\n\n const suffix = `:${sha256NormalizedV1(fullId).slice(0, ID_HASH_LENGTH)}`\n return `${fullId.slice(0, MAX_ID_LENGTH - suffix.length)}${suffix}`\n}\n\nconst lineEvidence = (\n source: 'code' | 'configuration' | 'documentation',\n root: string,\n path: string,\n lineStart?: number,\n lineEnd?: number,\n): Evidence => ({\n source,\n path: relativePath(root, path),\n ...(lineStart !== undefined ? { lineStart } : {}),\n ...(lineEnd !== undefined ? { lineEnd } : {}),\n})\n\nconst firstLineContaining = (text: string, pattern: string): number | undefined => {\n const line = text.split(/\\r?\\n/).findIndex((value) => value.includes(pattern))\n return line >= 0 ? line + 1 : undefined\n}\n\nconst packageName = (manifest: JsonRecord, fallback: string): string | undefined =>\n typeof manifest.name === 'string' && manifest.name.length > 0 ? manifest.name : fallback || undefined\n\nconst workspacePatterns = (root: string, rootManifest: JsonRecord | undefined): string[] => {\n const fromPackageJson = rootManifest?.workspaces\n if (Array.isArray(fromPackageJson)) return fromPackageJson.filter((value): value is string => typeof value === 'string')\n if (isRecord(fromPackageJson) && Array.isArray(fromPackageJson.packages)) {\n return fromPackageJson.packages.filter((value): value is string => typeof value === 'string')\n }\n\n const workspacePath = join(root, 'pnpm-workspace.yaml')\n if (!existsSync(workspacePath)) return []\n const patterns: string[] = []\n let inPackages = false\n for (const line of readFileSync(workspacePath, 'utf8').split(/\\r?\\n/)) {\n const trimmed = line.trim()\n if (trimmed === 'packages:') {\n inPackages = true\n continue\n }\n if (!inPackages) continue\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 return patterns\n}\n\nconst discoverPackages = (\n root: string,\n rootManifest: JsonRecord | undefined,\n config: DocBridgeConfigV1 | undefined,\n): { readonly packages: readonly PackageInfo[]; readonly coverage: readonly { status: 'complete' | 'partial'; reason?: string }[] } => {\n const packages: PackageInfo[] = []\n const coverage: { status: 'complete' | 'partial'; reason?: string }[] = []\n const rootManifestPath = join(root, 'package.json')\n\n if (rootManifest) {\n const name = packageName(rootManifest, '')\n packages.push({\n id: entityId('package', packageName(rootManifest, 'root') ?? 'root'),\n ...(name ? { name } : {}),\n path: '.',\n absPath: root,\n manifestPath: rootManifestPath,\n manifest: rootManifest,\n })\n }\n\n const configuredPatterns = config?.routing?.options?.packages\n const patterns = configuredPatterns?.length ? [...configuredPatterns] : workspacePatterns(root, rootManifest)\n if (!patterns.length) {\n coverage.push({ status: 'complete' })\n return { packages, coverage }\n }\n\n const dirs = expandWorkspaceGlobs(root, patterns)\n for (const absPath of dirs) {\n const manifestPath = join(absPath, 'package.json')\n if (!existsSync(manifestPath)) continue\n const parsed = readJson(manifestPath)\n if (!parsed.value) {\n coverage.push({ status: 'partial', reason: `${relativePath(root, manifestPath)}: ${parsed.error ?? 'invalid package.json'}` })\n continue\n }\n const path = relativePath(root, absPath)\n const name = packageName(parsed.value, path)\n const id = entityId('package', name ?? path)\n const duplicate = packages.find((pkg) => pkg.id === id)\n if (duplicate && duplicate.absPath !== absPath) {\n throw new Error(`Package identity collision for \"${id}\": \"${duplicate.path}\" and \"${path}\".`)\n }\n if (!duplicate) packages.push({ id, ...(name ? { name } : {}), path, absPath, manifestPath, manifest: parsed.value })\n }\n coverage.push({ status: 'complete' })\n return { packages: packages.sort((a, b) => a.id.localeCompare(b.id)), coverage }\n}\n\nconst packageForModule = (packages: readonly PackageInfo[], absPath: string): PackageInfo | undefined =>\n [...packages]\n .filter((pkg) => absPath === pkg.absPath || absPath.startsWith(`${pkg.absPath}${sep}`))\n .sort((a, b) => b.absPath.length - a.absPath.length)[0]\n\nconst readCompilerOptions = (root: string): { readonly options: ts.CompilerOptions; readonly error?: string } => {\n const configPath = ts.findConfigFile(root, ts.sys.fileExists, 'tsconfig.json')\n if (!configPath) return { options: {} }\n const parsed = ts.readConfigFile(configPath, ts.sys.readFile)\n if (parsed.error) return { options: {}, error: ts.flattenDiagnosticMessageText(parsed.error.messageText, '\\n') }\n const config = ts.parseJsonConfigFileContent(parsed.config, ts.sys, dirname(configPath))\n if (config.errors.length) {\n return {\n options: config.options,\n error: ts.flattenDiagnosticMessageText(config.errors[0]?.messageText ?? 'Invalid tsconfig', '\\n'),\n }\n }\n return { options: config.options }\n}\n\nconst scriptKind = (path: string): ts.ScriptKind => {\n switch (extname(path)) {\n case '.js': return ts.ScriptKind.JS\n case '.jsx': return ts.ScriptKind.JSX\n case '.mjs': return ts.ScriptKind.JS\n case '.cjs': return ts.ScriptKind.JS\n case '.ts': return ts.ScriptKind.TS\n case '.tsx': return ts.ScriptKind.TSX\n case '.mts': return ts.ScriptKind.TS\n case '.cts': return ts.ScriptKind.TS\n default: return ts.ScriptKind.Unknown\n }\n}\n\nconst nodeEvidence = (root: string, path: string, sourceFile: ts.SourceFile, node: ts.Node): Evidence => {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1\n return lineEvidence('code', root, path, start, end)\n}\n\nconst isExported = (node: ts.Node): boolean => {\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined\n return modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false\n}\n\nconst exportedNames = (sourceFile: ts.SourceFile): string[] => {\n const names = new Set<string>()\n const addDeclarationName = (node: ts.Declaration): void => {\n if (!isExported(node)) return\n const name = ts.getNameOfDeclaration(node)\n if (name && ts.isIdentifier(name)) names.add(name.text)\n }\n\n const visit = (node: ts.Node): void => {\n if (ts.isExportDeclaration(node)) {\n if (!node.exportClause) names.add('*')\n else if (ts.isNamedExports(node.exportClause)) {\n for (const element of node.exportClause.elements) names.add(element.name.text)\n }\n } else if (ts.isExportAssignment(node)) {\n names.add('default')\n } else if (\n ts.isClassDeclaration(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isModuleDeclaration(node)\n ) {\n addDeclarationName(node)\n } else if (ts.isVariableStatement(node) && isExported(node)) {\n for (const declaration of node.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name)) names.add(declaration.name.text)\n }\n }\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return [...names].sort()\n}\n\nconst moduleReferences = (\n root: string,\n path: string,\n sourceFile: ts.SourceFile,\n): { readonly references: readonly ImportReference[]; readonly exports: readonly string[]; readonly hasDynamic: boolean; readonly hasRuntimeWiring: boolean } => {\n const references: ImportReference[] = []\n let hasDynamic = false\n let hasRuntimeWiring = false\n const addReference = (specifier: ts.StringLiteralLike, kind: ImportReference['kind'], node: ts.Node): void => {\n references.push({ specifier: specifier.text, kind, evidence: nodeEvidence(root, path, sourceFile, node) })\n }\n\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n addReference(node.moduleSpecifier, 'imports', node)\n } else if (ts.isExportDeclaration(node) && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {\n addReference(node.moduleSpecifier, 're-exports', node)\n } else if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference) && ts.isStringLiteral(node.moduleReference.expression)) {\n addReference(node.moduleReference.expression, 'imports', node)\n } else if (ts.isCallExpression(node)) {\n if (node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n if (!node.arguments[0] || !ts.isStringLiteralLike(node.arguments[0])) hasDynamic = true\n } else if (ts.isIdentifier(node.expression) && node.expression.text === 'require') {\n const argument = node.arguments[0]\n if (argument && ts.isStringLiteralLike(argument)) addReference(argument, 'imports', node)\n else hasDynamic = true\n } else if (ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === 'register') {\n hasRuntimeWiring = true\n }\n }\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return {\n references,\n exports: exportedNames(sourceFile),\n hasDynamic,\n hasRuntimeWiring,\n }\n}\n\nconst resolveRelativeModule = (specifier: string, containingFile: string, modulePaths: ReadonlyMap<string, ModuleInfo>): ModuleInfo | undefined => {\n const base = resolve(dirname(containingFile), specifier)\n const extension = extname(base)\n const extensionlessBase = extension ? base.slice(0, -extension.length) : base\n const candidates = [\n base,\n ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),\n ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),\n ...SOURCE_EXTENSIONS.map((extension) => `${extensionlessBase}${extension}`),\n ...SOURCE_EXTENSIONS.map((extension) => join(extensionlessBase, `index${extension}`)),\n ]\n return candidates.map((candidate) => modulePaths.get(resolve(candidate))).find(Boolean)\n}\n\nconst resolveReference = (\n reference: ImportReference,\n containingFile: string,\n modules: ReadonlyMap<string, ModuleInfo>,\n packages: readonly PackageInfo[],\n compilerOptions: ts.CompilerOptions,\n): { readonly targetId: string; readonly targetEvidence?: Evidence } | undefined => {\n if (reference.specifier.startsWith('.') || reference.specifier.startsWith('/')) {\n const relativeTarget = resolveRelativeModule(reference.specifier, containingFile, modules)\n return relativeTarget ? { targetId: relativeTarget.entityId } : undefined\n }\n\n const packageTarget = [...packages]\n .filter((pkg) => pkg.name && (reference.specifier === pkg.name || reference.specifier.startsWith(`${pkg.name}/`)))\n .sort((a, b) => (b.name?.length ?? 0) - (a.name?.length ?? 0))[0]\n if (packageTarget) return { targetId: packageTarget.id }\n\n const resolved = ts.resolveModuleName(reference.specifier, containingFile, compilerOptions, ts.sys).resolvedModule?.resolvedFileName\n const resolvedTarget = resolved ? modules.get(resolve(resolved)) : undefined\n if (resolvedTarget) return { targetId: resolvedTarget.entityId }\n\n return { targetId: entityId('external', reference.specifier) }\n}\n\nconst dependencyEntries = (manifest: JsonRecord): readonly { readonly name: string; readonly type: string }[] => {\n const sections = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']\n return sections.flatMap((type) => {\n const value = manifest[type]\n if (!isRecord(value)) return []\n return Object.keys(value).sort().map((name) => ({ name, type }))\n })\n}\n\nconst sourceRevision = (root: string, files: readonly string[]): { readonly value: string; readonly kind: 'git' | 'content' } => {\n const contentRevision = (): { readonly value: string; readonly kind: 'content' } => ({\n value: sha256NormalizedV1(\n files.map((path) => ({\n path: relativePath(root, path),\n contentHash: sha256NormalizedV1(readFileSync(path, 'utf8')),\n })),\n ),\n kind: 'content',\n })\n\n try {\n const status = execFileSync('git', ['status', '--porcelain', '--untracked-files=all'], {\n cwd: root,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim()\n if (status) return contentRevision()\n const value = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim()\n if (value) return { value, kind: 'git' }\n } catch {\n // Not a Git checkout.\n }\n return contentRevision()\n}\n\nconst hasPackageManagerMetadata = (root: string, rootManifest: JsonRecord | undefined): boolean =>\n Boolean(\n rootManifest?.packageManager ||\n existsSync(join(root, 'pnpm-lock.yaml')) ||\n existsSync(join(root, 'pnpm-workspace.yaml')) ||\n existsSync(join(root, 'yarn.lock')) ||\n existsSync(join(root, 'bun.lock')) ||\n existsSync(join(root, 'bun.lockb')) ||\n existsSync(join(root, 'package-lock.json')),\n )\n\nconst artifact = (root: string, config: DocBridgeConfigV1 | undefined, files: readonly string[], entities: readonly KnowledgeEntity[], relations: readonly KnowledgeRelation[], coverage: DiscoverySnapshotV1['coverage']): DiscoverySnapshotV1 => {\n const revision = sourceRevision(root, files)\n const base = {\n type: 'discovery-snapshot' as const,\n schemaVersion: 1 as const,\n contentHash: EMPTY_HASH,\n contentHashAlgo: 'sha256-normalized-v1' as const,\n project: { name: (entities.find((entity) => entity.kind === 'package' && entity.path === '.')?.name ?? basename(root)), root: '.' },\n sourceRevision: revision.value,\n sourceRevisionKind: revision.kind,\n configurationHash: sha256NormalizedV1(config ?? {}),\n pipelineVersion: '1.0.0',\n analyzerVersions: { repository: '1.0.0', 'js-ts': '1.0.0' },\n entities: [...entities].sort((a, b) => a.id.localeCompare(b.id)),\n relations: [...relations].sort((a, b) => a.id.localeCompare(b.id)),\n coverage: [...coverage],\n }\n return DiscoverySnapshotV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) })\n}\n\nexport const discoverRepository = (opts: DiscoveryOptions = {}): DiscoverySnapshotV1 => {\n const root = resolve(opts.root ?? process.cwd())\n const safety = opts.config?.safety\n const maxFiles = opts.maxFiles ?? safety?.maxFiles ?? DEFAULT_MAX_FILES\n const maxBytes = opts.maxBytes ?? safety?.maxBytes\n const safeOptions = {\n exclude: [...DEFAULT_SAFETY_EXCLUDES, ...(safety?.exclude ?? [])],\n maxFiles,\n ...(maxBytes !== undefined ? { maxBytes } : {}),\n ...(safety?.maxTimeMs !== undefined ? { maxTimeMs: safety.maxTimeMs } : {}),\n ...(safety?.maxMemoryMb !== undefined ? { maxMemoryMb: safety.maxMemoryMb } : {}),\n }\n const rootManifestPath = join(root, 'package.json')\n const rootManifest = readJson(rootManifestPath).value\n const packageResult = discoverPackages(root, rootManifest, opts.config)\n const sourceWalk = safeWalkFiles(root, { extensions: SOURCE_EXTENSIONS, ...safeOptions })\n const documentWalk = safeWalkFiles(root, { extensions: DOCUMENT_EXTENSIONS, ...safeOptions })\n const configWalk = safeWalkFiles(root, { extensions: ['.json', '.yaml', '.yml', '.js', '.ts'], ...safeOptions })\n const sourcePaths = sourceWalk.files\n const documentPaths = documentWalk.files\n const configPaths = configWalk.files\n .filter((path) => /(?:^|\\/)(?:tsconfig|jsconfig|vite\\.config|webpack\\.config|rollup\\.config|next\\.config|jest\\.config|eslint\\.config|vitest\\.config)/.test(relativePath(root, path)))\n const allFiles = [...new Set([rootManifestPath, ...sourcePaths, ...documentPaths, ...configPaths].filter(existsSync))].sort()\n\n const entities = new Map<string, KnowledgeEntity>()\n const relations = new Map<string, KnowledgeRelation>()\n const addEntity = (entity: KnowledgeEntity): void => {\n const existing = entities.get(entity.id)\n if (existing && (existing.kind !== entity.kind || existing.path !== entity.path)) throw new Error(`Entity identity collision for \"${entity.id}\".`)\n entities.set(entity.id, existing ?? entity)\n }\n const addRelation = (relation: KnowledgeRelation): void => {\n const existing = relations.get(relation.id)\n if (!existing) {\n relations.set(relation.id, relation)\n return\n }\n const evidence = new Map(\n [...existing.evidence, ...relation.evidence].map((item) => [\n `${item.path}:${item.lineStart ?? ''}:${item.lineEnd ?? ''}:${item.source}`,\n item,\n ]),\n )\n relations.set(relation.id, { ...existing, evidence: [...evidence.values()] })\n }\n\n for (const pkg of packageResult.packages) {\n const text = readFileSync(pkg.manifestPath, 'utf8')\n addEntity({ id: pkg.id, kind: 'package', name: pkg.name ?? pkg.path, path: pkg.path, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, '\"name\"'))] })\n }\n\n const modules = new Map<string, ModuleInfo>()\n for (const absPath of sourcePaths) {\n const path = relativePath(root, absPath)\n const pkg = packageForModule(packageResult.packages, absPath)\n const id = entityId('module', path)\n const text = readFileSync(absPath, 'utf8')\n const sourceFile = ts.createSourceFile(absPath, text, ts.ScriptTarget.Latest, true, scriptKind(absPath))\n const exports = exportedNames(sourceFile)\n modules.set(resolve(absPath), { absPath, path, entityId: id, ...(pkg ? { packageId: pkg.id } : {}) })\n addEntity({ id, kind: 'module', name: basename(absPath), path, provenance: 'observed', evidence: [lineEvidence('code', root, absPath, 1, sourceFile.getLineAndCharacterOfPosition(sourceFile.getEnd()).line + 1)], ...(exports.length ? { metadata: { exports, test: /(?:\\.test|\\.spec|__tests__)/.test(path) } } : {}) })\n if (pkg) addRelation({ id: entityId('relation', `${pkg.id}:contains:${id}`), kind: 'contains', from: pkg.id, to: id, provenance: 'observed', evidence: [lineEvidence('code', root, absPath, 1)] })\n }\n\n for (const absPath of documentPaths) {\n const path = relativePath(root, absPath)\n addEntity({ id: entityId('document', path), kind: 'document', name: basename(absPath), path, provenance: 'observed', evidence: [lineEvidence('documentation', root, absPath, 1)] })\n }\n\n const compiler = readCompilerOptions(root)\n const coverage: DiscoverySnapshotV1['coverage'] = [\n ...[sourceWalk, documentWalk, configWalk].flatMap((walk, index) => walk.incomplete ? [{ analyzer: 'repository', scope: `limits:${['source', 'documentation', 'configuration'][index]}`, status: 'partial' as const, reason: walk.reason }] : []),\n { analyzer: 'repository', scope: 'package-manager', status: hasPackageManagerMetadata(root, rootManifest) ? 'complete' : 'partial', ...(!hasPackageManagerMetadata(root, rootManifest) ? { reason: `No package manager metadata found; default helper would fall back to ${detectPackageManager(root)}.` } : {}) },\n { analyzer: 'repository', scope: 'workspace-packages', status: packageResult.coverage.some((item) => item.status === 'partial') ? 'partial' : 'complete', ...(packageResult.coverage.find((item) => item.reason)?.reason ? { reason: packageResult.coverage.find((item) => item.reason)?.reason } : {}) },\n { analyzer: 'js-ts', scope: 'static-imports-and-exports', status: compiler.error ? 'partial' : 'complete', ...(compiler.error ? { reason: compiler.error } : {}) },\n { analyzer: 'js-ts', scope: 'dynamic-imports', status: 'not-analyzed', reason: 'Dynamic import expressions and non-literal require calls are not resolved.' },\n { analyzer: 'js-ts', scope: 'runtime-wiring', status: 'not-analyzed', reason: 'Reflection, dependency injection and runtime wiring are not inferred.' },\n { analyzer: 'js-ts', scope: 'generated-code', status: 'not-analyzed', reason: 'Generated code is not interpreted as source architecture.' },\n ]\n\n for (const pkg of packageResult.packages) {\n const text = readFileSync(pkg.manifestPath, 'utf8')\n for (const dependency of dependencyEntries(pkg.manifest)) {\n const target = packageResult.packages.find((candidate) => candidate.name === dependency.name)?.id ?? entityId('external', dependency.name)\n if (!entities.has(target)) addEntity({ id: target, kind: 'external', name: dependency.name, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, `\"${dependency.name}\"`))] })\n addRelation({ id: entityId('relation', `${pkg.id}:depends-on:${target}:${dependency.type}`), kind: 'depends-on', from: pkg.id, to: target, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, `\"${dependency.name}\"`))], metadata: { dependencyType: dependency.type } })\n }\n }\n\n for (const module of modules.values()) {\n const text = readFileSync(module.absPath, 'utf8')\n const sourceFile = ts.createSourceFile(module.absPath, text, ts.ScriptTarget.Latest, true, scriptKind(module.absPath))\n const references = moduleReferences(root, module.absPath, sourceFile)\n for (const reference of references.references) {\n const target = resolveReference(reference, module.absPath, modules, packageResult.packages, compiler.options)\n if (!target) continue\n if (!entities.has(target.targetId)) {\n const externalName = target.targetId.replace(/^external:/, '')\n addEntity({ id: target.targetId, kind: 'external', name: externalName, provenance: 'observed', evidence: [reference.evidence] })\n }\n addRelation({ id: entityId('relation', `${module.entityId}:${reference.kind}:${target.targetId}`), kind: reference.kind, from: module.entityId, to: target.targetId, provenance: 'observed', evidence: [reference.evidence] })\n }\n if (references.hasDynamic) coverage.push({ analyzer: 'js-ts', scope: `dynamic-imports:${module.path}`, status: 'not-analyzed', reason: 'A dynamic import or non-literal require was found.', evidence: [lineEvidence('code', root, module.absPath)] })\n if (references.hasRuntimeWiring) coverage.push({ analyzer: 'js-ts', scope: `runtime-wiring:${module.path}`, status: 'not-analyzed', reason: 'A possible runtime registration/wiring call was found.', evidence: [lineEvidence('code', root, module.absPath)] })\n }\n\n return artifact(root, opts.config, allFiles, [...entities.values()], [...relations.values()], coverage)\n}\n\nexport type { DiscoveryOptions }\n","import { lstatSync, readdirSync, realpathSync, statSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport { minimatch } from 'minimatch'\n\nexport const DEFAULT_SAFETY_EXCLUDES = ['**/.git/**', '**/node_modules/**', '**/dist/**', '**/build/**', '**/coverage/**', '**/.doc-bridge/**', '**/.turbo/**', '**/.env', '**/.env.*', '**/*secret*', '**/*credential*', '**/*.pem', '**/*.key'] as const\n\nexport type SafeWalkOptions = {\n readonly extensions?: readonly string[]\n readonly exclude?: readonly string[]\n readonly maxFiles?: number\n readonly maxBytes?: number\n readonly maxTimeMs?: number\n readonly maxMemoryMb?: number\n}\n\nexport type SafeWalkResult = {\n readonly files: readonly string[]\n readonly incomplete: boolean\n readonly reason?: string\n}\n\nexport const containedPath = (root: string, candidate: string): string | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const unresolved = resolve(projectRoot, candidate)\n const unresolvedRelative = relative(projectRoot, unresolved)\n if (isAbsolute(unresolvedRelative) || unresolvedRelative === '..' || unresolvedRelative.startsWith(`..${sep}`)) return undefined\n try {\n const canonical = realpathSync.native(unresolved)\n const canonicalRelative = relative(projectRoot, canonical)\n return isAbsolute(canonicalRelative) || canonicalRelative === '..' || canonicalRelative.startsWith(`..${sep}`) ? undefined : canonical\n } catch {\n return unresolved\n }\n}\n\nexport const safeWalkFiles = (root: string, options: SafeWalkOptions = {}): SafeWalkResult => {\n const projectRoot = resolve(root)\n const extensions = options.extensions ?? []\n const excludes = options.exclude ?? DEFAULT_SAFETY_EXCLUDES\n const files: string[] = []\n let bytes = 0\n let reason: string | undefined\n const started = Date.now()\n const matchesExclude = (path: string): boolean => excludes.some((pattern) => minimatch(path, pattern, { dot: true }))\n const visit = (directory: string): void => {\n if (reason) return\n if (options.maxTimeMs !== undefined && Date.now() - started >= options.maxTimeMs) { reason = `Repository scan exceeded the ${options.maxTimeMs} ms time limit.`; return }\n if (options.maxMemoryMb !== undefined && process.memoryUsage().heapUsed > options.maxMemoryMb * 1024 * 1024) { reason = `Repository scan exceeded the ${options.maxMemoryMb} MiB memory limit.`; return }\n let entries: string[]\n try { entries = readdirSync(directory) } catch { return }\n for (const name of entries.sort()) {\n const absolute = resolve(directory, name)\n const relativePath = relative(projectRoot, absolute).split(sep).join('/')\n if (matchesExclude(relativePath) || name === '.git') continue\n let stats\n try { stats = lstatSync(absolute) } catch { continue }\n if (stats.isSymbolicLink()) continue\n if (stats.isDirectory()) { visit(absolute); if (reason) return; continue }\n if (!stats.isFile() || (extensions.length > 0 && !extensions.some((extension) => name.endsWith(extension)))) continue\n if (files.length >= (options.maxFiles ?? 10_000)) { reason = `Repository scan exceeded the ${options.maxFiles ?? 10_000} file limit.`; return }\n bytes += statSync(absolute).size\n if (options.maxBytes !== undefined && bytes > options.maxBytes) { reason = `Repository scan exceeded the ${options.maxBytes} byte limit.`; return }\n files.push(absolute)\n }\n }\n visit(projectRoot)\n return { files: files.sort(), incomplete: reason !== undefined, ...(reason ? { reason } : {}) }\n}\n\nconst SECRET_PATTERNS = [\n /\\b(?:sk|pk)[_-](?:live|test)[_-][A-Za-z0-9_-]{12,}\\b/g,\n /\\b(?:ghp|github_pat|xox[baprs])_[A-Za-z0-9_-]{12,}\\b/g,\n /\\bAKIA[0-9A-Z]{16}\\b/g,\n /(?:password|passwd|secret|token|api[_-]?key)\\s*[:=]\\s*[\"']?[^\\s,\"']+/gi,\n]\n\nexport const redactSecrets = (value: string): string => SECRET_PATTERNS.reduce((result, pattern) => result.replace(pattern, '[REDACTED]'), value)\n\nexport const redactValue = (value: unknown): unknown => Array.isArray(value)\n ? value.map(redactValue)\n : value && typeof value === 'object'\n ? Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([key, item]) => [key, redactValue(item)]))\n : typeof value === 'string' ? redactSecrets(value) : value\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { z } from 'zod'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { AgentProposalV1Schema, type AgentProposalV1, type DiscoverySnapshotV1, type ReconciliationReportV1 } from '../schemas/knowledge.js'\nimport { contentHashForArtifactV1 } from '../index-builder/content-hash.js'\nimport { containedPath, redactValue } from '../safety/repository.js'\n\nexport const DEFAULT_REGISTRY_AGENT_ID = 'ecosystem-doc-bridge-corpus-scanner'\n\nconst RegistryAgentMetadataSchema = z.object({\n id: z.string().min(1).max(256),\n version: z.string().min(1).max(64),\n provider: z.string().min(1).max(128).optional(),\n model: z.string().min(1).max(256).optional(),\n capabilities: z.array(z.string().min(1).max(128)).max(32).default([]),\n}).strict()\n\nexport type RegistryAgentMetadata = z.infer<typeof RegistryAgentMetadataSchema> & { readonly root: string }\n\nexport type RegistryAgentContext = {\n readonly snapshot: DiscoverySnapshotV1\n readonly report: ReconciliationReportV1\n readonly evidence: readonly ReconciliationReportV1['diagnostics'][number]['evidence'][number][]\n readonly capabilities: readonly ['snapshot.read', 'evidence.read', 'proposal.write']\n readonly network: false\n readonly shell: false\n}\n\nexport type RegistryAgentRunner = (context: RegistryAgentContext) => Promise<unknown> | unknown\n\nexport type RegistryAgentAdapter = {\n readonly metadata: RegistryAgentMetadata\n readonly run: (snapshot: DiscoverySnapshotV1, report: ReconciliationReportV1, evidence?: readonly RegistryAgentContext['evidence'][number][]) => Promise<AgentProposalV1>\n}\n\nconst deepFreeze = <T>(value: T): T => {\n if (value && typeof value === 'object' && !Object.isFrozen(value)) {\n Object.freeze(value)\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child)\n }\n return value\n}\n\nconst registryConfig = (config: DocBridgeConfigV1) => config.intelligence?.registry\n\nexport const loadRegistryAgentRunner = async (root: string, config: DocBridgeConfigV1): Promise<RegistryAgentRunner> => {\n const metadata = loadRegistryAgentMetadata(root, config)\n const configured = registryConfig(config)?.runnerModule\n const modulePath = configured ? containedPath(root, configured) : containedPath(root, join(metadata.root, 'doc-bridge-adapter.js'))\n if (!modulePath || !existsSync(modulePath)) throw new Error(`Registry agent \"${metadata.id}\" has no local runner module. Configure intelligence.registry.runnerModule or add doc-bridge-adapter.js to the installed agent.`)\n const loaded = await import(pathToFileURL(modulePath).href) as { default?: unknown; run?: unknown }\n const runner = typeof loaded.run === 'function' ? loaded.run : typeof loaded.default === 'function' ? loaded.default : loaded.default && typeof loaded.default === 'object' && 'run' in loaded.default && typeof loaded.default.run === 'function' ? loaded.default.run : undefined\n if (!runner) throw new Error(`Registry agent runner at ${modulePath} must export a function or { run }. `)\n return runner as RegistryAgentRunner\n}\n\nexport const loadRegistryAgentMetadata = (root: string, config: DocBridgeConfigV1): RegistryAgentMetadata => {\n const settings = registryConfig(config)\n const id = settings?.agentId ?? DEFAULT_REGISTRY_AGENT_ID\n const agentRoot = settings?.agentRoot ?? 'agents'\n const agentPath = containedPath(root, join(agentRoot, id))\n if (!agentPath || !existsSync(agentPath)) throw new Error(`AgentsKit Registry agent \"${id}\" is not installed at ${join(agentRoot, id)}. Install it with: npx agentskit add ${id}`)\n const metadataPath = [join(agentPath, 'agent.json'), join(agentPath, 'manifest.json')].find(existsSync)\n if (!metadataPath) throw new Error(`Registry agent \"${id}\" is installed but has no agent.json or manifest.json metadata.`)\n const metadata = RegistryAgentMetadataSchema.parse(JSON.parse(readFileSync(metadataPath, 'utf8')) as unknown)\n if (metadata.id !== id) throw new Error(`Installed Registry agent metadata id \"${metadata.id}\" does not match configured id \"${id}\".`)\n return { ...metadata, root: agentPath }\n}\n\nexport const createRegistryAgentAdapter = (root: string, config: DocBridgeConfigV1, runner: RegistryAgentRunner): RegistryAgentAdapter => {\n if (!registryConfig(config)?.enabled) throw new Error('Registry agents are disabled. Set intelligence.registry.enabled: true to run an assisted workflow.')\n const metadata = loadRegistryAgentMetadata(resolve(root), config)\n return {\n metadata,\n run: async (snapshot, report, evidence = report.diagnostics.flatMap((diagnostic) => diagnostic.evidence).slice(0, 64)) => {\n const context = deepFreeze({ snapshot: redactValue(snapshot), report: redactValue(report), evidence: redactValue(evidence), capabilities: ['snapshot.read', 'evidence.read', 'proposal.write'] as const, network: false as const, shell: false as const }) as RegistryAgentContext\n const proposal = AgentProposalV1Schema.parse(await runner(context))\n if (proposal.contentHash !== contentHashForArtifactV1(proposal)) throw new Error('Registry agent proposal contentHash does not match its canonical contents.')\n if (proposal.baseSnapshotHash !== snapshot.contentHash || proposal.baseReportHash !== report.contentHash) throw new Error('Registry agent proposal is not based on the supplied snapshot/report hashes.')\n if (proposal.origin.kind !== 'registry-agent' || proposal.origin.id !== metadata.id) throw new Error(`Registry agent proposal origin must be ${metadata.id}.`)\n return proposal\n },\n }\n}\n\nexport const persistRegistryAgentProposal = (stateDir: string, proposal: AgentProposalV1): string => {\n AgentProposalV1Schema.parse(proposal)\n if (proposal.contentHash !== contentHashForArtifactV1(proposal)) throw new Error('Cannot persist a Registry agent proposal with an invalid contentHash.')\n const safeHash = contentHashForArtifactV1(proposal)\n mkdirSync(join(resolve(stateDir), 'agents'), { recursive: true })\n const path = join(resolve(stateDir), 'agents', `${proposal.origin.id}-${safeHash}.json`)\n writeFileSync(path, `${JSON.stringify(proposal, null, 2)}\\n`, 'utf8')\n return path\n}\n","import { contentHashForArtifactV1 } from '../index-builder/content-hash.js'\nimport {\n DiscoverySnapshotV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n} from '../schemas/knowledge.js'\n\nexport type DocumentationDiagnostic = {\n readonly code: string\n readonly message: string\n readonly path: string\n readonly evidence: Evidence\n}\n\nexport type DocumentationDeclarationInput = {\n readonly path: string\n readonly content: string\n}\n\nexport type DocumentationDeclarationOptions = {\n readonly snapshot: Pick<DiscoverySnapshotV1, 'entities'>\n readonly documentId?: string\n}\n\nexport type DocumentationDeclarationResult = {\n readonly hasDocbridge: boolean\n readonly entities: readonly KnowledgeEntity[]\n readonly relations: readonly KnowledgeRelation[]\n readonly diagnostics: readonly DocumentationDiagnostic[]\n}\n\nexport type DocumentationAnalysisResult = {\n readonly snapshot: DiscoverySnapshotV1\n readonly diagnostics: readonly DocumentationDiagnostic[]\n}\n\ntype RelationFields = {\n from?: string\n to?: string\n kind?: string\n detection?: string\n startLine: number\n endLine: number\n fields: Set<string>\n}\n\nconst detectionValues = new Set(['static', 'dynamic', 'external'])\n\nconst evidence = (path: string, lineStart: number, lineEnd = lineStart): Evidence => ({\n source: 'documentation',\n path,\n lineStart,\n lineEnd,\n})\n\nconst diagnostic = (\n path: string,\n code: string,\n message: string,\n lineStart: number,\n lineEnd = lineStart,\n): DocumentationDiagnostic => ({ code, message, path: 'docbridge', evidence: evidence(path, lineStart, lineEnd) })\n\nconst scalar = (value: string): string => {\n const trimmed = value.trim()\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) || (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1)\n }\n return trimmed\n}\n\nconst list = (value: string): string[] | undefined => {\n const trimmed = value.trim()\n if (!trimmed.startsWith('[') || !trimmed.endsWith(']')) return undefined\n const body = trimmed.slice(1, -1).trim()\n return body ? body.split(',').map(scalar).filter(Boolean) : []\n}\n\nconst findFrontmatter = (content: string): { readonly lines: readonly string[]; readonly end: number } | undefined => {\n const lines = content.replace(/^\\uFEFF/, '').split(/\\r?\\n/)\n if (lines[0] !== '---') return undefined\n const end = lines.findIndex((line, index) => index > 0 && line === '---')\n return end < 0 ? undefined : { lines, end }\n}\n\nconst addDiagnostic = (\n diagnostics: DocumentationDiagnostic[],\n input: DocumentationDeclarationInput,\n code: string,\n message: string,\n line: number,\n endLine = line,\n): void => {\n diagnostics.push(diagnostic(input.path, code, message, line, endLine))\n}\n\nconst resolveEntity = (\n reference: string,\n entities: readonly KnowledgeEntity[],\n input: DocumentationDeclarationInput,\n lineStart: number,\n unresolved: Map<string, KnowledgeEntity>,\n): KnowledgeEntity => {\n const resolved = entities.find((entity) => entity.id === reference || entity.aliases?.includes(reference))\n if (resolved) return resolved\n const id = `unresolved:${reference}`\n const existing = unresolved.get(id)\n if (existing) return existing\n const entity: KnowledgeEntity = {\n id,\n kind: 'unresolved-reference',\n name: reference,\n provenance: 'declared',\n evidence: [evidence(input.path, lineStart)],\n }\n unresolved.set(id, entity)\n return entity\n}\n\nconst relationKey = (from: string, to: string, kind: string): string => `${from}\\u0000${to}\\u0000${kind}`\n\nconst parseBlock = (\n input: DocumentationDeclarationInput,\n): { readonly covers: readonly { value: string; line: number }[]; readonly relations: readonly RelationFields[]; readonly diagnostics: readonly DocumentationDiagnostic[]; readonly hasDocbridge: boolean } => {\n const frontmatter = findFrontmatter(input.content)\n if (!frontmatter) {\n if (input.content.replace(/^\\uFEFF/, '').startsWith('---')) {\n return {\n covers: [],\n relations: [],\n hasDocbridge: true,\n diagnostics: [diagnostic(input.path, 'DOCBRIDGE_FRONTMATTER_MALFORMED', 'Frontmatter must close with a line containing only ---.', 1)],\n }\n }\n return { covers: [], relations: [], diagnostics: [], hasDocbridge: false }\n }\n\n const { lines, end } = frontmatter\n const docbridgeLine = lines.findIndex((line, index) => index > 0 && index < end && /^docbridge\\s*:/.test(line))\n if (docbridgeLine < 0) return { covers: [], relations: [], diagnostics: [], hasDocbridge: false }\n\n const diagnostics: DocumentationDiagnostic[] = []\n const covers: { value: string; line: number }[] = []\n const relations: RelationFields[] = []\n const inline = lines[docbridgeLine]?.slice('docbridge:'.length).trim() ?? ''\n if (inline && inline !== '{}') addDiagnostic(diagnostics, input, 'DOCBRIDGE_BLOCK_MALFORMED', 'docbridge must be a nested frontmatter object.', docbridgeLine + 1)\n\n let section: 'covers' | 'relations' | undefined\n let current: RelationFields | undefined\n const finishRelation = (): void => {\n if (current) relations.push(current)\n current = undefined\n }\n\n for (let index = docbridgeLine + 1; index < end; index += 1) {\n const raw = lines[index] ?? ''\n const trimmed = raw.trim()\n const line = index + 1\n if (!trimmed || trimmed.startsWith('#')) continue\n if (/\\t/.test(raw)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_INDENTATION_INVALID', 'docbridge indentation must use spaces.', line)\n continue\n }\n if (!raw.startsWith(' ')) {\n finishRelation()\n section = undefined\n continue\n }\n if (/^ {2}[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(raw)) {\n finishRelation()\n const match = /^ {2}([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n const key = match?.[1]\n const value = match?.[2] ?? ''\n if (key !== 'covers' && key !== 'relations') {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_UNKNOWN', `Unknown docbridge field: ${key ?? '(missing)'}.`, line)\n section = undefined\n } else if (key === 'covers') {\n section = 'covers'\n if (value) {\n const values = list(value)\n if (!values) addDiagnostic(diagnostics, input, 'DOCBRIDGE_COVERS_INVALID', 'covers must be a list of entity references.', line)\n else values.forEach((item) => covers.push({ value: item, line }))\n }\n } else {\n section = 'relations'\n if (value) addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATIONS_INVALID', 'relations must be a list of relation objects.', line)\n }\n continue\n }\n if (section === 'covers' && /^ {4}-\\s*/.test(raw)) {\n const value = scalar(raw.replace(/^ {4}-\\s*/, ''))\n if (!value) addDiagnostic(diagnostics, input, 'DOCBRIDGE_REFERENCE_MISSING', 'covers entries must not be empty.', line)\n else covers.push({ value, line })\n continue\n }\n if (section === 'relations' && /^ {4}-\\s*/.test(raw)) {\n finishRelation()\n const firstField = /^ {4}-\\s*([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n current = { startLine: line, endLine: line, fields: new Set() }\n if (firstField?.[1]) {\n current.fields.add(firstField[1])\n current[firstField[1] as 'from' | 'to' | 'kind' | 'detection'] = scalar(firstField[2] ?? '')\n } else if (raw.replace(/^ {4}-\\s*/, '').trim()) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATION_INVALID', 'Relation entries must be field mappings.', line)\n }\n continue\n }\n if (section === 'relations' && current && /^ {6}[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(raw)) {\n const field = /^ {6}([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n const key = field?.[1]\n current.endLine = line\n if (!key || !['from', 'to', 'kind', 'detection'].includes(key)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_UNKNOWN', `Unknown relation field: ${key ?? '(missing)'}.`, line)\n } else if (current.fields.has(key)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_DUPLICATE', `Duplicate relation field: ${key}.`, line)\n } else {\n current.fields.add(key)\n current[key as 'from' | 'to' | 'kind' | 'detection'] = scalar(field?.[2] ?? '')\n }\n continue\n }\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_STRUCTURE_INVALID', `Invalid docbridge structure at line ${line}.`, line)\n }\n finishRelation()\n return { covers, relations, diagnostics, hasDocbridge: true }\n}\n\nexport const parseDocumentationDeclarations = (\n input: DocumentationDeclarationInput,\n options: DocumentationDeclarationOptions,\n): DocumentationDeclarationResult => {\n const parsed = parseBlock(input)\n if (!parsed.hasDocbridge) return { hasDocbridge: false, entities: [], relations: [], diagnostics: [] }\n const diagnostics = [...parsed.diagnostics]\n const unresolved = new Map<string, KnowledgeEntity>()\n const relations: KnowledgeRelation[] = []\n const documentId = options.documentId ?? `document:${input.path}`\n const relationClaims = new Map<string, string>()\n\n if (!parsed.covers.length && !parsed.relations.length) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_CONTENT_MISSING', 'docbridge must declare covers or relations.', 1)\n }\n\n for (const [index, cover] of parsed.covers.entries()) {\n const target = resolveEntity(cover.value, options.snapshot.entities, input, cover.line, unresolved)\n relations.push({\n id: `relation:declared:${input.path}:covers:${index}`,\n kind: 'covers',\n from: documentId,\n to: target.id,\n provenance: 'declared',\n evidence: [evidence(input.path, cover.line)],\n })\n }\n\n for (const [index, declaration] of parsed.relations.entries()) {\n const basePath = `relations[${index}]`\n const missing = (['from', 'to', 'kind', 'detection'] as const).filter((field) => !declaration[field])\n if (missing.length) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATION_FIELD_MISSING', `Relation is missing required field(s): ${missing.join(', ')}.`, declaration.startLine, declaration.endLine)\n continue\n }\n const from = declaration.from as string\n const to = declaration.to as string\n const kind = declaration.kind as string\n const detection = declaration.detection as string\n if (!detectionValues.has(detection)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_DETECTION_INVALID', `Invalid relation detection: ${detection}.`, declaration.startLine, declaration.endLine)\n continue\n }\n const fromEntity = resolveEntity(from, options.snapshot.entities, input, declaration.startLine, unresolved)\n const toEntity = resolveEntity(to, options.snapshot.entities, input, declaration.startLine, unresolved)\n const key = relationKey(fromEntity.id, toEntity.id, kind)\n const previousDetection = relationClaims.get(key)\n if (previousDetection === detection) addDiagnostic(diagnostics, input, 'DOCBRIDGE_DECLARATION_DUPLICATE', 'Duplicate relation declaration.', declaration.startLine, declaration.endLine)\n if (previousDetection && previousDetection !== detection) addDiagnostic(diagnostics, input, 'DOCBRIDGE_DECLARATION_CONFLICT', 'Conflicting relation declarations use different detection values.', declaration.startLine, declaration.endLine)\n relationClaims.set(key, previousDetection ?? detection)\n relations.push({\n id: `relation:declared:${input.path}:${basePath}`,\n kind,\n from: fromEntity.id,\n to: toEntity.id,\n discriminator: detection,\n provenance: 'declared',\n evidence: [evidence(input.path, declaration.startLine, declaration.endLine)],\n metadata: { detection },\n })\n }\n\n return {\n hasDocbridge: true,\n entities: [...unresolved.values()].sort((a, b) => a.id.localeCompare(b.id)),\n relations,\n diagnostics,\n }\n}\n\nexport const applyDocumentationDeclarations = (\n snapshot: DiscoverySnapshotV1,\n documents: readonly DocumentationDeclarationInput[],\n): DocumentationAnalysisResult => {\n const entities = new Map(snapshot.entities.map((entity) => [entity.id, entity]))\n const relations = new Map(snapshot.relations.map((relation) => [relation.id, relation]))\n const diagnostics: DocumentationDiagnostic[] = []\n\n for (const document of documents) {\n const result = parseDocumentationDeclarations(document, { snapshot })\n diagnostics.push(...result.diagnostics)\n for (const entity of result.entities) entities.set(entity.id, entity)\n for (const relation of result.relations) relations.set(relation.id, relation)\n }\n\n const base = { ...snapshot, contentHash: '0'.repeat(64), entities: [...entities.values()], relations: [...relations.values()] }\n return {\n snapshot: DiscoverySnapshotV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) }),\n diagnostics,\n }\n}\n","import { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport {\n ReconciliationReportV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n type ReconciliationReportV1,\n} from '../schemas/knowledge.js'\n\ntype EntityResolver = (reference: string) => string\n\nconst ignoredDocumentationRelations = new Set(['covers'])\n\nconst metadataDetection = (relation: KnowledgeRelation): string | undefined => {\n const detection = relation.metadata?.detection\n return typeof detection === 'string' ? detection : undefined\n}\n\nconst relationDetection = (relation: KnowledgeRelation): string =>\n relation.discriminator ?? metadataDetection(relation) ?? 'static'\n\nconst entityResolver = (snapshots: readonly DiscoverySnapshotV1[]): EntityResolver => {\n const references = new Map<string, string>()\n const entities = snapshots.flatMap((snapshot) => snapshot.entities).sort((a, b) => a.id.localeCompare(b.id))\n for (const entity of entities) {\n references.set(entity.id, entity.id)\n for (const alias of entity.aliases ?? []) {\n if (!references.has(alias)) references.set(alias, entity.id)\n }\n }\n return (reference) => references.get(reference) ?? reference\n}\n\nconst relationBase = (relation: KnowledgeRelation, resolveEntity: EntityResolver): string =>\n `${resolveEntity(relation.from)}\\u0000${resolveEntity(relation.to)}\\u0000${relation.kind}`\n\nconst evidenceKey = (item: Evidence): string =>\n `${item.source}:${item.path}:${item.lineStart ?? ''}:${item.lineEnd ?? ''}:${item.context ?? ''}`\n\nconst mergeEvidence = (...relations: readonly KnowledgeRelation[]): Evidence[] => {\n const merged = new Map<string, Evidence>()\n for (const relation of relations) {\n for (const item of relation.evidence) merged.set(evidenceKey(item), item)\n }\n return [...merged.values()].sort((a, b) => evidenceKey(a).localeCompare(evidenceKey(b)))\n}\n\nconst diagnosticId = (code: string, value: unknown): string =>\n `reconciliation:${code}:${sha256NormalizedV1(value).slice(0, 32)}`\n\nconst coverageAvailable = (snapshot: DiscoverySnapshotV1, relation: KnowledgeRelation): boolean => {\n const status = snapshot.coverage.find((entry) =>\n entry.scope === 'static-imports-and-exports' && (relation.kind === 'imports' || relation.kind === 're-exports'),\n )?.status\n return status === undefined || status === 'complete'\n}\n\nconst entityById = (snapshots: readonly DiscoverySnapshotV1[]): ReadonlyMap<string, KnowledgeEntity> => {\n const entities = new Map<string, KnowledgeEntity>()\n for (const snapshot of snapshots) {\n for (const entity of snapshot.entities) if (!entities.has(entity.id)) entities.set(entity.id, entity)\n }\n return entities\n}\n\nconst isUnresolved = (id: string, entities: ReadonlyMap<string, KnowledgeEntity>): boolean =>\n id.startsWith('unresolved:') || entities.get(id)?.kind === 'unresolved-reference'\n\nconst relationMatches = (observed: KnowledgeRelation, declared: KnowledgeRelation, resolveEntity: EntityResolver): boolean => {\n if (relationBase(observed, resolveEntity) !== relationBase(declared, resolveEntity)) return false\n return relationDetection(declared) === relationDetection(observed)\n}\n\nconst reportDiagnostic = (\n code: string,\n status: ReconciliationReportV1['diagnostics'][number]['status'],\n severity: ReconciliationReportV1['diagnostics'][number]['severity'],\n message: string,\n evidence: readonly Evidence[],\n value: unknown,\n entityIds?: readonly string[],\n relationIds?: readonly string[],\n remediation?: string,\n): ReconciliationReportV1['diagnostics'][number] => ({\n id: diagnosticId(code, value),\n code,\n status,\n severity,\n message,\n evidence: [...evidence],\n ...(entityIds?.length ? { entityIds: [...entityIds] } : {}),\n ...(relationIds?.length ? { relationIds: [...relationIds] } : {}),\n ...(remediation ? { remediation } : {}),\n})\n\nexport const reconcileKnowledge = (\n observed: DiscoverySnapshotV1,\n declared: DiscoverySnapshotV1,\n): ReconciliationReportV1 => {\n const resolveEntity = entityResolver([observed, declared])\n const entities = entityById([observed, declared])\n const observedRelations = observed.relations.filter((relation) => relation.provenance === 'observed' && !ignoredDocumentationRelations.has(relation.kind))\n const declaredRelations = declared.relations.filter((relation) => relation.provenance === 'declared' && !ignoredDocumentationRelations.has(relation.kind))\n const diagnostics: ReconciliationReportV1['diagnostics'][number][] = []\n\n for (const entity of declared.entities.filter((item) => isUnresolved(item.id, entities)).sort((a, b) => a.id.localeCompare(b.id))) {\n diagnostics.push(reportDiagnostic(\n 'UNRESOLVED_ENTITY_REFERENCE',\n 'unresolved',\n 'error',\n `Declared reference could not be resolved: ${entity.name}.`,\n entity.evidence,\n entity.id,\n [entity.id],\n undefined,\n 'Resolve the reference to an observed entity ID or configured alias.',\n ))\n }\n\n const declaredByBase = new Map<string, KnowledgeRelation[]>()\n for (const relation of declaredRelations) {\n const base = relationBase(relation, resolveEntity)\n const group = declaredByBase.get(base) ?? []\n group.push(relation)\n declaredByBase.set(base, group)\n }\n\n for (const group of declaredByBase.values()) {\n const detections = new Set(group.map(relationDetection))\n if (detections.size < 2) continue\n diagnostics.push(reportDiagnostic(\n 'CONFLICTING_DECLARATIONS',\n 'conflict',\n 'error',\n 'Declarations for the same semantic relation disagree on detection.',\n mergeEvidence(...group),\n [relationBase(group[0] as KnowledgeRelation, resolveEntity), [...detections].sort()],\n undefined,\n group.map((relation) => relation.id),\n 'Keep one detection value for this relation or document the intended distinction with a different relation kind.',\n ))\n }\n\n for (const relation of observedRelations) {\n const candidates = declaredByBase.get(relationBase(relation, resolveEntity)) ?? []\n const match = candidates.find((candidate) => relationMatches(relation, candidate, resolveEntity))\n if (match) {\n diagnostics.push(reportDiagnostic(\n 'RELATION_CONFIRMED',\n 'confirmed',\n 'info',\n 'Observed relation is covered by a matching declaration.',\n mergeEvidence(relation, match),\n relation.id,\n undefined,\n [relation.id, match.id],\n ))\n } else if (coverageAvailable(observed, relation)) {\n diagnostics.push(reportDiagnostic(\n 'RELATION_UNDOCUMENTED',\n 'undocumented',\n 'warn',\n 'Observed relation has no matching documentation declaration.',\n relation.evidence,\n relation.id,\n undefined,\n [relation.id],\n 'Add a matching relation declaration or configure this relation kind as intentionally undocumented.',\n ))\n }\n }\n\n for (const relation of declaredRelations) {\n const candidates = observedRelations.filter((candidate) => relationBase(candidate, resolveEntity) === relationBase(relation, resolveEntity))\n const detection = relationDetection(relation)\n if (candidates.some((candidate) => relationMatches(candidate, relation, resolveEntity))) continue\n if (isUnresolved(resolveEntity(relation.from), entities) || isUnresolved(resolveEntity(relation.to), entities)) continue\n if (detection === 'dynamic' || detection === 'external') {\n diagnostics.push(reportDiagnostic(\n 'RELATION_NOT_ANALYZED',\n 'not-analyzed',\n 'info',\n `Declared ${detection} relation cannot be verified by the current static analyzer.`,\n relation.evidence,\n relation.id,\n undefined,\n [relation.id],\n 'Enable a compatible analyzer or provide explicit observed evidence before treating this relation as confirmed.',\n ))\n } else if (coverageAvailable(observed, relation)) {\n diagnostics.push(reportDiagnostic(\n 'DECLARED_RELATION_STALE',\n 'stale-or-unverified',\n 'warn',\n candidates.length ? 'Declared relation has incompatible observed evidence.' : 'Declared static relation was not observed.',\n candidates.length ? mergeEvidence(relation, ...candidates) : relation.evidence,\n relation.id,\n undefined,\n [relation.id, ...candidates.map((candidate) => candidate.id)],\n 'Update the declaration or the implementation so both graphs describe the same relation.',\n ))\n }\n }\n\n const sortedDiagnostics = [...diagnostics].sort((a, b) => a.id.localeCompare(b.id))\n const base = {\n type: 'reconciliation-report' as const,\n schemaVersion: 1 as const,\n contentHash: '0'.repeat(64),\n contentHashAlgo: observed.contentHashAlgo,\n project: observed.project,\n sourceRevision: observed.sourceRevision,\n sourceRevisionKind: observed.sourceRevisionKind,\n configurationHash: observed.configurationHash,\n pipelineVersion: observed.pipelineVersion,\n analyzerVersions: observed.analyzerVersions,\n snapshotHash: observed.contentHash,\n diagnostics: sortedDiagnostics,\n summary: {\n entityCount: observed.entities.length,\n relationCount: observedRelations.length,\n diagnosticCount: sortedDiagnostics.length,\n },\n }\n return ReconciliationReportV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) })\n}\n","import { DiscoverySnapshotV1Schema, ReconciliationReportV1Schema, type DiscoverySnapshotV1, type ReconciliationReportV1 } from '../schemas/knowledge.js'\nimport { redactSecrets } from '../safety/repository.js'\n\nexport type OfflineReportInput = {\n readonly snapshot: DiscoverySnapshotV1\n readonly report: ReconciliationReportV1\n}\n\nexport type OfflineReportOptions = {\n readonly includeSnippets?: boolean\n}\n\nconst escapeHtml = (value: unknown): string => String(value)\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n\nconst anchor = (prefix: string, value: string): string => `${prefix}-${value.replace(/[^A-Za-z0-9_-]+/g, '-')}`\n\nconst embeddedJson = (value: unknown): string => JSON.stringify(value).replaceAll('<', '\\\\u003c')\n\nconst errorPage = (message: string): string => `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><title>Doc Bridge report error</title><style>body{font:16px system-ui;margin:3rem;color:#311}main{max-width:60rem;margin:auto;border:1px solid #d99;padding:2rem;border-radius:8px;background:#fff8f8}code{white-space:pre-wrap}</style></head><body><main><h1>Doc Bridge report unavailable</h1><p>The saved snapshot/report could not be rendered.</p><code>${escapeHtml(message)}</code><p>Run <code>ak-docs check</code> to regenerate valid artifacts.</p></main></body></html>`\n\nconst reportData = (snapshot: DiscoverySnapshotV1, report: ReconciliationReportV1, includeSnippets: boolean) => ({\n project: snapshot.project,\n revision: snapshot.sourceRevision,\n revisionKind: snapshot.sourceRevisionKind,\n snapshotHash: snapshot.contentHash,\n reportHash: report.contentHash,\n configurationHash: snapshot.configurationHash,\n pipelineVersion: snapshot.pipelineVersion,\n analyzerVersions: snapshot.analyzerVersions,\n entities: snapshot.entities.map((entity, index) => ({\n id: entity.id,\n anchor: entity.id.length > 64 ? `entity-n${index}` : anchor('entity', entity.id),\n kind: entity.kind,\n name: entity.name,\n path: entity.path,\n provenance: entity.provenance,\n evidence: entity.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n relations: snapshot.relations.map((relation) => ({\n id: relation.id,\n kind: relation.kind,\n from: relation.from,\n to: relation.to,\n provenance: relation.provenance,\n evidence: relation.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n diagnostics: report.diagnostics.map((diagnostic) => ({\n id: diagnostic.id,\n code: diagnostic.code,\n status: diagnostic.status,\n severity: diagnostic.severity,\n message: diagnostic.message,\n entityIds: diagnostic.entityIds ?? [],\n relationIds: diagnostic.relationIds ?? [],\n remediation: diagnostic.remediation,\n evidence: diagnostic.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n coverage: snapshot.coverage,\n})\n\nconst styles = String.raw`\n:root{color-scheme:light;--ink:#17251f;--muted:#60706a;--paper:#f5f7f3;--panel:#fff;--line:#d9e0da;--green:#18794e;--blue:#236b83;--amber:#a9640b;--red:#b33c35;--shadow:0 12px 32px rgba(23,37,31,.08)}\n*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}button,input,select{font:inherit}button{cursor:pointer}a{color:var(--blue)}.shell{max-width:1500px;margin:auto;padding:24px}.masthead{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;border-bottom:1px solid var(--line);padding:8px 0 24px}.eyebrow{color:var(--green);font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.masthead h1{font:700 clamp(28px,4vw,52px)/1.03 Georgia,serif;letter-spacing:-.04em;margin:8px 0}.lede{color:var(--muted);font-size:16px;max-width:720px;margin:0}.run-meta{text-align:right;color:var(--muted);font-size:12px}.run-meta strong{display:block;color:var(--green);font-size:14px}.read-only{border:1px solid #b9d7c6;background:#edf8f0;color:#185b3b;border-radius:999px;display:inline-flex;padding:4px 10px;font-weight:700;font-size:12px}.summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:20px 0}.metric,.insight,.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px}.metric{padding:16px}.metric b{font-size:27px;display:block;line-height:1}.metric span{color:var(--muted);display:block;margin-top:7px}.metric.warn b{color:var(--amber)}.metric.bad b{color:var(--red)}.lens-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:22px 0 12px}.tabs{display:flex;gap:4px;flex-wrap:wrap}.tab,.level{border:1px solid transparent;background:transparent;border-radius:8px;padding:8px 11px;color:var(--muted)}.tab:hover,.level:hover{background:#e8eee9;color:var(--ink)}.tab[aria-selected=true],.level[aria-pressed=true]{background:var(--ink);color:#fff}.filters{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.filters label{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px}.filters input,.filters select,.filters button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;color:var(--ink)}.filters input{min-width:220px}.filters button{color:var(--blue)}.insights{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0 20px}.insight{padding:14px}.insight h3{font-size:13px;margin:0 0 5px}.insight p{color:var(--muted);margin:0;font-size:12px}.tag{display:inline-block;border-radius:999px;padding:2px 7px;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;background:#edf0ee;color:var(--muted)}.tag.heuristic{background:#fff3dc;color:#8a570a}.tag.error{background:#fde8e6;color:var(--red)}.tag.warn{background:#fff2d9;color:var(--amber)}.tag.info{background:#e6f1f5;color:var(--blue)}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:14px}.panel{padding:18px}.panel h2{font:700 23px Georgia,serif;margin:0}.panel h3{font-size:14px;margin:0}.panel-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:14px}.subtle{color:var(--muted);font-size:12px}.map-wrap{border:1px solid var(--line);border-radius:10px;overflow:auto;background:linear-gradient(135deg,#fbfcfa,#f0f5f0)}#graph{display:block;width:100%;min-width:760px;height:560px}.edge{stroke:#b8c6bd;stroke-width:1.3;opacity:.65}.edge.alert{stroke:#d08a35;stroke-width:2}.edge-label{fill:var(--muted);font-size:10px}.graph-node{cursor:pointer}.graph-node rect{fill:#fff;stroke:#9eb0a4;stroke-width:1.2}.graph-node:hover rect,.graph-node:focus rect{stroke:var(--blue);stroke-width:2}.graph-node.selected rect{stroke:var(--green);stroke-width:3}.graph-node.issue rect{fill:#fffaf0;stroke:#c98a2c}.graph-node text{pointer-events:none}.node-label{font-size:12px;font-weight:750}.node-kind{font-size:10px;fill:var(--muted)}.node-count{font-size:10px;fill:var(--green);font-weight:800}.empty{padding:32px;text-align:center;color:var(--muted)}.side{position:sticky;top:14px;align-self:start}.detail-title{font:700 22px Georgia,serif;margin:4px 0}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:12px 0;margin:14px 0}.detail-grid b{display:block;font-size:19px}.detail-grid span{color:var(--muted);font-size:11px}.path{overflow-wrap:anywhere;color:var(--muted);font-size:12px}.list{list-style:none;margin:10px 0 0;padding:0}.list li{border-top:1px solid var(--line);padding:8px 0;font-size:12px}.run{margin-top:14px}.run-summary{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.chip{border:1px solid var(--line);border-radius:999px;padding:5px 9px;color:var(--muted);font-size:12px}.chip b{color:var(--ink)}.finding{border-top:1px solid var(--line);padding:14px 0}.finding-head{display:flex;justify-content:space-between;gap:10px}.finding h3{margin:0;font-size:14px}.finding p{margin:5px 0;color:var(--muted)}.finding ul{margin:8px 0 0;padding-left:18px;color:var(--muted);font-size:12px}.coverage-row{display:grid;grid-template-columns:170px 1fr 90px;gap:10px;align-items:center;border-top:1px solid var(--line);padding:10px 0;font-size:12px}.bar{height:7px;background:#e7ece8;border-radius:99px;overflow:hidden}.bar i{display:block;height:100%;background:var(--green)}.bar i.partial{background:var(--amber)}.bar i.none{background:var(--red)}.metadata{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:14px}.metadata div{border-top:1px solid var(--line);padding-top:8px;color:var(--muted);font-size:12px;overflow-wrap:anywhere}.metadata b{display:block;color:var(--ink);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:3px}.hidden{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:900px){.summary{grid-template-columns:repeat(3,minmax(0,1fr))}.insights{grid-template-columns:repeat(2,minmax(0,1fr))}.workspace{grid-template-columns:1fr}.side{position:static}.run-meta{display:none}}@media(max-width:560px){.shell{padding:14px}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.insights{grid-template-columns:1fr}.masthead{display:block}.filters input{min-width:0;width:100%}.filters label:first-child{width:100%}.metadata{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}\n`\n\nconst script = String.raw`\nconst data=${'${DATA}'};\nconst esc=(value)=>String(value??'').replaceAll('&','&amp;').replaceAll('<','&lt;').replaceAll('>','&gt;').replaceAll('\"','&quot;').replaceAll(\"'\",'&#39;');\nconst byId=new Map(data.entities.map((entity)=>[entity.id,entity]));\nconst parent=new Map();\nconst relationById=new Map(data.relations.map((relation)=>[relation.id,relation]));\ndata.relations.forEach((relation)=>{if(relation.kind==='contains'&&!parent.has(relation.to))parent.set(relation.to,relation.from)});\nconst findingIndex=new Map(),relationFindingIndex=new Map();\nconst addFinding=(index,id,finding)=>{const findings=index.get(id)||[];findings.push(finding);index.set(id,findings)};\ndata.diagnostics.forEach((finding)=>{(finding.entityIds||[]).forEach((id)=>addFinding(findingIndex,id,finding));(finding.relationIds||[]).forEach((id)=>addFinding(relationFindingIndex,id,finding));});\nconst state={lens:'architecture',level:'overview',selected:null,query:'',status:'',severity:''};\nconst rootOf=(id)=>{let current=id;const seen=new Set();while(parent.has(current)&&!seen.has(current)){seen.add(current);current=parent.get(current)}return current};\nconst packageNodes=()=>data.entities.filter((entity)=>entity.kind==='package'||entity.kind==='external');\nconst groupFor=(id)=>{const entity=byId.get(id);if(!entity)return id;if(entity.kind==='package'||entity.kind==='external')return entity.id;const root=rootOf(id);return byId.has(root)?root:id};\nconst label=(entity)=>entity?.name||entity?.id||'Unknown';\nconst short=(value,max)=>{const text=String(value??'');return text.length>max?text.slice(0,max-1)+'…':text};\nconst diagnosticsFor=(id)=>findingIndex.get(id)||[];\nconst relationHealth=(relation)=>{const findings=relationFindingIndex.get(relation.id)||[];return findings.some((finding)=>finding.severity==='error')?'error':findings.length?'warn':''};\nconst degreeMap=(relations)=>{const degrees=new Map();relations.forEach((relation)=>{degrees.set(relation.from,(degrees.get(relation.from)||0)+1);degrees.set(relation.to,(degrees.get(relation.to)||0)+1)});return degrees};\nconst selectedScope=()=>{if(!state.selected)return null;const selected=byId.get(state.selected);return selected?.kind==='package'?selected.id:groupFor(state.selected)};\nconst nodesFor=()=>{const packages=packageNodes();if(state.level==='overview'||(state.level==='package'&&!state.selected))return packages.length?packages:data.entities.filter((entity)=>entity.kind!=='document').slice(0,80);const scope=selectedScope();let nodes=data.entities.filter((entity)=>{if(entity.kind==='package'||entity.kind==='external')return false;if(entity.kind==='document'&&state.level==='module')return false;return !scope||groupFor(entity.id)===scope});if(state.level==='module')nodes=nodes.filter((entity)=>entity.kind==='module');if(state.level==='file')nodes=nodes.filter((entity)=>Boolean(entity.path));const degrees=degreeMap(data.relations);return nodes.sort((a,b)=>(degrees.get(b.id)||0)-(degrees.get(a.id)||0)||a.id.localeCompare(b.id)).slice(0,160)};\nconst graphModel=()=>{const nodes=nodesFor();const ids=new Set(nodes.map((node)=>node.id));const aggregate=state.level==='overview'||(state.level==='package'&&!state.selected);const edges=new Map();data.relations.forEach((relation)=>{const from=aggregate?groupFor(relation.from):relation.from;const to=aggregate?groupFor(relation.to):relation.to;if(from===to||!ids.has(from)||!ids.has(to))return;const key=from+'→'+to;const current=edges.get(key)||{from,to,count:0,kinds:new Set(),health:''};current.count++;current.kinds.add(relation.kind);current.health=current.health==='error'||relationHealth(relation)==='error'?'error':current.health||relationHealth(relation);edges.set(key,current)});return{nodes,edges:[...edges.values()].sort((a,b)=>b.count-a.count||a.from.localeCompare(b.from)).slice(0,600)}};\nconst nodeIssues=(nodeId)=>{const ids=new Set([nodeId]);data.entities.forEach((entity)=>{if(groupFor(entity.id)===nodeId)ids.add(entity.id)});const findings=new Set();ids.forEach((id)=>(findingIndex.get(id)||[]).forEach((finding)=>findings.add(finding)));data.relations.forEach((relation)=>{if(ids.has(relation.from)||ids.has(relation.to))(relationFindingIndex.get(relation.id)||[]).forEach((finding)=>findings.add(finding))});return[...findings]};\nconst renderInsights=()=>{const undocumented=data.diagnostics.filter((finding)=>finding.status==='undocumented').length;const drift=data.diagnostics.filter((finding)=>finding.status==='stale-or-unverified'||finding.status==='conflict').length;const unsupported=data.coverage.filter((entry)=>entry.status==='not-analyzed'||entry.status==='partial').length;const model=graphModel();const degrees=degreeMap(model.edges);const values=[...degrees.values()].sort((a,b)=>a-b);const median=values.length?values[Math.floor(values.length/2)]:0;const hot=[...degrees.values()].filter((value)=>value>=Math.max(4,median*2)).length;const isolated=model.nodes.filter((node)=>!model.edges.some((edge)=>edge.from===node.id||edge.to===node.id)).length;document.querySelector('#insights').innerHTML=[['Documentation drift',undocumented+drift,'Relations or docs needing comparison.',''],['Unanalyzed scope',unsupported,'Coverage gaps are explicit.',''],['Connectivity hotspots',hot,'Heuristic: unusually connected nodes.','heuristic'],['Disconnected nodes',isolated,'Heuristic: no visible edge at this level.','heuristic']].map(([title,count,copy,tag])=>'<article class=\"insight\"><h3>'+esc(title)+' <span class=\"tag '+tag+'\">'+(tag?'heuristic':'signal')+'</span></h3><p><strong>'+count+'</strong> · '+esc(copy)+'</p></article>').join('')};\nconst renderGraph=()=>{const model=graphModel();const svg=document.querySelector('#graph');if(!model.nodes.length){svg.innerHTML='<text x=\"500\" y=\"270\" text-anchor=\"middle\" class=\"subtle\">No entities match this level.</text>';return}const width=1000,height=560,pad=56,columns=Math.max(1,Math.ceil(Math.sqrt(model.nodes.length))),rows=Math.ceil(model.nodes.length/columns),positions=new Map();model.nodes.forEach((node,index)=>{const col=index%columns,row=Math.floor(index/columns);positions.set(node.id,{x:pad+(col+0.5)*(width-2*pad)/columns,y:pad+(row+0.5)*(height-2*pad)/rows})});const defs='<defs><marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"3\" orient=\"auto\"><path d=\"M0,0 L0,6 L7,3 z\" fill=\"#9eb0a4\"/></marker></defs>';const edges=model.edges.map((edge)=>{const from=positions.get(edge.from),to=positions.get(edge.to);if(!from||!to)return '';const midX=(from.x+to.x)/2,midY=(from.y+to.y)/2;return '<g><line class=\"edge '+(edge.health?'alert':'')+'\" x1=\"'+from.x+'\" y1=\"'+from.y+'\" x2=\"'+to.x+'\" y2=\"'+to.y+'\" marker-end=\"url(#arrow)\"/><text class=\"edge-label\" x=\"'+midX+'\" y=\"'+midY+'\">'+esc(edge.count>1?edge.count+'×':'')+'</text></g>'}).join('');const nodes=model.nodes.map((node)=>{const pos=positions.get(node.id),issues=nodeIssues(node.id),degree=(degreeMap(model.edges).get(node.id)||0),selected=state.selected===node.id?' selected':'',issue=issues.length?' issue':'';return '<g class=\"graph-node'+selected+issue+'\" role=\"button\" tabindex=\"0\" data-node=\"'+esc(node.id)+'\" transform=\"translate('+(pos.x-62)+','+(pos.y-27)+')\"><title>'+esc(label(node))+' · '+esc(node.kind)+'</title><rect width=\"124\" height=\"54\" rx=\"8\"></rect><text class=\"node-label\" x=\"10\" y=\"19\">'+esc(short(label(node),18))+'</text><text class=\"node-kind\" x=\"10\" y=\"34\">'+esc(short(node.kind,18))+'</text><text class=\"node-count\" x=\"112\" y=\"19\" text-anchor=\"end\">'+(degree||'')+'</text></g>'}).join('');svg.innerHTML=defs+edges+nodes;svg.querySelectorAll('[data-node]').forEach((node)=>{node.addEventListener('click',()=>{state.selected=node.dataset.node;render()});node.addEventListener('keydown',(event)=>{if(event.key==='Enter'||event.key===' '){event.preventDefault();state.selected=node.dataset.node;render()}})});document.querySelector('#map-note').textContent=(state.level==='overview'?'Grouped package/external view. ':state.level+' view. ')+'Edges are aggregated from canonical relations; '+model.edges.length+' visible connection groups.'};\nconst renderDetails=()=>{const panel=document.querySelector('#details'),entity=state.selected?byId.get(state.selected):null;if(!entity){panel.innerHTML='<p class=\"subtle\">Select a node in the map to inspect its evidence, connectivity, and findings.</p>';return}const incoming=data.relations.filter((relation)=>relation.to===entity.id),outgoing=data.relations.filter((relation)=>relation.from===entity.id),findings=diagnosticsFor(entity.id),evidence=[...(entity.evidence||[]),...incoming.flatMap((relation)=>relation.evidence||[]),...outgoing.flatMap((relation)=>relation.evidence||[])].slice(0,8);panel.innerHTML='<div class=\"eyebrow\">Selected entity</div><h2 class=\"detail-title\">'+esc(label(entity))+'</h2><span class=\"tag\">'+esc(entity.kind)+'</span><p class=\"path\">'+esc(entity.path||entity.id)+'</p><div class=\"detail-grid\"><div><b>'+incoming.length+'</b><span>incoming</span></div><div><b>'+outgoing.length+'</b><span>outgoing</span></div><div><b>'+findings.length+'</b><span>findings</span></div><div><b>'+evidence.length+'</b><span>evidence items</span></div></div><h3>Evidence</h3><ul class=\"list\">'+(evidence.length?evidence.map((item)=>'<li>'+esc(item.path+(item.lineStart?':'+item.lineStart:'')+(item.context?' — '+item.context:''))+'</li>').join(''):'<li>No evidence recorded.</li>')+'</ul>'+(findings.length?'<h3 style=\"margin-top:16px\">Attention</h3><ul class=\"list\">'+findings.slice(0,5).map((finding)=>'<li><span class=\"tag '+esc(finding.severity)+'\">'+esc(finding.severity)+'</span> '+esc(finding.code)+'</li>').join('')+'</ul>':'')};\nconst findingMatches=(finding)=>{const query=state.query.toLowerCase();return(!query||[finding.id,finding.code,finding.message,...finding.entityIds,...finding.relationIds].join(' ').toLowerCase().includes(query))&&(!state.status||finding.status===state.status)&&(!state.severity||finding.severity===state.severity)};\nconst renderFindings=()=>{let findings=data.diagnostics.filter(findingMatches);if(state.lens==='risks')findings=findings.filter((finding)=>finding.severity==='error'||finding.severity==='warn');if(state.lens==='evidence')findings=findings.filter((finding)=>finding.evidence.length);if(state.lens==='drift')findings=findings.filter((finding)=>finding.status!=='confirmed');document.querySelector('#finding-count').textContent=findings.length+' shown';document.querySelector('#findings').innerHTML=findings.slice(0,300).map((finding)=>'<article class=\"finding\" id=\"'+esc('diagnostic-'+finding.id.replace(/[^A-Za-z0-9_-]+/g,'-'))+'\"><div class=\"finding-head\"><h3>'+esc(finding.code)+'</h3><span><span class=\"tag '+esc(finding.severity)+'\">'+esc(finding.severity)+'</span> <span class=\"tag\">'+esc(finding.status)+'</span></span></div><p>'+esc(finding.message)+'</p>'+(finding.evidence.length?'<ul>'+finding.evidence.slice(0,4).map((item)=>'<li>'+esc(item.path+(item.lineStart?':'+item.lineStart:'')+(item.context?' — '+item.context:''))+'</li>').join('')+'</ul>':'')+(finding.remediation?'<p><strong>Next check:</strong> '+esc(finding.remediation)+'</p>':'')+'</article>').join('')||'<p class=\"empty\">No findings match the current lens and filters.</p>';};\nconst renderCoverage=()=>{document.querySelector('#coverage-list').innerHTML=data.coverage.map((entry)=>{const width=entry.status==='complete'?100:entry.status==='partial'?55:12;return '<div class=\"coverage-row\"><div><b>'+esc(entry.analyzer)+'</b><br><span class=\"subtle\">'+esc(entry.scope)+'</span></div><div class=\"bar\"><i class=\"'+(entry.status==='complete'?'':entry.status==='partial'?'partial':'none')+'\" style=\"width:'+width+'%\"></i></div><div>'+esc(entry.status)+'</div></div>'}).join('')||'<p class=\"empty\">No coverage metadata.</p>'};\n const render=()=>{document.querySelectorAll('.tab[data-lens]').forEach((tab)=>tab.setAttribute('aria-selected',String(tab.dataset.lens===state.lens)));document.querySelectorAll('.level').forEach((button)=>button.setAttribute('aria-pressed',String(button.dataset.level===state.level)));document.querySelector('#lens-caption').textContent=state.lens==='architecture'?'The repository topology at the selected level.':state.lens==='drift'?'Where canonical code relations and documentation declarations need attention.':state.lens==='risks'?'Signals that deserve human review; connectivity warnings are heuristics, not architectural proof.':'What the analyzers observed, declared, or could not analyze.';renderInsights();renderGraph();renderDetails();renderFindings();renderCoverage()};\n document.querySelectorAll('.tab[data-lens]').forEach((tab)=>tab.addEventListener('click',()=>{state.lens=tab.dataset.lens;render()}));document.querySelectorAll('.level').forEach((button)=>button.addEventListener('click',()=>{state.level=button.dataset.level;render()}));document.querySelector('#search').addEventListener('input',(event)=>{state.query=event.target.value;renderFindings()});document.querySelector('#status').addEventListener('change',(event)=>{state.status=event.target.value;renderFindings()});document.querySelector('#severity').addEventListener('change',(event)=>{state.severity=event.target.value;renderFindings()});document.querySelector('#reset').addEventListener('click',()=>{state.query='';state.status='';state.severity='';document.querySelector('#search').value='';document.querySelector('#status').value='';document.querySelector('#severity').value='';renderFindings()});document.querySelector('#clear-selection').addEventListener('click',()=>{state.selected=null;render()});document.addEventListener('keydown',(event)=>{if(event.key==='/'&&document.activeElement.tagName!=='INPUT'){event.preventDefault();document.querySelector('#search').focus()}});render();\n`\n\nconst render = (input: OfflineReportInput, options: OfflineReportOptions): string => {\n const { snapshot, report } = input\n const includeSnippets = options.includeSnippets === true\n const data = reportData(snapshot, report, includeSnippets)\n const scriptBody = script.replace('${' + 'DATA}', embeddedJson(data))\n const largeNote = snapshot.entities.length > 500 || report.diagnostics.length > 1_000\n ? 'Large snapshots are rendered from compact canonical data with progressive graph levels.'\n : 'The viewer starts with a grouped topology and expands into canonical entities on demand.'\n const issueCount = report.diagnostics.filter((diagnostic) => diagnostic.severity === 'error' || diagnostic.severity === 'warn').length\n const unsupportedCount = snapshot.coverage.filter((entry) => entry.status !== 'complete').length\n const statusOptions = ['confirmed', 'undocumented', 'stale-or-unverified', 'conflict', 'unresolved', 'not-analyzed']\n return `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Doc Bridge — ${escapeHtml(snapshot.project.name)}</title><style>${styles}</style></head><body><main class=\"shell\"><header class=\"masthead\"><div><div class=\"eyebrow\">Doc Bridge / Knowledge report</div><h1>${escapeHtml(snapshot.project.name)}</h1><p class=\"lede\">A read-only architecture and documentation map. Start broad, then follow evidence to the exact entity, relation, or finding.</p></div><div class=\"run-meta\"><span class=\"read-only\">Read-only snapshot</span><strong>${escapeHtml(snapshot.sourceRevision)}</strong><span>${escapeHtml(snapshot.sourceRevisionKind)} · pipeline ${escapeHtml(snapshot.pipelineVersion)}</span></div></header><section class=\"summary\" aria-label=\"Snapshot summary\"><div class=\"metric\"><b>${snapshot.entities.length}</b><span>entities</span></div><div class=\"metric\"><b>${snapshot.relations.length}</b><span>canonical relations</span></div><div class=\"metric ${issueCount?'warn':''}\"><b>${issueCount}</b><span>warn/error findings</span></div><div class=\"metric ${report.diagnostics.length?'warn':''}\"><b>${report.diagnostics.length}</b><span>total findings</span></div><div class=\"metric ${unsupportedCount?'bad':''}\"><b>${unsupportedCount}</b><span>partial / unanalyzed scopes</span></div></section><div class=\"lens-bar\"><nav class=\"tabs\" aria-label=\"Report lenses\"><button class=\"tab\" data-lens=\"architecture\" aria-selected=\"true\">Architecture</button><button class=\"tab\" data-lens=\"drift\" aria-selected=\"false\">Documentation drift</button><button class=\"tab\" data-lens=\"risks\" aria-selected=\"false\">Risks &amp; hotspots</button><button class=\"tab\" data-lens=\"evidence\" aria-selected=\"false\">Evidence</button></nav><span class=\"subtle\">${escapeHtml(largeNote)}</span></div><p id=\"lens-caption\" class=\"subtle\">The repository topology at the selected level.</p><section id=\"insights\" class=\"insights\" aria-label=\"Attention signals\"></section><section class=\"filters\" aria-label=\"Finding filters\"><label>Search <input id=\"search\" type=\"search\" placeholder=\"Press / to search findings\"></label><label>Status <select id=\"status\"><option value=\"\">Any status</option>${statusOptions.map((value) => `<option>${escapeHtml(value)}</option>`).join('')}</select></label><label>Severity <select id=\"severity\"><option value=\"\">Any severity</option><option>error</option><option>warn</option><option>info</option></select></label><button id=\"reset\" type=\"button\">Reset filters</button></section><div class=\"workspace\"><section class=\"panel\" aria-labelledby=\"architecture-title\"><div class=\"panel-head\"><div><h2 id=\"architecture-title\">Architecture map</h2><p id=\"map-note\" class=\"subtle\">Grouped package/external view.</p></div><div class=\"tabs\" aria-label=\"Graph level\"><button class=\"level\" data-level=\"overview\" aria-pressed=\"true\">Overview</button><button class=\"level\" data-level=\"package\" aria-pressed=\"false\">Package</button><button class=\"level\" data-level=\"module\" aria-pressed=\"false\">Module</button><button class=\"level\" data-level=\"file\" aria-pressed=\"false\">File</button></div></div><div class=\"map-wrap\"><svg id=\"graph\" viewBox=\"0 0 1000 560\" role=\"img\" aria-label=\"Interactive architecture graph\"></svg></div><p class=\"subtle\">Node number = visible connection degree. Amber nodes/edges have findings. Click or focus a node to inspect its evidence. Grouped edges preserve canonical relation direction and count.</p></section><aside class=\"panel side\" aria-labelledby=\"details-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Evidence trail</div><h2 id=\"details-title\">Details</h2></div><button id=\"clear-selection\" class=\"tab\" type=\"button\">Clear</button></div><div id=\"details\"><p class=\"subtle\">Select a node in the map to inspect its evidence, connectivity, and findings.</p></div></aside></div><section class=\"panel run\" aria-labelledby=\"run-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Jest-like diagnostics</div><h2 id=\"run-title\">Run report</h2></div><span id=\"finding-count\" class=\"subtle\">${report.diagnostics.length} shown</span></div><div class=\"run-summary\"><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.severity === 'error').length}</b> errors</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.severity === 'warn').length}</b> warnings</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.status === 'undocumented').length}</b> undocumented</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.status === 'stale-or-unverified' || item.status === 'conflict').length}</b> drift/conflict</span></div><div id=\"findings\"></div></section><section class=\"panel run\" aria-labelledby=\"coverage-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Analyzer boundaries</div><h2 id=\"coverage-title\">Coverage &amp; unsupported areas</h2></div><span class=\"subtle\">Explicit limits are part of the evidence</span></div><div id=\"coverage-list\"></div></section><section class=\"metadata\" aria-label=\"Run metadata\"><div><b>Snapshot</b>${escapeHtml(snapshot.contentHash)}</div><div><b>Report</b>${escapeHtml(report.contentHash)}</div><div><b>Configuration</b>${escapeHtml(snapshot.configurationHash)}</div><div><b>Analyzers</b>${escapeHtml(Object.entries(snapshot.analyzerVersions).map(([name, version]) => `${name} ${version}`).join(', '))}</div><div><b>Source revision</b>${escapeHtml(snapshot.sourceRevision)} (${escapeHtml(snapshot.sourceRevisionKind)})</div><div><b>Mode</b>Read-only browser viewer; approvals and fixes remain outside this artifact.</div></section></main><script>${scriptBody}</script></body></html>`\n}\n\nexport const renderOfflineReport = (input: unknown, options: OfflineReportOptions = {}): string => {\n try {\n if (!input || typeof input !== 'object') throw new Error('Input must contain snapshot and report artifacts.')\n const value = input as Partial<OfflineReportInput>\n const snapshot = DiscoverySnapshotV1Schema.parse(value.snapshot)\n const report = ReconciliationReportV1Schema.parse(value.report)\n if (report.snapshotHash !== snapshot.contentHash) throw new Error('Report snapshotHash does not match snapshot contentHash.')\n return render({ snapshot, report }, options)\n } catch (error) {\n return errorPage(error instanceof Error ? error.message : String(error))\n }\n}\n","import { existsSync, readdirSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { basename, dirname, extname, join, relative, resolve, sep } from 'node:path'\n\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { FixProposalV1Schema, type FixProposalV1 } from '../schemas/knowledge.js'\nimport { containedPath } from '../safety/repository.js'\n\nexport type FixProposalOptions = {\n readonly baseRevision: string\n readonly configurationHash: string\n readonly projectName?: string\n readonly toolVersion?: string\n}\n\nexport type FixApplyOptions = {\n readonly currentRevision?: string\n readonly verify?: (changedPaths: readonly string[]) => void\n}\n\ntype FixChange = { readonly path: string; readonly before: string; readonly after: string }\n\nconst hash = (value: unknown): string => sha256NormalizedV1(value)\n\nconst artifactMetadata = (root: string, options: FixProposalOptions) => ({\n schemaVersion: 1 as const,\n contentHash: '0'.repeat(64),\n contentHashAlgo: 'sha256-normalized-v1' as const,\n project: { name: options.projectName ?? basename(resolve(root)), root: '.' },\n sourceRevision: options.baseRevision,\n sourceRevisionKind: options.baseRevision.length === 40 ? 'git' as const : 'content' as const,\n configurationHash: options.configurationHash,\n pipelineVersion: '1.0.0',\n analyzerVersions: { fixes: options.toolVersion ?? '1.0.0' },\n})\n\nconst unifiedDiff = (changes: readonly FixChange[]): string => changes.map((change) => {\n const before = change.before.split('\\n').map((line) => `-${line}`).join('\\n')\n const after = change.after.split('\\n').map((line) => `+${line}`).join('\\n')\n return `--- a/${change.path}\\n+++ b/${change.path}\\n@@\\n${before}\\n${after}`\n}).join('\\n')\n\nconst makeProposal = (root: string, options: FixProposalOptions, changes: readonly FixChange[], preconditions: readonly string[], postconditions: readonly string[]): FixProposalV1 => {\n const draft = {\n ...artifactMetadata(root, options),\n type: 'fix-proposal' as const,\n proposalId: `fix-${hash(changes).slice(0, 20)}`,\n baseRevision: options.baseRevision,\n affectedFiles: changes.map(({ path, before }) => ({ path, contentHash: sha256NormalizedV1(before) })),\n changes,\n preconditions,\n diff: unifiedDiff(changes),\n postconditions,\n status: 'proposed' as const,\n }\n return FixProposalV1Schema.parse({ ...draft, contentHash: contentHashForArtifactV1(draft) })\n}\n\nconst walkMarkdown = (root: string, directory = root): string[] => readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {\n if (entry.name === '.git' || entry.name === 'node_modules' || entry.name === 'dist' || entry.name === 'build') return []\n const path = join(directory, entry.name)\n if (entry.isDirectory()) return walkMarkdown(root, path)\n return entry.isFile() && ['.md', '.mdx'].includes(extname(entry.name).toLowerCase()) ? [relative(root, path).split(sep).join('/')] : []\n})\n\nconst localLink = /(!?)\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+[\"'][^)]*[\"'])?\\)/g\n\nconst sortJson = (value: unknown): unknown => Array.isArray(value)\n ? value.map(sortJson)\n : value && typeof value === 'object'\n ? Object.fromEntries(Object.entries(value as Record<string, unknown>).sort(([left], [right]) => left.localeCompare(right)).map(([key, item]) => [key, sortJson(item)]))\n : value\n\nexport const createMarkdownLinkFixProposal = (root: string, options: FixProposalOptions): FixProposalV1 | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const paths = walkMarkdown(projectRoot)\n const changes: FixChange[] = []\n for (const path of paths) {\n const content = readFileSync(join(projectRoot, path), 'utf8')\n let next = content\n for (const match of content.matchAll(localLink)) {\n const target = match[3]\n if (!target || match[1] === '!' || /^(?:[a-z]+:|\\/|#)/i.test(target)) continue\n const targetPath = target.split('#')[0]?.split('?')[0]\n if (!targetPath || existsSync(resolve(projectRoot, dirname(path), targetPath))) continue\n const targetStem = basename(targetPath, extname(targetPath)).toLowerCase()\n const labelStem = (match[2] ?? '').trim().toLowerCase().replace(/[^a-z0-9]+/g, '')\n const candidates = paths.filter((candidate) => basename(candidate, extname(candidate)).toLowerCase() === targetStem || basename(candidate, extname(candidate)).toLowerCase().replace(/[^a-z0-9]+/g, '') === labelStem)\n if (candidates.length !== 1) continue\n let replacement = relative(dirname(path), candidates[0]!).split(sep).join('/')\n if (target.startsWith('./') && !replacement.startsWith('.')) replacement = `./${replacement}`\n next = next.replace(match[0], match[0].replace(target, replacement))\n }\n if (next !== content) changes.push({ path, before: content, after: next })\n }\n return changes.length ? makeProposal(projectRoot, options, changes, ['Each replacement has exactly one Markdown target.'], ['All corrected local Markdown links resolve.']) : undefined\n}\n\nexport const createArtifactNormalizationProposal = (root: string, artifactPath: string, options: FixProposalOptions): FixProposalV1 | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const path = artifactPath.split(sep).join('/')\n const absolute = containedPath(projectRoot, path)\n if (!absolute || !existsSync(absolute) || !statSync(absolute).isFile()) return undefined\n const before = readFileSync(absolute, 'utf8')\n let after: string\n try { after = `${JSON.stringify(sortJson(JSON.parse(before) as unknown), null, 2)}\\n` } catch { return undefined }\n return after === before ? undefined : makeProposal(projectRoot, options, [{ path: relative(projectRoot, absolute).split(sep).join('/'), before, after }], ['The artifact contains valid JSON.'], ['The artifact is valid canonical JSON with one trailing newline.'])\n}\n\nexport const approveFixProposal = (proposalInput: unknown, approvedBy: string, approvedAt = new Date().toISOString()): FixProposalV1 => {\n const proposal = FixProposalV1Schema.parse(proposalInput)\n if (proposal.status !== 'proposed') throw new Error(`Only proposed fixes can be approved; received \"${proposal.status}\".`)\n const approved = { ...proposal, status: 'approved' as const, approval: { proposalHash: proposal.contentHash, approvedAt, approvedBy }, contentHash: '0'.repeat(64) }\n return FixProposalV1Schema.parse({ ...approved, contentHash: contentHashForArtifactV1(approved) })\n}\n\nconst bindingHash = (proposal: FixProposalV1): string => {\n const { approval: _approval, contentHash: _contentHash, status: _status, ...rest } = proposal\n return contentHashForArtifactV1({ ...rest, contentHash: '0'.repeat(64), status: 'proposed' as const })\n}\n\nexport const applyFixProposal = (root: string, proposalInput: unknown, options: FixApplyOptions = {}): FixProposalV1 => {\n const proposal = FixProposalV1Schema.parse(proposalInput)\n if (proposal.status !== 'approved' || !proposal.approval) throw new Error('Only an explicitly approved fix proposal can be applied.')\n if (proposal.approval.proposalHash !== bindingHash(proposal)) throw new Error('Approval is not bound to the exact proposal content.')\n if (options.currentRevision && options.currentRevision !== proposal.baseRevision) throw new Error('The repository revision changed since this proposal was created.')\n if (!proposal.changes?.length) throw new Error('This proposal has no executable changes.')\n\n const projectRoot = realpathSync.native(resolve(root))\n const originals = new Map<string, string>()\n const affected = new Map(proposal.affectedFiles.map((file) => [file.path, file]))\n if (proposal.changes.some((change) => !affected.has(change.path) || affected.get(change.path)?.contentHash !== sha256NormalizedV1(change.before)) || affected.size !== proposal.changes.length) {\n throw new Error('Proposal changes do not match its affected-file hashes.')\n }\n for (const file of proposal.affectedFiles) {\n const absolute = containedPath(projectRoot, file.path)\n if (!absolute || !existsSync(absolute)) throw new Error(`Affected file is unavailable or escapes the repository root: ${file.path}`)\n const current = readFileSync(absolute, 'utf8')\n if (sha256NormalizedV1(current) !== file.contentHash) throw new Error(`Affected file changed since proposal creation: ${file.path}`)\n originals.set(absolute, current)\n }\n\n try {\n for (const change of proposal.changes) {\n const absolute = resolve(projectRoot, change.path)\n writeFileSync(`${absolute}.docbridge-${process.pid}.tmp`, change.after, 'utf8')\n }\n for (const change of proposal.changes) {\n const absolute = resolve(projectRoot, change.path)\n renameSync(`${absolute}.docbridge-${process.pid}.tmp`, absolute)\n }\n for (const change of proposal.changes) {\n if (readFileSync(resolve(projectRoot, change.path), 'utf8') !== change.after) throw new Error(`Postcondition failed for ${change.path}`)\n }\n options.verify?.(proposal.changes.map((change) => change.path))\n } catch (error) {\n for (const [absolute, content] of originals) writeFileSync(absolute, content, 'utf8')\n for (const change of proposal.changes) {\n const temp = `${resolve(projectRoot, change.path)}.docbridge-${process.pid}.tmp`\n if (existsSync(temp)) unlinkSync(temp)\n }\n throw error\n }\n const applied = { ...proposal, status: 'applied' as const, contentHash: '0'.repeat(64) }\n return FixProposalV1Schema.parse({ ...applied, contentHash: contentHashForArtifactV1(applied) })\n}\n","import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve } from 'node:path'\n\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { WorkflowRunV1Schema, type WorkflowRunV1, type WorkflowState, type WorkflowStep } from '../schemas/knowledge.js'\n\nexport const WORKFLOW_STAGES = ['collect', 'normalize', 'reconcile', 'evaluate', 'report'] as const\nexport type WorkflowStage = (typeof WORKFLOW_STAGES)[number]\n\nexport type WorkflowStageContext = {\n readonly root: string\n readonly stage: WorkflowStage\n readonly input: unknown\n readonly previousOutput: unknown\n}\n\nexport type WorkflowStageHandler = (context: WorkflowStageContext) => unknown\n\nexport type WorkflowOptions = {\n readonly root: string\n readonly stateDir?: string\n readonly sourceRevision: string\n readonly configurationHash: string\n readonly toolVersion?: string\n readonly runId?: string\n readonly stage?: WorkflowStage | 'all'\n readonly inputs?: Partial<Record<WorkflowStage, unknown>>\n readonly handlers: Partial<Record<WorkflowStage, WorkflowStageHandler>>\n}\n\nexport type WorkflowExecutionResult = {\n readonly run: WorkflowRunV1\n readonly stateDir: string\n readonly reusedStages: readonly WorkflowStage[]\n}\n\ntype PersistedArtifact = {\n readonly type: 'workflow-step-artifact'\n readonly stage: WorkflowStage\n readonly inputHash: string\n readonly outputHash: string\n readonly value: unknown\n}\n\nconst stageState: Record<WorkflowStage, WorkflowState> = {\n collect: 'discovering',\n normalize: 'analyzed',\n reconcile: 'compared',\n evaluate: 'proposed',\n report: 'delivered',\n}\n\nconst defaultStateDir = (root: string): string => join(root, '.doc-bridge', 'workflow')\n\nconst atomicWrite = (path: string, value: unknown): void => {\n const temp = `${path}.tmp-${process.pid}-${Date.now()}`\n writeFileSync(temp, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n renameSync(temp, path)\n}\n\nconst writeManifest = (stateDir: string, run: WorkflowRunV1): void => {\n atomicWrite(join(stateDir, 'manifest.json'), run)\n}\n\nconst appendTransition = (stateDir: string, transition: WorkflowRunV1['transitions'][number]): void => {\n appendFileSync(join(stateDir, 'transitions.jsonl'), `${JSON.stringify(transition)}\\n`, 'utf8')\n}\n\nconst transition = (run: WorkflowRunV1, to: WorkflowState, reason?: string): WorkflowRunV1 => {\n const item = {\n from: run.state,\n to,\n at: new Date().toISOString(),\n ...(reason ? { reason } : {}),\n }\n return { ...run, state: to, transitions: [...run.transitions, item] }\n}\n\nconst runId = (): string => `${Date.now()}-${process.pid}`\n\nconst stageInputHash = (options: WorkflowOptions, stage: WorkflowStage, input: unknown): string =>\n sha256NormalizedV1({ stage, input, sourceRevision: options.sourceRevision, configurationHash: options.configurationHash, toolVersion: options.toolVersion ?? '1.0.0' })\n\nconst stageArtifactPath = (stateDir: string, stage: WorkflowStage, inputHash: string): string => join(stateDir, 'artifacts', `${stage}-${inputHash}.json`)\n\nconst readArtifact = (path: string): PersistedArtifact => JSON.parse(readFileSync(path, 'utf8')) as PersistedArtifact\n\nconst stepArtifactPath = (stateDir: string, step: WorkflowStep): string => resolve(stateDir, step.artifactRefs?.[0] ?? '')\n\nconst stepOutput = (stateDir: string, run: WorkflowRunV1, stage: WorkflowStage): unknown => {\n const step = run.steps.find((item) => item.name === stage)\n if (!step || step.status !== 'completed' || !step.artifactRefs?.[0]) return null\n return readArtifact(stepArtifactPath(stateDir, step)).value\n}\n\nconst acquireLock = (stateDir: string): (() => void) => {\n const lock = join(stateDir, '.lock')\n try {\n mkdirSync(lock)\n } catch {\n const ownerPath = join(lock, 'owner.json')\n try {\n const owner = JSON.parse(readFileSync(ownerPath, 'utf8')) as { pid?: number }\n if (typeof owner.pid === 'number') process.kill(owner.pid, 0)\n throw new Error(`Workflow is already running (pid ${owner.pid ?? 'unknown'}).`)\n } catch (error) {\n if (error instanceof Error && error.message.startsWith('Workflow is already running')) throw error\n rmSync(lock, { recursive: true, force: true })\n mkdirSync(lock)\n }\n }\n writeFileSync(join(lock, 'owner.json'), JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() }), 'utf8')\n return () => rmSync(lock, { recursive: true, force: true })\n}\n\nconst loadManifest = (stateDir: string): WorkflowRunV1 | undefined => {\n const path = join(stateDir, 'manifest.json')\n if (!existsSync(path)) return undefined\n return WorkflowRunV1Schema.parse(JSON.parse(readFileSync(path, 'utf8')) as unknown)\n}\n\nconst baseRun = (options: WorkflowOptions, stateDir: string, supersedes?: string): WorkflowRunV1 => {\n const inputHash = sha256NormalizedV1({ sourceRevision: options.sourceRevision, configurationHash: options.configurationHash, toolVersion: options.toolVersion ?? '1.0.0' })\n return WorkflowRunV1Schema.parse({\n type: 'workflow-run',\n schemaVersion: 1,\n contentHash: '0'.repeat(64),\n contentHashAlgo: 'sha256-normalized-v1',\n project: { name: resolve(options.root).split('/').pop() ?? 'project', root: '.' },\n sourceRevision: options.sourceRevision,\n sourceRevisionKind: 'content',\n configurationHash: options.configurationHash,\n pipelineVersion: '1.0.0',\n analyzerVersions: { workflow: options.toolVersion ?? '1.0.0' },\n runId: options.runId ?? runId(),\n state: 'created',\n steps: WORKFLOW_STAGES.map((name) => ({ name, status: 'pending', inputHash })) as WorkflowStep[],\n transitions: [{ from: null, to: 'created', at: new Date().toISOString() }],\n artifactRefs: [relative(resolve(options.root), stateDir), ...(supersedes ? [`supersedes:${supersedes}`] : [])],\n })\n}\n\nconst withHash = (run: WorkflowRunV1): WorkflowRunV1 => WorkflowRunV1Schema.parse({ ...run, contentHash: contentHashForArtifactV1(run) })\n\nconst sameInputs = (run: WorkflowRunV1, options: WorkflowOptions): boolean =>\n run.sourceRevision === options.sourceRevision &&\n run.configurationHash === options.configurationHash &&\n run.analyzerVersions.workflow === (options.toolVersion ?? '1.0.0')\n\nconst selectedStages = (stage: WorkflowOptions['stage']): readonly WorkflowStage[] =>\n stage && stage !== 'all' ? [stage] : WORKFLOW_STAGES\n\nexport const runWorkflow = (options: WorkflowOptions): WorkflowExecutionResult => {\n const root = resolve(options.root)\n const stateDir = resolve(root, options.stateDir ?? defaultStateDir(root))\n mkdirSync(join(stateDir, 'artifacts'), { recursive: true })\n const release = acquireLock(stateDir)\n try {\n let run = loadManifest(stateDir)\n let supersedes: string | undefined\n if (run && !sameInputs(run, options)) {\n supersedes = run.runId\n run = withHash(transition(run, 'stale', 'Source revision, configuration hash, or tool version changed.'))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n writeManifest(stateDir, run)\n run = undefined\n }\n if (!run) {\n run = withHash(baseRun(options, stateDir, supersedes))\n appendTransition(stateDir, run.transitions[0]!)\n writeManifest(stateDir, run)\n }\n\n if (!run) throw new Error('Workflow manifest was not initialized.')\n const firstSelectedStage = selectedStages(options.stage)[0]\n const previousStageIndex = firstSelectedStage ? WORKFLOW_STAGES.indexOf(firstSelectedStage) - 1 : -1\n let previousOutput: unknown = previousStageIndex >= 0 ? stepOutput(stateDir, run, WORKFLOW_STAGES[previousStageIndex]!) : null\n const reusedStages: WorkflowStage[] = []\n for (const stage of selectedStages(options.stage)) {\n const input = options.inputs?.[stage] ?? previousOutput\n const inputHash = stageInputHash(options, stage, input)\n const existing = run.steps.find((step) => step.name === stage)\n const artifactPath = existing?.artifactRefs?.[0] ? resolve(stateDir, existing.artifactRefs[0]) : stageArtifactPath(stateDir, stage, inputHash)\n if (existing?.status === 'completed' && existing.inputHash === inputHash && existing.outputHash && existsSync(artifactPath)) {\n previousOutput = readArtifact(artifactPath).value\n reusedStages.push(stage)\n continue\n }\n\n const handler = options.handlers[stage]\n if (!handler) throw new Error(`No handler configured for workflow stage \"${stage}\".`)\n run = withHash(transition(run, stageState[stage]))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n const runningStep: WorkflowStep = { name: stage, status: 'running', inputHash }\n run = withHash({ ...run, steps: run.steps.map((step) => step.name === stage ? runningStep : step) })\n writeManifest(stateDir, run)\n try {\n const value = handler({ root, stage, input, previousOutput })\n const outputHash = sha256NormalizedV1(value)\n const artifact: PersistedArtifact = { type: 'workflow-step-artifact', stage, inputHash, outputHash, value }\n mkdirSync(join(stateDir, 'artifacts'), { recursive: true })\n if (existsSync(artifactPath)) {\n const existingArtifact = readArtifact(artifactPath)\n if (existingArtifact.outputHash !== outputHash) throw new Error(`Immutable workflow artifact collision for stage \"${stage}\".`)\n } else {\n atomicWrite(artifactPath, artifact)\n }\n const ref = relative(stateDir, artifactPath)\n const completedStep: WorkflowStep = { name: stage, status: 'completed', inputHash, outputHash, artifactRefs: [ref] }\n run = withHash({ ...run, steps: run.steps.map((step) => step.name === stage ? completedStep : step) })\n writeManifest(stateDir, run)\n previousOutput = value\n } catch (error) {\n run = withHash(transition(run, 'failed', error instanceof Error ? error.message : String(error)))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n writeManifest(stateDir, run)\n throw error\n }\n }\n\n if (selectedStages(options.stage).every((stage) => run!.steps.find((step) => step.name === stage)?.status === 'completed')) {\n const complete = selectedStages(options.stage).includes('report') && run.state !== 'delivered' ? withHash(transition(run, 'delivered')) : run\n if (complete !== run) {\n appendTransition(stateDir, complete.transitions[complete.transitions.length - 1]!)\n run = complete\n }\n writeManifest(stateDir, run)\n if (run.state === 'delivered') atomicWrite(join(stateDir, 'last-known-good.json'), { runId: run.runId, manifestHash: run.contentHash, report: run.steps.find((step) => step.name === 'report')?.artifactRefs?.[0] })\n }\n return { run, stateDir, reusedStages }\n } finally {\n release()\n }\n}\n\nexport const loadWorkflowManifest = (stateDir: string): WorkflowRunV1 => WorkflowRunV1Schema.parse(JSON.parse(readFileSync(join(resolve(stateDir), 'manifest.json'), 'utf8')) as unknown)\n\nexport const loadWorkflowStepOutput = (stateDir: string, stage: WorkflowStage): unknown => stepOutput(resolve(stateDir), loadWorkflowManifest(stateDir), stage)\n","import { minimatch } from 'minimatch'\n\nimport {\n RuleIdSchema,\n RuleSeveritySchema,\n RulesConfigSchema,\n type RuleId,\n type RuleSeverity,\n type RulesConfig,\n} from '../config/schema.js'\nimport type { ReconciliationReportV1 } from '../schemas/knowledge.js'\n\nexport type RuleMode = 'default' | 'recommended' | 'strict'\n\nexport type RuleEngineOptions = {\n readonly config?: RulesConfig\n readonly preset?: RuleMode\n readonly severity?: Partial<Record<RuleId, RuleSeverity>>\n readonly ignore?: readonly RuleId[]\n readonly criticalEntities?: readonly string[]\n readonly criticalPaths?: readonly string[]\n readonly warningThresholds?: Partial<Record<RuleId, number>>\n}\n\nexport type RuleFinding = {\n readonly id: string\n readonly ruleId: RuleId\n readonly code: string\n readonly status: ReconciliationReportV1['diagnostics'][number]['status']\n readonly severity: RuleSeverity\n readonly message: string\n readonly evidence: ReconciliationReportV1['diagnostics'][number]['evidence']\n readonly entityIds?: readonly string[]\n readonly relationIds?: readonly string[]\n readonly remediation?: string\n readonly sourceDiagnosticCode?: string\n}\n\nexport type RuleEvaluationResult = {\n readonly mode: RuleMode\n readonly findings: readonly RuleFinding[]\n readonly exitCode: 0 | 1\n}\n\nconst diagnosticRules: Readonly<Record<string, RuleId>> = {\n DOCUMENTATION_QUALITY: 'documentation-quality',\n RELATION_UNDOCUMENTED: 'graph-undocumented-relation',\n DECLARED_RELATION_STALE: 'declared-unobserved-relation',\n UNRESOLVED_ENTITY_REFERENCE: 'unresolved-reference',\n CONFLICTING_DECLARATIONS: 'conflicting-declaration',\n RELATION_NOT_ANALYZED: 'not-analyzed-coverage',\n STALE_DOCUMENTATION: 'stale-documentation',\n FRESHNESS_FAILURE: 'freshness',\n OWNERSHIP_GAP: 'ownership',\n CENTRALITY_RISK: 'centrality-risk',\n CRITICAL_PATH_RISK: 'critical-path-risk',\n}\n\nconst defaultSeverity = (mode: RuleMode, ruleId: RuleId): RuleSeverity => {\n if (mode === 'default') return 'info'\n if (mode === 'strict') return ruleId === 'not-analyzed-coverage' ? 'warn' : 'error'\n return ruleId === 'not-analyzed-coverage' ? 'info' : 'warn'\n}\n\nconst resolvedOptions = (options: RuleEngineOptions): {\n readonly mode: RuleMode\n readonly severity: Partial<Record<RuleId, RuleSeverity>>\n readonly ignore: ReadonlySet<RuleId>\n readonly criticalEntities: readonly string[]\n readonly criticalPaths: readonly string[]\n readonly warningThresholds: Partial<Record<RuleId, number>>\n} => {\n const config = RulesConfigSchema.parse(options.config ?? {})\n const mode = options.preset ?? config.mode ?? 'default'\n const severity = { ...config.severity, ...options.severity }\n const ignore = new Set<RuleId>([...(config.ignore ?? []), ...(options.ignore ?? [])])\n return {\n mode,\n severity,\n ignore,\n criticalEntities: options.criticalEntities ?? config.criticalEntities ?? [],\n criticalPaths: options.criticalPaths ?? config.criticalPaths ?? [],\n warningThresholds: { ...config.warningThresholds, ...options.warningThresholds },\n }\n}\n\nconst severityFor = (\n ruleId: RuleId,\n mode: RuleMode,\n overrides: Partial<Record<RuleId, RuleSeverity>>,\n): RuleSeverity => overrides[ruleId] ?? defaultSeverity(mode, ruleId)\n\nconst findingFromDiagnostic = (\n diagnostic: ReconciliationReportV1['diagnostics'][number],\n ruleId: RuleId,\n severity: RuleSeverity,\n): RuleFinding => ({\n id: `${diagnostic.id}:${ruleId}`,\n ruleId,\n code: ruleId,\n status: diagnostic.status,\n severity,\n message: diagnostic.message,\n evidence: diagnostic.evidence,\n ...(diagnostic.entityIds ? { entityIds: diagnostic.entityIds } : {}),\n ...(diagnostic.relationIds ? { relationIds: diagnostic.relationIds } : {}),\n ...(diagnostic.remediation ? { remediation: diagnostic.remediation } : {}),\n sourceDiagnosticCode: diagnostic.code,\n})\n\nconst criticalFinding = (\n finding: RuleFinding,\n severity: RuleSeverity,\n target: string,\n): RuleFinding => ({\n ...finding,\n id: `${finding.id}:critical:${target}`,\n ruleId: 'critical-path-risk',\n code: 'critical-path-risk',\n severity,\n message: `Critical path or entity is affected: ${target}. ${finding.message}`,\n})\n\nexport const evaluateRules = (\n report: ReconciliationReportV1,\n options: RuleEngineOptions = {},\n): RuleEvaluationResult => {\n const resolved = resolvedOptions(options)\n const findings: RuleFinding[] = []\n\n for (const diagnostic of [...report.diagnostics].sort((a, b) => a.id.localeCompare(b.id))) {\n const ruleId = diagnosticRules[diagnostic.code]\n if (!ruleId || resolved.ignore.has(ruleId)) continue\n const severity = severityFor(ruleId, resolved.mode, resolved.severity)\n if (severity !== 'off') findings.push(findingFromDiagnostic(diagnostic, ruleId, severity))\n }\n\n const criticalSeverity = severityFor('critical-path-risk', resolved.mode, resolved.severity)\n const criticalEntitySet = new Set(resolved.criticalEntities)\n for (const finding of [...findings]) {\n const matchingEntity = (finding.entityIds ?? []).find((id) => criticalEntitySet.has(id))\n if (matchingEntity && !resolved.ignore.has('critical-path-risk') && criticalSeverity !== 'off') {\n findings.push(criticalFinding(finding, criticalSeverity, matchingEntity))\n }\n for (const path of resolved.criticalPaths) {\n if (finding.evidence.some((item) => minimatch(item.path, path, { dot: true })) && !resolved.ignore.has('critical-path-risk') && criticalSeverity !== 'off') {\n findings.push(criticalFinding(finding, criticalSeverity, path))\n }\n }\n }\n\n const centralityThreshold = resolved.warningThresholds['centrality-risk'] ?? 3\n const centralitySeverity = severityFor('centrality-risk', resolved.mode, resolved.severity)\n if (!resolved.ignore.has('centrality-risk') && centralitySeverity !== 'off') {\n const counts = new Map<string, number>()\n for (const finding of findings.filter((item) => item.ruleId === 'graph-undocumented-relation')) {\n for (const entityId of finding.entityIds ?? []) counts.set(entityId, (counts.get(entityId) ?? 0) + 1)\n }\n for (const [entityId, count] of [...counts.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n if (count < centralityThreshold || !criticalEntitySet.has(entityId)) continue\n findings.push({\n id: `centrality-risk:${entityId}`,\n ruleId: 'centrality-risk',\n code: 'centrality-risk',\n status: 'unresolved',\n severity: centralitySeverity,\n message: `Critical entity has ${count} undocumented relation finding(s); static centrality is a review signal, not a runtime availability claim.`,\n evidence: findings.filter((item) => item.ruleId === 'graph-undocumented-relation' && item.entityIds?.includes(entityId)).flatMap((item) => item.evidence),\n entityIds: [entityId],\n remediation: 'Review ownership, dependency boundaries, and runtime availability before declaring an SPOF.',\n })\n }\n }\n\n const sortedFindings = [...findings].sort((a, b) => a.id.localeCompare(b.id))\n return { mode: resolved.mode, findings: sortedFindings, exitCode: sortedFindings.some((finding) => finding.severity === 'error') ? 1 : 0 }\n}\n\nexport const parseRuleId = (value: string): RuleId => RuleIdSchema.parse(value)\nexport const parseRuleSeverity = (value: string): RuleSeverity => RuleSeveritySchema.parse(value)\n","/**\n * Canonical AgentsKit ecosystem section for llms.txt (and similar machine indexes).\n *\n * All products should render this block with the same heading and line shape so\n * agents can parse the seven-product mesh without per-repo inventiveness.\n */\n\nexport type EcosystemLlmsProduct = {\n readonly id: string\n readonly name: string\n readonly role?: string\n readonly promise: string\n readonly maturity?: string\n readonly surfaces: {\n readonly home?: string\n readonly docs?: string\n readonly llms?: string\n }\n}\n\nexport type FormatEcosystemLlmsBlockOptions = {\n readonly products: readonly EcosystemLlmsProduct[]\n /** When set, marks this product with **(current)**. */\n readonly currentProductId?: string\n /** Heading line without leading hashes — default `AgentsKit ecosystem`. */\n readonly heading?: string\n /**\n * Prefer docs URL when available; otherwise home.\n * Default: home, falling back to docs.\n */\n readonly prefer?: 'home' | 'docs'\n}\n\n/**\n * Returns markdown lines for the shared ecosystem block, including a trailing blank line.\n */\nexport function formatEcosystemLlmsBlock(options: FormatEcosystemLlmsBlockOptions): string[] {\n const heading = options.heading ?? 'AgentsKit ecosystem'\n const prefer = options.prefer ?? 'home'\n const lines: string[] = [`## ${heading}`, '']\n\n for (const product of options.products) {\n const primary =\n prefer === 'docs'\n ? product.surfaces.docs ?? product.surfaces.home\n : product.surfaces.home ?? product.surfaces.docs\n if (!primary) continue\n\n const current = product.id === options.currentProductId ? ' **(current)**' : ''\n const role = product.role ? ` Role: \\`${product.role}\\`.` : ''\n const maturity = product.maturity ? ` Maturity: ${product.maturity}.` : ''\n const machine = product.surfaces.llms ? ` Machine index: ${product.surfaces.llms}` : ''\n const promise = product.promise.trim()\n const promiseSentence = /[.!?]$/.test(promise) ? promise : `${promise}.`\n lines.push(\n `- [${product.name}](${primary})${current} — ${promiseSentence}${role}${maturity}${machine}`,\n )\n }\n\n lines.push('')\n return lines\n}\n\n/** Join the block into a single string ending with a newline. */\nexport function formatEcosystemLlmsSection(options: FormatEcosystemLlmsBlockOptions): string {\n return `${formatEcosystemLlmsBlock(options).join('\\n')}\\n`\n}\n","import { readFileSync } from 'node:fs'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n runDocumentationStandardV1,\n type DocumentationConformanceReportV1,\n} from '../conformance/documentation-standard-v1.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 =\n | 'index-freshness'\n | 'human-guide-links'\n | 'okf-type'\n | 'docs-style'\n | 'documentation-standard-v1'\n\nconst RESERVED_GATE_IDS = new Set(['link-rot', 'routing-currency', 'bootstrap-size'])\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 readonly details?: DocumentationConformanceReportV1\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 === 'documentation-standard-v1') {\n const details = runDocumentationStandardV1(root, config)\n return {\n id,\n ok: details.ok,\n message: details.ok\n ? 'Documentation Standard v1 required rules pass'\n : `${details.summary.required.failed} Documentation Standard v1 required rule(s) failed`,\n expected: 'all required rules pass or have approved exceptions',\n actual: `${details.summary.required.passed} passed, ${details.summary.required.failed} failed, ${details.summary.required.excepted} excepted`,\n details,\n }\n }\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 (RESERVED_GATE_IDS.has(id)) {\n process.emitWarning(`Gate \"${id}\" is reserved and has no runtime implementation; it was not executed.`, {\n code: 'AK_DOCS_RESERVED_GATE',\n })\n continue\n }\n ids.add(id as GateId)\n }\n for (const id of config.gates?.exclude ?? []) {\n if (!RESERVED_GATE_IDS.has(id)) ids.delete(id as GateId)\n }\n\n return [...ids]\n}\n","import { existsSync, readFileSync, realpathSync, statSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type {\n DocBridgeConfigV1,\n DocumentationStandardRuleId,\n DocumentationStandardV1Config,\n} from '../config/schema.js'\nimport { parseCanonicalEcosystemContract } from './ecosystem-contract.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { renderLlmsTxt } from '../index-builder/llms-txt.js'\nimport { toPosix } from '../lib/paths.js'\n\nexport const DOCUMENTATION_STANDARD_V1_ID = 'documentation-standard-v1' as const\nexport const DOCUMENTATION_STANDARD_V1_STATUS = 'stable' as const\n\nconst MAX_TEXT_EVIDENCE_BYTES = 4 * 1_024 * 1_024\n\nexport type { DocumentationStandardRuleId } from '../config/schema.js'\n\nexport type DocumentationStandardRuleLevel = 'required' | 'recommended'\nexport type DocumentationStandardRuleStatus = 'pass' | 'fail' | 'excepted'\n\nexport type DocumentationStandardEvidence = {\n readonly path: string\n readonly detail: string\n}\n\nexport type DocumentationStandardRemediation = {\n readonly command: string\n readonly detail: string\n}\n\nexport type DocumentationStandardRuleResult = {\n readonly id: DocumentationStandardRuleId\n readonly level: DocumentationStandardRuleLevel\n readonly status: DocumentationStandardRuleStatus\n readonly ok: boolean\n readonly message: string\n readonly evidence: readonly DocumentationStandardEvidence[]\n readonly remediation: DocumentationStandardRemediation\n readonly exception?: {\n readonly reason: string\n readonly approvedBy: string\n readonly trackingUrl: string\n }\n}\n\nexport type DocumentationConformanceReportV1 = {\n readonly schemaVersion: 1\n readonly profile: {\n readonly id: typeof DOCUMENTATION_STANDARD_V1_ID\n readonly version: 1\n readonly status: typeof DOCUMENTATION_STANDARD_V1_STATUS\n }\n readonly ok: boolean\n readonly recommendedOk: boolean\n readonly summary: {\n readonly required: { readonly passed: number; readonly failed: number; readonly excepted: number }\n readonly recommended: { readonly passed: number; readonly failed: number; readonly excepted: number }\n }\n readonly results: readonly DocumentationStandardRuleResult[]\n}\n\ntype RuleDraft = Omit<DocumentationStandardRuleResult, 'status' | 'ok' | 'exception'> & {\n readonly passed: boolean\n}\n\nconst safePath = (root: string, path: string): string | undefined => {\n const rootAbs = realpathSync.native(resolve(root))\n const unresolved = resolve(rootAbs, path)\n const unresolvedRel = relative(rootAbs, unresolved)\n if (isAbsolute(unresolvedRel) || unresolvedRel === '..' || unresolvedRel.startsWith(`..${sep}`)) return undefined\n if (!existsSync(unresolved)) return unresolved\n try {\n const abs = realpathSync.native(unresolved)\n const rel = relative(rootAbs, abs)\n return !isAbsolute(rel) && rel !== '..' && !rel.startsWith(`..${sep}`) ? abs : undefined\n } catch {\n return undefined\n }\n}\n\nconst fileEvidence = (\n root: string,\n path: string,\n options?: { readonly readContent?: boolean },\n): { readonly exists: boolean; readonly content: string; readonly evidence: DocumentationStandardEvidence } => {\n const abs = safePath(root, path)\n if (!abs) {\n return {\n exists: false,\n content: '',\n evidence: { path, detail: 'Path escapes the project root.' },\n }\n }\n if (!existsSync(abs)) {\n return { exists: false, content: '', evidence: { path, detail: 'File does not exist.' } }\n }\n try {\n const stat = statSync(abs)\n if (!stat.isFile()) {\n return { exists: false, content: '', evidence: { path, detail: 'Path is not a regular file.' } }\n }\n if (stat.size === 0) {\n return { exists: false, content: '', evidence: { path, detail: 'File is empty.' } }\n }\n if (options?.readContent === false) {\n return {\n exists: true,\n content: '',\n evidence: { path: toPosix(relative(resolve(root), abs)) || '.', detail: 'File exists and is non-empty.' },\n }\n }\n if (stat.size > MAX_TEXT_EVIDENCE_BYTES) {\n return {\n exists: false,\n content: '',\n evidence: { path, detail: `Text evidence exceeds ${MAX_TEXT_EVIDENCE_BYTES} bytes.` },\n }\n }\n const content = readFileSync(abs, 'utf8')\n return {\n exists: content.trim().length > 0,\n content,\n evidence: {\n path: toPosix(relative(resolve(root), abs)) || '.',\n detail: content.trim().length > 0 ? 'File exists and is non-empty.' : 'File is empty.',\n },\n }\n } catch {\n return { exists: false, content: '', evidence: { path, detail: 'File is not readable text.' } }\n }\n}\n\nconst resultWithException = (\n draft: RuleDraft,\n options: DocumentationStandardV1Config,\n): DocumentationStandardRuleResult => {\n if (draft.passed) {\n const { passed: _passed, ...result } = draft\n return { ...result, status: 'pass', ok: true }\n }\n\n const exception = options.exceptions?.find((candidate) => candidate.ruleId === draft.id)\n const { passed: _passed, ...result } = draft\n if (!exception) return { ...result, status: 'fail', ok: false }\n return {\n ...result,\n status: 'excepted',\n ok: true,\n exception: {\n reason: exception.reason,\n approvedBy: exception.approvedBy,\n trackingUrl: exception.trackingUrl,\n },\n }\n}\n\nconst humanDocsRule = (root: string, config: DocBridgeConfigV1): RuleDraft => {\n const docs = scanHumanDocRecords(root, config)\n return {\n id: 'human-docs',\n level: 'required',\n passed: docs.length > 0,\n message: docs.length > 0 ? `Found ${docs.length} human document(s).` : 'No human documentation was discovered.',\n evidence: docs.slice(0, 10).map((doc) => ({\n path: toPosix(relative(resolve(root), doc.path)),\n detail: `Human route: ${doc.url}`,\n })),\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: 'Configure corpus.human with a supported adapter and a non-agent documentation root.',\n },\n }\n}\n\nconst llmsRule = (\n root: string,\n config: DocBridgeConfigV1,\n options: DocumentationStandardV1Config,\n): RuleDraft => {\n const llmsPath = config.index?.llmsTxt?.outFile ?? 'llms.txt'\n const llmsKey = safePath(root, llmsPath) ?? resolve(root, llmsPath)\n const rawSources = new Map<string, string>()\n for (const path of options.rawSources ?? []) {\n const key = safePath(root, path) ?? resolve(root, path)\n if (key !== llmsKey && !rawSources.has(key)) rawSources.set(key, path)\n }\n const paths = [llmsPath, ...rawSources.values()]\n const evidence = paths.map((path) => fileEvidence(root, path))\n const generated = buildDocBridgeIndex({ root, config, write: false }).index\n const expectedLlms = renderLlmsTxt(config, generated.knowledge, generated.project?.name ?? 'project')\n const llmsIsFresh = evidence[0]?.content === expectedLlms\n if (evidence[0]?.exists) {\n evidence[0] = {\n ...evidence[0],\n evidence: {\n ...evidence[0].evidence,\n detail: llmsIsFresh\n ? 'File matches the deterministic ak-docs output.'\n : 'File is stale or was not generated by the current ak-docs inputs.',\n },\n }\n }\n const passed =\n config.index?.llmsTxt?.enabled !== false &&\n paths.length > 1 &&\n llmsIsFresh &&\n evidence.every((item) => item.exists)\n return {\n id: 'llms-and-raw-source',\n level: 'required',\n passed,\n message: passed\n ? `Resolved llms.txt and ${paths.length - 1} raw source(s).`\n : 'llms.txt must be enabled, current, and accompanied by at least one readable raw source.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'ak-docs index',\n detail: 'Generate llms.txt and configure conformance.documentationStandardV1.rawSources.',\n },\n }\n}\n\nconst normalizedUrl = (value: string): string => value.replace(/\\/$/, '')\n\nconst ecosystemContract = (\n root: string,\n options: DocumentationStandardV1Config,\n): {\n readonly passed: boolean\n readonly urls: ReadonlySet<string>\n readonly evidence: readonly DocumentationStandardEvidence[]\n} => {\n const declaration = options.ecosystemContract\n if (!declaration) {\n return {\n passed: false,\n urls: new Set(),\n evidence: [{ path: 'doc-bridge.config.json', detail: 'Canonical ecosystem contract evidence is not declared.' }],\n }\n }\n\n const manifestFile = fileEvidence(root, declaration.manifest)\n const claimsFile = fileEvidence(root, declaration.claims)\n const evidence: DocumentationStandardEvidence[] = [manifestFile.evidence, claimsFile.evidence]\n if (!manifestFile.exists || !claimsFile.exists) return { passed: false, urls: new Set(), evidence }\n\n try {\n const manifest: unknown = JSON.parse(manifestFile.content)\n const claims: unknown = JSON.parse(claimsFile.content)\n const contract = parseCanonicalEcosystemContract(manifest, claims)\n const productIds = contract.manifest.products.map((product) => product.id)\n if (!productIds.includes(declaration.productId)) throw new Error(`Manifest is missing product ${declaration.productId}.`)\n\n const urls = new Set<string>()\n for (const product of contract.manifest.products) {\n for (const value of [\n product.surfaces.home,\n product.surfaces.docs,\n product.surfaces.llms,\n product.surfaces.stats,\n ]) {\n if (typeof value === 'string' && /^https:\\/\\//.test(value)) urls.add(normalizedUrl(value))\n }\n }\n evidence[0] = { path: declaration.manifest, detail: `Validated ${productIds.length} canonical product(s), including ${declaration.productId}.` }\n evidence[1] = { path: declaration.claims, detail: `Validated claim-ledger identity for ${contract.claims.products.length} product(s).` }\n return { passed: urls.size > 0, urls, evidence }\n } catch (error) {\n evidence.push({\n path: `${declaration.manifest}, ${declaration.claims}`,\n detail: error instanceof Error ? error.message : 'Canonical ecosystem contract is invalid.',\n })\n return { passed: false, urls: new Set(), evidence }\n }\n}\n\nconst handoffsRule = (root: string, config: DocBridgeConfigV1): RuleDraft => {\n const index = buildDocBridgeIndex({ root, config, write: false }).index\n const handoffs = Object.values(index.handoffs ?? {})\n const ready = handoffs.filter(\n (handoff) =>\n handoff.startHere.length > 0 &&\n handoff.editRoots.length > 0 &&\n handoff.checks.length > 0 &&\n (handoff.bridge?.humanDoc === 'linked' || handoff.bridge?.humanDoc === 'external'),\n )\n return {\n id: 'agent-handoffs',\n level: 'required',\n passed: ready.length > 0 && ready.length === handoffs.length,\n message:\n ready.length > 0 && ready.length === handoffs.length\n ? `${ready.length} handoff(s) are action-ready and human-linked.`\n : `${ready.length}/${handoffs.length} handoff(s) are action-ready and human-linked.`,\n evidence: handoffs.map((handoff) => ({\n path: handoff.startHere,\n detail: `${handoff.target.id}: ${handoff.editRoots.length} edit root(s), ${handoff.checks.length} check(s), bridge=${handoff.bridge?.humanDoc ?? 'none'}`,\n })),\n remediation: {\n command: 'ak-docs bootstrap agent-docs && ak-docs index',\n detail: 'Add ownership checks and a resolvable humanDoc for every handoff.',\n },\n }\n}\n\nconst contributionRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const paths = options.contributionPaths?.length ? options.contributionPaths : ['CONTRIBUTING.md']\n const evidence = paths.map((path) => fileEvidence(root, path))\n return {\n id: 'contribution',\n level: 'required',\n passed: evidence.some((item) => item.exists),\n message: evidence.some((item) => item.exists) ? 'Contribution guidance is available.' : 'Contribution guidance is missing.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'edit CONTRIBUTING.md',\n detail: 'Document setup, validation commands, and the pull-request workflow.',\n },\n }\n}\n\nconst markersRule = (\n root: string,\n options: DocumentationStandardV1Config,\n kind: 'metadata' | 'structured-diagrams',\n level: DocumentationStandardRuleLevel,\n): RuleDraft => {\n const declarations = options[kind === 'metadata' ? 'metadata' : 'diagrams'] ?? []\n const evidence: DocumentationStandardEvidence[] = []\n let passed = declarations.length > 0\n for (const declaration of declarations) {\n const file = fileEvidence(root, declaration.path)\n const missing = declaration.contains.filter((marker) => !file.content.includes(marker))\n if (!file.exists || missing.length > 0) passed = false\n evidence.push({\n path: declaration.path,\n detail: !file.exists\n ? file.evidence.detail\n : missing.length\n ? `Missing marker(s): ${missing.join(', ')}`\n : `Found marker(s): ${declaration.contains.join(', ')}`,\n })\n }\n return {\n id: kind,\n level,\n passed,\n message: passed ? `${kind} evidence is complete.` : `${kind} evidence is incomplete.`,\n evidence,\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: `Declare ${kind} evidence paths and markers that exist in the repository.`,\n },\n }\n}\n\nconst linksRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const links = options.links ?? []\n const contract = ecosystemContract(root, options)\n const evidence: DocumentationStandardEvidence[] = [...contract.evidence]\n let passed = links.length > 0 && contract.passed\n for (const link of links) {\n const sources = link.paths.map((path) => ({ path, file: fileEvidence(root, path) }))\n const matches = sources.filter(({ file }) => file.exists && file.content.includes(link.url))\n const canonical = contract.urls.has(normalizedUrl(link.url))\n if (matches.length === 0 || !canonical) passed = false\n evidence.push({\n path: sources.map((source) => source.path).join(', '),\n detail:\n matches.length === 0\n ? `Missing ${link.url}`\n : canonical\n ? `Found canonical ecosystem URL ${link.url}`\n : `Found ${link.url}, but it is absent from the canonical ecosystem manifest.`,\n })\n }\n return {\n id: 'cross-links',\n level: 'required',\n passed,\n message: passed ? `${links.length} required ecosystem link(s) resolve in source.` : 'One or more required ecosystem links are missing from source.',\n evidence,\n remediation: {\n command: 'edit README.md',\n detail: 'Sync the canonical ecosystem snapshots and add each configured canonical URL to a declared documentation source.',\n },\n }\n}\n\nconst quickstartsRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const quickstarts = options.quickstarts ?? []\n const evidence: DocumentationStandardEvidence[] = []\n let passed = quickstarts.length > 0\n for (const quickstart of quickstarts) {\n const doc = fileEvidence(root, quickstart.doc)\n const test = fileEvidence(root, quickstart.test)\n const missingMarkers = quickstart.testContains.filter((marker) => !test.content.includes(marker))\n if (!doc.exists || !test.exists || missingMarkers.length > 0 || !quickstart.command.trim()) passed = false\n evidence.push(\n { path: quickstart.doc, detail: `${quickstart.id}: ${doc.evidence.detail}` },\n {\n path: quickstart.test,\n detail: missingMarkers.length\n ? `${quickstart.id}: missing test marker(s): ${missingMarkers.join(', ')}`\n : `${quickstart.id}: test evidence; CI command: ${quickstart.command}`,\n },\n )\n }\n return {\n id: 'tested-quickstarts',\n level: 'required',\n passed,\n message: passed ? `${quickstarts.length} quickstart(s) have executable test evidence.` : 'Quickstart test evidence is incomplete.',\n evidence,\n remediation: {\n command: 'pnpm test',\n detail: 'Map every quickstart to a documentation path, test file, identifying marker, and CI command.',\n },\n }\n}\n\nconst visualsRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const visuals = options.visuals ?? []\n const evidence = visuals.map((path) => fileEvidence(root, path, { readContent: false }))\n return {\n id: 'visual-explanations',\n level: 'recommended',\n passed: visuals.length > 0 && evidence.every((item) => item.exists),\n message: visuals.length > 0 && evidence.every((item) => item.exists) ? `${visuals.length} visual asset(s) found.` : 'Visual explanation evidence is incomplete.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: 'Declare the images or animations that explain the product workflow.',\n },\n }\n}\n\nconst count = (\n results: readonly DocumentationStandardRuleResult[],\n level: DocumentationStandardRuleLevel,\n status: DocumentationStandardRuleStatus,\n): number => results.filter((result) => result.level === level && result.status === status).length\n\nexport const runDocumentationStandardV1 = (\n root: string,\n config: DocBridgeConfigV1,\n): DocumentationConformanceReportV1 => {\n const options = config.conformance?.documentationStandardV1 ?? {}\n const drafts: RuleDraft[] = [\n humanDocsRule(root, config),\n llmsRule(root, config, options),\n handoffsRule(root, config),\n contributionRule(root, options),\n markersRule(root, options, 'metadata', 'required'),\n linksRule(root, options),\n quickstartsRule(root, options),\n visualsRule(root, options),\n markersRule(root, options, 'structured-diagrams', 'recommended'),\n ]\n const results = drafts.map((draft) => resultWithException(draft, options))\n return {\n schemaVersion: 1,\n profile: { id: DOCUMENTATION_STANDARD_V1_ID, version: 1, status: DOCUMENTATION_STANDARD_V1_STATUS },\n ok: results.filter((result) => result.level === 'required').every((result) => result.ok),\n recommendedOk: results.filter((result) => result.level === 'recommended').every((result) => result.ok),\n summary: {\n required: {\n passed: count(results, 'required', 'pass'),\n failed: count(results, 'required', 'fail'),\n excepted: count(results, 'required', 'excepted'),\n },\n recommended: {\n passed: count(results, 'recommended', 'pass'),\n failed: count(results, 'recommended', 'fail'),\n excepted: count(results, 'recommended', 'excepted'),\n },\n },\n results,\n }\n}\n\nexport const formatDocumentationStandardText = (\n report: DocumentationConformanceReportV1,\n): string[] => [\n `Documentation Standard v1 (${report.profile.status})`,\n `Required: ${report.summary.required.passed} passed · ${report.summary.required.failed} failed · ${report.summary.required.excepted} excepted`,\n `Recommended: ${report.summary.recommended.passed} passed · ${report.summary.recommended.failed} failed · ${report.summary.recommended.excepted} excepted`,\n '',\n ...report.results.flatMap((result) => [\n `${result.status === 'pass' ? 'PASS' : result.status === 'excepted' ? 'EXCEPTED' : 'FAIL'} [${result.level}] ${result.id}: ${result.message}`,\n ...result.evidence.map((evidence) => ` evidence: ${evidence.path} — ${evidence.detail}`),\n ...(result.exception\n ? [` exception: ${result.exception.reason} — ${result.exception.approvedBy} (${result.exception.trackingUrl})`]\n : result.ok\n ? []\n : [` fix: ${result.remediation.command} — ${result.remediation.detail}`]),\n ]),\n]\n","import { z } from 'zod'\n\nconst NonEmptyStringSchema = z.string().refine((value) => value.trim().length > 0, 'must be non-empty')\nconst HttpsUrlSchema = z.string().url().refine((value) => value.startsWith('https://'), 'must use https')\nconst RepoSchema = z.string().regex(/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/)\nconst SlugSchema = z.string().regex(/^[a-z][a-z0-9-]*$/)\n\nconst SurfaceSchema = z.object({\n home: HttpsUrlSchema.optional(),\n docs: HttpsUrlSchema.optional(),\n llms: HttpsUrlSchema.optional(),\n stats: HttpsUrlSchema.optional(),\n documentation: z.enum(['fumadocs', 'repository']),\n chat: z.enum(['agentschat', 'custom', 'none']),\n}).passthrough()\n\nconst ProductSchema = z.object({\n id: SlugSchema,\n name: NonEmptyStringSchema,\n shortName: NonEmptyStringSchema,\n kind: NonEmptyStringSchema,\n role: NonEmptyStringSchema,\n promise: NonEmptyStringSchema,\n maturity: z.enum(['planning', 'alpha', 'beta', 'stable', 'deprecated']),\n repo: RepoSchema.nullable(),\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n surfaces: SurfaceSchema,\n navigation: z.object({\n showInBar: z.boolean(),\n order: z.number().int().nonnegative().optional(),\n next: z.array(SlugSchema),\n }).passthrough(),\n}).passthrough()\n\nconst LegacyPropertySchema = z.object({\n id: SlugSchema,\n name: NonEmptyStringSchema,\n barLabel: NonEmptyStringSchema,\n domain: NonEmptyStringSchema,\n url: HttpsUrlSchema,\n repo: RepoSchema.nullable(),\n tagline: NonEmptyStringSchema,\n kind: NonEmptyStringSchema,\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n llms: HttpsUrlSchema.optional(),\n stats: HttpsUrlSchema.optional(),\n}).passthrough()\n\nconst ManifestSchema = z.object({\n schemaVersion: z.literal(2),\n parentBrand: z.object({ id: NonEmptyStringSchema, name: NonEmptyStringSchema }).passthrough(),\n products: z.array(ProductSchema).min(1),\n // Historical four-product shim or full seven-product projection of products[].\n properties: z\n .array(LegacyPropertySchema)\n .refine((value) => value.length === 4 || value.length === 7, {\n message: 'must project either the legacy four products or the full seven-product catalog',\n }),\n builder: z.object({ id: NonEmptyStringSchema, name: NonEmptyStringSchema, url: HttpsUrlSchema }).passthrough().optional(),\n}).passthrough()\n\nconst EvidenceSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('repository-derivation'),\n repo: RepoSchema,\n path: NonEmptyStringSchema,\n summary: NonEmptyStringSchema,\n }).passthrough(),\n z.object({ type: z.literal('endpoint'), url: HttpsUrlSchema, summary: NonEmptyStringSchema }).passthrough(),\n])\n\nconst ClaimSchema = z.object({\n id: NonEmptyStringSchema,\n value: z.number().finite().nonnegative(),\n noun: NonEmptyStringSchema,\n conservativeFloor: z.number().int().nonnegative().optional(),\n evidence: EvidenceSchema,\n}).passthrough()\n\nconst ClaimProductSchema = z.object({\n productId: SlugSchema,\n source: z.discriminatedUnion('type', [\n z.object({ type: z.literal('endpoint'), url: HttpsUrlSchema }).passthrough(),\n z.object({ type: z.literal('repository'), repo: RepoSchema }).passthrough(),\n z.object({ type: z.literal('declaration'), summary: NonEmptyStringSchema }).passthrough(),\n ]),\n verification: z.enum(['verified', 'declared']),\n claims: z.array(ClaimSchema),\n}).passthrough()\n\nconst ClaimsSchema = z.object({\n schemaVersion: z.literal(1),\n manifestSchemaVersion: z.literal(2),\n products: z.array(ClaimProductSchema),\n}).passthrough()\n\n/** Historical four-product shim order. */\nconst LEGACY_FOUR_PRODUCT_IDS = ['agentskit', 'akos', 'playbook', 'registry'] as const\n/** Full seven-product projection order (matches products[]). */\nconst FULL_SEVEN_PRODUCT_IDS = [\n 'agentskit',\n 'registry',\n 'agentskit-chat',\n 'playbook',\n 'doc-bridge',\n 'code-review',\n 'akos',\n] as const\n\nexport const parseCanonicalEcosystemContract = (\n manifestInput: unknown,\n claimsInput: unknown,\n): { readonly manifest: z.infer<typeof ManifestSchema>; readonly claims: z.infer<typeof ClaimsSchema> } => {\n const manifest = ManifestSchema.parse(manifestInput)\n const claims = ClaimsSchema.parse(claimsInput)\n const products = new Map(manifest.products.map((product) => [product.id, product]))\n if (products.size !== manifest.products.length) throw new Error('Manifest product IDs must be unique.')\n\n const navigationOrders = new Set<number>()\n for (const product of manifest.products) {\n if (product.surfaces.documentation === 'fumadocs' && !product.surfaces.docs) {\n throw new Error(`Product ${product.id} requires a docs surface for Fumadocs.`)\n }\n if (product.navigation.showInBar) {\n if (!product.surfaces.home || product.navigation.order === undefined) {\n throw new Error(`Product ${product.id} requires home and order for shared navigation.`)\n }\n if (navigationOrders.has(product.navigation.order)) throw new Error('Navigation orders must be unique.')\n navigationOrders.add(product.navigation.order)\n }\n const next = new Set(product.navigation.next)\n if (next.size !== product.navigation.next.length || next.has(product.id)) {\n throw new Error(`Product ${product.id} has duplicate or self-referential navigation.`)\n }\n for (const nextId of next) {\n if (!products.has(nextId)) throw new Error(`Product ${product.id} references unknown product ${nextId}.`)\n }\n }\n\n const propertyIds =\n manifest.properties.length === 7 ? FULL_SEVEN_PRODUCT_IDS : LEGACY_FOUR_PRODUCT_IDS\n\n for (const [index, id] of propertyIds.entries()) {\n const legacy = manifest.properties[index]\n const product = products.get(id)\n if (!legacy || !product || legacy.id !== id || !product.surfaces.home) {\n throw new Error(`Legacy property ${index} must project product ${id}.`)\n }\n const expected = {\n name: product.name,\n barLabel: product.shortName,\n domain: new URL(product.surfaces.home).host,\n url: product.surfaces.home,\n repo: product.repo,\n tagline: product.promise,\n kind: product.kind,\n accent: product.accent,\n llms: product.surfaces.llms,\n stats: product.surfaces.stats,\n }\n for (const [key, value] of Object.entries(expected)) {\n if (legacy[key as keyof typeof legacy] !== value) throw new Error(`Legacy ${id}.${key} must match v2.`)\n }\n }\n\n const claimProducts = new Map(claims.products.map((product) => [product.productId, product]))\n if (claimProducts.size !== claims.products.length || claimProducts.size !== products.size) {\n throw new Error('Claims must include every manifest product exactly once.')\n }\n for (const [productId, product] of products) {\n const claimProduct = claimProducts.get(productId)\n if (!claimProduct) throw new Error(`Claims are missing product ${productId}.`)\n if (claimProduct.source.type === 'endpoint') {\n if (claimProduct.source.url !== product.surfaces.stats) throw new Error(`Claims source for ${productId} must match stats.`)\n } else if (claimProduct.source.type === 'repository' && claimProduct.source.repo !== product.repo) {\n throw new Error(`Claims source for ${productId} must match repo.`)\n } else if (claimProduct.source.type === 'declaration' && product.repo !== null) {\n throw new Error(`Declaration source for ${productId} requires a null repo.`)\n }\n if (claimProduct.verification === 'declared' && claimProduct.claims.length > 0) {\n throw new Error(`Declared product ${productId} cannot publish claims.`)\n }\n const claimIds = new Set<string>()\n for (const claim of claimProduct.claims) {\n if (claimIds.has(claim.id)) throw new Error(`Product ${productId} has duplicate claim ${claim.id}.`)\n claimIds.add(claim.id)\n if (claim.conservativeFloor !== undefined && claim.conservativeFloor > claim.value) {\n throw new Error(`Claim ${productId}:${claim.id} has a floor above its value.`)\n }\n if (claim.evidence.type === 'repository-derivation' && claim.evidence.repo !== product.repo) {\n throw new Error(`Claim ${productId}:${claim.id} evidence must match the product repo.`)\n }\n }\n }\n\n return { manifest, claims }\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 { mkdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs'\nimport { join, 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'\nimport { loadWorkflowManifest, loadWorkflowStepOutput } from '../workflow/engine.js'\nimport { parseDiscoverySnapshot, parseReconciliationReport } from '../validate.js'\nimport { applyFixProposal, approveFixProposal, createArtifactNormalizationProposal, createMarkdownLinkFixProposal } from '../fixes/proposals.js'\nimport { createRegistryAgentAdapter, loadRegistryAgentRunner, persistRegistryAgentProposal } from '../agents/registry-adapter.js'\nimport { sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { discoverRepository } from '../discovery/repository.js'\nimport { FixProposalV1Schema, type DiscoverySnapshotV1, type ReconciliationReportV1, type FixProposalV1 } from '../schemas/knowledge.js'\nimport { redactValue } from '../safety/repository.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 title: 'Resolve repository handoff',\n description: 'Resolve a package or ownership id to its deterministic AgentHandoff.',\n annotations: { readOnlyHint: true },\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 title: 'Search repository documentation',\n description: 'Search the deterministic Doc Bridge index for repository documentation.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { term: { type: 'string' }, limit: { type: 'number' } },\n required: ['term'],\n },\n },\n {\n name: 'doc.get',\n title: 'Read indexed documentation',\n description: 'Read one indexed agent documentation file by id or indexed path.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, path: { type: 'string' } },\n },\n },\n {\n name: 'gate.status',\n title: 'Check documentation gates',\n description: 'Evaluate documentation gates without writing files.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'retriever.query',\n title: 'Retrieve documentation context',\n description: 'Return relevant local Doc Bridge index chunks for a query.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { query: { type: 'string' }, limit: { type: 'number' } },\n required: ['query'],\n },\n },\n {\n name: 'memory.classify',\n title: 'Classify memory candidates',\n description: 'Classify local memory candidates into agent, human, playbook, or discard routes.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'memory.promoteDraft',\n title: 'Draft memory promotion',\n description: 'Build a reviewable draft promotion body from local memory candidates without publishing it.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'registry.topology',\n title: 'Inspect registry topology',\n description: 'Return the static Doc Bridge curator and delegate topology.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'docbridge.snapshot',\n title: 'Read the latest discovery snapshot',\n description: 'Read the bounded canonical repository snapshot from the latest workflow run.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { runId: { type: 'string' } } },\n },\n {\n name: 'docbridge.report',\n title: 'Read the latest reconciliation report',\n description: 'Read the canonical reconciliation report from the latest workflow run.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { runId: { type: 'string' } } },\n },\n {\n name: 'docbridge.diagnostics',\n title: 'Read reconciliation diagnostics',\n description: 'Read bounded diagnostics from the latest canonical reconciliation report.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { status: { type: 'string' }, severity: { type: 'string' } } },\n },\n {\n name: 'docbridge.relations',\n title: 'Read architecture relations',\n description: 'Read bounded observed and declared relations from the latest canonical snapshot.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { kind: { type: 'string' }, limit: { type: 'number' } } },\n },\n {\n name: 'docbridge.run',\n title: 'Read workflow state',\n description: 'Read the latest resumable workflow state and artifact references.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'docbridge.proposals',\n title: 'Read or approve proposals',\n description: 'Create, inspect, approve and apply deterministic proposals through the shared human-gated workflow.',\n inputSchema: { type: 'object', properties: { action: { type: 'string', enum: ['list', 'propose-links', 'propose-normalize', 'suggest', 'approve', 'apply'] }, proposalHash: { type: 'string' }, artifactPath: { type: 'string' }, approvedBy: { type: 'string' }, proposal: { type: 'object' } } },\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 WorkflowRunArgsSchema = z.object({ runId: z.string().min(1).optional() })\nconst DiagnosticsArgsSchema = z.object({ status: z.string().min(1).optional(), severity: z.string().min(1).optional() })\nconst RelationsArgsSchema = z.object({ kind: z.string().min(1).optional(), limit: z.number().int().positive().max(500).optional() })\nconst ProposalsArgsSchema = z.object({ action: z.enum(['list', 'propose-links', 'propose-normalize', 'suggest', 'approve', 'apply']).optional(), proposalHash: z.string().min(1).optional(), artifactPath: z.string().min(1).optional(), approvedBy: z.string().min(1).optional(), proposal: z.unknown().optional() })\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\nconst workflowStateDir = (ctx: McpContext): string => resolve(ctx.root, ctx.config.workflow?.stateDir ?? '.doc-bridge/workflow')\n\nconst workflowRun = (ctx: McpContext) => loadWorkflowManifest(workflowStateDir(ctx))\n\nconst ensureLatestRun = (ctx: McpContext, runId?: string) => {\n const run = workflowRun(ctx)\n if (runId && run.runId !== runId) throw new Error(`Unknown workflow run \"${runId}\"`)\n if (run.state === 'stale' || run.state === 'failed') throw new Error(`Workflow run is ${run.state}; resume or create a valid run before reading artifacts.`)\n return run\n}\n\nconst workflowSnapshot = (ctx: McpContext, runId?: string): DiscoverySnapshotV1 => {\n ensureLatestRun(ctx, runId)\n return parseDiscoverySnapshot(loadWorkflowStepOutput(workflowStateDir(ctx), 'normalize'))\n}\n\nconst workflowReport = (ctx: McpContext, runId?: string): ReconciliationReportV1 => {\n ensureLatestRun(ctx, runId)\n return parseReconciliationReport(loadWorkflowStepOutput(workflowStateDir(ctx), 'reconcile'))\n}\n\nconst proposalPath = (ctx: McpContext): string => join(ctx.root, '.doc-bridge', 'proposal.json')\nconst readSavedProposal = (ctx: McpContext, input: unknown): FixProposalV1 => {\n if (input !== undefined) return FixProposalV1Schema.parse(input)\n try { return FixProposalV1Schema.parse(JSON.parse(readFileSync(proposalPath(ctx), 'utf8')) as unknown) } catch { throw new Error(`No saved fix proposal at ${proposalPath(ctx)}.`) }\n}\nconst saveProposal = (ctx: McpContext, proposal: FixProposalV1): void => { mkdirSync(join(ctx.root, '.doc-bridge'), { recursive: true }); writeFileSync(proposalPath(ctx), `${JSON.stringify(proposal, null, 2)}\\n`, 'utf8') }\n\nconst enabledMcpTools = (ctx: McpContext) => {\n const configured = ctx.config.surfaces?.mcp?.tools\n if (!configured || configured.length === MCP_TOOLS.length && MCP_TOOLS.every((tool) => configured.includes(tool.name as typeof configured[number]))) return MCP_TOOLS\n return MCP_TOOLS.filter((tool) => configured.includes(tool.name as typeof configured[number]))\n}\n\nconst assertMcpToolEnabled = (ctx: McpContext, name: string): void => {\n if (!MCP_TOOLS.some((tool) => tool.name === name)) throw new Error(`Unknown tool \"${name}\"`)\n if (!enabledMcpTools(ctx).some((tool) => tool.name === name)) throw new Error(`MCP tool \"${name}\" is disabled by configuration.`)\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: enabledMcpTools(ctx) }\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 if (typeof name !== 'string') throw new Error('MCP tools/call requires a tool name.')\n assertMcpToolEnabled(ctx, name)\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 if (name === 'docbridge.snapshot') {\n const parsed = parseToolArgs('docbridge.snapshot', WorkflowRunArgsSchema, args)\n return textResult(redactValue(workflowSnapshot(ctx, parsed.runId)))\n }\n\n if (name === 'docbridge.report') {\n const parsed = parseToolArgs('docbridge.report', WorkflowRunArgsSchema, args)\n return textResult(redactValue(workflowReport(ctx, parsed.runId)))\n }\n\n if (name === 'docbridge.diagnostics') {\n const parsed = parseToolArgs('docbridge.diagnostics', DiagnosticsArgsSchema, args)\n const diagnostics = workflowReport(ctx).diagnostics.filter((diagnostic) =>\n (!parsed.status || diagnostic.status === parsed.status) && (!parsed.severity || diagnostic.severity === parsed.severity),\n )\n return textResult(redactValue({ reportHash: workflowReport(ctx).contentHash, diagnostics }))\n }\n\n if (name === 'docbridge.relations') {\n const parsed = parseToolArgs('docbridge.relations', RelationsArgsSchema, args)\n const snapshot = workflowSnapshot(ctx)\n return textResult({ snapshotHash: snapshot.contentHash, relations: snapshot.relations.filter((relation) => !parsed.kind || relation.kind === parsed.kind).slice(0, parsed.limit ?? 100) })\n }\n\n if (name === 'docbridge.run') {\n parseToolArgs('docbridge.run', z.object({}), args)\n return textResult(workflowRun(ctx))\n }\n\n if (name === 'docbridge.proposals') {\n const parsed = parseToolArgs('docbridge.proposals', ProposalsArgsSchema, args)\n const run = (() => { try { return workflowRun(ctx) } catch { return undefined } })()\n if (!parsed.action || parsed.action === 'list') {\n let proposal: FixProposalV1 | undefined\n try { proposal = readSavedProposal(ctx, undefined) } catch { proposal = undefined }\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposals: proposal ? [proposal] : [] }))\n }\n if (parsed.action === 'suggest') {\n return loadRegistryAgentRunner(ctx.root, ctx.config).then(async (runner) => {\n const snapshot = workflowSnapshot(ctx)\n const report = workflowReport(ctx)\n const adapter = createRegistryAgentAdapter(ctx.root, ctx.config, runner)\n const proposal = await adapter.run(snapshot, report)\n const savedPath = persistRegistryAgentProposal(workflowStateDir(ctx), proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal, proposalPath: savedPath }))\n })\n }\n const discovered = discoverRepository({ root: ctx.root, config: ctx.config })\n const options = { baseRevision: discovered.sourceRevision, configurationHash: sha256NormalizedV1(ctx.config), ...(ctx.config.project?.name ? { projectName: ctx.config.project.name } : {}) }\n if (parsed.action === 'propose-links') {\n const proposal = createMarkdownLinkFixProposal(ctx.root, options)\n if (proposal) saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal: proposal ?? null }))\n }\n if (parsed.action === 'propose-normalize') {\n if (!parsed.artifactPath) throw new Error('docbridge.proposals propose-normalize requires artifactPath')\n const proposal = createArtifactNormalizationProposal(ctx.root, parsed.artifactPath, options)\n if (proposal) saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal: proposal ?? null }))\n }\n if (parsed.action === 'approve') {\n const proposal = approveFixProposal(readSavedProposal(ctx, parsed.proposal), parsed.approvedBy ?? 'human')\n if (parsed.proposalHash && proposal.approval?.proposalHash !== parsed.proposalHash) throw new Error('proposalHash does not match the saved proposal')\n saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal }))\n }\n const proposal = applyFixProposal(ctx.root, readSavedProposal(ctx, parsed.proposal), { currentRevision: discovered.sourceRevision })\n saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal }))\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\ntype StdioFraming = 'content-length' | 'json-line'\n\nconst writeFrame = (payload: unknown, framing: StdioFraming): void => {\n const body = JSON.stringify(payload)\n process.stdout.write(framing === 'json-line' ? `${body}\\n` : `Content-Length: ${Buffer.byteLength(body)}\\r\\n\\r\\n${body}`)\n}\n\nexport const respondMcpRequest = async (ctx: McpContext, request: JsonRpcRequest, framing: StdioFraming): Promise<void> => {\n if (request.id === undefined) {\n try {\n await handleMcpRequest(ctx, request)\n } catch {\n // Notifications do not get responses.\n }\n return\n }\n\n try {\n const result = await handleMcpRequest(ctx, request)\n writeFrame({ jsonrpc: '2.0', id: request.id, result: result ?? {} }, framing)\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 }, framing)\n }\n}\n\nexport const startMcpStdioServer = (ctx: McpContext): void => {\n let buffer = Buffer.alloc(0)\n let responseChain = Promise.resolve()\n const enqueueResponse = (request: JsonRpcRequest, framing: StdioFraming): void => {\n responseChain = responseChain.then(() => respondMcpRequest(ctx, request, framing))\n }\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk])\n while (true) {\n if (/^content-length:/i.test(buffer.subarray(0, Math.min(buffer.length, 32)).toString('utf8'))) {\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 enqueueResponse(JSON.parse(raw) as JsonRpcRequest, 'content-length')\n continue\n }\n\n const lineEnd = buffer.indexOf('\\n')\n if (lineEnd === -1) return\n const raw = buffer.subarray(0, lineEnd).toString('utf8').trim()\n buffer = buffer.subarray(lineEnd + 1)\n if (!raw) continue\n try {\n enqueueResponse(JSON.parse(raw) as JsonRpcRequest, 'json-line')\n } catch {\n writeFrame({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }, 'json-line')\n }\n }\n })\n process.stdin.resume()\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 { 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 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 { 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 { 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 )","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 { 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\nconst NX_MANIFEST_PATTERN = /(^|[/\\\\])(project|package)\\.json$/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', 'srcDir']) {\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 nxRoot = resolve(opts.root)\n if (opts.config.routing?.plugin === 'nx' && existsSync(nxRoot)) {\n watch(nxRoot, { recursive: true }, (_event, filename) => {\n if (!filename || !NX_MANIFEST_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}\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, 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 { 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 { 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\nconst providerDefaultApiKeyEnv = (provider: string): string | undefined => {\n switch (provider) {\n case 'openai':\n return 'OPENAI_API_KEY'\n case 'anthropic':\n return 'ANTHROPIC_API_KEY'\n case 'openrouter':\n return 'OPENROUTER_API_KEY'\n default:\n return undefined\n }\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(providerDefaultApiKeyEnv(provider))\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 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","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://doc-bridge.agentskit.io/\n`\n\nexport const docBridgePatternPayload = () => ({\n ...DOC_BRIDGE_PATTERN_META,\n format: 'okf-pattern-v1',\n body: docBridgePatternMarkdown(),\n})"],"mappings":"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","names":["z","z","z","z","z","readFileSync","dirname","join","existsSync","resolve","resolve","existsSync","existsSync","readFileSync","join","readFileSync","realpathSync","join","realpathSync","join","packageId","packageId","artifact","relativePath","projectName","realpathSync","resolve","sep","existsSync","realpathSync","isAbsolute","relative","resolve","sep","parseFrontmatter","slug","realpathSync","resolve","relative","isAbsolute","sep","slug","parseFrontmatter","existsSync","item","existsSync","readFileSync","join","join","existsSync","readFileSync","parseFrontmatter","minimatch","minimatch","parseFrontmatter","slug","minimatch","minimatch","slug","realpathSync","resolve","sep","existsSync","lstatSync","readFileSync","realpathSync","basename","dirname","isAbsolute","relative","resolve","sep","readFileSync","resolve","relative","isAbsolute","lstatSync","realpathSync","sep","projectName","existsSync","dirname","basename","script","existsSync","readFileSync","basename","join","existsSync","readdirSync","statSync","join","join","existsSync","readdirSync","statSync","join","existsSync","readFileSync","basename","readFileSync","join","dirname","existsSync","readFileSync","basename","dirname","join","relative","resolve","sep","lstatSync","readdirSync","realpathSync","statSync","isAbsolute","relative","resolve","sep","minimatch","relativePath","DEFAULT_MAX_FILES","isRecord","readFileSync","relative","join","existsSync","sep","dirname","resolve","extension","basename","evidence","existsSync","readFileSync","writeFileSync","mkdirSync","join","resolve","z","z","join","existsSync","readFileSync","resolve","evidence","diagnostic","mkdirSync","writeFileSync","entity","resolveEntity","evidence","base","diagnostic","existsSync","readdirSync","readFileSync","realpathSync","statSync","writeFileSync","basename","dirname","extname","join","relative","resolve","sep","hash","basename","resolve","readdirSync","join","extname","relative","sep","realpathSync","readFileSync","existsSync","dirname","statSync","writeFileSync","existsSync","mkdirSync","readFileSync","renameSync","writeFileSync","join","relative","resolve","join","writeFileSync","renameSync","run","transition","readFileSync","resolve","mkdirSync","existsSync","relative","artifact","minimatch","diagnostic","minimatch","entityId","count","readFileSync","existsSync","readFileSync","realpathSync","statSync","isAbsolute","relative","resolve","sep","z","EvidenceSchema","realpathSync","resolve","relative","isAbsolute","sep","existsSync","statSync","readFileSync","_passed","result","evidence","existsSync","readFileSync","join","resolve","join","existsSync","readFileSync","resolve","readFileSync","isRecord","mkdirSync","readFileSync","realpathSync","writeFileSync","join","relative","resolve","z","existsSync","readFileSync","join","relativePath","existsSync","readFileSync","join","z","doc","realpathSync","resolve","relative","runId","run","join","readFileSync","mkdirSync","writeFileSync","diagnostic","proposal","raw","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","join","resolve","readJson","existsSync","dirname","resolve","resolve","dirname","existsSync","execFileSync","existsSync","mkdirSync","writeFileSync","join","existsSync","readFileSync","resolve","tokenize","resolve","existsSync","readFileSync","readFileSync","join","join","join","join","readFileSync"]}
1
+ {"version":3,"sources":["../src/config/defaults.ts","../src/config/schema.ts","../src/config/define-config.ts","../src/config/load-config.ts","../src/lib/static-js-literal.ts","../src/schemas/agent-handoff.ts","../src/schemas/doc-bridge-index.ts","../src/schemas/memory-candidate.ts","../src/schemas/json-schemas.ts","../src/schemas/knowledge.ts","../src/validate.ts","../src/index-builder/build-index.ts","../src/lib/paths.ts","../src/lib/package-manager.ts","../src/index-builder/scan-corpus.ts","../src/lib/bounded-text.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/index.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/nextra.ts","../src/index-builder/human-adapters/plain-markdown.ts","../src/index-builder/human-adapters/starlight.ts","../src/index-builder/human-adapters/vitepress.ts","../src/index-builder/plugins/nx.ts","../src/index-builder/plugins/pnpm-monorepo.ts","../src/lib/glob-expand.ts","../src/discovery/repository.ts","../src/safety/repository.ts","../src/agents/registry-adapter.ts","../src/discovery/documentation.ts","../src/reconciliation/reconcile.ts","../src/report/html.ts","../src/fixes/proposals.ts","../src/workflow/engine.ts","../src/rules/engine.ts","../src/federation/ecosystem-llms.ts","../src/gates/run-gates.ts","../src/conformance/documentation-standard-v1.ts","../src/conformance/ecosystem-contract.ts","../src/query/load-index.ts","../src/mcp/server.ts","../src/query/search.ts","../src/retriever/doc-bridge-retriever.ts","../src/memory/ingest.ts","../src/memory/pipeline.ts","../src/query/query.ts","../src/mcp/install.ts","../src/doctor/badge.ts","../src/doctor/run-doctor.ts","../src/index-builder/watch-index.ts","../src/memory/github-pr.ts","../src/federation/llms.ts","../src/intelligence/rag.ts","../src/intelligence/adapter.ts","../src/intelligence/peers.ts","../src/intelligence/chat.ts","../src/playbook/doc-bridge-pattern.ts"],"sourcesContent":["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 rules: {\n mode: 'default',\n ...config.rules,\n },\n safety: {\n redactSecrets: true,\n ...config.safety,\n },\n surfaces: {\n cli: {\n bin: 'ak-docs',\n defaultFormat: 'json',\n ...config.surfaces?.cli,\n },\n mcp: {\n enabled: true,\n tools: [\n 'handoff.resolve', 'doc.search', 'doc.get', 'gate.status', 'retriever.query',\n 'memory.classify', 'memory.promoteDraft', 'registry.topology',\n 'docbridge.snapshot', 'docbridge.report', 'docbridge.diagnostics',\n 'docbridge.relations', 'docbridge.run', 'docbridge.proposals',\n ],\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 'starlight',\n 'nextra',\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 urlPrefix: z.string().url().optional(),\n pathPrefix: z.string().min(1).max(512).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', 'nx', '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 'documentation-standard-v1',\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 'documentation-standard-v1',\n ]),\n )\n .max(16)\n .optional(),\n options: z.record(z.string(), z.unknown()).optional(),\n })\n .strict()\n\nexport const RuleIdSchema = z.enum([\n 'documentation-quality',\n 'graph-undocumented-relation',\n 'declared-unobserved-relation',\n 'unresolved-reference',\n 'conflicting-declaration',\n 'not-analyzed-coverage',\n 'stale-documentation',\n 'centrality-risk',\n 'critical-path-risk',\n 'freshness',\n 'ownership',\n])\n\nexport const RuleSeveritySchema = z.enum(['off', 'info', 'warn', 'error'])\n\nexport const RulesConfigSchema = z\n .object({\n mode: z.enum(['default', 'recommended', 'strict']).optional(),\n severity: z.record(RuleIdSchema, RuleSeveritySchema).optional(),\n ignore: z.array(RuleIdSchema).max(128).optional(),\n criticalEntities: z.array(z.string().min(1).max(256)).max(128).optional(),\n criticalPaths: z.array(z.string().min(1).max(512)).max(128).optional(),\n warningThresholds: z.record(RuleIdSchema, z.number().int().min(1).max(100_000)).optional(),\n })\n .strict()\n\nexport const WorkflowConfigSchema = z\n .object({\n stateDir: z.string().min(1).max(512).optional(),\n })\n .strict()\n\nexport const RepositorySafetyConfigSchema = z\n .object({\n exclude: z.array(z.string().min(1).max(512)).max(128).optional(),\n maxFiles: z.number().int().positive().max(1_000_000).optional(),\n maxBytes: z.number().int().positive().max(10_000_000_000).optional(),\n maxTimeMs: z.number().int().positive().max(86_400_000).optional(),\n maxMemoryMb: z.number().int().positive().max(1_048_576).optional(),\n redactSecrets: z.boolean().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 'docbridge.snapshot',\n 'docbridge.report',\n 'docbridge.diagnostics',\n 'docbridge.relations',\n 'docbridge.run',\n 'docbridge.proposals',\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 registry: z\n .object({\n enabled: z.boolean().optional(),\n agentId: z.string().min(1).max(256).optional(),\n agentRoot: z.string().min(1).max(512).optional(),\n runnerModule: z.string().min(1).max(512).optional(),\n })\n .strict()\n .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 DocumentationEvidenceFileSchema = z\n .object({\n path: z.string().min(1).max(512),\n contains: z.array(z.string().min(1).max(512)).min(1).max(32),\n })\n .strict()\n\nexport const DocumentationLinkEvidenceSchema = z\n .object({\n url: z.string().url().max(512),\n paths: z.array(z.string().min(1).max(512)).min(1).max(32),\n })\n .strict()\n\nexport const DocumentationQuickstartEvidenceSchema = z\n .object({\n id: z.string().regex(/^[a-z][a-z0-9-]*$/).max(128),\n doc: z.string().min(1).max(512),\n test: z.string().min(1).max(512),\n command: z.string().min(1).max(512),\n testContains: z.array(z.string().min(1).max(256)).min(1).max(16),\n })\n .strict()\n\nexport const EcosystemContractEvidenceSchema = z\n .object({\n manifest: z.string().min(1).max(512),\n claims: z.string().min(1).max(512),\n productId: z.string().regex(/^[a-z][a-z0-9-]*$/).max(128),\n })\n .strict()\n\nexport const DocumentationStandardRuleIdSchema = z.enum([\n 'human-docs',\n 'llms-and-raw-source',\n 'agent-handoffs',\n 'contribution',\n 'metadata',\n 'cross-links',\n 'tested-quickstarts',\n 'visual-explanations',\n 'structured-diagrams',\n])\n\nexport const DocumentationStandardExceptionSchema = z\n .object({\n ruleId: DocumentationStandardRuleIdSchema,\n reason: z.string().min(10).max(1_024),\n approvedBy: z.string().min(1).max(256),\n trackingUrl: z.string().url().max(512),\n })\n .strict()\n\nexport const DocumentationStandardV1ConfigSchema = z\n .object({\n rawSources: z.array(z.string().min(1).max(512)).max(64).optional(),\n contributionPaths: z.array(z.string().min(1).max(512)).max(16).optional(),\n metadata: z.array(DocumentationEvidenceFileSchema).max(32).optional(),\n links: z.array(DocumentationLinkEvidenceSchema).max(64).optional(),\n quickstarts: z.array(DocumentationQuickstartEvidenceSchema).max(32).optional(),\n visuals: z.array(z.string().min(1).max(512)).max(64).optional(),\n diagrams: z.array(DocumentationEvidenceFileSchema).max(32).optional(),\n ecosystemContract: EcosystemContractEvidenceSchema.optional(),\n exceptions: z.array(DocumentationStandardExceptionSchema).max(32).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n const seen = new Set<string>()\n for (const [index, exception] of (value.exceptions ?? []).entries()) {\n if (seen.has(exception.ruleId)) {\n context.addIssue({\n code: 'custom',\n path: ['exceptions', index, 'ruleId'],\n message: `Duplicate exception for rule ${exception.ruleId}`,\n })\n }\n seen.add(exception.ruleId)\n }\n })\n\nexport const ConformanceConfigSchema = z\n .object({\n documentationStandardV1: DocumentationStandardV1ConfigSchema.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 rules: RulesConfigSchema.optional(),\n workflow: WorkflowConfigSchema.optional(),\n safety: RepositorySafetyConfigSchema.optional(),\n surfaces: SurfacesConfigSchema.optional(),\n intelligence: IntelligenceConfigSchema.optional(),\n federation: FederationConfigSchema.optional(),\n conformance: ConformanceConfigSchema.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>\nexport type DocumentationStandardV1Config = z.infer<typeof DocumentationStandardV1ConfigSchema>\nexport type DocumentationStandardRuleId = z.infer<typeof DocumentationStandardRuleIdSchema>\nexport type RuleId = z.infer<typeof RuleIdSchema>\nexport type RuleSeverity = z.infer<typeof RuleSeveritySchema>\nexport type RulesConfig = z.infer<typeof RulesConfigSchema>\nexport type WorkflowConfig = z.infer<typeof WorkflowConfigSchema>\nexport type RepositorySafetyConfig = z.infer<typeof RepositorySafetyConfigSchema>\n","import { applyConfigDefaults } from './defaults.js'\nimport { DocBridgeConfigV1Schema, type DocBridgeConfigV1 } from './schema.js'\n\n/** Type-safe config helper for `doc-bridge.config.ts`. */\nexport const defineConfig = (config: DocBridgeConfigV1): DocBridgeConfigV1 =>\n applyConfigDefaults(DocBridgeConfigV1Schema.parse(config))","import { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, join, resolve } from 'node:path'\n\nimport { parseStaticJsObject } from '../lib/static-js-literal.js'\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 unsupportedImports = 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 if (/\\bimport\\b/.test(unsupportedImports)) {\n throw new Error(`Unsupported import in ${path}. Static config only supports defineConfig imports.`)\n }\n try {\n return parseStaticJsObject(raw)\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}\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","const stripComments = (source: string): string => {\n let out = ''\n let index = 0\n let quote: string | undefined\n while (index < source.length) {\n const char = source[index] ?? ''\n const next = source[index + 1] ?? ''\n if (quote) {\n out += char\n if (char === '\\\\') {\n out += next\n index += 2\n continue\n }\n if (char === quote) quote = undefined\n index += 1\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n out += char\n index += 1\n continue\n }\n if (char === '/' && next === '/') {\n while (index < source.length && source[index] !== '\\n') index += 1\n out += '\\n'\n index += 1\n continue\n }\n if (char === '/' && next === '*') {\n index += 2\n while (index < source.length && !(source[index] === '*' && source[index + 1] === '/')) index += 1\n index += 2\n out += ' '\n continue\n }\n out += char\n index += 1\n }\n if (quote) throw new Error('Unterminated string in static JavaScript literal.')\n return out\n}\n\nclass LiteralParser {\n private index = 0\n\n constructor(private readonly source: string) {}\n\n parseAt(index: number): unknown {\n this.index = index\n const value = this.value()\n this.space()\n return value\n }\n\n private space(): void {\n while (/\\s/.test(this.source[this.index] ?? '')) this.index += 1\n }\n\n private value(): unknown {\n this.space()\n const char = this.source[this.index]\n if (char === '{') return this.object()\n if (char === '[') return this.array()\n if (char === '\"' || char === \"'\") return this.string()\n const word = this.word()\n if (word === 'true') return true\n if (word === 'false') return false\n if (word === 'null') return null\n if (/^-?\\d+(?:\\.\\d+)?$/.test(word)) return Number(word)\n throw new Error(`Unsupported dynamic sidebar expression near \"${word || char || 'EOF'}\".`)\n }\n\n private object(): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n this.index += 1\n this.space()\n while (this.source[this.index] !== '}') {\n const key = this.source[this.index] === '\"' || this.source[this.index] === \"'\" ? this.string() : this.word()\n if (!key) throw new Error('Static sidebar object key is required.')\n this.space()\n if (this.source[this.index] !== ':') throw new Error(`Static sidebar key \"${key}\" requires a literal value.`)\n this.index += 1\n result[key] = this.value()\n this.space()\n if (this.source[this.index] === ',') {\n this.index += 1\n this.space()\n continue\n }\n if (this.source[this.index] !== '}') throw new Error('Expected comma or closing brace in static sidebar.')\n }\n this.index += 1\n return result\n }\n\n private array(): unknown[] {\n const result: unknown[] = []\n this.index += 1\n this.space()\n while (this.source[this.index] !== ']') {\n result.push(this.value())\n this.space()\n if (this.source[this.index] === ',') {\n this.index += 1\n this.space()\n continue\n }\n if (this.source[this.index] !== ']') throw new Error('Expected comma or closing bracket in static sidebar.')\n }\n this.index += 1\n return result\n }\n\n private string(): string {\n const quote = this.source[this.index] ?? ''\n this.index += 1\n let result = ''\n while (this.index < this.source.length) {\n const char = this.source[this.index] ?? ''\n if (char === quote) {\n this.index += 1\n return result\n }\n if (char === '\\\\') {\n const escaped = this.source[this.index + 1]\n if (escaped === undefined) break\n const escapes: Record<string, string> = { n: '\\n', r: '\\r', t: '\\t' }\n result += escapes[escaped] ?? escaped\n this.index += 2\n continue\n }\n result += char\n this.index += 1\n }\n throw new Error('Unterminated string in static sidebar.')\n }\n\n private word(): string {\n this.space()\n const start = this.index\n while (/[A-Za-z0-9_$.-]/.test(this.source[this.index] ?? '')) this.index += 1\n return this.source.slice(start, this.index)\n }\n}\n\nconst maskStrings = (source: string): string => {\n const chars = [...source]\n let quote: string | undefined\n let previousToken: string | undefined\n const regexPrefixKeywords = new Set([\n 'await', 'case', 'delete', 'do', 'else', 'in', 'instanceof', 'new',\n 'of', 'return', 'throw', 'typeof', 'void', 'yield',\n ])\n const canStartRegex = (): boolean => previousToken === undefined\n || '=(:,[!&|?{};'.includes(previousToken)\n || previousToken === '=>'\n || regexPrefixKeywords.has(previousToken)\n for (let index = 0; index < chars.length; index += 1) {\n const char = chars[index] ?? ''\n if (quote) {\n chars[index] = ' '\n if (char === '\\\\') {\n if (index + 1 < chars.length) chars[index + 1] = ' '\n index += 1\n } else if (char === quote) {\n quote = undefined\n previousToken = 'literal'\n }\n continue\n }\n if (char === '\"' || char === \"'\" || char === '`') {\n quote = char\n chars[index] = ' '\n continue\n }\n if (char === '/' && canStartRegex()) {\n chars[index] = ' '\n let inClass = false\n for (index += 1; index < chars.length; index += 1) {\n const regexChar = chars[index] ?? ''\n chars[index] = ' '\n if (regexChar === '\\\\') {\n if (index + 1 < chars.length) chars[index + 1] = ' '\n index += 1\n } else if (regexChar === '[') {\n inClass = true\n } else if (regexChar === ']') {\n inClass = false\n } else if (regexChar === '/' && !inClass) {\n while (/[A-Za-z]/.test(chars[index + 1] ?? '')) {\n index += 1\n chars[index] = ' '\n }\n break\n }\n }\n previousToken = 'literal'\n continue\n }\n if (/[A-Za-z_$]/.test(char)) {\n const start = index\n while (/[A-Za-z0-9_$]/.test(chars[index + 1] ?? '')) index += 1\n previousToken = chars.slice(start, index + 1).join('')\n continue\n }\n if (char === '=' && chars[index + 1] === '>') {\n previousToken = '=>'\n index += 1\n continue\n }\n if (!/\\s/.test(char)) previousToken = char\n }\n return chars.join('')\n}\n\nconst nonSpace = (source: string, start: number): number => {\n let index = start\n while (/\\s/.test(source[index] ?? '')) index += 1\n return index\n}\n\nconst escapedRegex = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\nexport const parseStaticJsObject = (source: string): unknown => {\n const clean = stripComments(source)\n const mask = maskStrings(clean)\n const parseBinding = (identifier: string): unknown => {\n const declaration = new RegExp(`\\\\b(?:const|let|var)\\\\s+${escapedRegex(identifier)}(?:\\\\s*:[^=;]+)?\\\\s*=`).exec(mask)\n if (!declaration) throw new Error(`Exported binding \"${identifier}\" must reference a static object declaration.`)\n const start = nonSpace(mask, declaration.index + declaration[0].length)\n if (mask[start] !== '{') throw new Error(`Exported binding \"${identifier}\" must be a static object literal.`)\n return new LiteralParser(clean).parseAt(start)\n }\n const commonJs = /\\bmodule\\.exports\\s*=/.exec(mask)\n if (commonJs) {\n const start = nonSpace(mask, commonJs.index + commonJs[0].length)\n if (mask[start] === '{') return new LiteralParser(clean).parseAt(start)\n const identifier = /^[A-Za-z_$][\\w$]*/.exec(mask.slice(start))?.[0]\n if (identifier) return parseBinding(identifier)\n throw new Error('module.exports must be assigned a static object literal or binding.')\n }\n\n const exported = /\\bexport\\s+default\\b/.exec(mask)\n if (exported) {\n let start = nonSpace(mask, exported.index + exported[0].length)\n if (mask.slice(start).startsWith('defineConfig')) {\n start = nonSpace(mask, start + 'defineConfig'.length)\n if (mask[start] !== '(') throw new Error('defineConfig must be called with a static object literal.')\n start = nonSpace(mask, start + 1)\n if (mask[start] !== '{') throw new Error('defineConfig must be called with a static object literal.')\n return new LiteralParser(clean).parseAt(start)\n }\n if (mask[start] === '{') return new LiteralParser(clean).parseAt(start)\n\n const identifier = /^[A-Za-z_$][\\w$]*/.exec(mask.slice(start))?.[0]\n if (identifier) return parseBinding(identifier)\n }\n throw new Error('Docusaurus sidebar must export a static object or assign one to a const.')\n}\n","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>","type JsonSchema = {\n readonly [key: string]: unknown\n}\n\nconst stringArray = (maxItems: number): JsonSchema => ({\n type: 'array',\n items: { type: 'string', minLength: 1 },\n maxItems,\n})\n\nexport const AgentHandoffV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/agent-handoff-v1.schema.json',\n title: 'AgentHandoff v1',\n type: 'object',\n additionalProperties: false,\n required: [\n 'type',\n 'schemaVersion',\n 'source',\n 'target',\n 'startHere',\n 'readBeforeEditing',\n 'editRoots',\n 'checks',\n 'notes',\n ],\n properties: {\n type: { const: 'agent-handoff' },\n schemaVersion: { const: 1 },\n source: { type: 'string', minLength: 1, maxLength: 512 },\n target: {\n type: 'object',\n additionalProperties: false,\n required: ['type', 'id'],\n properties: {\n type: {\n enum: ['package', 'module', 'app', 'screen', 'flow', 'component', 'intent', 'change', 'search'],\n },\n id: { type: 'string', minLength: 1, maxLength: 256 },\n path: { type: 'string', minLength: 1, maxLength: 512 },\n group: { type: 'string', minLength: 1, maxLength: 128 },\n layer: { type: 'string', minLength: 1, maxLength: 32 },\n },\n },\n startHere: { type: 'string', minLength: 1, maxLength: 512 },\n readBeforeEditing: stringArray(64),\n editRoots: stringArray(32),\n checks: stringArray(32),\n humanDoc: { anyOf: [{ type: 'string', minLength: 1, maxLength: 512 }, { type: 'null' }] },\n playbookPatterns: { type: 'array', items: { type: 'string', format: 'uri' }, maxItems: 16 },\n notes: stringArray(16),\n },\n} as const satisfies JsonSchema\n\nexport const MemoryCandidateV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/memory-candidate-v1.schema.json',\n title: 'MemoryCandidate v1',\n type: 'object',\n additionalProperties: false,\n required: ['schemaVersion', 'id', 'source', 'fact', 'suggestedType', 'confidence', 'references'],\n properties: {\n schemaVersion: { const: 1 },\n id: { type: 'string', minLength: 1, maxLength: 256 },\n source: { enum: ['cursor', 'claude', 'codex', 'copilot', 'agent-memory', 'manual'] },\n rawPath: { type: 'string', minLength: 1, maxLength: 512 },\n fact: { type: 'string', minLength: 1, maxLength: 8000 },\n why: { type: 'string', maxLength: 4000 },\n howToApply: { type: 'string', maxLength: 4000 },\n suggestedType: { enum: ['user', 'feedback', 'project', 'reference', 'unknown'] },\n confidence: { type: 'number', minimum: 0, maximum: 1 },\n references: stringArray(64),\n },\n} as const satisfies JsonSchema\n\nexport const DocBridgeIndexV1JsonSchema = {\n $schema: 'https://json-schema.org/draft/2020-12/schema',\n $id: 'https://agentskit.io/schemas/doc-bridge/doc-bridge-index-v1.schema.json',\n title: 'DocBridgeIndex v1',\n type: 'object',\n additionalProperties: false,\n required: ['schemaVersion', 'contentHash', 'contentHashAlgo', 'knowledge'],\n properties: {\n schemaVersion: { const: 1 },\n contentHash: { type: 'string', pattern: '^[a-f0-9]{64}$' },\n contentHashAlgo: { const: 'sha256-normalized-v1' },\n generatedAt: { type: 'string', format: 'date-time' },\n project: {\n type: 'object',\n additionalProperties: false,\n properties: {\n name: { type: 'string', minLength: 1, maxLength: 128 },\n root: { type: 'string', minLength: 1, maxLength: 512 },\n },\n },\n properties: {\n type: 'array',\n maxItems: 16,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'name'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 64 },\n name: { type: 'string', minLength: 1, maxLength: 128 },\n url: { type: 'string', format: 'uri' },\n llms: { type: 'string', format: 'uri' },\n },\n },\n },\n knowledge: {\n type: 'array',\n maxItems: 10000,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'type', 'title', 'path'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 256 },\n type: { type: 'string', minLength: 1, maxLength: 128 },\n title: { type: 'string', minLength: 1, maxLength: 256 },\n path: { type: 'string', minLength: 1, maxLength: 512 },\n description: { type: 'string', maxLength: 2048 },\n body: { type: 'string', maxLength: 8000 },\n links: stringArray(64),\n tags: stringArray(32),\n },\n },\n },\n capabilities: {\n type: 'array',\n maxItems: 5000,\n items: {\n type: 'object',\n additionalProperties: false,\n required: ['id', 'kind'],\n properties: {\n id: { type: 'string', minLength: 1, maxLength: 256 },\n kind: { type: 'string', minLength: 1, maxLength: 64 },\n description: { type: 'string', maxLength: 512 },\n },\n },\n },\n handoffs: {\n type: 'object',\n additionalProperties: { type: 'object' },\n },\n lookup: { type: 'object' },\n },\n} as const satisfies JsonSchema\n\nexport const DocBridgeJsonSchemas = {\n agentHandoffV1: AgentHandoffV1JsonSchema,\n docBridgeIndexV1: DocBridgeIndexV1JsonSchema,\n memoryCandidateV1: MemoryCandidateV1JsonSchema,\n} as const\n","import { z } from 'zod'\n\nexport const KNOWLEDGE_SCHEMA_VERSION = 1 as const\nexport const KNOWLEDGE_CONTENT_HASH_ALGO = 'sha256-normalized-v1' as const\n\nconst hash = z.string().regex(/^[a-f0-9]{64}$/)\nconst boundedString = (max: number) => z.string().min(1).max(max)\n\nexport const ProvenanceSchema = z.enum(['observed', 'declared', 'proposed'])\nexport type Provenance = z.infer<typeof ProvenanceSchema>\n\nexport const FindingStatusSchema = z.enum([\n 'confirmed',\n 'undocumented',\n 'stale-or-unverified',\n 'conflict',\n 'unresolved',\n 'not-analyzed',\n])\nexport type FindingStatus = z.infer<typeof FindingStatusSchema>\n\nexport const DiagnosticSeveritySchema = z.enum(['off', 'info', 'warn', 'error'])\nexport type DiagnosticSeverity = z.infer<typeof DiagnosticSeveritySchema>\n\nexport const EvidenceSourceSchema = z.enum([\n 'code',\n 'configuration',\n 'documentation',\n 'agent',\n 'derived',\n])\n\nexport const EvidenceSchema = z\n .object({\n source: EvidenceSourceSchema,\n path: boundedString(512),\n lineStart: z.number().int().positive().optional(),\n lineEnd: z.number().int().positive().optional(),\n contentHash: hash.optional(),\n context: z.string().max(1_024).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.lineStart !== undefined && value.lineEnd !== undefined && value.lineEnd < value.lineStart) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['lineEnd'],\n message: 'Must be greater than or equal to lineStart',\n })\n }\n })\nexport type Evidence = z.infer<typeof EvidenceSchema>\n\nexport const CoverageStatusSchema = z.enum(['complete', 'partial', 'not-analyzed'])\n\nexport const CoverageSchema = z\n .object({\n analyzer: boundedString(128),\n scope: boundedString(512),\n status: CoverageStatusSchema,\n reason: z.string().max(1_024).optional(),\n evidence: z.array(EvidenceSchema).max(32).optional(),\n })\n .strict()\nexport type Coverage = z.infer<typeof CoverageSchema>\n\nexport const ProjectIdentitySchema = z\n .object({\n name: boundedString(128),\n root: boundedString(512).optional(),\n })\n .strict()\n\nconst ArtifactMetadata = {\n schemaVersion: z.literal(KNOWLEDGE_SCHEMA_VERSION),\n contentHash: hash,\n contentHashAlgo: z.literal(KNOWLEDGE_CONTENT_HASH_ALGO),\n project: ProjectIdentitySchema,\n sourceRevision: boundedString(128),\n sourceRevisionKind: z.enum(['git', 'content']),\n configurationHash: hash,\n pipelineVersion: boundedString(64),\n analyzerVersions: z.record(boundedString(128), boundedString(64)),\n}\n\nexport const EntitySchema = z\n .object({\n id: boundedString(256),\n kind: boundedString(128),\n name: boundedString(256),\n path: boundedString(512).optional(),\n aliases: z.array(boundedString(256)).max(32).optional(),\n provenance: ProvenanceSchema,\n evidence: z.array(EvidenceSchema).max(64),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict()\nexport type KnowledgeEntity = z.infer<typeof EntitySchema>\n\nexport const RelationSchema = z\n .object({\n id: boundedString(256),\n kind: boundedString(128),\n from: boundedString(256),\n to: boundedString(256),\n discriminator: boundedString(256).optional(),\n provenance: ProvenanceSchema,\n evidence: z.array(EvidenceSchema).max(64),\n metadata: z.record(z.unknown()).optional(),\n })\n .strict()\nexport type KnowledgeRelation = z.infer<typeof RelationSchema>\n\nexport const DiscoverySnapshotV1Schema = z\n .object({\n type: z.literal('discovery-snapshot'),\n ...ArtifactMetadata,\n entities: z.array(EntitySchema).max(50_000),\n relations: z.array(RelationSchema).max(100_000),\n coverage: z.array(CoverageSchema).max(1_000),\n })\n .strict()\n .superRefine((value, context) => {\n const entityIds = new Set<string>()\n for (const [index, entity] of value.entities.entries()) {\n if (entityIds.has(entity.id)) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['entities', index, 'id'], message: `Duplicate entity id: ${entity.id}` })\n }\n entityIds.add(entity.id)\n }\n\n const relationIds = new Set<string>()\n for (const [index, relation] of value.relations.entries()) {\n if (relationIds.has(relation.id)) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['relations', index, 'id'], message: `Duplicate relation id: ${relation.id}` })\n }\n relationIds.add(relation.id)\n }\n })\nexport type DiscoverySnapshotV1 = z.infer<typeof DiscoverySnapshotV1Schema>\n\nexport const DiagnosticSchema = z\n .object({\n id: boundedString(256),\n code: boundedString(128),\n status: FindingStatusSchema,\n severity: DiagnosticSeveritySchema,\n message: boundedString(2_048),\n evidence: z.array(EvidenceSchema).max(64),\n entityIds: z.array(boundedString(256)).max(64).optional(),\n relationIds: z.array(boundedString(256)).max(64).optional(),\n remediation: z.string().max(2_048).optional(),\n })\n .strict()\nexport type KnowledgeDiagnostic = z.infer<typeof DiagnosticSchema>\n\nexport const ReconciliationReportV1Schema = z\n .object({\n type: z.literal('reconciliation-report'),\n ...ArtifactMetadata,\n snapshotHash: hash,\n diagnostics: z.array(DiagnosticSchema).max(100_000),\n summary: z\n .object({\n entityCount: z.number().int().nonnegative(),\n relationCount: z.number().int().nonnegative(),\n diagnosticCount: z.number().int().nonnegative(),\n })\n .strict(),\n })\n .strict()\nexport type ReconciliationReportV1 = z.infer<typeof ReconciliationReportV1Schema>\n\nexport const WorkflowStateSchema = z.enum([\n 'created',\n 'discovering',\n 'analyzed',\n 'compared',\n 'awaiting-agent',\n 'proposed',\n 'awaiting-approval',\n 'validating',\n 'delivered',\n 'failed',\n 'cancelled',\n 'stale',\n 'superseded',\n])\nexport type WorkflowState = z.infer<typeof WorkflowStateSchema>\n\nexport const WorkflowStepSchema = z\n .object({\n name: boundedString(128),\n status: z.enum(['pending', 'running', 'completed', 'failed', 'skipped']),\n inputHash: hash,\n outputHash: hash.optional(),\n artifactRefs: z.array(boundedString(512)).max(32).optional(),\n })\n .strict()\nexport type WorkflowStep = z.infer<typeof WorkflowStepSchema>\n\nexport const WorkflowTransitionSchema = z\n .object({\n from: WorkflowStateSchema.nullable(),\n to: WorkflowStateSchema,\n at: z.string().datetime(),\n reason: z.string().max(1_024).optional(),\n })\n .strict()\nexport type WorkflowTransition = z.infer<typeof WorkflowTransitionSchema>\n\nexport const WorkflowRunV1Schema = z\n .object({\n type: z.literal('workflow-run'),\n ...ArtifactMetadata,\n runId: boundedString(128),\n state: WorkflowStateSchema,\n steps: z.array(WorkflowStepSchema).max(32),\n transitions: z.array(WorkflowTransitionSchema).max(1_000),\n artifactRefs: z.array(boundedString(512)).max(128),\n })\n .strict()\nexport type WorkflowRunV1 = z.infer<typeof WorkflowRunV1Schema>\n\nexport const ProposalOriginSchema = z\n .object({\n kind: z.enum(['registry-agent', 'manual', 'deterministic']),\n id: boundedString(256).optional(),\n version: boundedString(64).optional(),\n provider: boundedString(128).optional(),\n model: boundedString(256).optional(),\n capabilities: z.array(boundedString(128)).max(32).optional(),\n })\n .strict()\n .superRefine((value, context) => {\n if (value.kind === 'registry-agent' && value.id === undefined) {\n context.addIssue({ code: z.ZodIssueCode.custom, path: ['id'], message: 'Registry agent origin requires an id' })\n }\n })\n\nexport const AgentProposalV1Schema = z\n .object({\n type: z.literal('agent-proposal'),\n ...ArtifactMetadata,\n proposalId: boundedString(128),\n baseSnapshotHash: hash,\n baseReportHash: hash,\n relatedDiagnosticIds: z.array(boundedString(256)).max(64),\n rationale: boundedString(4_000),\n confidence: z.number().min(0).max(1),\n evidence: z.array(EvidenceSchema).max(128),\n intendedChanges: z.array(boundedString(4_000)).max(64),\n origin: ProposalOriginSchema,\n checks: z.array(boundedString(512)).max(32),\n })\n .strict()\nexport type AgentProposalV1 = z.infer<typeof AgentProposalV1Schema>\n\nexport const FixProposalStatusSchema = z.enum(['proposed', 'approved', 'rejected', 'stale', 'applied', 'failed'])\n\nexport const AffectedFileSchema = z\n .object({\n path: boundedString(512),\n contentHash: hash,\n })\n .strict()\n\nexport const FixChangeSchema = z\n .object({\n path: boundedString(512),\n before: z.string().max(100_000),\n after: z.string().max(100_000),\n })\n .strict()\nexport type FixChange = z.infer<typeof FixChangeSchema>\n\nexport const FixProposalV1Schema = z\n .object({\n type: z.literal('fix-proposal'),\n ...ArtifactMetadata,\n proposalId: boundedString(128),\n baseRevision: boundedString(128),\n affectedFiles: z.array(AffectedFileSchema).max(256),\n changes: z.array(FixChangeSchema).max(256).optional(),\n preconditions: z.array(boundedString(2_048)).max(64),\n diff: boundedString(100_000),\n postconditions: z.array(boundedString(2_048)).max(64),\n approval: z\n .object({\n proposalHash: hash,\n approvedAt: z.string().datetime(),\n approvedBy: boundedString(256),\n })\n .strict()\n .optional(),\n status: FixProposalStatusSchema,\n })\n .strict()\n .superRefine((value, context) => {\n if ((value.status === 'approved' || value.status === 'applied') && value.approval === undefined) {\n context.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['approval'],\n message: `Fix proposal status ${value.status} requires an approval record`,\n })\n }\n })\nexport type FixProposalV1 = z.infer<typeof FixProposalV1Schema>\n\nexport type KnowledgeArtifactV1 =\n | DiscoverySnapshotV1\n | ReconciliationReportV1\n | WorkflowRunV1\n | AgentProposalV1\n | FixProposalV1\n","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'\nimport {\n AgentProposalV1Schema,\n DiscoverySnapshotV1Schema,\n FixProposalV1Schema,\n ReconciliationReportV1Schema,\n WorkflowRunV1Schema,\n type AgentProposalV1,\n type DiscoverySnapshotV1,\n type FixProposalV1,\n type ReconciliationReportV1,\n type WorkflowRunV1,\n} from './schemas/knowledge.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 parseDiscoverySnapshot = (input: unknown): DiscoverySnapshotV1 =>\n DiscoverySnapshotV1Schema.parse(input)\n\nexport const parseReconciliationReport = (input: unknown): ReconciliationReportV1 =>\n ReconciliationReportV1Schema.parse(input)\n\nexport const parseWorkflowRun = (input: unknown): WorkflowRunV1 => WorkflowRunV1Schema.parse(input)\n\nexport const parseAgentProposal = (input: unknown): AgentProposalV1 => AgentProposalV1Schema.parse(input)\n\nexport const parseFixProposal = (input: unknown): FixProposalV1 => FixProposalV1Schema.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 { 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 { discoverNxProjects } from './plugins/nx.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 =\n config.routing?.plugin === 'nx'\n ? discoverNxProjects(root, config)\n : shouldDiscover\n ? discoverPnpmPackages(root, config)\n : []\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 { existsSync, realpathSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } 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)\n\nexport const containedProjectPath = (root: string, path: string): string | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const unresolved = resolve(projectRoot, path)\n const unresolvedRelative = relative(projectRoot, unresolved)\n if (\n isAbsolute(unresolvedRelative) ||\n unresolvedRelative === '..' ||\n unresolvedRelative.startsWith(`..${sep}`)\n ) return undefined\n\n const canonical = existsSync(unresolved) ? realpathSync.native(unresolved) : unresolved\n const canonicalRelative = relative(projectRoot, canonical)\n return isAbsolute(canonicalRelative) || canonicalRelative === '..' || canonicalRelative.startsWith(`..${sep}`)\n ? undefined\n : canonical\n}\n","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 type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { minimatch } from 'minimatch'\nimport { readBoundedText } from '../lib/bounded-text.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 { containedProjectPath, 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\nconst configuredPathMatches = (\n relPath: string,\n include: readonly string[] | undefined,\n exclude: readonly string[] | undefined,\n): boolean => {\n const normalize = (pattern: string): string => toPosix(pattern).replace(/^\\.\\//, '')\n const included = include?.filter(Boolean).map(normalize) ?? []\n const excluded = exclude?.filter(Boolean).map(normalize) ?? []\n if (excluded.some((pattern) => minimatch(relPath, pattern, { dot: true }))) return false\n return included.length === 0 || included.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n}\n\nexport const scanAgentCorpus = (root: string, config: DocBridgeConfigV1): CorpusDoc[] => {\n const agentRoot = containedProjectPath(root, config.corpus.agent.root)\n if (!agentRoot) throw new Error('Agent corpus root escapes the project root.')\n const files = walkFiles(agentRoot, { extensions: ['.md', '.mdx'] }).filter((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n return configuredPathMatches(relToCorpus, config.corpus.agent.include, config.corpus.agent.exclude)\n })\n const corpusRelRoot = toPosix(config.corpus.agent.root)\n\n const budget = { used: 0 }\n return files.map((abs) => {\n const relToCorpus = toPosix(abs.replace(`${toPosix(agentRoot)}/`, ''))\n const relPath = `${corpusRelRoot}/${relToCorpus}`\n const raw = readBoundedText(abs, budget)\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","import { readFileSync, statSync } from 'node:fs'\n\nexport const MAX_DOCUMENT_BYTES = 4 * 1_024 * 1_024\nexport const MAX_CORPUS_BYTES = 64 * 1_024 * 1_024\n\nexport type TextReadBudget = { used: number }\n\nexport const readBoundedText = (\n path: string,\n budget: TextReadBudget,\n limits?: { readonly maxFileBytes?: number; readonly maxCorpusBytes?: number },\n): string => {\n const maxFileBytes = limits?.maxFileBytes ?? MAX_DOCUMENT_BYTES\n const maxCorpusBytes = limits?.maxCorpusBytes ?? MAX_CORPUS_BYTES\n const stat = statSync(path)\n if (!stat.isFile()) throw new Error(`Documentation path is not a regular file: ${path}`)\n if (stat.size > maxFileBytes) {\n throw new Error(`Documentation file exceeds the ${maxFileBytes} byte limit: ${path}`)\n }\n if (budget.used + stat.size > maxCorpusBytes) {\n throw new Error(`Documentation corpus exceeds the ${maxCorpusBytes} byte read budget.`)\n }\n budget.used += stat.size\n return readFileSync(path, 'utf8')\n}\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 { lstatSync, readdirSync, realpathSync } 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'])\nconst DEFAULT_MAX_FILES = 10_000\n\nexport const walkFiles = (\n root: string,\n opts?: {\n readonly extensions?: readonly string[]\n readonly skipDirs?: ReadonlySet<string>\n readonly maxFiles?: number\n },\n): string[] => {\n const extensions = opts?.extensions ?? ['.md']\n const skip = opts?.skipDirs ?? DEFAULT_SKIP\n const out: string[] = []\n const visited = new Set<string>()\n\n const visit = (dir: string) => {\n let canonicalDir: string\n try {\n canonicalDir = realpathSync.native(dir)\n } catch {\n return\n }\n if (visited.has(canonicalDir)) return\n visited.add(canonicalDir)\n\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 = lstatSync(abs)\n } catch {\n continue\n }\n if (st.isSymbolicLink()) continue\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 if (out.length >= (opts?.maxFiles ?? DEFAULT_MAX_FILES)) {\n throw new Error(`Documentation corpus exceeds the ${opts?.maxFiles ?? DEFAULT_MAX_FILES} file limit.`)\n }\n out.push(toPosix(abs))\n }\n }\n }\n\n visit(root)\n return out.sort()\n}\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 ...(pkg.checks ? { checks: pkg.checks } : existing.checks ? { checks: existing.checks } : {}),\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 pkg.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.6.2'\n","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 canonicalJsonV1 = (payload: unknown): string => JSON.stringify(sortValue(payload))\n\nexport const sha256NormalizedV1 = (payload: unknown): string => {\n const normalized = canonicalJsonV1(payload)\n return createHash('sha256').update(normalized, 'utf8').digest('hex')\n}\n\nexport const contentHashForArtifactV1 = <T extends { readonly contentHash: string }>(artifact: T): string => {\n const { contentHash: _contentHash, ...payload } = artifact\n return sha256NormalizedV1(payload)\n}\n","import type { DocBridgeConfigV1 } from '../config/schema.js'\nimport type { KnowledgeEntry } from '../schemas/doc-bridge-index.js'\n\nconst routePath = (path: string, pathPrefix: string | undefined): string => {\n const normalizedPath = path.replaceAll('\\\\', '/').replace(/\\.(?:md|mdx)$/, '')\n const normalizedPrefix = pathPrefix?.replaceAll('\\\\', '/').replace(/\\/$/, '')\n const relativePath = normalizedPrefix && normalizedPath.startsWith(`${normalizedPrefix}/`)\n ? normalizedPath.slice(normalizedPrefix.length + 1)\n : normalizedPath\n return relativePath.replace(/^\\/+/, '')\n}\n\nexport const knowledgeUrl = (\n path: string,\n options: { readonly urlPrefix?: string | undefined; readonly pathPrefix?: string | undefined } = {},\n): string => {\n const relativePath = routePath(path, options.pathPrefix)\n if (!options.urlPrefix) return path\n const base = options.urlPrefix.endsWith('/') ? options.urlPrefix : `${options.urlPrefix}/`\n return new URL(relativePath, base).toString()\n}\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 const url = knowledgeUrl(entry.path, config.index?.llmsTxt)\n return `- [${entry.title}](${url})${desc}`\n })\n\n return `${preamble.trim()}\\n\\n## Knowledge\\n\\n${lines.join('\\n')}\\n`\n}\n","import { realpathSync } from 'node:fs'\nimport { resolve, sep } from 'node:path'\n\nimport type { DocBridgeConfigV1, HumanCorpusConfig } from '../../config/schema.js'\nimport { docusaurusAdapter } from './docusaurus.js'\nimport { fumadocsAdapter } from './fumadocs.js'\nimport { nextraAdapter } from './nextra.js'\nimport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\nimport { plainMarkdownAdapter } from './plain-markdown.js'\nimport { starlightAdapter } from './starlight.js'\nimport { vitepressAdapter } from './vitepress.js'\n\nexport type { HumanAdapter, HumanDocMap, HumanDocRecord } from './core.js'\n\nconst ADAPTERS: readonly HumanAdapter[] = [\n plainMarkdownAdapter,\n fumadocsAdapter,\n docusaurusAdapter,\n vitepressAdapter,\n starlightAdapter,\n nextraAdapter,\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\nconst canonicalPath = (path: string): string => {\n try {\n return realpathSync.native(path)\n } catch {\n return resolve(path)\n }\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 = canonicalPath(resolve(root, config.corpus.agent.root))\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 const recordPath = canonicalPath(record.path)\n if (\n recordPath === agentRoot ||\n recordPath.startsWith(`${agentRoot}${sep}`) ||\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 } from 'node:fs'\n\nimport { readBoundedText } from '../../lib/bounded-text.js'\nimport { containedProjectPath } from '../../lib/paths.js'\nimport { parseStaticJsObject } from '../../lib/static-js-literal.js'\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 readSidebars = (sidebarsFile: string | undefined): SidebarDocFilter => {\n if (!sidebarsFile) return { enabled: false, ids: new Set(), autogenDirs: [] }\n if (!existsSync(sidebarsFile)) return { enabled: false, ids: new Set(), autogenDirs: [] }\n const raw = readBoundedText(sidebarsFile, { used: 0 }, { maxFileBytes: 1_048_576, maxCorpusBytes: 1_048_576 })\n const filter = { ids: new Set<string>(), autogenDirs: [] as string[] }\n const visit = (value: unknown): 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) visit(item)\n return\n }\n if (!value || typeof value !== 'object') return\n const item = value as Record<string, unknown>\n if ((item.type === 'doc' || item.type === 'ref') && typeof item.id === 'string') filter.ids.add(item.id)\n if (item.type === 'autogenerated' && typeof item.dirName === 'string') filter.autogenDirs.push(item.dirName)\n if (Array.isArray(item.items)) visit(item.items)\n if (item.link && typeof item.link === 'object') visit(item.link)\n for (const child of Object.values(item)) {\n if (Array.isArray(child)) visit(child)\n }\n }\n visit(parseStaticJsObject(raw))\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 sidebarsFile = optionString(config.options, ['sidebarsFile'])\n const sidebarFilter = readSidebars(sidebarsFile ? containedProjectPath(root, sidebarsFile) : undefined)\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 { realpathSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type { HumanCorpusConfig } from '../../config/schema.js'\nimport { slugFromPath } from '../../lib/markdown.js'\nimport { readBoundedText } from '../../lib/bounded-text.js'\nimport { containedProjectPath, 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 projectRoot = realpathSync.native(resolve(root))\n const absRoot = containedProjectPath(root, humanRoot)\n if (!absRoot) return out\n const budget = { used: 0 }\n\n for (const abs of walkFiles(absRoot, { extensions: ['.md', '.mdx'] })) {\n const canonical = realpathSync.native(abs)\n const fileRelative = relative(projectRoot, canonical)\n if (isAbsolute(fileRelative) || fileRelative === '..' || fileRelative.startsWith(`..${sep}`)) continue\n const relToHumanRoot = toPosix(abs.replace(`${toPosix(absRoot)}/`, ''))\n const raw = readBoundedText(abs, budget)\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 {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n type HumanDocRecord,\n} from './core.js'\n\nconst nextraRecordId = (relPath: string, raw: string): string => {\n const frontmatter = parseFrontmatter(raw)\n return frontmatter.package ?? frontmatter.module ?? frontmatter.id ?? (routeSlug(relPath) || 'index')\n}\n\nconst isIndexPage = (path: string): boolean => /(^|[/\\\\])index\\.mdx?$/i.test(path)\n\nconst resolveRouteCollisions = (records: readonly HumanDocRecord[]): HumanDocRecord[] => {\n const byUrl = new Map<string, { readonly record: HumanDocRecord; readonly indexPage: boolean }>()\n for (const record of records) {\n const normalized = { ...record, url: record.url || '/' }\n const indexPage = isIndexPage(record.path)\n const existing = byUrl.get(normalized.url)\n if (!existing || indexPage || !existing.indexPage) {\n byUrl.set(normalized.url, { record: normalized, indexPage })\n }\n }\n return [...byUrl.values()].map(({ record }) => record)\n}\n\nexport const nextraAdapter: HumanAdapter = {\n plugin: 'nextra',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'docsDir', 'root'])\n if (!contentDir) return []\n\n return resolveRouteCollisions(\n scanMarkdownDocs(root, contentDir, {\n idForDoc: nextraRecordId,\n urlPrefix: optionString(config.options, ['urlPrefix', 'contentDirBasePath']) ?? '/',\n }),\n )\n },\n}\n","import { minimatch } from 'minimatch'\n\nimport { optionString, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nconst stringPatterns = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string' && item.length > 0) : []\n\nconst matchesConfiguredPath = (relPath: string, options: Record<string, unknown> | undefined): boolean => {\n const normalize = (pattern: string): string => pattern.replaceAll('\\\\', '/').replace(/^\\.\\//, '')\n const include = stringPatterns(options?.include).map(normalize)\n const exclude = stringPatterns(options?.exclude).map(normalize)\n if (exclude.some((pattern) => minimatch(relPath, pattern, { dot: true }))) return false\n return include.length === 0 || include.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n}\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, {\n urlPrefix: config.options?.urlPrefix,\n includeRelPath: (relPath) => matchesConfiguredPath(relPath, config.options),\n })\n },\n}\n","import { slug as githubSlug } from 'github-slugger'\n\nimport {\n optionString,\n parseFrontmatter,\n routeSlug,\n scanMarkdownDocs,\n type HumanAdapter,\n} from './core.js'\n\nconst isStarlightPage = (relPath: string, raw: string): boolean => {\n if (relPath.split('/').some((part) => part.startsWith('.') || part.startsWith('_'))) return false\n return parseFrontmatter(raw).draft !== 'true'\n}\n\nconst starlightFileSlug = (relPath: string): string =>\n routeSlug(relPath)\n .split('/')\n .map((part) => githubSlug(part))\n .filter(Boolean)\n .join('/')\n\nconst starlightSlug = (relPath: string, raw: string): string => {\n const slug = parseFrontmatter(raw).slug\n return slug ? slug.replace(/^\\/+|\\/+$/g, '') : starlightFileSlug(relPath)\n}\n\nexport const starlightAdapter: HumanAdapter = {\n plugin: 'starlight',\n scan: ({ root, config }) => {\n const contentDir = optionString(config.options, ['contentDir', 'docsDir', 'root'])\n if (!contentDir) return []\n\n return scanMarkdownDocs(root, contentDir, {\n includeRelPath: isStarlightPage,\n slugForDoc: starlightSlug,\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { minimatch } from 'minimatch'\n\nimport { optionString, routeSlug, scanMarkdownDocs, type HumanAdapter } from './core.js'\n\nconst isVitePressPage = (relPath: string): boolean =>\n !relPath.split('/').some((part) => part === '.vitepress' || part.startsWith('.'))\n\nconst srcExcludePatterns = (value: unknown): readonly string[] => {\n if (value === undefined) return []\n if (!Array.isArray(value) || value.length > 64) {\n throw new Error('VitePress srcExclude must be an array of at most 64 glob patterns.')\n }\n return value.map((pattern) => {\n if (typeof pattern !== 'string' || !pattern || pattern.length > 256 || pattern.includes('\\0')) {\n throw new Error('Each VitePress srcExclude pattern must be a non-empty string up to 256 characters.')\n }\n return pattern\n })\n}\n\nconst isExcluded = (relPath: string, patterns: readonly string[]): boolean =>\n patterns.some((pattern) => minimatch(relPath, pattern, { dot: true }))\n\nconst vitepressSlug = (relPath: string, cleanUrls: boolean): string => {\n const slug = routeSlug(relPath)\n if (cleanUrls || /(?:^|\\/)index\\.mdx?$/.test(relPath)) return slug\n return `${slug}.html`\n}\n\nexport const vitepressAdapter: HumanAdapter = {\n plugin: 'vitepress',\n scan: ({ root, config }) => {\n const docsDir = optionString(config.options, ['docsDir', 'root', 'srcDir'])\n if (!docsDir) return []\n const srcExclude = srcExcludePatterns(config.options?.srcExclude)\n\n return scanMarkdownDocs(root, docsDir, {\n includeRelPath: (relPath) => isVitePressPage(relPath) && !isExcluded(relPath, srcExclude),\n slugForDoc: (relPath) => vitepressSlug(relPath, config.options?.cleanUrls === true),\n urlPrefix: config.options?.urlPrefix,\n })\n },\n}\n","import { existsSync, lstatSync, readFileSync, realpathSync } from 'node:fs'\nimport { basename, dirname, isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type { DocBridgeConfigV1 } from '../../config/schema.js'\nimport { detectPackageManager } from '../../lib/package-manager.js'\nimport { toPosix } from '../../lib/paths.js'\nimport { walkFiles } from '../../lib/walk.js'\nimport type { DiscoveredPackage } from './pnpm-monorepo.js'\n\nconst NX_SCAN_SKIP = new Set([\n 'node_modules',\n '.git',\n '.nx',\n 'dist',\n 'coverage',\n '.doc-bridge',\n])\nconst NX_PROJECT_NAME = /^(?:@[A-Za-z0-9._-]+\\/)?[A-Za-z0-9][A-Za-z0-9._-]*$/\n\ntype JsonRecord = Record<string, unknown>\n\nconst isRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst readJsonRecord = (path: string): JsonRecord | undefined => {\n try {\n const parsed: unknown = JSON.parse(readFileSync(path, 'utf8'))\n return isRecord(parsed) ? parsed : undefined\n } catch {\n return undefined\n }\n}\n\nconst safeProjectPath = (\n root: string,\n manifestDir: string,\n declaredRoot?: unknown,\n): string | undefined => {\n const candidate = typeof declaredRoot === 'string' ? resolve(root, declaredRoot) : manifestDir\n const rel = toPosix(relative(root, candidate)) || '.'\n if (isAbsolute(rel) || rel === '..' || rel.startsWith('../')) return undefined\n try {\n if (!lstatSync(candidate).isDirectory()) return undefined\n const canonicalRoot = realpathSync.native(root)\n const canonicalCandidate = realpathSync.native(candidate)\n const canonicalRel = relative(canonicalRoot, canonicalCandidate)\n if (\n isAbsolute(canonicalRel) ||\n canonicalRel === '..' ||\n canonicalRel.startsWith(`..${sep}`)\n ) {\n return undefined\n }\n } catch {\n return undefined\n }\n return rel\n}\n\nconst packageId = (name: string): string =>\n name.startsWith('@') ? (name.split('/').at(-1) ?? name) : name\n\nconst commandPrefix = (root: string): string => {\n const manager = detectPackageManager(root)\n if (manager === 'pnpm') return 'pnpm exec nx run'\n if (manager === 'yarn') return 'yarn nx run'\n if (manager === 'bun') return 'bunx nx run'\n return 'npx nx run'\n}\n\nconst inferredChecks = (\n root: string,\n config: DocBridgeConfigV1,\n projectName: string,\n targets: ReadonlySet<string>,\n): string[] | undefined => {\n const prefix = commandPrefix(root)\n const strict = (config.gates?.preset ?? 'minimal') !== 'minimal'\n const checks = [\n ...(targets.has('test') ? [`${prefix} ${projectName}:test`] : []),\n ...(strict && targets.has('lint') ? [`${prefix} ${projectName}:lint`] : []),\n ]\n return checks.length ? checks : undefined\n}\n\ntype RankedProject = DiscoveredPackage & {\n readonly rank: number\n readonly targets: readonly string[]\n}\n\nexport const discoverNxProjects = (\n root: string,\n config: DocBridgeConfigV1,\n): DiscoveredPackage[] => {\n if (!existsSync(resolve(root, 'nx.json'))) return []\n\n const manifests = walkFiles(root, {\n extensions: ['project.json', 'package.json'],\n skipDirs: NX_SCAN_SKIP,\n maxFiles: 10_000,\n })\n const projects = new Map<string, RankedProject>()\n\n for (const manifest of manifests) {\n const json = readJsonRecord(manifest)\n if (!json) continue\n const manifestDir = dirname(manifest)\n const manifestName = basename(manifest)\n const isProjectJson = manifestName === 'project.json'\n if (!isProjectJson && manifestName !== 'package.json') continue\n const nx = json.nx\n if (!isProjectJson && !isRecord(nx)) continue\n\n const path = safeProjectPath(root, manifestDir, isProjectJson ? json.root : undefined)\n if (!path) continue\n const projectPackage = isProjectJson\n ? readJsonRecord(resolve(root, path, 'package.json'))\n : undefined\n const projectName =\n typeof json.name === 'string'\n ? json.name\n : typeof projectPackage?.name === 'string'\n ? projectPackage.name\n : basename(path === '.' ? root : path)\n if (!NX_PROJECT_NAME.test(projectName)) continue\n\n const targets = new Set<string>()\n const targetRecord = isProjectJson ? json.targets : isRecord(nx) ? nx.targets : undefined\n if (isRecord(targetRecord)) {\n for (const target of Object.keys(targetRecord)) targets.add(target)\n }\n if (!isProjectJson && isRecord(json.scripts)) {\n for (const script of Object.keys(json.scripts)) targets.add(script)\n }\n\n const id = packageId(projectName)\n const rank = isProjectJson ? 2 : 1\n const existing = projects.get(id)\n if (existing && existing.path !== path) {\n throw new Error(\n `Nx project identity collision for \"${id}\": \"${existing.name ?? id}\" at \"${existing.path}\" and \"${projectName}\" at \"${path}\". Use unique Nx project names.`,\n )\n }\n const mergedTargets = [...new Set([...(existing?.targets ?? []), ...targets])]\n const projectJsonWins = rank >= (existing?.rank ?? 0)\n const resolvedName = projectJsonWins ? projectName : (existing?.name ?? projectName)\n const checks = inferredChecks(root, config, resolvedName, new Set(mergedTargets))\n projects.set(id, {\n id,\n path,\n name: resolvedName,\n ...(checks ? { checks } : {}),\n rank: projectJsonWins ? rank : (existing?.rank ?? rank),\n targets: mergedTargets,\n })\n }\n\n return [...projects.values()]\n .sort((a, b) => a.id.localeCompare(b.id))\n .map(({ rank: _rank, targets: _targets, ...project }) => project)\n}\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 readonly checks?: readonly 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 { execFileSync } from 'node:child_process'\nimport { existsSync, readFileSync } from 'node:fs'\nimport { basename, dirname, extname, join, relative, resolve, sep } from 'node:path'\nimport * as ts from 'typescript'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { expandWorkspaceGlobs } from '../lib/glob-expand.js'\nimport { detectPackageManager } from '../lib/package-manager.js'\nimport { toPosix } from '../lib/paths.js'\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { DEFAULT_SAFETY_EXCLUDES, safeWalkFiles } from '../safety/repository.js'\nimport {\n DiscoverySnapshotV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n} from '../schemas/knowledge.js'\n\nconst SOURCE_EXTENSIONS = ['.js', '.jsx', '.mjs', '.cjs', '.ts', '.tsx', '.mts', '.cts'] as const\nconst DOCUMENT_EXTENSIONS = ['.md', '.mdx'] as const\nconst DEFAULT_MAX_FILES = 10_000\nconst EMPTY_HASH = '0'.repeat(64)\n\ntype JsonRecord = Record<string, unknown>\n\ntype PackageInfo = {\n readonly id: string\n readonly name?: string\n readonly path: string\n readonly absPath: string\n readonly manifestPath: string\n readonly manifest: JsonRecord\n}\n\ntype ModuleInfo = {\n readonly absPath: string\n readonly path: string\n readonly entityId: string\n readonly packageId?: string\n}\n\ntype ImportReference = {\n readonly specifier: string\n readonly kind: 'imports' | 're-exports'\n readonly evidence: Evidence\n}\n\ntype DiscoveryOptions = {\n readonly root?: string\n readonly config?: DocBridgeConfigV1\n readonly maxFiles?: number\n readonly maxBytes?: number\n}\n\nconst isRecord = (value: unknown): value is JsonRecord =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst readJson = (path: string): { readonly value?: JsonRecord; readonly error?: string } => {\n try {\n const value: unknown = JSON.parse(readFileSync(path, 'utf8'))\n return isRecord(value) ? { value } : { error: 'JSON root is not an object' }\n } catch (error) {\n return { error: error instanceof Error ? error.message : String(error) }\n }\n}\n\nconst relativePath = (root: string, path: string): string =>\n toPosix(relative(root, path)) || '.'\n\nconst MAX_ID_LENGTH = 256\nconst ID_HASH_LENGTH = 32\n\nconst entityId = (kind: string, value: string): string => {\n const fullId = `${kind}:${value}`\n if (fullId.length <= MAX_ID_LENGTH) return fullId\n\n const suffix = `:${sha256NormalizedV1(fullId).slice(0, ID_HASH_LENGTH)}`\n return `${fullId.slice(0, MAX_ID_LENGTH - suffix.length)}${suffix}`\n}\n\nconst lineEvidence = (\n source: 'code' | 'configuration' | 'documentation',\n root: string,\n path: string,\n lineStart?: number,\n lineEnd?: number,\n): Evidence => ({\n source,\n path: relativePath(root, path),\n ...(lineStart !== undefined ? { lineStart } : {}),\n ...(lineEnd !== undefined ? { lineEnd } : {}),\n})\n\nconst firstLineContaining = (text: string, pattern: string): number | undefined => {\n const line = text.split(/\\r?\\n/).findIndex((value) => value.includes(pattern))\n return line >= 0 ? line + 1 : undefined\n}\n\nconst packageName = (manifest: JsonRecord, fallback: string): string | undefined =>\n typeof manifest.name === 'string' && manifest.name.length > 0 ? manifest.name : fallback || undefined\n\nconst workspacePatterns = (root: string, rootManifest: JsonRecord | undefined): string[] => {\n const fromPackageJson = rootManifest?.workspaces\n if (Array.isArray(fromPackageJson)) return fromPackageJson.filter((value): value is string => typeof value === 'string')\n if (isRecord(fromPackageJson) && Array.isArray(fromPackageJson.packages)) {\n return fromPackageJson.packages.filter((value): value is string => typeof value === 'string')\n }\n\n const workspacePath = join(root, 'pnpm-workspace.yaml')\n if (!existsSync(workspacePath)) return []\n const patterns: string[] = []\n let inPackages = false\n for (const line of readFileSync(workspacePath, 'utf8').split(/\\r?\\n/)) {\n const trimmed = line.trim()\n if (trimmed === 'packages:') {\n inPackages = true\n continue\n }\n if (!inPackages) continue\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 return patterns\n}\n\nconst discoverPackages = (\n root: string,\n rootManifest: JsonRecord | undefined,\n config: DocBridgeConfigV1 | undefined,\n): { readonly packages: readonly PackageInfo[]; readonly coverage: readonly { status: 'complete' | 'partial'; reason?: string }[] } => {\n const packages: PackageInfo[] = []\n const coverage: { status: 'complete' | 'partial'; reason?: string }[] = []\n const rootManifestPath = join(root, 'package.json')\n\n if (rootManifest) {\n const name = packageName(rootManifest, '')\n packages.push({\n id: entityId('package', packageName(rootManifest, 'root') ?? 'root'),\n ...(name ? { name } : {}),\n path: '.',\n absPath: root,\n manifestPath: rootManifestPath,\n manifest: rootManifest,\n })\n }\n\n const configuredPatterns = config?.routing?.options?.packages\n const patterns = configuredPatterns?.length ? [...configuredPatterns] : workspacePatterns(root, rootManifest)\n if (!patterns.length) {\n coverage.push({ status: 'complete' })\n return { packages, coverage }\n }\n\n const dirs = expandWorkspaceGlobs(root, patterns)\n for (const absPath of dirs) {\n const manifestPath = join(absPath, 'package.json')\n if (!existsSync(manifestPath)) continue\n const parsed = readJson(manifestPath)\n if (!parsed.value) {\n coverage.push({ status: 'partial', reason: `${relativePath(root, manifestPath)}: ${parsed.error ?? 'invalid package.json'}` })\n continue\n }\n const path = relativePath(root, absPath)\n const name = packageName(parsed.value, path)\n const id = entityId('package', name ?? path)\n const duplicate = packages.find((pkg) => pkg.id === id)\n if (duplicate && duplicate.absPath !== absPath) {\n throw new Error(`Package identity collision for \"${id}\": \"${duplicate.path}\" and \"${path}\".`)\n }\n if (!duplicate) packages.push({ id, ...(name ? { name } : {}), path, absPath, manifestPath, manifest: parsed.value })\n }\n coverage.push({ status: 'complete' })\n return { packages: packages.sort((a, b) => a.id.localeCompare(b.id)), coverage }\n}\n\nconst packageForModule = (packages: readonly PackageInfo[], absPath: string): PackageInfo | undefined =>\n [...packages]\n .filter((pkg) => absPath === pkg.absPath || absPath.startsWith(`${pkg.absPath}${sep}`))\n .sort((a, b) => b.absPath.length - a.absPath.length)[0]\n\nconst readCompilerOptions = (root: string): { readonly options: ts.CompilerOptions; readonly error?: string } => {\n const configPath = ts.findConfigFile(root, ts.sys.fileExists, 'tsconfig.json')\n if (!configPath) return { options: {} }\n const parsed = ts.readConfigFile(configPath, ts.sys.readFile)\n if (parsed.error) return { options: {}, error: ts.flattenDiagnosticMessageText(parsed.error.messageText, '\\n') }\n const config = ts.parseJsonConfigFileContent(parsed.config, ts.sys, dirname(configPath))\n if (config.errors.length) {\n return {\n options: config.options,\n error: ts.flattenDiagnosticMessageText(config.errors[0]?.messageText ?? 'Invalid tsconfig', '\\n'),\n }\n }\n return { options: config.options }\n}\n\nconst scriptKind = (path: string): ts.ScriptKind => {\n switch (extname(path)) {\n case '.js': return ts.ScriptKind.JS\n case '.jsx': return ts.ScriptKind.JSX\n case '.mjs': return ts.ScriptKind.JS\n case '.cjs': return ts.ScriptKind.JS\n case '.ts': return ts.ScriptKind.TS\n case '.tsx': return ts.ScriptKind.TSX\n case '.mts': return ts.ScriptKind.TS\n case '.cts': return ts.ScriptKind.TS\n default: return ts.ScriptKind.Unknown\n }\n}\n\nconst nodeEvidence = (root: string, path: string, sourceFile: ts.SourceFile, node: ts.Node): Evidence => {\n const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line + 1\n const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line + 1\n return lineEvidence('code', root, path, start, end)\n}\n\nconst isExported = (node: ts.Node): boolean => {\n const modifiers = ts.canHaveModifiers(node) ? ts.getModifiers(node) : undefined\n return modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) ?? false\n}\n\nconst exportedNames = (sourceFile: ts.SourceFile): string[] => {\n const names = new Set<string>()\n const addDeclarationName = (node: ts.Declaration): void => {\n if (!isExported(node)) return\n const name = ts.getNameOfDeclaration(node)\n if (name && ts.isIdentifier(name)) names.add(name.text)\n }\n\n const visit = (node: ts.Node): void => {\n if (ts.isExportDeclaration(node)) {\n if (!node.exportClause) names.add('*')\n else if (ts.isNamedExports(node.exportClause)) {\n for (const element of node.exportClause.elements) names.add(element.name.text)\n }\n } else if (ts.isExportAssignment(node)) {\n names.add('default')\n } else if (\n ts.isClassDeclaration(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isInterfaceDeclaration(node) ||\n ts.isTypeAliasDeclaration(node) ||\n ts.isEnumDeclaration(node) ||\n ts.isModuleDeclaration(node)\n ) {\n addDeclarationName(node)\n } else if (ts.isVariableStatement(node) && isExported(node)) {\n for (const declaration of node.declarationList.declarations) {\n if (ts.isIdentifier(declaration.name)) names.add(declaration.name.text)\n }\n }\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return [...names].sort()\n}\n\nconst moduleReferences = (\n root: string,\n path: string,\n sourceFile: ts.SourceFile,\n): { readonly references: readonly ImportReference[]; readonly exports: readonly string[]; readonly hasDynamic: boolean; readonly hasRuntimeWiring: boolean } => {\n const references: ImportReference[] = []\n let hasDynamic = false\n let hasRuntimeWiring = false\n const addReference = (specifier: ts.StringLiteralLike, kind: ImportReference['kind'], node: ts.Node): void => {\n references.push({ specifier: specifier.text, kind, evidence: nodeEvidence(root, path, sourceFile, node) })\n }\n\n const visit = (node: ts.Node): void => {\n if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n addReference(node.moduleSpecifier, 'imports', node)\n } else if (ts.isExportDeclaration(node) && node.moduleSpecifier && ts.isStringLiteral(node.moduleSpecifier)) {\n addReference(node.moduleSpecifier, 're-exports', node)\n } else if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference) && ts.isStringLiteral(node.moduleReference.expression)) {\n addReference(node.moduleReference.expression, 'imports', node)\n } else if (ts.isCallExpression(node)) {\n if (node.expression.kind === ts.SyntaxKind.ImportKeyword) {\n if (!node.arguments[0] || !ts.isStringLiteralLike(node.arguments[0])) hasDynamic = true\n } else if (ts.isIdentifier(node.expression) && node.expression.text === 'require') {\n const argument = node.arguments[0]\n if (argument && ts.isStringLiteralLike(argument)) addReference(argument, 'imports', node)\n else hasDynamic = true\n } else if (ts.isPropertyAccessExpression(node.expression) && node.expression.name.text === 'register') {\n hasRuntimeWiring = true\n }\n }\n ts.forEachChild(node, visit)\n }\n visit(sourceFile)\n return {\n references,\n exports: exportedNames(sourceFile),\n hasDynamic,\n hasRuntimeWiring,\n }\n}\n\nconst resolveRelativeModule = (specifier: string, containingFile: string, modulePaths: ReadonlyMap<string, ModuleInfo>): ModuleInfo | undefined => {\n const base = resolve(dirname(containingFile), specifier)\n const extension = extname(base)\n const extensionlessBase = extension ? base.slice(0, -extension.length) : base\n const candidates = [\n base,\n ...SOURCE_EXTENSIONS.map((extension) => `${base}${extension}`),\n ...SOURCE_EXTENSIONS.map((extension) => join(base, `index${extension}`)),\n ...SOURCE_EXTENSIONS.map((extension) => `${extensionlessBase}${extension}`),\n ...SOURCE_EXTENSIONS.map((extension) => join(extensionlessBase, `index${extension}`)),\n ]\n return candidates.map((candidate) => modulePaths.get(resolve(candidate))).find(Boolean)\n}\n\nconst resolveReference = (\n reference: ImportReference,\n containingFile: string,\n modules: ReadonlyMap<string, ModuleInfo>,\n packages: readonly PackageInfo[],\n compilerOptions: ts.CompilerOptions,\n): { readonly targetId: string; readonly targetEvidence?: Evidence } | undefined => {\n if (reference.specifier.startsWith('.') || reference.specifier.startsWith('/')) {\n const relativeTarget = resolveRelativeModule(reference.specifier, containingFile, modules)\n return relativeTarget ? { targetId: relativeTarget.entityId } : undefined\n }\n\n const packageTarget = [...packages]\n .filter((pkg) => pkg.name && (reference.specifier === pkg.name || reference.specifier.startsWith(`${pkg.name}/`)))\n .sort((a, b) => (b.name?.length ?? 0) - (a.name?.length ?? 0))[0]\n if (packageTarget) return { targetId: packageTarget.id }\n\n const resolved = ts.resolveModuleName(reference.specifier, containingFile, compilerOptions, ts.sys).resolvedModule?.resolvedFileName\n const resolvedTarget = resolved ? modules.get(resolve(resolved)) : undefined\n if (resolvedTarget) return { targetId: resolvedTarget.entityId }\n\n return { targetId: entityId('external', reference.specifier) }\n}\n\nconst dependencyEntries = (manifest: JsonRecord): readonly { readonly name: string; readonly type: string }[] => {\n const sections = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies']\n return sections.flatMap((type) => {\n const value = manifest[type]\n if (!isRecord(value)) return []\n return Object.keys(value).sort().map((name) => ({ name, type }))\n })\n}\n\nconst sourceRevision = (root: string, files: readonly string[]): { readonly value: string; readonly kind: 'git' | 'content' } => {\n const contentRevision = (): { readonly value: string; readonly kind: 'content' } => ({\n value: sha256NormalizedV1(\n files.map((path) => ({\n path: relativePath(root, path),\n contentHash: sha256NormalizedV1(readFileSync(path, 'utf8')),\n })),\n ),\n kind: 'content',\n })\n\n try {\n const status = execFileSync('git', ['status', '--porcelain', '--untracked-files=all'], {\n cwd: root,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim()\n if (status) return contentRevision()\n const value = execFileSync('git', ['rev-parse', 'HEAD'], { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim()\n if (value) return { value, kind: 'git' }\n } catch {\n // Not a Git checkout.\n }\n return contentRevision()\n}\n\nconst hasPackageManagerMetadata = (root: string, rootManifest: JsonRecord | undefined): boolean =>\n Boolean(\n rootManifest?.packageManager ||\n existsSync(join(root, 'pnpm-lock.yaml')) ||\n existsSync(join(root, 'pnpm-workspace.yaml')) ||\n existsSync(join(root, 'yarn.lock')) ||\n existsSync(join(root, 'bun.lock')) ||\n existsSync(join(root, 'bun.lockb')) ||\n existsSync(join(root, 'package-lock.json')),\n )\n\nconst artifact = (root: string, config: DocBridgeConfigV1 | undefined, files: readonly string[], entities: readonly KnowledgeEntity[], relations: readonly KnowledgeRelation[], coverage: DiscoverySnapshotV1['coverage']): DiscoverySnapshotV1 => {\n const revision = sourceRevision(root, files)\n const base = {\n type: 'discovery-snapshot' as const,\n schemaVersion: 1 as const,\n contentHash: EMPTY_HASH,\n contentHashAlgo: 'sha256-normalized-v1' as const,\n project: { name: (entities.find((entity) => entity.kind === 'package' && entity.path === '.')?.name ?? basename(root)), root: '.' },\n sourceRevision: revision.value,\n sourceRevisionKind: revision.kind,\n configurationHash: sha256NormalizedV1(config ?? {}),\n pipelineVersion: '1.0.0',\n analyzerVersions: { repository: '1.0.0', 'js-ts': '1.0.0' },\n entities: [...entities].sort((a, b) => a.id.localeCompare(b.id)),\n relations: [...relations].sort((a, b) => a.id.localeCompare(b.id)),\n coverage: [...coverage],\n }\n return DiscoverySnapshotV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) })\n}\n\nexport const discoverRepository = (opts: DiscoveryOptions = {}): DiscoverySnapshotV1 => {\n const root = resolve(opts.root ?? process.cwd())\n const safety = opts.config?.safety\n const maxFiles = opts.maxFiles ?? safety?.maxFiles ?? DEFAULT_MAX_FILES\n const maxBytes = opts.maxBytes ?? safety?.maxBytes\n const safeOptions = {\n exclude: [...DEFAULT_SAFETY_EXCLUDES, ...(safety?.exclude ?? [])],\n maxFiles,\n ...(maxBytes !== undefined ? { maxBytes } : {}),\n ...(safety?.maxTimeMs !== undefined ? { maxTimeMs: safety.maxTimeMs } : {}),\n ...(safety?.maxMemoryMb !== undefined ? { maxMemoryMb: safety.maxMemoryMb } : {}),\n }\n const rootManifestPath = join(root, 'package.json')\n const rootManifest = readJson(rootManifestPath).value\n const packageResult = discoverPackages(root, rootManifest, opts.config)\n const sourceWalk = safeWalkFiles(root, { extensions: SOURCE_EXTENSIONS, ...safeOptions })\n const documentWalk = safeWalkFiles(root, { extensions: DOCUMENT_EXTENSIONS, ...safeOptions })\n const configWalk = safeWalkFiles(root, { extensions: ['.json', '.yaml', '.yml', '.js', '.ts'], ...safeOptions })\n const sourcePaths = sourceWalk.files\n const documentPaths = documentWalk.files\n const configPaths = configWalk.files\n .filter((path) => /(?:^|\\/)(?:tsconfig|jsconfig|vite\\.config|webpack\\.config|rollup\\.config|next\\.config|jest\\.config|eslint\\.config|vitest\\.config)/.test(relativePath(root, path)))\n const allFiles = [...new Set([rootManifestPath, ...sourcePaths, ...documentPaths, ...configPaths].filter(existsSync))].sort()\n\n const entities = new Map<string, KnowledgeEntity>()\n const relations = new Map<string, KnowledgeRelation>()\n const addEntity = (entity: KnowledgeEntity): void => {\n const existing = entities.get(entity.id)\n if (existing && (existing.kind !== entity.kind || existing.path !== entity.path)) throw new Error(`Entity identity collision for \"${entity.id}\".`)\n entities.set(entity.id, existing ?? entity)\n }\n const addRelation = (relation: KnowledgeRelation): void => {\n const existing = relations.get(relation.id)\n if (!existing) {\n relations.set(relation.id, relation)\n return\n }\n const evidence = new Map(\n [...existing.evidence, ...relation.evidence].map((item) => [\n `${item.path}:${item.lineStart ?? ''}:${item.lineEnd ?? ''}:${item.source}`,\n item,\n ]),\n )\n relations.set(relation.id, { ...existing, evidence: [...evidence.values()] })\n }\n\n for (const pkg of packageResult.packages) {\n const text = readFileSync(pkg.manifestPath, 'utf8')\n addEntity({ id: pkg.id, kind: 'package', name: pkg.name ?? pkg.path, path: pkg.path, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, '\"name\"'))] })\n }\n\n const modules = new Map<string, ModuleInfo>()\n for (const absPath of sourcePaths) {\n const path = relativePath(root, absPath)\n const pkg = packageForModule(packageResult.packages, absPath)\n const id = entityId('module', path)\n const text = readFileSync(absPath, 'utf8')\n const sourceFile = ts.createSourceFile(absPath, text, ts.ScriptTarget.Latest, true, scriptKind(absPath))\n const exports = exportedNames(sourceFile)\n modules.set(resolve(absPath), { absPath, path, entityId: id, ...(pkg ? { packageId: pkg.id } : {}) })\n addEntity({ id, kind: 'module', name: basename(absPath), path, provenance: 'observed', evidence: [lineEvidence('code', root, absPath, 1, sourceFile.getLineAndCharacterOfPosition(sourceFile.getEnd()).line + 1)], ...(exports.length ? { metadata: { exports, test: /(?:\\.test|\\.spec|__tests__)/.test(path) } } : {}) })\n if (pkg) addRelation({ id: entityId('relation', `${pkg.id}:contains:${id}`), kind: 'contains', from: pkg.id, to: id, provenance: 'observed', evidence: [lineEvidence('code', root, absPath, 1)] })\n }\n\n for (const absPath of documentPaths) {\n const path = relativePath(root, absPath)\n addEntity({ id: entityId('document', path), kind: 'document', name: basename(absPath), path, provenance: 'observed', evidence: [lineEvidence('documentation', root, absPath, 1)] })\n }\n\n const compiler = readCompilerOptions(root)\n const coverage: DiscoverySnapshotV1['coverage'] = [\n ...[sourceWalk, documentWalk, configWalk].flatMap((walk, index) => walk.incomplete ? [{ analyzer: 'repository', scope: `limits:${['source', 'documentation', 'configuration'][index]}`, status: 'partial' as const, reason: walk.reason }] : []),\n { analyzer: 'repository', scope: 'package-manager', status: hasPackageManagerMetadata(root, rootManifest) ? 'complete' : 'partial', ...(!hasPackageManagerMetadata(root, rootManifest) ? { reason: `No package manager metadata found; default helper would fall back to ${detectPackageManager(root)}.` } : {}) },\n { analyzer: 'repository', scope: 'workspace-packages', status: packageResult.coverage.some((item) => item.status === 'partial') ? 'partial' : 'complete', ...(packageResult.coverage.find((item) => item.reason)?.reason ? { reason: packageResult.coverage.find((item) => item.reason)?.reason } : {}) },\n { analyzer: 'js-ts', scope: 'static-imports-and-exports', status: compiler.error ? 'partial' : 'complete', ...(compiler.error ? { reason: compiler.error } : {}) },\n { analyzer: 'js-ts', scope: 'dynamic-imports', status: 'not-analyzed', reason: 'Dynamic import expressions and non-literal require calls are not resolved.' },\n { analyzer: 'js-ts', scope: 'runtime-wiring', status: 'not-analyzed', reason: 'Reflection, dependency injection and runtime wiring are not inferred.' },\n { analyzer: 'js-ts', scope: 'generated-code', status: 'not-analyzed', reason: 'Generated code is not interpreted as source architecture.' },\n ]\n\n for (const pkg of packageResult.packages) {\n const text = readFileSync(pkg.manifestPath, 'utf8')\n for (const dependency of dependencyEntries(pkg.manifest)) {\n const target = packageResult.packages.find((candidate) => candidate.name === dependency.name)?.id ?? entityId('external', dependency.name)\n if (!entities.has(target)) addEntity({ id: target, kind: 'external', name: dependency.name, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, `\"${dependency.name}\"`))] })\n addRelation({ id: entityId('relation', `${pkg.id}:depends-on:${target}:${dependency.type}`), kind: 'depends-on', from: pkg.id, to: target, provenance: 'observed', evidence: [lineEvidence('configuration', root, pkg.manifestPath, firstLineContaining(text, `\"${dependency.name}\"`))], metadata: { dependencyType: dependency.type } })\n }\n }\n\n for (const module of modules.values()) {\n const text = readFileSync(module.absPath, 'utf8')\n const sourceFile = ts.createSourceFile(module.absPath, text, ts.ScriptTarget.Latest, true, scriptKind(module.absPath))\n const references = moduleReferences(root, module.absPath, sourceFile)\n for (const reference of references.references) {\n const target = resolveReference(reference, module.absPath, modules, packageResult.packages, compiler.options)\n if (!target) continue\n if (!entities.has(target.targetId)) {\n const externalName = target.targetId.replace(/^external:/, '')\n addEntity({ id: target.targetId, kind: 'external', name: externalName, provenance: 'observed', evidence: [reference.evidence] })\n }\n addRelation({ id: entityId('relation', `${module.entityId}:${reference.kind}:${target.targetId}`), kind: reference.kind, from: module.entityId, to: target.targetId, provenance: 'observed', evidence: [reference.evidence] })\n }\n if (references.hasDynamic) coverage.push({ analyzer: 'js-ts', scope: `dynamic-imports:${module.path}`, status: 'not-analyzed', reason: 'A dynamic import or non-literal require was found.', evidence: [lineEvidence('code', root, module.absPath)] })\n if (references.hasRuntimeWiring) coverage.push({ analyzer: 'js-ts', scope: `runtime-wiring:${module.path}`, status: 'not-analyzed', reason: 'A possible runtime registration/wiring call was found.', evidence: [lineEvidence('code', root, module.absPath)] })\n }\n\n return artifact(root, opts.config, allFiles, [...entities.values()], [...relations.values()], coverage)\n}\n\nexport type { DiscoveryOptions }\n","import { lstatSync, readdirSync, realpathSync, statSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport { minimatch } from 'minimatch'\n\nexport const DEFAULT_SAFETY_EXCLUDES = ['**/.git/**', '**/node_modules/**', '**/dist/**', '**/build/**', '**/coverage/**', '**/.doc-bridge/**', '**/.turbo/**', '**/.env', '**/.env.*', '**/*secret*', '**/*credential*', '**/*.pem', '**/*.key'] as const\n\nexport type SafeWalkOptions = {\n readonly extensions?: readonly string[]\n readonly exclude?: readonly string[]\n readonly maxFiles?: number\n readonly maxBytes?: number\n readonly maxTimeMs?: number\n readonly maxMemoryMb?: number\n}\n\nexport type SafeWalkResult = {\n readonly files: readonly string[]\n readonly incomplete: boolean\n readonly reason?: string\n}\n\nexport const containedPath = (root: string, candidate: string): string | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const unresolved = resolve(projectRoot, candidate)\n const unresolvedRelative = relative(projectRoot, unresolved)\n if (isAbsolute(unresolvedRelative) || unresolvedRelative === '..' || unresolvedRelative.startsWith(`..${sep}`)) return undefined\n try {\n const canonical = realpathSync.native(unresolved)\n const canonicalRelative = relative(projectRoot, canonical)\n return isAbsolute(canonicalRelative) || canonicalRelative === '..' || canonicalRelative.startsWith(`..${sep}`) ? undefined : canonical\n } catch {\n return unresolved\n }\n}\n\nexport const safeWalkFiles = (root: string, options: SafeWalkOptions = {}): SafeWalkResult => {\n const projectRoot = resolve(root)\n const extensions = options.extensions ?? []\n const excludes = options.exclude ?? DEFAULT_SAFETY_EXCLUDES\n const files: string[] = []\n let bytes = 0\n let reason: string | undefined\n const started = Date.now()\n const matchesExclude = (path: string): boolean => excludes.some((pattern) => minimatch(path, pattern, { dot: true }))\n const visit = (directory: string): void => {\n if (reason) return\n if (options.maxTimeMs !== undefined && Date.now() - started >= options.maxTimeMs) { reason = `Repository scan exceeded the ${options.maxTimeMs} ms time limit.`; return }\n if (options.maxMemoryMb !== undefined && process.memoryUsage().heapUsed > options.maxMemoryMb * 1024 * 1024) { reason = `Repository scan exceeded the ${options.maxMemoryMb} MiB memory limit.`; return }\n let entries: string[]\n try { entries = readdirSync(directory) } catch { return }\n for (const name of entries.sort()) {\n const absolute = resolve(directory, name)\n const relativePath = relative(projectRoot, absolute).split(sep).join('/')\n if (matchesExclude(relativePath) || name === '.git') continue\n let stats\n try { stats = lstatSync(absolute) } catch { continue }\n if (stats.isSymbolicLink()) continue\n if (stats.isDirectory()) { visit(absolute); if (reason) return; continue }\n if (!stats.isFile() || (extensions.length > 0 && !extensions.some((extension) => name.endsWith(extension)))) continue\n if (files.length >= (options.maxFiles ?? 10_000)) { reason = `Repository scan exceeded the ${options.maxFiles ?? 10_000} file limit.`; return }\n bytes += statSync(absolute).size\n if (options.maxBytes !== undefined && bytes > options.maxBytes) { reason = `Repository scan exceeded the ${options.maxBytes} byte limit.`; return }\n files.push(absolute)\n }\n }\n visit(projectRoot)\n return { files: files.sort(), incomplete: reason !== undefined, ...(reason ? { reason } : {}) }\n}\n\nconst SECRET_PATTERNS = [\n /\\b(?:sk|pk)[_-](?:live|test)[_-][A-Za-z0-9_-]{12,}\\b/g,\n /\\b(?:ghp|github_pat|xox[baprs])_[A-Za-z0-9_-]{12,}\\b/g,\n /\\bAKIA[0-9A-Z]{16}\\b/g,\n /(?:password|passwd|secret|token|api[_-]?key)\\s*[:=]\\s*[\"']?[^\\s,\"']+/gi,\n]\n\nexport const redactSecrets = (value: string): string => SECRET_PATTERNS.reduce((result, pattern) => result.replace(pattern, '[REDACTED]'), value)\n\nexport const redactValue = (value: unknown): unknown => Array.isArray(value)\n ? value.map(redactValue)\n : value && typeof value === 'object'\n ? Object.fromEntries(Object.entries(value as Record<string, unknown>).map(([key, item]) => [key, redactValue(item)]))\n : typeof value === 'string' ? redactSecrets(value) : value\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { z } from 'zod'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport { AgentProposalV1Schema, type AgentProposalV1, type DiscoverySnapshotV1, type ReconciliationReportV1 } from '../schemas/knowledge.js'\nimport { contentHashForArtifactV1 } from '../index-builder/content-hash.js'\nimport { containedPath, redactValue } from '../safety/repository.js'\n\nexport const DEFAULT_REGISTRY_AGENT_ID = 'ecosystem-doc-bridge-corpus-scanner'\n\nconst RegistryAgentMetadataSchema = z.object({\n id: z.string().min(1).max(256),\n version: z.string().min(1).max(64),\n provider: z.string().min(1).max(128).optional(),\n model: z.string().min(1).max(256).optional(),\n capabilities: z.array(z.string().min(1).max(128)).max(32).default([]),\n}).strict()\n\nexport type RegistryAgentMetadata = z.infer<typeof RegistryAgentMetadataSchema> & { readonly root: string }\n\nexport type RegistryAgentContext = {\n readonly snapshot: DiscoverySnapshotV1\n readonly report: ReconciliationReportV1\n readonly evidence: readonly ReconciliationReportV1['diagnostics'][number]['evidence'][number][]\n readonly capabilities: readonly ['snapshot.read', 'evidence.read', 'proposal.write']\n readonly network: false\n readonly shell: false\n}\n\nexport type RegistryAgentRunner = (context: RegistryAgentContext) => Promise<unknown> | unknown\n\nexport type RegistryAgentAdapter = {\n readonly metadata: RegistryAgentMetadata\n readonly run: (snapshot: DiscoverySnapshotV1, report: ReconciliationReportV1, evidence?: readonly RegistryAgentContext['evidence'][number][]) => Promise<AgentProposalV1>\n}\n\nconst deepFreeze = <T>(value: T): T => {\n if (value && typeof value === 'object' && !Object.isFrozen(value)) {\n Object.freeze(value)\n for (const child of Object.values(value as Record<string, unknown>)) deepFreeze(child)\n }\n return value\n}\n\nconst registryConfig = (config: DocBridgeConfigV1) => config.intelligence?.registry\n\nexport const loadRegistryAgentRunner = async (root: string, config: DocBridgeConfigV1): Promise<RegistryAgentRunner> => {\n const metadata = loadRegistryAgentMetadata(root, config)\n const configured = registryConfig(config)?.runnerModule\n const modulePath = configured ? containedPath(root, configured) : containedPath(root, join(metadata.root, 'doc-bridge-adapter.js'))\n if (!modulePath || !existsSync(modulePath)) throw new Error(`Registry agent \"${metadata.id}\" has no local runner module. Configure intelligence.registry.runnerModule or add doc-bridge-adapter.js to the installed agent.`)\n const loaded = await import(pathToFileURL(modulePath).href) as { default?: unknown; run?: unknown }\n const runner = typeof loaded.run === 'function' ? loaded.run : typeof loaded.default === 'function' ? loaded.default : loaded.default && typeof loaded.default === 'object' && 'run' in loaded.default && typeof loaded.default.run === 'function' ? loaded.default.run : undefined\n if (!runner) throw new Error(`Registry agent runner at ${modulePath} must export a function or { run }. `)\n return runner as RegistryAgentRunner\n}\n\nexport const loadRegistryAgentMetadata = (root: string, config: DocBridgeConfigV1): RegistryAgentMetadata => {\n const settings = registryConfig(config)\n const id = settings?.agentId ?? DEFAULT_REGISTRY_AGENT_ID\n const agentRoot = settings?.agentRoot ?? 'agents'\n const agentPath = containedPath(root, join(agentRoot, id))\n if (!agentPath || !existsSync(agentPath)) throw new Error(`AgentsKit Registry agent \"${id}\" is not installed at ${join(agentRoot, id)}. Install it with: npx agentskit add ${id}`)\n const metadataPath = [join(agentPath, 'agent.json'), join(agentPath, 'manifest.json')].find(existsSync)\n if (!metadataPath) throw new Error(`Registry agent \"${id}\" is installed but has no agent.json or manifest.json metadata.`)\n const metadata = RegistryAgentMetadataSchema.parse(JSON.parse(readFileSync(metadataPath, 'utf8')) as unknown)\n if (metadata.id !== id) throw new Error(`Installed Registry agent metadata id \"${metadata.id}\" does not match configured id \"${id}\".`)\n return { ...metadata, root: agentPath }\n}\n\nexport const createRegistryAgentAdapter = (root: string, config: DocBridgeConfigV1, runner: RegistryAgentRunner): RegistryAgentAdapter => {\n if (!registryConfig(config)?.enabled) throw new Error('Registry agents are disabled. Set intelligence.registry.enabled: true to run an assisted workflow.')\n const metadata = loadRegistryAgentMetadata(resolve(root), config)\n return {\n metadata,\n run: async (snapshot, report, evidence = report.diagnostics.flatMap((diagnostic) => diagnostic.evidence).slice(0, 64)) => {\n const context = deepFreeze({ snapshot: redactValue(snapshot), report: redactValue(report), evidence: redactValue(evidence), capabilities: ['snapshot.read', 'evidence.read', 'proposal.write'] as const, network: false as const, shell: false as const }) as RegistryAgentContext\n const proposal = AgentProposalV1Schema.parse(await runner(context))\n if (proposal.contentHash !== contentHashForArtifactV1(proposal)) throw new Error('Registry agent proposal contentHash does not match its canonical contents.')\n if (proposal.baseSnapshotHash !== snapshot.contentHash || proposal.baseReportHash !== report.contentHash) throw new Error('Registry agent proposal is not based on the supplied snapshot/report hashes.')\n if (proposal.origin.kind !== 'registry-agent' || proposal.origin.id !== metadata.id) throw new Error(`Registry agent proposal origin must be ${metadata.id}.`)\n return proposal\n },\n }\n}\n\nexport const persistRegistryAgentProposal = (stateDir: string, proposal: AgentProposalV1): string => {\n AgentProposalV1Schema.parse(proposal)\n if (proposal.contentHash !== contentHashForArtifactV1(proposal)) throw new Error('Cannot persist a Registry agent proposal with an invalid contentHash.')\n const safeHash = contentHashForArtifactV1(proposal)\n mkdirSync(join(resolve(stateDir), 'agents'), { recursive: true })\n const path = join(resolve(stateDir), 'agents', `${proposal.origin.id}-${safeHash}.json`)\n writeFileSync(path, `${JSON.stringify(proposal, null, 2)}\\n`, 'utf8')\n return path\n}\n","import { contentHashForArtifactV1 } from '../index-builder/content-hash.js'\nimport {\n DiscoverySnapshotV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n} from '../schemas/knowledge.js'\n\nexport type DocumentationDiagnostic = {\n readonly code: string\n readonly message: string\n readonly path: string\n readonly evidence: Evidence\n}\n\nexport type DocumentationDeclarationInput = {\n readonly path: string\n readonly content: string\n}\n\nexport type DocumentationDeclarationOptions = {\n readonly snapshot: Pick<DiscoverySnapshotV1, 'entities'>\n readonly documentId?: string\n}\n\nexport type DocumentationDeclarationResult = {\n readonly hasDocbridge: boolean\n readonly entities: readonly KnowledgeEntity[]\n readonly relations: readonly KnowledgeRelation[]\n readonly diagnostics: readonly DocumentationDiagnostic[]\n}\n\nexport type DocumentationAnalysisResult = {\n readonly snapshot: DiscoverySnapshotV1\n readonly diagnostics: readonly DocumentationDiagnostic[]\n}\n\ntype RelationFields = {\n from?: string\n to?: string\n kind?: string\n detection?: string\n startLine: number\n endLine: number\n fields: Set<string>\n}\n\nconst detectionValues = new Set(['static', 'dynamic', 'external'])\n\nconst evidence = (path: string, lineStart: number, lineEnd = lineStart): Evidence => ({\n source: 'documentation',\n path,\n lineStart,\n lineEnd,\n})\n\nconst diagnostic = (\n path: string,\n code: string,\n message: string,\n lineStart: number,\n lineEnd = lineStart,\n): DocumentationDiagnostic => ({ code, message, path: 'docbridge', evidence: evidence(path, lineStart, lineEnd) })\n\nconst scalar = (value: string): string => {\n const trimmed = value.trim()\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) || (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1)\n }\n return trimmed\n}\n\nconst list = (value: string): string[] | undefined => {\n const trimmed = value.trim()\n if (!trimmed.startsWith('[') || !trimmed.endsWith(']')) return undefined\n const body = trimmed.slice(1, -1).trim()\n return body ? body.split(',').map(scalar).filter(Boolean) : []\n}\n\nconst findFrontmatter = (content: string): { readonly lines: readonly string[]; readonly end: number } | undefined => {\n const lines = content.replace(/^\\uFEFF/, '').split(/\\r?\\n/)\n if (lines[0] !== '---') return undefined\n const end = lines.findIndex((line, index) => index > 0 && line === '---')\n return end < 0 ? undefined : { lines, end }\n}\n\nconst addDiagnostic = (\n diagnostics: DocumentationDiagnostic[],\n input: DocumentationDeclarationInput,\n code: string,\n message: string,\n line: number,\n endLine = line,\n): void => {\n diagnostics.push(diagnostic(input.path, code, message, line, endLine))\n}\n\nconst resolveEntity = (\n reference: string,\n entities: readonly KnowledgeEntity[],\n input: DocumentationDeclarationInput,\n lineStart: number,\n unresolved: Map<string, KnowledgeEntity>,\n): KnowledgeEntity => {\n const resolved = entities.find((entity) => entity.id === reference || entity.aliases?.includes(reference))\n if (resolved) return resolved\n const id = `unresolved:${reference}`\n const existing = unresolved.get(id)\n if (existing) return existing\n const entity: KnowledgeEntity = {\n id,\n kind: 'unresolved-reference',\n name: reference,\n provenance: 'declared',\n evidence: [evidence(input.path, lineStart)],\n }\n unresolved.set(id, entity)\n return entity\n}\n\nconst relationKey = (from: string, to: string, kind: string): string => `${from}\\u0000${to}\\u0000${kind}`\n\nconst parseBlock = (\n input: DocumentationDeclarationInput,\n): { readonly covers: readonly { value: string; line: number }[]; readonly relations: readonly RelationFields[]; readonly diagnostics: readonly DocumentationDiagnostic[]; readonly hasDocbridge: boolean } => {\n const frontmatter = findFrontmatter(input.content)\n if (!frontmatter) {\n if (input.content.replace(/^\\uFEFF/, '').startsWith('---')) {\n return {\n covers: [],\n relations: [],\n hasDocbridge: true,\n diagnostics: [diagnostic(input.path, 'DOCBRIDGE_FRONTMATTER_MALFORMED', 'Frontmatter must close with a line containing only ---.', 1)],\n }\n }\n return { covers: [], relations: [], diagnostics: [], hasDocbridge: false }\n }\n\n const { lines, end } = frontmatter\n const docbridgeLine = lines.findIndex((line, index) => index > 0 && index < end && /^docbridge\\s*:/.test(line))\n if (docbridgeLine < 0) return { covers: [], relations: [], diagnostics: [], hasDocbridge: false }\n\n const diagnostics: DocumentationDiagnostic[] = []\n const covers: { value: string; line: number }[] = []\n const relations: RelationFields[] = []\n const inline = lines[docbridgeLine]?.slice('docbridge:'.length).trim() ?? ''\n if (inline && inline !== '{}') addDiagnostic(diagnostics, input, 'DOCBRIDGE_BLOCK_MALFORMED', 'docbridge must be a nested frontmatter object.', docbridgeLine + 1)\n\n let section: 'covers' | 'relations' | undefined\n let current: RelationFields | undefined\n const finishRelation = (): void => {\n if (current) relations.push(current)\n current = undefined\n }\n\n for (let index = docbridgeLine + 1; index < end; index += 1) {\n const raw = lines[index] ?? ''\n const trimmed = raw.trim()\n const line = index + 1\n if (!trimmed || trimmed.startsWith('#')) continue\n if (/\\t/.test(raw)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_INDENTATION_INVALID', 'docbridge indentation must use spaces.', line)\n continue\n }\n if (!raw.startsWith(' ')) {\n finishRelation()\n section = undefined\n continue\n }\n if (/^ {2}[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(raw)) {\n finishRelation()\n const match = /^ {2}([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n const key = match?.[1]\n const value = match?.[2] ?? ''\n if (key !== 'covers' && key !== 'relations') {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_UNKNOWN', `Unknown docbridge field: ${key ?? '(missing)'}.`, line)\n section = undefined\n } else if (key === 'covers') {\n section = 'covers'\n if (value) {\n const values = list(value)\n if (!values) addDiagnostic(diagnostics, input, 'DOCBRIDGE_COVERS_INVALID', 'covers must be a list of entity references.', line)\n else values.forEach((item) => covers.push({ value: item, line }))\n }\n } else {\n section = 'relations'\n if (value) addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATIONS_INVALID', 'relations must be a list of relation objects.', line)\n }\n continue\n }\n if (section === 'covers' && /^ {4}-\\s*/.test(raw)) {\n const value = scalar(raw.replace(/^ {4}-\\s*/, ''))\n if (!value) addDiagnostic(diagnostics, input, 'DOCBRIDGE_REFERENCE_MISSING', 'covers entries must not be empty.', line)\n else covers.push({ value, line })\n continue\n }\n if (section === 'relations' && /^ {4}-\\s*/.test(raw)) {\n finishRelation()\n const firstField = /^ {4}-\\s*([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n current = { startLine: line, endLine: line, fields: new Set() }\n if (firstField?.[1]) {\n current.fields.add(firstField[1])\n current[firstField[1] as 'from' | 'to' | 'kind' | 'detection'] = scalar(firstField[2] ?? '')\n } else if (raw.replace(/^ {4}-\\s*/, '').trim()) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATION_INVALID', 'Relation entries must be field mappings.', line)\n }\n continue\n }\n if (section === 'relations' && current && /^ {6}[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(raw)) {\n const field = /^ {6}([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(raw)\n const key = field?.[1]\n current.endLine = line\n if (!key || !['from', 'to', 'kind', 'detection'].includes(key)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_UNKNOWN', `Unknown relation field: ${key ?? '(missing)'}.`, line)\n } else if (current.fields.has(key)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_FIELD_DUPLICATE', `Duplicate relation field: ${key}.`, line)\n } else {\n current.fields.add(key)\n current[key as 'from' | 'to' | 'kind' | 'detection'] = scalar(field?.[2] ?? '')\n }\n continue\n }\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_STRUCTURE_INVALID', `Invalid docbridge structure at line ${line}.`, line)\n }\n finishRelation()\n return { covers, relations, diagnostics, hasDocbridge: true }\n}\n\nexport const parseDocumentationDeclarations = (\n input: DocumentationDeclarationInput,\n options: DocumentationDeclarationOptions,\n): DocumentationDeclarationResult => {\n const parsed = parseBlock(input)\n if (!parsed.hasDocbridge) return { hasDocbridge: false, entities: [], relations: [], diagnostics: [] }\n const diagnostics = [...parsed.diagnostics]\n const unresolved = new Map<string, KnowledgeEntity>()\n const relations: KnowledgeRelation[] = []\n const documentId = options.documentId ?? `document:${input.path}`\n const relationClaims = new Map<string, string>()\n\n if (!parsed.covers.length && !parsed.relations.length) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_CONTENT_MISSING', 'docbridge must declare covers or relations.', 1)\n }\n\n for (const [index, cover] of parsed.covers.entries()) {\n const target = resolveEntity(cover.value, options.snapshot.entities, input, cover.line, unresolved)\n relations.push({\n id: `relation:declared:${input.path}:covers:${index}`,\n kind: 'covers',\n from: documentId,\n to: target.id,\n provenance: 'declared',\n evidence: [evidence(input.path, cover.line)],\n })\n }\n\n for (const [index, declaration] of parsed.relations.entries()) {\n const basePath = `relations[${index}]`\n const missing = (['from', 'to', 'kind', 'detection'] as const).filter((field) => !declaration[field])\n if (missing.length) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_RELATION_FIELD_MISSING', `Relation is missing required field(s): ${missing.join(', ')}.`, declaration.startLine, declaration.endLine)\n continue\n }\n const from = declaration.from as string\n const to = declaration.to as string\n const kind = declaration.kind as string\n const detection = declaration.detection as string\n if (!detectionValues.has(detection)) {\n addDiagnostic(diagnostics, input, 'DOCBRIDGE_DETECTION_INVALID', `Invalid relation detection: ${detection}.`, declaration.startLine, declaration.endLine)\n continue\n }\n const fromEntity = resolveEntity(from, options.snapshot.entities, input, declaration.startLine, unresolved)\n const toEntity = resolveEntity(to, options.snapshot.entities, input, declaration.startLine, unresolved)\n const key = relationKey(fromEntity.id, toEntity.id, kind)\n const previousDetection = relationClaims.get(key)\n if (previousDetection === detection) addDiagnostic(diagnostics, input, 'DOCBRIDGE_DECLARATION_DUPLICATE', 'Duplicate relation declaration.', declaration.startLine, declaration.endLine)\n if (previousDetection && previousDetection !== detection) addDiagnostic(diagnostics, input, 'DOCBRIDGE_DECLARATION_CONFLICT', 'Conflicting relation declarations use different detection values.', declaration.startLine, declaration.endLine)\n relationClaims.set(key, previousDetection ?? detection)\n relations.push({\n id: `relation:declared:${input.path}:${basePath}`,\n kind,\n from: fromEntity.id,\n to: toEntity.id,\n discriminator: detection,\n provenance: 'declared',\n evidence: [evidence(input.path, declaration.startLine, declaration.endLine)],\n metadata: { detection },\n })\n }\n\n return {\n hasDocbridge: true,\n entities: [...unresolved.values()].sort((a, b) => a.id.localeCompare(b.id)),\n relations,\n diagnostics,\n }\n}\n\nexport const applyDocumentationDeclarations = (\n snapshot: DiscoverySnapshotV1,\n documents: readonly DocumentationDeclarationInput[],\n): DocumentationAnalysisResult => {\n const entities = new Map(snapshot.entities.map((entity) => [entity.id, entity]))\n const relations = new Map(snapshot.relations.map((relation) => [relation.id, relation]))\n const diagnostics: DocumentationDiagnostic[] = []\n\n for (const document of documents) {\n const result = parseDocumentationDeclarations(document, { snapshot })\n diagnostics.push(...result.diagnostics)\n for (const entity of result.entities) entities.set(entity.id, entity)\n for (const relation of result.relations) relations.set(relation.id, relation)\n }\n\n const base = { ...snapshot, contentHash: '0'.repeat(64), entities: [...entities.values()], relations: [...relations.values()] }\n return {\n snapshot: DiscoverySnapshotV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) }),\n diagnostics,\n }\n}\n","import { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport {\n ReconciliationReportV1Schema,\n type DiscoverySnapshotV1,\n type Evidence,\n type KnowledgeEntity,\n type KnowledgeRelation,\n type ReconciliationReportV1,\n} from '../schemas/knowledge.js'\n\ntype EntityResolver = (reference: string) => string\n\nconst ignoredDocumentationRelations = new Set(['covers'])\n\nconst metadataDetection = (relation: KnowledgeRelation): string | undefined => {\n const detection = relation.metadata?.detection\n return typeof detection === 'string' ? detection : undefined\n}\n\nconst relationDetection = (relation: KnowledgeRelation): string =>\n relation.discriminator ?? metadataDetection(relation) ?? 'static'\n\nconst entityResolver = (snapshots: readonly DiscoverySnapshotV1[]): EntityResolver => {\n const references = new Map<string, string>()\n const entities = snapshots.flatMap((snapshot) => snapshot.entities).sort((a, b) => a.id.localeCompare(b.id))\n for (const entity of entities) {\n references.set(entity.id, entity.id)\n for (const alias of entity.aliases ?? []) {\n if (!references.has(alias)) references.set(alias, entity.id)\n }\n }\n return (reference) => references.get(reference) ?? reference\n}\n\nconst relationBase = (relation: KnowledgeRelation, resolveEntity: EntityResolver): string =>\n `${resolveEntity(relation.from)}\\u0000${resolveEntity(relation.to)}\\u0000${relation.kind}`\n\nconst evidenceKey = (item: Evidence): string =>\n `${item.source}:${item.path}:${item.lineStart ?? ''}:${item.lineEnd ?? ''}:${item.context ?? ''}`\n\nconst mergeEvidence = (...relations: readonly KnowledgeRelation[]): Evidence[] => {\n const merged = new Map<string, Evidence>()\n for (const relation of relations) {\n for (const item of relation.evidence) merged.set(evidenceKey(item), item)\n }\n return [...merged.values()].sort((a, b) => evidenceKey(a).localeCompare(evidenceKey(b)))\n}\n\nconst diagnosticId = (code: string, value: unknown): string =>\n `reconciliation:${code}:${sha256NormalizedV1(value).slice(0, 32)}`\n\nconst coverageAvailable = (snapshot: DiscoverySnapshotV1, relation: KnowledgeRelation): boolean => {\n const status = snapshot.coverage.find((entry) =>\n entry.scope === 'static-imports-and-exports' && (relation.kind === 'imports' || relation.kind === 're-exports'),\n )?.status\n return status === undefined || status === 'complete'\n}\n\nconst entityById = (snapshots: readonly DiscoverySnapshotV1[]): ReadonlyMap<string, KnowledgeEntity> => {\n const entities = new Map<string, KnowledgeEntity>()\n for (const snapshot of snapshots) {\n for (const entity of snapshot.entities) if (!entities.has(entity.id)) entities.set(entity.id, entity)\n }\n return entities\n}\n\nconst isUnresolved = (id: string, entities: ReadonlyMap<string, KnowledgeEntity>): boolean =>\n id.startsWith('unresolved:') || entities.get(id)?.kind === 'unresolved-reference'\n\nconst relationMatches = (observed: KnowledgeRelation, declared: KnowledgeRelation, resolveEntity: EntityResolver): boolean => {\n if (relationBase(observed, resolveEntity) !== relationBase(declared, resolveEntity)) return false\n return relationDetection(declared) === relationDetection(observed)\n}\n\nconst reportDiagnostic = (\n code: string,\n status: ReconciliationReportV1['diagnostics'][number]['status'],\n severity: ReconciliationReportV1['diagnostics'][number]['severity'],\n message: string,\n evidence: readonly Evidence[],\n value: unknown,\n entityIds?: readonly string[],\n relationIds?: readonly string[],\n remediation?: string,\n): ReconciliationReportV1['diagnostics'][number] => ({\n id: diagnosticId(code, value),\n code,\n status,\n severity,\n message,\n evidence: [...evidence],\n ...(entityIds?.length ? { entityIds: [...entityIds] } : {}),\n ...(relationIds?.length ? { relationIds: [...relationIds] } : {}),\n ...(remediation ? { remediation } : {}),\n})\n\nexport const reconcileKnowledge = (\n observed: DiscoverySnapshotV1,\n declared: DiscoverySnapshotV1,\n): ReconciliationReportV1 => {\n const resolveEntity = entityResolver([observed, declared])\n const entities = entityById([observed, declared])\n const observedRelations = observed.relations.filter((relation) => relation.provenance === 'observed' && !ignoredDocumentationRelations.has(relation.kind))\n const declaredRelations = declared.relations.filter((relation) => relation.provenance === 'declared' && !ignoredDocumentationRelations.has(relation.kind))\n const diagnostics: ReconciliationReportV1['diagnostics'][number][] = []\n\n for (const entity of declared.entities.filter((item) => isUnresolved(item.id, entities)).sort((a, b) => a.id.localeCompare(b.id))) {\n diagnostics.push(reportDiagnostic(\n 'UNRESOLVED_ENTITY_REFERENCE',\n 'unresolved',\n 'error',\n `Declared reference could not be resolved: ${entity.name}.`,\n entity.evidence,\n entity.id,\n [entity.id],\n undefined,\n 'Resolve the reference to an observed entity ID or configured alias.',\n ))\n }\n\n const declaredByBase = new Map<string, KnowledgeRelation[]>()\n for (const relation of declaredRelations) {\n const base = relationBase(relation, resolveEntity)\n const group = declaredByBase.get(base) ?? []\n group.push(relation)\n declaredByBase.set(base, group)\n }\n\n for (const group of declaredByBase.values()) {\n const detections = new Set(group.map(relationDetection))\n if (detections.size < 2) continue\n diagnostics.push(reportDiagnostic(\n 'CONFLICTING_DECLARATIONS',\n 'conflict',\n 'error',\n 'Declarations for the same semantic relation disagree on detection.',\n mergeEvidence(...group),\n [relationBase(group[0] as KnowledgeRelation, resolveEntity), [...detections].sort()],\n undefined,\n group.map((relation) => relation.id),\n 'Keep one detection value for this relation or document the intended distinction with a different relation kind.',\n ))\n }\n\n for (const relation of observedRelations) {\n const candidates = declaredByBase.get(relationBase(relation, resolveEntity)) ?? []\n const match = candidates.find((candidate) => relationMatches(relation, candidate, resolveEntity))\n if (match) {\n diagnostics.push(reportDiagnostic(\n 'RELATION_CONFIRMED',\n 'confirmed',\n 'info',\n 'Observed relation is covered by a matching declaration.',\n mergeEvidence(relation, match),\n relation.id,\n undefined,\n [relation.id, match.id],\n ))\n } else if (coverageAvailable(observed, relation)) {\n diagnostics.push(reportDiagnostic(\n 'RELATION_UNDOCUMENTED',\n 'undocumented',\n 'warn',\n 'Observed relation has no matching documentation declaration.',\n relation.evidence,\n relation.id,\n undefined,\n [relation.id],\n 'Add a matching relation declaration or configure this relation kind as intentionally undocumented.',\n ))\n }\n }\n\n for (const relation of declaredRelations) {\n const candidates = observedRelations.filter((candidate) => relationBase(candidate, resolveEntity) === relationBase(relation, resolveEntity))\n const detection = relationDetection(relation)\n if (candidates.some((candidate) => relationMatches(candidate, relation, resolveEntity))) continue\n if (isUnresolved(resolveEntity(relation.from), entities) || isUnresolved(resolveEntity(relation.to), entities)) continue\n if (detection === 'dynamic' || detection === 'external') {\n diagnostics.push(reportDiagnostic(\n 'RELATION_NOT_ANALYZED',\n 'not-analyzed',\n 'info',\n `Declared ${detection} relation cannot be verified by the current static analyzer.`,\n relation.evidence,\n relation.id,\n undefined,\n [relation.id],\n 'Enable a compatible analyzer or provide explicit observed evidence before treating this relation as confirmed.',\n ))\n } else if (coverageAvailable(observed, relation)) {\n diagnostics.push(reportDiagnostic(\n 'DECLARED_RELATION_STALE',\n 'stale-or-unverified',\n 'warn',\n candidates.length ? 'Declared relation has incompatible observed evidence.' : 'Declared static relation was not observed.',\n candidates.length ? mergeEvidence(relation, ...candidates) : relation.evidence,\n relation.id,\n undefined,\n [relation.id, ...candidates.map((candidate) => candidate.id)],\n 'Update the declaration or the implementation so both graphs describe the same relation.',\n ))\n }\n }\n\n const sortedDiagnostics = [...diagnostics].sort((a, b) => a.id.localeCompare(b.id))\n const base = {\n type: 'reconciliation-report' as const,\n schemaVersion: 1 as const,\n contentHash: '0'.repeat(64),\n contentHashAlgo: observed.contentHashAlgo,\n project: observed.project,\n sourceRevision: observed.sourceRevision,\n sourceRevisionKind: observed.sourceRevisionKind,\n configurationHash: observed.configurationHash,\n pipelineVersion: observed.pipelineVersion,\n analyzerVersions: observed.analyzerVersions,\n snapshotHash: observed.contentHash,\n diagnostics: sortedDiagnostics,\n summary: {\n entityCount: observed.entities.length,\n relationCount: observedRelations.length,\n diagnosticCount: sortedDiagnostics.length,\n },\n }\n return ReconciliationReportV1Schema.parse({ ...base, contentHash: contentHashForArtifactV1(base) })\n}\n","import { DiscoverySnapshotV1Schema, ReconciliationReportV1Schema, type DiscoverySnapshotV1, type ReconciliationReportV1 } from '../schemas/knowledge.js'\nimport { redactSecrets } from '../safety/repository.js'\n\nexport type OfflineReportInput = {\n readonly snapshot: DiscoverySnapshotV1\n readonly report: ReconciliationReportV1\n}\n\nexport type OfflineReportOptions = {\n readonly includeSnippets?: boolean\n}\n\nconst escapeHtml = (value: unknown): string => String(value)\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n\nconst anchor = (prefix: string, value: string): string => `${prefix}-${value.replace(/[^A-Za-z0-9_-]+/g, '-')}`\n\nconst embeddedJson = (value: unknown): string => JSON.stringify(value).replaceAll('<', '\\\\u003c')\n\nconst errorPage = (message: string): string => `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><title>Doc Bridge report error</title><style>body{font:16px system-ui;margin:3rem;color:#311}main{max-width:60rem;margin:auto;border:1px solid #d99;padding:2rem;border-radius:8px;background:#fff8f8}code{white-space:pre-wrap}</style></head><body><main><h1>Doc Bridge report unavailable</h1><p>The saved snapshot/report could not be rendered.</p><code>${escapeHtml(message)}</code><p>Run <code>ak-docs check</code> to regenerate valid artifacts.</p></main></body></html>`\n\nconst reportData = (snapshot: DiscoverySnapshotV1, report: ReconciliationReportV1, includeSnippets: boolean) => ({\n project: snapshot.project,\n revision: snapshot.sourceRevision,\n revisionKind: snapshot.sourceRevisionKind,\n snapshotHash: snapshot.contentHash,\n reportHash: report.contentHash,\n configurationHash: snapshot.configurationHash,\n pipelineVersion: snapshot.pipelineVersion,\n analyzerVersions: snapshot.analyzerVersions,\n entities: snapshot.entities.map((entity, index) => ({\n id: entity.id,\n anchor: entity.id.length > 64 ? `entity-n${index}` : anchor('entity', entity.id),\n kind: entity.kind,\n name: entity.name,\n path: entity.path,\n provenance: entity.provenance,\n evidence: entity.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n relations: snapshot.relations.map((relation) => ({\n id: relation.id,\n kind: relation.kind,\n from: relation.from,\n to: relation.to,\n provenance: relation.provenance,\n evidence: relation.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n diagnostics: report.diagnostics.map((diagnostic) => ({\n id: diagnostic.id,\n code: diagnostic.code,\n status: diagnostic.status,\n severity: diagnostic.severity,\n message: diagnostic.message,\n entityIds: diagnostic.entityIds ?? [],\n relationIds: diagnostic.relationIds ?? [],\n remediation: diagnostic.remediation,\n evidence: diagnostic.evidence.map(({ context, ...item }) => includeSnippets && context ? { ...item, context: redactSecrets(context) } : item),\n })),\n coverage: snapshot.coverage,\n})\n\nconst styles = String.raw`\n:root{color-scheme:light;--ink:#17251f;--muted:#60706a;--paper:#f5f7f3;--panel:#fff;--line:#d9e0da;--green:#18794e;--blue:#236b83;--amber:#a9640b;--red:#b33c35;--shadow:0 12px 32px rgba(23,37,31,.08)}\n*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:14px/1.5 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}button,input,select{font:inherit}button{cursor:pointer}a{color:var(--blue)}.shell{max-width:1500px;margin:auto;padding:24px}.masthead{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;border-bottom:1px solid var(--line);padding:8px 0 24px}.eyebrow{color:var(--green);font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.masthead h1{font:700 clamp(28px,4vw,52px)/1.03 Georgia,serif;letter-spacing:-.04em;margin:8px 0}.lede{color:var(--muted);font-size:16px;max-width:720px;margin:0}.run-meta{text-align:right;color:var(--muted);font-size:12px}.run-meta strong{display:block;color:var(--green);font-size:14px}.read-only{border:1px solid #b9d7c6;background:#edf8f0;color:#185b3b;border-radius:999px;display:inline-flex;padding:4px 10px;font-weight:700;font-size:12px}.summary{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:20px 0}.metric,.insight,.panel{background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px}.metric{padding:16px}.metric b{font-size:27px;display:block;line-height:1}.metric span{color:var(--muted);display:block;margin-top:7px}.metric.warn b{color:var(--amber)}.metric.bad b{color:var(--red)}.lens-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;margin:22px 0 12px}.tabs{display:flex;gap:4px;flex-wrap:wrap}.tab,.level{border:1px solid transparent;background:transparent;border-radius:8px;padding:8px 11px;color:var(--muted)}.tab:hover,.level:hover{background:#e8eee9;color:var(--ink)}.tab[aria-selected=true],.level[aria-pressed=true]{background:var(--ink);color:#fff}.filters{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.filters label{color:var(--muted);font-size:12px;display:flex;align-items:center;gap:6px}.filters input,.filters select,.filters button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 10px;color:var(--ink)}.filters input{min-width:220px}.filters button{color:var(--blue)}.insights{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0 20px}.insight{padding:14px}.insight h3{font-size:13px;margin:0 0 5px}.insight p{color:var(--muted);margin:0;font-size:12px}.tag{display:inline-block;border-radius:999px;padding:2px 7px;font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;background:#edf0ee;color:var(--muted)}.tag.heuristic{background:#fff3dc;color:#8a570a}.tag.error{background:#fde8e6;color:var(--red)}.tag.warn{background:#fff2d9;color:var(--amber)}.tag.info{background:#e6f1f5;color:var(--blue)}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:14px}.panel{padding:18px}.panel h2{font:700 23px Georgia,serif;margin:0}.panel h3{font-size:14px;margin:0}.panel-head{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;margin-bottom:14px}.subtle{color:var(--muted);font-size:12px}.map-wrap{border:1px solid var(--line);border-radius:10px;overflow:auto;background:linear-gradient(135deg,#fbfcfa,#f0f5f0)}#graph{display:block;width:100%;min-width:760px;height:560px}.edge{stroke:#b8c6bd;stroke-width:1.3;opacity:.65}.edge.alert{stroke:#d08a35;stroke-width:2}.edge-label{fill:var(--muted);font-size:10px}.graph-node{cursor:pointer}.graph-node rect{fill:#fff;stroke:#9eb0a4;stroke-width:1.2}.graph-node:hover rect,.graph-node:focus rect{stroke:var(--blue);stroke-width:2}.graph-node.selected rect{stroke:var(--green);stroke-width:3}.graph-node.issue rect{fill:#fffaf0;stroke:#c98a2c}.graph-node text{pointer-events:none}.node-label{font-size:12px;font-weight:750}.node-kind{font-size:10px;fill:var(--muted)}.node-count{font-size:10px;fill:var(--green);font-weight:800}.empty{padding:32px;text-align:center;color:var(--muted)}.side{position:sticky;top:14px;align-self:start}.detail-title{font:700 22px Georgia,serif;margin:4px 0}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:12px 0;margin:14px 0}.detail-grid b{display:block;font-size:19px}.detail-grid span{color:var(--muted);font-size:11px}.path{overflow-wrap:anywhere;color:var(--muted);font-size:12px}.list{list-style:none;margin:10px 0 0;padding:0}.list li{border-top:1px solid var(--line);padding:8px 0;font-size:12px}.run{margin-top:14px}.run-summary{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}.chip{border:1px solid var(--line);border-radius:999px;padding:5px 9px;color:var(--muted);font-size:12px}.chip b{color:var(--ink)}.finding{border-top:1px solid var(--line);padding:14px 0}.finding-head{display:flex;justify-content:space-between;gap:10px}.finding h3{margin:0;font-size:14px}.finding p{margin:5px 0;color:var(--muted)}.finding ul{margin:8px 0 0;padding-left:18px;color:var(--muted);font-size:12px}.coverage-row{display:grid;grid-template-columns:170px 1fr 90px;gap:10px;align-items:center;border-top:1px solid var(--line);padding:10px 0;font-size:12px}.bar{height:7px;background:#e7ece8;border-radius:99px;overflow:hidden}.bar i{display:block;height:100%;background:var(--green)}.bar i.partial{background:var(--amber)}.bar i.none{background:var(--red)}.metadata{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:14px}.metadata div{border-top:1px solid var(--line);padding-top:8px;color:var(--muted);font-size:12px;overflow-wrap:anywhere}.metadata b{display:block;color:var(--ink);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:3px}.hidden{display:none!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:900px){.summary{grid-template-columns:repeat(3,minmax(0,1fr))}.insights{grid-template-columns:repeat(2,minmax(0,1fr))}.workspace{grid-template-columns:1fr}.side{position:static}.run-meta{display:none}}@media(max-width:560px){.shell{padding:14px}.summary{grid-template-columns:repeat(2,minmax(0,1fr))}.insights{grid-template-columns:1fr}.masthead{display:block}.filters input{min-width:0;width:100%}.filters label:first-child{width:100%}.metadata{grid-template-columns:1fr}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}\n`\n\nconst script = String.raw`\nconst data=${'${DATA}'};\nconst esc=(value)=>String(value??'').replaceAll('&','&amp;').replaceAll('<','&lt;').replaceAll('>','&gt;').replaceAll('\"','&quot;').replaceAll(\"'\",'&#39;');\nconst byId=new Map(data.entities.map((entity)=>[entity.id,entity]));\nconst parent=new Map();\nconst relationById=new Map(data.relations.map((relation)=>[relation.id,relation]));\ndata.relations.forEach((relation)=>{if(relation.kind==='contains'&&!parent.has(relation.to))parent.set(relation.to,relation.from)});\nconst findingIndex=new Map(),relationFindingIndex=new Map();\nconst addFinding=(index,id,finding)=>{const findings=index.get(id)||[];findings.push(finding);index.set(id,findings)};\ndata.diagnostics.forEach((finding)=>{(finding.entityIds||[]).forEach((id)=>addFinding(findingIndex,id,finding));(finding.relationIds||[]).forEach((id)=>addFinding(relationFindingIndex,id,finding));});\nconst state={lens:'architecture',level:'overview',selected:null,query:'',status:'',severity:''};\nconst rootOf=(id)=>{let current=id;const seen=new Set();while(parent.has(current)&&!seen.has(current)){seen.add(current);current=parent.get(current)}return current};\nconst packageNodes=()=>data.entities.filter((entity)=>entity.kind==='package');\nconst groupFor=(id)=>{const entity=byId.get(id);if(!entity)return id;if(entity.kind==='package'||entity.kind==='external')return entity.id;const root=rootOf(id);return byId.has(root)?root:id};\nconst label=(entity)=>entity?.name||entity?.id||'Unknown';\nconst short=(value,max)=>{const text=String(value??'');return text.length>max?text.slice(0,max-1)+'…':text};\nconst diagnosticsFor=(id)=>findingIndex.get(id)||[];\nconst relationHealth=(relation)=>{const findings=relationFindingIndex.get(relation.id)||[];return findings.some((finding)=>finding.severity==='error')?'error':findings.length?'warn':''};\nconst degreeMap=(relations)=>{const degrees=new Map();relations.forEach((relation)=>{degrees.set(relation.from,(degrees.get(relation.from)||0)+1);degrees.set(relation.to,(degrees.get(relation.to)||0)+1)});return degrees};\nconst selectedScope=()=>{if(!state.selected)return null;const selected=byId.get(state.selected);return selected?.kind==='package'?selected.id:groupFor(state.selected)};\nconst nodesFor=()=>{const packages=packageNodes();if(state.level==='overview'||(state.level==='package'&&!state.selected))return packages.length?packages:data.entities.filter((entity)=>entity.kind!=='document').slice(0,80);const scope=selectedScope();let nodes=data.entities.filter((entity)=>{if(entity.kind==='package')return false;if(entity.kind==='document'&&state.level==='module')return false;return !scope||groupFor(entity.id)===scope});if(state.level==='module')nodes=nodes.filter((entity)=>entity.kind==='module');if(state.level==='file')nodes=nodes.filter((entity)=>Boolean(entity.path));const scopedIds=new Set(nodes.map((node)=>node.id));const external=data.entities.filter((entity)=>entity.kind==='external'&&data.relations.some((relation)=>(relation.from===entity.id&&scopedIds.has(relation.to))||(relation.to===entity.id&&scopedIds.has(relation.from))));const degrees=degreeMap(data.relations);return nodes.concat(external).sort((a,b)=>(degrees.get(b.id)||0)-(degrees.get(a.id)||0)||a.id.localeCompare(b.id)).slice(0,160)};\nconst graphModel=()=>{const nodes=nodesFor();const ids=new Set(nodes.map((node)=>node.id));const aggregate=state.level==='overview'||(state.level==='package'&&!state.selected);const edges=new Map();data.relations.forEach((relation)=>{const from=aggregate?groupFor(relation.from):relation.from;const to=aggregate?groupFor(relation.to):relation.to;if(from===to||!ids.has(from)||!ids.has(to))return;const key=from+'→'+to;const current=edges.get(key)||{from,to,count:0,kinds:new Set(),health:''};current.count++;current.kinds.add(relation.kind);current.health=current.health==='error'||relationHealth(relation)==='error'?'error':current.health||relationHealth(relation);edges.set(key,current)});return{nodes,edges:[...edges.values()].sort((a,b)=>b.count-a.count||a.from.localeCompare(b.from)).slice(0,600)}};\nconst nodeIssues=(nodeId)=>{const ids=new Set([nodeId]);data.entities.forEach((entity)=>{if(groupFor(entity.id)===nodeId)ids.add(entity.id)});const findings=new Set();ids.forEach((id)=>(findingIndex.get(id)||[]).forEach((finding)=>findings.add(finding)));data.relations.forEach((relation)=>{if(ids.has(relation.from)||ids.has(relation.to))(relationFindingIndex.get(relation.id)||[]).forEach((finding)=>findings.add(finding))});return[...findings]};\nconst renderInsights=()=>{const undocumented=data.diagnostics.filter((finding)=>finding.status==='undocumented').length;const drift=data.diagnostics.filter((finding)=>finding.status==='stale-or-unverified'||finding.status==='conflict').length;const unsupported=data.coverage.filter((entry)=>entry.status==='not-analyzed'||entry.status==='partial').length;const model=graphModel();const degrees=degreeMap(model.edges);const values=[...degrees.values()].sort((a,b)=>a-b);const median=values.length?values[Math.floor(values.length/2)]:0;const hot=[...degrees.values()].filter((value)=>value>=Math.max(4,median*2)).length;const isolated=model.nodes.filter((node)=>!model.edges.some((edge)=>edge.from===node.id||edge.to===node.id)).length;document.querySelector('#insights').innerHTML=[['Documentation drift',undocumented+drift,'Relations or docs needing comparison.',''],['Unanalyzed scope',unsupported,'Coverage gaps are explicit.',''],['Connectivity hotspots',hot,'Heuristic: unusually connected nodes.','heuristic'],['Disconnected nodes',isolated,'Heuristic: no visible edge at this level.','heuristic']].map(([title,count,copy,tag])=>'<article class=\"insight\"><h3>'+esc(title)+' <span class=\"tag '+tag+'\">'+(tag?'heuristic':'signal')+'</span></h3><p><strong>'+count+'</strong> · '+esc(copy)+'</p></article>').join('')};\nconst renderGraph=()=>{const model=graphModel();const svg=document.querySelector('#graph');if(!model.nodes.length){svg.innerHTML='<text x=\"500\" y=\"270\" text-anchor=\"middle\" class=\"subtle\">No entities match this level.</text>';return}const columns=Math.min(7,Math.max(1,Math.ceil(Math.sqrt(model.nodes.length)))),rows=Math.ceil(model.nodes.length/columns),cellWidth=160,cellHeight=82,width=Math.max(1000,columns*cellWidth+80),height=Math.max(560,rows*cellHeight+80),pad=40;svg.setAttribute('viewBox','0 0 '+width+' '+height);svg.style.width=width+'px';svg.style.height=height+'px';const positions=new Map();model.nodes.forEach((node,index)=>{const col=index%columns,row=Math.floor(index/columns);positions.set(node.id,{x:pad+(col+0.5)*(width-2*pad)/columns,y:pad+(row+0.5)*(height-2*pad)/rows})});const defs='<defs><marker id=\"arrow\" markerWidth=\"8\" markerHeight=\"8\" refX=\"7\" refY=\"3\" orient=\"auto\"><path d=\"M0,0 L0,6 L7,3 z\" fill=\"#9eb0a4\"/></marker></defs>';const edges=model.edges.map((edge)=>{const from=positions.get(edge.from),to=positions.get(edge.to);if(!from||!to)return '';const midX=(from.x+to.x)/2,midY=(from.y+to.y)/2;return '<g><line class=\"edge '+(edge.health?'alert':'')+'\" x1=\"'+from.x+'\" y1=\"'+from.y+'\" x2=\"'+to.x+'\" y2=\"'+to.y+'\" marker-end=\"url(#arrow)\"/><text class=\"edge-label\" x=\"'+midX+'\" y=\"'+midY+'\">'+esc(edge.count>1?edge.count+'×':'')+'</text></g>'}).join('');const nodes=model.nodes.map((node)=>{const pos=positions.get(node.id),issues=nodeIssues(node.id),degree=(degreeMap(model.edges).get(node.id)||0),selected=state.selected===node.id?' selected':'',issue=issues.length?' issue':'';return '<g class=\"graph-node'+selected+issue+'\" role=\"button\" tabindex=\"0\" data-node=\"'+esc(node.id)+'\" transform=\"translate('+(pos.x-62)+','+(pos.y-27)+')\"><title>'+esc(label(node))+' · '+esc(node.kind)+'</title><rect width=\"124\" height=\"54\" rx=\"8\"></rect><text class=\"node-label\" x=\"10\" y=\"19\">'+esc(short(label(node),18))+'</text><text class=\"node-kind\" x=\"10\" y=\"34\">'+esc(short(node.kind,18))+'</text><text class=\"node-count\" x=\"112\" y=\"19\" text-anchor=\"end\">'+(degree||'')+'</text></g>'}).join('');svg.innerHTML=defs+edges+nodes;svg.querySelectorAll('[data-node]').forEach((node)=>{node.addEventListener('click',()=>{state.selected=node.dataset.node;render()});node.addEventListener('keydown',(event)=>{if(event.key==='Enter'||event.key===' '){event.preventDefault();state.selected=node.dataset.node;render()}})});document.querySelector('#map-note').textContent=(state.level==='overview'?'Grouped package view. ':state.level+' view. ')+'Edges are aggregated from canonical relations; '+model.edges.length+' visible connection groups.'};\nconst renderDetails=()=>{const panel=document.querySelector('#details'),entity=state.selected?byId.get(state.selected):null;if(!entity){panel.innerHTML='<p class=\"subtle\">Select a node in the map to inspect its evidence, connectivity, and findings.</p>';return}const incoming=data.relations.filter((relation)=>relation.to===entity.id),outgoing=data.relations.filter((relation)=>relation.from===entity.id),findings=diagnosticsFor(entity.id),evidence=[...(entity.evidence||[]),...incoming.flatMap((relation)=>relation.evidence||[]),...outgoing.flatMap((relation)=>relation.evidence||[])].slice(0,8);panel.innerHTML='<div class=\"eyebrow\">Selected entity</div><h2 class=\"detail-title\">'+esc(label(entity))+'</h2><span class=\"tag\">'+esc(entity.kind)+'</span><p class=\"path\">'+esc(entity.path||entity.id)+'</p><div class=\"detail-grid\"><div><b>'+incoming.length+'</b><span>incoming</span></div><div><b>'+outgoing.length+'</b><span>outgoing</span></div><div><b>'+findings.length+'</b><span>findings</span></div><div><b>'+evidence.length+'</b><span>evidence items</span></div></div><h3>Evidence</h3><ul class=\"list\">'+(evidence.length?evidence.map((item)=>'<li>'+esc(item.path+(item.lineStart?':'+item.lineStart:'')+(item.context?' — '+item.context:''))+'</li>').join(''):'<li>No evidence recorded.</li>')+'</ul>'+(findings.length?'<h3 style=\"margin-top:16px\">Attention</h3><ul class=\"list\">'+findings.slice(0,5).map((finding)=>'<li><span class=\"tag '+esc(finding.severity)+'\">'+esc(finding.severity)+'</span> '+esc(finding.code)+'</li>').join('')+'</ul>':'')};\nconst findingMatches=(finding)=>{const query=state.query.toLowerCase();return(!query||[finding.id,finding.code,finding.message,...finding.entityIds,...finding.relationIds].join(' ').toLowerCase().includes(query))&&(!state.status||finding.status===state.status)&&(!state.severity||finding.severity===state.severity)};\nconst renderFindings=()=>{let findings=data.diagnostics.filter(findingMatches);if(state.lens==='risks')findings=findings.filter((finding)=>finding.severity==='error'||finding.severity==='warn');if(state.lens==='evidence')findings=findings.filter((finding)=>finding.evidence.length);if(state.lens==='drift')findings=findings.filter((finding)=>finding.status!=='confirmed');document.querySelector('#finding-count').textContent=findings.length+' shown';document.querySelector('#findings').innerHTML=findings.slice(0,300).map((finding)=>'<article class=\"finding\" id=\"'+esc('diagnostic-'+finding.id.replace(/[^A-Za-z0-9_-]+/g,'-'))+'\"><div class=\"finding-head\"><h3>'+esc(finding.code)+'</h3><span><span class=\"tag '+esc(finding.severity)+'\">'+esc(finding.severity)+'</span> <span class=\"tag\">'+esc(finding.status)+'</span></span></div><p>'+esc(finding.message)+'</p>'+(finding.evidence.length?'<ul>'+finding.evidence.slice(0,4).map((item)=>'<li>'+esc(item.path+(item.lineStart?':'+item.lineStart:'')+(item.context?' — '+item.context:''))+'</li>').join('')+'</ul>':'')+(finding.remediation?'<p><strong>Next check:</strong> '+esc(finding.remediation)+'</p>':'')+'</article>').join('')||'<p class=\"empty\">No findings match the current lens and filters.</p>';};\nconst renderCoverage=()=>{document.querySelector('#coverage-list').innerHTML=data.coverage.map((entry)=>{const width=entry.status==='complete'?100:entry.status==='partial'?55:12;return '<div class=\"coverage-row\"><div><b>'+esc(entry.analyzer)+'</b><br><span class=\"subtle\">'+esc(entry.scope)+'</span></div><div class=\"bar\"><i class=\"'+(entry.status==='complete'?'':entry.status==='partial'?'partial':'none')+'\" style=\"width:'+width+'%\"></i></div><div>'+esc(entry.status)+'</div></div>'}).join('')||'<p class=\"empty\">No coverage metadata.</p>'};\n const render=()=>{document.querySelectorAll('.tab[data-lens]').forEach((tab)=>tab.setAttribute('aria-selected',String(tab.dataset.lens===state.lens)));document.querySelectorAll('.level').forEach((button)=>button.setAttribute('aria-pressed',String(button.dataset.level===state.level)));document.querySelector('#lens-caption').textContent=state.lens==='architecture'?'The repository topology at the selected level.':state.lens==='drift'?'Where canonical code relations and documentation declarations need attention.':state.lens==='risks'?'Signals that deserve human review; connectivity warnings are heuristics, not architectural proof.':'What the analyzers observed, declared, or could not analyze.';renderInsights();renderGraph();renderDetails();renderFindings();renderCoverage()};\n document.querySelectorAll('.tab[data-lens]').forEach((tab)=>tab.addEventListener('click',()=>{state.lens=tab.dataset.lens;render()}));document.querySelectorAll('.level').forEach((button)=>button.addEventListener('click',()=>{state.level=button.dataset.level;render()}));document.querySelector('#search').addEventListener('input',(event)=>{state.query=event.target.value;renderFindings()});document.querySelector('#status').addEventListener('change',(event)=>{state.status=event.target.value;renderFindings()});document.querySelector('#severity').addEventListener('change',(event)=>{state.severity=event.target.value;renderFindings()});document.querySelector('#reset').addEventListener('click',()=>{state.query='';state.status='';state.severity='';document.querySelector('#search').value='';document.querySelector('#status').value='';document.querySelector('#severity').value='';renderFindings()});document.querySelector('#clear-selection').addEventListener('click',()=>{state.selected=null;render()});document.addEventListener('keydown',(event)=>{if(event.key==='/'&&document.activeElement.tagName!=='INPUT'){event.preventDefault();document.querySelector('#search').focus()}});render();\n`\n\nconst render = (input: OfflineReportInput, options: OfflineReportOptions): string => {\n const { snapshot, report } = input\n const includeSnippets = options.includeSnippets === true\n const data = reportData(snapshot, report, includeSnippets)\n const scriptBody = script.replace('${' + 'DATA}', embeddedJson(data))\n const largeNote = snapshot.entities.length > 500 || report.diagnostics.length > 1_000\n ? 'Large snapshots are rendered from compact canonical data with progressive graph levels.'\n : 'The viewer starts with a grouped topology and expands into canonical entities on demand.'\n const issueCount = report.diagnostics.filter((diagnostic) => diagnostic.severity === 'error' || diagnostic.severity === 'warn').length\n const unsupportedCount = snapshot.coverage.filter((entry) => entry.status !== 'complete').length\n const statusOptions = ['confirmed', 'undocumented', 'stale-or-unverified', 'conflict', 'unresolved', 'not-analyzed']\n return `<!doctype html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"><title>Doc Bridge — ${escapeHtml(snapshot.project.name)}</title><style>${styles}</style></head><body><main class=\"shell\"><header class=\"masthead\"><div><div class=\"eyebrow\">Doc Bridge / Knowledge report</div><h1>${escapeHtml(snapshot.project.name)}</h1><p class=\"lede\">A read-only architecture and documentation map. Start broad, then follow evidence to the exact entity, relation, or finding.</p></div><div class=\"run-meta\"><span class=\"read-only\">Read-only snapshot</span><strong>${escapeHtml(snapshot.sourceRevision)}</strong><span>${escapeHtml(snapshot.sourceRevisionKind)} · pipeline ${escapeHtml(snapshot.pipelineVersion)}</span></div></header><section class=\"summary\" aria-label=\"Snapshot summary\"><div class=\"metric\"><b>${snapshot.entities.length}</b><span>entities</span></div><div class=\"metric\"><b>${snapshot.relations.length}</b><span>canonical relations</span></div><div class=\"metric ${issueCount?'warn':''}\"><b>${issueCount}</b><span>warn/error findings</span></div><div class=\"metric ${report.diagnostics.length?'warn':''}\"><b>${report.diagnostics.length}</b><span>total findings</span></div><div class=\"metric ${unsupportedCount?'bad':''}\"><b>${unsupportedCount}</b><span>partial / unanalyzed scopes</span></div></section><div class=\"lens-bar\"><nav class=\"tabs\" aria-label=\"Report lenses\"><button class=\"tab\" data-lens=\"architecture\" aria-selected=\"true\">Architecture</button><button class=\"tab\" data-lens=\"drift\" aria-selected=\"false\">Documentation drift</button><button class=\"tab\" data-lens=\"risks\" aria-selected=\"false\">Risks &amp; hotspots</button><button class=\"tab\" data-lens=\"evidence\" aria-selected=\"false\">Evidence</button></nav><span class=\"subtle\">${escapeHtml(largeNote)}</span></div><p id=\"lens-caption\" class=\"subtle\">The repository topology at the selected level.</p><section id=\"insights\" class=\"insights\" aria-label=\"Attention signals\"></section><section class=\"filters\" aria-label=\"Finding filters\"><label>Search <input id=\"search\" type=\"search\" placeholder=\"Press / to search findings\"></label><label>Status <select id=\"status\"><option value=\"\">Any status</option>${statusOptions.map((value) => `<option>${escapeHtml(value)}</option>`).join('')}</select></label><label>Severity <select id=\"severity\"><option value=\"\">Any severity</option><option>error</option><option>warn</option><option>info</option></select></label><button id=\"reset\" type=\"button\">Reset filters</button></section><div class=\"workspace\"><section class=\"panel\" aria-labelledby=\"architecture-title\"><div class=\"panel-head\"><div><h2 id=\"architecture-title\">Architecture map</h2><p id=\"map-note\" class=\"subtle\">Grouped package/external view.</p></div><div class=\"tabs\" aria-label=\"Graph level\"><button class=\"level\" data-level=\"overview\" aria-pressed=\"true\">Overview</button><button class=\"level\" data-level=\"package\" aria-pressed=\"false\">Package</button><button class=\"level\" data-level=\"module\" aria-pressed=\"false\">Module</button><button class=\"level\" data-level=\"file\" aria-pressed=\"false\">File</button></div></div><div class=\"map-wrap\"><svg id=\"graph\" viewBox=\"0 0 1000 560\" role=\"img\" aria-label=\"Interactive architecture graph\"></svg></div><p class=\"subtle\">Node number = visible connection degree. Amber nodes/edges have findings. Click or focus a node to inspect its evidence. Grouped edges preserve canonical relation direction and count.</p></section><aside class=\"panel side\" aria-labelledby=\"details-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Evidence trail</div><h2 id=\"details-title\">Details</h2></div><button id=\"clear-selection\" class=\"tab\" type=\"button\">Clear</button></div><div id=\"details\"><p class=\"subtle\">Select a node in the map to inspect its evidence, connectivity, and findings.</p></div></aside></div><section class=\"panel run\" aria-labelledby=\"run-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Jest-like diagnostics</div><h2 id=\"run-title\">Run report</h2></div><span id=\"finding-count\" class=\"subtle\">${report.diagnostics.length} shown</span></div><div class=\"run-summary\"><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.severity === 'error').length}</b> errors</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.severity === 'warn').length}</b> warnings</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.status === 'undocumented').length}</b> undocumented</span><span class=\"chip\"><b>${report.diagnostics.filter((item) => item.status === 'stale-or-unverified' || item.status === 'conflict').length}</b> drift/conflict</span></div><div id=\"findings\"></div></section><section class=\"panel run\" aria-labelledby=\"coverage-title\"><div class=\"panel-head\"><div><div class=\"eyebrow\">Analyzer boundaries</div><h2 id=\"coverage-title\">Coverage &amp; unsupported areas</h2></div><span class=\"subtle\">Explicit limits are part of the evidence</span></div><div id=\"coverage-list\"></div></section><section class=\"metadata\" aria-label=\"Run metadata\"><div><b>Snapshot</b>${escapeHtml(snapshot.contentHash)}</div><div><b>Report</b>${escapeHtml(report.contentHash)}</div><div><b>Configuration</b>${escapeHtml(snapshot.configurationHash)}</div><div><b>Analyzers</b>${escapeHtml(Object.entries(snapshot.analyzerVersions).map(([name, version]) => `${name} ${version}`).join(', '))}</div><div><b>Source revision</b>${escapeHtml(snapshot.sourceRevision)} (${escapeHtml(snapshot.sourceRevisionKind)})</div><div><b>Mode</b>Read-only browser viewer; approvals and fixes remain outside this artifact.</div></section></main><script>${scriptBody}</script></body></html>`\n}\n\nexport const renderOfflineReport = (input: unknown, options: OfflineReportOptions = {}): string => {\n try {\n if (!input || typeof input !== 'object') throw new Error('Input must contain snapshot and report artifacts.')\n const value = input as Partial<OfflineReportInput>\n const snapshot = DiscoverySnapshotV1Schema.parse(value.snapshot)\n const report = ReconciliationReportV1Schema.parse(value.report)\n if (report.snapshotHash !== snapshot.contentHash) throw new Error('Report snapshotHash does not match snapshot contentHash.')\n return render({ snapshot, report }, options)\n } catch (error) {\n return errorPage(error instanceof Error ? error.message : String(error))\n }\n}\n","import { existsSync, readdirSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { basename, dirname, extname, join, relative, resolve, sep } from 'node:path'\n\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { FixProposalV1Schema, type FixProposalV1 } from '../schemas/knowledge.js'\nimport { containedPath } from '../safety/repository.js'\n\nexport type FixProposalOptions = {\n readonly baseRevision: string\n readonly configurationHash: string\n readonly projectName?: string\n readonly toolVersion?: string\n}\n\nexport type FixApplyOptions = {\n readonly currentRevision?: string\n readonly verify?: (changedPaths: readonly string[]) => void\n}\n\ntype FixChange = { readonly path: string; readonly before: string; readonly after: string }\n\nconst hash = (value: unknown): string => sha256NormalizedV1(value)\n\nconst artifactMetadata = (root: string, options: FixProposalOptions) => ({\n schemaVersion: 1 as const,\n contentHash: '0'.repeat(64),\n contentHashAlgo: 'sha256-normalized-v1' as const,\n project: { name: options.projectName ?? basename(resolve(root)), root: '.' },\n sourceRevision: options.baseRevision,\n sourceRevisionKind: options.baseRevision.length === 40 ? 'git' as const : 'content' as const,\n configurationHash: options.configurationHash,\n pipelineVersion: '1.0.0',\n analyzerVersions: { fixes: options.toolVersion ?? '1.0.0' },\n})\n\nconst unifiedDiff = (changes: readonly FixChange[]): string => changes.map((change) => {\n const before = change.before.split('\\n').map((line) => `-${line}`).join('\\n')\n const after = change.after.split('\\n').map((line) => `+${line}`).join('\\n')\n return `--- a/${change.path}\\n+++ b/${change.path}\\n@@\\n${before}\\n${after}`\n}).join('\\n')\n\nconst makeProposal = (root: string, options: FixProposalOptions, changes: readonly FixChange[], preconditions: readonly string[], postconditions: readonly string[]): FixProposalV1 => {\n const draft = {\n ...artifactMetadata(root, options),\n type: 'fix-proposal' as const,\n proposalId: `fix-${hash(changes).slice(0, 20)}`,\n baseRevision: options.baseRevision,\n affectedFiles: changes.map(({ path, before }) => ({ path, contentHash: sha256NormalizedV1(before) })),\n changes,\n preconditions,\n diff: unifiedDiff(changes),\n postconditions,\n status: 'proposed' as const,\n }\n return FixProposalV1Schema.parse({ ...draft, contentHash: contentHashForArtifactV1(draft) })\n}\n\nconst walkMarkdown = (root: string, directory = root): string[] => readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {\n if (entry.name === '.git' || entry.name === 'node_modules' || entry.name === 'dist' || entry.name === 'build') return []\n const path = join(directory, entry.name)\n if (entry.isDirectory()) return walkMarkdown(root, path)\n return entry.isFile() && ['.md', '.mdx'].includes(extname(entry.name).toLowerCase()) ? [relative(root, path).split(sep).join('/')] : []\n})\n\nconst localLink = /(!?)\\[([^\\]]*)\\]\\(([^)\\s]+)(?:\\s+[\"'][^)]*[\"'])?\\)/g\n\nconst sortJson = (value: unknown): unknown => Array.isArray(value)\n ? value.map(sortJson)\n : value && typeof value === 'object'\n ? Object.fromEntries(Object.entries(value as Record<string, unknown>).sort(([left], [right]) => left.localeCompare(right)).map(([key, item]) => [key, sortJson(item)]))\n : value\n\nexport const createMarkdownLinkFixProposal = (root: string, options: FixProposalOptions): FixProposalV1 | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const paths = walkMarkdown(projectRoot)\n const changes: FixChange[] = []\n for (const path of paths) {\n const content = readFileSync(join(projectRoot, path), 'utf8')\n let next = content\n for (const match of content.matchAll(localLink)) {\n const target = match[3]\n if (!target || match[1] === '!' || /^(?:[a-z]+:|\\/|#)/i.test(target)) continue\n const targetPath = target.split('#')[0]?.split('?')[0]\n if (!targetPath || existsSync(resolve(projectRoot, dirname(path), targetPath))) continue\n const targetStem = basename(targetPath, extname(targetPath)).toLowerCase()\n const labelStem = (match[2] ?? '').trim().toLowerCase().replace(/[^a-z0-9]+/g, '')\n const candidates = paths.filter((candidate) => basename(candidate, extname(candidate)).toLowerCase() === targetStem || basename(candidate, extname(candidate)).toLowerCase().replace(/[^a-z0-9]+/g, '') === labelStem)\n if (candidates.length !== 1) continue\n let replacement = relative(dirname(path), candidates[0]!).split(sep).join('/')\n if (target.startsWith('./') && !replacement.startsWith('.')) replacement = `./${replacement}`\n next = next.replace(match[0], match[0].replace(target, replacement))\n }\n if (next !== content) changes.push({ path, before: content, after: next })\n }\n return changes.length ? makeProposal(projectRoot, options, changes, ['Each replacement has exactly one Markdown target.'], ['All corrected local Markdown links resolve.']) : undefined\n}\n\nexport const createArtifactNormalizationProposal = (root: string, artifactPath: string, options: FixProposalOptions): FixProposalV1 | undefined => {\n const projectRoot = realpathSync.native(resolve(root))\n const path = artifactPath.split(sep).join('/')\n const absolute = containedPath(projectRoot, path)\n if (!absolute || !existsSync(absolute) || !statSync(absolute).isFile()) return undefined\n const before = readFileSync(absolute, 'utf8')\n let after: string\n try { after = `${JSON.stringify(sortJson(JSON.parse(before) as unknown), null, 2)}\\n` } catch { return undefined }\n return after === before ? undefined : makeProposal(projectRoot, options, [{ path: relative(projectRoot, absolute).split(sep).join('/'), before, after }], ['The artifact contains valid JSON.'], ['The artifact is valid canonical JSON with one trailing newline.'])\n}\n\nexport const approveFixProposal = (proposalInput: unknown, approvedBy: string, approvedAt = new Date().toISOString()): FixProposalV1 => {\n const proposal = FixProposalV1Schema.parse(proposalInput)\n if (proposal.status !== 'proposed') throw new Error(`Only proposed fixes can be approved; received \"${proposal.status}\".`)\n const approved = { ...proposal, status: 'approved' as const, approval: { proposalHash: proposal.contentHash, approvedAt, approvedBy }, contentHash: '0'.repeat(64) }\n return FixProposalV1Schema.parse({ ...approved, contentHash: contentHashForArtifactV1(approved) })\n}\n\nconst bindingHash = (proposal: FixProposalV1): string => {\n const { approval: _approval, contentHash: _contentHash, status: _status, ...rest } = proposal\n return contentHashForArtifactV1({ ...rest, contentHash: '0'.repeat(64), status: 'proposed' as const })\n}\n\nexport const applyFixProposal = (root: string, proposalInput: unknown, options: FixApplyOptions = {}): FixProposalV1 => {\n const proposal = FixProposalV1Schema.parse(proposalInput)\n if (proposal.status !== 'approved' || !proposal.approval) throw new Error('Only an explicitly approved fix proposal can be applied.')\n if (proposal.approval.proposalHash !== bindingHash(proposal)) throw new Error('Approval is not bound to the exact proposal content.')\n if (options.currentRevision && options.currentRevision !== proposal.baseRevision) throw new Error('The repository revision changed since this proposal was created.')\n if (!proposal.changes?.length) throw new Error('This proposal has no executable changes.')\n\n const projectRoot = realpathSync.native(resolve(root))\n const originals = new Map<string, string>()\n const affected = new Map(proposal.affectedFiles.map((file) => [file.path, file]))\n if (proposal.changes.some((change) => !affected.has(change.path) || affected.get(change.path)?.contentHash !== sha256NormalizedV1(change.before)) || affected.size !== proposal.changes.length) {\n throw new Error('Proposal changes do not match its affected-file hashes.')\n }\n for (const file of proposal.affectedFiles) {\n const absolute = containedPath(projectRoot, file.path)\n if (!absolute || !existsSync(absolute)) throw new Error(`Affected file is unavailable or escapes the repository root: ${file.path}`)\n const current = readFileSync(absolute, 'utf8')\n if (sha256NormalizedV1(current) !== file.contentHash) throw new Error(`Affected file changed since proposal creation: ${file.path}`)\n originals.set(absolute, current)\n }\n\n try {\n for (const change of proposal.changes) {\n const absolute = resolve(projectRoot, change.path)\n writeFileSync(`${absolute}.docbridge-${process.pid}.tmp`, change.after, 'utf8')\n }\n for (const change of proposal.changes) {\n const absolute = resolve(projectRoot, change.path)\n renameSync(`${absolute}.docbridge-${process.pid}.tmp`, absolute)\n }\n for (const change of proposal.changes) {\n if (readFileSync(resolve(projectRoot, change.path), 'utf8') !== change.after) throw new Error(`Postcondition failed for ${change.path}`)\n }\n options.verify?.(proposal.changes.map((change) => change.path))\n } catch (error) {\n for (const [absolute, content] of originals) writeFileSync(absolute, content, 'utf8')\n for (const change of proposal.changes) {\n const temp = `${resolve(projectRoot, change.path)}.docbridge-${process.pid}.tmp`\n if (existsSync(temp)) unlinkSync(temp)\n }\n throw error\n }\n const applied = { ...proposal, status: 'applied' as const, contentHash: '0'.repeat(64) }\n return FixProposalV1Schema.parse({ ...applied, contentHash: contentHashForArtifactV1(applied) })\n}\n","import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs'\nimport { join, relative, resolve } from 'node:path'\n\nimport { contentHashForArtifactV1, sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { WorkflowRunV1Schema, type WorkflowRunV1, type WorkflowState, type WorkflowStep } from '../schemas/knowledge.js'\n\nexport const WORKFLOW_STAGES = ['collect', 'normalize', 'reconcile', 'evaluate', 'report'] as const\nexport type WorkflowStage = (typeof WORKFLOW_STAGES)[number]\n\nexport type WorkflowStageContext = {\n readonly root: string\n readonly stage: WorkflowStage\n readonly input: unknown\n readonly previousOutput: unknown\n}\n\nexport type WorkflowStageHandler = (context: WorkflowStageContext) => unknown\n\nexport type WorkflowOptions = {\n readonly root: string\n readonly stateDir?: string\n readonly sourceRevision: string\n readonly configurationHash: string\n readonly toolVersion?: string\n readonly runId?: string\n readonly stage?: WorkflowStage | 'all'\n readonly inputs?: Partial<Record<WorkflowStage, unknown>>\n readonly handlers: Partial<Record<WorkflowStage, WorkflowStageHandler>>\n}\n\nexport type WorkflowExecutionResult = {\n readonly run: WorkflowRunV1\n readonly stateDir: string\n readonly reusedStages: readonly WorkflowStage[]\n}\n\ntype PersistedArtifact = {\n readonly type: 'workflow-step-artifact'\n readonly stage: WorkflowStage\n readonly inputHash: string\n readonly outputHash: string\n readonly value: unknown\n}\n\nconst stageState: Record<WorkflowStage, WorkflowState> = {\n collect: 'discovering',\n normalize: 'analyzed',\n reconcile: 'compared',\n evaluate: 'proposed',\n report: 'delivered',\n}\n\nconst defaultStateDir = (root: string): string => join(root, '.doc-bridge', 'workflow')\n\nconst atomicWrite = (path: string, value: unknown): void => {\n const temp = `${path}.tmp-${process.pid}-${Date.now()}`\n writeFileSync(temp, `${JSON.stringify(value, null, 2)}\\n`, 'utf8')\n renameSync(temp, path)\n}\n\nconst writeManifest = (stateDir: string, run: WorkflowRunV1): void => {\n atomicWrite(join(stateDir, 'manifest.json'), run)\n}\n\nconst appendTransition = (stateDir: string, transition: WorkflowRunV1['transitions'][number]): void => {\n appendFileSync(join(stateDir, 'transitions.jsonl'), `${JSON.stringify(transition)}\\n`, 'utf8')\n}\n\nconst transition = (run: WorkflowRunV1, to: WorkflowState, reason?: string): WorkflowRunV1 => {\n const item = {\n from: run.state,\n to,\n at: new Date().toISOString(),\n ...(reason ? { reason } : {}),\n }\n return { ...run, state: to, transitions: [...run.transitions, item] }\n}\n\nconst runId = (): string => `${Date.now()}-${process.pid}`\n\nconst stageInputHash = (options: WorkflowOptions, stage: WorkflowStage, input: unknown): string =>\n sha256NormalizedV1({ stage, input, sourceRevision: options.sourceRevision, configurationHash: options.configurationHash, toolVersion: options.toolVersion ?? '1.0.0' })\n\nconst stageArtifactPath = (stateDir: string, stage: WorkflowStage, inputHash: string): string => join(stateDir, 'artifacts', `${stage}-${inputHash}.json`)\n\nconst readArtifact = (path: string): PersistedArtifact => JSON.parse(readFileSync(path, 'utf8')) as PersistedArtifact\n\nconst stepArtifactPath = (stateDir: string, step: WorkflowStep): string => resolve(stateDir, step.artifactRefs?.[0] ?? '')\n\nconst stepOutput = (stateDir: string, run: WorkflowRunV1, stage: WorkflowStage): unknown => {\n const step = run.steps.find((item) => item.name === stage)\n if (!step || step.status !== 'completed' || !step.artifactRefs?.[0]) return null\n return readArtifact(stepArtifactPath(stateDir, step)).value\n}\n\nconst acquireLock = (stateDir: string): (() => void) => {\n const lock = join(stateDir, '.lock')\n try {\n mkdirSync(lock)\n } catch {\n const ownerPath = join(lock, 'owner.json')\n try {\n const owner = JSON.parse(readFileSync(ownerPath, 'utf8')) as { pid?: number }\n if (typeof owner.pid === 'number') process.kill(owner.pid, 0)\n throw new Error(`Workflow is already running (pid ${owner.pid ?? 'unknown'}).`)\n } catch (error) {\n if (error instanceof Error && error.message.startsWith('Workflow is already running')) throw error\n rmSync(lock, { recursive: true, force: true })\n mkdirSync(lock)\n }\n }\n writeFileSync(join(lock, 'owner.json'), JSON.stringify({ pid: process.pid, startedAt: new Date().toISOString() }), 'utf8')\n return () => rmSync(lock, { recursive: true, force: true })\n}\n\nconst loadManifest = (stateDir: string): WorkflowRunV1 | undefined => {\n const path = join(stateDir, 'manifest.json')\n if (!existsSync(path)) return undefined\n return WorkflowRunV1Schema.parse(JSON.parse(readFileSync(path, 'utf8')) as unknown)\n}\n\nconst baseRun = (options: WorkflowOptions, stateDir: string, supersedes?: string): WorkflowRunV1 => {\n const inputHash = sha256NormalizedV1({ sourceRevision: options.sourceRevision, configurationHash: options.configurationHash, toolVersion: options.toolVersion ?? '1.0.0' })\n return WorkflowRunV1Schema.parse({\n type: 'workflow-run',\n schemaVersion: 1,\n contentHash: '0'.repeat(64),\n contentHashAlgo: 'sha256-normalized-v1',\n project: { name: resolve(options.root).split('/').pop() ?? 'project', root: '.' },\n sourceRevision: options.sourceRevision,\n sourceRevisionKind: 'content',\n configurationHash: options.configurationHash,\n pipelineVersion: '1.0.0',\n analyzerVersions: { workflow: options.toolVersion ?? '1.0.0' },\n runId: options.runId ?? runId(),\n state: 'created',\n steps: WORKFLOW_STAGES.map((name) => ({ name, status: 'pending', inputHash })) as WorkflowStep[],\n transitions: [{ from: null, to: 'created', at: new Date().toISOString() }],\n artifactRefs: [relative(resolve(options.root), stateDir), ...(supersedes ? [`supersedes:${supersedes}`] : [])],\n })\n}\n\nconst withHash = (run: WorkflowRunV1): WorkflowRunV1 => WorkflowRunV1Schema.parse({ ...run, contentHash: contentHashForArtifactV1(run) })\n\nconst sameInputs = (run: WorkflowRunV1, options: WorkflowOptions): boolean =>\n run.sourceRevision === options.sourceRevision &&\n run.configurationHash === options.configurationHash &&\n run.analyzerVersions.workflow === (options.toolVersion ?? '1.0.0')\n\nconst selectedStages = (stage: WorkflowOptions['stage']): readonly WorkflowStage[] =>\n stage && stage !== 'all' ? [stage] : WORKFLOW_STAGES\n\nexport const runWorkflow = (options: WorkflowOptions): WorkflowExecutionResult => {\n const root = resolve(options.root)\n const stateDir = resolve(root, options.stateDir ?? defaultStateDir(root))\n mkdirSync(join(stateDir, 'artifacts'), { recursive: true })\n const release = acquireLock(stateDir)\n try {\n let run = loadManifest(stateDir)\n let supersedes: string | undefined\n if (run && !sameInputs(run, options)) {\n supersedes = run.runId\n run = withHash(transition(run, 'stale', 'Source revision, configuration hash, or tool version changed.'))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n writeManifest(stateDir, run)\n run = undefined\n }\n if (!run) {\n run = withHash(baseRun(options, stateDir, supersedes))\n appendTransition(stateDir, run.transitions[0]!)\n writeManifest(stateDir, run)\n }\n\n if (!run) throw new Error('Workflow manifest was not initialized.')\n const firstSelectedStage = selectedStages(options.stage)[0]\n const previousStageIndex = firstSelectedStage ? WORKFLOW_STAGES.indexOf(firstSelectedStage) - 1 : -1\n let previousOutput: unknown = previousStageIndex >= 0 ? stepOutput(stateDir, run, WORKFLOW_STAGES[previousStageIndex]!) : null\n const reusedStages: WorkflowStage[] = []\n for (const stage of selectedStages(options.stage)) {\n const input = options.inputs?.[stage] ?? previousOutput\n const inputHash = stageInputHash(options, stage, input)\n const existing = run.steps.find((step) => step.name === stage)\n const artifactPath = existing?.artifactRefs?.[0] ? resolve(stateDir, existing.artifactRefs[0]) : stageArtifactPath(stateDir, stage, inputHash)\n if (existing?.status === 'completed' && existing.inputHash === inputHash && existing.outputHash && existsSync(artifactPath)) {\n previousOutput = readArtifact(artifactPath).value\n reusedStages.push(stage)\n continue\n }\n\n const handler = options.handlers[stage]\n if (!handler) throw new Error(`No handler configured for workflow stage \"${stage}\".`)\n run = withHash(transition(run, stageState[stage]))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n const runningStep: WorkflowStep = { name: stage, status: 'running', inputHash }\n run = withHash({ ...run, steps: run.steps.map((step) => step.name === stage ? runningStep : step) })\n writeManifest(stateDir, run)\n try {\n const value = handler({ root, stage, input, previousOutput })\n const outputHash = sha256NormalizedV1(value)\n const artifact: PersistedArtifact = { type: 'workflow-step-artifact', stage, inputHash, outputHash, value }\n mkdirSync(join(stateDir, 'artifacts'), { recursive: true })\n if (existsSync(artifactPath)) {\n const existingArtifact = readArtifact(artifactPath)\n if (existingArtifact.outputHash !== outputHash) throw new Error(`Immutable workflow artifact collision for stage \"${stage}\".`)\n } else {\n atomicWrite(artifactPath, artifact)\n }\n const ref = relative(stateDir, artifactPath)\n const completedStep: WorkflowStep = { name: stage, status: 'completed', inputHash, outputHash, artifactRefs: [ref] }\n run = withHash({ ...run, steps: run.steps.map((step) => step.name === stage ? completedStep : step) })\n writeManifest(stateDir, run)\n previousOutput = value\n } catch (error) {\n run = withHash(transition(run, 'failed', error instanceof Error ? error.message : String(error)))\n appendTransition(stateDir, run.transitions[run.transitions.length - 1]!)\n writeManifest(stateDir, run)\n throw error\n }\n }\n\n if (selectedStages(options.stage).every((stage) => run!.steps.find((step) => step.name === stage)?.status === 'completed')) {\n const complete = selectedStages(options.stage).includes('report') && run.state !== 'delivered' ? withHash(transition(run, 'delivered')) : run\n if (complete !== run) {\n appendTransition(stateDir, complete.transitions[complete.transitions.length - 1]!)\n run = complete\n }\n writeManifest(stateDir, run)\n if (run.state === 'delivered') atomicWrite(join(stateDir, 'last-known-good.json'), { runId: run.runId, manifestHash: run.contentHash, report: run.steps.find((step) => step.name === 'report')?.artifactRefs?.[0] })\n }\n return { run, stateDir, reusedStages }\n } finally {\n release()\n }\n}\n\nexport const loadWorkflowManifest = (stateDir: string): WorkflowRunV1 => WorkflowRunV1Schema.parse(JSON.parse(readFileSync(join(resolve(stateDir), 'manifest.json'), 'utf8')) as unknown)\n\nexport const loadWorkflowStepOutput = (stateDir: string, stage: WorkflowStage): unknown => stepOutput(resolve(stateDir), loadWorkflowManifest(stateDir), stage)\n","import { minimatch } from 'minimatch'\n\nimport {\n RuleIdSchema,\n RuleSeveritySchema,\n RulesConfigSchema,\n type RuleId,\n type RuleSeverity,\n type RulesConfig,\n} from '../config/schema.js'\nimport type { ReconciliationReportV1 } from '../schemas/knowledge.js'\n\nexport type RuleMode = 'default' | 'recommended' | 'strict'\n\nexport type RuleEngineOptions = {\n readonly config?: RulesConfig\n readonly preset?: RuleMode\n readonly severity?: Partial<Record<RuleId, RuleSeverity>>\n readonly ignore?: readonly RuleId[]\n readonly criticalEntities?: readonly string[]\n readonly criticalPaths?: readonly string[]\n readonly warningThresholds?: Partial<Record<RuleId, number>>\n}\n\nexport type RuleFinding = {\n readonly id: string\n readonly ruleId: RuleId\n readonly code: string\n readonly status: ReconciliationReportV1['diagnostics'][number]['status']\n readonly severity: RuleSeverity\n readonly message: string\n readonly evidence: ReconciliationReportV1['diagnostics'][number]['evidence']\n readonly entityIds?: readonly string[]\n readonly relationIds?: readonly string[]\n readonly remediation?: string\n readonly sourceDiagnosticCode?: string\n}\n\nexport type RuleEvaluationResult = {\n readonly mode: RuleMode\n readonly findings: readonly RuleFinding[]\n readonly exitCode: 0 | 1\n}\n\nconst diagnosticRules: Readonly<Record<string, RuleId>> = {\n DOCUMENTATION_QUALITY: 'documentation-quality',\n RELATION_UNDOCUMENTED: 'graph-undocumented-relation',\n DECLARED_RELATION_STALE: 'declared-unobserved-relation',\n UNRESOLVED_ENTITY_REFERENCE: 'unresolved-reference',\n CONFLICTING_DECLARATIONS: 'conflicting-declaration',\n RELATION_NOT_ANALYZED: 'not-analyzed-coverage',\n STALE_DOCUMENTATION: 'stale-documentation',\n FRESHNESS_FAILURE: 'freshness',\n OWNERSHIP_GAP: 'ownership',\n CENTRALITY_RISK: 'centrality-risk',\n CRITICAL_PATH_RISK: 'critical-path-risk',\n}\n\nconst defaultSeverity = (mode: RuleMode, ruleId: RuleId): RuleSeverity => {\n if (mode === 'default') return 'info'\n if (mode === 'strict') return ruleId === 'not-analyzed-coverage' ? 'warn' : 'error'\n return ruleId === 'not-analyzed-coverage' ? 'info' : 'warn'\n}\n\nconst resolvedOptions = (options: RuleEngineOptions): {\n readonly mode: RuleMode\n readonly severity: Partial<Record<RuleId, RuleSeverity>>\n readonly ignore: ReadonlySet<RuleId>\n readonly criticalEntities: readonly string[]\n readonly criticalPaths: readonly string[]\n readonly warningThresholds: Partial<Record<RuleId, number>>\n} => {\n const config = RulesConfigSchema.parse(options.config ?? {})\n const mode = options.preset ?? config.mode ?? 'default'\n const severity = { ...config.severity, ...options.severity }\n const ignore = new Set<RuleId>([...(config.ignore ?? []), ...(options.ignore ?? [])])\n return {\n mode,\n severity,\n ignore,\n criticalEntities: options.criticalEntities ?? config.criticalEntities ?? [],\n criticalPaths: options.criticalPaths ?? config.criticalPaths ?? [],\n warningThresholds: { ...config.warningThresholds, ...options.warningThresholds },\n }\n}\n\nconst severityFor = (\n ruleId: RuleId,\n mode: RuleMode,\n overrides: Partial<Record<RuleId, RuleSeverity>>,\n): RuleSeverity => overrides[ruleId] ?? defaultSeverity(mode, ruleId)\n\nconst findingFromDiagnostic = (\n diagnostic: ReconciliationReportV1['diagnostics'][number],\n ruleId: RuleId,\n severity: RuleSeverity,\n): RuleFinding => ({\n id: `${diagnostic.id}:${ruleId}`,\n ruleId,\n code: ruleId,\n status: diagnostic.status,\n severity,\n message: diagnostic.message,\n evidence: diagnostic.evidence,\n ...(diagnostic.entityIds ? { entityIds: diagnostic.entityIds } : {}),\n ...(diagnostic.relationIds ? { relationIds: diagnostic.relationIds } : {}),\n ...(diagnostic.remediation ? { remediation: diagnostic.remediation } : {}),\n sourceDiagnosticCode: diagnostic.code,\n})\n\nconst criticalFinding = (\n finding: RuleFinding,\n severity: RuleSeverity,\n target: string,\n): RuleFinding => ({\n ...finding,\n id: `${finding.id}:critical:${target}`,\n ruleId: 'critical-path-risk',\n code: 'critical-path-risk',\n severity,\n message: `Critical path or entity is affected: ${target}. ${finding.message}`,\n})\n\nexport const evaluateRules = (\n report: ReconciliationReportV1,\n options: RuleEngineOptions = {},\n): RuleEvaluationResult => {\n const resolved = resolvedOptions(options)\n const findings: RuleFinding[] = []\n\n for (const diagnostic of [...report.diagnostics].sort((a, b) => a.id.localeCompare(b.id))) {\n const ruleId = diagnosticRules[diagnostic.code]\n if (!ruleId || resolved.ignore.has(ruleId)) continue\n const severity = severityFor(ruleId, resolved.mode, resolved.severity)\n if (severity !== 'off') findings.push(findingFromDiagnostic(diagnostic, ruleId, severity))\n }\n\n const criticalSeverity = severityFor('critical-path-risk', resolved.mode, resolved.severity)\n const criticalEntitySet = new Set(resolved.criticalEntities)\n for (const finding of [...findings]) {\n const matchingEntity = (finding.entityIds ?? []).find((id) => criticalEntitySet.has(id))\n if (matchingEntity && !resolved.ignore.has('critical-path-risk') && criticalSeverity !== 'off') {\n findings.push(criticalFinding(finding, criticalSeverity, matchingEntity))\n }\n for (const path of resolved.criticalPaths) {\n if (finding.evidence.some((item) => minimatch(item.path, path, { dot: true })) && !resolved.ignore.has('critical-path-risk') && criticalSeverity !== 'off') {\n findings.push(criticalFinding(finding, criticalSeverity, path))\n }\n }\n }\n\n const centralityThreshold = resolved.warningThresholds['centrality-risk'] ?? 3\n const centralitySeverity = severityFor('centrality-risk', resolved.mode, resolved.severity)\n if (!resolved.ignore.has('centrality-risk') && centralitySeverity !== 'off') {\n const counts = new Map<string, number>()\n for (const finding of findings.filter((item) => item.ruleId === 'graph-undocumented-relation')) {\n for (const entityId of finding.entityIds ?? []) counts.set(entityId, (counts.get(entityId) ?? 0) + 1)\n }\n for (const [entityId, count] of [...counts.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n if (count < centralityThreshold || !criticalEntitySet.has(entityId)) continue\n findings.push({\n id: `centrality-risk:${entityId}`,\n ruleId: 'centrality-risk',\n code: 'centrality-risk',\n status: 'unresolved',\n severity: centralitySeverity,\n message: `Critical entity has ${count} undocumented relation finding(s); static centrality is a review signal, not a runtime availability claim.`,\n evidence: findings.filter((item) => item.ruleId === 'graph-undocumented-relation' && item.entityIds?.includes(entityId)).flatMap((item) => item.evidence),\n entityIds: [entityId],\n remediation: 'Review ownership, dependency boundaries, and runtime availability before declaring an SPOF.',\n })\n }\n }\n\n const sortedFindings = [...findings].sort((a, b) => a.id.localeCompare(b.id))\n return { mode: resolved.mode, findings: sortedFindings, exitCode: sortedFindings.some((finding) => finding.severity === 'error') ? 1 : 0 }\n}\n\nexport const parseRuleId = (value: string): RuleId => RuleIdSchema.parse(value)\nexport const parseRuleSeverity = (value: string): RuleSeverity => RuleSeveritySchema.parse(value)\n","/**\n * Canonical AgentsKit ecosystem section for llms.txt (and similar machine indexes).\n *\n * All products should render this block with the same heading and line shape so\n * agents can parse the seven-product mesh without per-repo inventiveness.\n */\n\nexport type EcosystemLlmsProduct = {\n readonly id: string\n readonly name: string\n readonly role?: string\n readonly promise: string\n readonly maturity?: string\n readonly surfaces: {\n readonly home?: string\n readonly docs?: string\n readonly llms?: string\n }\n}\n\nexport type FormatEcosystemLlmsBlockOptions = {\n readonly products: readonly EcosystemLlmsProduct[]\n /** When set, marks this product with **(current)**. */\n readonly currentProductId?: string\n /** Heading line without leading hashes — default `AgentsKit ecosystem`. */\n readonly heading?: string\n /**\n * Prefer docs URL when available; otherwise home.\n * Default: home, falling back to docs.\n */\n readonly prefer?: 'home' | 'docs'\n}\n\n/**\n * Returns markdown lines for the shared ecosystem block, including a trailing blank line.\n */\nexport function formatEcosystemLlmsBlock(options: FormatEcosystemLlmsBlockOptions): string[] {\n const heading = options.heading ?? 'AgentsKit ecosystem'\n const prefer = options.prefer ?? 'home'\n const lines: string[] = [`## ${heading}`, '']\n\n for (const product of options.products) {\n const primary =\n prefer === 'docs'\n ? product.surfaces.docs ?? product.surfaces.home\n : product.surfaces.home ?? product.surfaces.docs\n if (!primary) continue\n\n const current = product.id === options.currentProductId ? ' **(current)**' : ''\n const role = product.role ? ` Role: \\`${product.role}\\`.` : ''\n const maturity = product.maturity ? ` Maturity: ${product.maturity}.` : ''\n const machine = product.surfaces.llms ? ` Machine index: ${product.surfaces.llms}` : ''\n const promise = product.promise.trim()\n const promiseSentence = /[.!?]$/.test(promise) ? promise : `${promise}.`\n lines.push(\n `- [${product.name}](${primary})${current} — ${promiseSentence}${role}${maturity}${machine}`,\n )\n }\n\n lines.push('')\n return lines\n}\n\n/** Join the block into a single string ending with a newline. */\nexport function formatEcosystemLlmsSection(options: FormatEcosystemLlmsBlockOptions): string {\n return `${formatEcosystemLlmsBlock(options).join('\\n')}\\n`\n}\n","import { readFileSync } from 'node:fs'\n\nimport type { DocBridgeConfigV1 } from '../config/schema.js'\nimport {\n runDocumentationStandardV1,\n type DocumentationConformanceReportV1,\n} from '../conformance/documentation-standard-v1.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 =\n | 'index-freshness'\n | 'human-guide-links'\n | 'okf-type'\n | 'docs-style'\n | 'documentation-standard-v1'\n\nconst RESERVED_GATE_IDS = new Set(['link-rot', 'routing-currency', 'bootstrap-size'])\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 readonly details?: DocumentationConformanceReportV1\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 === 'documentation-standard-v1') {\n const details = runDocumentationStandardV1(root, config)\n return {\n id,\n ok: details.ok,\n message: details.ok\n ? 'Documentation Standard v1 required rules pass'\n : `${details.summary.required.failed} Documentation Standard v1 required rule(s) failed`,\n expected: 'all required rules pass or have approved exceptions',\n actual: `${details.summary.required.passed} passed, ${details.summary.required.failed} failed, ${details.summary.required.excepted} excepted`,\n details,\n }\n }\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 (RESERVED_GATE_IDS.has(id)) {\n process.emitWarning(`Gate \"${id}\" is reserved and has no runtime implementation; it was not executed.`, {\n code: 'AK_DOCS_RESERVED_GATE',\n })\n continue\n }\n ids.add(id as GateId)\n }\n for (const id of config.gates?.exclude ?? []) {\n if (!RESERVED_GATE_IDS.has(id)) ids.delete(id as GateId)\n }\n\n return [...ids]\n}\n","import { existsSync, readFileSync, realpathSync, statSync } from 'node:fs'\nimport { isAbsolute, relative, resolve, sep } from 'node:path'\n\nimport type {\n DocBridgeConfigV1,\n DocumentationStandardRuleId,\n DocumentationStandardV1Config,\n} from '../config/schema.js'\nimport { parseCanonicalEcosystemContract } from './ecosystem-contract.js'\nimport { buildDocBridgeIndex } from '../index-builder/build-index.js'\nimport { scanHumanDocRecords } from '../index-builder/human-adapters/index.js'\nimport { renderLlmsTxt } from '../index-builder/llms-txt.js'\nimport { toPosix } from '../lib/paths.js'\n\nexport const DOCUMENTATION_STANDARD_V1_ID = 'documentation-standard-v1' as const\nexport const DOCUMENTATION_STANDARD_V1_STATUS = 'stable' as const\n\nconst MAX_TEXT_EVIDENCE_BYTES = 4 * 1_024 * 1_024\n\nexport type { DocumentationStandardRuleId } from '../config/schema.js'\n\nexport type DocumentationStandardRuleLevel = 'required' | 'recommended'\nexport type DocumentationStandardRuleStatus = 'pass' | 'fail' | 'excepted'\n\nexport type DocumentationStandardEvidence = {\n readonly path: string\n readonly detail: string\n}\n\nexport type DocumentationStandardRemediation = {\n readonly command: string\n readonly detail: string\n}\n\nexport type DocumentationStandardRuleResult = {\n readonly id: DocumentationStandardRuleId\n readonly level: DocumentationStandardRuleLevel\n readonly status: DocumentationStandardRuleStatus\n readonly ok: boolean\n readonly message: string\n readonly evidence: readonly DocumentationStandardEvidence[]\n readonly remediation: DocumentationStandardRemediation\n readonly exception?: {\n readonly reason: string\n readonly approvedBy: string\n readonly trackingUrl: string\n }\n}\n\nexport type DocumentationConformanceReportV1 = {\n readonly schemaVersion: 1\n readonly profile: {\n readonly id: typeof DOCUMENTATION_STANDARD_V1_ID\n readonly version: 1\n readonly status: typeof DOCUMENTATION_STANDARD_V1_STATUS\n }\n readonly ok: boolean\n readonly recommendedOk: boolean\n readonly summary: {\n readonly required: { readonly passed: number; readonly failed: number; readonly excepted: number }\n readonly recommended: { readonly passed: number; readonly failed: number; readonly excepted: number }\n }\n readonly results: readonly DocumentationStandardRuleResult[]\n}\n\ntype RuleDraft = Omit<DocumentationStandardRuleResult, 'status' | 'ok' | 'exception'> & {\n readonly passed: boolean\n}\n\nconst safePath = (root: string, path: string): string | undefined => {\n const rootAbs = realpathSync.native(resolve(root))\n const unresolved = resolve(rootAbs, path)\n const unresolvedRel = relative(rootAbs, unresolved)\n if (isAbsolute(unresolvedRel) || unresolvedRel === '..' || unresolvedRel.startsWith(`..${sep}`)) return undefined\n if (!existsSync(unresolved)) return unresolved\n try {\n const abs = realpathSync.native(unresolved)\n const rel = relative(rootAbs, abs)\n return !isAbsolute(rel) && rel !== '..' && !rel.startsWith(`..${sep}`) ? abs : undefined\n } catch {\n return undefined\n }\n}\n\nconst fileEvidence = (\n root: string,\n path: string,\n options?: { readonly readContent?: boolean },\n): { readonly exists: boolean; readonly content: string; readonly evidence: DocumentationStandardEvidence } => {\n const abs = safePath(root, path)\n if (!abs) {\n return {\n exists: false,\n content: '',\n evidence: { path, detail: 'Path escapes the project root.' },\n }\n }\n if (!existsSync(abs)) {\n return { exists: false, content: '', evidence: { path, detail: 'File does not exist.' } }\n }\n try {\n const stat = statSync(abs)\n if (!stat.isFile()) {\n return { exists: false, content: '', evidence: { path, detail: 'Path is not a regular file.' } }\n }\n if (stat.size === 0) {\n return { exists: false, content: '', evidence: { path, detail: 'File is empty.' } }\n }\n if (options?.readContent === false) {\n return {\n exists: true,\n content: '',\n evidence: { path: toPosix(relative(resolve(root), abs)) || '.', detail: 'File exists and is non-empty.' },\n }\n }\n if (stat.size > MAX_TEXT_EVIDENCE_BYTES) {\n return {\n exists: false,\n content: '',\n evidence: { path, detail: `Text evidence exceeds ${MAX_TEXT_EVIDENCE_BYTES} bytes.` },\n }\n }\n const content = readFileSync(abs, 'utf8')\n return {\n exists: content.trim().length > 0,\n content,\n evidence: {\n path: toPosix(relative(resolve(root), abs)) || '.',\n detail: content.trim().length > 0 ? 'File exists and is non-empty.' : 'File is empty.',\n },\n }\n } catch {\n return { exists: false, content: '', evidence: { path, detail: 'File is not readable text.' } }\n }\n}\n\nconst resultWithException = (\n draft: RuleDraft,\n options: DocumentationStandardV1Config,\n): DocumentationStandardRuleResult => {\n if (draft.passed) {\n const { passed: _passed, ...result } = draft\n return { ...result, status: 'pass', ok: true }\n }\n\n const exception = options.exceptions?.find((candidate) => candidate.ruleId === draft.id)\n const { passed: _passed, ...result } = draft\n if (!exception) return { ...result, status: 'fail', ok: false }\n return {\n ...result,\n status: 'excepted',\n ok: true,\n exception: {\n reason: exception.reason,\n approvedBy: exception.approvedBy,\n trackingUrl: exception.trackingUrl,\n },\n }\n}\n\nconst humanDocsRule = (root: string, config: DocBridgeConfigV1): RuleDraft => {\n const docs = scanHumanDocRecords(root, config)\n return {\n id: 'human-docs',\n level: 'required',\n passed: docs.length > 0,\n message: docs.length > 0 ? `Found ${docs.length} human document(s).` : 'No human documentation was discovered.',\n evidence: docs.slice(0, 10).map((doc) => ({\n path: toPosix(relative(resolve(root), doc.path)),\n detail: `Human route: ${doc.url}`,\n })),\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: 'Configure corpus.human with a supported adapter and a non-agent documentation root.',\n },\n }\n}\n\nconst llmsRule = (\n root: string,\n config: DocBridgeConfigV1,\n options: DocumentationStandardV1Config,\n): RuleDraft => {\n const llmsPath = config.index?.llmsTxt?.outFile ?? 'llms.txt'\n const llmsKey = safePath(root, llmsPath) ?? resolve(root, llmsPath)\n const rawSources = new Map<string, string>()\n for (const path of options.rawSources ?? []) {\n const key = safePath(root, path) ?? resolve(root, path)\n if (key !== llmsKey && !rawSources.has(key)) rawSources.set(key, path)\n }\n const paths = [llmsPath, ...rawSources.values()]\n const evidence = paths.map((path) => fileEvidence(root, path))\n const generated = buildDocBridgeIndex({ root, config, write: false }).index\n const expectedLlms = renderLlmsTxt(config, generated.knowledge, generated.project?.name ?? 'project')\n const llmsIsFresh = evidence[0]?.content === expectedLlms\n if (evidence[0]?.exists) {\n evidence[0] = {\n ...evidence[0],\n evidence: {\n ...evidence[0].evidence,\n detail: llmsIsFresh\n ? 'File matches the deterministic ak-docs output.'\n : 'File is stale or was not generated by the current ak-docs inputs.',\n },\n }\n }\n const passed =\n config.index?.llmsTxt?.enabled !== false &&\n paths.length > 1 &&\n llmsIsFresh &&\n evidence.every((item) => item.exists)\n return {\n id: 'llms-and-raw-source',\n level: 'required',\n passed,\n message: passed\n ? `Resolved llms.txt and ${paths.length - 1} raw source(s).`\n : 'llms.txt must be enabled, current, and accompanied by at least one readable raw source.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'ak-docs index',\n detail: 'Generate llms.txt and configure conformance.documentationStandardV1.rawSources.',\n },\n }\n}\n\nconst normalizedUrl = (value: string): string => value.replace(/\\/$/, '')\n\nconst ecosystemContract = (\n root: string,\n options: DocumentationStandardV1Config,\n): {\n readonly passed: boolean\n readonly urls: ReadonlySet<string>\n readonly evidence: readonly DocumentationStandardEvidence[]\n} => {\n const declaration = options.ecosystemContract\n if (!declaration) {\n return {\n passed: false,\n urls: new Set(),\n evidence: [{ path: 'doc-bridge.config.json', detail: 'Canonical ecosystem contract evidence is not declared.' }],\n }\n }\n\n const manifestFile = fileEvidence(root, declaration.manifest)\n const claimsFile = fileEvidence(root, declaration.claims)\n const evidence: DocumentationStandardEvidence[] = [manifestFile.evidence, claimsFile.evidence]\n if (!manifestFile.exists || !claimsFile.exists) return { passed: false, urls: new Set(), evidence }\n\n try {\n const manifest: unknown = JSON.parse(manifestFile.content)\n const claims: unknown = JSON.parse(claimsFile.content)\n const contract = parseCanonicalEcosystemContract(manifest, claims)\n const productIds = contract.manifest.products.map((product) => product.id)\n if (!productIds.includes(declaration.productId)) throw new Error(`Manifest is missing product ${declaration.productId}.`)\n\n const urls = new Set<string>()\n for (const product of contract.manifest.products) {\n for (const value of [\n product.surfaces.home,\n product.surfaces.docs,\n product.surfaces.llms,\n product.surfaces.stats,\n ]) {\n if (typeof value === 'string' && /^https:\\/\\//.test(value)) urls.add(normalizedUrl(value))\n }\n }\n evidence[0] = { path: declaration.manifest, detail: `Validated ${productIds.length} canonical product(s), including ${declaration.productId}.` }\n evidence[1] = { path: declaration.claims, detail: `Validated claim-ledger identity for ${contract.claims.products.length} product(s).` }\n return { passed: urls.size > 0, urls, evidence }\n } catch (error) {\n evidence.push({\n path: `${declaration.manifest}, ${declaration.claims}`,\n detail: error instanceof Error ? error.message : 'Canonical ecosystem contract is invalid.',\n })\n return { passed: false, urls: new Set(), evidence }\n }\n}\n\nconst handoffsRule = (root: string, config: DocBridgeConfigV1): RuleDraft => {\n const index = buildDocBridgeIndex({ root, config, write: false }).index\n const handoffs = Object.values(index.handoffs ?? {})\n const ready = handoffs.filter(\n (handoff) =>\n handoff.startHere.length > 0 &&\n handoff.editRoots.length > 0 &&\n handoff.checks.length > 0 &&\n (handoff.bridge?.humanDoc === 'linked' || handoff.bridge?.humanDoc === 'external'),\n )\n return {\n id: 'agent-handoffs',\n level: 'required',\n passed: ready.length > 0 && ready.length === handoffs.length,\n message:\n ready.length > 0 && ready.length === handoffs.length\n ? `${ready.length} handoff(s) are action-ready and human-linked.`\n : `${ready.length}/${handoffs.length} handoff(s) are action-ready and human-linked.`,\n evidence: handoffs.map((handoff) => ({\n path: handoff.startHere,\n detail: `${handoff.target.id}: ${handoff.editRoots.length} edit root(s), ${handoff.checks.length} check(s), bridge=${handoff.bridge?.humanDoc ?? 'none'}`,\n })),\n remediation: {\n command: 'ak-docs bootstrap agent-docs && ak-docs index',\n detail: 'Add ownership checks and a resolvable humanDoc for every handoff.',\n },\n }\n}\n\nconst contributionRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const paths = options.contributionPaths?.length ? options.contributionPaths : ['CONTRIBUTING.md']\n const evidence = paths.map((path) => fileEvidence(root, path))\n return {\n id: 'contribution',\n level: 'required',\n passed: evidence.some((item) => item.exists),\n message: evidence.some((item) => item.exists) ? 'Contribution guidance is available.' : 'Contribution guidance is missing.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'edit CONTRIBUTING.md',\n detail: 'Document setup, validation commands, and the pull-request workflow.',\n },\n }\n}\n\nconst markersRule = (\n root: string,\n options: DocumentationStandardV1Config,\n kind: 'metadata' | 'structured-diagrams',\n level: DocumentationStandardRuleLevel,\n): RuleDraft => {\n const declarations = options[kind === 'metadata' ? 'metadata' : 'diagrams'] ?? []\n const evidence: DocumentationStandardEvidence[] = []\n let passed = declarations.length > 0\n for (const declaration of declarations) {\n const file = fileEvidence(root, declaration.path)\n const missing = declaration.contains.filter((marker) => !file.content.includes(marker))\n if (!file.exists || missing.length > 0) passed = false\n evidence.push({\n path: declaration.path,\n detail: !file.exists\n ? file.evidence.detail\n : missing.length\n ? `Missing marker(s): ${missing.join(', ')}`\n : `Found marker(s): ${declaration.contains.join(', ')}`,\n })\n }\n return {\n id: kind,\n level,\n passed,\n message: passed ? `${kind} evidence is complete.` : `${kind} evidence is incomplete.`,\n evidence,\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: `Declare ${kind} evidence paths and markers that exist in the repository.`,\n },\n }\n}\n\nconst linksRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const links = options.links ?? []\n const contract = ecosystemContract(root, options)\n const evidence: DocumentationStandardEvidence[] = [...contract.evidence]\n let passed = links.length > 0 && contract.passed\n for (const link of links) {\n const sources = link.paths.map((path) => ({ path, file: fileEvidence(root, path) }))\n const matches = sources.filter(({ file }) => file.exists && file.content.includes(link.url))\n const canonical = contract.urls.has(normalizedUrl(link.url))\n if (matches.length === 0 || !canonical) passed = false\n evidence.push({\n path: sources.map((source) => source.path).join(', '),\n detail:\n matches.length === 0\n ? `Missing ${link.url}`\n : canonical\n ? `Found canonical ecosystem URL ${link.url}`\n : `Found ${link.url}, but it is absent from the canonical ecosystem manifest.`,\n })\n }\n return {\n id: 'cross-links',\n level: 'required',\n passed,\n message: passed ? `${links.length} required ecosystem link(s) resolve in source.` : 'One or more required ecosystem links are missing from source.',\n evidence,\n remediation: {\n command: 'edit README.md',\n detail: 'Sync the canonical ecosystem snapshots and add each configured canonical URL to a declared documentation source.',\n },\n }\n}\n\nconst quickstartsRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const quickstarts = options.quickstarts ?? []\n const evidence: DocumentationStandardEvidence[] = []\n let passed = quickstarts.length > 0\n for (const quickstart of quickstarts) {\n const doc = fileEvidence(root, quickstart.doc)\n const test = fileEvidence(root, quickstart.test)\n const missingMarkers = quickstart.testContains.filter((marker) => !test.content.includes(marker))\n if (!doc.exists || !test.exists || missingMarkers.length > 0 || !quickstart.command.trim()) passed = false\n evidence.push(\n { path: quickstart.doc, detail: `${quickstart.id}: ${doc.evidence.detail}` },\n {\n path: quickstart.test,\n detail: missingMarkers.length\n ? `${quickstart.id}: missing test marker(s): ${missingMarkers.join(', ')}`\n : `${quickstart.id}: test evidence; CI command: ${quickstart.command}`,\n },\n )\n }\n return {\n id: 'tested-quickstarts',\n level: 'required',\n passed,\n message: passed ? `${quickstarts.length} quickstart(s) have executable test evidence.` : 'Quickstart test evidence is incomplete.',\n evidence,\n remediation: {\n command: 'pnpm test',\n detail: 'Map every quickstart to a documentation path, test file, identifying marker, and CI command.',\n },\n }\n}\n\nconst visualsRule = (root: string, options: DocumentationStandardV1Config): RuleDraft => {\n const visuals = options.visuals ?? []\n const evidence = visuals.map((path) => fileEvidence(root, path, { readContent: false }))\n return {\n id: 'visual-explanations',\n level: 'recommended',\n passed: visuals.length > 0 && evidence.every((item) => item.exists),\n message: visuals.length > 0 && evidence.every((item) => item.exists) ? `${visuals.length} visual asset(s) found.` : 'Visual explanation evidence is incomplete.',\n evidence: evidence.map((item) => item.evidence),\n remediation: {\n command: 'edit doc-bridge.config.json',\n detail: 'Declare the images or animations that explain the product workflow.',\n },\n }\n}\n\nconst count = (\n results: readonly DocumentationStandardRuleResult[],\n level: DocumentationStandardRuleLevel,\n status: DocumentationStandardRuleStatus,\n): number => results.filter((result) => result.level === level && result.status === status).length\n\nexport const runDocumentationStandardV1 = (\n root: string,\n config: DocBridgeConfigV1,\n): DocumentationConformanceReportV1 => {\n const options = config.conformance?.documentationStandardV1 ?? {}\n const drafts: RuleDraft[] = [\n humanDocsRule(root, config),\n llmsRule(root, config, options),\n handoffsRule(root, config),\n contributionRule(root, options),\n markersRule(root, options, 'metadata', 'required'),\n linksRule(root, options),\n quickstartsRule(root, options),\n visualsRule(root, options),\n markersRule(root, options, 'structured-diagrams', 'recommended'),\n ]\n const results = drafts.map((draft) => resultWithException(draft, options))\n return {\n schemaVersion: 1,\n profile: { id: DOCUMENTATION_STANDARD_V1_ID, version: 1, status: DOCUMENTATION_STANDARD_V1_STATUS },\n ok: results.filter((result) => result.level === 'required').every((result) => result.ok),\n recommendedOk: results.filter((result) => result.level === 'recommended').every((result) => result.ok),\n summary: {\n required: {\n passed: count(results, 'required', 'pass'),\n failed: count(results, 'required', 'fail'),\n excepted: count(results, 'required', 'excepted'),\n },\n recommended: {\n passed: count(results, 'recommended', 'pass'),\n failed: count(results, 'recommended', 'fail'),\n excepted: count(results, 'recommended', 'excepted'),\n },\n },\n results,\n }\n}\n\nexport const formatDocumentationStandardText = (\n report: DocumentationConformanceReportV1,\n): string[] => [\n `Documentation Standard v1 (${report.profile.status})`,\n `Required: ${report.summary.required.passed} passed · ${report.summary.required.failed} failed · ${report.summary.required.excepted} excepted`,\n `Recommended: ${report.summary.recommended.passed} passed · ${report.summary.recommended.failed} failed · ${report.summary.recommended.excepted} excepted`,\n '',\n ...report.results.flatMap((result) => [\n `${result.status === 'pass' ? 'PASS' : result.status === 'excepted' ? 'EXCEPTED' : 'FAIL'} [${result.level}] ${result.id}: ${result.message}`,\n ...result.evidence.map((evidence) => ` evidence: ${evidence.path} — ${evidence.detail}`),\n ...(result.exception\n ? [` exception: ${result.exception.reason} — ${result.exception.approvedBy} (${result.exception.trackingUrl})`]\n : result.ok\n ? []\n : [` fix: ${result.remediation.command} — ${result.remediation.detail}`]),\n ]),\n]\n","import { z } from 'zod'\n\nconst NonEmptyStringSchema = z.string().refine((value) => value.trim().length > 0, 'must be non-empty')\nconst HttpsUrlSchema = z.string().url().refine((value) => value.startsWith('https://'), 'must use https')\nconst RepoSchema = z.string().regex(/^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$/)\nconst SlugSchema = z.string().regex(/^[a-z][a-z0-9-]*$/)\n\nconst SurfaceSchema = z.object({\n home: HttpsUrlSchema.optional(),\n docs: HttpsUrlSchema.optional(),\n llms: HttpsUrlSchema.optional(),\n stats: HttpsUrlSchema.optional(),\n documentation: z.enum(['fumadocs', 'repository']),\n chat: z.enum(['agentschat', 'custom', 'none']),\n}).passthrough()\n\nconst ProductSchema = z.object({\n id: SlugSchema,\n name: NonEmptyStringSchema,\n shortName: NonEmptyStringSchema,\n kind: NonEmptyStringSchema,\n role: NonEmptyStringSchema,\n promise: NonEmptyStringSchema,\n maturity: z.enum(['planning', 'alpha', 'beta', 'stable', 'deprecated']),\n repo: RepoSchema.nullable(),\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n surfaces: SurfaceSchema,\n navigation: z.object({\n showInBar: z.boolean(),\n order: z.number().int().nonnegative().optional(),\n next: z.array(SlugSchema),\n }).passthrough(),\n}).passthrough()\n\nconst LegacyPropertySchema = z.object({\n id: SlugSchema,\n name: NonEmptyStringSchema,\n barLabel: NonEmptyStringSchema,\n domain: NonEmptyStringSchema,\n url: HttpsUrlSchema,\n repo: RepoSchema.nullable(),\n tagline: NonEmptyStringSchema,\n kind: NonEmptyStringSchema,\n accent: z.string().regex(/^#[0-9A-Fa-f]{6}$/),\n llms: HttpsUrlSchema.optional(),\n stats: HttpsUrlSchema.optional(),\n}).passthrough()\n\nconst ManifestSchema = z.object({\n schemaVersion: z.literal(2),\n parentBrand: z.object({ id: NonEmptyStringSchema, name: NonEmptyStringSchema }).passthrough(),\n products: z.array(ProductSchema).min(1),\n // Historical four-product shim or full seven-product projection of products[].\n properties: z\n .array(LegacyPropertySchema)\n .refine((value) => value.length === 4 || value.length === 7, {\n message: 'must project either the legacy four products or the full seven-product catalog',\n }),\n builder: z.object({ id: NonEmptyStringSchema, name: NonEmptyStringSchema, url: HttpsUrlSchema }).passthrough().optional(),\n}).passthrough()\n\nconst EvidenceSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('repository-derivation'),\n repo: RepoSchema,\n path: NonEmptyStringSchema,\n summary: NonEmptyStringSchema,\n }).passthrough(),\n z.object({ type: z.literal('endpoint'), url: HttpsUrlSchema, summary: NonEmptyStringSchema }).passthrough(),\n])\n\nconst ClaimSchema = z.object({\n id: NonEmptyStringSchema,\n value: z.number().finite().nonnegative(),\n noun: NonEmptyStringSchema,\n conservativeFloor: z.number().int().nonnegative().optional(),\n evidence: EvidenceSchema,\n}).passthrough()\n\nconst ClaimProductSchema = z.object({\n productId: SlugSchema,\n source: z.discriminatedUnion('type', [\n z.object({ type: z.literal('endpoint'), url: HttpsUrlSchema }).passthrough(),\n z.object({ type: z.literal('repository'), repo: RepoSchema }).passthrough(),\n z.object({ type: z.literal('declaration'), summary: NonEmptyStringSchema }).passthrough(),\n ]),\n verification: z.enum(['verified', 'declared']),\n claims: z.array(ClaimSchema),\n}).passthrough()\n\nconst ClaimsSchema = z.object({\n schemaVersion: z.literal(1),\n manifestSchemaVersion: z.literal(2),\n products: z.array(ClaimProductSchema),\n}).passthrough()\n\n/** Historical four-product shim order. */\nconst LEGACY_FOUR_PRODUCT_IDS = ['agentskit', 'akos', 'playbook', 'registry'] as const\n/** Full seven-product projection order (matches products[]). */\nconst FULL_SEVEN_PRODUCT_IDS = [\n 'agentskit',\n 'registry',\n 'agentskit-chat',\n 'playbook',\n 'doc-bridge',\n 'code-review',\n 'akos',\n] as const\n\nexport const parseCanonicalEcosystemContract = (\n manifestInput: unknown,\n claimsInput: unknown,\n): { readonly manifest: z.infer<typeof ManifestSchema>; readonly claims: z.infer<typeof ClaimsSchema> } => {\n const manifest = ManifestSchema.parse(manifestInput)\n const claims = ClaimsSchema.parse(claimsInput)\n const products = new Map(manifest.products.map((product) => [product.id, product]))\n if (products.size !== manifest.products.length) throw new Error('Manifest product IDs must be unique.')\n\n const navigationOrders = new Set<number>()\n for (const product of manifest.products) {\n if (product.surfaces.documentation === 'fumadocs' && !product.surfaces.docs) {\n throw new Error(`Product ${product.id} requires a docs surface for Fumadocs.`)\n }\n if (product.navigation.showInBar) {\n if (!product.surfaces.home || product.navigation.order === undefined) {\n throw new Error(`Product ${product.id} requires home and order for shared navigation.`)\n }\n if (navigationOrders.has(product.navigation.order)) throw new Error('Navigation orders must be unique.')\n navigationOrders.add(product.navigation.order)\n }\n const next = new Set(product.navigation.next)\n if (next.size !== product.navigation.next.length || next.has(product.id)) {\n throw new Error(`Product ${product.id} has duplicate or self-referential navigation.`)\n }\n for (const nextId of next) {\n if (!products.has(nextId)) throw new Error(`Product ${product.id} references unknown product ${nextId}.`)\n }\n }\n\n const propertyIds =\n manifest.properties.length === 7 ? FULL_SEVEN_PRODUCT_IDS : LEGACY_FOUR_PRODUCT_IDS\n\n for (const [index, id] of propertyIds.entries()) {\n const legacy = manifest.properties[index]\n const product = products.get(id)\n if (!legacy || !product || legacy.id !== id || !product.surfaces.home) {\n throw new Error(`Legacy property ${index} must project product ${id}.`)\n }\n const expected = {\n name: product.name,\n barLabel: product.shortName,\n domain: new URL(product.surfaces.home).host,\n url: product.surfaces.home,\n repo: product.repo,\n tagline: product.promise,\n kind: product.kind,\n accent: product.accent,\n llms: product.surfaces.llms,\n stats: product.surfaces.stats,\n }\n for (const [key, value] of Object.entries(expected)) {\n if (legacy[key as keyof typeof legacy] !== value) throw new Error(`Legacy ${id}.${key} must match v2.`)\n }\n }\n\n const claimProducts = new Map(claims.products.map((product) => [product.productId, product]))\n if (claimProducts.size !== claims.products.length || claimProducts.size !== products.size) {\n throw new Error('Claims must include every manifest product exactly once.')\n }\n for (const [productId, product] of products) {\n const claimProduct = claimProducts.get(productId)\n if (!claimProduct) throw new Error(`Claims are missing product ${productId}.`)\n if (claimProduct.source.type === 'endpoint') {\n if (claimProduct.source.url !== product.surfaces.stats) throw new Error(`Claims source for ${productId} must match stats.`)\n } else if (claimProduct.source.type === 'repository' && claimProduct.source.repo !== product.repo) {\n throw new Error(`Claims source for ${productId} must match repo.`)\n } else if (claimProduct.source.type === 'declaration' && product.repo !== null) {\n throw new Error(`Declaration source for ${productId} requires a null repo.`)\n }\n if (claimProduct.verification === 'declared' && claimProduct.claims.length > 0) {\n throw new Error(`Declared product ${productId} cannot publish claims.`)\n }\n const claimIds = new Set<string>()\n for (const claim of claimProduct.claims) {\n if (claimIds.has(claim.id)) throw new Error(`Product ${productId} has duplicate claim ${claim.id}.`)\n claimIds.add(claim.id)\n if (claim.conservativeFloor !== undefined && claim.conservativeFloor > claim.value) {\n throw new Error(`Claim ${productId}:${claim.id} has a floor above its value.`)\n }\n if (claim.evidence.type === 'repository-derivation' && claim.evidence.repo !== product.repo) {\n throw new Error(`Claim ${productId}:${claim.id} evidence must match the product repo.`)\n }\n }\n }\n\n return { manifest, claims }\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 { mkdirSync, readFileSync, realpathSync, writeFileSync } from 'node:fs'\nimport { join, 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'\nimport { loadWorkflowManifest, loadWorkflowStepOutput } from '../workflow/engine.js'\nimport { parseDiscoverySnapshot, parseReconciliationReport } from '../validate.js'\nimport { applyFixProposal, approveFixProposal, createArtifactNormalizationProposal, createMarkdownLinkFixProposal } from '../fixes/proposals.js'\nimport { createRegistryAgentAdapter, loadRegistryAgentRunner, persistRegistryAgentProposal } from '../agents/registry-adapter.js'\nimport { sha256NormalizedV1 } from '../index-builder/content-hash.js'\nimport { discoverRepository } from '../discovery/repository.js'\nimport { FixProposalV1Schema, type DiscoverySnapshotV1, type ReconciliationReportV1, type FixProposalV1 } from '../schemas/knowledge.js'\nimport { redactValue } from '../safety/repository.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 title: 'Resolve repository handoff',\n description: 'Resolve a package or ownership id to its deterministic AgentHandoff.',\n annotations: { readOnlyHint: true },\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 title: 'Search repository documentation',\n description: 'Search the deterministic Doc Bridge index for repository documentation.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { term: { type: 'string' }, limit: { type: 'number' } },\n required: ['term'],\n },\n },\n {\n name: 'doc.get',\n title: 'Read indexed documentation',\n description: 'Read one indexed agent documentation file by id or indexed path.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { id: { type: 'string' }, path: { type: 'string' } },\n },\n },\n {\n name: 'gate.status',\n title: 'Check documentation gates',\n description: 'Evaluate documentation gates without writing files.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'retriever.query',\n title: 'Retrieve documentation context',\n description: 'Return relevant local Doc Bridge index chunks for a query.',\n annotations: { readOnlyHint: true },\n inputSchema: {\n type: 'object',\n properties: { query: { type: 'string' }, limit: { type: 'number' } },\n required: ['query'],\n },\n },\n {\n name: 'memory.classify',\n title: 'Classify memory candidates',\n description: 'Classify local memory candidates into agent, human, playbook, or discard routes.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'memory.promoteDraft',\n title: 'Draft memory promotion',\n description: 'Build a reviewable draft promotion body from local memory candidates without publishing it.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'registry.topology',\n title: 'Inspect registry topology',\n description: 'Return the static Doc Bridge curator and delegate topology.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'docbridge.snapshot',\n title: 'Read the latest discovery snapshot',\n description: 'Read the bounded canonical repository snapshot from the latest workflow run.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { runId: { type: 'string' } } },\n },\n {\n name: 'docbridge.report',\n title: 'Read the latest reconciliation report',\n description: 'Read the canonical reconciliation report from the latest workflow run.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { runId: { type: 'string' } } },\n },\n {\n name: 'docbridge.diagnostics',\n title: 'Read reconciliation diagnostics',\n description: 'Read bounded diagnostics from the latest canonical reconciliation report.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { status: { type: 'string' }, severity: { type: 'string' } } },\n },\n {\n name: 'docbridge.relations',\n title: 'Read architecture relations',\n description: 'Read bounded observed and declared relations from the latest canonical snapshot.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: { kind: { type: 'string' }, limit: { type: 'number' } } },\n },\n {\n name: 'docbridge.run',\n title: 'Read workflow state',\n description: 'Read the latest resumable workflow state and artifact references.',\n annotations: { readOnlyHint: true },\n inputSchema: { type: 'object', properties: {} },\n },\n {\n name: 'docbridge.proposals',\n title: 'Read or approve proposals',\n description: 'Create, inspect, approve and apply deterministic proposals through the shared human-gated workflow.',\n inputSchema: { type: 'object', properties: { action: { type: 'string', enum: ['list', 'propose-links', 'propose-normalize', 'suggest', 'approve', 'apply'] }, proposalHash: { type: 'string' }, artifactPath: { type: 'string' }, approvedBy: { type: 'string' }, proposal: { type: 'object' } } },\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 WorkflowRunArgsSchema = z.object({ runId: z.string().min(1).optional() })\nconst DiagnosticsArgsSchema = z.object({ status: z.string().min(1).optional(), severity: z.string().min(1).optional() })\nconst RelationsArgsSchema = z.object({ kind: z.string().min(1).optional(), limit: z.number().int().positive().max(500).optional() })\nconst ProposalsArgsSchema = z.object({ action: z.enum(['list', 'propose-links', 'propose-normalize', 'suggest', 'approve', 'apply']).optional(), proposalHash: z.string().min(1).optional(), artifactPath: z.string().min(1).optional(), approvedBy: z.string().min(1).optional(), proposal: z.unknown().optional() })\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\nconst workflowStateDir = (ctx: McpContext): string => resolve(ctx.root, ctx.config.workflow?.stateDir ?? '.doc-bridge/workflow')\n\nconst workflowRun = (ctx: McpContext) => loadWorkflowManifest(workflowStateDir(ctx))\n\nconst ensureLatestRun = (ctx: McpContext, runId?: string) => {\n const run = workflowRun(ctx)\n if (runId && run.runId !== runId) throw new Error(`Unknown workflow run \"${runId}\"`)\n if (run.state === 'stale' || run.state === 'failed') throw new Error(`Workflow run is ${run.state}; resume or create a valid run before reading artifacts.`)\n return run\n}\n\nconst workflowSnapshot = (ctx: McpContext, runId?: string): DiscoverySnapshotV1 => {\n ensureLatestRun(ctx, runId)\n return parseDiscoverySnapshot(loadWorkflowStepOutput(workflowStateDir(ctx), 'normalize'))\n}\n\nconst workflowReport = (ctx: McpContext, runId?: string): ReconciliationReportV1 => {\n ensureLatestRun(ctx, runId)\n return parseReconciliationReport(loadWorkflowStepOutput(workflowStateDir(ctx), 'reconcile'))\n}\n\nconst proposalPath = (ctx: McpContext): string => join(ctx.root, '.doc-bridge', 'proposal.json')\nconst readSavedProposal = (ctx: McpContext, input: unknown): FixProposalV1 => {\n if (input !== undefined) return FixProposalV1Schema.parse(input)\n try { return FixProposalV1Schema.parse(JSON.parse(readFileSync(proposalPath(ctx), 'utf8')) as unknown) } catch { throw new Error(`No saved fix proposal at ${proposalPath(ctx)}.`) }\n}\nconst saveProposal = (ctx: McpContext, proposal: FixProposalV1): void => { mkdirSync(join(ctx.root, '.doc-bridge'), { recursive: true }); writeFileSync(proposalPath(ctx), `${JSON.stringify(proposal, null, 2)}\\n`, 'utf8') }\n\nconst enabledMcpTools = (ctx: McpContext) => {\n const configured = ctx.config.surfaces?.mcp?.tools\n if (!configured || configured.length === MCP_TOOLS.length && MCP_TOOLS.every((tool) => configured.includes(tool.name as typeof configured[number]))) return MCP_TOOLS\n return MCP_TOOLS.filter((tool) => configured.includes(tool.name as typeof configured[number]))\n}\n\nconst assertMcpToolEnabled = (ctx: McpContext, name: string): void => {\n if (!MCP_TOOLS.some((tool) => tool.name === name)) throw new Error(`Unknown tool \"${name}\"`)\n if (!enabledMcpTools(ctx).some((tool) => tool.name === name)) throw new Error(`MCP tool \"${name}\" is disabled by configuration.`)\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: enabledMcpTools(ctx) }\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 if (typeof name !== 'string') throw new Error('MCP tools/call requires a tool name.')\n assertMcpToolEnabled(ctx, name)\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 if (name === 'docbridge.snapshot') {\n const parsed = parseToolArgs('docbridge.snapshot', WorkflowRunArgsSchema, args)\n return textResult(redactValue(workflowSnapshot(ctx, parsed.runId)))\n }\n\n if (name === 'docbridge.report') {\n const parsed = parseToolArgs('docbridge.report', WorkflowRunArgsSchema, args)\n return textResult(redactValue(workflowReport(ctx, parsed.runId)))\n }\n\n if (name === 'docbridge.diagnostics') {\n const parsed = parseToolArgs('docbridge.diagnostics', DiagnosticsArgsSchema, args)\n const diagnostics = workflowReport(ctx).diagnostics.filter((diagnostic) =>\n (!parsed.status || diagnostic.status === parsed.status) && (!parsed.severity || diagnostic.severity === parsed.severity),\n )\n return textResult(redactValue({ reportHash: workflowReport(ctx).contentHash, diagnostics }))\n }\n\n if (name === 'docbridge.relations') {\n const parsed = parseToolArgs('docbridge.relations', RelationsArgsSchema, args)\n const snapshot = workflowSnapshot(ctx)\n return textResult({ snapshotHash: snapshot.contentHash, relations: snapshot.relations.filter((relation) => !parsed.kind || relation.kind === parsed.kind).slice(0, parsed.limit ?? 100) })\n }\n\n if (name === 'docbridge.run') {\n parseToolArgs('docbridge.run', z.object({}), args)\n return textResult(workflowRun(ctx))\n }\n\n if (name === 'docbridge.proposals') {\n const parsed = parseToolArgs('docbridge.proposals', ProposalsArgsSchema, args)\n const run = (() => { try { return workflowRun(ctx) } catch { return undefined } })()\n if (!parsed.action || parsed.action === 'list') {\n let proposal: FixProposalV1 | undefined\n try { proposal = readSavedProposal(ctx, undefined) } catch { proposal = undefined }\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposals: proposal ? [proposal] : [] }))\n }\n if (parsed.action === 'suggest') {\n return loadRegistryAgentRunner(ctx.root, ctx.config).then(async (runner) => {\n const snapshot = workflowSnapshot(ctx)\n const report = workflowReport(ctx)\n const adapter = createRegistryAgentAdapter(ctx.root, ctx.config, runner)\n const proposal = await adapter.run(snapshot, report)\n const savedPath = persistRegistryAgentProposal(workflowStateDir(ctx), proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal, proposalPath: savedPath }))\n })\n }\n const discovered = discoverRepository({ root: ctx.root, config: ctx.config })\n const options = { baseRevision: discovered.sourceRevision, configurationHash: sha256NormalizedV1(ctx.config), ...(ctx.config.project?.name ? { projectName: ctx.config.project.name } : {}) }\n if (parsed.action === 'propose-links') {\n const proposal = createMarkdownLinkFixProposal(ctx.root, options)\n if (proposal) saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal: proposal ?? null }))\n }\n if (parsed.action === 'propose-normalize') {\n if (!parsed.artifactPath) throw new Error('docbridge.proposals propose-normalize requires artifactPath')\n const proposal = createArtifactNormalizationProposal(ctx.root, parsed.artifactPath, options)\n if (proposal) saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal: proposal ?? null }))\n }\n if (parsed.action === 'approve') {\n const proposal = approveFixProposal(readSavedProposal(ctx, parsed.proposal), parsed.approvedBy ?? 'human')\n if (parsed.proposalHash && proposal.approval?.proposalHash !== parsed.proposalHash) throw new Error('proposalHash does not match the saved proposal')\n saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal }))\n }\n const proposal = applyFixProposal(ctx.root, readSavedProposal(ctx, parsed.proposal), { currentRevision: discovered.sourceRevision })\n saveProposal(ctx, proposal)\n return textResult(redactValue({ ...(run ? { runId: run.runId } : {}), proposal }))\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\ntype StdioFraming = 'content-length' | 'json-line'\n\nconst writeFrame = (payload: unknown, framing: StdioFraming): void => {\n const body = JSON.stringify(payload)\n process.stdout.write(framing === 'json-line' ? `${body}\\n` : `Content-Length: ${Buffer.byteLength(body)}\\r\\n\\r\\n${body}`)\n}\n\nexport const respondMcpRequest = async (ctx: McpContext, request: JsonRpcRequest, framing: StdioFraming): Promise<void> => {\n if (request.id === undefined) {\n try {\n await handleMcpRequest(ctx, request)\n } catch {\n // Notifications do not get responses.\n }\n return\n }\n\n try {\n const result = await handleMcpRequest(ctx, request)\n writeFrame({ jsonrpc: '2.0', id: request.id, result: result ?? {} }, framing)\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 }, framing)\n }\n}\n\nexport const startMcpStdioServer = (ctx: McpContext): void => {\n let buffer = Buffer.alloc(0)\n let responseChain = Promise.resolve()\n const enqueueResponse = (request: JsonRpcRequest, framing: StdioFraming): void => {\n responseChain = responseChain.then(() => respondMcpRequest(ctx, request, framing))\n }\n process.stdin.on('data', (chunk: Buffer) => {\n buffer = Buffer.concat([buffer, chunk])\n while (true) {\n if (/^content-length:/i.test(buffer.subarray(0, Math.min(buffer.length, 32)).toString('utf8'))) {\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 enqueueResponse(JSON.parse(raw) as JsonRpcRequest, 'content-length')\n continue\n }\n\n const lineEnd = buffer.indexOf('\\n')\n if (lineEnd === -1) return\n const raw = buffer.subarray(0, lineEnd).toString('utf8').trim()\n buffer = buffer.subarray(lineEnd + 1)\n if (!raw) continue\n try {\n enqueueResponse(JSON.parse(raw) as JsonRpcRequest, 'json-line')\n } catch {\n writeFrame({ jsonrpc: '2.0', id: null, error: { code: -32700, message: 'Parse error' } }, 'json-line')\n }\n }\n })\n process.stdin.resume()\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 { 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 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 { 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 { 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 )","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 { 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\nconst NX_MANIFEST_PATTERN = /(^|[/\\\\])(project|package)\\.json$/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', 'srcDir']) {\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 nxRoot = resolve(opts.root)\n if (opts.config.routing?.plugin === 'nx' && existsSync(nxRoot)) {\n watch(nxRoot, { recursive: true }, (_event, filename) => {\n if (!filename || !NX_MANIFEST_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}\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, 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 { 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 { 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\nconst providerDefaultApiKeyEnv = (provider: string): string | undefined => {\n switch (provider) {\n case 'openai':\n return 'OPENAI_API_KEY'\n case 'anthropic':\n return 'ANTHROPIC_API_KEY'\n case 'openrouter':\n return 'OPENROUTER_API_KEY'\n default:\n return undefined\n }\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(providerDefaultApiKeyEnv(provider))\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 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","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://doc-bridge.agentskit.io/\n`\n\nexport const docBridgePatternPayload = () => ({\n ...DOC_BRIDGE_PATTERN_META,\n format: 'okf-pattern-v1',\n body: docBridgePatternMarkdown(),\n})"],"mappings":"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","names":["z","z","z","z","z","readFileSync","dirname","join","existsSync","resolve","resolve","existsSync","existsSync","readFileSync","join","readFileSync","realpathSync","join","realpathSync","join","packageId","packageId","artifact","relativePath","projectName","realpathSync","resolve","sep","existsSync","realpathSync","isAbsolute","relative","resolve","sep","parseFrontmatter","slug","realpathSync","resolve","relative","isAbsolute","sep","slug","parseFrontmatter","existsSync","item","existsSync","readFileSync","join","join","existsSync","readFileSync","parseFrontmatter","minimatch","minimatch","parseFrontmatter","slug","minimatch","minimatch","slug","realpathSync","resolve","sep","existsSync","lstatSync","readFileSync","realpathSync","basename","dirname","isAbsolute","relative","resolve","sep","readFileSync","resolve","relative","isAbsolute","lstatSync","realpathSync","sep","projectName","existsSync","dirname","basename","script","existsSync","readFileSync","basename","join","existsSync","readdirSync","statSync","join","join","existsSync","readdirSync","statSync","join","existsSync","readFileSync","basename","readFileSync","join","dirname","existsSync","readFileSync","basename","dirname","join","relative","resolve","sep","lstatSync","readdirSync","realpathSync","statSync","isAbsolute","relative","resolve","sep","minimatch","relativePath","DEFAULT_MAX_FILES","isRecord","readFileSync","relative","join","existsSync","sep","dirname","resolve","extension","basename","evidence","existsSync","readFileSync","writeFileSync","mkdirSync","join","resolve","z","z","join","existsSync","readFileSync","resolve","evidence","diagnostic","mkdirSync","writeFileSync","entity","resolveEntity","evidence","base","diagnostic","existsSync","readdirSync","readFileSync","realpathSync","statSync","writeFileSync","basename","dirname","extname","join","relative","resolve","sep","hash","basename","resolve","readdirSync","join","extname","relative","sep","realpathSync","readFileSync","existsSync","dirname","statSync","writeFileSync","existsSync","mkdirSync","readFileSync","renameSync","writeFileSync","join","relative","resolve","join","writeFileSync","renameSync","run","transition","readFileSync","resolve","mkdirSync","existsSync","relative","artifact","minimatch","diagnostic","minimatch","entityId","count","readFileSync","existsSync","readFileSync","realpathSync","statSync","isAbsolute","relative","resolve","sep","z","EvidenceSchema","realpathSync","resolve","relative","isAbsolute","sep","existsSync","statSync","readFileSync","_passed","result","evidence","existsSync","readFileSync","join","resolve","join","existsSync","readFileSync","resolve","readFileSync","isRecord","mkdirSync","readFileSync","realpathSync","writeFileSync","join","relative","resolve","z","existsSync","readFileSync","join","relativePath","existsSync","readFileSync","join","z","doc","realpathSync","resolve","relative","runId","run","join","readFileSync","mkdirSync","writeFileSync","diagnostic","proposal","raw","existsSync","mkdirSync","readFileSync","writeFileSync","dirname","join","resolve","readJson","existsSync","dirname","resolve","resolve","dirname","existsSync","execFileSync","existsSync","mkdirSync","writeFileSync","join","existsSync","readFileSync","resolve","tokenize","resolve","existsSync","readFileSync","readFileSync","join","join","join","join","readFileSync"]}