affaan-m/ECC · error · Error
Unsupported Itô command
Error message
Unsupported Itô command "${command || "(missing)"}"; ECC permits only login, logout, auth, find, status, and evals. What it means
parseArgs validates the first non-json argument against SUPPORTED_COMMANDS (login, logout, auth, find, status, evals). Any other or missing command throws this error listing the permitted set. The interpolated command shows "(missing)" when no command argument was supplied.
Solutions
- Use one of the supported commands: ecc ito login | logout | auth | find | status | evals
- Fix typos in the subcommand (check against the list in the error message)
- Ensure the command is the first argument after any --json flag: `ecc ito --json status` is parsed as command="status"
- If running the script directly, pass argv as node scripts/ito.js status, not extra program name args
Example fix
// before ecc ito evaluate --live-sixtytwo ... // after ecc ito evals --live-sixtytwo ...
Defensive patterns
Strategy: validation
Validate before calling
const SUPPORTED = ['login', 'logout', 'auth', 'find', 'status', 'evals'];
if (!SUPPORTED.includes(command)) throw new Error(`unknown ito command: ${command}`); Type guard
const isItoCommand = (c) => ['login','logout','auth','find','status','evals'].includes(c);
Try / catch
try {
dispatch(command);
} catch (e) {
if (e.message.includes('Unsupported Itô command')) {
printUsageAndExit(1);
} else throw e;
} Prevention
- Validate the subcommand in wrapper scripts against the supported list before invoking
- Read the supported commands from the error message rather than guessing command names
- Guard against option-as-first-argument mistakes by always passing the command explicitly first
When it happens
Trigger: Running `ecc ito deploy`, `ecc ito` (no subcommand), misspellings like `ecc ito statu` or `ecc ito login --json login`, or accidentally passing an option as the first argument, e.g. `ecc ito --json`.
Common situations: Typos in the subcommand; calling the script directly (node scripts/ito.js) with the wrong argv shape; older command names removed from the supported set; copy-pasted invocations from other ECC tools.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- --all-harnesses and --harness are mutually exclusive.
- Choose exactly one memory body source: --stdin or…
- Conflict messages require at least one --file
- connector name required unless --all is set
- graph sync does not accept a session ID when --all is set
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/4ba91a9ff8cd4dc7.
Report an issue: GitHub.
Appendix: source
Thrown at scripts/ito.js:166
return Object.freeze({ help: true, invocationArgs: [] });
}
if (environment.ECC_DRY_RUN === "1" || args.includes("--dry-run")) {
throw new Error(
"Itô compute has no paper or dry-run success mode. No CLI operation was invoked."
);
}
const jsonIndexes = args
.map((value, index) => (value === "--json" ? index : -1))
.filter((index) => index >= 0);
if (jsonIndexes.length > 1) {
throw new Error("--json may only be provided once");
}
const withoutJson = args.filter((value) => value !== "--json");
const command = withoutJson.shift();
if (!SUPPORTED_COMMANDS.includes(command)) {
throw new Error(
`Unsupported Itô command "${command || "(missing)"}"; ECC permits only login, logout, auth, find, status, and evals.`
);
}
if (command === "auth" && withoutJson.includes("--no-browser")) {
throw new Error("--no-browser is valid only for ecc ito login; auth is validation-only.");
}
if (command === "evals") {
validateNodeQualificationArgs(withoutJson, environment);
}
return Object.freeze({
help: false,
invocationArgs: Object.freeze([
...(jsonIndexes.length === 1 ? ["--json"] : []),
command,
...withoutJson,
]),
});View on GitHub (pinned to 8321021c54)