infiniflow/ragflow · error · Error

Skills space not found

Error message

Skills space not found

What it means

Thrown in web/src/pages/skills/hooks.ts:773 when ensureSkillSpaceFolder(normalizedSpaceName, true) returns a falsy folder id. That helper looks up (or creates) the root file-manager folder for the skills space; a falsy return means the folder could not be found nor created — e.g. the file-manager API failed, returned code !== 0, or gave a response without an id.

Source

Thrown at web/src/pages/skills/hooks.ts:773

        // Filter out ignored/junk files first
        const filteredFiles = filterUploadFiles(files);

        // Validate skill format
        const validation = await validateSkillFormatImpl(filteredFiles);
        if (!validation.valid) {
          const errorKey = `skills.validation.${validation.error}`;
          const errorMsg = t(errorKey) || t('skills.validation.invalid');
          message.error(errorMsg);
          return false;
        }

        // Get space folder ID (using space name for file system)
        const spaceFolderId = await ensureSkillSpaceFolder(
          normalizedSpaceName,
          true,
        );

        if (!spaceFolderId) throw new Error('Skills space not found');

        const skillNameNormalized = name.replace(/\s+/g, '-').toLowerCase();

        // Check if skill folder exists
        const { data: existingData } = await fileManagerService.listFile({
          parent_id: spaceFolderId,
        });

        let skillFolderId: string;

        if (existingData.code === 0) {
          const existingSkill = existingData.data?.files?.find(
            (f: any) => f.name === skillNameNormalized && f.type === 'folder',
          );

          if (existingSkill) {
            // Skill exists, check if version already exists
            const { data: versionData } = await fileManagerService.listFile({

View on GitHub (pinned to 554fb1133a)

Solutions

  1. Inspect ensureSkillSpaceFolder's internals: log which call (list vs create) failed and the response code
  2. Verify the file-manager service is healthy and authenticated (list root folders via UI)
  3. Check that normalizedSpaceName matches the actual folder name in the file manager
  4. Have ensureSkillSpaceFolder throw its own descriptive error instead of returning falsy
  5. Retry the upload after re-login if the token expired

Example fix

// before
const spaceFolderId = await ensureSkillSpaceFolder(
  normalizedSpaceName,
  true,
);
if (!spaceFolderId) throw new Error('Skills space not found');

// after
const spaceFolderId = await ensureSkillSpaceFolder(
  normalizedSpaceName,
  true,
);
if (!spaceFolderId) {
  message.error(t('skills.errors.spaceFolderUnavailable'));
  return false;
}
Defensive patterns

Strategy: try-catch

Validate before calling

const spaceFolderExists = async (name: string) => {
  const { data } = await fileManagerService.listFile({ parent_id: ROOT });
  return (data.data?.files || []).some((f) => f.name === name.trim());
};

Type guard

const isFolderId = (v: unknown): v is string =>
  typeof v === 'string' && v.length > 0;

Try / catch

try {
  const id = await ensureSkillSpaceFolder(name, true);
  if (!id) throw new Error('space folder unavailable');
} catch (e) {
  message.error(e.message);
  return false;
}

Prevention

When it happens

Trigger: The file-manager list/create-folder API call failed (auth expired, backend down); the space folder exists in the file manager but under a differently normalized name so lookup misses and creation is rejected; backend returned code 0 but omitted data.id; ensureSkillSpaceFolder swallows an exception and returns undefined.

Common situations: First upload to a new space where folder auto-creation fails silently. Name normalization mismatch (trailing spaces, case) between lookup and creation. Backend file-manager service not initialized.

Related errors


AI-assisted analysis of infiniflow/ragflow@554fb1133a (2026-08-15). Data as JSON: /api/errors/f9837591ca197ead. Report an issue: GitHub.