stablyai/orca · error

[verify-skills-cli-runtime] missing entry ${entry}

Error message

[verify-skills-cli-runtime] missing entry ${entry}

What it means

collectRuntimeClosure() computes the entry as resolve(outDir, 'cli', 'index.js') and throws if it doesn't existSync. The runtime closure walk has to start somewhere; if the expected cli/index.js entry isn't present, the build either didn't run, emitted a different entry path, or outDir is wrong.

Source

Thrown at config/scripts/verify-skills-cli-runtime.cjs:115

  }
  if (isOutsideRoot(artifactRoot, resolved)) {
    throw new Error(
      `[verify-skills-cli-runtime] import "${specifier}" from ` +
        `${artifactPath(outDir, importer)} resolved outside ${artifactRoot}: ${resolved}`
    )
  }
  return resolved
}

function collectRuntimeClosure(outDir, artifactRoot = dirname(outDir)) {
  outDir = realpathSync(outDir)
  artifactRoot = realpathSync(artifactRoot)
  if (isOutsideRoot(artifactRoot, outDir)) {
    throw new Error(`[verify-skills-cli-runtime] ${outDir} is outside ${artifactRoot}`)
  }
  const entry = resolve(outDir, 'cli', 'index.js')
  if (!existsSync(entry)) {
    throw new Error(`[verify-skills-cli-runtime] missing entry ${entry}`)
  }
  const pending = [entry]
  const visited = new Set()

  while (pending.length > 0) {
    const file = pending.pop()
    if (!file || visited.has(file)) {
      continue
    }
    visited.add(file)
    const source = readFileSync(file, 'utf8')
    for (const specifier of runtimeImportSpecifiers(source, file)) {
      const resolved = resolveRuntimeImport(outDir, artifactRoot, file, specifier)
      if (resolved && !isOutsideRoot(artifactRoot, resolved) && /\.(?:c|m)?js$/.test(resolved)) {
        pending.push(resolved)
      }
    }
  }

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Confirm outDir/cli/index.js actually exists (ls the path from the error message).
  2. If the build emits a different entry name, update the verifier's entry path or fix the build to emit cli/index.js.
  3. Ensure the build step ran successfully before the verify step.
  4. Re-check outDir passed to collectRuntimeClosure matches the real build output directory.
Defensive patterns

Strategy: validation

Validate before calling

// Before the closure walk, confirm the entry exists:
import { existsSync } from 'node:fs'
import path from 'node:path'
const entry = path.join(outDir, 'cli', 'index.js')
if (!existsSync(entry)) {
  throw new Error(`Build did not produce expected entry ${entry}; run the build first`)
}

Prevention

When it happens

Trigger: The CLI build wasn't run before verification; the build emits index.cjs or dist/cli/index.js instead of cli/index.js; outDir points at the wrong directory; the build failed silently and produced partial output.

Common situations: Build step skipped or failing in CI; bundler output config changed the entry filename; monorepo where the package's dist is at a different relative path; verification step running before the build step.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/2aaca70714037eb5. Report an issue: GitHub.