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