affaan-m/ECC · error · Error

Invalid Kimi install profile: ${profile}

Error message

Invalid Kimi install profile: ${profile}

What it means

When Kimi is selected, the managed install profile must be one of minimal, core, developer, security, research, or full (VALID_PROFILES). The profile selects which module bundle the managed installer lays down. Any other value is rejected because there is no module set defined for it. The check only fires when Kimi is selected; otherwise profile is undefined.

Source

Thrown at scripts/lib/multi-harness-setup.js:45

  const includesKimi = harnesses.includes('kimi');
  if (!includesClaude && (input.claudeScope !== undefined || input.claudeHooks !== undefined)) {
    throw new Error('Claude scope and hook options require Claude to be selected.');
  }
  if (!includesKimi && input.profile !== undefined) {
    throw new Error('The managed install profile requires Kimi to be selected.');
  }

  const claudeScope = includesClaude ? (input.claudeScope || 'user') : undefined;
  const claudeHooks = includesClaude ? (input.claudeHooks || 'standard') : undefined;
  const profile = includesKimi ? (input.profile || 'core') : undefined;
  if (claudeScope && !VALID_CLAUDE_SCOPES.has(claudeScope)) {
    throw new Error(`Invalid Claude scope: ${claudeScope}`);
  }
  if (claudeHooks && !VALID_CLAUDE_HOOKS.has(claudeHooks)) {
    throw new Error(`Invalid Claude hooks preference: ${claudeHooks}`);
  }
  if (profile && !VALID_PROFILES.has(profile)) {
    throw new Error(`Invalid Kimi install profile: ${profile}`);
  }

  return {
    harnesses,
    ...(claudeHooks ? { claudeHooks } : {}),
    ...(claudeScope ? { claudeScope } : {}),
    dryRun: Boolean(input.dryRun),
    json: Boolean(input.json),
    ...(profile ? { profile } : {}),
    yes: Boolean(input.yes),
  };
}

function canonicalPath(filePath) {
  return realpathNearestExisting(filePath);
}

function pathsMatch(left, right) {

View on GitHub (pinned to 01e15490f0)

Solutions

  1. Use one of the six valid profiles: 'minimal', 'core' (default), 'developer', 'security', 'research', or 'full'.
  2. Omit profile to accept the default ('core').
  3. If you need a custom module set, that is not supported via profile — drive the installer's request layer directly with a custom module list instead.
  4. Verify spelling and case — values are matched exactly against the lowercase set.

Example fix

// before
normalizeGuidedInstallRequest({ harnesses: ['kimi'], profile: 'basic' }); // throws
// after
normalizeGuidedInstallRequest({ harnesses: ['kimi'], profile: 'minimal' });
// or omit for the default
normalizeGuidedInstallRequest({ harnesses: ['kimi'] }); // profile = 'core'
Defensive patterns

Strategy: validation

Validate before calling

const { VALID_PROFILES } = require('./scripts/lib/multi-harness-setup');
function assertProfile(value) {
  if (value !== undefined && !VALID_PROFILES.has(value)) {
    throw new Error(`Invalid Kimi install profile: ${value}`);
  }
  return value;
}

Type guard

function isValidProfile(v) {
  return v === undefined || new Set(['minimal','core','developer','security','research','full']).has(v);
}

Try / catch

try { normalizeGuidedInstallRequest(input); }
catch (error) {
  if (/Invalid Kimi install profile/i.test(error.message)) {
    console.error('profile must be one of: minimal, core, developer, security, research, full.');
    return;
  }
  throw error;
}

Prevention

When it happens

Trigger: Calling normalizeGuidedInstallRequest with harnesses including 'kimi' and a profile outside {minimal, core, developer, security, research, full}. Examples: 'basic', 'complete', 'enterprise', an empty string, or a typo like 'dev'.

Common situations: Typing the profile name; assuming 'basic' or 'complete' are valid; passing a custom profile id; stale naming from a prior version; a UI dropdown with the wrong value list; copy-paste from outdated docs.

Related errors


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