@happyvertical/smrt-dev-mcp 0.35.3 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/agent-skills.ts","../src/tools/generate-smrt-class.ts","../src/tools/introspect-project.ts","../src/tools/review-smrt-project.ts","../src/index.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface AgentSkillSummary {\n name: string;\n description: string;\n path: string;\n references: string[];\n}\n\nexport interface AgentSkillBundle extends AgentSkillSummary {\n skillMarkdown: string;\n referenceFiles: Array<{\n path: string;\n content: string;\n }>;\n}\n\ninterface AgentSkillDefinition extends AgentSkillSummary {\n skillFile: string;\n}\n\nconst AGENT_SKILLS: AgentSkillDefinition[] = [\n {\n name: 'smrt-code-review',\n description:\n 'Harness-agnostic downstream SMRT code review workflow using smrt-dev-mcp deterministic context and prompt bundles.',\n path: 'agent-skills/smrt-code-review/SKILL.md',\n skillFile: 'agent-skills/smrt-code-review/SKILL.md',\n references: ['agent-skills/smrt-code-review/references/review-output.md'],\n },\n];\n\nexport function listAgentSkills(): AgentSkillSummary[] {\n return AGENT_SKILLS.map(({ skillFile: _skillFile, ...skill }) => skill);\n}\n\nexport function getAgentSkill(options: {\n name: string;\n includeReferences?: boolean;\n}): AgentSkillBundle {\n const skill = AGENT_SKILLS.find((item) => item.name === options.name);\n if (!skill) {\n throw new Error(`Unknown agent skill: ${options.name}`);\n }\n\n return {\n name: skill.name,\n description: skill.description,\n path: skill.path,\n references: skill.references,\n skillMarkdown: readPackageFile(skill.skillFile),\n referenceFiles:\n options.includeReferences === false\n ? []\n : skill.references.map((path) => ({\n path,\n content: readPackageFile(path),\n })),\n };\n}\n\nfunction readPackageFile(relativePath: string): string {\n const packageRoot = resolvePackageRoot();\n return readFileSync(join(packageRoot, relativePath), 'utf8');\n}\n\nfunction resolvePackageRoot(): string {\n // Works in both source tests (`src/agent-skills.ts`) and built packages\n // (`dist/agent-skills.js`); guard it so packaging layout drift fails clearly.\n const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));\n if (!existsSync(join(packageRoot, 'package.json'))) {\n throw new Error(\n `Unable to resolve smrt-dev-mcp package root from ${import.meta.url}`,\n );\n }\n return packageRoot;\n}\n","/**\n * Generate SMRT Class Tool\n * Creates a package-ready SMRT class using current object-package patterns.\n */\n\ntype PropertyType =\n | 'text'\n | 'integer'\n | 'decimal'\n | 'boolean'\n | 'datetime'\n | 'json';\ntype BaseClass = 'SmrtObject' | 'SmrtCollection';\ntype TemplateVariant =\n | 'basic'\n | 'global-catalog'\n | 'optional-catalog'\n | 'tenant-project-object'\n | 'tenant-event-log-object'\n | 'cross-package-reference';\ntype RelationshipType =\n | 'foreignKey'\n | 'crossPackageRef'\n | 'oneToMany'\n | 'manyToMany';\n\ninterface PropertyDefinition {\n name: string;\n type: PropertyType;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n defaultValue?: unknown;\n}\n\ninterface RelationshipDefinition {\n name: string;\n type: RelationshipType;\n related: string;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n validate?: boolean;\n foreignKey?: string;\n through?: string;\n sourceKey?: string;\n targetKey?: string;\n}\n\ninterface TenantScopedDefinition {\n mode?: 'required' | 'optional';\n field?: string;\n autoFilter?: boolean;\n autoPopulate?: boolean;\n allowSuperAdminBypass?: boolean;\n}\n\ninterface GenerateSmrtClassArgs {\n className: string;\n properties: PropertyDefinition[];\n baseClass?: BaseClass;\n template?: TemplateVariant;\n tableName?: string;\n conflictColumns?: string[];\n tenantScoped?: boolean | TenantScopedDefinition;\n includeTenantIdField?: boolean;\n relationships?: RelationshipDefinition[];\n includeApiConfig?: boolean;\n includeMcpConfig?: boolean;\n includeCliConfig?: boolean;\n includeCompanionSnippets?: boolean;\n}\n\ninterface NormalizedGenerateSmrtClassArgs {\n className: string;\n properties: PropertyDefinition[];\n baseClass: BaseClass;\n template: TemplateVariant;\n tableName?: string;\n conflictColumns: string[];\n tenantScoped?: TenantScopedDefinition;\n includeTenantIdField: boolean;\n relationships: RelationshipDefinition[];\n includeApiConfig: boolean;\n includeMcpConfig: boolean;\n includeCliConfig: boolean;\n includeCompanionSnippets: boolean;\n}\n\nconst TYPE_MAPPING: Record<\n PropertyType,\n { tsType: string; defaultValue: string }\n> = {\n text: { tsType: 'string', defaultValue: \"''\" },\n integer: { tsType: 'number', defaultValue: '0' },\n decimal: { tsType: 'number', defaultValue: '0.0' },\n boolean: { tsType: 'boolean', defaultValue: 'false' },\n datetime: { tsType: 'Date', defaultValue: 'new Date()' },\n json: { tsType: 'any', defaultValue: '{}' },\n};\n\nexport async function generateSmrtClass(\n args: GenerateSmrtClassArgs,\n): Promise<string> {\n const normalized = normalizeArgs(args);\n const {\n className,\n properties,\n relationships,\n baseClass,\n tableName,\n conflictColumns,\n tenantScoped,\n includeTenantIdField,\n includeApiConfig,\n includeMcpConfig,\n includeCliConfig,\n includeCompanionSnippets,\n } = normalized;\n\n const coreImports = new Set<string>([baseClass, 'smrt']);\n if (needsFieldDecorator(properties)) coreImports.add('field');\n for (const relationship of relationships) {\n coreImports.add(relationship.type);\n }\n\n const imports = [\n `import { ${Array.from(coreImports).join(', ')} } from '@happyvertical/smrt-core';`,\n ];\n\n if (tenantScoped) {\n const tenancyImports = ['TenantScoped'];\n if (includeTenantIdField) tenancyImports.push('tenantId');\n imports.push(\n `import { ${tenancyImports.join(', ')} } from '@happyvertical/smrt-tenancy';`,\n );\n }\n\n const decoratorLines = [\n ...(tenantScoped\n ? [`@TenantScoped(${renderObjectLiteral({ ...tenantScoped })})`]\n : []),\n renderSmrtDecorator({\n includeApiConfig,\n includeMcpConfig,\n includeCliConfig,\n tableName,\n conflictColumns,\n }),\n ];\n\n const classMembers = [\n ...(includeTenantIdField && tenantScoped\n ? [renderTenantIdField(tenantScoped)]\n : []),\n ...properties.map(renderProperty),\n ...relationships.map(renderRelationship),\n ].filter(Boolean);\n\n const companionSnippets = includeCompanionSnippets\n ? `\\n${renderCompanionSnippets(className, Boolean(tenantScoped))}`\n : '';\n\n return `${imports.join('\\n')}\n\n${decoratorLines.join('\\n')}\nexport class ${className} extends ${baseClass} {\n${classMembers.join('\\n\\n')}\n\n constructor(options: any = {}) {\n super(options);\n Object.assign(this, options);\n }\n}\n${companionSnippets}`;\n}\n\nfunction normalizeArgs(\n args: GenerateSmrtClassArgs,\n): NormalizedGenerateSmrtClassArgs {\n const template = args.template ?? 'basic';\n const templateDefaults = defaultsForTemplate(template);\n const tenantScoped =\n args.tenantScoped === true\n ? (templateDefaults.tenantScoped ?? { mode: 'required' as const })\n : args.tenantScoped === false\n ? undefined\n : (args.tenantScoped ?? templateDefaults.tenantScoped);\n\n return {\n className: args.className,\n properties: args.properties,\n baseClass: args.baseClass ?? 'SmrtObject',\n template,\n tableName: args.tableName ?? templateDefaults.tableName,\n conflictColumns:\n args.conflictColumns ?? templateDefaults.conflictColumns ?? [],\n tenantScoped: normalizeTenantScoped(tenantScoped),\n includeTenantIdField:\n args.includeTenantIdField ??\n templateDefaults.includeTenantIdField ??\n Boolean(tenantScoped),\n relationships: args.relationships ?? [],\n includeApiConfig: args.includeApiConfig ?? true,\n includeMcpConfig: args.includeMcpConfig ?? true,\n includeCliConfig: args.includeCliConfig ?? true,\n includeCompanionSnippets: args.includeCompanionSnippets ?? false,\n };\n}\n\nfunction defaultsForTemplate(template: TemplateVariant): {\n tableName?: string;\n conflictColumns?: string[];\n tenantScoped?: TenantScopedDefinition;\n includeTenantIdField?: boolean;\n} {\n switch (template) {\n case 'optional-catalog':\n return {\n tenantScoped: { mode: 'optional' },\n includeTenantIdField: true,\n conflictColumns: ['tenant_id', 'slug'],\n };\n case 'tenant-project-object':\n return {\n tenantScoped: { mode: 'required' },\n includeTenantIdField: true,\n };\n case 'tenant-event-log-object':\n return {\n tenantScoped: { mode: 'optional' },\n includeTenantIdField: true,\n };\n case 'global-catalog':\n return { conflictColumns: ['slug'] };\n case 'cross-package-reference':\n case 'basic':\n return {};\n }\n}\n\nfunction normalizeTenantScoped(\n value: boolean | TenantScopedDefinition | undefined,\n): TenantScopedDefinition | undefined {\n if (!value) return undefined;\n return {\n mode: typeof value === 'object' ? (value.mode ?? 'required') : 'required',\n field: typeof value === 'object' ? (value.field ?? 'tenantId') : 'tenantId',\n autoFilter: typeof value === 'object' ? value.autoFilter : undefined,\n autoPopulate: typeof value === 'object' ? value.autoPopulate : undefined,\n allowSuperAdminBypass:\n typeof value === 'object' ? value.allowSuperAdminBypass : undefined,\n };\n}\n\nfunction renderSmrtDecorator(options: {\n includeApiConfig: boolean;\n includeMcpConfig: boolean;\n includeCliConfig: boolean;\n tableName?: string;\n conflictColumns: string[];\n}): string {\n const decoratorConfig: Record<string, unknown> = {};\n\n if (options.tableName) {\n decoratorConfig.tableName = options.tableName;\n }\n\n if (options.conflictColumns.length > 0) {\n decoratorConfig.conflictColumns = options.conflictColumns;\n }\n\n if (options.includeApiConfig) {\n decoratorConfig.api = {\n include: ['list', 'get', 'create', 'update'],\n exclude: ['delete'],\n };\n }\n\n if (options.includeMcpConfig) {\n decoratorConfig.mcp = {\n include: ['list', 'get'],\n };\n }\n\n if (options.includeCliConfig) {\n decoratorConfig.cli = true;\n }\n\n return Object.keys(decoratorConfig).length > 0\n ? `@smrt(${JSON.stringify(decoratorConfig, null, 2)})`\n : '@smrt()';\n}\n\nfunction renderTenantIdField(tenantScoped: TenantScopedDefinition): string {\n const nullable = tenantScoped.mode === 'optional';\n const field = tenantScoped.field ?? 'tenantId';\n return nullable\n ? ` @tenantId({ nullable: true })\\n ${field}: string | null = null;`\n : ` @tenantId()\\n ${field}: string = '';`;\n}\n\nfunction renderProperty(prop: PropertyDefinition): string {\n const mapping = TYPE_MAPPING[prop.type];\n const nullable = prop.nullable === true;\n const tsType = nullable ? `${mapping.tsType} | null` : mapping.tsType;\n const defaultValue =\n prop.defaultValue !== undefined\n ? renderLiteral(prop.defaultValue)\n : nullable\n ? 'null'\n : mapping.defaultValue;\n const fieldOptions = compactObject({\n required: prop.required,\n nullable: prop.nullable,\n description: prop.description,\n });\n const jsdoc = prop.description ? ` /** ${prop.description} */\\n` : '';\n const decorator =\n Object.keys(fieldOptions).length > 0\n ? ` @field(${JSON.stringify(fieldOptions)})\\n`\n : '';\n\n return `${jsdoc}${decorator} ${prop.name}: ${tsType} = ${defaultValue};`;\n}\n\nfunction renderRelationship(relationship: RelationshipDefinition): string {\n const options = compactObject({\n required: relationship.required,\n nullable: relationship.nullable,\n description: relationship.description,\n validate: relationship.validate,\n foreignKey: relationship.foreignKey,\n through: relationship.through,\n sourceKey: relationship.sourceKey,\n targetKey: relationship.targetKey,\n });\n const args = [\n renderLiteral(relationship.related),\n ...(Object.keys(options).length > 0 ? [JSON.stringify(options)] : []),\n ];\n const decorator = `@${relationship.type}(${args.join(', ')})`;\n const fieldType =\n relationship.type === 'oneToMany' || relationship.type === 'manyToMany'\n ? 'unknown[]'\n : relationship.nullable\n ? 'string | null'\n : 'string';\n const defaultValue =\n relationship.type === 'oneToMany' || relationship.type === 'manyToMany'\n ? '[]'\n : relationship.nullable\n ? 'null'\n : \"''\";\n\n return ` ${decorator}\\n ${relationship.name}: ${fieldType} = ${defaultValue};`;\n}\n\nfunction needsFieldDecorator(properties: PropertyDefinition[]): boolean {\n return properties.some(\n (property) =>\n property.required !== undefined ||\n property.nullable !== undefined ||\n property.description !== undefined,\n );\n}\n\nfunction renderCompanionSnippets(\n className: string,\n usesTenantScoped: boolean,\n): string {\n const dependencyNote = usesTenantScoped\n ? `\\n * - Ensure package.json declares \"@happyvertical/smrt-tenancy\".`\n : '';\n return `/*\n * Package wiring:\n * - Export ${className} from the package entrypoint used by consumers.\n * - Import this module from any package registration file that eagerly loads objects.${dependencyNote}\n */`;\n}\n\nfunction renderObjectLiteral(value: Record<string, unknown>): string {\n return JSON.stringify(compactObject(value), null, 2);\n}\n\nfunction renderLiteral(value: unknown): string {\n if (typeof value === 'string') return JSON.stringify(value);\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (value === null) return 'null';\n return JSON.stringify(value, null, 2);\n}\n\nfunction compactObject<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n","/**\n * Project Introspection Tool\n * Returns a manifest-equivalent inventory of SMRT objects in a project.\n */\n\nimport type { Dirent } from 'node:fs';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { isAbsolute, join, relative, resolve } from 'node:path';\nimport {\n ManifestGenerator,\n type SmartObjectManifest,\n} from '@happyvertical/smrt-core/scanner';\nimport type { ScanError } from '@happyvertical/smrt-scanner';\nimport { ManifestAdapter, OxcScanner } from '@happyvertical/smrt-scanner';\n\ninterface IntrospectProjectArgs {\n directory?: string;\n manifestPath?: string;\n includeFields?: boolean;\n includeRelationships?: boolean;\n includeMethods?: boolean;\n}\n\ntype DiagnosticSeverity = 'error' | 'warning' | 'info';\n\ninterface Diagnostic {\n severity: DiagnosticSeverity;\n message: string;\n filePath?: string;\n line?: number;\n column?: number;\n}\n\ninterface ManifestLike {\n version?: string;\n packageName?: string;\n packageVersion?: string;\n objects?: Record<string, ManifestObject>;\n}\n\ninterface ManifestObject {\n name?: string;\n className: string;\n qualifiedName?: string;\n collection?: string;\n filePath: string;\n packageName?: string;\n packageVersion?: string;\n importPath?: string;\n modulePath?: string;\n exportName?: string;\n collectionExportName?: string;\n fields?: Record<string, ManifestField>;\n methods?: Record<string, ManifestMethod>;\n decoratorConfig?: Record<string, unknown>;\n extends?: string;\n extendsTypeArg?: string;\n schema?: ManifestSchema;\n staticProperties?: Record<string, unknown>;\n validationRules?: Record<string, unknown>;\n}\n\ninterface ManifestField {\n type: string;\n required?: boolean;\n default?: unknown;\n related?: string;\n description?: string;\n _meta?: Record<string, unknown>;\n transient?: boolean;\n}\n\ninterface ManifestMethod {\n name?: string;\n async?: boolean;\n parameters?: Array<{\n name: string;\n type?: string;\n optional?: boolean;\n default?: unknown;\n }>;\n returnType?: string;\n description?: string;\n isStatic?: boolean;\n isPublic?: boolean;\n}\n\ninterface ManifestSchema {\n tableName?: string;\n ddl?: string;\n columns?: Record<string, unknown>;\n indexes?: Array<{\n name?: string;\n columns?: string[];\n unique?: boolean;\n where?: string;\n jsonPath?: unknown;\n }>;\n version?: string;\n}\n\ninterface PackageMetadata {\n name?: string;\n version?: string;\n json?: Record<string, unknown>;\n}\n\nconst DEFAULT_MANIFEST_PATHS = [\n '.smrt/manifest.json',\n 'dist/manifest.json',\n 'src/manifest/manifest.json',\n];\n\nconst SCAN_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/.smrt/**',\n '**/*.d.ts',\n '**/*.test.ts',\n '**/*.spec.ts',\n '**/__tests__/**',\n];\n\nconst RELATIONSHIP_TYPES = new Set([\n 'foreignKey',\n 'crossPackageRef',\n 'oneToMany',\n 'manyToMany',\n]);\n\nexport async function introspectProject(\n args: IntrospectProjectArgs,\n): Promise<string> {\n const {\n directory = process.cwd(),\n includeFields = true,\n includeRelationships = true,\n includeMethods = true,\n } = args;\n const projectPath = resolve(directory);\n\n const exists = await pathExists(projectPath);\n if (!exists) {\n return JSON.stringify(\n {\n projectPath,\n manifestSource: 'none',\n objectCount: 0,\n objects: [],\n diagnostics: [\n {\n severity: 'warning',\n message: `Project directory does not exist: ${projectPath}`,\n },\n ],\n },\n null,\n 2,\n );\n }\n\n const packageMetadata = await readPackageMetadata(projectPath);\n const tenantScopes = await scanTenantScopes(projectPath);\n const manifestResult =\n (await loadManifestArtifact(projectPath, args.manifestPath)) ??\n (await scanSourceManifest(projectPath, packageMetadata));\n\n const objects = Object.entries(manifestResult.manifest.objects ?? {})\n .map(([manifestKey, object]) =>\n formatObject({\n manifestKey,\n object,\n projectPath,\n includeFields,\n includeRelationships,\n includeMethods,\n tenantScope: tenantScopes.get(object.className),\n }),\n )\n .sort((left, right) => left.className.localeCompare(right.className));\n\n const output = {\n projectPath,\n manifestSource: manifestResult.source,\n manifestPath:\n 'path' in manifestResult\n ? relative(projectPath, manifestResult.path)\n : undefined,\n packageName:\n manifestResult.manifest.packageName ?? packageMetadata.name ?? undefined,\n packageVersion:\n manifestResult.manifest.packageVersion ??\n packageMetadata.version ??\n undefined,\n objectCount: objects.length,\n scannedFileCount: manifestResult.scannedFileCount,\n parseTimeMs: manifestResult.parseTimeMs,\n objects,\n diagnostics: manifestResult.diagnostics,\n };\n\n return JSON.stringify(output, null, 2);\n}\n\nasync function loadManifestArtifact(\n projectPath: string,\n manifestPath: string | undefined,\n): Promise<\n | {\n source: 'manifest';\n path: string;\n manifest: ManifestLike;\n diagnostics: Diagnostic[];\n scannedFileCount?: number;\n parseTimeMs?: number;\n }\n | undefined\n> {\n const candidates = manifestPath\n ? [resolve(projectPath, manifestPath)]\n : DEFAULT_MANIFEST_PATHS.map((candidate) => join(projectPath, candidate));\n\n const diagnostics: Diagnostic[] = [];\n for (const candidate of candidates) {\n if (!(await pathExists(candidate))) {\n continue;\n }\n\n try {\n const parsed = JSON.parse(await readFile(candidate, 'utf-8')) as unknown;\n if (isManifestLike(parsed)) {\n return {\n source: 'manifest',\n path: candidate,\n manifest: parsed,\n diagnostics,\n };\n }\n\n diagnostics.push({\n severity: 'warning',\n filePath: candidate,\n message: 'Manifest artifact is present but does not contain objects.',\n });\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n filePath: candidate,\n message: `Unable to parse manifest artifact: ${messageFromError(error)}`,\n });\n }\n }\n\n return manifestPath\n ? {\n source: 'manifest',\n path: resolve(projectPath, manifestPath),\n manifest: { objects: {} },\n diagnostics: [\n ...diagnostics,\n {\n severity: 'warning',\n filePath: resolve(projectPath, manifestPath),\n message: 'Requested manifest artifact was not found.',\n },\n ],\n }\n : undefined;\n}\n\nasync function scanSourceManifest(\n projectPath: string,\n packageMetadata: PackageMetadata,\n): Promise<{\n source: 'scanner';\n manifest: ManifestLike;\n diagnostics: Diagnostic[];\n scannedFileCount: number;\n parseTimeMs: number;\n}> {\n const scanner = new OxcScanner({\n cwd: projectPath,\n include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],\n exclude: SCAN_EXCLUDE,\n });\n const { results, resolved } = await scanner.scanAndResolve();\n const adapter = new ManifestAdapter();\n const manifest = adapter.toManifest(\n resolved.filter((classDef) => classDef.hasSmartDecorator),\n {\n packageName: packageMetadata.name,\n packageVersion: packageMetadata.version,\n typeAliases: results.typeAliases,\n },\n ) as ManifestLike;\n finalizeScannerManifest(manifest, packageMetadata);\n\n return {\n source: 'scanner',\n manifest,\n diagnostics: results.errors.map(scanErrorToDiagnostic),\n scannedFileCount: results.fileCount,\n parseTimeMs: Math.round(results.totalParseTimeMs),\n };\n}\n\nfunction finalizeScannerManifest(\n manifest: ManifestLike,\n packageMetadata: PackageMetadata,\n): void {\n const manifestGen = new ManifestGenerator();\n const fullManifest = manifest as unknown as SmartObjectManifest;\n withSuppressedConsoleLog(() => {\n manifestGen.injectTenantScopedFields(fullManifest);\n manifestGen.mergeInheritedFields(fullManifest);\n manifestGen.generateValidationRules(fullManifest);\n manifestGen.generateSchemas(fullManifest);\n manifestGen.assertTenantScopedSchemaContract(fullManifest);\n manifestGen.generateAgentManifests(\n fullManifest,\n packageMetadata.name,\n packageMetadata.json,\n );\n });\n}\n\nfunction withSuppressedConsoleLog<T>(callback: () => T): T {\n const originalLog = console.log;\n console.log = () => undefined;\n try {\n return callback();\n } finally {\n console.log = originalLog;\n }\n}\n\nfunction formatObject({\n manifestKey,\n object,\n projectPath,\n includeFields,\n includeRelationships,\n includeMethods,\n tenantScope,\n}: {\n manifestKey: string;\n object: ManifestObject;\n projectPath: string;\n includeFields: boolean;\n includeRelationships: boolean;\n includeMethods: boolean;\n tenantScope?: Record<string, unknown>;\n}) {\n const fieldDetails = Object.entries(object.fields ?? {}).map(\n ([name, field]) => ({\n name,\n type: field.type,\n ...(field.required !== undefined ? { required: field.required } : {}),\n ...(field.default !== undefined ? { default: field.default } : {}),\n ...(field.related ? { related: field.related } : {}),\n ...(field.description ? { description: field.description } : {}),\n ...(field._meta ? { meta: field._meta } : {}),\n ...(field.transient !== undefined ? { transient: field.transient } : {}),\n }),\n );\n const relationshipDetails = fieldDetails\n .filter((field) => RELATIONSHIP_TYPES.has(field.type))\n .map((field) => ({\n field: field.name,\n relatedClass: field.related ?? '',\n type: field.type,\n ...(field.meta ? { meta: field.meta } : {}),\n }));\n const methodDetails = Object.entries(object.methods ?? {}).map(\n ([name, method]) => ({\n name: method.name ?? name,\n isAsync: method.async === true,\n isStatic: method.isStatic === true,\n isPublic: method.isPublic !== false,\n parameters: method.parameters ?? [],\n returnType: method.returnType ?? 'unknown',\n ...(method.description ? { description: method.description } : {}),\n }),\n );\n\n const decoratorConfig = object.decoratorConfig ?? {};\n const effectiveTenantScope =\n tenantScope ?? normalizeTenantScopedConfig(decoratorConfig.tenantScoped);\n const schema = object.schema;\n\n return compactObject({\n manifestKey,\n name: object.name,\n className: object.className,\n qualifiedName: object.qualifiedName,\n filePath: sanitizePath(projectPath, object.filePath),\n packageName: object.packageName,\n packageVersion: object.packageVersion,\n importPath: object.importPath,\n modulePath: object.modulePath,\n exportName: object.exportName,\n collectionExportName: object.collectionExportName,\n collection: object.collection,\n extends: object.extends,\n extendsTypeArg: object.extendsTypeArg,\n tableName:\n schema?.tableName ??\n stringFromConfig(decoratorConfig.tableName) ??\n object.collection,\n tableStrategy: stringFromConfig(decoratorConfig.tableStrategy) ?? 'cti',\n conflictColumns: arrayFromConfig(decoratorConfig.conflictColumns),\n tenantScope: effectiveTenantScope,\n decoratorConfig,\n schema: schema\n ? {\n tableName: schema.tableName,\n columns: schema.columns,\n indexes: schema.indexes ?? [],\n version: schema.version,\n }\n : undefined,\n indexes: schema?.indexes ?? [],\n staticProperties: object.staticProperties,\n validationRules: object.validationRules,\n ...(includeFields && {\n fields: fieldDetails\n .map((field) => `${field.name}: ${field.type}`)\n .join(', '),\n fieldDetails,\n }),\n ...(includeRelationships &&\n relationshipDetails.length > 0 && {\n relationships: relationshipDetails\n .map(\n (relationship) =>\n `${relationship.field} -> ${relationship.relatedClass} (${relationship.type})`,\n )\n .join(', '),\n relationshipDetails,\n }),\n ...(includeMethods &&\n methodDetails.length > 0 && {\n methods: methodDetails\n .map((method) => `${method.isAsync ? 'async ' : ''}${method.name}()`)\n .join(', '),\n methodDetails,\n }),\n });\n}\n\nasync function scanTenantScopes(\n projectPath: string,\n): Promise<Map<string, Record<string, unknown>>> {\n const files = await listSourceFiles(projectPath);\n const scopes = new Map<string, Record<string, unknown>>();\n\n await Promise.all(\n files.map(async (filePath) => {\n const content = await readFile(filePath, 'utf-8');\n const classMatches = content.matchAll(/class\\s+([A-Za-z_]\\w*)\\b/g);\n for (const match of classMatches) {\n const className = match[1];\n if (!className || match.index === undefined) continue;\n const prefix = content.slice(\n Math.max(0, match.index - 800),\n match.index,\n );\n const tenantMatches = Array.from(\n prefix.matchAll(/@TenantScoped\\s*\\(([\\s\\S]*?)\\)/g),\n );\n const tenantMatch = tenantMatches.at(-1);\n if (!tenantMatch) continue;\n scopes.set(className, {\n source: 'TenantScoped',\n ...parseTenantScopedOptions(tenantMatch[1]),\n });\n }\n }),\n );\n\n return scopes;\n}\n\nasync function listSourceFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n\n async function visit(dir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (\n [\n 'node_modules',\n 'dist',\n 'build',\n '.git',\n '.smrt',\n '__tests__',\n ].includes(entry.name) ||\n entry.name.startsWith('.')\n ) {\n continue;\n }\n await visit(fullPath);\n continue;\n }\n\n if (\n entry.isFile() &&\n /\\.(tsx?|jsx?)$/.test(entry.name) &&\n !entry.name.endsWith('.d.ts') &&\n !entry.name.endsWith('.test.ts') &&\n !entry.name.endsWith('.spec.ts')\n ) {\n files.push(fullPath);\n }\n }\n }\n\n await visit(projectPath);\n return files;\n}\n\nfunction parseTenantScopedOptions(raw: string): Record<string, unknown> {\n const mode = raw.match(/mode\\s*:\\s*['\"`](required|optional)['\"`]/)?.[1];\n const field = raw.match(/field\\s*:\\s*['\"`]([A-Za-z_]\\w*)['\"`]/)?.[1];\n const allowSuperAdminBypass = raw.match(\n /allowSuperAdminBypass\\s*:\\s*(true|false)/,\n )?.[1];\n const autoFilter = raw.match(/autoFilter\\s*:\\s*(true|false)/)?.[1];\n const autoPopulate = raw.match(/autoPopulate\\s*:\\s*(true|false)/)?.[1];\n\n return compactObject({\n mode: mode ?? 'required',\n field: field ?? 'tenantId',\n autoFilter: autoFilter === undefined ? undefined : autoFilter === 'true',\n autoPopulate:\n autoPopulate === undefined ? undefined : autoPopulate === 'true',\n allowSuperAdminBypass:\n allowSuperAdminBypass === undefined\n ? undefined\n : allowSuperAdminBypass === 'true',\n });\n}\n\nfunction normalizeTenantScopedConfig(\n tenantScoped: unknown,\n): Record<string, unknown> | undefined {\n if (!tenantScoped) return undefined;\n const options =\n typeof tenantScoped === 'object' && !Array.isArray(tenantScoped)\n ? (tenantScoped as Record<string, unknown>)\n : {};\n return {\n source: 'smrt',\n mode: options.mode ?? 'required',\n field: options.field ?? 'tenantId',\n autoFilter: options.autoFilter ?? true,\n autoPopulate: options.autoPopulate ?? true,\n allowSuperAdminBypass: options.allowSuperAdminBypass ?? false,\n };\n}\n\nasync function readPackageMetadata(\n projectPath: string,\n): Promise<PackageMetadata> {\n const packageJsonPath = join(projectPath, 'package.json');\n if (!(await pathExists(packageJsonPath))) return {};\n\n try {\n const json = JSON.parse(await readFile(packageJsonPath, 'utf-8')) as Record<\n string,\n unknown\n >;\n return {\n name: typeof json.name === 'string' ? json.name : undefined,\n version: typeof json.version === 'string' ? json.version : undefined,\n json,\n };\n } catch {\n return {};\n }\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isManifestLike(value: unknown): value is ManifestLike {\n return (\n !!value &&\n typeof value === 'object' &&\n !!(value as ManifestLike).objects &&\n typeof (value as ManifestLike).objects === 'object'\n );\n}\n\nfunction scanErrorToDiagnostic(error: ScanError): Diagnostic {\n return {\n severity: error.severity,\n message: error.message,\n filePath: error.filePath,\n line: error.line,\n column: error.column,\n };\n}\n\nfunction sanitizePath(projectPath: string, filePath: string): string {\n const absolute = isAbsolute(filePath)\n ? filePath\n : resolve(projectPath, filePath);\n const relativePath = relative(projectPath, absolute);\n if (!relativePath.startsWith('..')) {\n return relativePath || filePath;\n }\n return filePath;\n}\n\nfunction stringFromConfig(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction arrayFromConfig(value: unknown): string[] | undefined {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : undefined;\n}\n\nfunction compactObject<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\nfunction messageFromError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","/**\n * Ecosystem-aware downstream project review.\n * Advisory only: scans manifests and source files, then reports alignment risks.\n */\n\nimport { type Dirent, existsSync } from 'node:fs';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\n\ninterface ReviewSmrtProjectArgs {\n directory?: string;\n rootDir?: string;\n includeSourceEvidence?: boolean;\n maxFindings?: number;\n}\n\ntype Severity = 'high' | 'medium' | 'low';\n\ninterface Evidence {\n filePath: string;\n line?: number;\n detail: string;\n}\n\ninterface Finding {\n severity: Severity;\n area:\n | 'dependencies'\n | 'storage'\n | 'api-shell'\n | 'manifest'\n | 'auth-tenancy'\n | 'ui-shell';\n code: string;\n title: string;\n evidence: Evidence[];\n recommendation: string;\n suggestedIssueTitle: string;\n}\n\ninterface PackageInventory {\n name: string;\n path: string;\n private?: boolean;\n scripts: string[];\n declaredHappyVerticalDependencies: string[];\n importedHappyVerticalPackages: string[];\n missingHappyVerticalDependencies: string[];\n hasSvelteKit: boolean;\n hasSmrtSvelte: boolean;\n}\n\ninterface PackageContext {\n directory: string;\n relativePath: string;\n packageJsonPath: string;\n json: Record<string, unknown>;\n dependencies: Set<string>;\n scripts: Record<string, unknown>;\n imports: Map<string, Evidence[]>;\n sourceFiles: SourceFile[];\n}\n\ninterface SourceFile {\n path: string;\n packageDir: string;\n content: string;\n}\n\nconst SOURCE_EXTENSIONS = /\\.(tsx?|jsx?|svelte)$/;\nconst SKIP_DIRS = new Set([\n 'node_modules',\n 'dist',\n 'build',\n '.git',\n '.smrt',\n '.svelte-kit',\n 'coverage',\n]);\nconst DEPENDENCY_SECTIONS = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n];\nconst SMRT_PACKAGE_PREFIX = '@happyvertical/smrt-';\nconst HAPPYVERTICAL_PACKAGE_PREFIX = '@happyvertical/';\n\nexport async function reviewSmrtProject(\n args: ReviewSmrtProjectArgs,\n): Promise<string> {\n const projectPath = resolve(args.directory ?? args.rootDir ?? process.cwd());\n if (!(await pathExists(projectPath))) {\n return JSON.stringify(\n {\n projectPath,\n packageCount: 0,\n packages: [],\n findings: [],\n summary: { high: 0, medium: 0, low: 0 },\n diagnostics: [\n {\n severity: 'warning',\n message: `Project directory does not exist: ${projectPath}`,\n },\n ],\n },\n null,\n 2,\n );\n }\n\n const packageContexts = await buildPackageContexts(projectPath);\n const sourceFiles = await listSourceFiles(projectPath, packageContexts);\n await attachSourceFiles(sourceFiles, packageContexts, projectPath);\n\n const findings = limitFindings(\n [\n ...findMissingHappyVerticalDependencies(packageContexts),\n ...findCustomManifestGeneration(sourceFiles, projectPath),\n ...findDirectStorageBypasses(sourceFiles, packageContexts, projectPath),\n ...findCustomHttpShells(sourceFiles, packageContexts, projectPath),\n ...findLocalAuthTenancy(sourceFiles, packageContexts, projectPath),\n ...findUiShellDrift(packageContexts, projectPath),\n ...findMissingManifestArtifacts(\n sourceFiles,\n packageContexts,\n projectPath,\n ),\n ],\n args.maxFindings,\n );\n\n const packages = packageContexts\n .map(packageInventory)\n .sort((left, right) => left.path.localeCompare(right.path));\n const summary = summarizeFindings(findings);\n\n return JSON.stringify(\n {\n projectPath,\n packageCount: packages.length,\n packages,\n findings:\n args.includeSourceEvidence === false\n ? findings.map(({ evidence: _evidence, ...finding }) => finding)\n : findings,\n summary,\n referenceChecks: [\n 'Prefer SMRT scanner/runtime manifests over custom manifest builders.',\n 'Prefer SvelteKit plus @happyvertical/smrt-svelte for app shells.',\n 'Prefer @happyvertical/sql and @happyvertical/files/assets/content over direct durable node:fs storage.',\n 'Prefer smrt-users, smrt-tenancy, and profile/audit packages over local static auth seams.',\n ],\n suggestedFollowUpIssues: findings.map((finding) => ({\n title: finding.suggestedIssueTitle,\n severity: finding.severity,\n area: finding.area,\n })),\n },\n null,\n 2,\n );\n}\n\nasync function buildPackageContexts(\n projectPath: string,\n): Promise<PackageContext[]> {\n const packageJsonPaths = await listPackageJsonFiles(projectPath);\n const contexts = await Promise.all(\n packageJsonPaths.map(async (packageJsonPath) => {\n const json = JSON.parse(\n await readFile(packageJsonPath, 'utf-8'),\n ) as Record<string, unknown>;\n const directory = dirname(packageJsonPath);\n return {\n directory,\n relativePath: relative(projectPath, directory) || '.',\n packageJsonPath,\n json,\n dependencies: collectDependencies(json),\n scripts: isRecord(json.scripts)\n ? (json.scripts as Record<string, unknown>)\n : {},\n imports: new Map<string, Evidence[]>(),\n sourceFiles: [],\n };\n }),\n );\n\n if (contexts.length === 0) {\n contexts.push({\n directory: projectPath,\n relativePath: '.',\n packageJsonPath: join(projectPath, 'package.json'),\n json: {},\n dependencies: new Set(),\n scripts: {},\n imports: new Map(),\n sourceFiles: [],\n });\n }\n\n return contexts.sort(\n (left, right) => left.directory.length - right.directory.length,\n );\n}\n\nasync function listPackageJsonFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n await visit(projectPath, async (filePath, entryName) => {\n if (entryName === 'package.json') files.push(filePath);\n });\n return files;\n}\n\nasync function listSourceFiles(\n projectPath: string,\n packages: PackageContext[],\n): Promise<SourceFile[]> {\n const files: SourceFile[] = [];\n await visit(projectPath, async (filePath, entryName) => {\n if (!SOURCE_EXTENSIONS.test(entryName)) return;\n if (\n entryName.endsWith('.d.ts') ||\n entryName.endsWith('.test.ts') ||\n entryName.endsWith('.spec.ts')\n ) {\n return;\n }\n\n const packageDir = findOwningPackage(filePath, packages).directory;\n const content = await readFile(filePath, 'utf-8');\n files.push({ path: filePath, packageDir, content });\n });\n return files;\n}\n\nasync function attachSourceFiles(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Promise<void> {\n for (const sourceFile of sourceFiles) {\n const owner = packages.find(\n (pkg) => pkg.directory === sourceFile.packageDir,\n );\n if (!owner) continue;\n owner.sourceFiles.push(sourceFile);\n for (const importedPackage of extractImports(sourceFile.content)) {\n if (!importedPackage.startsWith(HAPPYVERTICAL_PACKAGE_PREFIX)) continue;\n const evidence = {\n filePath: relative(projectPath, sourceFile.path),\n line: lineNumber(sourceFile.content, importedPackage),\n detail: `Imports ${importedPackage}`,\n };\n const existing = owner.imports.get(importedPackage) ?? [];\n existing.push(evidence);\n owner.imports.set(importedPackage, existing);\n }\n }\n}\n\nfunction findMissingHappyVerticalDependencies(\n packages: PackageContext[],\n): Finding[] {\n return packages.flatMap((pkg) => {\n const ownName =\n typeof pkg.json.name === 'string' ? pkg.json.name : undefined;\n const missing = Array.from(pkg.imports.keys()).filter(\n (importedPackage) =>\n importedPackage !== ownName && !pkg.dependencies.has(importedPackage),\n );\n if (missing.length === 0) return [];\n\n const hasSmrtMissing = missing.some((name) =>\n name.startsWith(SMRT_PACKAGE_PREFIX),\n );\n return [\n {\n severity: hasSmrtMissing ? 'high' : 'medium',\n area: 'dependencies',\n code: 'missing-happyvertical-dependencies',\n title: `${packageLabel(pkg)} imports HappyVertical packages that package.json does not declare`,\n evidence: missing.flatMap((name) => pkg.imports.get(name) ?? []),\n recommendation:\n 'Declare every imported @happyvertical package in the owning package manifest so downstream installs and generated knowledge stay reproducible.',\n suggestedIssueTitle: `Declare missing HappyVertical dependencies in ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nfunction findCustomManifestGeneration(\n sourceFiles: SourceFile[],\n projectPath: string,\n): Finding[] {\n return sourceFiles\n .filter(\n (file) =>\n /manifest\\.json/.test(file.content) &&\n /objects\\s*:/.test(file.content) &&\n /\\b(writeFile|writeFileSync)\\b/.test(file.content) &&\n !/@happyvertical\\/smrt-scanner/.test(file.content),\n )\n .map((file) => ({\n severity: 'high',\n area: 'manifest',\n code: 'custom-object-manifest-generation',\n title: 'Custom SMRT object manifest generation detected',\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'manifest.json'),\n detail:\n 'Writes a manifest.json object inventory outside the SMRT scanner/runtime path.',\n },\n ],\n recommendation:\n 'Use the SMRT scanner/runtime manifest path so defaults, relationships, schemas, tenant fields, and cross-package references match framework behavior.',\n suggestedIssueTitle:\n 'Replace custom object manifest generation with SMRT scanner/runtime manifest generation',\n }));\n}\n\nfunction findDirectStorageBypasses(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return sourceFiles.flatMap((file) => {\n const owner = findOwningPackage(file.path, packages);\n const usesFs =\n /from\\s+['\"](?:node:fs|node:fs\\/promises|fs|fs\\/promises)['\"]|require\\(['\"](?:node:fs|node:fs\\/promises|fs|fs\\/promises)['\"]\\)/.test(\n file.content,\n );\n const writesDurableData =\n /\\b(writeFile|appendFile|mkdir|rm|rename)\\b/.test(file.content) &&\n /(\\.json|data|storage|persist|cache|db)/i.test(file.content);\n const usesDirectSql =\n /from\\s+['\"](?:better-sqlite3|sqlite3|pg|mysql2?|knex|drizzle-orm)['\"]/.test(\n file.content,\n );\n if ((!usesFs || !writesDurableData) && !usesDirectSql) return [];\n\n const hasApprovedStorage =\n owner.dependencies.has('@happyvertical/sql') ||\n owner.dependencies.has('@happyvertical/files') ||\n owner.dependencies.has('@happyvertical/smrt-assets') ||\n owner.dependencies.has('@happyvertical/smrt-content');\n\n if (hasApprovedStorage) return [];\n\n return [\n {\n severity: 'medium',\n area: 'storage',\n code: 'direct-storage-bypass',\n title: `${packageLabel(owner)} appears to bypass HappyVertical storage packages`,\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(\n file.content,\n usesDirectSql ? 'sqlite' : 'writeFile',\n ),\n detail: usesDirectSql\n ? 'Imports a direct SQL/storage library without @happyvertical/sql.'\n : 'Uses node:fs-style durable writes without @happyvertical/files/assets/content.',\n },\n ],\n recommendation:\n 'Route durable data through @happyvertical/sql, @happyvertical/files, SMRT assets, or SMRT content unless this is explicitly build-only tooling.',\n suggestedIssueTitle: `Review direct storage usage in ${packageLabel(owner)}`,\n },\n ];\n });\n}\n\nfunction findCustomHttpShells(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n const evidenceByPackage = new Map<PackageContext, Evidence[]>();\n\n for (const pkg of packages) {\n if (pkg.dependencies.has('@sveltejs/kit')) continue;\n\n const routerDependencies = ['express', 'fastify', 'hono', 'koa'].filter(\n (dep) => pkg.dependencies.has(dep),\n );\n if (routerDependencies.length === 0) continue;\n\n appendEvidence(evidenceByPackage, pkg, {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail: `Declares custom router package(s): ${routerDependencies.join(', ')}.`,\n });\n }\n\n for (const file of sourceFiles) {\n const owner = findOwningPackage(file.path, packages);\n if (owner.dependencies.has('@sveltejs/kit')) continue;\n\n const usesNodeHttp =\n /from\\s+['\"](?:node:http|http|node:https|https)['\"]|createServer\\s*\\(/.test(\n file.content,\n );\n if (!usesNodeHttp) continue;\n\n appendEvidence(evidenceByPackage, owner, {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'createServer'),\n detail:\n 'Custom HTTP routing found without the SvelteKit/SMRT app-shell dependency pattern.',\n });\n }\n\n return Array.from(evidenceByPackage.entries()).map(([owner, evidence]) => ({\n severity: 'medium',\n area: 'api-shell',\n code: 'custom-http-shell',\n title: `${packageLabel(owner)} uses a custom HTTP shell`,\n evidence,\n recommendation:\n 'Compare the app shell against the Anytown/Ergot SvelteKit + SMRT shell pattern before adding custom HTTP infrastructure.',\n suggestedIssueTitle: `Align ${packageLabel(owner)} app shell with SMRT/SvelteKit conventions`,\n }));\n}\n\nfunction appendEvidence(\n evidenceByPackage: Map<PackageContext, Evidence[]>,\n pkg: PackageContext,\n evidence: Evidence,\n): void {\n const existing = evidenceByPackage.get(pkg);\n if (existing) {\n existing.push(evidence);\n return;\n }\n\n evidenceByPackage.set(pkg, [evidence]);\n}\n\nfunction findLocalAuthTenancy(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return sourceFiles.flatMap((file) => {\n const owner = findOwningPackage(file.path, packages);\n const pathSignal = /(auth|tenant|audit|session|rbac|user)/i.test(file.path);\n const codeSignal =\n /\\b(tenantId|tenant|role|permission|session|auditLog|apiKey)\\b/.test(\n file.content,\n );\n if (!pathSignal || !codeSignal) return [];\n\n const hasApprovedPackages =\n owner.dependencies.has('@happyvertical/smrt-users') ||\n owner.dependencies.has('@happyvertical/smrt-tenancy') ||\n owner.dependencies.has('@happyvertical/smrt-profiles');\n if (hasApprovedPackages) return [];\n\n return [\n {\n severity: 'medium',\n area: 'auth-tenancy',\n code: 'local-auth-tenancy',\n title: `${packageLabel(owner)} contains local auth/tenancy/audit logic`,\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'tenant'),\n detail:\n 'Auth, tenancy, session, role, or audit terminology appears without smrt-users/smrt-tenancy/smrt-profiles dependencies.',\n },\n ],\n recommendation:\n 'Add explicit adapters to smrt-users, smrt-tenancy, and profile/audit models or document why this local implementation is intentionally isolated.',\n suggestedIssueTitle: `Review auth and tenancy adapters in ${packageLabel(owner)}`,\n },\n ];\n });\n}\n\nfunction findUiShellDrift(\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return packages.flatMap((pkg) => {\n const hasUiSource = pkg.sourceFiles.some((file) =>\n file.path.endsWith('.svelte'),\n );\n const likelyUiPackage =\n hasUiSource ||\n /(?:web|ui|app|site|frontend)/i.test(packageLabel(pkg)) ||\n pkg.dependencies.has('svelte') ||\n pkg.dependencies.has('vite');\n if (!likelyUiPackage) return [];\n if (pkg.dependencies.has('@happyvertical/smrt-svelte')) return [];\n\n return [\n {\n severity: 'low',\n area: 'ui-shell',\n code: 'missing-smrt-svelte-shell',\n title: `${packageLabel(pkg)} looks like UI work without @happyvertical/smrt-svelte`,\n evidence: [\n {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail:\n 'UI-facing package does not declare @happyvertical/smrt-svelte.',\n },\n ],\n recommendation:\n 'Use @happyvertical/smrt-svelte and the SvelteKit shell pattern for downstream app UI unless this package is intentionally framework-agnostic.',\n suggestedIssueTitle: `Check SMRT Svelte shell alignment for ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nfunction findMissingManifestArtifacts(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return packages.flatMap((pkg) => {\n const hasSmrtSource = pkg.sourceFiles.some((file) =>\n /@smrt\\s*\\(/.test(file.content),\n );\n if (!hasSmrtSource) return [];\n const hasManifest =\n sourceFiles.some(\n (file) =>\n file.packageDir === pkg.directory &&\n /@happyvertical\\/smrt-scanner/.test(file.content),\n ) ||\n pathExistsSyncHint(join(pkg.directory, '.smrt', 'manifest.json')) ||\n pathExistsSyncHint(join(pkg.directory, 'dist', 'manifest.json'));\n if (hasManifest) return [];\n\n return [\n {\n severity: 'low',\n area: 'manifest',\n code: 'missing-generated-manifest-artifact',\n title: `${packageLabel(pkg)} has @smrt objects but no generated manifest artifact was found`,\n evidence: [\n {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail:\n 'No .smrt/manifest.json or dist/manifest.json was visible during review.',\n },\n ],\n recommendation:\n 'Run the package build/test manifest generation path and verify it uses the SMRT scanner/runtime manifest pipeline.',\n suggestedIssueTitle: `Verify SMRT manifest generation for ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nasync function visit(\n dir: string,\n onFile: (filePath: string, entryName: string) => Promise<void> | void,\n): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n await visit(fullPath, onFile);\n continue;\n }\n if (entry.isFile()) await onFile(fullPath, entry.name);\n }\n}\n\nfunction collectDependencies(\n packageJson: Record<string, unknown>,\n): Set<string> {\n const dependencies = new Set<string>();\n for (const sectionName of DEPENDENCY_SECTIONS) {\n const section = packageJson[sectionName];\n if (!isRecord(section)) continue;\n for (const dependencyName of Object.keys(section)) {\n dependencies.add(dependencyName);\n }\n }\n return dependencies;\n}\n\nfunction extractImports(content: string): string[] {\n const imports = new Set<string>();\n const patterns = [\n /(?:import|export)\\s+(?:type\\s+)?(?:[^'\"]+\\s+from\\s+)?['\"]([^'\"]+)['\"]/g,\n /\\bimport\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n /\\brequire\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ];\n for (const pattern of patterns) {\n for (const match of content.matchAll(pattern)) {\n const imported = normalizePackageImport(match[1]);\n if (imported) imports.add(imported);\n }\n }\n return Array.from(imports);\n}\n\nfunction normalizePackageImport(value: string | undefined): string | undefined {\n if (!value || value.startsWith('.') || value.startsWith('/'))\n return undefined;\n if (value.startsWith('@')) {\n const [scope, name] = value.split('/');\n return scope && name ? `${scope}/${name}` : value;\n }\n return value.split('/')[0];\n}\n\nfunction findOwningPackage(\n filePath: string,\n packages: PackageContext[],\n): PackageContext {\n const normalized = resolve(filePath);\n const matches = packages\n .filter(\n (pkg) =>\n normalized === pkg.directory ||\n normalized.startsWith(`${pkg.directory}${sep}`),\n )\n .sort((left, right) => right.directory.length - left.directory.length);\n return matches[0] ?? packages[0];\n}\n\nfunction packageInventory(pkg: PackageContext): PackageInventory {\n const declaredHappyVerticalDependencies = Array.from(pkg.dependencies)\n .filter((dependency) => dependency.startsWith(HAPPYVERTICAL_PACKAGE_PREFIX))\n .sort();\n const importedHappyVerticalPackages = Array.from(pkg.imports.keys()).sort();\n const ownName = typeof pkg.json.name === 'string' ? pkg.json.name : undefined;\n return {\n name: packageLabel(pkg),\n path: pkg.relativePath,\n private:\n typeof pkg.json.private === 'boolean' ? pkg.json.private : undefined,\n scripts: Object.keys(pkg.scripts).sort(),\n declaredHappyVerticalDependencies,\n importedHappyVerticalPackages,\n missingHappyVerticalDependencies: importedHappyVerticalPackages.filter(\n (name) => name !== ownName && !pkg.dependencies.has(name),\n ),\n hasSvelteKit: pkg.dependencies.has('@sveltejs/kit'),\n hasSmrtSvelte: pkg.dependencies.has('@happyvertical/smrt-svelte'),\n };\n}\n\nfunction summarizeFindings(findings: Finding[]): Record<Severity, number> {\n return findings.reduce(\n (summary, finding) => {\n summary[finding.severity]++;\n return summary;\n },\n { high: 0, medium: 0, low: 0 },\n );\n}\n\nfunction limitFindings(\n findings: Finding[],\n maxFindings: number | undefined,\n): Finding[] {\n const sorted = findings.sort(\n (left, right) =>\n severityRank(left.severity) - severityRank(right.severity) ||\n left.area.localeCompare(right.area) ||\n left.title.localeCompare(right.title),\n );\n return maxFindings && maxFindings > 0 ? sorted.slice(0, maxFindings) : sorted;\n}\n\nfunction severityRank(severity: Severity): number {\n return severity === 'high' ? 0 : severity === 'medium' ? 1 : 2;\n}\n\nfunction packageLabel(pkg: PackageContext): string {\n return typeof pkg.json.name === 'string' ? pkg.json.name : pkg.relativePath;\n}\n\nfunction lineNumber(content: string, needle: string): number | undefined {\n const index = content.indexOf(needle);\n if (index < 0) return undefined;\n return content.slice(0, index).split('\\n').length;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction pathExistsSyncHint(path: string): boolean {\n return existsSync(path);\n}\n","/**\n * SMRT Development MCP Server\n * Provides code generation, project introspection, knowledge context,\n * review/architecture prompt bundles, and portable agent skills.\n */\n\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ErrorCode,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n McpError,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { getAgentSkill, listAgentSkills } from './agent-skills.js';\nimport {\n buildArchitectureContext,\n buildKnowledgeIndex,\n buildReviewContext,\n checkKnowledgeFreshness,\n checkKnowledgeFreshnessFromIndex,\n smrtArchitecture,\n smrtReview,\n} from './knowledge/index.js';\nimport {\n generateSmrtClass,\n introspectProject,\n reviewSmrtProject,\n} from './tools/index.js';\n\nconst SERVER_NAME = 'smrt-dev-mcp';\nexport const SERVER_VERSION = readPackageVersion();\nconst DEBUG = process.env.DEBUG === 'true';\nconst REVIEW_SKILL_NAME = 'smrt-code-review';\nconst REVIEW_SKILL_URI = `smrt-dev-mcp://agent-skills/${REVIEW_SKILL_NAME}`;\nconst DOMAIN_CODE_REVIEW_PROMPT = 'domain-code-review';\nconst DOMAIN_ARCHITECTURE_PROMPT = 'domain-architecture';\nconst KNOWLEDGE_PROJECT_URI = 'smrt://knowledge/project';\nconst KNOWLEDGE_PACKAGE_PREFIX = 'smrt://knowledge/package/';\n\ntype KnowledgeIndexResult = Awaited<ReturnType<typeof buildKnowledgeIndex>>;\ntype KnowledgePackageResult = KnowledgeIndexResult['packages'][number];\ntype PromptArguments = Record<string, string> | undefined;\n\n// Tool definitions\nexport const TOOLS = [\n // Code Generation Tools\n {\n name: 'generate-smrt-class',\n description: 'Generate a complete SMRT class with @smrt() decorator',\n inputSchema: {\n type: 'object',\n properties: {\n className: {\n type: 'string',\n description: 'Name of the class (PascalCase)',\n },\n properties: {\n type: 'array',\n description: 'Array of property definitions',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n type: {\n type: 'string',\n enum: [\n 'text',\n 'integer',\n 'decimal',\n 'boolean',\n 'datetime',\n 'json',\n ],\n },\n required: { type: 'boolean' },\n nullable: { type: 'boolean' },\n description: { type: 'string' },\n defaultValue: {\n oneOf: [\n { type: 'string' },\n { type: 'number' },\n { type: 'boolean' },\n { type: 'object' },\n { type: 'null' },\n ],\n },\n },\n required: ['name', 'type'],\n },\n },\n baseClass: {\n type: 'string',\n enum: ['SmrtObject', 'SmrtCollection'],\n default: 'SmrtObject',\n },\n template: {\n type: 'string',\n enum: [\n 'basic',\n 'global-catalog',\n 'optional-catalog',\n 'tenant-project-object',\n 'tenant-event-log-object',\n 'cross-package-reference',\n ],\n default: 'basic',\n },\n tableName: { type: 'string' },\n conflictColumns: {\n type: 'array',\n items: { type: 'string' },\n },\n tenantScoped: {\n oneOf: [\n { type: 'boolean' },\n {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['required', 'optional'] },\n field: { type: 'string' },\n autoFilter: { type: 'boolean' },\n autoPopulate: { type: 'boolean' },\n allowSuperAdminBypass: { type: 'boolean' },\n },\n },\n ],\n },\n includeTenantIdField: { type: 'boolean' },\n relationships: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n type: {\n type: 'string',\n enum: [\n 'foreignKey',\n 'crossPackageRef',\n 'oneToMany',\n 'manyToMany',\n ],\n },\n related: { type: 'string' },\n required: { type: 'boolean' },\n nullable: { type: 'boolean' },\n description: { type: 'string' },\n validate: { type: 'boolean' },\n foreignKey: { type: 'string' },\n through: { type: 'string' },\n sourceKey: { type: 'string' },\n targetKey: { type: 'string' },\n },\n required: ['name', 'type', 'related'],\n },\n },\n includeCompanionSnippets: { type: 'boolean', default: false },\n includeApiConfig: { type: 'boolean', default: true },\n includeMcpConfig: { type: 'boolean', default: true },\n includeCliConfig: { type: 'boolean', default: true },\n },\n required: ['className', 'properties'],\n },\n },\n // Project Introspection Tools\n {\n name: 'introspect-project',\n description: 'Scan current directory for SMRT objects',\n inputSchema: {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Project directory (default: cwd)',\n },\n manifestPath: {\n type: 'string',\n description:\n 'Optional manifest path. Defaults to .smrt/manifest.json, dist/manifest.json, then source scanning.',\n },\n includeFields: {\n type: 'boolean',\n description: 'Include field details',\n },\n includeRelationships: {\n type: 'boolean',\n description: 'Analyze relationships',\n },\n includeMethods: {\n type: 'boolean',\n description: 'Include public method details',\n },\n },\n },\n },\n {\n name: 'review-smrt-project',\n description:\n 'Advisory ecosystem alignment review for downstream SMRT projects',\n inputSchema: {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Project directory (default: cwd)',\n },\n rootDir: {\n type: 'string',\n description: 'Compatibility alias for directory',\n },\n includeSourceEvidence: {\n type: 'boolean',\n description: 'Include file and line evidence in findings',\n default: true,\n },\n maxFindings: {\n type: 'number',\n description: 'Optional maximum number of findings to return',\n },\n },\n },\n },\n {\n name: 'reflect-knowledge',\n description:\n 'Report deterministic SMRT + HappyVertical SDK knowledge coverage and freshness',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: {\n type: 'string',\n description: 'Project root directory (default: cwd)',\n },\n },\n },\n },\n {\n name: 'reflect-domain-knowledge',\n description:\n 'Report domain-scoped SMRT knowledge artifacts, SDK packages, and freshness',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'check-knowledge-freshness',\n description: 'Run deterministic freshness checks for SMRT agent knowledge',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changed: {\n type: 'boolean',\n description: 'Limit stale-pattern checks to changed files',\n },\n strict: {\n type: 'boolean',\n description: 'Treat stale-pattern findings as errors',\n },\n },\n },\n },\n {\n name: 'check-domain-knowledge',\n description:\n 'Run deterministic freshness checks for domain knowledge artifacts',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changed: { type: 'boolean' },\n strict: { type: 'boolean' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'build-review-context',\n description:\n 'Build model-ready SMRT review context from changed files and optional focus text',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n },\n },\n },\n {\n name: 'build-domain-review-context',\n description:\n 'Build domain-scoped model-ready SMRT review context and prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'smrt-review',\n description:\n 'Return deterministic review findings and/or a reusable model prompt bundle. For a formal downstream review, first call get-agent-skill with { \"name\": \"smrt-code-review\" } or load the smrt-code-review MCP prompt/resource.',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n mode: {\n type: 'string',\n enum: ['findings', 'prompt-bundle', 'both'],\n default: 'both',\n },\n },\n },\n },\n {\n name: 'build-architecture-context',\n description:\n 'Build model-ready SMRT architecture context from an idea or documentation',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n },\n },\n },\n {\n name: 'build-domain-architecture-context',\n description:\n 'Build domain-scoped model-ready SMRT architecture context and prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'smrt-architecture',\n description:\n 'Suggest SMRT and HappyVertical SDK packages and return an architecture prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n },\n },\n },\n {\n name: 'list-agent-skills',\n description:\n 'List bundled harness-agnostic agent skills shipped with smrt-dev-mcp',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'get-agent-skill',\n description:\n 'Return a bundled harness-agnostic agent skill as Markdown plus optional references',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n enum: [REVIEW_SKILL_NAME],\n description: 'Bundled agent skill name',\n },\n includeReferences: {\n type: 'boolean',\n default: true,\n description: 'Include referenced files with the skill bundle',\n },\n },\n required: ['name'],\n },\n },\n];\n\nasync function main() {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Starting server v${SERVER_VERSION}`);\n }\n\n const server = new Server(\n {\n name: SERVER_NAME,\n version: SERVER_VERSION,\n },\n {\n capabilities: {\n prompts: {},\n resources: {},\n tools: {},\n },\n },\n );\n\n // List tools handler\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] ListTools request`);\n }\n return { tools: TOOLS };\n });\n\n server.setRequestHandler(ListPromptsRequestSchema, async () => {\n return {\n prompts: [\n {\n name: REVIEW_SKILL_NAME,\n title: 'SMRT Code Review',\n description:\n 'Harness-agnostic downstream SMRT review procedure that uses smrt-dev-mcp deterministic context and prompt bundles.',\n },\n {\n name: DOMAIN_CODE_REVIEW_PROMPT,\n title: 'Domain Code Review',\n description:\n 'Model-ready domain-scoped SMRT code review prompt bundle.',\n arguments: [\n {\n name: 'rootDir',\n description: 'Project root directory. Defaults to server cwd.',\n required: false,\n },\n {\n name: 'changedFiles',\n description:\n 'Changed file paths as newline-separated, comma-separated, or JSON array text.',\n required: false,\n },\n {\n name: 'focus',\n description: 'Review focus text.',\n required: false,\n },\n {\n name: 'documentation',\n description: 'Additional documentation or notes.',\n required: false,\n },\n {\n name: 'scope',\n description: 'Knowledge scope: project, local, package, or sdk.',\n required: false,\n },\n {\n name: 'package',\n description: 'Package name or short package selector.',\n required: false,\n },\n ],\n },\n {\n name: DOMAIN_ARCHITECTURE_PROMPT,\n title: 'Domain Architecture',\n description:\n 'Model-ready domain-scoped SMRT architecture planning prompt bundle.',\n arguments: [\n {\n name: 'rootDir',\n description: 'Project root directory. Defaults to server cwd.',\n required: false,\n },\n {\n name: 'idea',\n description: 'Architecture idea or product concept.',\n required: false,\n },\n {\n name: 'documentation',\n description: 'Additional documentation or notes.',\n required: false,\n },\n {\n name: 'focus',\n description: 'Planning focus text.',\n required: false,\n },\n {\n name: 'scope',\n description: 'Knowledge scope: project, local, package, or sdk.',\n required: false,\n },\n {\n name: 'package',\n description: 'Package name or short package selector.',\n required: false,\n },\n ],\n },\n ],\n };\n });\n\n server.setRequestHandler(GetPromptRequestSchema, async (request) => {\n const { name } = request.params;\n if (name === REVIEW_SKILL_NAME) {\n return {\n description:\n 'Use this procedure when reviewing downstream SMRT projects.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: renderAgentSkillMarkdown(REVIEW_SKILL_NAME),\n },\n },\n ],\n };\n }\n\n if (name === DOMAIN_CODE_REVIEW_PROMPT) {\n const context = await buildReviewContext(\n reviewPromptArguments(request.params.arguments),\n );\n return {\n description: 'Review downstream SMRT code with domain knowledge.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: context.promptBundle.contextMarkdown,\n },\n },\n ],\n };\n }\n\n if (name === DOMAIN_ARCHITECTURE_PROMPT) {\n const context = await buildArchitectureContext(\n architecturePromptArguments(request.params.arguments),\n );\n return {\n description: 'Plan a downstream SMRT project with domain knowledge.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: context.promptBundle.contextMarkdown,\n },\n },\n ],\n };\n }\n\n throw new McpError(ErrorCode.InvalidParams, `Unknown prompt: ${name}`);\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n const index = await buildKnowledgeIndex();\n return {\n resources: [\n {\n uri: REVIEW_SKILL_URI,\n name: REVIEW_SKILL_NAME,\n title: 'SMRT Code Review Skill',\n description:\n 'Bundled Markdown skill for downstream SMRT code reviews.',\n mimeType: 'text/markdown',\n },\n {\n uri: KNOWLEDGE_PROJECT_URI,\n name: 'smrt-domain-knowledge-project',\n title: 'SMRT Domain Knowledge Project Index',\n description:\n 'Composed SMRT, downstream domain, and HappyVertical SDK knowledge index.',\n mimeType: 'application/json',\n },\n ...index.packages.map((pkg) => ({\n uri: `${KNOWLEDGE_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n name: `smrt-domain-knowledge-${pkg.name}`,\n title: `SMRT Domain Knowledge: ${pkg.name}`,\n description:\n 'Package-scoped SMRT domain knowledge, generated surfaces, and authored context.',\n mimeType: 'application/json',\n })),\n ],\n };\n });\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n if (uri === REVIEW_SKILL_URI) {\n return {\n contents: [\n {\n uri,\n mimeType: 'text/markdown',\n text: renderAgentSkillMarkdown(REVIEW_SKILL_NAME),\n },\n ],\n };\n }\n\n if (uri === KNOWLEDGE_PROJECT_URI) {\n const index = await buildKnowledgeIndex();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(sanitizeKnowledgeIndex(index), null, 2),\n },\n ],\n };\n }\n\n if (uri.startsWith(KNOWLEDGE_PACKAGE_PREFIX)) {\n const packageName = decodeURIComponent(\n uri.slice(KNOWLEDGE_PACKAGE_PREFIX.length),\n );\n const index = await buildKnowledgeIndex();\n const pkg = index.packages.find((item) => item.name === packageName);\n if (!pkg) {\n throw new McpError(\n ErrorCode.InvalidParams,\n `Unknown knowledge package: ${packageName}`,\n );\n }\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(sanitizeKnowledgePackage(pkg), null, 2),\n },\n ],\n };\n }\n\n throw new McpError(ErrorCode.InvalidParams, `Unknown resource: ${uri}`);\n });\n\n // Call tool handler\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] CallTool: ${name}`);\n console.error(\n `[${SERVER_NAME}] Arguments:`,\n JSON.stringify(args, null, 2),\n );\n }\n\n try {\n let result: string;\n\n switch (name) {\n case 'generate-smrt-class':\n result = await generateSmrtClass(args as any);\n break;\n\n case 'introspect-project':\n result = await introspectProject(args as any);\n break;\n\n case 'review-smrt-project':\n result = await reviewSmrtProject(args as any);\n break;\n\n case 'reflect-knowledge': {\n const index = await buildKnowledgeIndex(args as any);\n const freshness = await checkKnowledgeFreshnessFromIndex(\n index,\n args as any,\n );\n result = JSON.stringify(\n {\n rootDir: index.rootDir,\n packageCount: index.packages.length,\n smrtPackageCount: index.smrtPackages.length,\n sdkPackageCount: index.sdkPackages.length,\n relationshipsV2: index.relationshipsV2,\n freshness,\n },\n null,\n 2,\n );\n break;\n }\n\n case 'reflect-domain-knowledge': {\n const index = await buildKnowledgeIndex(args as any);\n const freshness = await checkKnowledgeFreshnessFromIndex(\n index,\n args as any,\n );\n result = JSON.stringify(\n {\n rootDir: index.rootDir,\n packageCount: index.packages.length,\n smrtPackageCount: index.smrtPackages.length,\n sdkPackageCount: index.sdkPackages.length,\n domainKnowledgePackageCount: index.packages.filter(\n (pkg) => pkg.hasDomainKnowledge,\n ).length,\n missingDomainKnowledgePackages: index.packages\n .filter(\n (pkg) =>\n pkg.exportKeys.includes('./smrt-knowledge.json') &&\n !pkg.hasDomainKnowledge,\n )\n .map((pkg) => pkg.name),\n relationshipsV2: index.relationshipsV2,\n freshness,\n },\n null,\n 2,\n );\n break;\n }\n\n case 'check-knowledge-freshness':\n result = JSON.stringify(\n await checkKnowledgeFreshness(args as any),\n null,\n 2,\n );\n break;\n\n case 'check-domain-knowledge':\n result = JSON.stringify(\n await checkKnowledgeFreshness(args as any),\n null,\n 2,\n );\n break;\n\n case 'build-review-context':\n result = JSON.stringify(\n await buildReviewContext(args as any),\n null,\n 2,\n );\n break;\n\n case 'build-domain-review-context':\n result = JSON.stringify(\n await buildReviewContext(args as any),\n null,\n 2,\n );\n break;\n\n case 'smrt-review':\n result = JSON.stringify(await smrtReview(args as any), null, 2);\n break;\n\n case 'build-architecture-context':\n result = JSON.stringify(\n await buildArchitectureContext(args as any),\n null,\n 2,\n );\n break;\n\n case 'build-domain-architecture-context':\n result = JSON.stringify(\n await buildArchitectureContext(args as any),\n null,\n 2,\n );\n break;\n\n case 'smrt-architecture':\n result = JSON.stringify(await smrtArchitecture(args as any), null, 2);\n break;\n\n case 'list-agent-skills':\n result = JSON.stringify({ skills: listAgentSkills() }, null, 2);\n break;\n\n case 'get-agent-skill':\n result = JSON.stringify(await getAgentSkill(args as any), null, 2);\n break;\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: result,\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error(`[${SERVER_NAME}] Error:`, error);\n\n return {\n content: [\n {\n type: 'text',\n text: `Error executing tool ${name}: ${errorMessage}`,\n },\n ],\n isError: true,\n };\n }\n });\n\n // Setup stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Server connected via stdio`);\n }\n\n // Graceful shutdown\n process.on('SIGINT', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Shutting down...`);\n }\n await server.close();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Shutting down...`);\n }\n await server.close();\n process.exit(0);\n });\n}\n\nfunction isEntrypoint(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(entry);\n } catch {\n return import.meta.url === pathToFileURL(entry).href;\n }\n}\n\nfunction readPackageVersion(): string {\n try {\n const packageRoot = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(packageRoot, '..', 'package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n version?: unknown;\n };\n return typeof packageJson.version === 'string'\n ? packageJson.version\n : '0.0.0';\n } catch {\n return '0.0.0';\n }\n}\n\nfunction renderAgentSkillMarkdown(name: string): string {\n const skill = getAgentSkill({ name, includeReferences: true });\n const references = skill.referenceFiles.map(\n (file) => `## Reference: ${file.path}\\n\\n${file.content.trim()}`,\n );\n return [skill.skillMarkdown.trim(), ...references].join('\\n\\n');\n}\n\nfunction reviewPromptArguments(args: PromptArguments): Record<string, unknown> {\n return compactRecord({\n rootDir: args?.rootDir,\n changedFiles: parseStringList(args?.changedFiles),\n focus: args?.focus,\n documentation: args?.documentation,\n scope: args?.scope,\n package: args?.package,\n });\n}\n\nfunction architecturePromptArguments(\n args: PromptArguments,\n): Record<string, unknown> {\n return compactRecord({\n rootDir: args?.rootDir,\n idea: args?.idea,\n documentation: args?.documentation,\n focus: args?.focus,\n scope: args?.scope,\n package: args?.package,\n });\n}\n\nfunction parseStringList(value: string | undefined): string[] | undefined {\n if (!value?.trim()) return undefined;\n\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed.filter((item): item is string => typeof item === 'string');\n }\n } catch {\n // Fall through to delimiter parsing.\n }\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\nfunction compactRecord(\n value: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n );\n}\n\nfunction sanitizeKnowledgeIndex(index: KnowledgeIndexResult) {\n const packages = index.packages.map((pkg) => sanitizeKnowledgePackage(pkg));\n return {\n ...index,\n rootDir: '.',\n packages,\n smrtPackages: packages.filter((pkg) => pkg.kind === 'smrt'),\n sdkPackages: packages.filter((pkg) => pkg.kind === 'sdk'),\n };\n}\n\nfunction sanitizeKnowledgePackage(pkg: KnowledgePackageResult) {\n const { directory: _directory, objects, ...rest } = pkg;\n return {\n ...rest,\n objects: objects.map((object) => ({\n ...object,\n filePath: sanitizePath(object.filePath),\n })),\n };\n}\n\nfunction sanitizePath(path: string | undefined): string | undefined {\n if (!path) return path;\n if (path.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(path)) {\n return '<absolute-path>';\n }\n return path;\n}\n\nif (isEntrypoint()) {\n main().catch((error) => {\n console.error(`[${SERVER_NAME}] Fatal error:`, error);\n process.exit(1);\n });\n}\n"],"names":["compactObject","pathExists","sanitizePath","listSourceFiles"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/agent-skills.ts","../src/tools/generate-smrt-class.ts","../src/tools/introspect-project.ts","../src/tools/review-smrt-project.ts","../src/index.ts"],"sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface AgentSkillSummary {\n name: string;\n description: string;\n path: string;\n references: string[];\n}\n\nexport interface AgentSkillBundle extends AgentSkillSummary {\n skillMarkdown: string;\n referenceFiles: Array<{\n path: string;\n content: string;\n }>;\n}\n\ninterface AgentSkillDefinition extends AgentSkillSummary {\n skillFile: string;\n}\n\nconst AGENT_SKILLS: AgentSkillDefinition[] = [\n {\n name: 'smrt-code-review',\n description:\n 'Harness-agnostic downstream SMRT code review workflow using smrt-dev-mcp deterministic context and prompt bundles.',\n path: 'agent-skills/smrt-code-review/SKILL.md',\n skillFile: 'agent-skills/smrt-code-review/SKILL.md',\n references: ['agent-skills/smrt-code-review/references/review-output.md'],\n },\n];\n\nexport function listAgentSkills(): AgentSkillSummary[] {\n return AGENT_SKILLS.map(({ skillFile: _skillFile, ...skill }) => skill);\n}\n\nexport function getAgentSkill(options: {\n name: string;\n includeReferences?: boolean;\n}): AgentSkillBundle {\n const skill = AGENT_SKILLS.find((item) => item.name === options.name);\n if (!skill) {\n throw new Error(`Unknown agent skill: ${options.name}`);\n }\n\n return {\n name: skill.name,\n description: skill.description,\n path: skill.path,\n references: skill.references,\n skillMarkdown: readPackageFile(skill.skillFile),\n referenceFiles:\n options.includeReferences === false\n ? []\n : skill.references.map((path) => ({\n path,\n content: readPackageFile(path),\n })),\n };\n}\n\nfunction readPackageFile(relativePath: string): string {\n const packageRoot = resolvePackageRoot();\n return readFileSync(join(packageRoot, relativePath), 'utf8');\n}\n\nfunction resolvePackageRoot(): string {\n // Works in both source tests (`src/agent-skills.ts`) and built packages\n // (`dist/agent-skills.js`); guard it so packaging layout drift fails clearly.\n const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));\n if (!existsSync(join(packageRoot, 'package.json'))) {\n throw new Error(\n `Unable to resolve smrt-dev-mcp package root from ${import.meta.url}`,\n );\n }\n return packageRoot;\n}\n","/**\n * Generate SMRT Class Tool\n * Creates a package-ready SMRT class using current object-package patterns.\n */\n\ntype PropertyType =\n | 'text'\n | 'integer'\n | 'decimal'\n | 'boolean'\n | 'datetime'\n | 'json';\ntype BaseClass = 'SmrtObject' | 'SmrtCollection';\ntype TemplateVariant =\n | 'basic'\n | 'global-catalog'\n | 'optional-catalog'\n | 'tenant-project-object'\n | 'tenant-event-log-object'\n | 'cross-package-reference';\ntype RelationshipType =\n | 'foreignKey'\n | 'crossPackageRef'\n | 'oneToMany'\n | 'manyToMany';\n\ninterface PropertyDefinition {\n name: string;\n type: PropertyType;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n defaultValue?: unknown;\n}\n\ninterface RelationshipDefinition {\n name: string;\n type: RelationshipType;\n related: string;\n required?: boolean;\n nullable?: boolean;\n description?: string;\n validate?: boolean;\n foreignKey?: string;\n through?: string;\n sourceKey?: string;\n targetKey?: string;\n}\n\ninterface TenantScopedDefinition {\n mode?: 'required' | 'optional';\n field?: string;\n autoFilter?: boolean;\n autoPopulate?: boolean;\n allowSuperAdminBypass?: boolean;\n}\n\ninterface GenerateSmrtClassArgs {\n className: string;\n properties: PropertyDefinition[];\n baseClass?: BaseClass;\n template?: TemplateVariant;\n tableName?: string;\n conflictColumns?: string[];\n tenantScoped?: boolean | TenantScopedDefinition;\n includeTenantIdField?: boolean;\n relationships?: RelationshipDefinition[];\n includeApiConfig?: boolean;\n includeMcpConfig?: boolean;\n includeCliConfig?: boolean;\n includeCompanionSnippets?: boolean;\n}\n\ninterface NormalizedGenerateSmrtClassArgs {\n className: string;\n properties: PropertyDefinition[];\n baseClass: BaseClass;\n template: TemplateVariant;\n tableName?: string;\n conflictColumns: string[];\n tenantScoped?: TenantScopedDefinition;\n includeTenantIdField: boolean;\n relationships: RelationshipDefinition[];\n includeApiConfig: boolean;\n includeMcpConfig: boolean;\n includeCliConfig: boolean;\n includeCompanionSnippets: boolean;\n}\n\nconst TYPE_MAPPING: Record<\n PropertyType,\n { tsType: string; defaultValue: string }\n> = {\n text: { tsType: 'string', defaultValue: \"''\" },\n integer: { tsType: 'number', defaultValue: '0' },\n decimal: { tsType: 'number', defaultValue: '0.0' },\n boolean: { tsType: 'boolean', defaultValue: 'false' },\n datetime: { tsType: 'Date', defaultValue: 'new Date()' },\n json: { tsType: 'any', defaultValue: '{}' },\n};\n\nexport async function generateSmrtClass(\n args: GenerateSmrtClassArgs,\n): Promise<string> {\n const normalized = normalizeArgs(args);\n const {\n className,\n properties,\n relationships,\n baseClass,\n tableName,\n conflictColumns,\n tenantScoped,\n includeTenantIdField,\n includeApiConfig,\n includeMcpConfig,\n includeCliConfig,\n includeCompanionSnippets,\n } = normalized;\n\n const coreImports = new Set<string>([baseClass, 'smrt']);\n if (needsFieldDecorator(properties)) coreImports.add('field');\n for (const relationship of relationships) {\n coreImports.add(relationship.type);\n }\n\n const imports = [\n `import { ${Array.from(coreImports).join(', ')} } from '@happyvertical/smrt-core';`,\n ];\n\n if (tenantScoped) {\n const tenancyImports = ['TenantScoped'];\n if (includeTenantIdField) tenancyImports.push('tenantId');\n imports.push(\n `import { ${tenancyImports.join(', ')} } from '@happyvertical/smrt-tenancy';`,\n );\n }\n\n const decoratorLines = [\n ...(tenantScoped\n ? [`@TenantScoped(${renderObjectLiteral({ ...tenantScoped })})`]\n : []),\n renderSmrtDecorator({\n includeApiConfig,\n includeMcpConfig,\n includeCliConfig,\n tableName,\n conflictColumns,\n }),\n ];\n\n const classMembers = [\n ...(includeTenantIdField && tenantScoped\n ? [renderTenantIdField(tenantScoped)]\n : []),\n ...properties.map(renderProperty),\n ...relationships.map(renderRelationship),\n ].filter(Boolean);\n\n const companionSnippets = includeCompanionSnippets\n ? `\\n${renderCompanionSnippets(className, Boolean(tenantScoped))}`\n : '';\n\n return `${imports.join('\\n')}\n\n${decoratorLines.join('\\n')}\nexport class ${className} extends ${baseClass} {\n${classMembers.join('\\n\\n')}\n\n constructor(options: any = {}) {\n super(options);\n Object.assign(this, options);\n }\n}\n${companionSnippets}`;\n}\n\nfunction normalizeArgs(\n args: GenerateSmrtClassArgs,\n): NormalizedGenerateSmrtClassArgs {\n const template = args.template ?? 'basic';\n const templateDefaults = defaultsForTemplate(template);\n const tenantScoped =\n args.tenantScoped === true\n ? (templateDefaults.tenantScoped ?? { mode: 'required' as const })\n : args.tenantScoped === false\n ? undefined\n : (args.tenantScoped ?? templateDefaults.tenantScoped);\n\n return {\n className: args.className,\n properties: args.properties,\n baseClass: args.baseClass ?? 'SmrtObject',\n template,\n tableName: args.tableName ?? templateDefaults.tableName,\n conflictColumns:\n args.conflictColumns ?? templateDefaults.conflictColumns ?? [],\n tenantScoped: normalizeTenantScoped(tenantScoped),\n includeTenantIdField:\n args.includeTenantIdField ??\n templateDefaults.includeTenantIdField ??\n Boolean(tenantScoped),\n relationships: args.relationships ?? [],\n includeApiConfig: args.includeApiConfig ?? true,\n includeMcpConfig: args.includeMcpConfig ?? true,\n includeCliConfig: args.includeCliConfig ?? true,\n includeCompanionSnippets: args.includeCompanionSnippets ?? false,\n };\n}\n\nfunction defaultsForTemplate(template: TemplateVariant): {\n tableName?: string;\n conflictColumns?: string[];\n tenantScoped?: TenantScopedDefinition;\n includeTenantIdField?: boolean;\n} {\n switch (template) {\n case 'optional-catalog':\n return {\n tenantScoped: { mode: 'optional' },\n includeTenantIdField: true,\n conflictColumns: ['tenant_id', 'slug'],\n };\n case 'tenant-project-object':\n return {\n tenantScoped: { mode: 'required' },\n includeTenantIdField: true,\n };\n case 'tenant-event-log-object':\n return {\n tenantScoped: { mode: 'optional' },\n includeTenantIdField: true,\n };\n case 'global-catalog':\n return { conflictColumns: ['slug'] };\n case 'cross-package-reference':\n case 'basic':\n return {};\n }\n}\n\nfunction normalizeTenantScoped(\n value: boolean | TenantScopedDefinition | undefined,\n): TenantScopedDefinition | undefined {\n if (!value) return undefined;\n return {\n mode: typeof value === 'object' ? (value.mode ?? 'required') : 'required',\n field: typeof value === 'object' ? (value.field ?? 'tenantId') : 'tenantId',\n autoFilter: typeof value === 'object' ? value.autoFilter : undefined,\n autoPopulate: typeof value === 'object' ? value.autoPopulate : undefined,\n allowSuperAdminBypass:\n typeof value === 'object' ? value.allowSuperAdminBypass : undefined,\n };\n}\n\nfunction renderSmrtDecorator(options: {\n includeApiConfig: boolean;\n includeMcpConfig: boolean;\n includeCliConfig: boolean;\n tableName?: string;\n conflictColumns: string[];\n}): string {\n const decoratorConfig: Record<string, unknown> = {};\n\n if (options.tableName) {\n decoratorConfig.tableName = options.tableName;\n }\n\n if (options.conflictColumns.length > 0) {\n decoratorConfig.conflictColumns = options.conflictColumns;\n }\n\n if (options.includeApiConfig) {\n decoratorConfig.api = {\n include: ['list', 'get', 'create', 'update'],\n exclude: ['delete'],\n };\n }\n\n if (options.includeMcpConfig) {\n decoratorConfig.mcp = {\n include: ['list', 'get'],\n };\n }\n\n if (options.includeCliConfig) {\n decoratorConfig.cli = true;\n }\n\n return Object.keys(decoratorConfig).length > 0\n ? `@smrt(${JSON.stringify(decoratorConfig, null, 2)})`\n : '@smrt()';\n}\n\nfunction renderTenantIdField(tenantScoped: TenantScopedDefinition): string {\n const nullable = tenantScoped.mode === 'optional';\n const field = tenantScoped.field ?? 'tenantId';\n return nullable\n ? ` @tenantId({ nullable: true })\\n ${field}: string | null = null;`\n : ` @tenantId()\\n ${field}: string = '';`;\n}\n\nfunction renderProperty(prop: PropertyDefinition): string {\n const mapping = TYPE_MAPPING[prop.type];\n const nullable = prop.nullable === true;\n const tsType = nullable ? `${mapping.tsType} | null` : mapping.tsType;\n const defaultValue =\n prop.defaultValue !== undefined\n ? renderLiteral(prop.defaultValue)\n : nullable\n ? 'null'\n : mapping.defaultValue;\n const fieldOptions = compactObject({\n required: prop.required,\n nullable: prop.nullable,\n description: prop.description,\n });\n const jsdoc = prop.description ? ` /** ${prop.description} */\\n` : '';\n const decorator =\n Object.keys(fieldOptions).length > 0\n ? ` @field(${JSON.stringify(fieldOptions)})\\n`\n : '';\n\n return `${jsdoc}${decorator} ${prop.name}: ${tsType} = ${defaultValue};`;\n}\n\nfunction renderRelationship(relationship: RelationshipDefinition): string {\n const options = compactObject({\n required: relationship.required,\n nullable: relationship.nullable,\n description: relationship.description,\n validate: relationship.validate,\n foreignKey: relationship.foreignKey,\n through: relationship.through,\n sourceKey: relationship.sourceKey,\n targetKey: relationship.targetKey,\n });\n const args = [\n renderLiteral(relationship.related),\n ...(Object.keys(options).length > 0 ? [JSON.stringify(options)] : []),\n ];\n const decorator = `@${relationship.type}(${args.join(', ')})`;\n const fieldType =\n relationship.type === 'oneToMany' || relationship.type === 'manyToMany'\n ? 'unknown[]'\n : relationship.nullable\n ? 'string | null'\n : 'string';\n const defaultValue =\n relationship.type === 'oneToMany' || relationship.type === 'manyToMany'\n ? '[]'\n : relationship.nullable\n ? 'null'\n : \"''\";\n\n return ` ${decorator}\\n ${relationship.name}: ${fieldType} = ${defaultValue};`;\n}\n\nfunction needsFieldDecorator(properties: PropertyDefinition[]): boolean {\n return properties.some(\n (property) =>\n property.required !== undefined ||\n property.nullable !== undefined ||\n property.description !== undefined,\n );\n}\n\nfunction renderCompanionSnippets(\n className: string,\n usesTenantScoped: boolean,\n): string {\n const dependencyNote = usesTenantScoped\n ? `\\n * - Ensure package.json declares \"@happyvertical/smrt-tenancy\".`\n : '';\n return `/*\n * Package wiring:\n * - Export ${className} from the package entrypoint used by consumers.\n * - Import this module from any package registration file that eagerly loads objects.${dependencyNote}\n */`;\n}\n\nfunction renderObjectLiteral(value: Record<string, unknown>): string {\n return JSON.stringify(compactObject(value), null, 2);\n}\n\nfunction renderLiteral(value: unknown): string {\n if (typeof value === 'string') return JSON.stringify(value);\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (value === null) return 'null';\n return JSON.stringify(value, null, 2);\n}\n\nfunction compactObject<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n","/**\n * Project Introspection Tool\n * Returns a manifest-equivalent inventory of SMRT objects in a project.\n */\n\nimport type { Dirent } from 'node:fs';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { isAbsolute, join, relative, resolve } from 'node:path';\nimport {\n ManifestGenerator,\n type SmartObjectManifest,\n} from '@happyvertical/smrt-core/scanner';\nimport type { ScanError } from '@happyvertical/smrt-scanner';\nimport { ManifestAdapter, OxcScanner } from '@happyvertical/smrt-scanner';\n\ninterface IntrospectProjectArgs {\n directory?: string;\n manifestPath?: string;\n includeFields?: boolean;\n includeRelationships?: boolean;\n includeMethods?: boolean;\n}\n\ntype DiagnosticSeverity = 'error' | 'warning' | 'info';\n\ninterface Diagnostic {\n severity: DiagnosticSeverity;\n message: string;\n filePath?: string;\n line?: number;\n column?: number;\n}\n\ninterface ManifestLike {\n version?: string;\n packageName?: string;\n packageVersion?: string;\n objects?: Record<string, ManifestObject>;\n}\n\ninterface ManifestObject {\n name?: string;\n className: string;\n qualifiedName?: string;\n collection?: string;\n filePath: string;\n packageName?: string;\n packageVersion?: string;\n importPath?: string;\n modulePath?: string;\n exportName?: string;\n collectionExportName?: string;\n fields?: Record<string, ManifestField>;\n methods?: Record<string, ManifestMethod>;\n decoratorConfig?: Record<string, unknown>;\n extends?: string;\n extendsTypeArg?: string;\n schema?: ManifestSchema;\n staticProperties?: Record<string, unknown>;\n validationRules?: Record<string, unknown>;\n}\n\ninterface ManifestField {\n type: string;\n required?: boolean;\n default?: unknown;\n related?: string;\n description?: string;\n _meta?: Record<string, unknown>;\n transient?: boolean;\n}\n\ninterface ManifestMethod {\n name?: string;\n async?: boolean;\n parameters?: Array<{\n name: string;\n type?: string;\n optional?: boolean;\n default?: unknown;\n }>;\n returnType?: string;\n description?: string;\n isStatic?: boolean;\n isPublic?: boolean;\n}\n\ninterface ManifestSchema {\n tableName?: string;\n ddl?: string;\n columns?: Record<string, unknown>;\n indexes?: Array<{\n name?: string;\n columns?: string[];\n unique?: boolean;\n where?: string;\n jsonPath?: unknown;\n }>;\n version?: string;\n}\n\ninterface PackageMetadata {\n name?: string;\n version?: string;\n json?: Record<string, unknown>;\n}\n\nconst DEFAULT_MANIFEST_PATHS = [\n '.smrt/manifest.json',\n 'dist/manifest.json',\n 'src/manifest/manifest.json',\n];\n\nconst SCAN_EXCLUDE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.git/**',\n '**/.smrt/**',\n '**/*.d.ts',\n '**/*.test.ts',\n '**/*.spec.ts',\n '**/__tests__/**',\n];\n\nconst RELATIONSHIP_TYPES = new Set([\n 'foreignKey',\n 'crossPackageRef',\n 'oneToMany',\n 'manyToMany',\n]);\n\nexport async function introspectProject(\n args: IntrospectProjectArgs,\n): Promise<string> {\n const {\n directory = process.cwd(),\n includeFields = true,\n includeRelationships = true,\n includeMethods = true,\n } = args;\n const projectPath = resolve(directory);\n\n const exists = await pathExists(projectPath);\n if (!exists) {\n return JSON.stringify(\n {\n projectPath,\n manifestSource: 'none',\n objectCount: 0,\n objects: [],\n diagnostics: [\n {\n severity: 'warning',\n message: `Project directory does not exist: ${projectPath}`,\n },\n ],\n },\n null,\n 2,\n );\n }\n\n const packageMetadata = await readPackageMetadata(projectPath);\n const tenantScopes = await scanTenantScopes(projectPath);\n const manifestResult =\n (await loadManifestArtifact(projectPath, args.manifestPath)) ??\n (await scanSourceManifest(projectPath, packageMetadata));\n\n const objects = Object.entries(manifestResult.manifest.objects ?? {})\n .map(([manifestKey, object]) =>\n formatObject({\n manifestKey,\n object,\n projectPath,\n includeFields,\n includeRelationships,\n includeMethods,\n tenantScope: tenantScopes.get(object.className),\n }),\n )\n .sort((left, right) => left.className.localeCompare(right.className));\n\n const output = {\n projectPath,\n manifestSource: manifestResult.source,\n manifestPath:\n 'path' in manifestResult\n ? relative(projectPath, manifestResult.path)\n : undefined,\n packageName:\n manifestResult.manifest.packageName ?? packageMetadata.name ?? undefined,\n packageVersion:\n manifestResult.manifest.packageVersion ??\n packageMetadata.version ??\n undefined,\n objectCount: objects.length,\n scannedFileCount: manifestResult.scannedFileCount,\n parseTimeMs: manifestResult.parseTimeMs,\n objects,\n diagnostics: manifestResult.diagnostics,\n };\n\n return JSON.stringify(output, null, 2);\n}\n\nasync function loadManifestArtifact(\n projectPath: string,\n manifestPath: string | undefined,\n): Promise<\n | {\n source: 'manifest';\n path: string;\n manifest: ManifestLike;\n diagnostics: Diagnostic[];\n scannedFileCount?: number;\n parseTimeMs?: number;\n }\n | undefined\n> {\n const candidates = manifestPath\n ? [resolve(projectPath, manifestPath)]\n : DEFAULT_MANIFEST_PATHS.map((candidate) => join(projectPath, candidate));\n\n const diagnostics: Diagnostic[] = [];\n for (const candidate of candidates) {\n if (!(await pathExists(candidate))) {\n continue;\n }\n\n try {\n const parsed = JSON.parse(await readFile(candidate, 'utf-8')) as unknown;\n if (isManifestLike(parsed)) {\n return {\n source: 'manifest',\n path: candidate,\n manifest: parsed,\n diagnostics,\n };\n }\n\n diagnostics.push({\n severity: 'warning',\n filePath: candidate,\n message: 'Manifest artifact is present but does not contain objects.',\n });\n } catch (error) {\n diagnostics.push({\n severity: 'error',\n filePath: candidate,\n message: `Unable to parse manifest artifact: ${messageFromError(error)}`,\n });\n }\n }\n\n return manifestPath\n ? {\n source: 'manifest',\n path: resolve(projectPath, manifestPath),\n manifest: { objects: {} },\n diagnostics: [\n ...diagnostics,\n {\n severity: 'warning',\n filePath: resolve(projectPath, manifestPath),\n message: 'Requested manifest artifact was not found.',\n },\n ],\n }\n : undefined;\n}\n\nasync function scanSourceManifest(\n projectPath: string,\n packageMetadata: PackageMetadata,\n): Promise<{\n source: 'scanner';\n manifest: ManifestLike;\n diagnostics: Diagnostic[];\n scannedFileCount: number;\n parseTimeMs: number;\n}> {\n const scanner = new OxcScanner({\n cwd: projectPath,\n include: ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx'],\n exclude: SCAN_EXCLUDE,\n });\n const { results, resolved } = await scanner.scanAndResolve();\n const adapter = new ManifestAdapter();\n const manifest = adapter.toManifest(\n resolved.filter((classDef) => classDef.hasSmartDecorator),\n {\n packageName: packageMetadata.name,\n packageVersion: packageMetadata.version,\n typeAliases: results.typeAliases,\n },\n ) as ManifestLike;\n finalizeScannerManifest(manifest, packageMetadata);\n\n return {\n source: 'scanner',\n manifest,\n diagnostics: results.errors.map(scanErrorToDiagnostic),\n scannedFileCount: results.fileCount,\n parseTimeMs: Math.round(results.totalParseTimeMs),\n };\n}\n\nfunction finalizeScannerManifest(\n manifest: ManifestLike,\n packageMetadata: PackageMetadata,\n): void {\n const manifestGen = new ManifestGenerator();\n const fullManifest = manifest as unknown as SmartObjectManifest;\n withSuppressedConsoleLog(() => {\n manifestGen.injectTenantScopedFields(fullManifest);\n manifestGen.mergeInheritedFields(fullManifest);\n manifestGen.generateValidationRules(fullManifest);\n manifestGen.generateSchemas(fullManifest);\n manifestGen.assertTenantScopedSchemaContract(fullManifest);\n manifestGen.generateAgentManifests(\n fullManifest,\n packageMetadata.name,\n packageMetadata.json,\n );\n });\n}\n\nfunction withSuppressedConsoleLog<T>(callback: () => T): T {\n const originalLog = console.log;\n console.log = () => undefined;\n try {\n return callback();\n } finally {\n console.log = originalLog;\n }\n}\n\nfunction formatObject({\n manifestKey,\n object,\n projectPath,\n includeFields,\n includeRelationships,\n includeMethods,\n tenantScope,\n}: {\n manifestKey: string;\n object: ManifestObject;\n projectPath: string;\n includeFields: boolean;\n includeRelationships: boolean;\n includeMethods: boolean;\n tenantScope?: Record<string, unknown>;\n}) {\n const fieldDetails = Object.entries(object.fields ?? {}).map(\n ([name, field]) => ({\n name,\n type: field.type,\n ...(field.required !== undefined ? { required: field.required } : {}),\n ...(field.default !== undefined ? { default: field.default } : {}),\n ...(field.related ? { related: field.related } : {}),\n ...(field.description ? { description: field.description } : {}),\n ...(field._meta ? { meta: field._meta } : {}),\n ...(field.transient !== undefined ? { transient: field.transient } : {}),\n }),\n );\n const relationshipDetails = fieldDetails\n .filter((field) => RELATIONSHIP_TYPES.has(field.type))\n .map((field) => ({\n field: field.name,\n relatedClass: field.related ?? '',\n type: field.type,\n ...(field.meta ? { meta: field.meta } : {}),\n }));\n const methodDetails = Object.entries(object.methods ?? {}).map(\n ([name, method]) => ({\n name: method.name ?? name,\n isAsync: method.async === true,\n isStatic: method.isStatic === true,\n isPublic: method.isPublic !== false,\n parameters: method.parameters ?? [],\n returnType: method.returnType ?? 'unknown',\n ...(method.description ? { description: method.description } : {}),\n }),\n );\n\n const decoratorConfig = object.decoratorConfig ?? {};\n const effectiveTenantScope =\n tenantScope ?? normalizeTenantScopedConfig(decoratorConfig.tenantScoped);\n const schema = object.schema;\n\n return compactObject({\n manifestKey,\n name: object.name,\n className: object.className,\n qualifiedName: object.qualifiedName,\n filePath: sanitizePath(projectPath, object.filePath),\n packageName: object.packageName,\n packageVersion: object.packageVersion,\n importPath: object.importPath,\n modulePath: object.modulePath,\n exportName: object.exportName,\n collectionExportName: object.collectionExportName,\n collection: object.collection,\n extends: object.extends,\n extendsTypeArg: object.extendsTypeArg,\n tableName:\n schema?.tableName ??\n stringFromConfig(decoratorConfig.tableName) ??\n object.collection,\n tableStrategy: stringFromConfig(decoratorConfig.tableStrategy) ?? 'cti',\n conflictColumns: arrayFromConfig(decoratorConfig.conflictColumns),\n tenantScope: effectiveTenantScope,\n decoratorConfig,\n schema: schema\n ? {\n tableName: schema.tableName,\n columns: schema.columns,\n indexes: schema.indexes ?? [],\n version: schema.version,\n }\n : undefined,\n indexes: schema?.indexes ?? [],\n staticProperties: object.staticProperties,\n validationRules: object.validationRules,\n ...(includeFields && {\n fields: fieldDetails\n .map((field) => `${field.name}: ${field.type}`)\n .join(', '),\n fieldDetails,\n }),\n ...(includeRelationships &&\n relationshipDetails.length > 0 && {\n relationships: relationshipDetails\n .map(\n (relationship) =>\n `${relationship.field} -> ${relationship.relatedClass} (${relationship.type})`,\n )\n .join(', '),\n relationshipDetails,\n }),\n ...(includeMethods &&\n methodDetails.length > 0 && {\n methods: methodDetails\n .map((method) => `${method.isAsync ? 'async ' : ''}${method.name}()`)\n .join(', '),\n methodDetails,\n }),\n });\n}\n\nasync function scanTenantScopes(\n projectPath: string,\n): Promise<Map<string, Record<string, unknown>>> {\n const files = await listSourceFiles(projectPath);\n const scopes = new Map<string, Record<string, unknown>>();\n\n await Promise.all(\n files.map(async (filePath) => {\n const content = await readFile(filePath, 'utf-8');\n const classMatches = content.matchAll(/class\\s+([A-Za-z_]\\w*)\\b/g);\n for (const match of classMatches) {\n const className = match[1];\n if (!className || match.index === undefined) continue;\n const prefix = content.slice(\n Math.max(0, match.index - 800),\n match.index,\n );\n const tenantMatches = Array.from(\n prefix.matchAll(/@TenantScoped\\s*\\(([\\s\\S]*?)\\)/g),\n );\n const tenantMatch = tenantMatches.at(-1);\n if (!tenantMatch) continue;\n scopes.set(className, {\n source: 'TenantScoped',\n ...parseTenantScopedOptions(tenantMatch[1]),\n });\n }\n }),\n );\n\n return scopes;\n}\n\nasync function listSourceFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n\n async function visit(dir: string): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (\n [\n 'node_modules',\n 'dist',\n 'build',\n '.git',\n '.smrt',\n '__tests__',\n ].includes(entry.name) ||\n entry.name.startsWith('.')\n ) {\n continue;\n }\n await visit(fullPath);\n continue;\n }\n\n if (\n entry.isFile() &&\n /\\.(tsx?|jsx?)$/.test(entry.name) &&\n !entry.name.endsWith('.d.ts') &&\n !entry.name.endsWith('.test.ts') &&\n !entry.name.endsWith('.spec.ts')\n ) {\n files.push(fullPath);\n }\n }\n }\n\n await visit(projectPath);\n return files;\n}\n\nfunction parseTenantScopedOptions(raw: string): Record<string, unknown> {\n const mode = raw.match(/mode\\s*:\\s*['\"`](required|optional)['\"`]/)?.[1];\n const field = raw.match(/field\\s*:\\s*['\"`]([A-Za-z_]\\w*)['\"`]/)?.[1];\n const allowSuperAdminBypass = raw.match(\n /allowSuperAdminBypass\\s*:\\s*(true|false)/,\n )?.[1];\n const autoFilter = raw.match(/autoFilter\\s*:\\s*(true|false)/)?.[1];\n const autoPopulate = raw.match(/autoPopulate\\s*:\\s*(true|false)/)?.[1];\n\n return compactObject({\n mode: mode ?? 'required',\n field: field ?? 'tenantId',\n autoFilter: autoFilter === undefined ? undefined : autoFilter === 'true',\n autoPopulate:\n autoPopulate === undefined ? undefined : autoPopulate === 'true',\n allowSuperAdminBypass:\n allowSuperAdminBypass === undefined\n ? undefined\n : allowSuperAdminBypass === 'true',\n });\n}\n\nfunction normalizeTenantScopedConfig(\n tenantScoped: unknown,\n): Record<string, unknown> | undefined {\n if (!tenantScoped) return undefined;\n const options =\n typeof tenantScoped === 'object' && !Array.isArray(tenantScoped)\n ? (tenantScoped as Record<string, unknown>)\n : {};\n return {\n source: 'smrt',\n mode: options.mode ?? 'required',\n field: options.field ?? 'tenantId',\n autoFilter: options.autoFilter ?? true,\n autoPopulate: options.autoPopulate ?? true,\n allowSuperAdminBypass: options.allowSuperAdminBypass ?? false,\n };\n}\n\nasync function readPackageMetadata(\n projectPath: string,\n): Promise<PackageMetadata> {\n const packageJsonPath = join(projectPath, 'package.json');\n if (!(await pathExists(packageJsonPath))) return {};\n\n try {\n const json = JSON.parse(await readFile(packageJsonPath, 'utf-8')) as Record<\n string,\n unknown\n >;\n return {\n name: typeof json.name === 'string' ? json.name : undefined,\n version: typeof json.version === 'string' ? json.version : undefined,\n json,\n };\n } catch {\n return {};\n }\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isManifestLike(value: unknown): value is ManifestLike {\n return (\n !!value &&\n typeof value === 'object' &&\n !!(value as ManifestLike).objects &&\n typeof (value as ManifestLike).objects === 'object'\n );\n}\n\nfunction scanErrorToDiagnostic(error: ScanError): Diagnostic {\n return {\n severity: error.severity,\n message: error.message,\n filePath: error.filePath,\n line: error.line,\n column: error.column,\n };\n}\n\nfunction sanitizePath(projectPath: string, filePath: string): string {\n const absolute = isAbsolute(filePath)\n ? filePath\n : resolve(projectPath, filePath);\n const relativePath = relative(projectPath, absolute);\n if (!relativePath.startsWith('..')) {\n return relativePath || filePath;\n }\n return filePath;\n}\n\nfunction stringFromConfig(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction arrayFromConfig(value: unknown): string[] | undefined {\n return Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : undefined;\n}\n\nfunction compactObject<T extends Record<string, unknown>>(value: T): T {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n ) as T;\n}\n\nfunction messageFromError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","/**\n * Ecosystem-aware downstream project review.\n * Advisory only: scans manifests and source files, then reports alignment risks.\n */\n\nimport { type Dirent, existsSync } from 'node:fs';\nimport { access, readdir, readFile } from 'node:fs/promises';\nimport { dirname, join, relative, resolve, sep } from 'node:path';\n\ninterface ReviewSmrtProjectArgs {\n directory?: string;\n rootDir?: string;\n includeSourceEvidence?: boolean;\n maxFindings?: number;\n}\n\ntype Severity = 'high' | 'medium' | 'low';\n\ninterface Evidence {\n filePath: string;\n line?: number;\n detail: string;\n}\n\ninterface Finding {\n severity: Severity;\n area:\n | 'dependencies'\n | 'storage'\n | 'api-shell'\n | 'manifest'\n | 'auth-tenancy'\n | 'ui-shell';\n code: string;\n title: string;\n evidence: Evidence[];\n recommendation: string;\n suggestedIssueTitle: string;\n}\n\ninterface PackageInventory {\n name: string;\n path: string;\n private?: boolean;\n scripts: string[];\n declaredHappyVerticalDependencies: string[];\n importedHappyVerticalPackages: string[];\n missingHappyVerticalDependencies: string[];\n hasSvelteKit: boolean;\n hasSmrtSvelte: boolean;\n}\n\ninterface PackageContext {\n directory: string;\n relativePath: string;\n packageJsonPath: string;\n json: Record<string, unknown>;\n dependencies: Set<string>;\n scripts: Record<string, unknown>;\n imports: Map<string, Evidence[]>;\n sourceFiles: SourceFile[];\n}\n\ninterface SourceFile {\n path: string;\n packageDir: string;\n content: string;\n}\n\nconst SOURCE_EXTENSIONS = /\\.(tsx?|jsx?|svelte)$/;\nconst SKIP_DIRS = new Set([\n 'node_modules',\n 'dist',\n 'build',\n '.git',\n '.smrt',\n '.svelte-kit',\n 'coverage',\n]);\nconst DEPENDENCY_SECTIONS = [\n 'dependencies',\n 'devDependencies',\n 'peerDependencies',\n 'optionalDependencies',\n];\nconst SMRT_PACKAGE_PREFIX = '@happyvertical/smrt-';\nconst HAPPYVERTICAL_PACKAGE_PREFIX = '@happyvertical/';\n\nexport async function reviewSmrtProject(\n args: ReviewSmrtProjectArgs,\n): Promise<string> {\n const projectPath = resolve(args.directory ?? args.rootDir ?? process.cwd());\n if (!(await pathExists(projectPath))) {\n return JSON.stringify(\n {\n projectPath,\n packageCount: 0,\n packages: [],\n findings: [],\n summary: { high: 0, medium: 0, low: 0 },\n diagnostics: [\n {\n severity: 'warning',\n message: `Project directory does not exist: ${projectPath}`,\n },\n ],\n },\n null,\n 2,\n );\n }\n\n const packageContexts = await buildPackageContexts(projectPath);\n const sourceFiles = await listSourceFiles(projectPath, packageContexts);\n await attachSourceFiles(sourceFiles, packageContexts, projectPath);\n\n const findings = limitFindings(\n [\n ...findMissingHappyVerticalDependencies(packageContexts),\n ...findCustomManifestGeneration(sourceFiles, projectPath),\n ...findDirectStorageBypasses(sourceFiles, packageContexts, projectPath),\n ...findCustomHttpShells(sourceFiles, packageContexts, projectPath),\n ...findLocalAuthTenancy(sourceFiles, packageContexts, projectPath),\n ...findUiShellDrift(packageContexts, projectPath),\n ...findMissingManifestArtifacts(\n sourceFiles,\n packageContexts,\n projectPath,\n ),\n ],\n args.maxFindings,\n );\n\n const packages = packageContexts\n .map(packageInventory)\n .sort((left, right) => left.path.localeCompare(right.path));\n const summary = summarizeFindings(findings);\n\n return JSON.stringify(\n {\n projectPath,\n packageCount: packages.length,\n packages,\n findings:\n args.includeSourceEvidence === false\n ? findings.map(({ evidence: _evidence, ...finding }) => finding)\n : findings,\n summary,\n referenceChecks: [\n 'Prefer SMRT scanner/runtime manifests over custom manifest builders.',\n 'Prefer SvelteKit plus @happyvertical/smrt-svelte for app shells.',\n 'Prefer @happyvertical/sql and @happyvertical/files/assets/content over direct durable node:fs storage.',\n 'Prefer smrt-users, smrt-tenancy, and profile/audit packages over local static auth seams.',\n ],\n suggestedFollowUpIssues: findings.map((finding) => ({\n title: finding.suggestedIssueTitle,\n severity: finding.severity,\n area: finding.area,\n })),\n },\n null,\n 2,\n );\n}\n\nasync function buildPackageContexts(\n projectPath: string,\n): Promise<PackageContext[]> {\n const packageJsonPaths = await listPackageJsonFiles(projectPath);\n const contexts = await Promise.all(\n packageJsonPaths.map(async (packageJsonPath) => {\n const json = JSON.parse(\n await readFile(packageJsonPath, 'utf-8'),\n ) as Record<string, unknown>;\n const directory = dirname(packageJsonPath);\n return {\n directory,\n relativePath: relative(projectPath, directory) || '.',\n packageJsonPath,\n json,\n dependencies: collectDependencies(json),\n scripts: isRecord(json.scripts)\n ? (json.scripts as Record<string, unknown>)\n : {},\n imports: new Map<string, Evidence[]>(),\n sourceFiles: [],\n };\n }),\n );\n\n if (contexts.length === 0) {\n contexts.push({\n directory: projectPath,\n relativePath: '.',\n packageJsonPath: join(projectPath, 'package.json'),\n json: {},\n dependencies: new Set(),\n scripts: {},\n imports: new Map(),\n sourceFiles: [],\n });\n }\n\n return contexts.sort(\n (left, right) => left.directory.length - right.directory.length,\n );\n}\n\nasync function listPackageJsonFiles(projectPath: string): Promise<string[]> {\n const files: string[] = [];\n await visit(projectPath, async (filePath, entryName) => {\n if (entryName === 'package.json') files.push(filePath);\n });\n return files;\n}\n\nasync function listSourceFiles(\n projectPath: string,\n packages: PackageContext[],\n): Promise<SourceFile[]> {\n const files: SourceFile[] = [];\n await visit(projectPath, async (filePath, entryName) => {\n if (!SOURCE_EXTENSIONS.test(entryName)) return;\n if (\n entryName.endsWith('.d.ts') ||\n entryName.endsWith('.test.ts') ||\n entryName.endsWith('.spec.ts')\n ) {\n return;\n }\n\n const packageDir = findOwningPackage(filePath, packages).directory;\n const content = await readFile(filePath, 'utf-8');\n files.push({ path: filePath, packageDir, content });\n });\n return files;\n}\n\nasync function attachSourceFiles(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Promise<void> {\n for (const sourceFile of sourceFiles) {\n const owner = packages.find(\n (pkg) => pkg.directory === sourceFile.packageDir,\n );\n if (!owner) continue;\n owner.sourceFiles.push(sourceFile);\n for (const importedPackage of extractImports(sourceFile.content)) {\n if (!importedPackage.startsWith(HAPPYVERTICAL_PACKAGE_PREFIX)) continue;\n const evidence = {\n filePath: relative(projectPath, sourceFile.path),\n line: lineNumber(sourceFile.content, importedPackage),\n detail: `Imports ${importedPackage}`,\n };\n const existing = owner.imports.get(importedPackage) ?? [];\n existing.push(evidence);\n owner.imports.set(importedPackage, existing);\n }\n }\n}\n\nfunction findMissingHappyVerticalDependencies(\n packages: PackageContext[],\n): Finding[] {\n return packages.flatMap((pkg) => {\n const ownName =\n typeof pkg.json.name === 'string' ? pkg.json.name : undefined;\n const missing = Array.from(pkg.imports.keys()).filter(\n (importedPackage) =>\n importedPackage !== ownName && !pkg.dependencies.has(importedPackage),\n );\n if (missing.length === 0) return [];\n\n const hasSmrtMissing = missing.some((name) =>\n name.startsWith(SMRT_PACKAGE_PREFIX),\n );\n return [\n {\n severity: hasSmrtMissing ? 'high' : 'medium',\n area: 'dependencies',\n code: 'missing-happyvertical-dependencies',\n title: `${packageLabel(pkg)} imports HappyVertical packages that package.json does not declare`,\n evidence: missing.flatMap((name) => pkg.imports.get(name) ?? []),\n recommendation:\n 'Declare every imported @happyvertical package in the owning package manifest so downstream installs and generated knowledge stay reproducible.',\n suggestedIssueTitle: `Declare missing HappyVertical dependencies in ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nfunction findCustomManifestGeneration(\n sourceFiles: SourceFile[],\n projectPath: string,\n): Finding[] {\n return sourceFiles\n .filter(\n (file) =>\n /manifest\\.json/.test(file.content) &&\n /objects\\s*:/.test(file.content) &&\n /\\b(writeFile|writeFileSync)\\b/.test(file.content) &&\n !/@happyvertical\\/smrt-scanner/.test(file.content),\n )\n .map((file) => ({\n severity: 'high',\n area: 'manifest',\n code: 'custom-object-manifest-generation',\n title: 'Custom SMRT object manifest generation detected',\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'manifest.json'),\n detail:\n 'Writes a manifest.json object inventory outside the SMRT scanner/runtime path.',\n },\n ],\n recommendation:\n 'Use the SMRT scanner/runtime manifest path so defaults, relationships, schemas, tenant fields, and cross-package references match framework behavior.',\n suggestedIssueTitle:\n 'Replace custom object manifest generation with SMRT scanner/runtime manifest generation',\n }));\n}\n\nfunction findDirectStorageBypasses(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return sourceFiles.flatMap((file) => {\n const owner = findOwningPackage(file.path, packages);\n const usesFs =\n /from\\s+['\"](?:node:fs|node:fs\\/promises|fs|fs\\/promises)['\"]|require\\(['\"](?:node:fs|node:fs\\/promises|fs|fs\\/promises)['\"]\\)/.test(\n file.content,\n );\n const writesDurableData =\n /\\b(writeFile|appendFile|mkdir|rm|rename)\\b/.test(file.content) &&\n /(\\.json|data|storage|persist|cache|db)/i.test(file.content);\n const usesDirectSql =\n /from\\s+['\"](?:better-sqlite3|sqlite3|pg|mysql2?|knex|drizzle-orm)['\"]/.test(\n file.content,\n );\n if ((!usesFs || !writesDurableData) && !usesDirectSql) return [];\n\n const hasApprovedStorage =\n owner.dependencies.has('@happyvertical/sql') ||\n owner.dependencies.has('@happyvertical/files') ||\n owner.dependencies.has('@happyvertical/smrt-assets') ||\n owner.dependencies.has('@happyvertical/smrt-content');\n\n if (hasApprovedStorage) return [];\n\n return [\n {\n severity: 'medium',\n area: 'storage',\n code: 'direct-storage-bypass',\n title: `${packageLabel(owner)} appears to bypass HappyVertical storage packages`,\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(\n file.content,\n usesDirectSql ? 'sqlite' : 'writeFile',\n ),\n detail: usesDirectSql\n ? 'Imports a direct SQL/storage library without @happyvertical/sql.'\n : 'Uses node:fs-style durable writes without @happyvertical/files/assets/content.',\n },\n ],\n recommendation:\n 'Route durable data through @happyvertical/sql, @happyvertical/files, SMRT assets, or SMRT content unless this is explicitly build-only tooling.',\n suggestedIssueTitle: `Review direct storage usage in ${packageLabel(owner)}`,\n },\n ];\n });\n}\n\nfunction findCustomHttpShells(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n const evidenceByPackage = new Map<PackageContext, Evidence[]>();\n\n for (const pkg of packages) {\n if (pkg.dependencies.has('@sveltejs/kit')) continue;\n\n const routerDependencies = ['express', 'fastify', 'hono', 'koa'].filter(\n (dep) => pkg.dependencies.has(dep),\n );\n if (routerDependencies.length === 0) continue;\n\n appendEvidence(evidenceByPackage, pkg, {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail: `Declares custom router package(s): ${routerDependencies.join(', ')}.`,\n });\n }\n\n for (const file of sourceFiles) {\n const owner = findOwningPackage(file.path, packages);\n if (owner.dependencies.has('@sveltejs/kit')) continue;\n\n const usesNodeHttp =\n /from\\s+['\"](?:node:http|http|node:https|https)['\"]|createServer\\s*\\(/.test(\n file.content,\n );\n if (!usesNodeHttp) continue;\n\n appendEvidence(evidenceByPackage, owner, {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'createServer'),\n detail:\n 'Custom HTTP routing found without the SvelteKit/SMRT app-shell dependency pattern.',\n });\n }\n\n return Array.from(evidenceByPackage.entries()).map(([owner, evidence]) => ({\n severity: 'medium',\n area: 'api-shell',\n code: 'custom-http-shell',\n title: `${packageLabel(owner)} uses a custom HTTP shell`,\n evidence,\n recommendation:\n 'Compare the app shell against the Anytown/Ergot SvelteKit + SMRT shell pattern before adding custom HTTP infrastructure.',\n suggestedIssueTitle: `Align ${packageLabel(owner)} app shell with SMRT/SvelteKit conventions`,\n }));\n}\n\nfunction appendEvidence(\n evidenceByPackage: Map<PackageContext, Evidence[]>,\n pkg: PackageContext,\n evidence: Evidence,\n): void {\n const existing = evidenceByPackage.get(pkg);\n if (existing) {\n existing.push(evidence);\n return;\n }\n\n evidenceByPackage.set(pkg, [evidence]);\n}\n\nfunction findLocalAuthTenancy(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return sourceFiles.flatMap((file) => {\n const owner = findOwningPackage(file.path, packages);\n const pathSignal = /(auth|tenant|audit|session|rbac|user)/i.test(file.path);\n const codeSignal =\n /\\b(tenantId|tenant|role|permission|session|auditLog|apiKey)\\b/.test(\n file.content,\n );\n if (!pathSignal || !codeSignal) return [];\n\n const hasApprovedPackages =\n owner.dependencies.has('@happyvertical/smrt-users') ||\n owner.dependencies.has('@happyvertical/smrt-tenancy') ||\n owner.dependencies.has('@happyvertical/smrt-profiles');\n if (hasApprovedPackages) return [];\n\n return [\n {\n severity: 'medium',\n area: 'auth-tenancy',\n code: 'local-auth-tenancy',\n title: `${packageLabel(owner)} contains local auth/tenancy/audit logic`,\n evidence: [\n {\n filePath: relative(projectPath, file.path),\n line: lineNumber(file.content, 'tenant'),\n detail:\n 'Auth, tenancy, session, role, or audit terminology appears without smrt-users/smrt-tenancy/smrt-profiles dependencies.',\n },\n ],\n recommendation:\n 'Add explicit adapters to smrt-users, smrt-tenancy, and profile/audit models or document why this local implementation is intentionally isolated.',\n suggestedIssueTitle: `Review auth and tenancy adapters in ${packageLabel(owner)}`,\n },\n ];\n });\n}\n\nfunction findUiShellDrift(\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return packages.flatMap((pkg) => {\n const hasUiSource = pkg.sourceFiles.some((file) =>\n file.path.endsWith('.svelte'),\n );\n const likelyUiPackage =\n hasUiSource ||\n /(?:web|ui|app|site|frontend)/i.test(packageLabel(pkg)) ||\n pkg.dependencies.has('svelte') ||\n pkg.dependencies.has('vite');\n if (!likelyUiPackage) return [];\n if (pkg.dependencies.has('@happyvertical/smrt-svelte')) return [];\n\n return [\n {\n severity: 'low',\n area: 'ui-shell',\n code: 'missing-smrt-svelte-shell',\n title: `${packageLabel(pkg)} looks like UI work without @happyvertical/smrt-svelte`,\n evidence: [\n {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail:\n 'UI-facing package does not declare @happyvertical/smrt-svelte.',\n },\n ],\n recommendation:\n 'Use @happyvertical/smrt-svelte and the SvelteKit shell pattern for downstream app UI unless this package is intentionally framework-agnostic.',\n suggestedIssueTitle: `Check SMRT Svelte shell alignment for ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nfunction findMissingManifestArtifacts(\n sourceFiles: SourceFile[],\n packages: PackageContext[],\n projectPath: string,\n): Finding[] {\n return packages.flatMap((pkg) => {\n const hasSmrtSource = pkg.sourceFiles.some((file) =>\n /@smrt\\s*\\(/.test(file.content),\n );\n if (!hasSmrtSource) return [];\n const hasManifest =\n sourceFiles.some(\n (file) =>\n file.packageDir === pkg.directory &&\n /@happyvertical\\/smrt-scanner/.test(file.content),\n ) ||\n pathExistsSyncHint(join(pkg.directory, '.smrt', 'manifest.json')) ||\n pathExistsSyncHint(join(pkg.directory, 'dist', 'manifest.json'));\n if (hasManifest) return [];\n\n return [\n {\n severity: 'low',\n area: 'manifest',\n code: 'missing-generated-manifest-artifact',\n title: `${packageLabel(pkg)} has @smrt objects but no generated manifest artifact was found`,\n evidence: [\n {\n filePath: relative(projectPath, pkg.packageJsonPath),\n detail:\n 'No .smrt/manifest.json or dist/manifest.json was visible during review.',\n },\n ],\n recommendation:\n 'Run the package build/test manifest generation path and verify it uses the SMRT scanner/runtime manifest pipeline.',\n suggestedIssueTitle: `Verify SMRT manifest generation for ${packageLabel(pkg)}`,\n },\n ];\n });\n}\n\nasync function visit(\n dir: string,\n onFile: (filePath: string, entryName: string) => Promise<void> | void,\n): Promise<void> {\n let entries: Dirent[];\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n await visit(fullPath, onFile);\n continue;\n }\n if (entry.isFile()) await onFile(fullPath, entry.name);\n }\n}\n\nfunction collectDependencies(\n packageJson: Record<string, unknown>,\n): Set<string> {\n const dependencies = new Set<string>();\n for (const sectionName of DEPENDENCY_SECTIONS) {\n const section = packageJson[sectionName];\n if (!isRecord(section)) continue;\n for (const dependencyName of Object.keys(section)) {\n dependencies.add(dependencyName);\n }\n }\n return dependencies;\n}\n\nfunction extractImports(content: string): string[] {\n const imports = new Set<string>();\n const patterns = [\n /(?:import|export)\\s+(?:type\\s+)?(?:[^'\"]+\\s+from\\s+)?['\"]([^'\"]+)['\"]/g,\n /\\bimport\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n /\\brequire\\s*\\(\\s*['\"]([^'\"]+)['\"]\\s*\\)/g,\n ];\n for (const pattern of patterns) {\n for (const match of content.matchAll(pattern)) {\n const imported = normalizePackageImport(match[1]);\n if (imported) imports.add(imported);\n }\n }\n return Array.from(imports);\n}\n\nfunction normalizePackageImport(value: string | undefined): string | undefined {\n if (!value || value.startsWith('.') || value.startsWith('/'))\n return undefined;\n if (value.startsWith('@')) {\n const [scope, name] = value.split('/');\n return scope && name ? `${scope}/${name}` : value;\n }\n return value.split('/')[0];\n}\n\nfunction findOwningPackage(\n filePath: string,\n packages: PackageContext[],\n): PackageContext {\n const normalized = resolve(filePath);\n const matches = packages\n .filter(\n (pkg) =>\n normalized === pkg.directory ||\n normalized.startsWith(`${pkg.directory}${sep}`),\n )\n .sort((left, right) => right.directory.length - left.directory.length);\n return matches[0] ?? packages[0];\n}\n\nfunction packageInventory(pkg: PackageContext): PackageInventory {\n const declaredHappyVerticalDependencies = Array.from(pkg.dependencies)\n .filter((dependency) => dependency.startsWith(HAPPYVERTICAL_PACKAGE_PREFIX))\n .sort();\n const importedHappyVerticalPackages = Array.from(pkg.imports.keys()).sort();\n const ownName = typeof pkg.json.name === 'string' ? pkg.json.name : undefined;\n return {\n name: packageLabel(pkg),\n path: pkg.relativePath,\n private:\n typeof pkg.json.private === 'boolean' ? pkg.json.private : undefined,\n scripts: Object.keys(pkg.scripts).sort(),\n declaredHappyVerticalDependencies,\n importedHappyVerticalPackages,\n missingHappyVerticalDependencies: importedHappyVerticalPackages.filter(\n (name) => name !== ownName && !pkg.dependencies.has(name),\n ),\n hasSvelteKit: pkg.dependencies.has('@sveltejs/kit'),\n hasSmrtSvelte: pkg.dependencies.has('@happyvertical/smrt-svelte'),\n };\n}\n\nfunction summarizeFindings(findings: Finding[]): Record<Severity, number> {\n return findings.reduce(\n (summary, finding) => {\n summary[finding.severity]++;\n return summary;\n },\n { high: 0, medium: 0, low: 0 },\n );\n}\n\nfunction limitFindings(\n findings: Finding[],\n maxFindings: number | undefined,\n): Finding[] {\n const sorted = findings.sort(\n (left, right) =>\n severityRank(left.severity) - severityRank(right.severity) ||\n left.area.localeCompare(right.area) ||\n left.title.localeCompare(right.title),\n );\n return maxFindings && maxFindings > 0 ? sorted.slice(0, maxFindings) : sorted;\n}\n\nfunction severityRank(severity: Severity): number {\n return severity === 'high' ? 0 : severity === 'medium' ? 1 : 2;\n}\n\nfunction packageLabel(pkg: PackageContext): string {\n return typeof pkg.json.name === 'string' ? pkg.json.name : pkg.relativePath;\n}\n\nfunction lineNumber(content: string, needle: string): number | undefined {\n const index = content.indexOf(needle);\n if (index < 0) return undefined;\n return content.slice(0, index).split('\\n').length;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nasync function pathExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction pathExistsSyncHint(path: string): boolean {\n return existsSync(path);\n}\n","/**\n * SMRT Development MCP Server\n * Provides code generation, project introspection, knowledge context,\n * review/architecture prompt bundles, and portable agent skills.\n */\n\nimport { readFileSync, realpathSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ErrorCode,\n GetPromptRequestSchema,\n ListPromptsRequestSchema,\n ListResourcesRequestSchema,\n ListToolsRequestSchema,\n McpError,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { getAgentSkill, listAgentSkills } from './agent-skills.js';\nimport {\n buildArchitectureContext,\n buildKnowledgeIndex,\n buildReviewContext,\n checkKnowledgeFreshness,\n checkKnowledgeFreshnessFromIndex,\n smrtArchitecture,\n smrtReview,\n} from './knowledge/index.js';\nimport {\n generateSmrtClass,\n introspectProject,\n reviewSmrtProject,\n} from './tools/index.js';\n\nconst SERVER_NAME = 'smrt-dev-mcp';\nexport const SERVER_VERSION = readPackageVersion();\nconst DEBUG = process.env.DEBUG === 'true';\nconst REVIEW_SKILL_NAME = 'smrt-code-review';\nconst REVIEW_SKILL_URI = `smrt-dev-mcp://agent-skills/${REVIEW_SKILL_NAME}`;\nconst DOMAIN_CODE_REVIEW_PROMPT = 'domain-code-review';\nconst DOMAIN_ARCHITECTURE_PROMPT = 'domain-architecture';\nconst KNOWLEDGE_PROJECT_URI = 'smrt://knowledge/project';\nconst KNOWLEDGE_PACKAGE_PREFIX = 'smrt://knowledge/package/';\n\ntype KnowledgeIndexResult = Awaited<ReturnType<typeof buildKnowledgeIndex>>;\ntype KnowledgePackageResult = KnowledgeIndexResult['packages'][number];\ntype PromptArguments = Record<string, string> | undefined;\n\n// Tool definitions\nexport const TOOLS = [\n // Code Generation Tools\n {\n name: 'generate-smrt-class',\n description: 'Generate a complete SMRT class with @smrt() decorator',\n inputSchema: {\n type: 'object',\n properties: {\n className: {\n type: 'string',\n description: 'Name of the class (PascalCase)',\n },\n properties: {\n type: 'array',\n description: 'Array of property definitions',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n type: {\n type: 'string',\n enum: [\n 'text',\n 'integer',\n 'decimal',\n 'boolean',\n 'datetime',\n 'json',\n ],\n },\n required: { type: 'boolean' },\n nullable: { type: 'boolean' },\n description: { type: 'string' },\n defaultValue: {\n oneOf: [\n { type: 'string' },\n { type: 'number' },\n { type: 'boolean' },\n { type: 'object' },\n { type: 'null' },\n ],\n },\n },\n required: ['name', 'type'],\n },\n },\n baseClass: {\n type: 'string',\n enum: ['SmrtObject', 'SmrtCollection'],\n default: 'SmrtObject',\n },\n template: {\n type: 'string',\n enum: [\n 'basic',\n 'global-catalog',\n 'optional-catalog',\n 'tenant-project-object',\n 'tenant-event-log-object',\n 'cross-package-reference',\n ],\n default: 'basic',\n },\n tableName: { type: 'string' },\n conflictColumns: {\n type: 'array',\n items: { type: 'string' },\n },\n tenantScoped: {\n oneOf: [\n { type: 'boolean' },\n {\n type: 'object',\n properties: {\n mode: { type: 'string', enum: ['required', 'optional'] },\n field: { type: 'string' },\n autoFilter: { type: 'boolean' },\n autoPopulate: { type: 'boolean' },\n allowSuperAdminBypass: { type: 'boolean' },\n },\n },\n ],\n },\n includeTenantIdField: { type: 'boolean' },\n relationships: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n type: {\n type: 'string',\n enum: [\n 'foreignKey',\n 'crossPackageRef',\n 'oneToMany',\n 'manyToMany',\n ],\n },\n related: { type: 'string' },\n required: { type: 'boolean' },\n nullable: { type: 'boolean' },\n description: { type: 'string' },\n validate: { type: 'boolean' },\n foreignKey: { type: 'string' },\n through: { type: 'string' },\n sourceKey: { type: 'string' },\n targetKey: { type: 'string' },\n },\n required: ['name', 'type', 'related'],\n },\n },\n includeCompanionSnippets: { type: 'boolean', default: false },\n includeApiConfig: { type: 'boolean', default: true },\n includeMcpConfig: { type: 'boolean', default: true },\n includeCliConfig: { type: 'boolean', default: true },\n },\n required: ['className', 'properties'],\n },\n },\n // Project Introspection Tools\n {\n name: 'introspect-project',\n description: 'Scan current directory for SMRT objects',\n inputSchema: {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Project directory (default: cwd)',\n },\n manifestPath: {\n type: 'string',\n description:\n 'Optional manifest path. Defaults to .smrt/manifest.json, dist/manifest.json, then source scanning.',\n },\n includeFields: {\n type: 'boolean',\n description: 'Include field details',\n },\n includeRelationships: {\n type: 'boolean',\n description: 'Analyze relationships',\n },\n includeMethods: {\n type: 'boolean',\n description: 'Include public method details',\n },\n },\n },\n },\n {\n name: 'review-smrt-project',\n description:\n 'Advisory ecosystem alignment review for downstream SMRT projects',\n inputSchema: {\n type: 'object',\n properties: {\n directory: {\n type: 'string',\n description: 'Project directory (default: cwd)',\n },\n rootDir: {\n type: 'string',\n description: 'Compatibility alias for directory',\n },\n includeSourceEvidence: {\n type: 'boolean',\n description: 'Include file and line evidence in findings',\n default: true,\n },\n maxFindings: {\n type: 'number',\n description: 'Optional maximum number of findings to return',\n },\n },\n },\n },\n {\n name: 'reflect-knowledge',\n description:\n 'Report deterministic SMRT + HappyVertical SDK knowledge coverage and freshness',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: {\n type: 'string',\n description: 'Project root directory (default: cwd)',\n },\n },\n },\n },\n {\n name: 'reflect-domain-knowledge',\n description:\n 'Report domain-scoped SMRT knowledge artifacts, SDK packages, and freshness',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'check-knowledge-freshness',\n description: 'Run deterministic freshness checks for SMRT agent knowledge',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changed: {\n type: 'boolean',\n description: 'Limit stale-pattern checks to changed files',\n },\n strict: {\n type: 'boolean',\n description: 'Treat stale-pattern findings as errors',\n },\n },\n },\n },\n {\n name: 'check-domain-knowledge',\n description:\n 'Run deterministic freshness checks for domain knowledge artifacts',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changed: { type: 'boolean' },\n strict: { type: 'boolean' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'build-review-context',\n description:\n 'Build model-ready SMRT review context from changed files and optional focus text',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n },\n },\n },\n {\n name: 'build-domain-review-context',\n description:\n 'Build domain-scoped model-ready SMRT review context and prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'smrt-review',\n description:\n 'Return deterministic review findings and/or a reusable model prompt bundle. For a formal downstream review, first call get-agent-skill with { \"name\": \"smrt-code-review\" } or load the smrt-code-review MCP prompt/resource.',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n changedFiles: { type: 'array', items: { type: 'string' } },\n focus: { type: 'string' },\n documentation: { type: 'string' },\n mode: {\n type: 'string',\n enum: ['findings', 'prompt-bundle', 'both'],\n default: 'both',\n },\n },\n },\n },\n {\n name: 'build-architecture-context',\n description:\n 'Build model-ready SMRT architecture context from an idea or documentation',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n },\n },\n },\n {\n name: 'build-domain-architecture-context',\n description:\n 'Build domain-scoped model-ready SMRT architecture context and prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n scope: {\n type: 'string',\n enum: ['project', 'local', 'package', 'sdk'],\n default: 'project',\n },\n package: { type: 'string' },\n },\n },\n },\n {\n name: 'smrt-architecture',\n description:\n 'Suggest SMRT and HappyVertical SDK packages and return an architecture prompt bundle',\n inputSchema: {\n type: 'object',\n properties: {\n rootDir: { type: 'string' },\n idea: { type: 'string' },\n documentation: { type: 'string' },\n focus: { type: 'string' },\n },\n },\n },\n {\n name: 'list-agent-skills',\n description:\n 'List bundled harness-agnostic agent skills shipped with smrt-dev-mcp',\n inputSchema: {\n type: 'object',\n properties: {},\n },\n },\n {\n name: 'get-agent-skill',\n description:\n 'Return a bundled harness-agnostic agent skill as Markdown plus optional references',\n inputSchema: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n enum: [REVIEW_SKILL_NAME],\n description: 'Bundled agent skill name',\n },\n includeReferences: {\n type: 'boolean',\n default: true,\n description: 'Include referenced files with the skill bundle',\n },\n },\n required: ['name'],\n },\n },\n];\n\nasync function main() {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Starting server v${SERVER_VERSION}`);\n }\n\n const server = new Server(\n {\n name: SERVER_NAME,\n version: SERVER_VERSION,\n },\n {\n capabilities: {\n prompts: {},\n resources: {},\n tools: {},\n },\n },\n );\n\n // List tools handler\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] ListTools request`);\n }\n return { tools: TOOLS };\n });\n\n server.setRequestHandler(ListPromptsRequestSchema, async () => {\n return {\n prompts: [\n {\n name: REVIEW_SKILL_NAME,\n title: 'SMRT Code Review',\n description:\n 'Harness-agnostic downstream SMRT review procedure that uses smrt-dev-mcp deterministic context and prompt bundles.',\n },\n {\n name: DOMAIN_CODE_REVIEW_PROMPT,\n title: 'Domain Code Review',\n description:\n 'Model-ready domain-scoped SMRT code review prompt bundle.',\n arguments: [\n {\n name: 'rootDir',\n description: 'Project root directory. Defaults to server cwd.',\n required: false,\n },\n {\n name: 'changedFiles',\n description:\n 'Changed file paths as newline-separated, comma-separated, or JSON array text.',\n required: false,\n },\n {\n name: 'focus',\n description: 'Review focus text.',\n required: false,\n },\n {\n name: 'documentation',\n description: 'Additional documentation or notes.',\n required: false,\n },\n {\n name: 'scope',\n description: 'Knowledge scope: project, local, package, or sdk.',\n required: false,\n },\n {\n name: 'package',\n description: 'Package name or short package selector.',\n required: false,\n },\n ],\n },\n {\n name: DOMAIN_ARCHITECTURE_PROMPT,\n title: 'Domain Architecture',\n description:\n 'Model-ready domain-scoped SMRT architecture planning prompt bundle.',\n arguments: [\n {\n name: 'rootDir',\n description: 'Project root directory. Defaults to server cwd.',\n required: false,\n },\n {\n name: 'idea',\n description: 'Architecture idea or product concept.',\n required: false,\n },\n {\n name: 'documentation',\n description: 'Additional documentation or notes.',\n required: false,\n },\n {\n name: 'focus',\n description: 'Planning focus text.',\n required: false,\n },\n {\n name: 'scope',\n description: 'Knowledge scope: project, local, package, or sdk.',\n required: false,\n },\n {\n name: 'package',\n description: 'Package name or short package selector.',\n required: false,\n },\n ],\n },\n ],\n };\n });\n\n server.setRequestHandler(GetPromptRequestSchema, async (request) => {\n const { name } = request.params;\n if (name === REVIEW_SKILL_NAME) {\n return {\n description:\n 'Use this procedure when reviewing downstream SMRT projects.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: renderAgentSkillMarkdown(REVIEW_SKILL_NAME),\n },\n },\n ],\n };\n }\n\n if (name === DOMAIN_CODE_REVIEW_PROMPT) {\n const context = await buildReviewContext(\n reviewPromptArguments(request.params.arguments),\n );\n return {\n description: 'Review downstream SMRT code with domain knowledge.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: context.promptBundle.contextMarkdown,\n },\n },\n ],\n };\n }\n\n if (name === DOMAIN_ARCHITECTURE_PROMPT) {\n const context = await buildArchitectureContext(\n architecturePromptArguments(request.params.arguments),\n );\n return {\n description: 'Plan a downstream SMRT project with domain knowledge.',\n messages: [\n {\n role: 'user' as const,\n content: {\n type: 'text' as const,\n text: context.promptBundle.contextMarkdown,\n },\n },\n ],\n };\n }\n\n throw new McpError(ErrorCode.InvalidParams, `Unknown prompt: ${name}`);\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n const index = await buildKnowledgeIndex();\n return {\n resources: [\n {\n uri: REVIEW_SKILL_URI,\n name: REVIEW_SKILL_NAME,\n title: 'SMRT Code Review Skill',\n description:\n 'Bundled Markdown skill for downstream SMRT code reviews.',\n mimeType: 'text/markdown',\n },\n {\n uri: KNOWLEDGE_PROJECT_URI,\n name: 'smrt-domain-knowledge-project',\n title: 'SMRT Domain Knowledge Project Index',\n description:\n 'Composed SMRT, downstream domain, and HappyVertical SDK knowledge index.',\n mimeType: 'application/json',\n },\n ...index.packages.map((pkg) => ({\n uri: `${KNOWLEDGE_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n name: `smrt-domain-knowledge-${pkg.name}`,\n title: `SMRT Domain Knowledge: ${pkg.name}`,\n description:\n 'Package-scoped SMRT domain knowledge, generated surfaces, and authored context.',\n mimeType: 'application/json',\n })),\n ],\n };\n });\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n if (uri === REVIEW_SKILL_URI) {\n return {\n contents: [\n {\n uri,\n mimeType: 'text/markdown',\n text: renderAgentSkillMarkdown(REVIEW_SKILL_NAME),\n },\n ],\n };\n }\n\n if (uri === KNOWLEDGE_PROJECT_URI) {\n const index = await buildKnowledgeIndex();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(sanitizeKnowledgeIndex(index), null, 2),\n },\n ],\n };\n }\n\n if (uri.startsWith(KNOWLEDGE_PACKAGE_PREFIX)) {\n const packageName = decodeURIComponent(\n uri.slice(KNOWLEDGE_PACKAGE_PREFIX.length),\n );\n const index = await buildKnowledgeIndex();\n const pkg = index.packages.find((item) => item.name === packageName);\n if (!pkg) {\n throw new McpError(\n ErrorCode.InvalidParams,\n `Unknown knowledge package: ${packageName}`,\n );\n }\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(sanitizeKnowledgePackage(pkg), null, 2),\n },\n ],\n };\n }\n\n throw new McpError(ErrorCode.InvalidParams, `Unknown resource: ${uri}`);\n });\n\n // Call tool handler\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] CallTool: ${name}`);\n console.error(\n `[${SERVER_NAME}] Arguments:`,\n JSON.stringify(args, null, 2),\n );\n }\n\n try {\n let result: string;\n\n switch (name) {\n case 'generate-smrt-class':\n result = await generateSmrtClass(\n args as unknown as Parameters<typeof generateSmrtClass>[0],\n );\n break;\n\n case 'introspect-project':\n result = await introspectProject(\n args as unknown as Parameters<typeof introspectProject>[0],\n );\n break;\n\n case 'review-smrt-project':\n result = await reviewSmrtProject(\n args as unknown as Parameters<typeof reviewSmrtProject>[0],\n );\n break;\n\n case 'reflect-knowledge': {\n const index = await buildKnowledgeIndex(\n args as unknown as Parameters<typeof buildKnowledgeIndex>[0],\n );\n const freshness = await checkKnowledgeFreshnessFromIndex(\n index,\n args as unknown as Parameters<\n typeof checkKnowledgeFreshnessFromIndex\n >[1],\n );\n result = JSON.stringify(\n {\n rootDir: index.rootDir,\n packageCount: index.packages.length,\n smrtPackageCount: index.smrtPackages.length,\n sdkPackageCount: index.sdkPackages.length,\n relationshipsV2: index.relationshipsV2,\n freshness,\n },\n null,\n 2,\n );\n break;\n }\n\n case 'reflect-domain-knowledge': {\n const index = await buildKnowledgeIndex(\n args as unknown as Parameters<typeof buildKnowledgeIndex>[0],\n );\n const freshness = await checkKnowledgeFreshnessFromIndex(\n index,\n args as unknown as Parameters<\n typeof checkKnowledgeFreshnessFromIndex\n >[1],\n );\n result = JSON.stringify(\n {\n rootDir: index.rootDir,\n packageCount: index.packages.length,\n smrtPackageCount: index.smrtPackages.length,\n sdkPackageCount: index.sdkPackages.length,\n domainKnowledgePackageCount: index.packages.filter(\n (pkg) => pkg.hasDomainKnowledge,\n ).length,\n missingDomainKnowledgePackages: index.packages\n .filter(\n (pkg) =>\n pkg.exportKeys.includes('./smrt-knowledge.json') &&\n !pkg.hasDomainKnowledge,\n )\n .map((pkg) => pkg.name),\n relationshipsV2: index.relationshipsV2,\n freshness,\n },\n null,\n 2,\n );\n break;\n }\n\n case 'check-knowledge-freshness':\n result = JSON.stringify(\n await checkKnowledgeFreshness(\n args as unknown as Parameters<typeof checkKnowledgeFreshness>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'check-domain-knowledge':\n result = JSON.stringify(\n await checkKnowledgeFreshness(\n args as unknown as Parameters<typeof checkKnowledgeFreshness>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'build-review-context':\n result = JSON.stringify(\n await buildReviewContext(\n args as unknown as Parameters<typeof buildReviewContext>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'build-domain-review-context':\n result = JSON.stringify(\n await buildReviewContext(\n args as unknown as Parameters<typeof buildReviewContext>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'smrt-review':\n result = JSON.stringify(\n await smrtReview(\n args as unknown as Parameters<typeof smrtReview>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'build-architecture-context':\n result = JSON.stringify(\n await buildArchitectureContext(\n args as unknown as Parameters<typeof buildArchitectureContext>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'build-domain-architecture-context':\n result = JSON.stringify(\n await buildArchitectureContext(\n args as unknown as Parameters<typeof buildArchitectureContext>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'smrt-architecture':\n result = JSON.stringify(\n await smrtArchitecture(\n args as unknown as Parameters<typeof smrtArchitecture>[0],\n ),\n null,\n 2,\n );\n break;\n\n case 'list-agent-skills':\n result = JSON.stringify({ skills: listAgentSkills() }, null, 2);\n break;\n\n case 'get-agent-skill':\n result = JSON.stringify(\n await getAgentSkill(\n args as unknown as Parameters<typeof getAgentSkill>[0],\n ),\n null,\n 2,\n );\n break;\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: result,\n },\n ],\n };\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error';\n console.error(`[${SERVER_NAME}] Error:`, error);\n\n return {\n content: [\n {\n type: 'text',\n text: `Error executing tool ${name}: ${errorMessage}`,\n },\n ],\n isError: true,\n };\n }\n });\n\n // Setup stdio transport\n const transport = new StdioServerTransport();\n await server.connect(transport);\n\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Server connected via stdio`);\n }\n\n // Graceful shutdown\n process.on('SIGINT', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Shutting down...`);\n }\n await server.close();\n process.exit(0);\n });\n\n process.on('SIGTERM', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] Shutting down...`);\n }\n await server.close();\n process.exit(0);\n });\n}\n\nfunction isEntrypoint(): boolean {\n const entry = process.argv[1];\n if (!entry) return false;\n try {\n return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(entry);\n } catch {\n return import.meta.url === pathToFileURL(entry).href;\n }\n}\n\nfunction readPackageVersion(): string {\n try {\n const packageRoot = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(packageRoot, '..', 'package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as {\n version?: unknown;\n };\n return typeof packageJson.version === 'string'\n ? packageJson.version\n : '0.0.0';\n } catch {\n return '0.0.0';\n }\n}\n\nfunction renderAgentSkillMarkdown(name: string): string {\n const skill = getAgentSkill({ name, includeReferences: true });\n const references = skill.referenceFiles.map(\n (file) => `## Reference: ${file.path}\\n\\n${file.content.trim()}`,\n );\n return [skill.skillMarkdown.trim(), ...references].join('\\n\\n');\n}\n\nfunction reviewPromptArguments(args: PromptArguments): Record<string, unknown> {\n return compactRecord({\n rootDir: args?.rootDir,\n changedFiles: parseStringList(args?.changedFiles),\n focus: args?.focus,\n documentation: args?.documentation,\n scope: args?.scope,\n package: args?.package,\n });\n}\n\nfunction architecturePromptArguments(\n args: PromptArguments,\n): Record<string, unknown> {\n return compactRecord({\n rootDir: args?.rootDir,\n idea: args?.idea,\n documentation: args?.documentation,\n focus: args?.focus,\n scope: args?.scope,\n package: args?.package,\n });\n}\n\nfunction parseStringList(value: string | undefined): string[] | undefined {\n if (!value?.trim()) return undefined;\n\n try {\n const parsed = JSON.parse(value);\n if (Array.isArray(parsed)) {\n return parsed.filter((item): item is string => typeof item === 'string');\n }\n } catch {\n // Fall through to delimiter parsing.\n }\n\n return value\n .split(/[\\n,]/)\n .map((item) => item.trim())\n .filter(Boolean);\n}\n\nfunction compactRecord(\n value: Record<string, unknown>,\n): Record<string, unknown> {\n return Object.fromEntries(\n Object.entries(value).filter(([, entry]) => entry !== undefined),\n );\n}\n\nfunction sanitizeKnowledgeIndex(index: KnowledgeIndexResult) {\n const packages = index.packages.map((pkg) => sanitizeKnowledgePackage(pkg));\n return {\n ...index,\n rootDir: '.',\n packages,\n smrtPackages: packages.filter((pkg) => pkg.kind === 'smrt'),\n sdkPackages: packages.filter((pkg) => pkg.kind === 'sdk'),\n };\n}\n\nfunction sanitizeKnowledgePackage(pkg: KnowledgePackageResult) {\n const { directory: _directory, objects, ...rest } = pkg;\n return {\n ...rest,\n objects: objects.map((object) => ({\n ...object,\n filePath: sanitizePath(object.filePath),\n })),\n };\n}\n\nfunction sanitizePath(path: string | undefined): string | undefined {\n if (!path) return path;\n if (path.startsWith('/') || /^[A-Za-z]:[\\\\/]/.test(path)) {\n return '<absolute-path>';\n }\n return path;\n}\n\nif (isEntrypoint()) {\n main().catch((error) => {\n console.error(`[${SERVER_NAME}] Fatal error:`, error);\n process.exit(1);\n });\n}\n"],"names":["compactObject","pathExists","sanitizePath","listSourceFiles"],"mappings":"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"}