{"version":3,"file":"analyzer-BmnsTRE1.mjs","names":[],"sources":["../src/module-graph.ts","../src/analyzer.ts"],"sourcesContent":["import { builtinModules } from 'node:module'\nimport { lstat, readFile, readdir, stat } from 'node:fs/promises'\nimport { dirname, extname, join, relative, resolve } from 'node:path'\nimport ts from 'typescript'\n\nexport const SCRIPT_EXTENSIONS = new Set(['.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs'])\nconst MODULE_EXTENSIONS = ['.ts', '.tsx', '.mts', '.cts', '.js', '.jsx', '.mjs', '.cjs', '.json']\n\ninterface LocalReference {\n  kind: 'module' | 'asset'\n  specifier: string\n  // A lazy reference is only evaluated when some feature runs, never while the\n  // extension entry loads: dynamic import()/require() inside a function body,\n  // or worker/data assets spawned on demand. Pi's loader therefore succeeds\n  // even when a lazy target is unresolvable; problems on lazy paths surface\n  // (identically under Pi and pi2dsh) only if that feature is used.\n  lazy: boolean\n}\n\nexport interface LocalClosureIssue {\n  file: string\n  kind: LocalReference['kind']\n  specifier: string\n  detail: string\n  lazy: boolean\n}\n\nexport interface LocalClosure {\n  files: string[]\n  // Files whose module-level code executes the moment the extension entry\n  // loads (transitive non-lazy module edges from the entries).\n  loadTimeFiles: Set<string>\n  issues: LocalClosureIssue[]\n}\n\nexport function sourceKind(path: string): ts.ScriptKind {\n  if (path.endsWith('.js') || path.endsWith('.mjs') || path.endsWith('.cjs')) return ts.ScriptKind.JS\n  if (path.endsWith('.jsx')) return ts.ScriptKind.JSX\n  if (path.endsWith('.tsx')) return ts.ScriptKind.TSX\n  return ts.ScriptKind.TS\n}\n\nfunction literalModule(node: ts.Expression | undefined): string | undefined {\n  return node !== undefined && (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node)) ? node.text : undefined\n}\n\nfunction isImportMetaUrl(node: ts.Expression | undefined): boolean {\n  return node !== undefined && ts.isPropertyAccessExpression(node) && node.name.text === 'url'\n    && ts.isMetaProperty(node.expression) && node.expression.keywordToken === ts.SyntaxKind.ImportKeyword\n}\n\nfunction localReferences(path: string, text: string): LocalReference[] {\n  const source = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, sourceKind(path))\n  const values = new Map<string, LocalReference>()\n  const createRequireNames = new Set<string>(['createRequire'])\n  const requireNames = new Set<string>(['require'])\n  const add = (kind: LocalReference['kind'], specifier: string, lazy: boolean): void => {\n    // '#'-prefixed specifiers are Node subpath imports resolved through the\n    // package's own `imports` map — package-local, not external dependencies.\n    if (!specifier.startsWith('.') && !specifier.startsWith('#')) return\n    const key = `${kind}:${specifier}`\n    const existing = values.get(key)\n    // A specifier reached both statically and lazily executes at load time.\n    if (existing === undefined) values.set(key, { kind, specifier, lazy })\n    else if (existing.lazy && !lazy) existing.lazy = false\n  }\n  function collectRequireAliases(node: ts.Node): void {\n    if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)\n      && (node.moduleSpecifier.text === 'node:module' || node.moduleSpecifier.text === 'module')\n      && node.importClause?.namedBindings !== undefined && ts.isNamedImports(node.importClause.namedBindings)) {\n      for (const element of node.importClause.namedBindings.elements) {\n        if ((element.propertyName?.text ?? element.name.text) === 'createRequire') createRequireNames.add(element.name.text)\n      }\n    } else if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)\n      && node.initializer !== undefined && ts.isCallExpression(node.initializer)\n      && ts.isIdentifier(node.initializer.expression) && createRequireNames.has(node.initializer.expression.text)) {\n      requireNames.add(node.name.text)\n    }\n    ts.forEachChild(node, collectRequireAliases)\n  }\n  collectRequireAliases(source)\n  function visit(node: ts.Node): void {\n    if ((ts.isImportDeclaration(node) || ts.isExportDeclaration(node)) && node.moduleSpecifier !== undefined\n      && ts.isStringLiteral(node.moduleSpecifier)) {\n      add('module', node.moduleSpecifier.text, false)\n    } else if (ts.isImportEqualsDeclaration(node) && ts.isExternalModuleReference(node.moduleReference)\n      && ts.isStringLiteral(node.moduleReference.expression)) {\n      add('module', node.moduleReference.expression.text, false)\n    } else if (ts.isCallExpression(node) && node.arguments.length > 0\n      && ((node.expression.kind === ts.SyntaxKind.ImportKeyword)\n        || (ts.isIdentifier(node.expression) && requireNames.has(node.expression.text)))) {\n      const specifier = literalModule(node.arguments[0])\n      if (specifier !== undefined) add('module', specifier, insideFunctionBody(node))\n    } else if (ts.isNewExpression(node) && ts.isIdentifier(node.expression) && node.expression.text === 'URL'\n      && isImportMetaUrl(node.arguments?.[1])) {\n      const specifier = literalModule(node.arguments?.[0])\n      if (specifier !== undefined) add('asset', specifier, false)\n    }\n    ts.forEachChild(node, visit)\n  }\n  visit(source)\n  return [...values.values()]\n}\n\nfunction externalPackage(specifier: string): string | undefined {\n  // `bun:*` counts as a host builtin, not an npm dependency: Pi's official\n  // distribution is a Bun-compiled binary, so ecosystem packages gate these\n  // requires behind runtime detection and take their declared Node fallback\n  // (better-sqlite3, node:sqlite) everywhere else.\n  if (specifier.startsWith('.') || specifier.startsWith('/') || specifier.startsWith('#')\n    || specifier.startsWith('node:') || specifier.startsWith('bun:')\n    || builtinModules.includes(specifier)) return undefined\n  const parts = specifier.split('/')\n  return specifier.startsWith('@') ? parts.slice(0, 2).join('/') : parts[0]\n}\n\nfunction insideTry(node: ts.Node): boolean {\n  let current: ts.Node | undefined = node.parent\n  while (current !== undefined) {\n    if (ts.isTryStatement(current)) return true\n    // Stop at function boundaries: a try in an outer function does not guard\n    // an import inside a nested callback executed later.\n    if (ts.isFunctionLike(current)) {\n      // ...unless the whole function body IS awaited inside the try; keeping\n      // this conservative check simple errs toward reporting the dependency.\n      return false\n    }\n    current = current.parent\n  }\n  return false\n}\n\n// Inside any function body means the expression does not run while the module\n// itself loads — it runs when (if ever) that function is called.\nfunction insideFunctionBody(node: ts.Node): boolean {\n  let current: ts.Node | undefined = node.parent\n  while (current !== undefined) {\n    if (ts.isFunctionLike(current)) return true\n    current = current.parent\n  }\n  return false\n}\n\nexport interface RuntimeDependencyUse {\n  name: string\n  // true when every use sits on a lazy path (dynamic import/require inside a\n  // function body): the module loads fine without the dependency, exactly as\n  // under Pi, and only the feature that calls it needs the install.\n  lazy: boolean\n}\n\nexport function runtimeExternalPackages(path: string, text: string): RuntimeDependencyUse[] {\n  const source = ts.createSourceFile(path, text, ts.ScriptTarget.Latest, true, sourceKind(path))\n  const packages = new Map<string, RuntimeDependencyUse>()\n  const createRequireNames = new Set<string>(['createRequire'])\n  const requireNames = new Set<string>(['require'])\n  const add = (specifier: string, lazy: boolean): void => {\n    const name = externalPackage(specifier)\n    if (name === undefined || name.length === 0) return\n    const existing = packages.get(name)\n    if (existing === undefined) packages.set(name, { name, lazy })\n    else if (existing.lazy && !lazy) existing.lazy = false\n  }\n  function collectRequireAliases(node: ts.Node): void {\n    if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)\n      && (node.moduleSpecifier.text === 'node:module' || node.moduleSpecifier.text === 'module')\n      && node.importClause?.namedBindings !== undefined && ts.isNamedImports(node.importClause.namedBindings)) {\n      for (const element of node.importClause.namedBindings.elements) {\n        if ((element.propertyName?.text ?? element.name.text) === 'createRequire') createRequireNames.add(element.name.text)\n      }\n    } else if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)\n      && node.initializer !== undefined && ts.isCallExpression(node.initializer)\n      && ts.isIdentifier(node.initializer.expression) && createRequireNames.has(node.initializer.expression.text)) {\n      requireNames.add(node.name.text)\n    }\n    ts.forEachChild(node, collectRequireAliases)\n  }\n  collectRequireAliases(source)\n  function visit(node: ts.Node): void {\n    if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {\n      const clause = node.importClause\n      const named = clause?.namedBindings\n      const namedImportsAreTypeOnly = named !== undefined && ts.isNamedImports(named)\n        && named.elements.length > 0 && named.elements.every(element => element.isTypeOnly)\n      if (clause === undefined || (!clause.isTypeOnly && (clause.name !== undefined || !namedImportsAreTypeOnly))) {\n        add(node.moduleSpecifier.text, false)\n      }\n    } else if (ts.isExportDeclaration(node) && !node.isTypeOnly\n      && node.moduleSpecifier !== undefined && ts.isStringLiteral(node.moduleSpecifier)) {\n      add(node.moduleSpecifier.text, false)\n    } else if (ts.isImportEqualsDeclaration(node) && !node.isTypeOnly\n      && ts.isExternalModuleReference(node.moduleReference) && ts.isStringLiteral(node.moduleReference.expression)) {\n      add(node.moduleReference.expression.text, false)\n    } else if (ts.isCallExpression(node) && node.arguments.length > 0\n      && ((node.expression.kind === ts.SyntaxKind.ImportKeyword)\n        || (ts.isIdentifier(node.expression) && requireNames.has(node.expression.text)))) {\n      // A dynamic import/require wrapped in try/catch is the ecosystem's\n      // optional-dependency idiom (e.g. pi-harness-runtime's \"// Dynamic\n      // import for Playwright (optional dependency)\") — its absence is a\n      // designed degradation, not an undeclared runtime requirement.\n      if (!insideTry(node)) {\n        const specifier = literalModule(node.arguments[0])\n        if (specifier !== undefined) add(specifier, insideFunctionBody(node))\n      }\n    }\n    ts.forEachChild(node, visit)\n  }\n  visit(source)\n  return [...packages.values()]\n}\n\nfunction inside(rootDir: string, path: string): boolean {\n  const pathRelative = relative(rootDir, path)\n  return pathRelative === '' || (pathRelative !== '..' && !pathRelative.startsWith(`..${process.platform === 'win32' ? '\\\\' : '/'}`))\n}\n\nfunction sourceAlternates(base: string): string[] {\n  const extension = extname(base)\n  const stem = extension.length > 0 ? base.slice(0, -extension.length) : base\n  if (extension === '.js') return [`${stem}.ts`, `${stem}.tsx`]\n  if (extension === '.mjs') return [`${stem}.mts`, `${stem}.ts`]\n  if (extension === '.cjs') return [`${stem}.cts`, `${stem}.ts`]\n  if (extension === '.jsx') return [`${stem}.tsx`, `${stem}.ts`]\n  return []\n}\n\nasync function isFile(path: string): Promise<boolean> {\n  try {\n    return (await stat(path)).isFile()\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code === 'ENOENT') return false\n    throw error\n  }\n}\n\nfunction subpathImportTarget(rootDir: string, specifier: string, importsMap: Record<string, unknown>): string | undefined {\n  const conditionValue = (value: unknown): string | undefined => {\n    if (typeof value === 'string') return value\n    if (typeof value !== 'object' || value === null) return undefined\n    const record = value as Record<string, unknown>\n    for (const condition of ['import', 'node', 'default']) {\n      const candidate = conditionValue(record[condition])\n      if (candidate !== undefined) return candidate\n    }\n    return undefined\n  }\n  const direct = conditionValue(importsMap[specifier])\n  if (direct !== undefined) return resolve(rootDir, direct)\n  for (const [pattern, value] of Object.entries(importsMap)) {\n    const star = pattern.indexOf('*')\n    if (star === -1) continue\n    const prefix = pattern.slice(0, star)\n    const suffix = pattern.slice(star + 1)\n    if (!specifier.startsWith(prefix) || !specifier.endsWith(suffix)) continue\n    const wildcard = specifier.slice(prefix.length, specifier.length - suffix.length)\n    const target = conditionValue(value)\n    if (target !== undefined) return resolve(rootDir, target.replace('*', wildcard))\n  }\n  return undefined\n}\n\nasync function packageImportsMap(rootDir: string): Promise<Record<string, unknown>> {\n  try {\n    const parsed = JSON.parse(await readFile(join(rootDir, 'package.json'), 'utf8')) as { imports?: unknown }\n    return typeof parsed.imports === 'object' && parsed.imports !== null ? parsed.imports as Record<string, unknown> : {}\n  } catch {\n    return {}\n  }\n}\n\nasync function resolveModule(fromFile: string, specifier: string, rootDir: string, importsMap: Record<string, unknown>): Promise<string> {\n  if (specifier.startsWith('#')) {\n    const target = subpathImportTarget(rootDir, specifier, importsMap)\n    if (target === undefined) {\n      throw new Error(`cannot resolve subpath import ${JSON.stringify(specifier)} through the package \"imports\" map`)\n    }\n    return resolveModule(fromFile, relative(dirname(fromFile), target).startsWith('.')\n      ? relative(dirname(fromFile), target)\n      : `./${relative(dirname(fromFile), target)}`, rootDir, importsMap)\n  }\n  const base = resolve(dirname(fromFile), specifier)\n  const candidates = [\n    base,\n    ...sourceAlternates(base),\n    ...(extname(base) === '' ? MODULE_EXTENSIONS.map(extension => `${base}${extension}`) : []),\n    ...MODULE_EXTENSIONS.map(extension => join(base, `index${extension}`)),\n  ]\n  for (const candidate of [...new Set(candidates)]) {\n    if (!inside(rootDir, candidate)) throw new Error(`extension import escapes the Pi package: ${specifier} from ${fromFile}`)\n    if (await isFile(candidate)) return candidate\n  }\n  throw new Error(`cannot resolve local extension import ${JSON.stringify(specifier)} from ${fromFile}`)\n}\n\nasync function expandAsset(path: string, rootDir: string): Promise<string[]> {\n  if (!inside(rootDir, path)) throw new Error(`extension asset escapes the Pi package: ${path}`)\n  let info\n  try {\n    info = await lstat(path)\n  } catch (error) {\n    if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error\n    // A `new URL('./worker.js', import.meta.url)` asset may only exist in its\n    // TypeScript source form before the package builds; track the source.\n    for (const alternate of sourceAlternates(path)) {\n      if (await isFile(alternate)) return [alternate]\n    }\n    throw error\n  }\n  if (info.isSymbolicLink()) throw new Error(`refusing to copy symbolic link from Pi package: ${path}`)\n  if (info.isFile()) return [path]\n  if (!info.isDirectory()) return []\n  const output: string[] = []\n  for (const entry of await readdir(path)) output.push(...await expandAsset(join(path, entry), rootDir))\n  return output\n}\n\nexport async function collectLocalClosure(rootDir: string, entries: readonly string[]): Promise<LocalClosure> {\n  const importsMap = await packageImportsMap(rootDir)\n  const graph = new Map<string, Array<{ lazy: boolean, targets: string[] }>>()\n  const issues: LocalClosureIssue[] = []\n  const queue = entries.map(path => resolve(path))\n  // Pass 1: the full local reference graph, lazy edges included, so the\n  // snapshot carries every file any feature could ever load.\n  while (queue.length > 0) {\n    const source = queue.shift() as string\n    if (graph.has(source)) continue\n    if (!inside(rootDir, source)) throw new Error(`extension source escapes the Pi package: ${source}`)\n    const info = await lstat(source)\n    if (info.isSymbolicLink()) throw new Error(`refusing to copy symbolic link from Pi package: ${source}`)\n    if (!info.isFile()) throw new Error(`extension closure contains a non-file path: ${source}`)\n    const edges: Array<{ lazy: boolean, targets: string[] }> = []\n    graph.set(source, edges)\n    if (!SCRIPT_EXTENSIONS.has(extname(source))) continue\n    const text = await readFile(source, 'utf8')\n    for (const reference of localReferences(source, text)) {\n      // Worker/data assets never execute while the entry loads; the feature\n      // that spawns them does, so their whole subtree is a lazy path.\n      const lazy = reference.lazy || reference.kind === 'asset'\n      try {\n        const targets = reference.kind === 'module'\n          ? [await resolveModule(source, reference.specifier, rootDir, importsMap)]\n          : await expandAsset(resolve(dirname(source), reference.specifier), rootDir)\n        edges.push({ lazy, targets })\n        queue.push(...targets)\n      } catch (error) {\n        issues.push({\n          file: source,\n          kind: reference.kind,\n          specifier: reference.specifier,\n          detail: error instanceof Error ? error.message : String(error),\n          lazy,\n        })\n      }\n    }\n  }\n  // Pass 2: load-time reachability across non-lazy module edges only. This is\n  // the set whose problems actually break `pi` (and pi2dsh) at extension load;\n  // everything else fails at feature-use time, identically under both hosts.\n  const loadTimeFiles = new Set<string>()\n  const loadQueue = entries.map(path => resolve(path)).filter(path => graph.has(path))\n  while (loadQueue.length > 0) {\n    const source = loadQueue.shift() as string\n    if (loadTimeFiles.has(source)) continue\n    loadTimeFiles.add(source)\n    for (const edge of graph.get(source) ?? []) {\n      if (edge.lazy) continue\n      for (const target of edge.targets) {\n        if (!loadTimeFiles.has(target)) loadQueue.push(target)\n      }\n    }\n  }\n  // An issue found inside a file that itself only loads lazily cannot break\n  // extension load either, however the reference is written.\n  for (const issue of issues) {\n    if (!loadTimeFiles.has(issue.file)) issue.lazy = true\n  }\n  return { files: [...graph.keys()].sort(), loadTimeFiles, issues }\n}\n","import { readFile } from 'node:fs/promises'\nimport { basename, extname, relative } from 'node:path'\nimport ts from 'typescript'\nimport {\n  PI_CODING_AGENT_PACKAGES,\n  PI_AI_PACKAGES,\n  PI_TUI_PACKAGES,\n  ruleForApi,\n  ruleForContextProperty,\n  ruleForEvent,\n  ruleForHostImport,\n  ruleForUiContextProperty,\n} from './compatibility.js'\nimport { collectLocalClosure, runtimeExternalPackages, SCRIPT_EXTENSIONS, sourceKind } from './module-graph.js'\nimport type {\n  CompatibilityFinding,\n  CompatibilityLevel,\n  CompatibilityReport,\n  ResolvedPiPackage,\n} from './types.js'\n\nfunction literalText(node: ts.Node | undefined): string | undefined {\n  return node !== undefined && (ts.isStringLiteral(node) || ts.isNoSubstitutionTemplateLiteral(node))\n    ? node.text\n    : undefined\n}\n\nfunction hasModifier(node: ts.Node, kind: ts.SyntaxKind): boolean {\n  return ts.canHaveModifiers(node) && ts.getModifiers(node)?.some(modifier => modifier.kind === kind) === true\n}\n\nfunction parameterIdentifier(node: ts.SignatureDeclarationBase): string | undefined {\n  const parameter = node.parameters[0]\n  return parameter !== undefined && ts.isIdentifier(parameter.name) ? parameter.name.text : undefined\n}\n\nfunction extensionApiReceivers(source: ts.SourceFile): Set<string> {\n  const receivers = new Set<string>()\n  const functions = new Map<string, ts.FunctionLikeDeclarationBase>()\n\n  function index(node: ts.Node): void {\n    if (ts.isFunctionDeclaration(node) && node.name !== undefined) functions.set(node.name.text, node)\n    if (ts.isVariableDeclaration(node) && ts.isIdentifier(node.name)\n      && node.initializer !== undefined\n      && (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))) {\n      functions.set(node.name.text, node.initializer)\n    }\n    if (ts.isParameter(node) && node.type !== undefined\n      && /(?:^|\\.)ExtensionAPI\\b/u.test(node.type.getText(source)) && ts.isIdentifier(node.name)) {\n      receivers.add(node.name.text)\n    }\n    // Published Pi packages commonly ship JavaScript with type annotations\n    // erased. `pi` is the documented ExtensionAPI parameter name throughout\n    // the ecosystem, including helper functions reached from the entry point.\n    if (ts.isParameter(node) && ts.isIdentifier(node.name)\n      && /^(?:pi|extensionApi)$/iu.test(node.name.text)) {\n      receivers.add(node.name.text)\n    }\n    ts.forEachChild(node, index)\n  }\n  index(source)\n\n  for (const statement of source.statements) {\n    if (ts.isFunctionDeclaration(statement)\n      && hasModifier(statement, ts.SyntaxKind.ExportKeyword)\n      && hasModifier(statement, ts.SyntaxKind.DefaultKeyword)) {\n      const name = parameterIdentifier(statement)\n      if (name !== undefined) receivers.add(name)\n    }\n    if (ts.isExportAssignment(statement)) {\n      const expression = statement.expression\n      if (ts.isArrowFunction(expression) || ts.isFunctionExpression(expression)) {\n        const name = parameterIdentifier(expression)\n        if (name !== undefined) receivers.add(name)\n      } else if (ts.isIdentifier(expression)) {\n        const candidate = functions.get(expression.text)\n        if (candidate !== undefined) {\n          const name = parameterIdentifier(candidate)\n          if (name !== undefined) receivers.add(name)\n        }\n      }\n    }\n    if (ts.isExportDeclaration(statement) && statement.moduleSpecifier === undefined\n      && statement.exportClause !== undefined && ts.isNamedExports(statement.exportClause)) {\n      for (const element of statement.exportClause.elements) {\n        if (element.name.text !== 'default' || element.propertyName === undefined || !ts.isIdentifier(element.propertyName)) continue\n        const candidate = functions.get(element.propertyName.text)\n        if (candidate !== undefined) {\n          const name = parameterIdentifier(candidate)\n          if (name !== undefined) receivers.add(name)\n        }\n      }\n    }\n  }\n  return receivers\n}\n\nfunction extensionApiProperties(source: ts.SourceFile, receivers: ReadonlySet<string>): Set<string> {\n  const properties = new Set<string>()\n  function visit(node: ts.Node): void {\n    if ((ts.isPropertyDeclaration(node) || ts.isParameter(node)) && ts.isIdentifier(node.name)) {\n      const typed = node.type !== undefined && /(?:^|\\.)(?:Pi)?ExtensionAPI\\b/u.test(node.type.getText(source))\n      if (typed || /^(?:pi|extensionApi)$/iu.test(node.name.text)) properties.add(node.name.text)\n    } else if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken\n      && ts.isPropertyAccessExpression(node.left) && node.left.expression.kind === ts.SyntaxKind.ThisKeyword\n      && ts.isIdentifier(node.right) && receivers.has(node.right.text)) {\n      properties.add(node.left.name.text)\n    }\n    ts.forEachChild(node, visit)\n  }\n  visit(source)\n  return properties\n}\n\nfunction enclosingFunctionName(node: ts.ParameterDeclaration): string | undefined {\n  const parent = node.parent\n  if (ts.isMethodDeclaration(parent) && parent.name !== undefined) return parent.name.getText()\n  if ((ts.isArrowFunction(parent) || ts.isFunctionExpression(parent)) && ts.isPropertyAssignment(parent.parent)) {\n    return parent.parent.name.getText()\n  }\n  return undefined\n}\n\nfunction extensionContextReceivers(source: ts.SourceFile): Set<string> {\n  const receivers = new Set<string>()\n  function visit(node: ts.Node): void {\n    if (ts.isParameter(node) && ts.isIdentifier(node.name)) {\n      const typedContext = node.type !== undefined\n        && /(?:^|\\.)(?:Extension|ExtensionCommand|ToolExecution)Context\\b/u.test(node.type.getText(source))\n      const conventionalHandlerContext = /^(?:ctx|context)$/iu.test(node.name.text)\n        && /^(?:execute|handler)$/u.test(enclosingFunctionName(node) ?? '')\n      if (typedContext || conventionalHandlerContext) receivers.add(node.name.text)\n    }\n    ts.forEachChild(node, visit)\n  }\n  visit(source)\n  return receivers\n}\n\n// The three Pi packages whose named exports the shim audit tracks.\nconst PI_SHIMMED_PACKAGES = new Set<string>([\n  ...PI_CODING_AGENT_PACKAGES,\n  ...PI_TUI_PACKAGES,\n  ...PI_AI_PACKAGES,\n])\n\n// Everything Pi's loader provides to extensions without a declaration —\n// exempt from the undeclared-runtime-dependency fatal, and (for typebox) not\n// subject to per-symbol shim auditing.\nconst PI_HOST_PACKAGES = new Set<string>([\n  ...PI_SHIMMED_PACKAGES,\n  'typebox',\n  '@sinclair/typebox',\n])\n\nfunction dependencyNames(packageJson: Record<string, unknown>): Set<string> {\n  const names = new Set<string>()\n  for (const field of ['dependencies', 'optionalDependencies', 'peerDependencies']) {\n    const value = packageJson[field]\n    if (typeof value !== 'object' || value === null || Array.isArray(value)) continue\n    for (const [name, specifier] of Object.entries(value)) {\n      if (typeof specifier === 'string') names.add(name)\n    }\n  }\n  return names\n}\n\nfunction pushFinding(\n  findings: CompatibilityFinding[],\n  rootDir: string,\n  file: string,\n  source: ts.SourceFile,\n  node: ts.Node,\n  capability: string,\n  level: CompatibilityLevel,\n  detail: string,\n): void {\n  const position = source.getLineAndCharacterOfPosition(node.getStart(source))\n  findings.push({\n    capability,\n    level,\n    file: relative(rootDir, file).replaceAll('\\\\', '/'),\n    line: position.line + 1,\n    detail,\n  })\n}\n\nasync function analyzeExtension(rootDir: string, file: string): Promise<CompatibilityFinding[]> {\n  const text = await readFile(file, 'utf8')\n  const source = ts.createSourceFile(file, text, ts.ScriptTarget.Latest, true, sourceKind(file))\n  const findings: CompatibilityFinding[] = []\n  const receivers = extensionApiReceivers(source)\n  const apiProperties = extensionApiProperties(source, receivers)\n  const contextReceivers = extensionContextReceivers(source)\n  const methodAliases = new Map<string, string>()\n  const eventBusAliases = new Set<string>()\n  const uiAliases = new Set<string>()\n\n  function reportHostImport(packageName: string, importedName: string, node: ts.Node): void {\n    const matched = ruleForHostImport(packageName, importedName)\n    if (matched === undefined) {\n      pushFinding(\n        findings, rootDir, file, source, node, `host-import(${packageName}:${importedName})`, 'unsupported',\n        `The pi2dsh host shim does not export ${JSON.stringify(importedName)} from ${JSON.stringify(packageName)}.`,\n      )\n      return\n    }\n    pushFinding(\n      findings, rootDir, file, source, node, `host-import(${packageName}:${importedName})`, matched.level, matched.detail,\n    )\n  }\n\n  for (const statement of source.statements) {\n    if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)\n      && PI_SHIMMED_PACKAGES.has(statement.moduleSpecifier.text)) {\n      const packageName = statement.moduleSpecifier.text\n      const clause = statement.importClause\n      if (clause === undefined) {\n        reportHostImport(packageName, '<side-effect>', statement)\n        continue\n      }\n      if (clause.isTypeOnly) continue\n      if (clause.name !== undefined) reportHostImport(packageName, 'default', clause.name)\n      if (clause.namedBindings !== undefined && ts.isNamespaceImport(clause.namedBindings)) {\n        reportHostImport(packageName, '*', clause.namedBindings)\n      } else if (clause.namedBindings !== undefined) {\n        for (const element of clause.namedBindings.elements) {\n          if (!element.isTypeOnly) reportHostImport(packageName, element.propertyName?.text ?? element.name.text, element)\n        }\n      }\n    } else if (ts.isExportDeclaration(statement) && !statement.isTypeOnly\n      && statement.moduleSpecifier !== undefined && ts.isStringLiteral(statement.moduleSpecifier)\n      && PI_HOST_PACKAGES.has(statement.moduleSpecifier.text)) {\n      const packageName = statement.moduleSpecifier.text\n      if (statement.exportClause === undefined || ts.isNamespaceExport(statement.exportClause)) {\n        reportHostImport(packageName, '*', statement)\n      } else {\n        for (const element of statement.exportClause.elements) {\n          if (!element.isTypeOnly) reportHostImport(packageName, element.propertyName?.text ?? element.name.text, element)\n        }\n      }\n    } else if (ts.isImportEqualsDeclaration(statement) && !statement.isTypeOnly\n      && ts.isExternalModuleReference(statement.moduleReference)\n      && ts.isStringLiteral(statement.moduleReference.expression)\n      && PI_HOST_PACKAGES.has(statement.moduleReference.expression.text)) {\n      reportHostImport(statement.moduleReference.expression.text, '*', statement)\n    }\n  }\n\n  const declarations: ts.VariableDeclaration[] = []\n  const isApiReceiver = (node: ts.Expression): boolean => ts.isIdentifier(node) && receivers.has(node.text)\n    || (ts.isPropertyAccessExpression(node) && node.expression.kind === ts.SyntaxKind.ThisKeyword\n      && apiProperties.has(node.name.text))\n  function collectDeclarations(node: ts.Node): void {\n    if (ts.isVariableDeclaration(node)) declarations.push(node)\n    ts.forEachChild(node, collectDeclarations)\n  }\n  collectDeclarations(source)\n\n  for (let pass = 0; pass < declarations.length + 1; pass += 1) {\n    let changed = false\n    for (const declaration of declarations) {\n      const initializer = declaration.initializer\n      if (initializer === undefined) continue\n      if (ts.isIdentifier(declaration.name) && isApiReceiver(initializer)) {\n        if (!receivers.has(declaration.name.text)) {\n          receivers.add(declaration.name.text)\n          changed = true\n        }\n      }\n      if (ts.isIdentifier(declaration.name) && ts.isIdentifier(initializer) && contextReceivers.has(initializer.text)) {\n        if (!contextReceivers.has(declaration.name.text)) {\n          contextReceivers.add(declaration.name.text)\n          changed = true\n        }\n      }\n      if (ts.isIdentifier(declaration.name) && ts.isPropertyAccessExpression(initializer)\n        && initializer.name.text === 'ui' && ts.isIdentifier(initializer.expression)\n        && contextReceivers.has(initializer.expression.text) && !uiAliases.has(declaration.name.text)) {\n        uiAliases.add(declaration.name.text)\n        changed = true\n      }\n      if (ts.isIdentifier(declaration.name) && ts.isPropertyAccessExpression(initializer)\n        && isApiReceiver(initializer.expression)) {\n        if (initializer.name.text === 'events') {\n          if (!eventBusAliases.has(declaration.name.text)) {\n            eventBusAliases.add(declaration.name.text)\n            changed = true\n          }\n        } else if (!methodAliases.has(declaration.name.text)) {\n          methodAliases.set(declaration.name.text, initializer.name.text)\n          changed = true\n        }\n      }\n      if (ts.isObjectBindingPattern(declaration.name) && isApiReceiver(initializer)) {\n        for (const element of declaration.name.elements) {\n          if (!ts.isIdentifier(element.name)) continue\n          const method = element.propertyName !== undefined && ts.isIdentifier(element.propertyName)\n            ? element.propertyName.text\n            : element.name.text\n          if (method === 'events') {\n            if (!eventBusAliases.has(element.name.text)) {\n              eventBusAliases.add(element.name.text)\n              changed = true\n            }\n          } else if (!methodAliases.has(element.name.text)) {\n            methodAliases.set(element.name.text, method)\n            changed = true\n          }\n        }\n      }\n    }\n    if (!changed) break\n  }\n\n  function reportMethod(method: string, args: ts.NodeArray<ts.Expression>, node: ts.Node): void {\n    if (method === 'on') {\n      const event = literalText(args[0])\n      if (event === undefined) {\n        pushFinding(\n          findings, rootDir, file, source, node, 'on(<dynamic>)', 'unsupported',\n          'Dynamic event names cannot be audited or mapped safely.',\n        )\n      } else {\n        const rule = ruleForEvent(event)\n        pushFinding(findings, rootDir, file, source, node, `on(${event})`, rule.level, rule.detail)\n      }\n      return\n    }\n    const rule = ruleForApi(method)\n    if (rule === undefined) {\n      pushFinding(\n        findings, rootDir, file, source, node, method, 'unsupported',\n        `Unknown ExtensionAPI method ${JSON.stringify(method)} cannot be audited or mapped safely.`,\n      )\n      return\n    }\n    pushFinding(findings, rootDir, file, source, node, method, rule.level, rule.detail)\n  }\n\n  function reportEventBus(method: string, node: ts.Node): void {\n    const rule = ruleForApi('events')\n    if ((method === 'on' || method === 'emit') && rule !== undefined) {\n      pushFinding(findings, rootDir, file, source, node, `events.${method}`, rule.level, rule.detail)\n    } else {\n      pushFinding(\n        findings, rootDir, file, source, node, `events.${method}`, 'unsupported',\n        `Unknown Pi event-bus method ${JSON.stringify(method)} cannot be mapped safely.`,\n      )\n    }\n  }\n\n  function reportContext(property: string, node: ts.Node): void {\n    const matched = ruleForContextProperty(property)\n    if (matched === undefined) {\n      pushFinding(\n        findings, rootDir, file, source, node, `ctx.${property}`, 'unsupported',\n        `Unknown Pi extension-context property ${JSON.stringify(property)} cannot be audited or mapped safely.`,\n      )\n    } else {\n      pushFinding(findings, rootDir, file, source, node, `ctx.${property}`, matched.level, matched.detail)\n    }\n  }\n\n  function reportUiContext(property: string, node: ts.Node): void {\n    const matched = ruleForUiContextProperty(property)\n    if (matched === undefined) {\n      pushFinding(\n        findings, rootDir, file, source, node, `ctx.ui.${property}`, 'unsupported',\n        `Unknown Pi UI-context property ${JSON.stringify(property)} cannot be audited or mapped safely.`,\n      )\n    } else {\n      pushFinding(findings, rootDir, file, source, node, `ctx.ui.${property}`, matched.level, matched.detail)\n    }\n  }\n\n  function visit(node: ts.Node): void {\n    if (ts.isCallExpression(node) && ts.isIdentifier(node.expression)) {\n      const method = methodAliases.get(node.expression.text)\n      if (method !== undefined) reportMethod(method, node.arguments, node)\n    } else if (ts.isCallExpression(node) && ts.isPropertyAccessExpression(node.expression)) {\n      const target = node.expression.expression\n      if (isApiReceiver(target)) {\n        reportMethod(node.expression.name.text, node.arguments, node)\n      } else if (ts.isIdentifier(target) && eventBusAliases.has(target.text)) {\n        reportEventBus(node.expression.name.text, node)\n      } else if (ts.isPropertyAccessExpression(target)\n        && target.name.text === 'events'\n        && isApiReceiver(target.expression)) {\n        reportEventBus(node.expression.name.text, node)\n      }\n    } else if (ts.isCallExpression(node) && ts.isElementAccessExpression(node.expression)\n      && isApiReceiver(node.expression.expression)) {\n      const method = literalText(node.expression.argumentExpression)\n      if (method === undefined) {\n        pushFinding(\n          findings, rootDir, file, source, node, '<dynamic-api-method>', 'unsupported',\n          'Dynamic ExtensionAPI method access cannot be audited or mapped safely.',\n        )\n      } else {\n        reportMethod(method, node.arguments, node)\n      }\n    }\n    if (ts.isPropertyAccessExpression(node)) {\n      const target = node.expression\n      if (ts.isPropertyAccessExpression(target) && target.name.text === 'ui'\n        && ts.isIdentifier(target.expression) && contextReceivers.has(target.expression.text)) {\n        reportUiContext(node.name.text, node)\n      } else if (ts.isIdentifier(target) && uiAliases.has(target.text)) {\n        reportUiContext(node.name.text, node)\n      } else if (ts.isIdentifier(target) && contextReceivers.has(target.text) && node.name.text !== 'ui') {\n        reportContext(node.name.text, node)\n      }\n    } else if (ts.isElementAccessExpression(node) && ts.isIdentifier(node.expression)\n      && contextReceivers.has(node.expression.text)) {\n      const property = literalText(node.argumentExpression)\n      if (property === undefined) {\n        pushFinding(\n          findings, rootDir, file, source, node, 'ctx.<dynamic>', 'unsupported',\n          'Dynamic Pi extension-context access cannot be audited or mapped safely.',\n        )\n      } else if (property !== 'ui') {\n        reportContext(property, node)\n      }\n    }\n    ts.forEachChild(node, visit)\n  }\n\n  visit(source)\n  return findings\n}\n\nexport async function analyzePackage(pkg: ResolvedPiPackage): Promise<CompatibilityReport> {\n  const extensionClosure = await collectLocalClosure(pkg.rootDir, pkg.resources.extensions)\n  const findings = (await Promise.all(\n    extensionClosure.files.filter(file => SCRIPT_EXTENSIONS.has(extname(file)))\n      .map(file => analyzeExtension(pkg.rootDir, file)),\n  )).flat()\n\n  if (pkg.resources.extensions.length > 0 && findings.length === 0) {\n    findings.push({\n      capability: 'static-audit',\n      level: 'unsupported',\n      file: pkg.resources.extensions.map(file => relative(pkg.rootDir, file).replaceAll('\\\\', '/')).join(', '),\n      line: 1,\n      detail: 'No ExtensionAPI use was statically proven across the local module closure; conversion fails closed instead of claiming compatibility.',\n    })\n  }\n  for (const issue of extensionClosure.issues) {\n    // Only a break on the load-time path blocks the package: Pi's own loader\n    // fails the same lazy references at feature-use time, and the snapshot\n    // preserves the published file layout, so behavior matches Pi exactly.\n    const lazyIssue = issue.lazy || issue.kind === 'asset'\n    findings.push({\n      capability: `${issue.kind}(${issue.specifier})`,\n      level: lazyIssue ? 'partial' : 'fatal',\n      file: relative(pkg.rootDir, issue.file).replaceAll('\\\\', '/'),\n      line: 1,\n      detail: lazyIssue\n        ? `Unresolved reference on a lazy path: ${issue.detail}. Extension load is unaffected; if the feature that evaluates it runs, it fails the same way under Pi (published file layout is preserved).`\n        : `The local extension closure is incomplete: ${issue.detail}`,\n    })\n  }\n\n  const declaredDependencies = dependencyNames(pkg.packageJson)\n  for (const file of extensionClosure.files.filter(candidate => SCRIPT_EXTENSIONS.has(extname(candidate)))) {\n    const text = await readFile(file, 'utf8')\n    const lazyFile = !extensionClosure.loadTimeFiles.has(file)\n    for (const use of runtimeExternalPackages(file, text)) {\n      if (PI_HOST_PACKAGES.has(use.name) || declaredDependencies.has(use.name)) continue\n      // Undeclared imports only crash extension load when they execute at load\n      // time. On lazy paths (function-body dynamic imports, or files that are\n      // themselves only lazily reachable) Pi degrades per-feature; mirror that.\n      const lazyUse = use.lazy || lazyFile\n      findings.push({\n        capability: lazyUse ? `optional-lazy-dependency(${use.name})` : `undeclared-runtime-dependency(${use.name})`,\n        level: lazyUse ? 'partial' : 'fatal',\n        file: relative(pkg.rootDir, file).replaceAll('\\\\', '/'),\n        line: 1,\n        detail: lazyUse\n          ? `The extension imports ${JSON.stringify(use.name)} only on a lazily-evaluated path without declaring it; the feature that needs it asks for the module at call time, exactly as under Pi (install ${use.name} to use that feature).`\n          : `The extension imports ${JSON.stringify(use.name)} at load time, but the Pi package does not declare it as a dependency.`,\n      })\n    }\n  }\n\n  const resourceFinding = (file: string, capability: string, level: CompatibilityLevel, detail: string): CompatibilityFinding => ({\n    capability,\n    level,\n    file: relative(pkg.rootDir, file).replaceAll('\\\\', '/'),\n    line: 1,\n    detail,\n  })\n  for (const file of pkg.resources.skills.filter(path => basename(path) === 'SKILL.md' || path.endsWith('.md'))) {\n    findings.push(resourceFinding(file, 'skill', 'full', 'Copied as a DSH filesystem skill with its resource directory intact.'))\n  }\n  for (const file of pkg.resources.prompts) {\n    findings.push(resourceFinding(file, 'prompt', 'full', 'Registered as a DSH slash command with Pi-compatible argument expansion.'))\n  }\n  for (const file of pkg.resources.themes) {\n    findings.push(resourceFinding(file, 'theme', 'unsupported', 'Pi terminal themes have no effect in DSH Web or headless surfaces.'))\n  }\n  findings.sort((left, right) => left.file.localeCompare(right.file) || left.line - right.line || left.capability.localeCompare(right.capability))\n\n  const summary: Record<CompatibilityLevel, number> = { full: 0, partial: 0, unsupported: 0, fatal: 0 }\n  for (const finding of findings) summary[finding.level] += 1\n  // Static analysis screens; it does not certify. Only fatal findings block a\n  // bundle (it cannot be built or trusted). Everything else installs: verify\n  // real behavior with the black-box run instead of trusting this verdict.\n  const verdict = summary.fatal > 0 ? 'blocked' : summary.partial > 0 || summary.unsupported > 0 ? 'review' : 'ready'\n\n  return {\n    schemaVersion: 1,\n    package: pkg.identity,\n    verdict,\n    summary,\n    resources: {\n      extensions: pkg.resources.extensions.map(file => relative(pkg.rootDir, file).replaceAll('\\\\', '/')),\n      skills: pkg.resources.skills.map(file => relative(pkg.rootDir, file).replaceAll('\\\\', '/')),\n      prompts: pkg.resources.prompts.map(file => relative(pkg.rootDir, file).replaceAll('\\\\', '/')),\n      themes: pkg.resources.themes.map(file => relative(pkg.rootDir, file).replaceAll('\\\\', '/')),\n    },\n    findings,\n  }\n}\n"],"mappings":"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"}