paperclipai/paperclip · error · Error

Only managed_subfolder spaces are supported until dynamic lo

Error message

Only managed_subfolder spaces are supported until dynamic local folder bindings are available.

What it means

Thrown by createSpace when input.folderMode is set to anything other than 'managed_subfolder' (the default). Other folder modes (e.g. external local bindings) are not yet implemented, so createSpace refuses them.

Source

Thrown at packages/plugins/plugin-llm-wiki/src/wiki/core.ts:1418

       FROM ${spaceTable(ctx)}
      WHERE company_id = $1 AND wiki_id = $2 AND status <> 'archived'
      ORDER BY CASE WHEN slug = 'default' THEN 0 ELSE 1 END, display_name, slug`,
    [input.companyId, wikiId],
  );
  const spaces = rows.length > 0 ? rows.map(wikiSpaceFromRow) : [fallbackDefaultSpace({ companyId: input.companyId, wikiId })];
  return { spaces };
}

export async function createSpace(ctx: PluginContext, input: CreateSpaceInput): Promise<{ status: "created"; space: WikiSpace }> {
  const wikiId = normalizeWikiId(input.wikiId);
  const displayName = stringField(input.displayName) ?? stringField(input.slug) ?? "New space";
  const slug = normalizeSpaceSlug(input.slug ?? displayName);
  if (slug === DEFAULT_SPACE_SLUG) {
    return { status: "created", space: await ensureDefaultSpace(ctx, { companyId: input.companyId, wikiId }) };
  }
  const folderMode = input.folderMode ?? "managed_subfolder";
  if (folderMode !== "managed_subfolder") {
    throw new Error("Only managed_subfolder spaces are supported until dynamic local folder bindings are available.");
  }
  const accessScope = input.accessScope ?? "shared";
  const id = randomUUID();
  const pathPrefix = `spaces/${slug}`;
  await ctx.db.execute(
    `INSERT INTO ${spaceTable(ctx)}
       (id, company_id, wiki_id, slug, display_name, space_type, folder_mode, root_folder_key, path_prefix, access_scope, settings, status)
     VALUES ($1, $2, $3, $4, $5, 'local_folder', $6, $7, $8, $9, $10::jsonb, 'active')`,
    [
      id,
      input.companyId,
      wikiId,
      slug,
      displayName,
      folderMode,
      WIKI_ROOT_FOLDER_KEY,
      pathPrefix,
      accessScope,

View on GitHub (pinned to 67001ec6eb)

Solutions

  1. Omit folderMode so it defaults to 'managed_subfolder'.
  2. If you passed folderMode explicitly, set it to 'managed_subfolder'.
  3. Wait for dynamic local folder bindings to ship before attempting external folder modes.

Example fix

// before
await createSpace(ctx, { companyId, slug: "docs", folderMode: "external_folder" });

// after
await createSpace(ctx, { companyId, slug: "docs" });
// or
await createSpace(ctx, { companyId, slug: "docs", folderMode: "managed_subfolder" });
Defensive patterns

Strategy: validation

Validate before calling

function sanitizeCreateSpaceInput(input) {
  const folderMode = input.folderMode ?? "managed_subfolder";
  if (folderMode !== "managed_subfolder") {
    throw new Error(`Unsupported folderMode: ${folderMode}`);
  }
  return { ...input, folderMode };
}

Type guard

function isSupportedFolderMode(input) {
  const m = input.folderMode ?? "managed_subfolder";
  return m === "managed_subfolder";
}

Try / catch

try {
  await createSpace(ctx, input);
} catch (err) {
  if (/Only managed_subfolder spaces are supported/.test(err.message)) {
    return createSpace(ctx, { ...input, folderMode: "managed_subfolder" });
  }
  throw err;
}

Prevention

When it happens

Trigger: Calling createSpace with folderMode set to a value like 'external_folder', 'local_root', or any custom string.

Common situations: Trying to bind an existing external folder to a wiki space; experimental feature flags enabling unsupported modes; passing an explicit folderMode that differs from the default.

Related errors


AI-assisted analysis of paperclipai/paperclip@67001ec6eb (2026-08-12). Data as JSON: /api/errors/681116b71ec4a995. Report an issue: GitHub.