@happyvertical/smrt-dev-mcp 0.35.2 → 0.35.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -467,8 +467,8 @@ function discoverInstalledSdkPackages(rootDir, packageDirs, includeDocs) {
467
467
  }
468
468
  })
469
469
  ).filter((dir) => {
470
- const pkg = readJson(join(dir, "package.json"));
471
- return typeof pkg?.name === "string" && SDK_PACKAGE_NAMES.has(pkg.name) && !pkg.name.startsWith("@happyvertical/smrt-");
470
+ const pkg = objectRecord(readJson(join(dir, "package.json")));
471
+ return typeof pkg.name === "string" && SDK_PACKAGE_NAMES.has(pkg.name) && !pkg.name.startsWith("@happyvertical/smrt-");
472
472
  }).map((dir) => readKnowledgePackage(rootDir, dir, includeDocs));
473
473
  }
474
474
  function filterKnowledgePackages(packages, options) {
@@ -493,10 +493,10 @@ function filterKnowledgePackages(packages, options) {
493
493
  });
494
494
  }
495
495
  function readKnowledgePackage(rootDir, directory, includeDocs) {
496
- const packageJson = readJson(join(directory, "package.json")) ?? {};
497
- const dependencies = objectRecord(packageJson.dependencies);
498
- const devDependencies = objectRecord(packageJson.devDependencies);
499
- const peerDependencies = objectRecord(packageJson.peerDependencies);
496
+ const packageJson = objectRecord(readJson(join(directory, "package.json")));
497
+ const dependencies = stringRecord(packageJson.dependencies);
498
+ const devDependencies = stringRecord(packageJson.devDependencies);
499
+ const peerDependencies = stringRecord(packageJson.peerDependencies);
500
500
  const allDeps = { ...dependencies, ...devDependencies, ...peerDependencies };
501
501
  const name = String(packageJson.name ?? directory);
502
502
  const agentsPath = join(directory, "AGENTS.md");
@@ -519,7 +519,7 @@ function readKnowledgePackage(rootDir, directory, includeDocs) {
519
519
  kind: packageKind(name),
520
520
  directory,
521
521
  relativeDirectory: relative(rootDir, directory),
522
- files: Array.isArray(packageJson.files) ? packageJson.files : [],
522
+ files: stringArray(packageJson.files),
523
523
  exportKeys: exportKeys(packageJson.exports),
524
524
  dependencies,
525
525
  devDependencies,
@@ -569,27 +569,28 @@ function readManifest(directory) {
569
569
  join(directory, "dist", "manifest.json")
570
570
  ]) {
571
571
  const content = readJson(path);
572
- if (content) return { path, content };
572
+ if (content) return { path, content: objectRecord(content) };
573
573
  }
574
574
  return null;
575
575
  }
576
576
  function readManifestObjects(manifest) {
577
577
  const objects = objectRecord(manifest.objects);
578
578
  return Object.values(objects).map((raw) => {
579
- const item = raw;
579
+ const item = objectRecord(raw);
580
+ const schema = objectRecord(item.schema);
580
581
  const fields = objectRecord(item.fields);
581
- const schemaColumns = objectRecord(item.schema?.columns);
582
- const decoratorConfig = item.decoratorConfig;
582
+ const schemaColumns = objectRecord(schema.columns);
583
+ const decoratorConfig = objectRecord(item.decoratorConfig);
583
584
  const knowledgeFields = Object.entries(fields).map(([fieldName, field]) => {
584
- const fieldInfo = field;
585
+ const fieldInfo = objectRecord(field);
585
586
  const columnName = camelToSnake(fieldName);
586
- const column = schemaColumns[columnName];
587
+ const column = objectRecord(schemaColumns[columnName]);
587
588
  return {
588
589
  name: fieldName,
589
590
  type: String(fieldInfo.type ?? "unknown"),
590
591
  required: typeof fieldInfo.required === "boolean" ? fieldInfo.required : void 0,
591
592
  related: typeof fieldInfo.related === "string" ? fieldInfo.related : void 0,
592
- columnType: typeof column?.type === "string" ? column.type : void 0
593
+ columnType: typeof column.type === "string" ? column.type : void 0
593
594
  };
594
595
  });
595
596
  return {
@@ -598,9 +599,9 @@ function readManifestObjects(manifest) {
598
599
  filePath: typeof item.filePath === "string" ? item.filePath : void 0,
599
600
  extends: typeof item.extends === "string" ? item.extends : void 0,
600
601
  collection: typeof item.collection === "string" ? item.collection : void 0,
601
- mcpOperations: mcpOperations(item.decoratorConfig?.mcp),
602
- tableName: typeof decoratorConfig?.tableName === "string" ? decoratorConfig.tableName : typeof item.schema?.tableName === "string" ? item.schema.tableName : void 0,
603
- idColumnType: typeof schemaColumns.id?.type === "string" ? schemaColumns.id.type : void 0,
602
+ mcpOperations: mcpOperations(decoratorConfig.mcp),
603
+ tableName: typeof decoratorConfig.tableName === "string" ? decoratorConfig.tableName : typeof schema.tableName === "string" ? schema.tableName : void 0,
604
+ idColumnType: typeof objectRecord(schemaColumns.id).type === "string" ? objectRecord(schemaColumns.id).type : void 0,
604
605
  fields: knowledgeFields,
605
606
  relationships: knowledgeFields.filter(
606
607
  (field) => RELATIONSHIP_FIELD_TYPES.has(field.type)
@@ -1243,6 +1244,16 @@ function hashJsonFile(path) {
1243
1244
  function objectRecord(value) {
1244
1245
  return typeof value === "object" && value !== null && !Array.isArray(value) ? value : {};
1245
1246
  }
1247
+ function stringRecord(value) {
1248
+ const result = {};
1249
+ for (const [key, entry] of Object.entries(objectRecord(value))) {
1250
+ if (typeof entry === "string") result[key] = entry;
1251
+ }
1252
+ return result;
1253
+ }
1254
+ function stringArray(value) {
1255
+ return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
1256
+ }
1246
1257
  function camelToSnake(value) {
1247
1258
  return value.replace(/([a-z0-9])([A-Z])/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase();
1248
1259
  }
@@ -1271,4 +1282,4 @@ function sortJson(value) {
1271
1282
  }
1272
1283
 
1273
1284
  export { buildKnowledgeIndex as a, buildArchitectureContext as b, buildReviewContext as c, checkKnowledgeFreshness as d, checkKnowledgeFreshnessFromIndex as e, diffKnowledgeIndex as f, renderKnowledgeIndexMarkdown as g, smrtReview as h, renderFreshnessResult as r, smrtArchitecture as s };
1274
- //# sourceMappingURL=index-DF0HSB_8.js.map
1285
+ //# sourceMappingURL=index-K9gNIcVt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-K9gNIcVt.js","sources":["../src/knowledge/index.ts"],"sourcesContent":["import { execFileSync } from 'node:child_process';\nimport { createHash } from 'node:crypto';\nimport {\n existsSync,\n lstatSync,\n readdirSync,\n readFileSync,\n realpathSync,\n} from 'node:fs';\nimport { dirname, join, relative, resolve } from 'node:path';\nimport type { DomainKnowledgeManifest } from '@happyvertical/smrt-types';\n\nexport type KnowledgePackageKind = 'smrt' | 'sdk' | 'workspace';\nexport type KnowledgeIssueSeverity = 'error' | 'warning';\nexport type KnowledgeScope = 'project' | 'local' | 'package' | 'sdk';\n\nexport interface KnowledgeField {\n name: string;\n type: string;\n required?: boolean;\n related?: string;\n columnType?: string;\n}\n\nexport interface KnowledgeObject {\n className: string;\n qualifiedName?: string;\n filePath?: string;\n extends?: string;\n collection?: string;\n mcpOperations: string[];\n tableName?: string;\n idColumnType?: string;\n fields: KnowledgeField[];\n relationships: KnowledgeField[];\n methods: string[];\n}\n\nexport interface KnowledgePrompt {\n filePath: string;\n key?: string;\n}\n\nexport interface KnowledgeMcpTool {\n name: string;\n sourceObject: string;\n operation: string;\n}\n\nexport interface KnowledgePackage {\n name: string;\n version: string;\n kind: KnowledgePackageKind;\n directory: string;\n relativeDirectory: string;\n files: string[];\n exportKeys: string[];\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n peerDependencies: Record<string, string>;\n smrtDependencies: string[];\n sdkDependencies: string[];\n hasAgentsMd: boolean;\n hasClaudeMd: boolean;\n hasClaudeShim: boolean;\n docSource: 'AGENTS.md' | 'CLAUDE.md' | null;\n agentDoc?: string;\n hasDomainKnowledge: boolean;\n domainKnowledgePath?: string;\n domainKnowledge?: DomainKnowledgeManifest;\n manifestPath?: string;\n manifestVersion?: string;\n objects: KnowledgeObject[];\n prompts: KnowledgePrompt[];\n mcpTools: KnowledgeMcpTool[];\n relationshipFeatures: string[];\n}\n\nexport interface SmrtKnowledgeIndex {\n schemaVersion: 1;\n generatedAt: string;\n rootDir: string;\n packages: KnowledgePackage[];\n smrtPackages: KnowledgePackage[];\n sdkPackages: KnowledgePackage[];\n relationshipsV2: {\n foreignKeyFields: number;\n crossPackageRefFields: number;\n junctionCollections: number;\n hierarchicalObjects: number;\n polymorphicAssociations: number;\n uuidColumns: number;\n };\n}\n\nexport interface KnowledgeIssue {\n severity: KnowledgeIssueSeverity;\n code: string;\n message: string;\n file?: string;\n packageName?: string;\n}\n\nexport interface KnowledgeFreshnessResult {\n ok: boolean;\n checkedAt: string;\n rootDir: string;\n issueCount: number;\n errorCount: number;\n warningCount: number;\n issues: KnowledgeIssue[];\n}\n\nexport interface KnowledgePromptBundle {\n title: string;\n instructions: string;\n contextMarkdown: string;\n selectedPackages: string[];\n selectedSdkPackages: string[];\n sourceFiles: string[];\n}\n\nexport interface ReviewContextResult {\n selectedPackages: KnowledgePackage[];\n selectedSdkPackages: KnowledgePackage[];\n deterministicFindings: KnowledgeIssue[];\n promptBundle: KnowledgePromptBundle;\n}\n\nexport interface ArchitectureContextResult {\n selectedPackages: KnowledgePackage[];\n selectedSdkPackages: KnowledgePackage[];\n promptBundle: KnowledgePromptBundle;\n}\n\nexport interface SmrtReviewResult {\n mode: 'findings' | 'prompt-bundle' | 'both';\n selectedPackages: KnowledgePackage[];\n selectedSdkPackages: KnowledgePackage[];\n deterministicFindings?: KnowledgeIssue[];\n promptBundle?: KnowledgePromptBundle;\n}\n\nexport interface SmrtArchitectureResult extends ArchitectureContextResult {\n recommendations: {\n smrtPackages: string[];\n sdkPackages: string[];\n objectModelSketch: string[];\n risks: string[];\n questions: string[];\n notes: string[];\n };\n}\n\ninterface BuildKnowledgeIndexOptions {\n rootDir?: string;\n includeDocs?: boolean;\n scope?: KnowledgeScope;\n package?: string;\n packageName?: string;\n}\n\ninterface CheckKnowledgeFreshnessOptions extends BuildKnowledgeIndexOptions {\n changed?: boolean;\n strict?: boolean;\n}\n\ninterface ContextSelectorOptions {\n rootDir?: string;\n changedFiles?: string[];\n idea?: string;\n documentation?: string;\n focus?: string;\n scope?: KnowledgeScope;\n package?: string;\n packageName?: string;\n}\n\nconst SDK_PACKAGE_NAMES = new Set([\n '@happyvertical/ai',\n '@happyvertical/cache',\n '@happyvertical/documents',\n '@happyvertical/email',\n '@happyvertical/encryption',\n '@happyvertical/files',\n '@happyvertical/geo',\n '@happyvertical/images',\n '@happyvertical/jobs',\n '@happyvertical/json',\n '@happyvertical/logger',\n '@happyvertical/messages',\n '@happyvertical/ocr',\n '@happyvertical/pdf',\n '@happyvertical/projects',\n '@happyvertical/repos',\n '@happyvertical/secrets',\n '@happyvertical/spider',\n '@happyvertical/sql',\n '@happyvertical/utils',\n]);\n\nconst RELATIONSHIP_FIELD_TYPES = new Set([\n 'foreignKey',\n 'crossPackageRef',\n 'oneToMany',\n 'manyToMany',\n]);\n\nconst WALK_SKIP_DIRS = new Set([\n '.git',\n '.svelte-kit',\n '.turbo',\n 'coverage',\n 'dist',\n 'node_modules',\n]);\n\nconst STALE_PATTERNS: Array<{\n code: string;\n pattern: RegExp;\n message: string;\n}> = [\n {\n code: 'stale-have-namespace',\n pattern: new RegExp(`@${'have'}/`),\n message: 'Stale HappyVertical legacy namespace reference found',\n },\n {\n code: 'stale-smrt-core-namespace',\n pattern: new RegExp(`@${'smrt'}/core`),\n message: 'Stale SMRT core namespace reference found',\n },\n {\n code: 'stale-field-helper-import',\n pattern: /@happyvertical\\/smrt-core\\/fields/,\n message: 'Stale field-helper import path found',\n },\n {\n code: 'stale-docs-codex-command',\n pattern: new RegExp(\n `docs:${'codex'}|docs-${'codex'}|\\\\.${'codex'}|${'codex'}-command`,\n 'i',\n ),\n message: 'Stale Codex-specific downstream-doc reference found',\n },\n];\n\nexport async function buildKnowledgeIndex(\n options: BuildKnowledgeIndexOptions = {},\n): Promise<SmrtKnowledgeIndex> {\n const rootDir = findProjectRoot(options.rootDir ?? process.cwd());\n const includeDocs = options.includeDocs ?? true;\n const packageDirs = discoverProjectPackageDirs(rootDir);\n const packages = packageDirs.map((dir) =>\n readKnowledgePackage(rootDir, dir, includeDocs),\n );\n\n packages.push(\n ...discoverInstalledSdkPackages(rootDir, packageDirs, includeDocs),\n );\n\n const uniquePackages = dedupePackages(packages);\n const scopedPackages = filterKnowledgePackages(uniquePackages, options);\n const smrtPackages = scopedPackages.filter((pkg) => pkg.kind === 'smrt');\n const sdkPackages = scopedPackages.filter((pkg) => pkg.kind === 'sdk');\n\n return {\n schemaVersion: 1,\n generatedAt: new Date().toISOString(),\n rootDir,\n packages: scopedPackages,\n smrtPackages,\n sdkPackages,\n relationshipsV2: summarizeRelationshipsV2(scopedPackages),\n };\n}\n\nexport async function checkKnowledgeFreshness(\n options: CheckKnowledgeFreshnessOptions = {},\n): Promise<KnowledgeFreshnessResult> {\n const index = await buildKnowledgeIndex(options);\n return checkKnowledgeFreshnessFromIndex(index, options);\n}\n\nexport async function checkKnowledgeFreshnessFromIndex(\n index: SmrtKnowledgeIndex,\n options: CheckKnowledgeFreshnessOptions = {},\n): Promise<KnowledgeFreshnessResult> {\n const issues: KnowledgeIssue[] = [];\n const changedFiles = options.changed\n ? getChangedFiles(index.rootDir)\n : undefined;\n\n // Keep these structured MCP/CLI checks in sync with\n // scripts/check-standards.mjs, which enforces the same package docs rules.\n for (const pkg of index.packages.filter((item) => item.kind !== 'sdk')) {\n const packageJsonPath = join(pkg.directory, 'package.json');\n\n if (!pkg.hasAgentsMd) {\n issues.push({\n severity: 'error',\n code: 'missing-agents-md',\n message: 'Workspace package is missing canonical AGENTS.md',\n file: relative(index.rootDir, join(pkg.directory, 'AGENTS.md')),\n packageName: pkg.name,\n });\n }\n\n if (!pkg.hasClaudeMd) {\n issues.push({\n severity: 'error',\n code: 'missing-claude-shim',\n message: 'Workspace package is missing CLAUDE.md compatibility shim',\n file: relative(index.rootDir, join(pkg.directory, 'CLAUDE.md')),\n packageName: pkg.name,\n });\n } else if (!pkg.hasClaudeShim) {\n issues.push({\n severity: 'error',\n code: 'claude-not-shim',\n message: 'CLAUDE.md must contain only @AGENTS.md',\n file: relative(index.rootDir, join(pkg.directory, 'CLAUDE.md')),\n packageName: pkg.name,\n });\n }\n\n for (const entry of pkg.files) {\n if (\n entry === 'dist' ||\n entry.startsWith('dist/') ||\n entry.includes('*')\n ) {\n continue;\n }\n const entryPath = join(pkg.directory, entry);\n if (!existsSync(entryPath)) {\n issues.push({\n severity: 'error',\n code: 'package-files-entry-missing',\n message: `package.json files entry \"${entry}\" does not exist`,\n file: relative(index.rootDir, packageJsonPath),\n packageName: pkg.name,\n });\n }\n }\n\n if (!pkg.files.includes('AGENTS.md')) {\n issues.push({\n severity: 'error',\n code: 'package-files-missing-agents',\n message: 'package.json files allowlist must include AGENTS.md',\n file: relative(index.rootDir, packageJsonPath),\n packageName: pkg.name,\n });\n }\n\n if (!pkg.files.includes('CLAUDE.md')) {\n issues.push({\n severity: 'error',\n code: 'package-files-missing-claude-shim',\n message: 'package.json files allowlist must include CLAUDE.md shim',\n file: relative(index.rootDir, packageJsonPath),\n packageName: pkg.name,\n });\n }\n }\n\n for (const pkg of index.packages) {\n issues.push(...checkDomainKnowledgeArtifact(index.rootDir, pkg));\n }\n\n issues.push(...findStalePatternIssues(index.rootDir, changedFiles));\n\n const effectiveIssues = issues.map((issue) =>\n issue.code.startsWith('stale-')\n ? {\n ...issue,\n severity: options.strict ? ('error' as const) : ('warning' as const),\n }\n : issue,\n );\n const errorCount = effectiveIssues.filter(\n (i) => i.severity === 'error',\n ).length;\n const warningCount = effectiveIssues.filter(\n (i) => i.severity === 'warning',\n ).length;\n\n return {\n ok: errorCount === 0,\n checkedAt: new Date().toISOString(),\n rootDir: index.rootDir,\n issueCount: effectiveIssues.length,\n errorCount,\n warningCount,\n issues: effectiveIssues,\n };\n}\n\nfunction checkDomainKnowledgeArtifact(\n rootDir: string,\n pkg: KnowledgePackage,\n): KnowledgeIssue[] {\n const issues: KnowledgeIssue[] = [];\n if (\n pkg.exportKeys.includes('./smrt-knowledge.json') &&\n !pkg.hasDomainKnowledge\n ) {\n issues.push({\n severity: 'error',\n code: 'missing-domain-knowledge',\n message:\n 'package exports ./smrt-knowledge.json but no domain knowledge artifact was found',\n file: relative(rootDir, join(pkg.directory, 'package.json')),\n packageName: pkg.name,\n });\n }\n\n if (!pkg.domainKnowledge || !pkg.domainKnowledgePath) {\n return issues;\n }\n\n const hashes = pkg.domainKnowledge.sourceHashes ?? {};\n const checks: Array<{\n key: string;\n filePath: string | undefined;\n kind: 'raw' | 'json';\n label: string;\n }> = [\n {\n key: 'packageJson',\n filePath: join(pkg.directory, 'package.json'),\n kind: 'raw',\n label: 'package.json',\n },\n {\n key: 'agents',\n filePath: existsSync(join(pkg.directory, 'AGENTS.md'))\n ? join(pkg.directory, 'AGENTS.md')\n : undefined,\n kind: 'raw',\n label: 'AGENTS.md',\n },\n {\n key: 'manifest',\n filePath: domainSourceManifestPath(rootDir, pkg),\n kind: 'json',\n label: 'manifest',\n },\n ];\n\n for (const check of checks) {\n const expected = hashes[check.key];\n if (!expected) continue;\n if (!check.filePath || !existsSync(check.filePath)) {\n issues.push({\n severity: 'error',\n code: 'domain-knowledge-source-missing',\n message: `${check.label} source for smrt-knowledge.json is missing`,\n file: pkg.domainKnowledgePath,\n packageName: pkg.name,\n });\n continue;\n }\n\n const actual =\n check.kind === 'json'\n ? hashJsonFile(check.filePath)\n : hashFile(check.filePath);\n if (actual !== expected) {\n issues.push({\n severity: 'error',\n code: 'stale-domain-knowledge',\n message: `${check.label} changed since smrt-knowledge.json was generated`,\n file: pkg.domainKnowledgePath,\n packageName: pkg.name,\n });\n }\n }\n\n return issues;\n}\n\nfunction domainSourceManifestPath(\n rootDir: string,\n pkg: KnowledgePackage,\n): string | undefined {\n if (pkg.domainKnowledge?.sourceManifestPath) {\n return join(pkg.directory, pkg.domainKnowledge.sourceManifestPath);\n }\n if (pkg.manifestPath) {\n return join(rootDir, pkg.manifestPath);\n }\n return undefined;\n}\n\nexport async function diffKnowledgeIndex(\n options: {\n rootDir?: string;\n base?: string;\n scope?: KnowledgeScope;\n package?: string;\n packageName?: string;\n } = {},\n): Promise<{\n base: string;\n changedFiles: string[];\n changedPackages: string[];\n index: SmrtKnowledgeIndex;\n}> {\n const index = await buildKnowledgeIndex({ rootDir: options.rootDir });\n const base = options.base ?? 'HEAD';\n const changedFiles = getChangedFiles(index.rootDir, base);\n const packageQuery = options.packageName ?? options.package;\n const selected = selectPackagesForFiles(index, changedFiles)\n .filter((pkg) => scopeAllowsPackage(pkg, options.scope))\n .filter((pkg) =>\n packageQuery ? packageMatches(pkg, packageQuery.toLowerCase()) : true,\n );\n const changedPackages = selected.map((pkg) => pkg.name);\n return { base, changedFiles, changedPackages, index };\n}\n\nexport async function buildReviewContext(\n options: ContextSelectorOptions = {},\n): Promise<ReviewContextResult> {\n const index = await buildKnowledgeIndex({ rootDir: options.rootDir });\n const changedFiles = options.changedFiles ?? getChangedFiles(index.rootDir);\n const selectedPackages = selectPackages(index, {\n changedFiles,\n text: [options.focus, options.documentation].filter(Boolean).join('\\n'),\n scope: options.scope,\n packageName: options.packageName ?? options.package,\n });\n const selectedSdkPackages = selectSdkPackages(\n index,\n selectedPackages,\n [\n options.focus,\n options.documentation,\n options.packageName ?? options.package,\n ],\n {\n scope: options.scope,\n packageName: options.packageName ?? options.package,\n },\n );\n const deterministicFindings = findStalePatternIssues(\n index.rootDir,\n changedFiles.length > 0 ? changedFiles : undefined,\n ).concat(buildReviewFindings(index, changedFiles, selectedPackages));\n\n return {\n selectedPackages,\n selectedSdkPackages,\n deterministicFindings,\n promptBundle: buildPromptBundle({\n title: 'SMRT code review',\n task: 'Review the changed SMRT code. Prioritize correctness, relationships-v2 invariants, tenancy, SDK usage, prompt/data safety, and stale documentation.',\n index,\n packages: selectedPackages,\n sdkPackages: selectedSdkPackages,\n sourceFiles: changedFiles,\n extraContext: options.focus,\n }),\n };\n}\n\nexport async function smrtReview(\n options: ContextSelectorOptions & {\n mode?: 'findings' | 'prompt-bundle' | 'both';\n } = {},\n): Promise<SmrtReviewResult> {\n const context = await buildReviewContext(options);\n const mode = options.mode ?? 'both';\n return {\n mode,\n selectedPackages: context.selectedPackages,\n selectedSdkPackages: context.selectedSdkPackages,\n ...(mode !== 'prompt-bundle'\n ? { deterministicFindings: context.deterministicFindings }\n : {}),\n ...(mode !== 'findings' ? { promptBundle: context.promptBundle } : {}),\n };\n}\n\nexport async function buildArchitectureContext(\n options: ContextSelectorOptions = {},\n): Promise<ArchitectureContextResult> {\n const index = await buildKnowledgeIndex({ rootDir: options.rootDir });\n const text = [options.idea, options.documentation, options.focus]\n .filter(Boolean)\n .join('\\n');\n const selectedPackages = selectPackages(index, {\n text,\n scope: options.scope,\n packageName: options.packageName ?? options.package,\n });\n const selectedSdkPackages = selectSdkPackages(\n index,\n selectedPackages,\n [text, options.packageName ?? options.package],\n {\n scope: options.scope,\n packageName: options.packageName ?? options.package,\n },\n );\n\n return {\n selectedPackages,\n selectedSdkPackages,\n promptBundle: buildPromptBundle({\n title: 'SMRT architecture planning',\n task: 'Suggest the SMRT packages, HappyVertical SDK packages, object model, integration points, risks, and implementation slices for this project idea.',\n index,\n packages: selectedPackages,\n sdkPackages: selectedSdkPackages,\n sourceFiles: [],\n extraContext: text,\n }),\n };\n}\n\nexport async function smrtArchitecture(\n options: ContextSelectorOptions = {},\n): Promise<SmrtArchitectureResult> {\n const context = await buildArchitectureContext(options);\n const ideaText = [options.idea, options.documentation, options.focus]\n .filter(Boolean)\n .join('\\n');\n return {\n ...context,\n recommendations: buildArchitectureRecommendations(context, ideaText),\n };\n}\n\nexport function renderKnowledgeIndexMarkdown(\n index: SmrtKnowledgeIndex,\n): string {\n const lines: string[] = [\n '# SMRT Knowledge Index',\n '',\n `Generated: ${index.generatedAt}`,\n `Root: ${index.rootDir}`,\n '',\n '## Summary',\n '',\n `- SMRT packages: ${index.smrtPackages.length}`,\n `- SDK packages: ${index.sdkPackages.length}`,\n `- foreignKey fields: ${index.relationshipsV2.foreignKeyFields}`,\n `- crossPackageRef fields: ${index.relationshipsV2.crossPackageRefFields}`,\n `- junction collections: ${index.relationshipsV2.junctionCollections}`,\n `- hierarchical objects: ${index.relationshipsV2.hierarchicalObjects}`,\n `- polymorphic associations: ${index.relationshipsV2.polymorphicAssociations}`,\n `- UUID columns: ${index.relationshipsV2.uuidColumns}`,\n '',\n '## Packages',\n '',\n ];\n\n for (const pkg of index.packages) {\n lines.push(`### ${pkg.name}`);\n lines.push('');\n lines.push(`- kind: ${pkg.kind}`);\n lines.push(`- version: ${pkg.version}`);\n lines.push(`- objects: ${pkg.objects.length}`);\n lines.push(`- SMRT deps: ${pkg.smrtDependencies.join(', ') || '(none)'}`);\n lines.push(`- SDK deps: ${pkg.sdkDependencies.join(', ') || '(none)'}`);\n lines.push(`- exports: ${pkg.exportKeys.join(', ') || '(none)'}`);\n lines.push(`- MCP tools: ${pkg.mcpTools.length}`);\n lines.push(\n `- domain knowledge: ${pkg.domainKnowledgePath ?? '(manifest fallback)'}`,\n );\n lines.push(\n `- docs: ${pkg.docSource ?? '(none)'}${pkg.hasClaudeShim ? ' + CLAUDE.md shim' : ''}`,\n );\n if (pkg.relationshipFeatures.length > 0) {\n lines.push(`- relationships-v2: ${pkg.relationshipFeatures.join(', ')}`);\n }\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\nexport function renderFreshnessResult(\n result: KnowledgeFreshnessResult,\n): string {\n const lines = [\n result.ok ? '✓ SMRT knowledge is fresh' : '✗ SMRT knowledge has issues',\n '',\n `Root: ${result.rootDir}`,\n `Errors: ${result.errorCount}`,\n `Warnings: ${result.warningCount}`,\n '',\n ];\n\n for (const issue of result.issues) {\n const location = issue.file ? ` (${issue.file})` : '';\n lines.push(\n `- [${issue.severity.toUpperCase()}] ${issue.code}: ${issue.message}${location}`,\n );\n }\n\n return lines.join('\\n');\n}\n\nfunction findProjectRoot(startDir: string): string {\n let current = resolve(startDir);\n for (;;) {\n if (\n existsSync(join(current, 'pnpm-workspace.yaml')) &&\n existsSync(join(current, 'packages'))\n ) {\n return current;\n }\n const parent = dirname(current);\n if (parent === current) return resolve(startDir);\n current = parent;\n }\n}\n\nfunction discoverWorkspacePackageDirs(rootDir: string): string[] {\n const packagesDir = join(rootDir, 'packages');\n if (!existsSync(packagesDir)) return [];\n return readdirSync(packagesDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory())\n .map((entry) => join(packagesDir, entry.name))\n .filter((dir) => existsSync(join(dir, 'package.json')))\n .sort();\n}\n\nfunction discoverProjectPackageDirs(rootDir: string): string[] {\n const workspaceDirs = discoverWorkspacePackageDirs(rootDir);\n if (\n existsSync(join(rootDir, 'package.json')) &&\n hasLocalDomainArtifact(rootDir)\n ) {\n return [rootDir, ...workspaceDirs.filter((dir) => dir !== rootDir)];\n }\n return workspaceDirs;\n}\n\nfunction hasLocalDomainArtifact(rootDir: string): boolean {\n return [\n join(rootDir, '.smrt', 'smrt-knowledge.json'),\n join(rootDir, '.smrt', 'manifest.json'),\n join(rootDir, 'dist', 'smrt-knowledge.json'),\n join(rootDir, 'dist', 'manifest.json'),\n join(rootDir, 'src', 'manifest', 'smrt-knowledge.json'),\n join(rootDir, 'src', 'manifest', 'manifest.json'),\n ].some((path) => existsSync(path));\n}\n\nfunction discoverInstalledSdkPackages(\n rootDir: string,\n packageDirs: string[],\n includeDocs: boolean,\n): KnowledgePackage[] {\n const scopeDirs = [\n join(rootDir, 'node_modules', '@happyvertical'),\n ...packageDirs.map((dir) => join(dir, 'node_modules', '@happyvertical')),\n ];\n\n return scopeDirs\n .filter(\n (scopeDir, index, all) =>\n existsSync(scopeDir) && all.indexOf(scopeDir) === index,\n )\n .flatMap((scopeDir) =>\n readdirSync(scopeDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() || entry.isSymbolicLink())\n .map((entry) => {\n const entryPath = join(scopeDir, entry.name);\n try {\n return lstatSync(entryPath).isSymbolicLink()\n ? realpathSync(entryPath)\n : entryPath;\n } catch {\n return entryPath;\n }\n }),\n )\n .filter((dir) => {\n const pkg = objectRecord(readJson(join(dir, 'package.json')));\n return (\n typeof pkg.name === 'string' &&\n SDK_PACKAGE_NAMES.has(pkg.name) &&\n !pkg.name.startsWith('@happyvertical/smrt-')\n );\n })\n .map((dir) => readKnowledgePackage(rootDir, dir, includeDocs));\n}\n\nfunction filterKnowledgePackages(\n packages: KnowledgePackage[],\n options: BuildKnowledgeIndexOptions,\n): KnowledgePackage[] {\n const packageQuery = options.packageName ?? options.package;\n return packages.filter((pkg) => {\n if (packageQuery && !packageMatches(pkg, packageQuery.toLowerCase())) {\n return false;\n }\n\n switch (options.scope) {\n case 'local':\n return (\n pkg.kind !== 'sdk' && !pkg.relativeDirectory.includes('node_modules')\n );\n case 'package':\n return pkg.kind !== 'sdk';\n case 'sdk':\n return pkg.kind === 'sdk';\n case 'project':\n case undefined:\n return true;\n default:\n return true;\n }\n });\n}\n\nfunction readKnowledgePackage(\n rootDir: string,\n directory: string,\n includeDocs: boolean,\n): KnowledgePackage {\n const packageJson = objectRecord(readJson(join(directory, 'package.json')));\n const dependencies = stringRecord(packageJson.dependencies);\n const devDependencies = stringRecord(packageJson.devDependencies);\n const peerDependencies = stringRecord(packageJson.peerDependencies);\n const allDeps = { ...dependencies, ...devDependencies, ...peerDependencies };\n const name = String(packageJson.name ?? directory);\n const agentsPath = join(directory, 'AGENTS.md');\n const claudePath = join(directory, 'CLAUDE.md');\n const hasAgentsMd = existsSync(agentsPath);\n const hasClaudeMd = existsSync(claudePath);\n const claudeContent = hasClaudeMd ? readFileSync(claudePath, 'utf8') : '';\n const agentsContent = hasAgentsMd ? readFileSync(agentsPath, 'utf8') : '';\n const fallbackClaudeDoc =\n hasClaudeMd && claudeContent.trim() !== '@AGENTS.md' ? claudeContent : '';\n const domainKnowledge = readDomainKnowledge(directory);\n const docSource = hasAgentsMd\n ? 'AGENTS.md'\n : fallbackClaudeDoc\n ? 'CLAUDE.md'\n : null;\n const manifest = readManifest(directory);\n const objects = domainKnowledge\n ? readDomainKnowledgeObjects(domainKnowledge.content)\n : manifest\n ? readManifestObjects(manifest.content)\n : [];\n const prompts = domainKnowledge\n ? readDomainKnowledgePrompts(domainKnowledge.content, directory, rootDir)\n : readPrompts(directory, rootDir);\n const smrtDependencies = Object.keys(allDeps)\n .filter((dep) => dep.startsWith('@happyvertical/smrt-'))\n .sort();\n const sdkDependencies = Object.keys(allDeps)\n .filter((dep) => SDK_PACKAGE_NAMES.has(dep))\n .sort();\n\n return {\n name,\n version: String(packageJson.version ?? '0.0.0'),\n kind: packageKind(name),\n directory,\n relativeDirectory: relative(rootDir, directory),\n files: stringArray(packageJson.files),\n exportKeys: exportKeys(packageJson.exports),\n dependencies,\n devDependencies,\n peerDependencies,\n smrtDependencies,\n sdkDependencies,\n hasAgentsMd,\n hasClaudeMd,\n hasClaudeShim: claudeContent.trim() === '@AGENTS.md',\n docSource,\n agentDoc: includeDocs\n ? domainKnowledge?.content.agentDoc ||\n (hasAgentsMd ? agentsContent : fallbackClaudeDoc || undefined)\n : undefined,\n hasDomainKnowledge: Boolean(domainKnowledge),\n domainKnowledgePath: domainKnowledge?.path\n ? relative(rootDir, domainKnowledge.path)\n : undefined,\n domainKnowledge: domainKnowledge?.content,\n manifestPath: manifest?.path ? relative(rootDir, manifest.path) : undefined,\n manifestVersion:\n typeof manifest?.content.version === 'string'\n ? manifest.content.version\n : undefined,\n objects,\n prompts,\n mcpTools: domainKnowledge\n ? domainMcpTools(domainKnowledge.content)\n : mcpTools(objects),\n relationshipFeatures: relationshipFeatures(objects),\n };\n}\n\nfunction readDomainKnowledge(\n directory: string,\n): { path: string; content: DomainKnowledgeManifest } | null {\n for (const path of [\n join(directory, '.smrt', 'smrt-knowledge.json'),\n join(directory, 'dist', 'smrt-knowledge.json'),\n join(directory, 'src', 'manifest', 'smrt-knowledge.json'),\n ]) {\n const content = readJson(path);\n if (isDomainKnowledgeManifest(content)) {\n return { path, content };\n }\n }\n return null;\n}\n\nfunction isDomainKnowledgeManifest(\n value: unknown,\n): value is DomainKnowledgeManifest {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n const record = value as Record<string, unknown>;\n return record.schemaVersion === 1 && Array.isArray(record.objects);\n}\n\nfunction readManifest(\n directory: string,\n): { path: string; content: Record<string, unknown> } | null {\n for (const path of [\n join(directory, 'src', 'manifest', 'manifest.json'),\n join(directory, '.smrt', 'manifest.json'),\n join(directory, 'dist', 'manifest.json'),\n ]) {\n const content = readJson(path);\n if (content) return { path, content: objectRecord(content) };\n }\n return null;\n}\n\nfunction readManifestObjects(\n manifest: Record<string, unknown>,\n): KnowledgeObject[] {\n const objects = objectRecord(manifest.objects);\n return Object.values(objects).map((raw) => {\n const item = objectRecord(raw);\n const schema = objectRecord(item.schema);\n const fields = objectRecord(item.fields);\n const schemaColumns = objectRecord(schema.columns);\n const decoratorConfig = objectRecord(item.decoratorConfig);\n const knowledgeFields = Object.entries(fields).map(([fieldName, field]) => {\n const fieldInfo = objectRecord(field);\n const columnName = camelToSnake(fieldName);\n const column = objectRecord(schemaColumns[columnName]);\n return {\n name: fieldName,\n type: String(fieldInfo.type ?? 'unknown'),\n required:\n typeof fieldInfo.required === 'boolean'\n ? fieldInfo.required\n : undefined,\n related:\n typeof fieldInfo.related === 'string' ? fieldInfo.related : undefined,\n columnType: typeof column.type === 'string' ? column.type : undefined,\n };\n });\n\n return {\n className: String(item.className ?? item.name ?? 'Unknown'),\n qualifiedName:\n typeof item.qualifiedName === 'string' ? item.qualifiedName : undefined,\n filePath: typeof item.filePath === 'string' ? item.filePath : undefined,\n extends: typeof item.extends === 'string' ? item.extends : undefined,\n collection:\n typeof item.collection === 'string' ? item.collection : undefined,\n mcpOperations: mcpOperations(decoratorConfig.mcp),\n tableName:\n typeof decoratorConfig.tableName === 'string'\n ? decoratorConfig.tableName\n : typeof schema.tableName === 'string'\n ? schema.tableName\n : undefined,\n idColumnType:\n typeof objectRecord(schemaColumns.id).type === 'string'\n ? (objectRecord(schemaColumns.id).type as string)\n : undefined,\n fields: knowledgeFields,\n relationships: knowledgeFields.filter((field) =>\n RELATIONSHIP_FIELD_TYPES.has(field.type),\n ),\n methods: Object.keys(objectRecord(item.methods)).sort(),\n };\n });\n}\n\nfunction readDomainKnowledgeObjects(\n manifest: DomainKnowledgeManifest,\n): KnowledgeObject[] {\n return manifest.objects.map((object) => ({\n className: object.name,\n qualifiedName: object.qualifiedName,\n extends: object.extends,\n collection: object.collection,\n mcpOperations: object.surfaces\n .filter((surface) => surface.kind === 'mcp')\n .map((surface) => surface.operation)\n .sort(),\n tableName: object.tableName,\n idColumnType: object.fields.find((field) => field.name === 'id')\n ?.columnType,\n fields: object.fields.map((field) => ({\n name: field.name,\n type: field.type,\n required: field.required,\n related: field.related,\n columnType: field.columnType,\n })),\n relationships: object.relationships.map((field) => ({\n name: field.name,\n type: field.type,\n required: field.required,\n related: field.related,\n columnType: field.columnType,\n })),\n methods: object.methods,\n }));\n}\n\nfunction readDomainKnowledgePrompts(\n manifest: DomainKnowledgeManifest,\n directory: string,\n rootDir: string,\n): KnowledgePrompt[] {\n return manifest.prompts.map((prompt) => ({\n filePath: relative(rootDir, join(directory, prompt.filePath)),\n key: prompt.key,\n }));\n}\n\nfunction readPrompts(directory: string, rootDir: string): KnowledgePrompt[] {\n const srcDir = join(directory, 'src');\n if (!existsSync(srcDir)) return [];\n const prompts: KnowledgePrompt[] = [];\n for (const filePath of walkFiles(srcDir)) {\n if (!filePath.endsWith('.ts')) continue;\n const content = readFileSync(filePath, 'utf8');\n if (!content.includes('definePrompt')) continue;\n const keyMatch = content.match(/definePrompt\\s*\\(\\s*['\"`]([^'\"`]+)['\"`]/);\n prompts.push({\n filePath: relative(rootDir, filePath),\n key: keyMatch?.[1],\n });\n }\n return prompts;\n}\n\nfunction walkFiles(dir: string): string[] {\n const files: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (WALK_SKIP_DIRS.has(entry.name)) continue;\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...walkFiles(fullPath));\n } else if (entry.isFile()) {\n files.push(fullPath);\n }\n }\n return files;\n}\n\nfunction packageKind(name: string): KnowledgePackageKind {\n if (name.startsWith('@happyvertical/smrt-')) return 'smrt';\n if (SDK_PACKAGE_NAMES.has(name)) return 'sdk';\n return 'workspace';\n}\n\nfunction exportKeys(exportsField: unknown): string[] {\n if (typeof exportsField === 'string') return ['.'];\n if (\n typeof exportsField !== 'object' ||\n exportsField === null ||\n Array.isArray(exportsField)\n ) {\n return [];\n }\n return Object.keys(exportsField).sort();\n}\n\nfunction mcpOperations(config: unknown): string[] {\n if (config === false) return [];\n const defaultOperations = ['list', 'get', 'create', 'update', 'delete'];\n if (typeof config !== 'object' || config === null || Array.isArray(config)) {\n return defaultOperations;\n }\n\n const record = config as Record<string, unknown>;\n const include = Array.isArray(record.include)\n ? record.include.filter((item): item is string => typeof item === 'string')\n : defaultOperations;\n const exclude = new Set(\n Array.isArray(record.exclude)\n ? record.exclude.filter(\n (item): item is string => typeof item === 'string',\n )\n : [],\n );\n\n return include.filter((operation) => !exclude.has(operation));\n}\n\nfunction mcpTools(objects: KnowledgeObject[]): KnowledgeMcpTool[] {\n return objects\n .flatMap((object) => {\n const collection = object.collection ?? object.className.toLowerCase();\n return object.mcpOperations.map((operation) => ({\n name: `${operation}_${collection}`,\n sourceObject: object.qualifiedName ?? object.className,\n operation,\n }));\n })\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction domainMcpTools(manifest: DomainKnowledgeManifest): KnowledgeMcpTool[] {\n return manifest.surfaces\n .filter((surface) => surface.kind === 'mcp')\n .map((surface) => ({\n name: surface.name,\n sourceObject: surface.objectName ?? '',\n operation: surface.operation,\n }))\n .sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction summarizeRelationshipsV2(packages: KnowledgePackage[]) {\n const objects = packages.flatMap((pkg) => pkg.objects);\n const fields = objects.flatMap((object) => object.fields);\n return {\n foreignKeyFields: fields.filter((field) => field.type === 'foreignKey')\n .length,\n crossPackageRefFields: fields.filter(\n (field) => field.type === 'crossPackageRef',\n ).length,\n junctionCollections: objects.filter(\n (object) => object.extends === 'SmrtJunction',\n ).length,\n hierarchicalObjects: objects.filter(\n (object) => object.extends === 'SmrtHierarchical',\n ).length,\n polymorphicAssociations: objects.filter((object) =>\n object.fields.some(\n (field) => field.name === 'metaType' || field.name === 'metaId',\n ),\n ).length,\n uuidColumns: fields.filter((field) => field.columnType === 'UUID').length,\n };\n}\n\nfunction relationshipFeatures(objects: KnowledgeObject[]): string[] {\n const features = new Set<string>();\n if (\n objects.some((object) =>\n object.fields.some((field) => field.type === 'foreignKey'),\n )\n ) {\n features.add('foreignKey');\n }\n if (\n objects.some((object) =>\n object.fields.some((field) => field.type === 'crossPackageRef'),\n )\n ) {\n features.add('crossPackageRef');\n }\n if (objects.some((object) => object.extends === 'SmrtJunction')) {\n features.add('SmrtJunction');\n }\n if (objects.some((object) => object.extends === 'SmrtHierarchical')) {\n features.add('SmrtHierarchical');\n }\n if (\n objects.some((object) =>\n object.fields.some(\n (field) => field.name === 'metaType' || field.name === 'metaId',\n ),\n )\n ) {\n features.add('SmrtPolymorphicAssociation');\n }\n if (\n objects.some((object) =>\n object.fields.some((field) => field.columnType === 'UUID'),\n )\n ) {\n features.add('uuidColumns');\n }\n return [...features].sort();\n}\n\nfunction findStalePatternIssues(\n rootDir: string,\n changedFiles?: string[],\n): KnowledgeIssue[] {\n const candidates =\n changedFiles && changedFiles.length > 0\n ? changedFiles.map((file) => join(rootDir, file))\n : walkFiles(rootDir);\n const issues: KnowledgeIssue[] = [];\n for (const file of candidates.filter((candidate) =>\n shouldScanStalePatternFile(rootDir, candidate),\n )) {\n if (!existsSync(file) || lstatSync(file).isDirectory()) continue;\n const rel = relative(rootDir, file);\n const content = readFileSync(file, 'utf8');\n for (const stale of STALE_PATTERNS) {\n if (!stale.pattern.test(content)) continue;\n issues.push({\n severity: 'warning',\n code: stale.code,\n message: stale.message,\n file: rel,\n });\n }\n }\n return issues;\n}\n\nfunction shouldScanStalePatternFile(\n rootDir: string,\n filePath: string,\n): boolean {\n const rel = relative(rootDir, filePath).replaceAll('\\\\', '/');\n if (!rel || rel.startsWith('..')) return false;\n const parts = rel.split('/');\n if (parts.includes('node_modules') || parts.includes('dist')) return false;\n if (rel === 'AGENTS.md' || rel === 'README.md') return true;\n if (rel.endsWith('/AGENTS.md') || rel.endsWith('/README.md')) return true;\n if (!rel.startsWith('docs/content/') || !rel.endsWith('.md')) return false;\n return !(\n rel.startsWith('docs/content/api/') ||\n rel.startsWith('docs/content/rfcs/') ||\n rel.startsWith('docs/content/architecture/')\n );\n}\n\nfunction buildReviewFindings(\n index: SmrtKnowledgeIndex,\n changedFiles: string[],\n selectedPackages: KnowledgePackage[],\n): KnowledgeIssue[] {\n const issues: KnowledgeIssue[] = [];\n\n for (const pkg of selectedPackages) {\n const changedPackageFiles = changedFiles.filter(\n (file) =>\n file === pkg.relativeDirectory ||\n file.startsWith(`${pkg.relativeDirectory}/`),\n );\n\n if (!pkg.agentDoc && pkg.kind === 'smrt') {\n issues.push({\n severity: 'warning',\n code: 'missing-package-expertise',\n message: 'Selected SMRT package has no authored AGENTS.md expertise',\n file: pkg.relativeDirectory,\n packageName: pkg.name,\n });\n }\n\n if (\n changedPackageFiles.some((file) => file.endsWith('.ts')) &&\n pkg.relationshipFeatures.length > 0\n ) {\n issues.push({\n severity: 'warning',\n code: 'relationship-sensitive-review',\n message: `Package uses relationships-v2 features: ${pkg.relationshipFeatures.join(', ')}`,\n file: changedPackageFiles.find((file) => file.endsWith('.ts')),\n packageName: pkg.name,\n });\n }\n\n if (\n changedPackageFiles.some((file) => file.endsWith('.ts')) &&\n pkg.mcpTools.length > 0\n ) {\n issues.push({\n severity: 'warning',\n code: 'mcp-surface-review',\n message: `Package exposes ${pkg.mcpTools.length} generated MCP tool(s); check public tool compatibility`,\n file: changedPackageFiles.find((file) => file.endsWith('.ts')),\n packageName: pkg.name,\n });\n }\n\n const manifestFile = changedPackageFiles.find((file) =>\n isPackageManifestFile(pkg, file),\n );\n if (manifestFile) {\n issues.push({\n severity: 'warning',\n code: 'package-manifest-review',\n message:\n 'package.json changed; verify exports, files, dependencies, AGENTS.md, and CLAUDE.md shim packaging',\n file: manifestFile,\n packageName: pkg.name,\n });\n }\n\n const publicEntrypointFile = changedPackageFiles.find((file) =>\n isPublicEntrypointFile(pkg, file),\n );\n if (publicEntrypointFile) {\n issues.push({\n severity: 'warning',\n code: 'public-entrypoint-review',\n message:\n 'Public package entrypoint changed; check exports, generated surfaces, and downstream docs',\n file: publicEntrypointFile,\n packageName: pkg.name,\n });\n }\n\n const agentDocFile = changedPackageFiles.find((file) =>\n isPackageAgentDocFile(pkg, file),\n );\n if (agentDocFile) {\n issues.push({\n severity: 'warning',\n code: 'agent-expertise-review',\n message:\n 'AGENTS.md changed; validate authored expertise against generated objects, relationships, exports, and SDK dependencies',\n file: agentDocFile,\n packageName: pkg.name,\n });\n }\n }\n\n for (const file of changedFiles) {\n if (!file.startsWith('packages/')) continue;\n if (selectPackagesForFiles(index, [file]).length > 0) continue;\n issues.push({\n severity: 'warning',\n code: 'changed-file-without-package-expert',\n message:\n 'Changed file is under packages/ but did not map to a SMRT package',\n file,\n });\n }\n\n return issues;\n}\n\nfunction isPackageManifestFile(pkg: KnowledgePackage, file: string): boolean {\n return file === `${pkg.relativeDirectory}/package.json`;\n}\n\nfunction isPackageAgentDocFile(pkg: KnowledgePackage, file: string): boolean {\n return file === `${pkg.relativeDirectory}/AGENTS.md`;\n}\n\nfunction isPublicEntrypointFile(pkg: KnowledgePackage, file: string): boolean {\n const sourcePrefix = `${pkg.relativeDirectory}/src/`;\n if (!file.startsWith(sourcePrefix)) return false;\n const sourcePath = file.slice(sourcePrefix.length);\n return (\n sourcePath === 'index.ts' ||\n sourcePath === 'index.tsx' ||\n sourcePath === 'index.js' ||\n sourcePath.startsWith('api/') ||\n sourcePath.startsWith('cli/') ||\n sourcePath.startsWith('mcp/') ||\n sourcePath.startsWith('tools/')\n );\n}\n\nfunction buildArchitectureRecommendations(\n context: ArchitectureContextResult,\n ideaText: string,\n): SmrtArchitectureResult['recommendations'] {\n const smrtPackages = context.selectedPackages.map((pkg) => pkg.name);\n const sdkPackages = context.selectedSdkPackages.map((pkg) => pkg.name);\n const objectModelSketch = buildObjectModelSketch(context.selectedPackages);\n const risks = buildArchitectureRisks(context.selectedPackages, ideaText);\n const questions = buildArchitectureQuestions(\n context.selectedPackages,\n ideaText,\n );\n\n return {\n smrtPackages,\n sdkPackages,\n objectModelSketch,\n risks,\n questions,\n notes: [\n 'Use SMRT packages for domain/runtime models and generated REST, CLI, MCP, and AI-operation surfaces.',\n 'Use HappyVertical SDK packages for AI, SQL, files, logging, secrets, and external capability adapters.',\n 'Run smrt dev:knowledge-check after applying model-assisted architecture or review updates.',\n ],\n };\n}\n\nfunction buildObjectModelSketch(packages: KnowledgePackage[]): string[] {\n const lines = packages.flatMap((pkg) => {\n const objects = pkg.objects\n .filter((object) => object.extends !== 'SmrtCollection')\n .slice(0, 6)\n .map((object) => object.className);\n if (objects.length === 0) {\n return [\n `${pkg.name}: use package services or templates; no manifest objects indexed.`,\n ];\n }\n return [`${pkg.name}: start from ${objects.join(', ')}.`];\n });\n\n return lines.length > 0\n ? lines\n : [\n 'Define the core domain as SmrtObject classes with explicit relationships and generated surfaces.',\n ];\n}\n\nfunction buildArchitectureRisks(\n packages: KnowledgePackage[],\n ideaText: string,\n): string[] {\n const risks = new Set<string>();\n const names = new Set(packages.map((pkg) => pkg.name));\n const relationshipFeatures = new Set(\n packages.flatMap((pkg) => pkg.relationshipFeatures),\n );\n const lowerText = ideaText.toLowerCase();\n\n if (relationshipFeatures.has('crossPackageRef')) {\n risks.add(\n 'Cross-package references should stay as plain string ids and validate target package ownership at workflow boundaries.',\n );\n }\n if (relationshipFeatures.has('SmrtJunction')) {\n risks.add(\n 'Junction models need explicit conflictColumns so generated upserts stay deterministic.',\n );\n }\n if (relationshipFeatures.has('SmrtHierarchical')) {\n risks.add(\n 'Hierarchical models need cycle prevention and tenant-aware child loading paths.',\n );\n }\n if (\n names.has('@happyvertical/smrt-tenancy') ||\n lowerText.includes('tenant')\n ) {\n risks.add(\n 'Tenant-scoped models need nullable tenantId semantics and tenant-guarded loadRelated usage.',\n );\n }\n if (names.has('@happyvertical/smrt-assets')) {\n risks.add(\n 'Asset ownership should use package-owned join tables; reserve asset_associations for generic/provenance links.',\n );\n }\n if (names.has('@happyvertical/smrt-secrets')) {\n risks.add(\n 'Secrets must use envelope encryption and avoid exposing decrypted values through generated tools.',\n );\n }\n if (names.has('@happyvertical/smrt-jobs') || lowerText.includes('schedule')) {\n risks.add(\n 'Background work should use jobs/schedules rather than request-time side effects.',\n );\n }\n\n risks.add(\n 'Generated architecture should be rechecked with smrt dev:knowledge-check after docs or expertise edits.',\n );\n return [...risks];\n}\n\nfunction buildArchitectureQuestions(\n packages: KnowledgePackage[],\n ideaText: string,\n): string[] {\n const questions = new Set<string>();\n const names = new Set(packages.map((pkg) => pkg.name));\n const lowerText = ideaText.toLowerCase();\n\n questions.add(\n 'Which generated surfaces are required first: REST, CLI, MCP, AI operations, or Svelte UI?',\n );\n if (\n names.has('@happyvertical/smrt-tenancy') ||\n lowerText.includes('tenant')\n ) {\n questions.add(\n 'Which objects are global catalogs and which are tenant-scoped records?',\n );\n }\n if (names.has('@happyvertical/smrt-assets')) {\n questions.add('Which package owns each asset relationship join table?');\n }\n if (names.has('@happyvertical/smrt-profiles')) {\n questions.add('Which identities own or administer the primary records?');\n }\n if (names.has('@happyvertical/smrt-content')) {\n questions.add(\n 'Which content snapshots need citation-time reference pinning?',\n );\n }\n if (names.has('@happyvertical/smrt-social')) {\n questions.add(\n 'Which social providers need OAuth, scheduling, and post-state reconciliation?',\n );\n }\n\n return [...questions];\n}\n\nfunction selectPackagesForFiles(\n index: SmrtKnowledgeIndex,\n changedFiles: string[],\n): KnowledgePackage[] {\n const selected = new Set<KnowledgePackage>();\n for (const file of changedFiles) {\n for (const pkg of domainPackages(index)) {\n if (\n file === pkg.relativeDirectory ||\n file.startsWith(`${pkg.relativeDirectory}/`)\n ) {\n selected.add(pkg);\n }\n }\n }\n return [...selected].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction selectPackages(\n index: SmrtKnowledgeIndex,\n options: {\n changedFiles?: string[];\n text?: string;\n scope?: KnowledgeScope;\n packageName?: string;\n },\n): KnowledgePackage[] {\n const selected = new Set<KnowledgePackage>();\n const packageName = options.packageName?.toLowerCase();\n if (packageName) {\n for (const pkg of domainPackages(index)) {\n if (packageMatches(pkg, packageName)) {\n selected.add(pkg);\n }\n }\n }\n\n for (const pkg of selectPackagesForFiles(index, options.changedFiles ?? [])) {\n if (scopeAllowsPackage(pkg, options.scope)) selected.add(pkg);\n }\n\n const text = (options.text ?? '').toLowerCase();\n if (text) {\n for (const pkg of domainPackages(index)) {\n if (!scopeAllowsPackage(pkg, options.scope)) continue;\n const packageKey = pkg.name.replace('@happyvertical/smrt-', '');\n if (\n includesToken(text, packageKey) ||\n text.includes(pkg.name.toLowerCase()) ||\n pkg.objects.some((object) =>\n includesToken(text, object.className.toLowerCase()),\n )\n ) {\n selected.add(pkg);\n }\n }\n }\n\n if (selected.size === 0 && options.scope === 'local') {\n for (const pkg of domainPackages(index).filter((item) =>\n scopeAllowsPackage(item, 'local'),\n )) {\n selected.add(pkg);\n }\n }\n\n if (selected.size === 0 && options.scope !== 'sdk') {\n for (const name of [\n '@happyvertical/smrt-core',\n '@happyvertical/smrt-config',\n '@happyvertical/smrt-cli',\n '@happyvertical/smrt-scanner',\n '@happyvertical/smrt-dev-mcp',\n ]) {\n const pkg = index.smrtPackages.find((item) => item.name === name);\n if (pkg) selected.add(pkg);\n }\n }\n\n return [...selected].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction selectSdkPackages(\n index: SmrtKnowledgeIndex,\n selectedPackages: KnowledgePackage[],\n texts: Array<string | undefined>,\n options: {\n scope?: KnowledgeScope;\n packageName?: string;\n } = {},\n): KnowledgePackage[] {\n const selected = new Set<KnowledgePackage>();\n const sdkNames = new Set(\n selectedPackages.flatMap((pkg) => pkg.sdkDependencies),\n );\n const text = texts.filter(Boolean).join('\\n').toLowerCase();\n const packageName = options.packageName?.toLowerCase();\n\n for (const sdk of index.sdkPackages) {\n const shortName = sdk.name.replace('@happyvertical/', '');\n if (\n options.scope === 'sdk' ||\n sdkNames.has(sdk.name) ||\n (packageName && packageMatches(sdk, packageName)) ||\n text.includes(sdk.name.toLowerCase()) ||\n includesToken(text, shortName)\n ) {\n selected.add(sdk);\n }\n }\n\n if (selected.size === 0) {\n for (const name of [\n '@happyvertical/ai',\n '@happyvertical/sql',\n '@happyvertical/files',\n '@happyvertical/utils',\n ]) {\n const sdk = index.sdkPackages.find((item) => item.name === name);\n if (sdk) selected.add(sdk);\n }\n }\n\n return [...selected].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction domainPackages(index: SmrtKnowledgeIndex): KnowledgePackage[] {\n return index.packages.filter((pkg) => pkg.kind !== 'sdk');\n}\n\nfunction scopeAllowsPackage(\n pkg: KnowledgePackage,\n scope: KnowledgeScope | undefined,\n): boolean {\n switch (scope) {\n case 'sdk':\n return false;\n case 'local':\n return !pkg.relativeDirectory.includes('node_modules');\n case 'package':\n case 'project':\n case undefined:\n return true;\n }\n}\n\nfunction packageMatches(pkg: KnowledgePackage, query: string): boolean {\n const normalized = query.toLowerCase();\n const shortName = pkg.name\n .replace('@happyvertical/smrt-', '')\n .replace('@happyvertical/', '');\n return (\n pkg.name.toLowerCase() === normalized ||\n pkg.name.toLowerCase().includes(normalized) ||\n shortName.toLowerCase() === normalized ||\n pkg.relativeDirectory.toLowerCase().endsWith(`/${normalized}`)\n );\n}\n\nfunction buildPromptBundle(options: {\n title: string;\n task: string;\n index: SmrtKnowledgeIndex;\n packages: KnowledgePackage[];\n sdkPackages: KnowledgePackage[];\n sourceFiles: string[];\n extraContext?: string;\n}): KnowledgePromptBundle {\n const contextMarkdown = [\n `# ${options.title}`,\n '',\n `Baseline root: ${options.index.rootDir}`,\n '',\n '## Task',\n '',\n options.task,\n '',\n '## Relationships-v2 Summary',\n '',\n JSON.stringify(options.index.relationshipsV2, null, 2),\n '',\n '## Selected SMRT Packages',\n '',\n ...options.packages.map(renderPackageContext),\n '',\n '## Selected SDK Packages',\n '',\n ...options.sdkPackages.map(renderPackageContext),\n '',\n options.extraContext ? `## Extra Context\\n\\n${options.extraContext}\\n` : '',\n ];\n\n return {\n title: options.title,\n instructions:\n 'Use the supplied SMRT knowledge context as source material. Return concrete findings or architecture guidance with package names and source references. Do not assume model-provider access.',\n contextMarkdown: contextMarkdown.join('\\n'),\n selectedPackages: options.packages.map((pkg) => pkg.name),\n selectedSdkPackages: options.sdkPackages.map((pkg) => pkg.name),\n sourceFiles: options.sourceFiles,\n };\n}\n\nfunction renderPackageContext(pkg: KnowledgePackage): string {\n const lines = [\n `### ${pkg.name}`,\n '',\n `- version: ${pkg.version}`,\n `- kind: ${pkg.kind}`,\n `- directory: ${pkg.relativeDirectory}`,\n `- domain knowledge: ${pkg.domainKnowledgePath ?? '(manifest fallback)'}`,\n `- docs: ${pkg.docSource ?? '(none)'}`,\n `- relationship features: ${pkg.relationshipFeatures.join(', ') || '(none)'}`,\n `- SDK deps: ${pkg.sdkDependencies.join(', ') || '(none)'}`,\n `- exports: ${pkg.exportKeys.join(', ') || '(none)'}`,\n `- MCP tools: ${\n pkg.mcpTools\n .slice(0, 20)\n .map((tool) => tool.name)\n .join(', ') || '(none)'\n }`,\n `- objects: ${pkg.objects\n .slice(0, 20)\n .map((object) => object.qualifiedName ?? object.className)\n .join(', ')}`,\n ];\n if (pkg.objects.length > 20) {\n lines.push(`- object count: ${pkg.objects.length}`);\n }\n if (pkg.agentDoc) {\n lines.push('', pkg.agentDoc.trim());\n }\n lines.push('');\n return lines.join('\\n');\n}\n\nfunction getChangedFiles(rootDir: string, base?: string): string[] {\n if (base) {\n try {\n const output = execFileSync(\n 'git',\n ['diff', '--name-only', `${base}...HEAD`],\n {\n cwd: rootDir,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n },\n );\n const files = output\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean);\n if (files.length > 0) return files;\n } catch {\n // Fall back to working-tree changes below.\n }\n }\n\n try {\n const output = execFileSync('git', ['diff', '--name-only'], {\n cwd: rootDir,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n const cachedOutput = execFileSync(\n 'git',\n ['diff', '--cached', '--name-only'],\n {\n cwd: rootDir,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n },\n );\n return uniqueStrings(\n [output, cachedOutput].flatMap((value) =>\n value\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean),\n ),\n );\n } catch {\n return [];\n }\n}\n\nfunction dedupePackages(packages: KnowledgePackage[]): KnowledgePackage[] {\n const byName = new Map<string, KnowledgePackage>();\n for (const pkg of packages) {\n const current = byName.get(pkg.name);\n if (!current || current.kind === 'sdk') {\n byName.set(pkg.name, pkg);\n }\n }\n return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction includesToken(text: string, token: string): boolean {\n const escaped = token.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n return new RegExp(`\\\\b${escaped}\\\\b`, 'i').test(text);\n}\n\nfunction readJson(path: string): unknown {\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, 'utf8'));\n } catch {\n return null;\n }\n}\n\nfunction hashFile(path: string): string {\n return createHash('sha256').update(readFileSync(path, 'utf8')).digest('hex');\n}\n\nfunction hashJsonFile(path: string): string {\n const content = readJson(path);\n const hashContent = content\n ? stableJson(normalizeJsonForHash(content))\n : readFileSync(path, 'utf8');\n return createHash('sha256').update(hashContent).digest('hex');\n}\n\nfunction objectRecord(value: unknown): Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction stringRecord(value: unknown): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(objectRecord(value))) {\n if (typeof entry === 'string') result[key] = entry;\n }\n return result;\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value)\n ? value.filter((entry): entry is string => typeof entry === 'string')\n : [];\n}\n\nfunction camelToSnake(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1_$2')\n .replace(/[-\\s]+/g, '_')\n .toLowerCase();\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)].sort();\n}\n\nfunction normalizeJsonForHash(value: unknown): unknown {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return value;\n }\n\n const normalized = { ...(value as Record<string, unknown>) };\n delete normalized.timestamp;\n return normalized;\n}\n\nfunction stableJson(value: unknown): string {\n return JSON.stringify(sortJson(value), null, 2);\n}\n\nfunction sortJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(sortJson);\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, entry]) => [key, sortJson(entry)]),\n );\n }\n return value;\n}\n"],"names":["relationshipFeatures"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
5
5
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
6
6
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
7
7
  import { ListToolsRequestSchema, ListPromptsRequestSchema, GetPromptRequestSchema, McpError, ErrorCode, ListResourcesRequestSchema, ReadResourceRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
8
- import { c as buildReviewContext, b as buildArchitectureContext, a as buildKnowledgeIndex, s as smrtArchitecture, h as smrtReview, d as checkKnowledgeFreshness, e as checkKnowledgeFreshnessFromIndex } from './index-DF0HSB_8.js';
8
+ import { c as buildReviewContext, b as buildArchitectureContext, a as buildKnowledgeIndex, s as smrtArchitecture, h as smrtReview, d as checkKnowledgeFreshness, e as checkKnowledgeFreshnessFromIndex } from './index-K9gNIcVt.js';
9
9
  import { access, readFile, readdir } from 'node:fs/promises';
10
10
  import { ManifestGenerator } from '@happyvertical/smrt-core/scanner';
11
11
  import { OxcScanner, ManifestAdapter } from '@happyvertical/smrt-scanner';
@@ -1784,16 +1784,24 @@ async function main() {
1784
1784
  let result;
1785
1785
  switch (name) {
1786
1786
  case "generate-smrt-class":
1787
- result = await generateSmrtClass(args);
1787
+ result = await generateSmrtClass(
1788
+ args
1789
+ );
1788
1790
  break;
1789
1791
  case "introspect-project":
1790
- result = await introspectProject(args);
1792
+ result = await introspectProject(
1793
+ args
1794
+ );
1791
1795
  break;
1792
1796
  case "review-smrt-project":
1793
- result = await reviewSmrtProject(args);
1797
+ result = await reviewSmrtProject(
1798
+ args
1799
+ );
1794
1800
  break;
1795
1801
  case "reflect-knowledge": {
1796
- const index = await buildKnowledgeIndex(args);
1802
+ const index = await buildKnowledgeIndex(
1803
+ args
1804
+ );
1797
1805
  const freshness = await checkKnowledgeFreshnessFromIndex(
1798
1806
  index,
1799
1807
  args
@@ -1813,7 +1821,9 @@ async function main() {
1813
1821
  break;
1814
1822
  }
1815
1823
  case "reflect-domain-knowledge": {
1816
- const index = await buildKnowledgeIndex(args);
1824
+ const index = await buildKnowledgeIndex(
1825
+ args
1826
+ );
1817
1827
  const freshness = await checkKnowledgeFreshnessFromIndex(
1818
1828
  index,
1819
1829
  args
@@ -1840,57 +1850,87 @@ async function main() {
1840
1850
  }
1841
1851
  case "check-knowledge-freshness":
1842
1852
  result = JSON.stringify(
1843
- await checkKnowledgeFreshness(args),
1853
+ await checkKnowledgeFreshness(
1854
+ args
1855
+ ),
1844
1856
  null,
1845
1857
  2
1846
1858
  );
1847
1859
  break;
1848
1860
  case "check-domain-knowledge":
1849
1861
  result = JSON.stringify(
1850
- await checkKnowledgeFreshness(args),
1862
+ await checkKnowledgeFreshness(
1863
+ args
1864
+ ),
1851
1865
  null,
1852
1866
  2
1853
1867
  );
1854
1868
  break;
1855
1869
  case "build-review-context":
1856
1870
  result = JSON.stringify(
1857
- await buildReviewContext(args),
1871
+ await buildReviewContext(
1872
+ args
1873
+ ),
1858
1874
  null,
1859
1875
  2
1860
1876
  );
1861
1877
  break;
1862
1878
  case "build-domain-review-context":
1863
1879
  result = JSON.stringify(
1864
- await buildReviewContext(args),
1880
+ await buildReviewContext(
1881
+ args
1882
+ ),
1865
1883
  null,
1866
1884
  2
1867
1885
  );
1868
1886
  break;
1869
1887
  case "smrt-review":
1870
- result = JSON.stringify(await smrtReview(args), null, 2);
1888
+ result = JSON.stringify(
1889
+ await smrtReview(
1890
+ args
1891
+ ),
1892
+ null,
1893
+ 2
1894
+ );
1871
1895
  break;
1872
1896
  case "build-architecture-context":
1873
1897
  result = JSON.stringify(
1874
- await buildArchitectureContext(args),
1898
+ await buildArchitectureContext(
1899
+ args
1900
+ ),
1875
1901
  null,
1876
1902
  2
1877
1903
  );
1878
1904
  break;
1879
1905
  case "build-domain-architecture-context":
1880
1906
  result = JSON.stringify(
1881
- await buildArchitectureContext(args),
1907
+ await buildArchitectureContext(
1908
+ args
1909
+ ),
1882
1910
  null,
1883
1911
  2
1884
1912
  );
1885
1913
  break;
1886
1914
  case "smrt-architecture":
1887
- result = JSON.stringify(await smrtArchitecture(args), null, 2);
1915
+ result = JSON.stringify(
1916
+ await smrtArchitecture(
1917
+ args
1918
+ ),
1919
+ null,
1920
+ 2
1921
+ );
1888
1922
  break;
1889
1923
  case "list-agent-skills":
1890
1924
  result = JSON.stringify({ skills: listAgentSkills() }, null, 2);
1891
1925
  break;
1892
1926
  case "get-agent-skill":
1893
- result = JSON.stringify(await getAgentSkill(args), null, 2);
1927
+ result = JSON.stringify(
1928
+ await getAgentSkill(
1929
+ args
1930
+ ),
1931
+ null,
1932
+ 2
1933
+ );
1894
1934
  break;
1895
1935
  default:
1896
1936
  throw new Error(`Unknown tool: ${name}`);