{"record":{"id":"a6efcc8f93b3cd00","repo":"continuedev/continue","slug":"no-workspace-directories-found-make-sure-you-ve-o-a6efcc","errorCode":null,"errorMessage":"No workspace directories found. Make sure you've opened a folder in your IDE.","messagePattern":"No workspace directories found\\. Make sure you've opened a folder in your IDE\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/config/workspace/workspaceBlocks.ts","lineNumber":164,"sourceCode":"    const suffix = counter === 0 ? \"\" : `-${counter}`;\n    fileUri = joinPathsToUri(\n      baseDirUri,\n      `${baseFilename}${suffix}.${fileExtension}`,\n    );\n    counter++;\n  } while (await fileExists(fileUri));\n\n  return fileUri;\n}\n\nexport async function createNewWorkspaceBlockFile(\n  ide: IDE,\n  blockType: BlockType,\n  baseFilename?: string,\n): Promise<void> {\n  const workspaceDirs = await ide.getWorkspaceDirs();\n  if (workspaceDirs.length === 0) {\n    throw new Error(\n      \"No workspace directories found. Make sure you've opened a folder in your IDE.\",\n    );\n  }\n\n  const baseDirUri = joinPathsToUri(workspaceDirs[0], `.continue/${blockType}`);\n\n  const fileUri = await findAvailableFilename(\n    baseDirUri,\n    blockType,\n    ide.fileExists.bind(ide),\n    undefined,\n    false,\n    baseFilename,\n  );\n\n  const fileContent = getFileContent(blockType);\n\n  await ide.writeFile(fileUri, fileContent);","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/continuedev/continue/blob/5522c6f44ca0ac3528b37244818fbfa39b5af470/core/config/workspace/workspaceBlocks.ts#L146-L182","documentation":"The model string could not be mapped to any known Vertex publisher (gemini, anthropic, mistral) in the non-streaming chat path, so no endpoint URL exists to call. determineVertexProvider returned a value with no matching switch case.","triggerScenarios":"body.model is misspelled, lacks the expected prefix/extension (e.g. missing @version or publish prefix), or uses a model family the adapter doesn't route (e.g. 'llama3-' or 'jamba-').","commonSituations":"Copying model names from other providers (OpenAI 'gpt-4o', Anthropic direct 'claude-3-5') into a Vertex adapter; typos; new Vertex model not yet supported by the installed adapter version.","solutions":["Use a supported model id with the naming the adapter expects (gemini-*, claude-*@*, mistral/codestral)","Update the openai-adapters package — newer versions add provider mappings","Check determineVertexProvider's accepted prefixes and match them exactly"],"exampleFix":"// before\nawait api.chatCompletionNonStream({ model: 'gpt-4o', messages }, signal);\n\n// after\nawait api.chatCompletionNonStream({ model: 'gemini-1.5-pro', messages }, signal);","handlingStrategy":"validation","validationCode":"const SUPPORTED = [/^gemini/, /^claude/, /^mistral/, /codestral/];\nconst isSupportedModel = (m: string) => SUPPORTED.some(r => r.test(m));\nif (!isSupportedModel(body.model)) throw new Error(`model ${body.model} not routable on Vertex adapter`);","typeGuard":"const isVertexModel = (m: string): boolean => /^(gemini|claude|mistral|codestral)/.test(m);","tryCatchPattern":"try { ... } catch (e) { if ((e as Error).message.startsWith('Unsupported model')) { /* fix model id or update package */ } throw e; }","preventionTips":["Centralize model id constants","Update the adapter when adopting new Vertex models"],"tags":["vertexai","model-name","routing"],"backgroundTag":"unsupported-model-name","analyzedSha":"5522c6f44ca0ac3528b37244818fbfa39b5af470","analyzedAt":"2026-08-27T11:28:54.683Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}