Skip to content
Open

111 #13204

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ body:
attributes:
label: Before submitting your bug report
options:
- label: I've tried using the "Ask AI" feature on the [Continue docs site](https://docs.continue.dev/) to see if the docs have an answer
required: false
- label: I'm not able to find a related conversation on [GitHub discussions](https://github.com/continuedev/continue/discussions) that reports the same bug
- label: I've tried finding an answer on the [Continue docs site](https://docs.continue.dev/)
required: false
- label: I'm not able to find an [open issue](https://github.com/continuedev/continue/issues?q=is%3Aopen+is%3Aissue) that reports the same bug
required: false
Expand Down
62 changes: 0 additions & 62 deletions core/commands/slash/built-in-legacy/draftIssue.ts

This file was deleted.

2 changes: 0 additions & 2 deletions core/commands/slash/built-in-legacy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ import {
} from "../../..";
import GenerateTerminalCommand from "./cmd";
import CommitMessageCommand from "./commit";
import DraftIssueCommand from "./draftIssue";
import HttpSlashCommand from "./http";
import OnboardSlashCommand from "./onboard";
import ReviewMessageCommand from "./review";
import ShareSlashCommand from "./share";

const LegacyBuiltInSlashCommands: SlashCommand[] = [
DraftIssueCommand,
ShareSlashCommand,
GenerateTerminalCommand,
HttpSlashCommand,
Expand Down
31 changes: 22 additions & 9 deletions core/config/createNewAssistantFile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,28 @@ models:
provider: openai
model: gpt-5
apiKey: YOUR_OPENAI_API_KEY_HERE
- uses: ollama/qwen2.5-coder-7b
- uses: anthropic/claude-4-sonnet
with:
ANTHROPIC_API_KEY: \${{ secrets.ANTHROPIC_API_KEY }}

# MCP Servers that Continue can access
# https://docs.continue.dev/customization/mcp-tools
mcpServers:
- uses: anthropic/memory-mcp
- name: qwen2.5-coder 7b
provider: ollama
model: qwen2.5-coder:7b
roles:
- apply
- autocomplete
- chat
- edit
- name: Claude 4 Sonnet
provider: anthropic
model: claude-sonnet-4-20250514
apiKey: \${{ secrets.ANTHROPIC_API_KEY }}
roles:
- chat
- edit
- apply
defaultCompletionOptions:
contextLength: 200000
maxTokens: 64000
capabilities:
- tool_use
- image_input
`;

export async function createNewAssistantFile(
Expand Down
128 changes: 91 additions & 37 deletions core/config/onboarding.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,84 @@ export const LOCAL_ONBOARDING_CHAT_TITLE = "Llama 3.1 8B";
export const LOCAL_ONBOARDING_EMBEDDINGS_MODEL = "nomic-embed-text:latest";
export const LOCAL_ONBOARDING_EMBEDDINGS_TITLE = "Nomic Embed";

const ANTHROPIC_MODEL_CONFIG = {
slugs: ["anthropic/claude-sonnet-4-6", "anthropic/claude-opus-4-6"],
apiKeyInputName: "ANTHROPIC_API_KEY",
};
const OPENAI_MODEL_CONFIG = {
slugs: ["openai/gpt-4.1", "openai/o3", "openai/gpt-4.1-mini"],
apiKeyInputName: "OPENAI_API_KEY",
};
type OnboardingModel = NonNullable<ConfigYaml["models"]>[number];

// TODO: These need updating on the hub
const GEMINI_MODEL_CONFIG = {
slugs: ["google/gemini-3.1-pro-preview", "google/gemini-3-flash-preview"],
apiKeyInputName: "GEMINI_API_KEY",
};
// These model definitions are inlined copies of the corresponding Continue Hub
// blocks (e.g. anthropic/claude-sonnet-4-6) that onboarding previously resolved
// via `uses:` slugs. Since Hub/slug resolution has been removed, we reproduce
// the exact block contents here, with `apiKey` substituted for the block's
// `${{ inputs.*_API_KEY }}` placeholder. Keep these in sync with the Hub blocks.
const ANTHROPIC_ONBOARDING_MODELS = (apiKey: string): OnboardingModel[] => [
{
name: "Claude Sonnet 4.6",
provider: "anthropic",
model: "claude-sonnet-4-6",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 200000, maxTokens: 64000 },
capabilities: ["tool_use", "image_input"],
},
{
name: "Claude Opus 4.6",
provider: "anthropic",
model: "claude-opus-4-6",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 200000, maxTokens: 64000 },
capabilities: ["tool_use", "image_input"],
},
];

const OPENAI_ONBOARDING_MODELS = (apiKey: string): OnboardingModel[] => [
{
name: "OpenAI GPT-4.1",
provider: "openai",
model: "gpt-4.1-2025-04-14",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 1047576, maxTokens: 32768 },
useLegacyCompletionsEndpoint: false,
},
{
name: "o3",
provider: "openai",
model: "o3",
apiKey,
roles: ["chat"],
defaultCompletionOptions: { contextLength: 200000, maxTokens: 100000 },
capabilities: ["image_input"],
},
{
name: "OpenAI GPT-4.1 mini",
provider: "openai",
model: "gpt-4.1-mini-2025-04-14",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 1047576, maxTokens: 32768 },
useLegacyCompletionsEndpoint: false,
},
];

const GEMINI_ONBOARDING_MODELS = (apiKey: string): OnboardingModel[] => [
{
name: "Gemini 3 Pro Preview",
provider: "gemini",
model: "gemini-3-pro-preview",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 1048576, maxTokens: 65536 },
capabilities: ["tool_use", "image_input"],
},
{
name: "Gemini 3 Flash Preview",
provider: "gemini",
model: "gemini-3-flash-preview",
apiKey,
roles: ["chat", "edit", "apply"],
defaultCompletionOptions: { contextLength: 1048576, maxTokens: 65536 },
capabilities: ["tool_use", "image_input"],
},
];

/**
* We set the "best" chat + autocopmlete models by default
Expand Down Expand Up @@ -70,47 +134,37 @@ export function setupProviderConfig(
provider: string,
apiKey: string,
): ConfigYaml {
let newModels;
let newModels: OnboardingModel[];

switch (provider) {
case "openai":
newModels = OPENAI_MODEL_CONFIG.slugs.map((slug) => ({
uses: slug,
with: {
[OPENAI_MODEL_CONFIG.apiKeyInputName]: apiKey,
},
}));
newModels = OPENAI_ONBOARDING_MODELS(apiKey);
break;
case "anthropic":
newModels = ANTHROPIC_MODEL_CONFIG.slugs.map((slug) => ({
uses: slug,
with: {
[ANTHROPIC_MODEL_CONFIG.apiKeyInputName]: apiKey,
},
}));
newModels = ANTHROPIC_ONBOARDING_MODELS(apiKey);
break;
case "gemini":
newModels = GEMINI_MODEL_CONFIG.slugs.map((slug) => ({
uses: slug,
with: {
[GEMINI_MODEL_CONFIG.apiKeyInputName]: apiKey,
},
}));
newModels = GEMINI_ONBOARDING_MODELS(apiKey);
break;
default:
throw new Error(`Unknown provider: ${provider}`);
}

const existingModels = config.models ?? [];

// Update API key on existing models; add new entries for any missing slugs
const isSameModel = (m: OnboardingModel, n: OnboardingModel) =>
"provider" in m &&
"provider" in n &&
m.provider === n.provider &&
m.model === n.model;

// Update API key on existing models; add new entries for any missing models
const updatedModels = existingModels.map((m) => {
if (!("uses" in m)) return m;
const match = newModels.find((n) => n.uses === m.uses);
return match ? { ...m, with: { ...m.with, ...match.with } } : m;
const match = newModels.find((n) => isSameModel(m, n));
return match ? { ...m, apiKey } : m;
});
const modelsToAdd = newModels.filter(
(n) => !existingModels.some((m) => "uses" in m && m.uses === n.uses),
(n) => !existingModels.some((m) => isSameModel(m, n)),
);

return { ...config, models: [...updatedModels, ...modelsToAdd] };
Expand Down
1 change: 0 additions & 1 deletion core/protocol/ideWebview.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,5 @@ export type ToWebviewFromIdeProtocol = ToWebviewFromIdeOrCoreProtocol & {
updateApplyState: [ApplyState, void];
exitEditMode: [undefined, void];
focusEdit: [undefined, void];
generateRule: [undefined, void];
addToChat: [AddToChatPayload, void];
};
Binary file added docs-site/app/favicon.ico
Binary file not shown.
3 changes: 2 additions & 1 deletion docs-site/components/docs/DocsSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
CommandList,
} from "@/components/ui/command";
import { create, load, search, type AnyOrama } from "@orama/orama";
import { withBasePath } from "@/lib/basePath";

interface SearchResult {
title: string;
Expand Down Expand Up @@ -44,7 +45,7 @@ export function DocsSearch({ resolve }: { resolve: (path: string) => string }) {
useEffect(() => {
if (!open || dbRef.current) return;
setLoading(true);
fetch("/search-index.json")
fetch(withBasePath("/search-index.json"))
.then((res) => res.json())
.then((data) => {
const db = create({
Expand Down
17 changes: 4 additions & 13 deletions docs-site/components/docs/DocsShell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { type NavGroup, type NavItem, type NavTab } from "@/config/docsNav";
import { TableOfContents } from "./TableOfContents";
import { DocsSearch } from "./DocsSearch";
import { resolveHref } from "@/lib/resolveHref";
import { withBasePath } from "@/lib/basePath";
import type { Heading } from "@/lib/docs";

/* ------------------------------------------------------------------ */
Expand All @@ -29,7 +30,7 @@ function findActiveTab(nav: NavTab[], slug: string) {
}
}
}
return nav[nav.length - 1];
return nav[0];
}

function slugToLabel(slug: string, titleMap?: Record<string, string>) {
Expand Down Expand Up @@ -235,7 +236,7 @@ export function DocsShell({
>
<Link href={resolveHref("/")} className="flex items-center">
<img
src="/images/continue-logo-light.png"
src={withBasePath("/images/continue-logo-light.png")}
alt="Continue"
className="h-8 w-auto dark:invert"
/>
Expand All @@ -245,7 +246,7 @@ export function DocsShell({
<div className="flex items-center px-5 py-3 lg:hidden">
<Link href={resolveHref("/")} className="flex items-center">
<img
src="/images/continue-logo-light.png"
src={withBasePath("/images/continue-logo-light.png")}
alt="Continue"
className="h-8 w-auto dark:invert"
/>
Expand All @@ -271,9 +272,6 @@ export function DocsShell({
{link.label}
</Link>
))}
<Link href={resolveHref("/login")} className={NAV_LINK_CLASSES}>
Sign in
</Link>
</div>
<ThemeToggle />
{/* Mobile menu button */}
Expand Down Expand Up @@ -302,13 +300,6 @@ export function DocsShell({
{link.label}
</Link>
))}
<Link
href={resolveHref("/login")}
className={NAV_LINK_CLASSES}
onClick={() => setMobileMenuOpen(false)}
>
Sign in
</Link>
</div>
)}
</nav>
Expand Down
7 changes: 6 additions & 1 deletion docs-site/components/docs/mdx/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { OSAutoDetect } from "./OSAutoDetect";
import { CodeBlock } from "./CodeBlock";
import { CodeGroup } from "./CodeGroup";
import { MdxLink } from "./MdxLink";
import { withBasePath } from "@/lib/basePath";

export const mdxComponents: MDXComponents = {
// Mintlify callout variants
Expand Down Expand Up @@ -62,9 +63,13 @@ export const mdxComponents: MDXComponents = {

// Rewrite image paths — images are copied to public/images/docs/ at build time
img: ({ src, alt, ...props }: any) => {
if (src && src.startsWith("/images/")) {
if (src && src.startsWith("/images/") && !src.startsWith("/images/docs/")) {
src = `/images/docs${src.slice("/images".length)}`;
}
// Prefix the deploy base path for raw absolute asset paths (GitHub Pages).
if (src && src.startsWith("/")) {
src = withBasePath(src);
}
return <img src={src} alt={alt || ""} {...props} />;
},
};
Loading
Loading