@happyvertical/smrt-dev-mcp 0.60.9 → 0.60.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/AGENTS.md +27 -1
  2. package/README.md +17 -1
  3. package/agents/intent-duplicates.md +26 -0
  4. package/dist/dev-plane.js +2 -2
  5. package/dist/{http-CCiO7qQW.js → http-BqKiyqgN.js} +2 -2
  6. package/dist/{http-CCiO7qQW.js.map → http-BqKiyqgN.js.map} +1 -1
  7. package/dist/index.js +12 -409
  8. package/dist/index.js.map +1 -1
  9. package/dist/knowledge/index.d.ts +1 -1
  10. package/dist/knowledge/index.d.ts.map +1 -1
  11. package/dist/knowledge/intents/audit-trail.md +63 -0
  12. package/dist/knowledge/intents/auth-and-users.md +67 -0
  13. package/dist/knowledge/intents/background-work.md +72 -0
  14. package/dist/knowledge/intents/feature-flags-and-entitlements.md +60 -0
  15. package/dist/knowledge/intents/file-and-asset-storage.md +71 -0
  16. package/dist/knowledge/intents/human-approvals.md +56 -0
  17. package/dist/knowledge/intents/index.md +41 -0
  18. package/dist/knowledge/intents/money-and-rates.md +65 -0
  19. package/dist/knowledge/intents/outbound-messages.md +67 -0
  20. package/dist/knowledge/intents/prompts-and-ai-operations.md +72 -0
  21. package/dist/knowledge/intents/relationships-and-trees.md +56 -0
  22. package/dist/knowledge/intents/scheduled-runs.md +61 -0
  23. package/dist/knowledge/intents/search-facts-knowledge.md +68 -0
  24. package/dist/knowledge/intents/secrets-and-config.md +66 -0
  25. package/dist/knowledge/intents/tenant-scoping.md +63 -0
  26. package/dist/knowledge/intents/webhooks-and-events.md +71 -0
  27. package/dist/knowledge/okf-bundle.d.ts +61 -0
  28. package/dist/knowledge/okf-bundle.d.ts.map +1 -0
  29. package/dist/{knowledge-DqoDX-lZ.js → knowledge-DUiMUjEg.js} +218 -3
  30. package/dist/knowledge-DUiMUjEg.js.map +1 -0
  31. package/dist/knowledge.js +2 -2
  32. package/dist/review-cli-DJIWUlFp.js +75 -0
  33. package/dist/review-cli-DJIWUlFp.js.map +1 -0
  34. package/dist/review-smrt-project-ByEwPcor.js +774 -0
  35. package/dist/review-smrt-project-ByEwPcor.js.map +1 -0
  36. package/dist/smrt-knowledge.okf.md +60 -0
  37. package/dist/{tool-catalog-RHq7nyCm.js → tool-catalog-BhnSCF8g.js} +11 -2
  38. package/dist/tool-catalog-BhnSCF8g.js.map +1 -0
  39. package/dist/tool-catalog.d.ts.map +1 -1
  40. package/dist/tools/intent-detector.d.ts +57 -0
  41. package/dist/tools/intent-detector.d.ts.map +1 -0
  42. package/dist/tools/intent-index.d.ts +40 -0
  43. package/dist/tools/intent-index.d.ts.map +1 -0
  44. package/dist/tools/review-cli.d.ts +40 -0
  45. package/dist/tools/review-cli.d.ts.map +1 -0
  46. package/dist/tools/review-smrt-project.d.ts +25 -0
  47. package/dist/tools/review-smrt-project.d.ts.map +1 -1
  48. package/package.json +6 -6
  49. package/dist/knowledge-DqoDX-lZ.js.map +0 -1
  50. package/dist/tool-catalog-RHq7nyCm.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/agent-skills.ts","../src/tools/generate-smrt-class.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: 'skills/smrt-code-review/SKILL.md',\n skillFile: 'skills/smrt-code-review/SKILL.md',\n references: ['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 * 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","import { ProjectRuntimeResolutionError } from './tools/runtime/project-runtime.js';\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 { realpathSync } from 'node:fs';\n\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport {\n ProtocolError,\n ProtocolErrorCode,\n Server,\n} from '@modelcontextprotocol/server';\nimport { serveStdio } from '@modelcontextprotocol/server/stdio';\nimport { getAgentSkill, listAgentSkills } from './agent-skills.js';\nimport { startRuntimeHttpHost } from './http.js';\nimport {\n buildArchitectureContext,\n buildContext,\n buildKnowledgeIndex,\n buildPackageSpecialistContext,\n buildReviewContext,\n checkKnowledgeFreshness,\n checkKnowledgeFreshnessFromIndex,\n compactContextResult,\n} from './knowledge/index.js';\nimport { SERVER_NAME, SERVER_VERSION } from './server-info.js';\nimport { REVIEW_SKILL_NAME, TOOLS } from './tool-catalog.js';\nimport { generateSmrtClass } from './tools/generate-smrt-class.js';\nimport { reviewSmrtProject } from './tools/review-smrt-project.js';\nimport { redactConnectionString } from './tools/runtime/connection.js';\n\nexport { SERVER_VERSION } from './server-info.js';\nexport { TOOLS } from './tool-catalog.js';\n\nconst DEBUG = process.env.DEBUG === 'true';\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/';\nconst DEPLOY_STATIC_CATALOG_CACHE_HINT = {\n ttlMs: 86_400_000,\n cacheScope: 'private' as const,\n};\n// Knowledge resources are rebuilt from the workspace on every request. There\n// is no transport-visible project-graph invalidation signal, so a nonzero TTL\n// would promise stale data could not be served after an edit.\nconst LIVE_KNOWLEDGE_CACHE_HINT = {\n ttlMs: 0,\n cacheScope: 'private' as const,\n};\nconst WORKBENCH_PROJECT_URI = 'smrt://workbench/project';\nconst WORKBENCH_PACKAGE_PREFIX = 'smrt://workbench/package/';\nconst WORKBENCH_SPECIALIST_SUFFIX = '/specialist';\n\ntype KnowledgeIndexResult = Awaited<ReturnType<typeof buildKnowledgeIndex>>;\ntype KnowledgePackageResult = KnowledgeIndexResult['packages'][number];\ntype PackageSpecialistResult = Awaited<\n ReturnType<typeof buildPackageSpecialistContext>\n>;\ntype PromptArguments = Record<string, string> | undefined;\n\nexport function createServer(): Server {\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 cacheHints: {\n 'tools/list': DEPLOY_STATIC_CATALOG_CACHE_HINT,\n 'prompts/list': DEPLOY_STATIC_CATALOG_CACHE_HINT,\n 'resources/list': LIVE_KNOWLEDGE_CACHE_HINT,\n 'resources/read': LIVE_KNOWLEDGE_CACHE_HINT,\n },\n },\n );\n\n // List tools handler\n server.setRequestHandler('tools/list', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] ListTools request`);\n }\n return { tools: TOOLS };\n });\n\n server.setRequestHandler('prompts/list', 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:\n 'Knowledge scope: project, local, package, sdk, or installed.',\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:\n 'Knowledge scope: project, local, package, sdk, or installed.',\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('prompts/get', 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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown prompt: ${name}`,\n );\n });\n\n server.setRequestHandler('resources/list', 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 {\n uri: WORKBENCH_PROJECT_URI,\n name: 'smrt-workbench-project',\n title: 'SMRT Workbench Project',\n description:\n 'Workbench-facing package and knowledge resource index for the current project.',\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 ...index.packages\n .filter((pkg) => pkg.kind !== 'sdk')\n .flatMap((pkg) => [\n {\n uri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n name: `smrt-workbench-${pkg.name}`,\n title: `SMRT Workbench Package: ${pkg.name}`,\n description:\n 'Workbench package resource with docs, manifest, knowledge, scripts, and surface metadata.',\n mimeType: 'application/json',\n },\n {\n uri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n name: `smrt-workbench-specialist-${pkg.name}`,\n title: `SMRT Package Specialist: ${pkg.name}`,\n description:\n 'Deterministic package specialist prompt bundle and source list.',\n mimeType: 'application/json',\n },\n ]),\n ],\n };\n });\n\n server.setRequestHandler('resources/read', 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 === WORKBENCH_PROJECT_URI) {\n const index = await buildKnowledgeIndex();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n project: sanitizeKnowledgeIndex(index),\n workbenchResources: index.packages\n .filter((pkg) => pkg.kind !== 'sdk')\n .map((pkg) => ({\n packageName: pkg.name,\n packageUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n specialistUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n })),\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n if (\n uri.startsWith(WORKBENCH_PACKAGE_PREFIX) &&\n uri.endsWith(WORKBENCH_SPECIALIST_SUFFIX)\n ) {\n const packageName = decodeURIComponent(\n uri.slice(\n WORKBENCH_PACKAGE_PREFIX.length,\n -WORKBENCH_SPECIALIST_SUFFIX.length,\n ),\n );\n const specialist = await buildPackageSpecialistContext({\n package: packageName,\n });\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n sanitizePackageSpecialist(specialist),\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n if (uri.startsWith(WORKBENCH_PACKAGE_PREFIX)) {\n const packageName = decodeURIComponent(\n uri.slice(WORKBENCH_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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown workbench package: ${packageName}`,\n );\n }\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n package: sanitizeKnowledgePackage(pkg),\n specialistUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n },\n null,\n 2,\n ),\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 ProtocolError(\n ProtocolErrorCode.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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown resource: ${uri}`,\n );\n });\n\n // Call tool handler\n server.setRequestHandler('tools/call', 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(redactDebugArguments(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 (\n await import('./tools/introspect-project.js')\n ).introspectProject(args as never);\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 coverage: index.coverage,\n diagnostics: index.diagnostics,\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 coverage: index.coverage,\n diagnostics: index.diagnostics,\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 'build-context':\n result = JSON.stringify(\n compactContextResult(\n await buildContext(\n args as unknown as Parameters<typeof buildContext>[0],\n ),\n detailArg(args),\n ),\n null,\n 2,\n );\n break;\n\n case 'smrt-review':\n case 'smrt-architecture': {\n // One-release compatibility names for build-context (#2780).\n const task = name === 'smrt-review' ? 'review' : 'architecture';\n const context = compactContextResult(\n await buildContext({\n ...(args as Record<string, unknown>),\n task,\n } as unknown as Parameters<typeof buildContext>[0]),\n detailArg(args),\n ) as Record<string, unknown> & { diagnostics?: unknown[] };\n context.diagnostics = [\n ...(Array.isArray(context.diagnostics) ? context.diagnostics : []),\n {\n severity: 'info',\n code: 'deprecated_tool_name',\n message: `${name} is a compatibility name; call build-context with task: '${task}'. It will be removed in the next minor release.`,\n },\n ];\n result = JSON.stringify(context, null, 2);\n break;\n }\n\n case 'build-package-specialist-context':\n result = JSON.stringify(\n sanitizePackageSpecialist(\n await buildPackageSpecialistContext(\n args as unknown as Parameters<\n typeof buildPackageSpecialistContext\n >[0],\n ),\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 case 'migration-status':\n case 'job-health':\n case 'schedule-health':\n case 'dispatch-health':\n case 'recent-changes':\n case 'registry-drift': {\n const runtime = await import('./tools/runtime/tools.js');\n const handlers = {\n 'migration-status': runtime.runtimeMigrationStatus,\n 'job-health': runtime.runtimeJobHealth,\n 'schedule-health': runtime.runtimeScheduleHealth,\n 'dispatch-health': runtime.runtimeDispatchHealth,\n 'recent-changes': runtime.runtimeRecentChanges,\n 'registry-drift': runtime.runtimeRegistryDrift,\n };\n result = JSON.stringify(await handlers[name](args as never), null, 2);\n break;\n }\n\n case 'runtime-registry':\n case 'runtime-object':\n case 'runtime-schema-diff': {\n const observation = await import('./tools/runtime/observation.js');\n const handlers = {\n 'runtime-registry': observation.runtimeRegistry,\n 'runtime-object': observation.runtimeObject,\n 'runtime-schema-diff': observation.runtimeSchemaDiff,\n };\n result = JSON.stringify(await handlers[name](args as never), null, 2);\n break;\n }\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 structuredContent: toDevToolStructuredContent(result),\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 structuredContent: {\n ok: false,\n coverage: null,\n diagnostics: [\n {\n severity: 'error',\n ...(error instanceof ProjectRuntimeResolutionError\n ? { code: error.code }\n : {}),\n message: errorMessage,\n },\n ],\n data: null,\n },\n };\n }\n });\n\n return server;\n}\n\nasync function main() {\n const handle = serveStdio(() => createServer(), {\n onerror: (error) =>\n console.error(`[${SERVER_NAME}] Protocol error:`, error),\n });\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 handle.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 handle.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 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 // Rebuilt from the sanitized list rather than carried over by the spread.\n // Installed dependencies live outside the project root, so theirs are the\n // absolute host paths this projection exists to strip (#2275).\n installedPackages: packages.filter((pkg) => pkg.isInstalledDependency),\n };\n}\n\nfunction detailArg(args: unknown): string | undefined {\n const detail = (args as Record<string, unknown> | undefined)?.detail;\n return typeof detail === 'string' ? detail : undefined;\n}\n\n/**\n * Debug logging happens before any tool runs its own redaction, so a\n * credential-bearing `dbUrl` argument must be masked here.\n */\nfunction redactDebugArguments(args: unknown): unknown {\n if (!isRecord(args) || typeof args.dbUrl !== 'string') return args;\n return { ...args, dbUrl: redactConnectionString(args.dbUrl) };\n}\n\nfunction isRuntimeEnvelope(value: unknown): value is {\n ok: boolean;\n coverage: unknown;\n diagnostics: unknown[];\n data: unknown;\n} {\n return (\n isRecord(value) &&\n typeof value.ok === 'boolean' &&\n 'coverage' in value &&\n Array.isArray(value.diagnostics) &&\n 'data' in value\n );\n}\n\nfunction toDevToolStructuredContent(result: string) {\n let data: unknown = result;\n try {\n data = JSON.parse(result);\n } catch {\n // `generate-smrt-class` intentionally returns source text, not JSON.\n }\n\n // Runtime diagnostics tools already return the `{ok, coverage, diagnostics,\n // data}` envelope; re-wrapping would expose `data.data.*` in\n // structuredContent while the text response exposes `data.*`.\n if (isRuntimeEnvelope(data)) {\n return data;\n }\n\n const source = isRecord(data) ? data : undefined;\n const coverage = isRecord(source?.coverage) ? source.coverage : null;\n const diagnostics = Array.isArray(source?.diagnostics)\n ? source.diagnostics.filter(isRecord)\n : [];\n return { ok: true, coverage, diagnostics, data };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction sanitizeKnowledgePackage(pkg: KnowledgePackageResult) {\n const { directory: _directory, objects, checkedObjectPaths, ...rest } = pkg;\n return {\n ...rest,\n // Paths outside the workspace root stay absolute in the index; redact them\n // here the same way object file paths are redacted.\n checkedObjectPaths: checkedObjectPaths.map(\n (path) => sanitizePath(path) ?? path,\n ),\n objects: objects.map((object) => ({\n ...object,\n filePath: sanitizePath(object.filePath),\n })),\n };\n}\n\nfunction sanitizePackageSpecialist(specialist: PackageSpecialistResult) {\n return {\n selectedPackage: sanitizeKnowledgePackage(specialist.selectedPackage),\n selectedSdkPackages: specialist.selectedSdkPackages.map((pkg) =>\n sanitizeKnowledgePackage(pkg),\n ),\n promptBundle: {\n ...specialist.promptBundle,\n contextMarkdown: specialist.promptBundle.contextMarkdown.replace(\n /^Baseline root: .+$/m,\n 'Baseline root: .',\n ),\n sourceFiles: sanitizePaths(specialist.promptBundle.sourceFiles),\n },\n sourceFiles: sanitizePaths(specialist.sourceFiles),\n };\n}\n\nfunction sanitizePaths(paths: string[]): string[] {\n return paths\n .map(sanitizePath)\n .filter((path): path is string => typeof path === 'string');\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\n/**\n * `smrt-dev-mcp --http [--port N] [--project DIR]` starts the Level 2 runtime\n * dev-plane host (#1831) instead of the stdio server. Loopback-only, bearer\n * protected, positive read-only catalog; see `http.ts`.\n */\nexport function parseHttpCliArgs(argv: readonly string[]): {\n http: boolean;\n port?: number;\n projectRoot?: string;\n} {\n const result: { http: boolean; port?: number; projectRoot?: string } = {\n http: false,\n };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === '--http') result.http = true;\n else if (arg === '--port') {\n const value = Number.parseInt(argv[index + 1] ?? '', 10);\n if (!Number.isInteger(value) || value < 0 || value > 65535) {\n throw new Error('--port requires an integer between 0 and 65535');\n }\n result.port = value;\n index += 1;\n } else if (arg === '--project') {\n const value = argv[index + 1];\n if (!value) throw new Error('--project requires a directory');\n result.projectRoot = value;\n index += 1;\n }\n }\n return result;\n}\n\nasync function mainHttp(cli: ReturnType<typeof parseHttpCliArgs>) {\n const host = await startRuntimeHttpHost({\n port: cli.port,\n projectRoot: cli.projectRoot,\n });\n // The token is printed exactly once, to stderr, only when this process\n // minted it; a token supplied via SMRT_DEV_MCP_TOKEN is never echoed.\n const minted = !process.env.SMRT_DEV_MCP_TOKEN?.trim();\n console.error(\n `[${SERVER_NAME}] runtime dev-plane listening at ${host.url} (${host.boot.objectCount} booted objects, ${host.boot.manifests.length} manifests)`,\n );\n if (minted) {\n console.error(`[${SERVER_NAME}] bearer token: ${host.token}`);\n }\n const shutdown = async () => {\n await host.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n\nif (isEntrypoint()) {\n const cli = parseHttpCliArgs(process.argv.slice(2));\n (cli.http ? mainHttp(cli) : main()).catch((error) => {\n console.error(`[${SERVER_NAME}] Fatal error:`, error);\n process.exit(1);\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/agent-skills.ts","../src/tools/generate-smrt-class.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: 'skills/smrt-code-review/SKILL.md',\n skillFile: 'skills/smrt-code-review/SKILL.md',\n references: ['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","import { ProjectRuntimeResolutionError } from './tools/runtime/project-runtime.js';\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 { realpathSync } from 'node:fs';\n\nimport { fileURLToPath, pathToFileURL } from 'node:url';\nimport {\n ProtocolError,\n ProtocolErrorCode,\n Server,\n} from '@modelcontextprotocol/server';\nimport { serveStdio } from '@modelcontextprotocol/server/stdio';\nimport { getAgentSkill, listAgentSkills } from './agent-skills.js';\nimport { startRuntimeHttpHost } from './http.js';\nimport {\n buildArchitectureContext,\n buildContext,\n buildKnowledgeIndex,\n buildPackageSpecialistContext,\n buildReviewContext,\n checkKnowledgeFreshness,\n checkKnowledgeFreshnessFromIndex,\n compactContextResult,\n} from './knowledge/index.js';\nimport { SERVER_NAME, SERVER_VERSION } from './server-info.js';\nimport { REVIEW_SKILL_NAME, TOOLS } from './tool-catalog.js';\nimport { generateSmrtClass } from './tools/generate-smrt-class.js';\nimport { reviewSmrtProject } from './tools/review-smrt-project.js';\nimport { redactConnectionString } from './tools/runtime/connection.js';\n\nexport { SERVER_VERSION } from './server-info.js';\nexport { TOOLS } from './tool-catalog.js';\n\nconst DEBUG = process.env.DEBUG === 'true';\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/';\nconst DEPLOY_STATIC_CATALOG_CACHE_HINT = {\n ttlMs: 86_400_000,\n cacheScope: 'private' as const,\n};\n// Knowledge resources are rebuilt from the workspace on every request. There\n// is no transport-visible project-graph invalidation signal, so a nonzero TTL\n// would promise stale data could not be served after an edit.\nconst LIVE_KNOWLEDGE_CACHE_HINT = {\n ttlMs: 0,\n cacheScope: 'private' as const,\n};\nconst WORKBENCH_PROJECT_URI = 'smrt://workbench/project';\nconst WORKBENCH_PACKAGE_PREFIX = 'smrt://workbench/package/';\nconst WORKBENCH_SPECIALIST_SUFFIX = '/specialist';\n\ntype KnowledgeIndexResult = Awaited<ReturnType<typeof buildKnowledgeIndex>>;\ntype KnowledgePackageResult = KnowledgeIndexResult['packages'][number];\ntype PackageSpecialistResult = Awaited<\n ReturnType<typeof buildPackageSpecialistContext>\n>;\ntype PromptArguments = Record<string, string> | undefined;\n\nexport function createServer(): Server {\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 cacheHints: {\n 'tools/list': DEPLOY_STATIC_CATALOG_CACHE_HINT,\n 'prompts/list': DEPLOY_STATIC_CATALOG_CACHE_HINT,\n 'resources/list': LIVE_KNOWLEDGE_CACHE_HINT,\n 'resources/read': LIVE_KNOWLEDGE_CACHE_HINT,\n },\n },\n );\n\n // List tools handler\n server.setRequestHandler('tools/list', async () => {\n if (DEBUG) {\n console.error(`[${SERVER_NAME}] ListTools request`);\n }\n return { tools: TOOLS };\n });\n\n server.setRequestHandler('prompts/list', 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:\n 'Knowledge scope: project, local, package, sdk, or installed.',\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:\n 'Knowledge scope: project, local, package, sdk, or installed.',\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('prompts/get', 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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown prompt: ${name}`,\n );\n });\n\n server.setRequestHandler('resources/list', 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 {\n uri: WORKBENCH_PROJECT_URI,\n name: 'smrt-workbench-project',\n title: 'SMRT Workbench Project',\n description:\n 'Workbench-facing package and knowledge resource index for the current project.',\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 ...index.packages\n .filter((pkg) => pkg.kind !== 'sdk')\n .flatMap((pkg) => [\n {\n uri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n name: `smrt-workbench-${pkg.name}`,\n title: `SMRT Workbench Package: ${pkg.name}`,\n description:\n 'Workbench package resource with docs, manifest, knowledge, scripts, and surface metadata.',\n mimeType: 'application/json',\n },\n {\n uri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n name: `smrt-workbench-specialist-${pkg.name}`,\n title: `SMRT Package Specialist: ${pkg.name}`,\n description:\n 'Deterministic package specialist prompt bundle and source list.',\n mimeType: 'application/json',\n },\n ]),\n ],\n };\n });\n\n server.setRequestHandler('resources/read', 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 === WORKBENCH_PROJECT_URI) {\n const index = await buildKnowledgeIndex();\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n project: sanitizeKnowledgeIndex(index),\n workbenchResources: index.packages\n .filter((pkg) => pkg.kind !== 'sdk')\n .map((pkg) => ({\n packageName: pkg.name,\n packageUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}`,\n specialistUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n })),\n },\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n if (\n uri.startsWith(WORKBENCH_PACKAGE_PREFIX) &&\n uri.endsWith(WORKBENCH_SPECIALIST_SUFFIX)\n ) {\n const packageName = decodeURIComponent(\n uri.slice(\n WORKBENCH_PACKAGE_PREFIX.length,\n -WORKBENCH_SPECIALIST_SUFFIX.length,\n ),\n );\n const specialist = await buildPackageSpecialistContext({\n package: packageName,\n });\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n sanitizePackageSpecialist(specialist),\n null,\n 2,\n ),\n },\n ],\n };\n }\n\n if (uri.startsWith(WORKBENCH_PACKAGE_PREFIX)) {\n const packageName = decodeURIComponent(\n uri.slice(WORKBENCH_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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown workbench package: ${packageName}`,\n );\n }\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: JSON.stringify(\n {\n package: sanitizeKnowledgePackage(pkg),\n specialistUri: `${WORKBENCH_PACKAGE_PREFIX}${encodeURIComponent(pkg.name)}${WORKBENCH_SPECIALIST_SUFFIX}`,\n },\n null,\n 2,\n ),\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 ProtocolError(\n ProtocolErrorCode.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 ProtocolError(\n ProtocolErrorCode.InvalidParams,\n `Unknown resource: ${uri}`,\n );\n });\n\n // Call tool handler\n server.setRequestHandler('tools/call', 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(redactDebugArguments(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 (\n await import('./tools/introspect-project.js')\n ).introspectProject(args as never);\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 coverage: index.coverage,\n diagnostics: index.diagnostics,\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 coverage: index.coverage,\n diagnostics: index.diagnostics,\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 'build-context':\n result = JSON.stringify(\n compactContextResult(\n await buildContext(\n args as unknown as Parameters<typeof buildContext>[0],\n ),\n detailArg(args),\n ),\n null,\n 2,\n );\n break;\n\n case 'smrt-review':\n case 'smrt-architecture': {\n // One-release compatibility names for build-context (#2780).\n const task = name === 'smrt-review' ? 'review' : 'architecture';\n const context = compactContextResult(\n await buildContext({\n ...(args as Record<string, unknown>),\n task,\n } as unknown as Parameters<typeof buildContext>[0]),\n detailArg(args),\n ) as Record<string, unknown> & { diagnostics?: unknown[] };\n context.diagnostics = [\n ...(Array.isArray(context.diagnostics) ? context.diagnostics : []),\n {\n severity: 'info',\n code: 'deprecated_tool_name',\n message: `${name} is a compatibility name; call build-context with task: '${task}'. It will be removed in the next minor release.`,\n },\n ];\n result = JSON.stringify(context, null, 2);\n break;\n }\n\n case 'build-package-specialist-context':\n result = JSON.stringify(\n sanitizePackageSpecialist(\n await buildPackageSpecialistContext(\n args as unknown as Parameters<\n typeof buildPackageSpecialistContext\n >[0],\n ),\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 case 'migration-status':\n case 'job-health':\n case 'schedule-health':\n case 'dispatch-health':\n case 'recent-changes':\n case 'registry-drift': {\n const runtime = await import('./tools/runtime/tools.js');\n const handlers = {\n 'migration-status': runtime.runtimeMigrationStatus,\n 'job-health': runtime.runtimeJobHealth,\n 'schedule-health': runtime.runtimeScheduleHealth,\n 'dispatch-health': runtime.runtimeDispatchHealth,\n 'recent-changes': runtime.runtimeRecentChanges,\n 'registry-drift': runtime.runtimeRegistryDrift,\n };\n result = JSON.stringify(await handlers[name](args as never), null, 2);\n break;\n }\n\n case 'runtime-registry':\n case 'runtime-object':\n case 'runtime-schema-diff': {\n const observation = await import('./tools/runtime/observation.js');\n const handlers = {\n 'runtime-registry': observation.runtimeRegistry,\n 'runtime-object': observation.runtimeObject,\n 'runtime-schema-diff': observation.runtimeSchemaDiff,\n };\n result = JSON.stringify(await handlers[name](args as never), null, 2);\n break;\n }\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 structuredContent: toDevToolStructuredContent(result),\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 structuredContent: {\n ok: false,\n coverage: null,\n diagnostics: [\n {\n severity: 'error',\n ...(error instanceof ProjectRuntimeResolutionError\n ? { code: error.code }\n : {}),\n message: errorMessage,\n },\n ],\n data: null,\n },\n };\n }\n });\n\n return server;\n}\n\nasync function main() {\n const handle = serveStdio(() => createServer(), {\n onerror: (error) =>\n console.error(`[${SERVER_NAME}] Protocol error:`, error),\n });\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 handle.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 handle.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 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 // Rebuilt from the sanitized list rather than carried over by the spread.\n // Installed dependencies live outside the project root, so theirs are the\n // absolute host paths this projection exists to strip (#2275).\n installedPackages: packages.filter((pkg) => pkg.isInstalledDependency),\n };\n}\n\nfunction detailArg(args: unknown): string | undefined {\n const detail = (args as Record<string, unknown> | undefined)?.detail;\n return typeof detail === 'string' ? detail : undefined;\n}\n\n/**\n * Debug logging happens before any tool runs its own redaction, so a\n * credential-bearing `dbUrl` argument must be masked here.\n */\nfunction redactDebugArguments(args: unknown): unknown {\n if (!isRecord(args) || typeof args.dbUrl !== 'string') return args;\n return { ...args, dbUrl: redactConnectionString(args.dbUrl) };\n}\n\nfunction isRuntimeEnvelope(value: unknown): value is {\n ok: boolean;\n coverage: unknown;\n diagnostics: unknown[];\n data: unknown;\n} {\n return (\n isRecord(value) &&\n typeof value.ok === 'boolean' &&\n 'coverage' in value &&\n Array.isArray(value.diagnostics) &&\n 'data' in value\n );\n}\n\nfunction toDevToolStructuredContent(result: string) {\n let data: unknown = result;\n try {\n data = JSON.parse(result);\n } catch {\n // `generate-smrt-class` intentionally returns source text, not JSON.\n }\n\n // Runtime diagnostics tools already return the `{ok, coverage, diagnostics,\n // data}` envelope; re-wrapping would expose `data.data.*` in\n // structuredContent while the text response exposes `data.*`.\n if (isRuntimeEnvelope(data)) {\n return data;\n }\n\n const source = isRecord(data) ? data : undefined;\n const coverage = isRecord(source?.coverage) ? source.coverage : null;\n const diagnostics = Array.isArray(source?.diagnostics)\n ? source.diagnostics.filter(isRecord)\n : [];\n return { ok: true, coverage, diagnostics, data };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction sanitizeKnowledgePackage(pkg: KnowledgePackageResult) {\n const { directory: _directory, objects, checkedObjectPaths, ...rest } = pkg;\n return {\n ...rest,\n // Paths outside the workspace root stay absolute in the index; redact them\n // here the same way object file paths are redacted.\n checkedObjectPaths: checkedObjectPaths.map(\n (path) => sanitizePath(path) ?? path,\n ),\n objects: objects.map((object) => ({\n ...object,\n filePath: sanitizePath(object.filePath),\n })),\n };\n}\n\nfunction sanitizePackageSpecialist(specialist: PackageSpecialistResult) {\n return {\n selectedPackage: sanitizeKnowledgePackage(specialist.selectedPackage),\n selectedSdkPackages: specialist.selectedSdkPackages.map((pkg) =>\n sanitizeKnowledgePackage(pkg),\n ),\n promptBundle: {\n ...specialist.promptBundle,\n contextMarkdown: specialist.promptBundle.contextMarkdown.replace(\n /^Baseline root: .+$/m,\n 'Baseline root: .',\n ),\n sourceFiles: sanitizePaths(specialist.promptBundle.sourceFiles),\n },\n sourceFiles: sanitizePaths(specialist.sourceFiles),\n };\n}\n\nfunction sanitizePaths(paths: string[]): string[] {\n return paths\n .map(sanitizePath)\n .filter((path): path is string => typeof path === 'string');\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\n/**\n * `smrt-dev-mcp --http [--port N] [--project DIR]` starts the Level 2 runtime\n * dev-plane host (#1831) instead of the stdio server. Loopback-only, bearer\n * protected, positive read-only catalog; see `http.ts`.\n */\nexport function parseHttpCliArgs(argv: readonly string[]): {\n http: boolean;\n port?: number;\n projectRoot?: string;\n} {\n const result: { http: boolean; port?: number; projectRoot?: string } = {\n http: false,\n };\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === '--http') result.http = true;\n else if (arg === '--port') {\n const value = Number.parseInt(argv[index + 1] ?? '', 10);\n if (!Number.isInteger(value) || value < 0 || value > 65535) {\n throw new Error('--port requires an integer between 0 and 65535');\n }\n result.port = value;\n index += 1;\n } else if (arg === '--project') {\n const value = argv[index + 1];\n if (!value) throw new Error('--project requires a directory');\n result.projectRoot = value;\n index += 1;\n }\n }\n return result;\n}\n\nasync function mainHttp(cli: ReturnType<typeof parseHttpCliArgs>) {\n const host = await startRuntimeHttpHost({\n port: cli.port,\n projectRoot: cli.projectRoot,\n });\n // The token is printed exactly once, to stderr, only when this process\n // minted it; a token supplied via SMRT_DEV_MCP_TOKEN is never echoed.\n const minted = !process.env.SMRT_DEV_MCP_TOKEN?.trim();\n console.error(\n `[${SERVER_NAME}] runtime dev-plane listening at ${host.url} (${host.boot.objectCount} booted objects, ${host.boot.manifests.length} manifests)`,\n );\n if (minted) {\n console.error(`[${SERVER_NAME}] bearer token: ${host.token}`);\n }\n const shutdown = async () => {\n await host.close();\n process.exit(0);\n };\n process.on('SIGINT', shutdown);\n process.on('SIGTERM', shutdown);\n}\n\nif (isEntrypoint()) {\n if (process.argv[2] === 'review') {\n // `smrt-dev-mcp review ...`: one-shot advisory review for CI (#4690).\n import('./tools/review-cli.js')\n .then(({ runReviewCli }) => runReviewCli(process.argv.slice(3)))\n .then((code) => {\n process.exitCode = code;\n })\n .catch((error) => {\n console.error(`[${SERVER_NAME}] review failed:`, error);\n process.exit(1);\n });\n } else {\n const cli = parseHttpCliArgs(process.argv.slice(2));\n (cli.http ? mainHttp(cli) : main()).catch((error) => {\n console.error(`[${SERVER_NAME}] Fatal error:`, error);\n process.exit(1);\n });\n }\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { DomainKnowledgeAgentSurface, DomainKnowledgeField, DomainKnowledgeManifest, DomainKnowledgeMethodSignature, DomainKnowledgeModuleDoc, DomainKnowledgeTenant } from '@happyvertical/smrt-types';
2
+ export * from './okf-bundle.js';
2
3
  export type KnowledgePackageKind = 'smrt' | 'sdk' | 'workspace';
3
4
  export type KnowledgeIssueSeverity = 'info' | 'error' | 'warning';
4
5
  /**
@@ -338,5 +339,4 @@ export declare function coreCompatibleToSnakeCase(value: string): string;
338
339
  * tools unusable as planning aids. `detail: "complete"` returns the whole shape.
339
340
  */
340
341
  export declare function compactContextResult(result: object, detail: string | undefined): Record<string, unknown>;
341
- export {};
342
342
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/knowledge/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ ---
2
+ type: Capability
3
+ title: "Audit trail and change feed"
4
+ description: "Use @smrt({ audit }) for who-changed-what records and the _smrt_changes feed for observing writes, instead of history tables or triggers."
5
+ tags:
6
+ - smrt
7
+ - intent
8
+ status: draft
9
+ generated:
10
+ by: claude/smrt-4687
11
+ at: 2026-11-05T00:00:00Z
12
+ stale_after: 2027-02-03T00:00:00Z
13
+ audience: internal
14
+ evidence_level: source-inspected
15
+ package_version: 0.60.8
16
+ sources:
17
+ - id: s1
18
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/core/src/audit.ts
19
+ path: packages/core/src/audit.ts
20
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
21
+ title: "packages/core/src/audit.ts (requireAuditOptions, auditSnapshot, writeAudit, AuditWriter)"
22
+ - id: s2
23
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/core/src/change-feed.ts
24
+ path: packages/core/src/change-feed.ts
25
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
26
+ title: "packages/core/src/change-feed.ts (appendChange, getChangesSince, getTenantScopedChangesSince)"
27
+ - id: s3
28
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/core/src/change-feed-sensitivity.ts
29
+ path: packages/core/src/change-feed-sensitivity.ts
30
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
31
+ title: "packages/core/src/change-feed-sensitivity.ts (sensitive tables)"
32
+ - id: s4
33
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/smrt-dev-mcp/src/tool-catalog.ts
34
+ path: packages/smrt-dev-mcp/src/tool-catalog.ts
35
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
36
+ title: "packages/smrt-dev-mcp/src/tool-catalog.ts (recent-changes tool)"
37
+ ---
38
+
39
+ # Audit trail and change feed
40
+
41
+ # Entry point
42
+
43
+ Two different things. Audit (who changed which fields): put `audit: true` in the model's `@smrt()` config and bind identity with `withAuditContext({ actorId, writer, reason, source }, fn)` from `@happyvertical/smrt-core`; the `writer` receives an `AuditEntry` with per-field before/after. Change feed (what changed, in order): every framework `save()`/`delete()` appends a row to `_smrt_changes`; read it with `getChangesSince(db, { since, tables, limit })` or, for request handlers, `getTenantScopedChangesSince()`. For a deployed database, the `recent-changes` tool of `smrt-dev-mcp` tails the same table read-only.[^s4]
44
+
45
+ # Why not hand-roll it
46
+
47
+ `requireAuditOptions()` in `audit.ts` throws when an audited mutation has no writer or no authenticated `actorId`, `auditSnapshot()` records the public projection so credential and permission-gated fields never enter the audit row, `writeAudit()` refuses an entity with ambiguous tenant ownership, and the writer contract requires using the same transaction handle and propagating failures.[^s1] The change feed in `change-feed.ts` allocates `seq` as `MAX(seq)+1` inside the append rather than a native identity column, so a polling cursor cannot skip a change under concurrent writers on SQLite, PostgreSQL or DuckDB; deletes are tombstones, and `getTenantScopedChangesSince()` fails closed to global rows when tenancy is on and no tenant is active.[^s2] Credential-bearing tables are refused by the feed (`change-feed-sensitivity.ts`) because a row id such as a session id is itself a secret.[^s3]
48
+
49
+ # Component pages
50
+
51
+ - [smrt-core](/components/smrt-core.md)
52
+ - [smrt-dev-mcp](/components/smrt-dev-mcp.md)
53
+
54
+ # Detection signals
55
+
56
+ - `regex:audit_?log`
57
+ - `regex:audit_?trail`
58
+ - `regex:CREATE TABLE\s+\w*audit`
59
+
60
+ [^s1]: `packages/core/src/audit.ts` at `478ae36900`: requireAuditOptions, auditSnapshot, writeAudit, AuditWriter.
61
+ [^s2]: `packages/core/src/change-feed.ts` at `478ae36900`: appendChange, getChangesSince, getTenantScopedChangesSince.
62
+ [^s3]: `packages/core/src/change-feed-sensitivity.ts` at `478ae36900`: sensitive tables.
63
+ [^s4]: `packages/smrt-dev-mcp/src/tool-catalog.ts` at `478ae36900`: recent-changes tool.
@@ -0,0 +1,67 @@
1
+ ---
2
+ type: Capability
3
+ title: "Auth, users and sessions"
4
+ description: "Reach for smrt-users before writing password hashing, sessions, login throttling or role checks."
5
+ tags:
6
+ - smrt
7
+ - intent
8
+ status: draft
9
+ generated:
10
+ by: claude/smrt-4687
11
+ at: 2026-11-05T00:00:00Z
12
+ stale_after: 2027-02-03T00:00:00Z
13
+ audience: internal
14
+ evidence_level: source-inspected
15
+ package_version: 0.60.8
16
+ sources:
17
+ - id: s1
18
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/users/src/services/credential-hash.ts
19
+ path: packages/users/src/services/credential-hash.ts
20
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
21
+ title: "packages/users/src/services/credential-hash.ts (scrypt hash, timingSafeEqual, scryptHashNeedsUpgrade)"
22
+ - id: s2
23
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/users/src/services/LoginAttemptLimiter.ts
24
+ path: packages/users/src/services/LoginAttemptLimiter.ts
25
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
26
+ title: "packages/users/src/services/LoginAttemptLimiter.ts (LoginAttemptLimiter.reserve, DEFAULT_LOGIN_*)"
27
+ - id: s3
28
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/users/src/services/SessionService.ts
29
+ path: packages/users/src/services/SessionService.ts
30
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
31
+ title: "packages/users/src/services/SessionService.ts (SessionService.createSession)"
32
+ - id: s4
33
+ resource: https://github.com/happyvertical/smrt/blob/478ae3690052b825b79b28235369ee7a5f6d2f20/packages/users/AGENTS.md
34
+ path: packages/users/AGENTS.md
35
+ source_revision: 478ae3690052b825b79b28235369ee7a5f6d2f20
36
+ title: "packages/users/AGENTS.md (models and authority)"
37
+ ---
38
+
39
+ # Auth, users and sessions
40
+
41
+ # Entry point
42
+
43
+ Import from `@happyvertical/smrt-users` (SvelteKit handlers from `@happyvertical/smrt-users/sveltekit`). Identity is `User` (global) plus `Membership` per `Tenant` with `Role` permissions resolved by `PermissionResolver`; sessions by `SessionService.createSession(userId, tenantId)`; email-and-password sign-in by `PasswordCredentialService`, with passkey, device PIN, OIDC and mobile services alongside. Request-scoped tenant context comes from smrt-tenancy adapters (`createSvelteKitHandle`, `createExpressMiddleware`).[^s3]
44
+
45
+ # Why not hand-roll it
46
+
47
+ `credential-hash.ts` stores a self-describing `scrypt$N$r$p$salt$hash` string, compares with `timingSafeEqual`, and exposes `scryptHashNeedsUpgrade()` so stronger parameters roll out at the next sign-in.[^s1] `LoginAttemptLimiter` draws attempts from two independent budgets, the submitted subject and the source, stores both as hashes, locks out with exponential backoff (defaults: 5 attempts per 5 minutes, 60 s base, doubling, capped at one hour), and its contract says the credential check always runs so a response never reveals whether an identifier maps to an account.[^s2] The package invariants also make users global with tenant access only through `Membership`, and derive tenant hierarchy paths on save rather than trusting callers.[^s4] A hand-rolled login with bcrypt or a JWT library has none of the throttling, non-enumeration or tenant model.
48
+
49
+ # Component pages
50
+
51
+ - [smrt-users](/components/smrt-users.md)
52
+ - [smrt-tenancy](/components/smrt-tenancy.md)
53
+
54
+ # Detection signals
55
+
56
+ - `import:bcrypt`
57
+ - `import:bcryptjs`
58
+ - `import:argon2`
59
+ - `import:jsonwebtoken`
60
+ - `import:passport`
61
+ - `import:express-session`
62
+ - `import:lucia`
63
+
64
+ [^s1]: `packages/users/src/services/credential-hash.ts` at `478ae36900`: scrypt hash, timingSafeEqual, scryptHashNeedsUpgrade.
65
+ [^s2]: `packages/users/src/services/LoginAttemptLimiter.ts` at `478ae36900`: LoginAttemptLimiter.reserve, DEFAULT_LOGIN_*.
66
+ [^s3]: `packages/users/src/services/SessionService.ts` at `478ae36900`: SessionService.createSession.
67
+ [^s4]: `packages/users/AGENTS.md` at `478ae36900`: models and authority.