Skip to content
Open
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
55 changes: 55 additions & 0 deletions .github/workflows/docs-gh-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Deploy Docs to GitHub Pages

on:
push:
branches: [main]
paths:
- "docs/**"
- "docs-site/**"

workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: "pages"
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
cache-dependency-path: docs-site/package-lock.json

- name: Install dependencies
working-directory: docs-site
run: npm ci

- name: Build
working-directory: docs-site
run: npm run build

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs-site/out

deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ downloads/
eggs/
.eggs/
lib/
!docs-site/lib/
lib64/
parts/
sdist/
Expand Down
105 changes: 105 additions & 0 deletions BUILD_DEPENDENCIES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Build Dependencies & Secrets

This document catalogs all build dependencies, secrets, and environment variables required by the continue-fork repository.

---

## VS Code Extension

| Secret | Purpose | Referenced In |
| -------------------- | ----------------------------------------------------------------------------------- | --------------------------- |
| `VSCE_TOKEN` | Personal access token for publishing to the VS Code Marketplace (set as `VSCE_PAT`) | `main.yaml`, `preview.yaml` |
| `VSX_REGISTRY_TOKEN` | Token for publishing to the Open VSX Registry | `main.yaml`, `preview.yaml` |

---

## JetBrains Extension

| Secret | Purpose | Referenced In |
| -------------------------------- | --------------------------------------------------------------------- | ------------------------ |
| `APPLE_CERT_DATA` | Base64-encoded Apple signing certificate (p12) for macOS code signing | `jetbrains-release.yaml` |
| `APPLE_CERT_PASSWORD` | Password for the Apple signing certificate | `jetbrains-release.yaml` |
| `APPLE_NOTARY_USER` | Apple notarization username (currently commented out) | `jetbrains-release.yaml` |
| `APPLE_NOTARY_PASSWORD` | Apple notarization password (currently commented out) | `jetbrains-release.yaml` |
| `JETBRAINS_PUBLISH_TOKEN` | Token for publishing to JetBrains Marketplace | `jetbrains-release.yaml` |
| `JETBRAINS_CERTIFICATE_CHAIN` | Certificate chain for signing the JetBrains plugin | `jetbrains-release.yaml` |
| `JETBRAINS_PRIVATE_KEY` | Private key for signing the JetBrains plugin | `jetbrains-release.yaml` |
| `JETBRAINS_PRIVATE_KEY_PASSWORD` | Password for the JetBrains signing private key | `jetbrains-release.yaml` |

---

## CLI

| Variable | Purpose | Referenced In |
| ------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| `CONTINUE_API_BASE` | Base URL for the Continue API (defaults to `https://api.continue.dev/`) | `extensions/cli/.env.example` |
| `CONTINUE_API_KEY` | API key for Continue authentication | `extensions/cli/.env.example`, `packages/continue-sdk/typescript/.env.example`, multiple workflows |

---

## NPM Package Releases

| Secret | Purpose | Referenced In |
| ------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `SEMANTIC_RELEASE_GITHUB_TOKEN` | GitHub token used by semantic-release for creating releases | `release-openai-adapters.yml`, `release-config-yaml.yml`, `release-fetch.yml`, `release-llm-info.yml`, `reusable-release.yml` |
| `SEMANTIC_RELEASE_NPM_TOKEN` | npm token used by semantic-release for publishing packages | `release-openai-adapters.yml`, `release-config-yaml.yml`, `release-fetch.yml`, `release-llm-info.yml`, `reusable-release.yml` |
| `SEMANTIC_RELEASE_TOKEN` | GitHub token for stable release workflow | `stable-release.yml` |

---

## AI Provider API Keys (Testing & Releases)

Used for integration tests in PR checks and package releases.

| Secret | Purpose | Referenced In |
| ------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| `OPENAI_API_KEY` | OpenAI API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `ANTHROPIC_API_KEY` | Anthropic API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml`, `cli-pr-checks.yml`, `continue-agents.yml` |
| `GEMINI_API_KEY` | Google Gemini API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `MISTRAL_API_KEY` | Mistral API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `AZURE_OPENAI_API_KEY` | Azure OpenAI API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `AZURE_FOUNDRY_CODESTRAL_API_KEY` | Azure AI Foundry Codestral API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY` | Azure AI Foundry Mistral Small API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `AZURE_OPENAI_GPT41_API_KEY` | Azure OpenAI GPT-4.1 API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `VOYAGE_API_KEY` | Voyage AI embeddings API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `RELACE_API_KEY` | Relace API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |
| `INCEPTION_API_KEY` | Inception API key | `pr-checks.yaml`, `reusable-release.yml`, `release-*.yml` |

---

## CI/CD & GitHub

| Secret | Purpose | Referenced In |
| ------------------ | --------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| `GITHUB_TOKEN` | Default GitHub Actions token (automatic) | Many workflows |
| `CI_GITHUB_TOKEN` | Elevated GitHub PAT for cross-repo operations and PR management | `jetbrains-release.yaml`, `preview.yaml`, `main.yaml`, `pr-checks.yaml`, `auto-assign-issue.yaml` |
| `CONTINUE_API_KEY` | Continue platform API key for agent workflows | `run-continue-agent.yml`, `tidy-up-codebase.yml`, `snyk-agent.yaml`, `auto-fix-failed-tests.yml`, `cli-pr-checks.yml` |
| `RUNLOOP_API_KEY` | Runloop API key for uploading sandbox blueprints | `stable-release.yml`, `upload-runloop-blueprint.yml` |
| `SNYK_TOKEN` | Snyk security scanning token | `snyk-agent.yaml` |

---

## Issue/PR Tooling

| Secret | Purpose | Referenced In |
| ------------------------------------ | ---------------------------------------------------- | -------------------- |
| `CHROMA_CLOUD_API_KEY` | Chroma vector DB API key for similar issue detection | `similar-issues.yml` |
| `CHROMA_TENANT` | Chroma tenant identifier | `similar-issues.yml` |
| `CHROMA_DATABASE` | Chroma database name | `similar-issues.yml` |
| `ISSUE_PR_METRICS_SLACK_WEBHOOK_URL` | Slack webhook for PR/issue metrics notifications | `metrics.yaml` |

---

## SSH Testing

| Secret | Purpose | Referenced In |
| ------------------------------ | ------------------------------------------- | ---------------- |
| `GH_ACTIONS_SSH_TEST_KEY_PEM` | SSH private key for remote connection tests | `pr-checks.yaml` |
| `GH_ACTIONS_SSH_TEST_DNS_NAME` | DNS name of the SSH test host | `pr-checks.yaml` |

---

All workflow files are located under `.github/workflows/`. Environment example files are at:

- `extensions/cli/.env.example`
- `packages/continue-sdk/typescript/.env.example`
1 change: 0 additions & 1 deletion core/autocomplete/util/AutocompleteLoggingService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,5 @@ export class AutocompleteLoggingService {
numLines: restOfOutcome.numLines,
profileType: restOfOutcome.profileType,
};

}
}
22 changes: 2 additions & 20 deletions core/config/load.ts
Original file line number Diff line number Diff line change
Expand Up @@ -346,12 +346,8 @@
"summarize",
]); // Default to chat role if not specified

// Free trial provider will be completely ignored
let warnAboutFreeTrial = false;
// Free trial provider is no longer supported — hard-drop any such models
models = models.filter((model) => model.providerName !== "free-trial");
if (models.filter((m) => m.providerName === "free-trial").length) {
warnAboutFreeTrial = true;
}

// Tab autocomplete model
const tabAutocompleteModels: BaseLLM[] = [];
Expand All @@ -373,9 +369,7 @@
config.completionOptions,
);
if (llm) {
if (llm.providerName === "free-trial") {
warnAboutFreeTrial = true;
} else {
if (llm.providerName !== "free-trial") {
tabAutocompleteModels.push(llm);
}
}
Expand Down Expand Up @@ -419,9 +413,6 @@
}
const { provider, ...options } = embedConfig;
if (provider === "transformers.js" || provider === "free-trial") {
if (provider === "free-trial") {
warnAboutFreeTrial = true;
}
return new TransformersJsEmbeddingsProvider();
} else {
const cls = LLMClasses.find((c) => c.providerName === provider);
Expand Down Expand Up @@ -459,12 +450,11 @@
}
const { name, params } = config.reranker as RerankerDescription;
if (name === "free-trial") {
warnAboutFreeTrial = true;
return null;
}
if (name === "llm") {
const llm = models.find((model) => model.title === params?.modelTitle);
if (!llm) {

Check warning on line 457 in core/config/load.ts

View workflow job for this annotation

GitHub Actions / core-checks

Unexpected negated condition
errors.push({
fatal: false,
message: `Unknown reranking model ${params?.modelTitle}`,
Expand Down Expand Up @@ -492,14 +482,6 @@
}
const newReranker = getRerankingILLM(config.reranker);

if (warnAboutFreeTrial) {
errors.push({
fatal: false,
message:
"Model provider 'free-trial' is no longer supported, will be ignored",
});
}

const continueConfig: ContinueConfig = {
...config,
contextProviders,
Expand Down Expand Up @@ -560,7 +542,7 @@
id: `continue-mcp-server-${index + 1}`,
name: `MCP Server`,
requestOptions: mergeConfigYamlRequestOptions(
server.transport.type !== "stdio"

Check warning on line 545 in core/config/load.ts

View workflow job for this annotation

GitHub Actions / core-checks

Unexpected negated condition
? server.transport.requestOptions
: undefined,
config.requestOptions,
Expand Down
5 changes: 1 addition & 4 deletions core/config/profile/doLoadConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -378,10 +378,7 @@ export default async function doLoadConfig(options: {
}

// Setup IdeInfoService
IdeInfoService.setup(
uniqueId,
ideInfo,
);
IdeInfoService.setup(uniqueId, ideInfo);

// TODO: pass config to pre-load non-system TTS models
await TTS.setup();
Expand Down
12 changes: 2 additions & 10 deletions core/config/yaml/loadYaml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -305,13 +305,13 @@ export async function configYamlToContinueConfig(options: {
});

// Models
let warnAboutFreeTrial = false;
const defaultModelRoles: ModelRole[] = ["chat", "summarize", "apply", "edit"];
for (const model of config.models ?? []) {
model.roles = model.roles ?? defaultModelRoles; // Default to all 4 chat-esque roles if not specified

// Free trial provider is no longer supported — hard-drop
if (model.provider === "free-trial") {
warnAboutFreeTrial = true;
continue;
}
try {
const llms = await llmsFromModelConfig({
Expand Down Expand Up @@ -386,14 +386,6 @@ export async function configYamlToContinueConfig(options: {
);
}

if (warnAboutFreeTrial) {
localErrors.push({
fatal: false,
message:
"Model provider 'free-trial' is no longer supported, will be ignored.",
});
}

const { providers, errors: contextErrors } = loadConfigContextProviders(
config.context,
!!config.docs?.length,
Expand Down
25 changes: 0 additions & 25 deletions core/llm/streamChat.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { fetchwithRequestOptions } from "@continuedev/fetch";
import { ChatMessage, IDE, PromptLog } from "..";
import { ConfigHandler } from "../config/ConfigHandler";
import { usesCreditsBasedApiKey } from "../config/usesFreeTrialApiKey";
import { FromCoreProtocol, ToCoreProtocol } from "../protocol";
import { IMessenger, Message } from "../protocol/messenger";

import { TTS } from "../util/tts";
import { isOutOfStarterCredits } from "./utils/starterCredits";

export async function* llmStreamChat(
configHandler: ConfigHandler,
Expand Down Expand Up @@ -136,8 +134,6 @@ export async function* llmStreamChat(
void TTS.read(next.value?.completion);
}

void checkForOutOfStarterCredits(configHandler, messenger);

if (!next.done) {
throw new Error("Will never happen");
}
Expand All @@ -149,24 +145,3 @@ export async function* llmStreamChat(
throw error;
}
}

async function checkForOutOfStarterCredits(
configHandler: ConfigHandler,
messenger: IMessenger<ToCoreProtocol, FromCoreProtocol>,
) {
try {
const { config } = await configHandler.getSerializedConfig();
const creditStatus =
await configHandler.controlPlaneClient.getCreditStatus();

if (
config &&
creditStatus &&
isOutOfStarterCredits(usesCreditsBasedApiKey(config), creditStatus)
) {
void messenger.request("freeTrialExceeded", undefined);
}
} catch (error) {
console.error("Error checking free trial status:", error);
}
}
5 changes: 1 addition & 4 deletions core/util/IdeInfoService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ export class IdeInfoService {
static os: string | undefined = undefined;
static ideInfo: IdeInfo | undefined = undefined;

static setup(
uniqueId: string,
ideInfo: IdeInfo,
): void {
static setup(uniqueId: string, ideInfo: IdeInfo): void {
IdeInfoService.uniqueId = uniqueId;
IdeInfoService.ideInfo = ideInfo;
}
Expand Down
5 changes: 5 additions & 0 deletions docs-site/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.next/
out/
node_modules/
public/search-index.json
public/images/docs/
Loading
Loading