@aigne/afs-registry 1.11.0-beta.11 → 1.11.0-beta.13

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner-CI1h9bn6.mjs","names":["createRequire"],"sources":["../src/scanner.ts"],"sourcesContent":["/**\n * Runtime provider scanner — discovers installed @aigne/afs-* packages\n * by scanning the workspace or node_modules, then calling static manifest().\n *\n * This is the primary data source for the registry provider.\n *\n * Caching: results are persisted to disk (~/.afs-config/scan-cache.json)\n * keyed on pnpm-lock.yaml mtime. Cold start reads from disk cache;\n * full re-scan only runs when dependencies change.\n */\n\nimport type { ProviderManifest } from \"./index.js\";\n\n/** Packages that are NOT providers (infrastructure, tooling). */\nconst EXCLUDED_PACKAGES = new Set([\n \"@aigne/afs\",\n \"@aigne/afs-testing\",\n \"@aigne/afs-explorer\",\n \"@aigne/afs-registry\",\n \"@aigne/afs-http\",\n \"@aigne/afs-cli\",\n \"@aigne/afs-mapping\",\n \"@aigne/afs-compute-abstraction\",\n \"@aigne/afs-world-mapping\",\n \"@aigne/afs-domain-action\",\n \"@aigne/afs-session\",\n]);\n\n/** Cached scan result — populated after first successful scan. */\nlet cachedResult: ProviderManifest[] | undefined;\n\n/** Disk cache file name. */\nconst CACHE_FILE = \"scan-cache.json\";\n\ninterface DiskCache {\n /** mtime (ms) of the lockfile used as cache key */\n lockMtime: number;\n /** Cached manifests */\n providers: ProviderManifest[];\n}\n\n/**\n * Scan installed @aigne/afs-* packages and collect their manifests.\n *\n * Resolution strategies (tried in order):\n * 1. Workspace mode: find pnpm-workspace.yaml, scan providers/ and packages/ dirs\n * 2. node_modules mode: find @aigne scope dir in node_modules, scan afs-* subdirs\n *\n * Results are cached in memory + on disk. Disk cache is invalidated when\n * the lockfile (pnpm-lock.yaml or package-lock.json) changes.\n */\nexport async function scanInstalledProviders(): Promise<ProviderManifest[]> {\n if (cachedResult) return cachedResult;\n\n // Try disk cache first\n const diskHit = readDiskCache();\n if (diskHit) {\n cachedResult = diskHit;\n return diskHit;\n }\n\n const results: ProviderManifest[] = [];\n const packageDirs = findAignePackages();\n\n for (const { packageName, packageDir } of packageDirs) {\n if (EXCLUDED_PACKAGES.has(packageName)) continue;\n\n try {\n const manifests = await importAndExtractManifests(packageDir);\n for (const m of manifests) {\n results.push({\n type: (m.type as ProviderManifest[\"type\"]) ?? \"provider\",\n name: m.name,\n description: m.description,\n category: m.category,\n uriTemplate: m.uriTemplate,\n tags: m.tags,\n capabilityTags: m.capabilityTags,\n useCases: m.useCases,\n schema: convertZodToJsonSchema(m.schema),\n treeSchema: m.treeSchema,\n agentMdPath: m.agentMdPath,\n });\n }\n } catch {\n // Silent skip — package may not be a valid provider\n }\n }\n\n cachedResult = results;\n writeDiskCache(results);\n return results;\n}\n\n/**\n * Clear the cached scan result (memory + disk). Useful for testing or forced re-scan.\n */\nexport function clearScanCache(): void {\n cachedResult = undefined;\n deleteDiskCache();\n}\n\n// ── Disk Cache ──\n\nfunction getCacheDir(): string | undefined {\n const { join } = require(\"node:path\") as typeof import(\"node:path\");\n const home = process.env.HOME || process.env.USERPROFILE;\n if (!home) return undefined;\n return join(home, \".afs-config\");\n}\n\nfunction getLockfileMtime(): number | undefined {\n const { statSync, existsSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join, dirname } = require(\"node:path\") as typeof import(\"node:path\");\n\n // Walk up to find lockfile\n let dir = process.cwd();\n for (let i = 0; i < 10; i++) {\n for (const name of [\"pnpm-lock.yaml\", \"package-lock.json\", \"yarn.lock\"]) {\n const p = join(dir, name);\n if (existsSync(p)) {\n try {\n return statSync(p).mtimeMs;\n } catch {\n return undefined;\n }\n }\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return undefined;\n}\n\nfunction readDiskCache(): ProviderManifest[] | undefined {\n const { existsSync, readFileSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join } = require(\"node:path\") as typeof import(\"node:path\");\n\n const cacheDir = getCacheDir();\n if (!cacheDir) return undefined;\n\n const cachePath = join(cacheDir, CACHE_FILE);\n if (!existsSync(cachePath)) return undefined;\n\n try {\n const data = JSON.parse(readFileSync(cachePath, \"utf-8\")) as DiskCache;\n const lockMtime = getLockfileMtime();\n if (lockMtime !== undefined && data.lockMtime === lockMtime && Array.isArray(data.providers)) {\n return data.providers;\n }\n } catch {\n // Corrupted cache — ignore\n }\n return undefined;\n}\n\nfunction writeDiskCache(providers: ProviderManifest[]): void {\n const { mkdirSync, writeFileSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join } = require(\"node:path\") as typeof import(\"node:path\");\n\n const cacheDir = getCacheDir();\n if (!cacheDir) return;\n\n const lockMtime = getLockfileMtime();\n if (lockMtime === undefined) return;\n\n try {\n mkdirSync(cacheDir, { recursive: true });\n const data: DiskCache = { lockMtime, providers };\n writeFileSync(join(cacheDir, CACHE_FILE), JSON.stringify(data), \"utf-8\");\n } catch {\n // Non-critical — silent fail\n }\n}\n\nfunction deleteDiskCache(): void {\n const { unlinkSync, existsSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join } = require(\"node:path\") as typeof import(\"node:path\");\n\n const cacheDir = getCacheDir();\n if (!cacheDir) return;\n\n const cachePath = join(cacheDir, CACHE_FILE);\n try {\n if (existsSync(cachePath)) unlinkSync(cachePath);\n } catch {\n // ignore\n }\n}\n\n/**\n * Find all @aigne/afs-* package directories.\n * Tries workspace mode first, then falls back to node_modules scanning.\n */\nfunction findAignePackages(): Array<{ packageName: string; packageDir: string }> {\n // Strategy 1: Workspace mode (monorepo dev)\n const wsPackages = findWorkspacePackages();\n if (wsPackages.length > 0) return wsPackages;\n\n // Strategy 2: node_modules scanning (production install)\n return findNodeModulesPackages();\n}\n\n/**\n * Find @aigne/afs-* packages in a pnpm/npm workspace by walking up to find\n * workspace root (pnpm-workspace.yaml or root package.json with workspaces),\n * then scanning the listed workspace directories.\n */\nfunction findWorkspacePackages(): Array<{ packageName: string; packageDir: string }> {\n const { existsSync, readFileSync, readdirSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join, dirname } = require(\"node:path\") as typeof import(\"node:path\");\n\n const results: Array<{ packageName: string; packageDir: string }> = [];\n\n // Walk up from cwd to find workspace root\n let dir = process.cwd();\n let workspaceRoot: string | undefined;\n\n for (let i = 0; i < 10; i++) {\n if (existsSync(join(dir, \"pnpm-workspace.yaml\"))) {\n workspaceRoot = dir;\n break;\n }\n // Also check for npm/yarn workspaces\n if (existsSync(join(dir, \"package.json\"))) {\n try {\n const pkg = JSON.parse(readFileSync(join(dir, \"package.json\"), \"utf-8\"));\n if (Array.isArray(pkg.workspaces)) {\n workspaceRoot = dir;\n break;\n }\n } catch {\n // ignore\n }\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n\n if (!workspaceRoot) return results;\n\n // Scan known directories for @aigne/afs-* packages\n const scanDirs = [\"providers\", \"packages\"];\n for (const scanDir of scanDirs) {\n const fullDir = join(workspaceRoot, scanDir);\n if (!existsSync(fullDir)) continue;\n\n const entries = readdirSync(fullDir);\n for (const entry of entries) {\n const pkgJsonPath = join(fullDir, entry, \"package.json\");\n if (!existsSync(pkgJsonPath)) continue;\n\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf-8\"));\n if (pkg.name?.startsWith(\"@aigne/afs-\")) {\n results.push({\n packageName: pkg.name,\n packageDir: join(fullDir, entry),\n });\n }\n } catch {\n // ignore invalid package.json\n }\n }\n }\n\n return results;\n}\n\n/**\n * Find @aigne/afs-* packages by scanning node_modules/@aigne/ directory.\n * Used in production when packages are installed as npm dependencies.\n */\nfunction findNodeModulesPackages(): Array<{ packageName: string; packageDir: string }> {\n const { existsSync, readdirSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join, dirname } = require(\"node:path\") as typeof import(\"node:path\");\n const { createRequire } = require(\"node:module\") as typeof import(\"node:module\");\n\n const results: Array<{ packageName: string; packageDir: string }> = [];\n\n const contexts = [\n join(process.cwd(), \"__resolve__.js\"),\n ...(process.argv[1] ? [join(dirname(process.argv[1]), \"__resolve__.js\")] : []),\n ];\n\n for (const context of contexts) {\n try {\n const req = createRequire(context);\n const corePackageJson = req.resolve(\"@aigne/afs/package.json\");\n const aigneDir = dirname(dirname(corePackageJson));\n\n if (!existsSync(aigneDir)) continue;\n\n const entries = readdirSync(aigneDir);\n for (const entry of entries) {\n if (!entry.startsWith(\"afs-\")) continue;\n const packageName = `@aigne/${entry}`;\n const packageDir = join(aigneDir, entry);\n if (existsSync(join(packageDir, \"package.json\"))) {\n results.push({ packageName, packageDir });\n }\n }\n\n if (results.length > 0) break;\n } catch {\n // Try next context\n }\n }\n\n return results;\n}\n\n/**\n * Import a package and extract manifests from classes with static manifest().\n */\nasync function importAndExtractManifests(packageDir: string): Promise<RawManifest[]> {\n const { existsSync, readFileSync } = require(\"node:fs\") as typeof import(\"node:fs\");\n const { join } = require(\"node:path\") as typeof import(\"node:path\");\n\n // Resolve ESM entry point from package.json\n let importPath = packageDir;\n const pkgJsonPath = join(packageDir, \"package.json\");\n if (existsSync(pkgJsonPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgJsonPath, \"utf-8\"));\n const esmEntry = (typeof pkg.exports === \"object\" && pkg.exports[\".\"]?.import) || pkg.module;\n if (esmEntry) importPath = join(packageDir, esmEntry);\n else if (pkg.main) importPath = join(packageDir, pkg.main);\n } catch {\n // Use packageDir as-is\n }\n }\n\n const mod = (await import(importPath)) as Record<string, unknown>;\n\n const manifests: RawManifest[] = [];\n const seen = new Set<string>();\n\n for (const key of Object.keys(mod)) {\n const val = mod[key];\n if (typeof val !== \"function\") continue;\n if (typeof (val as any).manifest !== \"function\") continue;\n\n const result = (val as any).manifest();\n const items: RawManifest[] = Array.isArray(result) ? result : [result];\n for (const item of items) {\n if (item?.name && !seen.has(item.name)) {\n seen.add(item.name);\n\n // Try to extract treeSchema from static method\n if (!item.treeSchema && typeof (val as any).treeSchema === \"function\") {\n try {\n item.treeSchema = (val as any).treeSchema();\n } catch {\n // Provider doesn't support treeSchema — skip\n }\n }\n\n // Record path to .afs/AGENT.md (lazy-loaded by registry on demand)\n if (!item.agentMdPath) {\n const mdPath = join(packageDir, \".afs\", \"AGENT.md\");\n if (existsSync(mdPath)) {\n item.agentMdPath = mdPath;\n }\n }\n\n manifests.push(item);\n }\n }\n }\n\n return manifests;\n}\n\n/** Raw manifest from static manifest() — may have Zod schema. */\ninterface RawManifest {\n type?: string;\n name: string;\n description: string;\n category: string;\n uriTemplate: string;\n schema?: any;\n tags?: string[];\n /** Controlled capability tags from standard vocabulary */\n capabilityTags?: string[];\n useCases?: string[];\n /** Tree schema from static treeSchema() — path structure declaration */\n treeSchema?: Record<string, unknown>;\n /** File path to .afs/AGENT.md — lazy-loaded by registry on demand */\n agentMdPath?: string;\n}\n\n/**\n * Convert a Zod schema to JSON Schema (if it's a Zod type).\n * Returns undefined if conversion fails or schema is not Zod.\n */\nfunction convertZodToJsonSchema(schema: unknown): Record<string, unknown> | undefined {\n if (!schema) return undefined;\n // Check if it's already a plain object (JSON Schema)\n if (typeof schema === \"object\" && schema !== null && !(\"_def\" in schema)) {\n return schema as Record<string, unknown>;\n }\n try {\n // biome-ignore lint/correctness/noUndeclaredDependencies: zod is optional — try/catch handles missing\n const zod = require(\"zod\");\n return zod.z.toJSONSchema(schema);\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { n as scanInstalledProviders, t as clearScanCache } from "./scanner-CI1h9bn6.mjs";
2
+
3
+ export { scanInstalledProviders };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aigne/afs-registry",
3
- "version": "1.11.0-beta.11",
3
+ "version": "1.11.0-beta.13",
4
4
  "description": "AIGNE AFS registry provider - virtual file tree for discovering and mounting providers",
5
5
  "license": "UNLICENSED",
6
6
  "publishConfig": {
@@ -34,7 +34,7 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "ufo": "^1.6.3",
37
- "@aigne/afs": "^1.11.0-beta.11"
37
+ "@aigne/afs": "^1.11.0-beta.13"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/bun": "^1.3.6",
@@ -42,7 +42,7 @@
42
42
  "rimraf": "^6.1.2",
43
43
  "tsdown": "0.20.0-beta.3",
44
44
  "typescript": "5.9.2",
45
- "@aigne/afs-testing": "1.11.0-beta.11",
45
+ "@aigne/afs-testing": "1.11.0-beta.13",
46
46
  "@aigne/typescript-config": "0.0.0"
47
47
  },
48
48
  "scripts": {