affaan-m/ECC · error

The canonical ito-compute-cli is unpublished and ECC will no

Error message

The canonical ito-compute-cli is unpublished and ECC will not resolve a credential-bearing "ito" executable from PATH. Build it from ${CANONICAL_REPOSITORY.replace(/\.git$/, "")}/${CANONICAL_PACKAGE_PATH}, run npm ci and npm run check, then set ${EXECUTABLE_OVERRIDE} to the explicit absolute dist/bin/ito.js path.

What it means

Thrown by resolveItoExecutable at scripts/ito.js:189-196 when the ECC_ITO_CLI_EXECUTABLE environment variable is unset, undefined, or trims to empty. ECC deliberately refuses to discover a credential-bearing 'ito' binary via PATH for security: PATH resolution could pick up a shim or hostile executable. The canonical ito-compute-cli package is currently unpublished, so the operator must build it locally and point ECC at the explicit built entry. The message embeds build instructions and the canonical repo path (CANONICAL_REPOSITORY with trailing .git stripped, plus CANONICAL_PACKAGE_PATH).

Source

Thrown at scripts/ito.js:190

  }
  if (command === "evals") {
    validateNodeQualificationArgs(withoutJson, environment);
  }

  return Object.freeze({
    help: false,
    invocationArgs: Object.freeze([
      ...(jsonIndexes.length === 1 ? ["--json"] : []),
      command,
      ...withoutJson,
    ]),
  });
}

function resolveItoExecutable(environment = process.env) {
  const configured = environment[EXECUTABLE_OVERRIDE]?.trim();
  if (!configured) {
    throw new Error([
      "The canonical ito-compute-cli is unpublished and ECC will not resolve",
      `a credential-bearing "ito" executable from PATH. Build it from`,
      `${CANONICAL_REPOSITORY.replace(/\.git$/, "")}/${CANONICAL_PACKAGE_PATH},`,
      "run npm ci and npm run check, then set",
      `${EXECUTABLE_OVERRIDE} to the explicit absolute dist/bin/ito.js path.`,
    ].join(" "));
  }

  if (!path.isAbsolute(configured)) {
    throw new Error(
      `${EXECUTABLE_OVERRIDE} must be an absolute path explicitly configured by the operator.`
    );
  }
  return assertUsableExecutable(configured);
}

function assertUsableExecutable(candidate) {
  let canonicalCandidate;

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Clone and build the canonical CLI: `git clone https://github.com/Ito-Markets/ito-cloud-runtime.git && cd ito-cloud-runtime/cli/ito-compute-cli && npm ci && npm run check`.
  2. Export the absolute built entry: `export ECC_ITO_CLI_EXECUTABLE="/abs/ito-cloud-runtime/cli/ito-compute-cli/dist/bin/ito.js"`.
  3. Add the export to ~/.zshrc / ~/.bashrc / the CI env so it persists.
  4. Verify with `echo "$ECC_ITO_CLI_EXECUTABLE"` and `test -f "$ECC_ITO_CLI_EXECUTABLE"` before rerunning ecc ito.

Example fix

// before
$ ecc ito status
Error: The canonical ito-compute-cli is unpublished ...
// after
$ git clone https://github.com/Ito-Markets/ito-cloud-runtime.git
$ cd ito-cloud-runtime/cli/ito-compute-cli && npm ci && npm run check
$ export ECC_ITO_CLI_EXECUTABLE="$PWD/dist/bin/ito.js"
$ ecc ito status
Defensive patterns

Strategy: validation

Validate before calling

function assertItoExecutableConfigured(env) {
  const v = (env.ECC_ITO_CLI_EXECUTABLE || '').trim();
  if (!v) {
    throw new Error('ECC_ITO_CLI_EXECUTABLE is unset. Build ito-compute-cli and export the absolute dist/bin/ito.js path.');
  }
  return v;
}

Prevention

When it happens

Trigger: Any `ecc ito <command>` invocation (other than --help/-h) when ECC_ITO_CLI_EXECUTABLE is not set. main() always calls resolveItoExecutable after parseArgs succeeds (ito.js:304).

Common situations: First-time setup after upgrading ECC; new machine without the env var exported; CI runner that does not source the operator's shell rc; operator cloned ito-cloud-runtime but forgot to export ECC_ITO_CLI_EXECUTABLE in the shell that runs ecc.

Related errors


AI-assisted analysis of affaan-m/ECC@01e15490f0 (2026-08-13). Data as JSON: /api/errors/b971dfdf27ed4d44. Report an issue: GitHub.