@easynet/agent-tool 1.0.71 → 1.0.73

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 (44) hide show
  1. package/dist/api/expose/openapi.d.ts.map +1 -1
  2. package/dist/api/expose/openapiHttp.d.ts.map +1 -1
  3. package/dist/api/main.cjs +19 -19
  4. package/dist/api/main.js +4 -4
  5. package/dist/build.cjs +8 -8
  6. package/dist/build.js +3 -3
  7. package/dist/{chunk-OG5ZSXQ5.cjs → chunk-33N4Y6IS.cjs} +13 -13
  8. package/dist/{chunk-OG5ZSXQ5.cjs.map → chunk-33N4Y6IS.cjs.map} +1 -1
  9. package/dist/{chunk-J5EPH2QO.js → chunk-4YLATI7J.js} +4 -4
  10. package/dist/{chunk-J5EPH2QO.js.map → chunk-4YLATI7J.js.map} +1 -1
  11. package/dist/{chunk-VSFIF3WJ.js → chunk-EHXA64OA.js} +252 -259
  12. package/dist/chunk-EHXA64OA.js.map +1 -0
  13. package/dist/{chunk-YPGF5Y2Y.js → chunk-GSOJCOKN.js} +3 -3
  14. package/dist/{chunk-YPGF5Y2Y.js.map → chunk-GSOJCOKN.js.map} +1 -1
  15. package/dist/{chunk-45S2HPVU.js → chunk-HEVWKBBQ.js} +87 -60
  16. package/dist/chunk-HEVWKBBQ.js.map +1 -0
  17. package/dist/{chunk-JNIWNSCQ.cjs → chunk-LHKEJNKL.cjs} +87 -60
  18. package/dist/chunk-LHKEJNKL.cjs.map +1 -0
  19. package/dist/{chunk-WO4LZKPQ.cjs → chunk-OKKBKZWK.cjs} +4 -4
  20. package/dist/{chunk-WO4LZKPQ.cjs.map → chunk-OKKBKZWK.cjs.map} +1 -1
  21. package/dist/{chunk-YRFUGA3C.js → chunk-Q6W32HAP.js} +3 -3
  22. package/dist/{chunk-YRFUGA3C.js.map → chunk-Q6W32HAP.js.map} +1 -1
  23. package/dist/{chunk-3AM4SGUY.cjs → chunk-QVXWW657.cjs} +256 -263
  24. package/dist/chunk-QVXWW657.cjs.map +1 -0
  25. package/dist/{chunk-NMZ4IMEW.cjs → chunk-TBDSFXNG.cjs} +14 -14
  26. package/dist/{chunk-NMZ4IMEW.cjs.map → chunk-TBDSFXNG.cjs.map} +1 -1
  27. package/dist/{chunk-5J27MF7S.js → chunk-VYULM6NC.js} +4 -4
  28. package/dist/{chunk-5J27MF7S.js.map → chunk-VYULM6NC.js.map} +1 -1
  29. package/dist/{chunk-DTLALP7X.cjs → chunk-ZZHS55OM.cjs} +24 -24
  30. package/dist/{chunk-DTLALP7X.cjs.map → chunk-ZZHS55OM.cjs.map} +1 -1
  31. package/dist/core/runtime/PTCRuntime.d.ts +3 -0
  32. package/dist/core/runtime/PTCRuntime.d.ts.map +1 -1
  33. package/dist/extension.cjs +14 -14
  34. package/dist/extension.js +2 -2
  35. package/dist/index.cjs +37 -37
  36. package/dist/index.js +7 -7
  37. package/dist/tools/function/scanner.d.ts.map +1 -1
  38. package/dist/utils/cli/index.cjs +18 -18
  39. package/dist/utils/cli/index.js +4 -4
  40. package/package.json +1 -1
  41. package/dist/chunk-3AM4SGUY.cjs.map +0 -1
  42. package/dist/chunk-45S2HPVU.js.map +0 -1
  43. package/dist/chunk-JNIWNSCQ.cjs.map +0 -1
  44. package/dist/chunk-VSFIF3WJ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/util/scanUtil.ts","../src/tools/function/schemaFromTs.ts","../src/tools/function/types.ts","../src/tools/skill/types.ts","../src/tools/n8n/types.ts","../src/tools/mcp/mcpSpecToToolSpec.ts","../src/tools/function/scanner.ts"],"names":["ts"],"mappings":"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","file":"chunk-45S2HPVU.js","sourcesContent":["/**\n * Shared scan helpers for tool-type scanners (function, skill, n8n).\n * findDirsContainingFile: recursive dirs that contain a given file name.\n * pathToToolName: build dotted tool name from source path and program name.\n */\n\nimport { readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport async function findDirsContainingFile(\n rootPath: string,\n fileName: string,\n): Promise<string[]> {\n const found: string[] = [];\n await collectDirsWithFile(rootPath, fileName, found);\n return found;\n}\n\nasync function collectDirsWithFile(\n dir: string,\n fileName: string,\n acc: string[],\n): Promise<void> {\n let entries: Array<{ name: string; isDirectory: boolean; isFile: boolean }>;\n try {\n const e = await readdir(dir, { withFileTypes: true });\n entries = e.map((x) => ({\n name: x.name,\n isDirectory: x.isDirectory(),\n isFile: x.isFile(),\n }));\n } catch {\n return;\n }\n if (entries.some((x) => x.isFile && x.name === fileName)) acc.push(dir);\n for (const entry of entries) {\n if (!entry.isDirectory || entry.name === \"node_modules\" || entry.name.startsWith(\".\")) continue;\n await collectDirsWithFile(join(dir, entry.name), fileName, acc);\n }\n}\n\n/** Build dotted tool name from source path (extension stripped) and program name. */\nexport function pathToToolName(sourcePath: string, programName: string): string {\n const normalized = sourcePath\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(ts|tsx|js|mjs|json)$/i, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n return segments.length === 0 ? programName : `${segments.join(\".\")}.${programName}`;\n}\n","/**\n * Build JSON Schema from TypeScript parameter types using the compiler API.\n * MVP: primitives, optional, array, object. Complex types fallback to {} with warn.\n */\n\nimport * as ts from \"typescript\";\n\n/**\n * Build output JSON Schema from function return type (unwrap Promise if present).\n * Used by scan when auto-deriving schema.\n */\nexport function buildOutputSchemaFromReturnType(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): object {\n const sig = typeChecker.getSignatureFromDeclaration(node as ts.SignatureDeclaration);\n if (!sig) {\n onWarn?.(\"Could not get signature for return type, using object\");\n return { type: \"object\", additionalProperties: true };\n }\n let returnType = typeChecker.getReturnTypeOfSignature(sig);\n // Unwrap Promise<T> to T\n if (returnType.getSymbol?.()?.getName() === \"Promise\") {\n const typeArgs = (returnType as ts.TypeReference).typeArguments;\n if (typeArgs?.[0]) returnType = typeArgs[0];\n }\n const schema = typeToJsonSchema(returnType, typeChecker, onWarn);\n const hasProps =\n typeof schema === \"object\" &&\n (schema as { type?: string; properties?: object }).type === \"object\" &&\n Object.keys((schema as { properties?: object }).properties ?? {}).length > 0;\n return hasProps ? schema : { type: \"object\", additionalProperties: true };\n}\n\n/** Build { type: \"object\", properties, required } from function parameters. */\nexport function buildInputSchemaFromParams(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): { schema: object; required: string[] } {\n const properties: Record<string, object> = {};\n const required: string[] = [];\n\n if (!node.parameters.length) {\n return { schema: { type: \"object\", properties: {} }, required: [] };\n }\n\n for (const param of node.parameters) {\n const name = (param.name as ts.Identifier).getText();\n if (name.startsWith(\"_\") && name.length <= 2) continue;\n const sym = (param as ts.ParameterDeclaration & { symbol?: ts.Symbol }).symbol;\n const paramType = sym\n ? typeChecker.getTypeOfSymbolAtLocation(sym, param)\n : typeChecker.getTypeAtLocation(param);\n const isOptional = !!param.questionToken || param.initializer !== undefined;\n const propSchema = typeToJsonSchema(paramType, typeChecker, onWarn);\n properties[name] = propSchema;\n if (!isOptional) required.push(name);\n }\n\n // Flatten: when there is exactly one parameter and it's an object type, emit that object's\n // schema at top level so agents can pass flat params like { path: \".\" } instead of { args: { path: \".\" } }.\n const paramNames = Object.keys(properties);\n if (paramNames.length === 1) {\n const soleName = paramNames[0]!;\n const inner = properties[soleName] as\n | { type?: string; properties?: Record<string, object>; required?: string[]; additionalProperties?: boolean }\n | undefined;\n if (\n inner &&\n typeof inner === \"object\" &&\n inner.type === \"object\" &&\n inner.properties &&\n typeof inner.properties === \"object\"\n ) {\n return {\n schema: {\n type: \"object\",\n properties: inner.properties,\n ...(Array.isArray(inner.required) && inner.required.length > 0 ? { required: inner.required } : {}),\n ...(inner.additionalProperties !== undefined ? { additionalProperties: inner.additionalProperties } : {}),\n },\n required: inner.required ?? [],\n };\n }\n }\n\n return {\n schema: {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n },\n required,\n };\n}\n\nfunction typeToJsonSchema(\n type: ts.Type,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): object {\n const flags = type.flags;\n if (flags & ts.TypeFlags.String) return { type: \"string\" };\n if (flags & ts.TypeFlags.Number) return { type: \"number\" };\n if (flags & ts.TypeFlags.Boolean) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.BooleanLiteral) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.Null) return { type: \"null\" };\n if (flags & ts.TypeFlags.Undefined || flags & ts.TypeFlags.Void) return {};\n if (flags & ts.TypeFlags.Any || flags & ts.TypeFlags.Unknown) {\n onWarn?.(`Unsupported type: any/unknown, using empty schema`);\n return {};\n }\n\n if (type.isUnion?.()) {\n const union = type as ts.UnionType;\n const types = union.types;\n const withoutUndef = types.filter(\n (t) => !(t.flags & ts.TypeFlags.Undefined) && !(t.flags & ts.TypeFlags.Void),\n );\n if (withoutUndef.length === 1) return typeToJsonSchema(withoutUndef[0]!, typeChecker, onWarn);\n if (withoutUndef.length === 0) return {};\n // Union of string literals -> { type: \"string\", enum: [...] } so we don't fall through to getProperties() (String prototype).\n const stringEnumValues: string[] = [];\n let allStringLiterals = true;\n for (const t of withoutUndef) {\n if (t.flags & ts.TypeFlags.StringLiteral) {\n const lit = t as ts.StringLiteralType;\n if (typeof lit.value === \"string\") stringEnumValues.push(lit.value);\n } else {\n allStringLiterals = false;\n break;\n }\n }\n if (allStringLiterals && stringEnumValues.length > 0) {\n return { type: \"string\", enum: [...new Set(stringEnumValues)] };\n }\n\n // Union of boolean literals (true | false | undefined) should stay boolean.\n let allBooleanLiterals = true;\n for (const t of withoutUndef) {\n if (!(t.flags & ts.TypeFlags.BooleanLiteral)) {\n allBooleanLiterals = false;\n break;\n }\n }\n if (allBooleanLiterals) return { type: \"boolean\" };\n }\n\n // Single string literal (e.g. type: \"file\") -> { type: \"string\", enum: [\"file\"] }, not object with String methods.\n if (flags & ts.TypeFlags.StringLiteral) {\n const lit = type as ts.StringLiteralType;\n if (typeof lit.value === \"string\") {\n return { type: \"string\", enum: [lit.value] };\n }\n return { type: \"string\" };\n }\n\n if (typeChecker.isArrayType(type)) {\n const typeRef = type as ts.TypeReference;\n const typeArgs = typeRef.typeArguments;\n const itemType = typeArgs?.[0];\n const items = itemType ? typeToJsonSchema(itemType, typeChecker, onWarn) : {};\n return { type: \"array\", items: Object.keys(items).length ? items : {} };\n }\n\n const str = typeChecker.typeToString(type);\n if (str === \"string\") return { type: \"string\" };\n if (str === \"number\") return { type: \"number\" };\n if (str === \"boolean\") return { type: \"boolean\" };\n if (str.endsWith(\"[]\")) {\n const inner = str.slice(0, -2).trim();\n const itemType =\n inner === \"string\" ? { type: \"string\" as const } : inner === \"number\" ? { type: \"number\" as const } : {};\n return { type: \"array\", items: itemType };\n }\n\n if (type.getProperties && type.getProperties().length >= 0) {\n const props = type.getProperties();\n const properties: Record<string, object> = {};\n const required: string[] = [];\n for (const p of props) {\n const decl = p.valueDeclaration;\n const propType = decl\n ? typeChecker.getTypeAtLocation(decl)\n : typeChecker.getTypeOfSymbolAtLocation(p, (p as unknown as { valueDeclaration: ts.Node }).valueDeclaration);\n const optional = decl && ts.isPropertySignature(decl) ? !!decl.questionToken : false;\n properties[p.name] = typeToJsonSchema(propType, typeChecker, onWarn);\n if (!optional) required.push(p.name);\n }\n return { type: \"object\", properties, ...(required.length ? { required } : {}) };\n }\n\n onWarn?.(`Unsupported type: ${str}, using object`);\n return { type: \"object\" };\n}\n","/** HITL side-effect classification. */\nexport type SideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/** Kind for @tool function discovery. */\nexport const FUNCTION_KIND = \"function\" as const;\n\n/** Single tool spec from @tool function. */\nexport interface FunctionToolSpec {\n kind: typeof FUNCTION_KIND;\n name: string;\n description: string;\n inputSchema: object;\n outputSchema?: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n exportName: string;\n}\n","import type { SideEffect } from \"../function/types.js\";\n\n/** Kind for SKILL.md discovery. */\nexport const SKILL_KIND = \"skill\" as const;\n\n/** Conventional directory name for skill tools. */\nexport const SKILL_DIR_NAME = \"skill\" as const;\n\n/** Single tool spec from SKILL.md directory. */\nexport interface SkillToolSpec {\n kind: typeof SKILL_KIND;\n name: string;\n description: string;\n inputSchema: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n}\n","import type { SideEffect } from \"../function/types.js\";\n\n/** Kind for n8n workflow.json discovery. */\nexport const N8N_KIND = \"n8n\" as const;\n\n/** Single tool spec from n8n workflow.json directory. */\nexport interface N8nToolSpec {\n kind: typeof N8N_KIND;\n name: string;\n description: string;\n inputSchema: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n webhookUrl?: string;\n}\n","/**\n * Convert MCPToolSpec (function/skill/n8n scan result) to unified ToolSpec.\n * MCP layer: used by function/skill/n8n scanners when exposing unified ToolSpec.\n */\n\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport { DEFAULT_OUTPUT_SCHEMA } from \"../../core/types/ToolSpec.js\";\nimport type { MCPToolSpec } from \"../discoveryFactory.js\";\nimport { FUNCTION_KIND } from \"../function/types.js\";\nimport { SKILL_KIND } from \"../skill/types.js\";\nimport { N8N_KIND } from \"../n8n/types.js\";\n\nconst DEFAULT_OUTPUT = { type: \"object\" as const, additionalProperties: true };\n\nexport function mcpSpecToToolSpec(spec: MCPToolSpec, projectPath?: string): ToolSpec {\n const base: ToolSpec = {\n name: spec.name,\n version: \"1.0.0\",\n kind: spec.kind,\n description: spec.description,\n inputSchema: spec.inputSchema ?? DEFAULT_OUTPUT,\n outputSchema:\n \"outputSchema\" in spec && spec.outputSchema\n ? spec.outputSchema\n : (DEFAULT_OUTPUT_SCHEMA as object),\n capabilities: [],\n _meta: spec._meta,\n ...(spec.kind === N8N_KIND && \"webhookUrl\" in spec && spec.webhookUrl\n ? { endpoint: spec.webhookUrl }\n : {}),\n };\n if (spec.kind === FUNCTION_KIND && \"sourcePath\" in spec && \"exportName\" in spec) {\n base._meta = {\n ...base._meta,\n sourcePath: spec.sourcePath,\n exportName: spec.exportName,\n ...(projectPath && { projectPath }),\n };\n }\n if (spec.kind === SKILL_KIND && \"sourcePath\" in spec && projectPath) {\n base._meta = { ...base._meta, sourcePath: spec.sourcePath, projectPath };\n }\n if (spec.kind === N8N_KIND && \"sourcePath\" in spec && projectPath) {\n base._meta = { ...base._meta, sourcePath: spec.sourcePath, projectPath };\n }\n return base;\n}\n","/**\n * Scan TypeScript source files for exported functions with @tool JSDoc.\n * Extracts description, @effect, and builds inputSchema from param types.\n * Exposes both scanForTools (raw) and scan (unified DiscoverToolsResult).\n */\n\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport * as ts from \"typescript\";\nimport { pathToToolName } from \"../util/scanUtil.js\";\nimport { buildInputSchemaFromParams, buildOutputSchemaFromReturnType } from \"./schemaFromTs.js\";\nimport type { FunctionToolSpec, SideEffect } from \"./types.js\";\nimport { FUNCTION_KIND } from \"./types.js\";\nimport type { DiscoverToolsOptions, DiscoverToolsResult } from \"../discoveryFactory.js\";\nimport { mcpSpecToToolSpec } from \"../mcp/mcpSpecToToolSpec.js\";\n\nconst TOOL_TAG = \"@tool\";\nconst EFFECT_TAG = \"@effect\";\nconst EFFECT_VALUES: SideEffect[] = [\"none\", \"local_write\", \"external_write\", \"destructive\"];\n\nexport interface ScanResult {\n specs: FunctionToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\n/**\n * Scan a project folder for exported functions annotated with @tool.\n */\nexport function scanForTools(options: {\n projectPath: string;\n include?: string[];\n tsconfigPath?: string;\n}): ScanResult {\n const projectPath = path.resolve(options.projectPath);\n const tsconfigPath =\n options.tsconfigPath ?? path.join(projectPath, \"tsconfig.json\");\n const include = options.include ?? [\"**/*.ts\"];\n const errors: Array<{ file: string; message: string }> = [];\n const warnings: Array<{ file: string; message: string }> = [];\n\n let config: ts.ParsedCommandLine;\n let configPathResolved = path.resolve(projectPath, tsconfigPath);\n if (!fs.existsSync(configPathResolved)) {\n configPathResolved = path.join(projectPath, \"tsconfig.json\");\n }\n if (fs.existsSync(configPathResolved)) {\n const configFile = ts.readConfigFile(configPathResolved, ts.sys.readFile);\n if (configFile.error) {\n errors.push({ file: configPathResolved, message: String(configFile.error.messageText) });\n return { specs: [], errors, warnings };\n }\n const parsed = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path.dirname(configPathResolved),\n );\n if (parsed.errors.length) {\n for (const e of parsed.errors) {\n errors.push({ file: e.file?.fileName ?? \"tsconfig\", message: String(e.messageText) });\n }\n return { specs: [], errors, warnings };\n }\n config = parsed;\n } else {\n config = {\n options: {\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n strict: true,\n skipLibCheck: true,\n noEmit: true,\n },\n fileNames: resolveGlob(projectPath, include),\n errors: [],\n } as ts.ParsedCommandLine;\n }\n\n const program = ts.createProgram(config.fileNames, config.options);\n const typeChecker = program.getTypeChecker();\n const specs: FunctionToolSpec[] = [];\n\n for (const sourceFile of program.getSourceFiles()) {\n const fileName = sourceFile.fileName;\n if (fileName.includes(\"node_modules\") || fileName.endsWith(\".d.ts\")) continue;\n if (!config.fileNames.some((f) => path.resolve(f) === path.resolve(fileName))) continue;\n\n ts.forEachChild(sourceFile, (node) => {\n const decl = getExportedFunctionDeclaration(node, sourceFile);\n if (!decl) return;\n const func = decl.func;\n const name = decl.name;\n if (!name) return;\n\n const host = getJSDocHost(func);\n if (!hasToolTag(host)) return;\n const jsDoc = getJSDocComments(host);\n\n const description = getDescription(jsDoc, name);\n if (!description) {\n warnings.push({ file: fileName, message: `Tool ${name}: missing description, using humanized name` });\n }\n const sideEffect = getEffect(host);\n\n const onWarn = (msg: string) => warnings.push({ file: fileName, message: `${name}: ${msg}` });\n const { schema } = buildInputSchemaFromParams(func, typeChecker, onWarn);\n\n const inputSchema =\n Object.keys((schema as { properties?: object }).properties ?? {}).length > 0\n ? schema\n : { type: \"object\" as const, properties: {} };\n\n const outputSchema = buildOutputSchemaFromReturnType(func, typeChecker, onWarn);\n\n const sourcePath = path.relative(projectPath, fileName) || path.basename(fileName);\n const toolName = pathToToolName(sourcePath, name);\n\n specs.push({\n kind: FUNCTION_KIND,\n name: toolName,\n description: description || humanize(name),\n inputSchema,\n outputSchema,\n _meta: { hitl: { sideEffect } },\n sourcePath,\n exportName: name,\n });\n });\n }\n\n return { specs, errors, warnings };\n}\n\nfunction resolveGlob(projectPath: string, patterns: string[]): string[] {\n const result: string[] = [];\n const seen = new Set<string>();\n const add = (f: string) => {\n const abs = path.resolve(f);\n if (f.endsWith(\".ts\") && !f.endsWith(\".d.ts\") && !seen.has(abs)) {\n seen.add(abs);\n result.push(abs);\n }\n };\n for (const p of patterns) {\n const full = path.join(projectPath, p);\n if (full.includes(\"*\")) {\n const baseDir = full.replace(/\\*\\*\\/.*$/, \"\").replace(/\\*.*$/, \"\").replace(/\\/?$/, \"\") || \".\";\n const dir = path.resolve(projectPath, baseDir);\n if (fs.existsSync(dir)) walk(dir, add);\n } else {\n const resolved = path.resolve(projectPath, full);\n if (fs.existsSync(resolved)) {\n if (fs.statSync(resolved).isFile()) add(resolved);\n else walk(resolved, add);\n }\n }\n }\n if (result.length > 0) return result;\n const srcDir = path.join(projectPath, \"src\");\n if (fs.existsSync(srcDir)) return walkCollect(srcDir);\n return [];\n}\n\nfunction walkCollect(dir: string): string[] {\n const out: string[] = [];\n walk(dir, (fullPath) => {\n if (fullPath.endsWith(\".ts\") && !fullPath.endsWith(\".d.ts\")) out.push(path.resolve(fullPath));\n });\n return out;\n}\n\nconst SKIP_DIRS = new Set([\"node_modules\", \"generated\", \"dist\"]);\n\nfunction walk(dir: string, visit: (fullPath: string) => void): void {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const e of entries) {\n const full = path.join(dir, e.name);\n if (e.isDirectory() && !SKIP_DIRS.has(e.name)) walk(full, visit);\n else if (e.isFile()) visit(full);\n }\n } catch {\n // ignore\n }\n}\n\nfunction getExportedFunctionDeclaration(\n node: ts.Node,\n _sourceFile: ts.SourceFile,\n): { func: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression; name: string } | null {\n if (ts.isFunctionDeclaration(node) && node.name) {\n const exported = (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n if (exported) return { func: node, name: node.name.getText() };\n return null;\n }\n if (ts.isVariableStatement(node)) {\n const exported = (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n if (!exported) return null;\n for (const decl of node.declarationList.declarations) {\n let init = decl.initializer;\n while (init && (ts.isParenthesizedExpression(init) || ts.isAsExpression(init)))\n init = init.expression;\n if (init && ts.isArrowFunction(init)) {\n const name = (decl.name as ts.Identifier).getText();\n return { func: init, name };\n }\n if (init && ts.isFunctionExpression(init)) {\n const name = (decl.name as ts.Identifier).getText();\n return { func: init, name };\n }\n }\n }\n return null;\n}\n\nfunction getJSDocHost(node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression): ts.Node {\n const parent = node.parent;\n if (ts.isVariableDeclaration(parent)) {\n const gp = parent.parent;\n if (ts.isVariableDeclarationList(gp) && gp.parent && ts.isVariableStatement(gp.parent)) return gp.parent;\n }\n return node as ts.Node;\n}\n\nfunction getJSDocComments(host: ts.Node): ts.JSDoc[] {\n const all = ts.getJSDocCommentsAndTags(host);\n return all.filter((t): t is ts.JSDoc => ts.isJSDoc(t));\n}\n\nfunction hasToolTag(host: ts.Node): boolean {\n const tags = ts.getJSDocTags(host);\n for (const tag of tags) {\n const name = (tag as { tagName?: ts.Identifier }).tagName?.getText() ?? \"\";\n if (name === \"tool\") return true;\n }\n const all = ts.getJSDocCommentsAndTags(host);\n for (const t of all) {\n if (ts.isJSDoc(t)) {\n const full = t.getFullText();\n if (full.includes(TOOL_TAG)) return true;\n }\n }\n return false;\n}\n\nfunction getDescription(jsDocs: ts.JSDoc[], fallbackName: string): string {\n for (const doc of jsDocs) {\n const comment = doc.comment;\n if (typeof comment === \"string\") {\n const first = comment.split(/\\n/)[0]?.trim() ?? \"\";\n if (first && !first.startsWith(\"@\")) return first;\n }\n if (Array.isArray(comment)) {\n const first = comment[0];\n if (first && typeof first === \"object\" && \"text\" in first) {\n const t = (first as { text: string }).text.trim();\n if (t && !t.startsWith(\"@\")) return t;\n }\n }\n const full = doc.getFullText();\n const match = full.match(/\\*\\s*@tool\\s+(.+?)(?=\\n|$|\\*\\/)/s);\n if (match?.[1]) return match[1].trim();\n }\n return \"\";\n}\n\nfunction getEffect(host: ts.Node): SideEffect {\n const tags = ts.getJSDocTags(host);\n for (const tag of tags) {\n const name = (tag as { tagName?: ts.Identifier }).tagName?.getText() ?? \"\";\n if (name === \"effect\") {\n const comment = (tag as ts.JSDocUnknownTag).comment;\n const v = (typeof comment === \"string\" ? comment : \"\").trim().toLowerCase();\n if (EFFECT_VALUES.includes(v as SideEffect)) return v as SideEffect;\n }\n }\n const all = ts.getJSDocCommentsAndTags(host);\n for (const t of all) {\n if (ts.isJSDoc(t)) {\n const full = t.getFullText();\n const match = full.match(/\\*\\s*@effect\\s+(\\w+)/);\n if (match && EFFECT_VALUES.includes(match[1] as SideEffect)) return match[1] as SideEffect;\n }\n }\n return \"none\";\n}\n\nfunction humanize(name: string): string {\n return name.replace(/([A-Z])/g, \" $1\").replace(/^./, (s) => s.toUpperCase()).trim();\n}\n\n/** Unified scan: (path, options) → DiscoverToolsResult. */\nexport function scan(\n projectPath: string,\n options: DiscoverToolsOptions = {},\n): Promise<DiscoverToolsResult> {\n const root = path.resolve(projectPath);\n const result = scanForTools({\n projectPath: root,\n include: options.include ?? [\"**/*.ts\"],\n tsconfigPath: options.tsconfigPath,\n });\n const specs = result.specs.map((s) => mcpSpecToToolSpec(s, root));\n return Promise.resolve({\n specs,\n errors: result.errors,\n warnings: result.warnings,\n });\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/tools/util/scanUtil.ts","../src/tools/function/schemaFromTs.ts","../src/tools/function/types.ts","../src/tools/skill/types.ts","../src/tools/n8n/types.ts","../src/tools/mcp/mcpSpecToToolSpec.ts","../src/tools/function/scanner.ts"],"names":["readdir","join","ts","DEFAULT_OUTPUT_SCHEMA","path","fs","ts2"],"mappings":"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","file":"chunk-JNIWNSCQ.cjs","sourcesContent":["/**\n * Shared scan helpers for tool-type scanners (function, skill, n8n).\n * findDirsContainingFile: recursive dirs that contain a given file name.\n * pathToToolName: build dotted tool name from source path and program name.\n */\n\nimport { readdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport async function findDirsContainingFile(\n rootPath: string,\n fileName: string,\n): Promise<string[]> {\n const found: string[] = [];\n await collectDirsWithFile(rootPath, fileName, found);\n return found;\n}\n\nasync function collectDirsWithFile(\n dir: string,\n fileName: string,\n acc: string[],\n): Promise<void> {\n let entries: Array<{ name: string; isDirectory: boolean; isFile: boolean }>;\n try {\n const e = await readdir(dir, { withFileTypes: true });\n entries = e.map((x) => ({\n name: x.name,\n isDirectory: x.isDirectory(),\n isFile: x.isFile(),\n }));\n } catch {\n return;\n }\n if (entries.some((x) => x.isFile && x.name === fileName)) acc.push(dir);\n for (const entry of entries) {\n if (!entry.isDirectory || entry.name === \"node_modules\" || entry.name.startsWith(\".\")) continue;\n await collectDirsWithFile(join(dir, entry.name), fileName, acc);\n }\n}\n\n/** Build dotted tool name from source path (extension stripped) and program name. */\nexport function pathToToolName(sourcePath: string, programName: string): string {\n const normalized = sourcePath\n .replace(/\\\\/g, \"/\")\n .replace(/\\.(ts|tsx|js|mjs|json)$/i, \"\");\n const segments = normalized.split(\"/\").filter(Boolean);\n return segments.length === 0 ? programName : `${segments.join(\".\")}.${programName}`;\n}\n","/**\n * Build JSON Schema from TypeScript parameter types using the compiler API.\n * MVP: primitives, optional, array, object. Complex types fallback to {} with warn.\n */\n\nimport * as ts from \"typescript\";\n\n/**\n * Build output JSON Schema from function return type (unwrap Promise if present).\n * Used by scan when auto-deriving schema.\n */\nexport function buildOutputSchemaFromReturnType(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): object {\n const sig = typeChecker.getSignatureFromDeclaration(node as ts.SignatureDeclaration);\n if (!sig) {\n onWarn?.(\"Could not get signature for return type, using object\");\n return { type: \"object\", additionalProperties: true };\n }\n let returnType = typeChecker.getReturnTypeOfSignature(sig);\n // Unwrap Promise<T> to T\n if (returnType.getSymbol?.()?.getName() === \"Promise\") {\n const typeArgs = (returnType as ts.TypeReference).typeArguments;\n if (typeArgs?.[0]) returnType = typeArgs[0];\n }\n const schema = typeToJsonSchema(returnType, typeChecker, onWarn);\n const hasProps =\n typeof schema === \"object\" &&\n (schema as { type?: string; properties?: object }).type === \"object\" &&\n Object.keys((schema as { properties?: object }).properties ?? {}).length > 0;\n return hasProps ? schema : { type: \"object\", additionalProperties: true };\n}\n\n/** Build { type: \"object\", properties, required } from function parameters. */\nexport function buildInputSchemaFromParams(\n node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): { schema: object; required: string[] } {\n const properties: Record<string, object> = {};\n const required: string[] = [];\n\n if (!node.parameters.length) {\n return { schema: { type: \"object\", properties: {} }, required: [] };\n }\n\n for (const param of node.parameters) {\n const name = (param.name as ts.Identifier).getText();\n if (name.startsWith(\"_\") && name.length <= 2) continue;\n const sym = (param as ts.ParameterDeclaration & { symbol?: ts.Symbol }).symbol;\n const paramType = sym\n ? typeChecker.getTypeOfSymbolAtLocation(sym, param)\n : typeChecker.getTypeAtLocation(param);\n const isOptional = !!param.questionToken || param.initializer !== undefined;\n const propSchema = typeToJsonSchema(paramType, typeChecker, onWarn);\n properties[name] = propSchema;\n if (!isOptional) required.push(name);\n }\n\n // Flatten: when there is exactly one parameter and it's an object type, emit that object's\n // schema at top level so agents can pass flat params like { path: \".\" } instead of { args: { path: \".\" } }.\n const paramNames = Object.keys(properties);\n if (paramNames.length === 1) {\n const soleName = paramNames[0]!;\n const inner = properties[soleName] as\n | { type?: string; properties?: Record<string, object>; required?: string[]; additionalProperties?: boolean }\n | undefined;\n if (\n inner &&\n typeof inner === \"object\" &&\n inner.type === \"object\" &&\n inner.properties &&\n typeof inner.properties === \"object\"\n ) {\n return {\n schema: {\n type: \"object\",\n properties: inner.properties,\n ...(Array.isArray(inner.required) && inner.required.length > 0 ? { required: inner.required } : {}),\n ...(inner.additionalProperties !== undefined ? { additionalProperties: inner.additionalProperties } : {}),\n },\n required: inner.required ?? [],\n };\n }\n }\n\n return {\n schema: {\n type: \"object\",\n properties,\n ...(required.length > 0 ? { required } : {}),\n },\n required,\n };\n}\n\nfunction typeToJsonSchema(\n type: ts.Type,\n typeChecker: ts.TypeChecker,\n onWarn?: (message: string) => void,\n): object {\n const flags = type.flags;\n if (flags & ts.TypeFlags.String) return { type: \"string\" };\n if (flags & ts.TypeFlags.Number) return { type: \"number\" };\n if (flags & ts.TypeFlags.Boolean) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.BooleanLiteral) return { type: \"boolean\" };\n if (flags & ts.TypeFlags.Null) return { type: \"null\" };\n if (flags & ts.TypeFlags.Undefined || flags & ts.TypeFlags.Void) return {};\n if (flags & ts.TypeFlags.Any || flags & ts.TypeFlags.Unknown) {\n onWarn?.(`Unsupported type: any/unknown, using empty schema`);\n return {};\n }\n\n if (type.isUnion?.()) {\n const union = type as ts.UnionType;\n const types = union.types;\n const withoutUndef = types.filter(\n (t) => !(t.flags & ts.TypeFlags.Undefined) && !(t.flags & ts.TypeFlags.Void),\n );\n if (withoutUndef.length === 1) return typeToJsonSchema(withoutUndef[0]!, typeChecker, onWarn);\n if (withoutUndef.length === 0) return {};\n // Union of string literals -> { type: \"string\", enum: [...] } so we don't fall through to getProperties() (String prototype).\n const stringEnumValues: string[] = [];\n let allStringLiterals = true;\n for (const t of withoutUndef) {\n if (t.flags & ts.TypeFlags.StringLiteral) {\n const lit = t as ts.StringLiteralType;\n if (typeof lit.value === \"string\") stringEnumValues.push(lit.value);\n } else {\n allStringLiterals = false;\n break;\n }\n }\n if (allStringLiterals && stringEnumValues.length > 0) {\n return { type: \"string\", enum: [...new Set(stringEnumValues)] };\n }\n\n // Union of boolean literals (true | false | undefined) should stay boolean.\n let allBooleanLiterals = true;\n for (const t of withoutUndef) {\n if (!(t.flags & ts.TypeFlags.BooleanLiteral)) {\n allBooleanLiterals = false;\n break;\n }\n }\n if (allBooleanLiterals) return { type: \"boolean\" };\n }\n\n // Single string literal (e.g. type: \"file\") -> { type: \"string\", enum: [\"file\"] }, not object with String methods.\n if (flags & ts.TypeFlags.StringLiteral) {\n const lit = type as ts.StringLiteralType;\n if (typeof lit.value === \"string\") {\n return { type: \"string\", enum: [lit.value] };\n }\n return { type: \"string\" };\n }\n\n if (typeChecker.isArrayType(type)) {\n const typeRef = type as ts.TypeReference;\n const typeArgs = typeRef.typeArguments;\n const itemType = typeArgs?.[0];\n const items = itemType ? typeToJsonSchema(itemType, typeChecker, onWarn) : {};\n return { type: \"array\", items: Object.keys(items).length ? items : {} };\n }\n\n const str = typeChecker.typeToString(type);\n if (str === \"string\") return { type: \"string\" };\n if (str === \"number\") return { type: \"number\" };\n if (str === \"boolean\") return { type: \"boolean\" };\n if (str.endsWith(\"[]\")) {\n const inner = str.slice(0, -2).trim();\n const itemType =\n inner === \"string\" ? { type: \"string\" as const } : inner === \"number\" ? { type: \"number\" as const } : {};\n return { type: \"array\", items: itemType };\n }\n\n if (type.getProperties && type.getProperties().length >= 0) {\n const props = type.getProperties();\n const properties: Record<string, object> = {};\n const required: string[] = [];\n for (const p of props) {\n const decl = p.valueDeclaration;\n const propType = decl\n ? typeChecker.getTypeAtLocation(decl)\n : typeChecker.getTypeOfSymbolAtLocation(p, (p as unknown as { valueDeclaration: ts.Node }).valueDeclaration);\n const optional = decl && ts.isPropertySignature(decl) ? !!decl.questionToken : false;\n properties[p.name] = typeToJsonSchema(propType, typeChecker, onWarn);\n if (!optional) required.push(p.name);\n }\n return { type: \"object\", properties, ...(required.length ? { required } : {}) };\n }\n\n onWarn?.(`Unsupported type: ${str}, using object`);\n return { type: \"object\" };\n}\n","/** HITL side-effect classification. */\nexport type SideEffect = \"none\" | \"local_write\" | \"external_write\" | \"destructive\";\n\n/** Kind for @tool function discovery. */\nexport const FUNCTION_KIND = \"function\" as const;\n\n/** Single tool spec from @tool function. */\nexport interface FunctionToolSpec {\n kind: typeof FUNCTION_KIND;\n name: string;\n description: string;\n inputSchema: object;\n outputSchema?: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n exportName: string;\n}\n","import type { SideEffect } from \"../function/types.js\";\n\n/** Kind for SKILL.md discovery. */\nexport const SKILL_KIND = \"skill\" as const;\n\n/** Conventional directory name for skill tools. */\nexport const SKILL_DIR_NAME = \"skill\" as const;\n\n/** Single tool spec from SKILL.md directory. */\nexport interface SkillToolSpec {\n kind: typeof SKILL_KIND;\n name: string;\n description: string;\n inputSchema: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n}\n","import type { SideEffect } from \"../function/types.js\";\n\n/** Kind for n8n workflow.json discovery. */\nexport const N8N_KIND = \"n8n\" as const;\n\n/** Single tool spec from n8n workflow.json directory. */\nexport interface N8nToolSpec {\n kind: typeof N8N_KIND;\n name: string;\n description: string;\n inputSchema: object;\n _meta?: { hitl?: { sideEffect?: SideEffect } };\n sourcePath: string;\n webhookUrl?: string;\n}\n","/**\n * Convert MCPToolSpec (function/skill/n8n scan result) to unified ToolSpec.\n * MCP layer: used by function/skill/n8n scanners when exposing unified ToolSpec.\n */\n\nimport type { ToolSpec } from \"../../core/types/ToolSpec.js\";\nimport { DEFAULT_OUTPUT_SCHEMA } from \"../../core/types/ToolSpec.js\";\nimport type { MCPToolSpec } from \"../discoveryFactory.js\";\nimport { FUNCTION_KIND } from \"../function/types.js\";\nimport { SKILL_KIND } from \"../skill/types.js\";\nimport { N8N_KIND } from \"../n8n/types.js\";\n\nconst DEFAULT_OUTPUT = { type: \"object\" as const, additionalProperties: true };\n\nexport function mcpSpecToToolSpec(spec: MCPToolSpec, projectPath?: string): ToolSpec {\n const base: ToolSpec = {\n name: spec.name,\n version: \"1.0.0\",\n kind: spec.kind,\n description: spec.description,\n inputSchema: spec.inputSchema ?? DEFAULT_OUTPUT,\n outputSchema:\n \"outputSchema\" in spec && spec.outputSchema\n ? spec.outputSchema\n : (DEFAULT_OUTPUT_SCHEMA as object),\n capabilities: [],\n _meta: spec._meta,\n ...(spec.kind === N8N_KIND && \"webhookUrl\" in spec && spec.webhookUrl\n ? { endpoint: spec.webhookUrl }\n : {}),\n };\n if (spec.kind === FUNCTION_KIND && \"sourcePath\" in spec && \"exportName\" in spec) {\n base._meta = {\n ...base._meta,\n sourcePath: spec.sourcePath,\n exportName: spec.exportName,\n ...(projectPath && { projectPath }),\n };\n }\n if (spec.kind === SKILL_KIND && \"sourcePath\" in spec && projectPath) {\n base._meta = { ...base._meta, sourcePath: spec.sourcePath, projectPath };\n }\n if (spec.kind === N8N_KIND && \"sourcePath\" in spec && projectPath) {\n base._meta = { ...base._meta, sourcePath: spec.sourcePath, projectPath };\n }\n return base;\n}\n","/**\n * Scan TypeScript source files for exported functions with @tool JSDoc.\n * Extracts description, @effect, and builds inputSchema from param types.\n * Exposes both scanForTools (raw) and scan (unified DiscoverToolsResult).\n */\n\nimport * as path from \"node:path\";\nimport * as fs from \"node:fs\";\nimport * as ts from \"typescript\";\nimport { pathToToolName } from \"../util/scanUtil.js\";\nimport { buildInputSchemaFromParams, buildOutputSchemaFromReturnType } from \"./schemaFromTs.js\";\nimport type { FunctionToolSpec, SideEffect } from \"./types.js\";\nimport { FUNCTION_KIND } from \"./types.js\";\nimport type { DiscoverToolsOptions, DiscoverToolsResult } from \"../discoveryFactory.js\";\nimport { mcpSpecToToolSpec } from \"../mcp/mcpSpecToToolSpec.js\";\n\nconst TOOL_TAG = \"@tool\";\nconst EFFECT_TAG = \"@effect\";\nconst EFFECT_VALUES: SideEffect[] = [\"none\", \"local_write\", \"external_write\", \"destructive\"];\n\nexport interface ScanResult {\n specs: FunctionToolSpec[];\n errors: Array<{ file: string; message: string }>;\n warnings: Array<{ file: string; message: string }>;\n}\n\n/**\n * Scan a project folder for exported functions annotated with @tool.\n */\nexport function scanForTools(options: {\n projectPath: string;\n include?: string[];\n tsconfigPath?: string;\n}): ScanResult {\n const projectPath = path.resolve(options.projectPath);\n const tsconfigPath =\n options.tsconfigPath ?? path.join(projectPath, \"tsconfig.json\");\n const include = options.include ?? [\"**/*.ts\"];\n const errors: Array<{ file: string; message: string }> = [];\n const warnings: Array<{ file: string; message: string }> = [];\n\n let config: ts.ParsedCommandLine;\n let configPathResolved = path.resolve(projectPath, tsconfigPath);\n if (!fs.existsSync(configPathResolved)) {\n configPathResolved = path.join(projectPath, \"tsconfig.json\");\n }\n if (fs.existsSync(configPathResolved)) {\n const configFile = ts.readConfigFile(configPathResolved, ts.sys.readFile);\n if (configFile.error) {\n errors.push({ file: configPathResolved, message: String(configFile.error.messageText) });\n return { specs: [], errors, warnings };\n }\n const parsed = ts.parseJsonConfigFileContent(\n configFile.config,\n ts.sys,\n path.dirname(configPathResolved),\n );\n if (parsed.errors.length) {\n for (const e of parsed.errors) {\n errors.push({ file: e.file?.fileName ?? \"tsconfig\", message: String(e.messageText) });\n }\n return { specs: [], errors, warnings };\n }\n config = parsed;\n } else {\n config = {\n options: {\n target: ts.ScriptTarget.ES2022,\n module: ts.ModuleKind.ESNext,\n moduleResolution: ts.ModuleResolutionKind.NodeNext,\n strict: true,\n skipLibCheck: true,\n noEmit: true,\n },\n fileNames: resolveGlob(projectPath, include),\n errors: [],\n } as ts.ParsedCommandLine;\n }\n\n const program = ts.createProgram(config.fileNames, config.options);\n const typeChecker = program.getTypeChecker();\n const specs: FunctionToolSpec[] = [];\n\n for (const sourceFile of program.getSourceFiles()) {\n const fileName = sourceFile.fileName;\n if (fileName.includes(\"node_modules\") || fileName.endsWith(\".d.ts\")) continue;\n if (!config.fileNames.some((f) => path.resolve(f) === path.resolve(fileName))) continue;\n\n ts.forEachChild(sourceFile, (node) => {\n const decl = getExportedFunctionDeclaration(node, sourceFile);\n if (!decl) return;\n const func = decl.func;\n const name = decl.name;\n if (!name) return;\n\n const host = getJSDocHost(func);\n if (!hasToolTag(host)) return;\n const jsDoc = getJSDocComments(host);\n\n const description = getDescription(jsDoc, name);\n if (!description) {\n warnings.push({ file: fileName, message: `Tool ${name}: missing description, using humanized name` });\n }\n const sideEffect = getEffect(host);\n\n const onWarn = (msg: string) => warnings.push({ file: fileName, message: `${name}: ${msg}` });\n const { schema } = buildInputSchemaFromParams(func, typeChecker, onWarn);\n\n const inputSchema =\n Object.keys((schema as { properties?: object }).properties ?? {}).length > 0\n ? schema\n : { type: \"object\" as const, properties: {} };\n\n const outputSchema = buildOutputSchemaFromReturnType(func, typeChecker, onWarn);\n\n const sourcePath = path.relative(projectPath, fileName) || path.basename(fileName);\n const toolName = pathToToolName(sourcePath, name);\n\n specs.push({\n kind: FUNCTION_KIND,\n name: toolName,\n description: description || humanize(name),\n inputSchema,\n outputSchema,\n _meta: { hitl: { sideEffect } },\n sourcePath,\n exportName: name,\n });\n });\n }\n\n return { specs, errors, warnings };\n}\n\nfunction resolveGlob(projectPath: string, patterns: string[]): string[] {\n const result: string[] = [];\n const seen = new Set<string>();\n const add = (f: string) => {\n const abs = path.resolve(f);\n if (f.endsWith(\".ts\") && !f.endsWith(\".d.ts\") && !seen.has(abs)) {\n seen.add(abs);\n result.push(abs);\n }\n };\n for (const p of patterns) {\n const full = path.join(projectPath, p);\n if (full.includes(\"*\")) {\n const baseDir = full.replace(/\\*\\*\\/.*$/, \"\").replace(/\\*.*$/, \"\").replace(/\\/?$/, \"\") || \".\";\n const dir = path.resolve(projectPath, baseDir);\n if (fs.existsSync(dir)) walk(dir, add);\n } else {\n const resolved = path.resolve(projectPath, full);\n if (fs.existsSync(resolved)) {\n if (fs.statSync(resolved).isFile()) add(resolved);\n else walk(resolved, add);\n }\n }\n }\n if (result.length > 0) return result;\n const srcDir = path.join(projectPath, \"src\");\n if (fs.existsSync(srcDir)) return walkCollect(srcDir);\n return [];\n}\n\nfunction walkCollect(dir: string): string[] {\n const out: string[] = [];\n walk(dir, (fullPath) => {\n if (fullPath.endsWith(\".ts\") && !fullPath.endsWith(\".d.ts\")) out.push(path.resolve(fullPath));\n });\n return out;\n}\n\nconst SKIP_DIRS = new Set([\"node_modules\", \"generated\", \"dist\"]);\n\nfunction walk(dir: string, visit: (fullPath: string) => void): void {\n try {\n const entries = fs.readdirSync(dir, { withFileTypes: true });\n for (const e of entries) {\n const full = path.join(dir, e.name);\n if (e.isDirectory() && !SKIP_DIRS.has(e.name)) walk(full, visit);\n else if (e.isFile()) visit(full);\n }\n } catch {\n // ignore\n }\n}\n\nfunction getExportedFunctionDeclaration(\n node: ts.Node,\n _sourceFile: ts.SourceFile,\n): { func: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression; name: string } | null {\n if (ts.isFunctionDeclaration(node) && node.name) {\n const exported = (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n if (exported) return { func: node, name: node.name.getText() };\n return null;\n }\n if (ts.isVariableStatement(node)) {\n const exported = (ts.getModifiers(node) ?? []).some((m) => m.kind === ts.SyntaxKind.ExportKeyword);\n if (!exported) return null;\n for (const decl of node.declarationList.declarations) {\n let init = decl.initializer;\n while (init && (ts.isParenthesizedExpression(init) || ts.isAsExpression(init)))\n init = init.expression;\n if (init && ts.isArrowFunction(init)) {\n const name = (decl.name as ts.Identifier).getText();\n return { func: init, name };\n }\n if (init && ts.isFunctionExpression(init)) {\n const name = (decl.name as ts.Identifier).getText();\n return { func: init, name };\n }\n }\n }\n return null;\n}\n\nfunction getJSDocHost(node: ts.FunctionDeclaration | ts.ArrowFunction | ts.FunctionExpression): ts.Node {\n const parent = node.parent;\n if (ts.isVariableDeclaration(parent)) {\n const gp = parent.parent;\n if (ts.isVariableDeclarationList(gp) && gp.parent && ts.isVariableStatement(gp.parent)) return gp.parent;\n }\n return node as ts.Node;\n}\n\nfunction getJSDocComments(host: ts.Node): ts.JSDoc[] {\n const all = ts.getJSDocCommentsAndTags(host);\n return all.filter((t): t is ts.JSDoc => ts.isJSDoc(t));\n}\n\nfunction hasToolTag(host: ts.Node): boolean {\n const tags = ts.getJSDocTags(host);\n for (const tag of tags) {\n const name = (tag as { tagName?: ts.Identifier }).tagName?.getText() ?? \"\";\n if (name === \"tool\") return true;\n }\n const all = ts.getJSDocCommentsAndTags(host);\n for (const t of all) {\n if (ts.isJSDoc(t)) {\n const full = t.getFullText();\n if (full.includes(TOOL_TAG)) return true;\n }\n }\n return false;\n}\n\nfunction getDescription(jsDocs: ts.JSDoc[], fallbackName: string): string {\n for (const doc of jsDocs) {\n const comment = doc.comment;\n if (typeof comment === \"string\") {\n const first = comment.split(/\\n/)[0]?.trim() ?? \"\";\n if (first && !first.startsWith(\"@\")) return first;\n }\n if (Array.isArray(comment)) {\n const first = comment[0];\n if (first && typeof first === \"object\" && \"text\" in first) {\n const t = (first as { text: string }).text.trim();\n if (t && !t.startsWith(\"@\")) return t;\n }\n }\n const full = doc.getFullText();\n const match = full.match(/\\*\\s*@tool\\s+(.+?)(?=\\n|$|\\*\\/)/s);\n if (match?.[1]) return match[1].trim();\n }\n return \"\";\n}\n\nfunction getEffect(host: ts.Node): SideEffect {\n const tags = ts.getJSDocTags(host);\n for (const tag of tags) {\n const name = (tag as { tagName?: ts.Identifier }).tagName?.getText() ?? \"\";\n if (name === \"effect\") {\n const comment = (tag as ts.JSDocUnknownTag).comment;\n const v = (typeof comment === \"string\" ? comment : \"\").trim().toLowerCase();\n if (EFFECT_VALUES.includes(v as SideEffect)) return v as SideEffect;\n }\n }\n const all = ts.getJSDocCommentsAndTags(host);\n for (const t of all) {\n if (ts.isJSDoc(t)) {\n const full = t.getFullText();\n const match = full.match(/\\*\\s*@effect\\s+(\\w+)/);\n if (match && EFFECT_VALUES.includes(match[1] as SideEffect)) return match[1] as SideEffect;\n }\n }\n return \"none\";\n}\n\nfunction humanize(name: string): string {\n return name.replace(/([A-Z])/g, \" $1\").replace(/^./, (s) => s.toUpperCase()).trim();\n}\n\n/** Unified scan: (path, options) → DiscoverToolsResult. */\nexport function scan(\n projectPath: string,\n options: DiscoverToolsOptions = {},\n): Promise<DiscoverToolsResult> {\n const root = path.resolve(projectPath);\n const result = scanForTools({\n projectPath: root,\n include: options.include ?? [\"**/*.ts\"],\n tsconfigPath: options.tsconfigPath,\n });\n const specs = result.specs.map((s) => mcpSpecToToolSpec(s, root));\n return Promise.resolve({\n specs,\n errors: result.errors,\n warnings: result.warnings,\n });\n}\n"]}