@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.
package/dist/knowledge.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { b as buildArchitectureContext, a as buildKnowledgeIndex, c as buildReviewContext, d as checkKnowledgeFreshness, e as checkKnowledgeFreshnessFromIndex, f as diffKnowledgeIndex, r as renderFreshnessResult, g as renderKnowledgeIndexMarkdown, s as smrtArchitecture, h as smrtReview } from './index-
|
|
1
|
+
export { b as buildArchitectureContext, a as buildKnowledgeIndex, c as buildReviewContext, d as checkKnowledgeFreshness, e as checkKnowledgeFreshnessFromIndex, f as diffKnowledgeIndex, r as renderFreshnessResult, g as renderKnowledgeIndexMarkdown, s as smrtArchitecture, h as smrtReview } from './index-K9gNIcVt.js';
|
|
2
2
|
//# sourceMappingURL=knowledge.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-dev-mcp",
|
|
3
|
-
"version": "0.35.
|
|
3
|
+
"version": "0.35.4",
|
|
4
4
|
"description": "Development MCP server for SMRT framework knowledge, review context, architecture context, and code generation",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
44
|
-
"@happyvertical/smrt-
|
|
45
|
-
"@happyvertical/smrt-
|
|
46
|
-
"@happyvertical/smrt-
|
|
44
|
+
"@happyvertical/smrt-core": "0.35.4",
|
|
45
|
+
"@happyvertical/smrt-scanner": "0.35.4",
|
|
46
|
+
"@happyvertical/smrt-types": "0.35.4"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "25.0.9",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DF0HSB_8.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 = 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 = readJson(join(directory, 'package.json')) ?? {};\n const dependencies = objectRecord(packageJson.dependencies);\n const devDependencies = objectRecord(packageJson.devDependencies);\n const peerDependencies = objectRecord(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: Array.isArray(packageJson.files) ? 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 };\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 = raw as Record<string, any>;\n const fields = objectRecord(item.fields);\n const schemaColumns = objectRecord(item.schema?.columns);\n const decoratorConfig = item.decoratorConfig as\n | Record<string, unknown>\n | undefined;\n const knowledgeFields = Object.entries(fields).map(([fieldName, field]) => {\n const fieldInfo = field as Record<string, any>;\n const columnName = camelToSnake(fieldName);\n const column = schemaColumns[columnName] as\n | Record<string, any>\n | undefined;\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(item.decoratorConfig?.mcp),\n tableName:\n typeof decoratorConfig?.tableName === 'string'\n ? decoratorConfig.tableName\n : typeof item.schema?.tableName === 'string'\n ? item.schema.tableName\n : undefined,\n idColumnType:\n typeof (schemaColumns.id as Record<string, any> | undefined)?.type ===\n 'string'\n ? (schemaColumns.id as Record<string, any>).type\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): any | null {\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, any> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, any>)\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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"}
|