* docs: add docs and schema for "OS" provider (#1536) * ignore .env * fix(gui): ctx rendering w/ renderInlineAs: "" (#1541) * ✨ use and cache imports for autocomplete (#1456) * ✨ use and cache imports for autocomplete * fix tsc * fix codeqwen autocomplete leading space * add voyage rerank-1 * feat: `--noEmit` for tsc checks in CI (#1559) * docs: update CustomContextProvider docs (#1557) * add stop tokens to qwen prompt * update docs to reflect 3.5 sonnet being best * docs: comment out unused providers (#1561) * import Handlebars * feat: toast notification for config updates (#1560) * feat: toast notification for config updates * feat: only trigger toast on config.json save * displayRawMarkdown option * feat: open pane on install (#1564) * feat: open pane on activation * comment out testing code * update to reflect 16 stop words limit for deepseek * feat: only trigger config update toast in vscode (#1571) * docs(prompt-files): fix typos + clarify (#1575) * doc: prompt file typo + clarifications * fix: add back correct docs * chore: add telemetry for pageviews (#1576) * feat: update onboarding w/ embeddings model (#1570) * chore(gui): remove unused pages * feat: add embeddings step * feat: update styles * feat: copy button updates * fix: correct pull command for embed model * fix: remove commented code * fix: remove commented code * feat: simplify copy btn props * chore: rename onboarding selection event * feat: add provider config * fix: undo msg name * remove dead code * fix: invalid mode check * fix: remove testing logic * docs(telemetry): add pageviews to tracking list (#1581) * Add reranker configuration options to codebase embedding docs (#1584) - Introduce reranker concept - List available reranker options - Provide configuration instructions - Update keywords to include "reranker" * chore: update pr template with screenshots (#1590) * Refactor ConfirmationDialog to use SecondaryButton for cancel action (#1586) * Added instructions for running docs server locally (#1578) - Added NPM script method - Added VS Code task method - Update contributing guidelines * Update branch policy (#1577) - Change PR target to `dev` branch - Update `CONTRIBUTING.md` instructions * Consolidate example configurations into the main configuration guide (#1579) - Moved examples to configuration.md - Deleted the separate examples.md file - Updated sidebar order and links - Improved readability and structure in configuration.md * fix: fullscreen gui retains context when hidden, fixed fullscreen focusing (#1582) * Update completionProvider.ts (warning tab-autocomplete models) (#1566) * feat: enhanced IndexingProgressBar with blinking dot feature - Integrated BlinkingDot component - Added STATUS_COLORS for various states - Replaced CircleDiv with BlinkingDot in UI - Updated status messages and layout * small UI tweaks * feat(gui): enhance ModelCard, ModelProviderTag, and Toggle components (#1595) - add styling and adjustments to ModelCard - update ModelProviderTag font size - remove box shadow from Toggle component - tweak icon styles in ModelCard - improve alignment and spacing * media query * feat: add best experience onboarding * fix: file rename * stop movement on button hover by keeping same border thickness * fix mistake in setting cursor: pointer * fix when free trial option is shown * Support Node.js versions below 20 for streaming response handling (#1591) - Add fallback for Node < 20 - Implement toAsyncIterable for streaming - Use TextDecoder for manual decoding - Maintain existing streaming for Node 20+ * small fixes * feat: add free trial card to onboarding (#1600) * feat: add free trial card to onboarding * add import * fix hasPassedFTL * fix /edit cancellation from UI * feat: add `applyCodeBlock` experimental prop (#1601) * feat: add new model styling improvements (#1609) * feat: add new model styling improvements * better gap size * feat: update bug_report.yml (#1610) * chore: update bug_report.yml * typo fix * feat: add labels to "Add docs" dialog (#1612) * feat: add labels to "Add docs" dialog * remove autofocus * don't double load config * small fixes * speed up directory traversal, and use correct native path module * option not to show config update toast * merge air-gapped and recommended setup pages * chore: add telemetry for full screen toggle (#1618) * Fix headings in codebase-embeddings.md (#1617) * mention jetbrains * docs: update changie (#1619) * feat: updated changie config * hide toc and autogenerate * Update changelog.mdx * link to deeper explanation of embeddings models * ensure target="_blank" for all links in sidebar * fix gif links in intellij README.md * don't require rust in dependency installation * chore: fix padding on gh button (#1620) * chore: adjust button padding * Update tasks.json * escape colons in diff path * smoother lancedb indexing reporting * smooth progress updates for indexing * fix tsc err * rerank-lite-1 * remove doccs * basic tests for VS Code extension * improved testing of VS Code extension * docs: add docs and schema for "OS" provider (#1536) * ignore .env * 🚑 fix constant warnings when onboarding with Ollama * ✨ use and cache imports for autocomplete (#1456) * ✨ use and cache imports for autocomplete * fix tsc * team analytics * apply control plane settings * workos auth * ide protocol get session info * UI for auth * profile switching * small fixes * updates * refresh tokens * updates * fix tsc errs * model select in toolbar to make room for profile selector * prod client id * link to prod URL * internal beta option * profiles change listener --------- Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com> Co-authored-by: Priyash <38959321+priyashpatil@users.noreply.github.com> Co-authored-by: Jonah Wagner <jonahwagner231@gmail.com> Co-authored-by: YohannZe <99359799+YohannZe@users.noreply.github.com> Co-authored-by: Dan Dascalescu <ddascalescu+github@gmail.com>
141 lines
3.8 KiB
TypeScript
141 lines
3.8 KiB
TypeScript
import { FromIdeProtocol, ToIdeProtocol } from "core/protocol/index.js";
|
|
import FileSystemIde from "core/util/filesystem";
|
|
import { IMessenger } from "core/util/messenger";
|
|
import { ReverseMessageIde } from "core/util/reverseMessageIde";
|
|
import fs from "fs";
|
|
import { ChildProcessWithoutNullStreams, spawn } from "node:child_process";
|
|
import path from "path";
|
|
import {
|
|
CoreBinaryMessenger,
|
|
CoreBinaryTcpMessenger,
|
|
} from "../src/IpcMessenger";
|
|
|
|
// jest.setTimeout(100_000);
|
|
|
|
const USE_TCP = false;
|
|
|
|
function autodetectPlatformAndArch() {
|
|
const platform = {
|
|
aix: "linux",
|
|
darwin: "darwin",
|
|
freebsd: "linux",
|
|
linux: "linux",
|
|
openbsd: "linux",
|
|
sunos: "linux",
|
|
win32: "win32",
|
|
android: "linux",
|
|
cygwin: "win32",
|
|
netbsd: "linux",
|
|
haiku: "linux",
|
|
}[process.platform];
|
|
const arch = {
|
|
arm: "arm64",
|
|
arm64: "arm64",
|
|
ia32: "x64",
|
|
loong64: "arm64",
|
|
mips: "arm64",
|
|
mipsel: "arm64",
|
|
ppc: "x64",
|
|
ppc64: "x64",
|
|
riscv64: "arm64",
|
|
s390: "x64",
|
|
s390x: "x64",
|
|
x64: "x64",
|
|
}[process.arch];
|
|
return [platform, arch];
|
|
}
|
|
|
|
const CONTINUE_GLOBAL_DIR = path.join(__dirname, "..", ".continue");
|
|
|
|
describe("Test Suite", () => {
|
|
let messenger: IMessenger<ToIdeProtocol, FromIdeProtocol>;
|
|
let subprocess: ChildProcessWithoutNullStreams;
|
|
|
|
beforeAll(async () => {
|
|
const [platform, arch] = autodetectPlatformAndArch();
|
|
const binaryPath = path.join(
|
|
__dirname,
|
|
"..",
|
|
"bin",
|
|
`${platform}-${arch}`,
|
|
`continue-binary${platform === "win32" ? ".exe" : ""}`,
|
|
);
|
|
expect(fs.existsSync(binaryPath)).toBe(true);
|
|
|
|
if (USE_TCP) {
|
|
messenger = new CoreBinaryTcpMessenger<ToIdeProtocol, FromIdeProtocol>();
|
|
} else {
|
|
subprocess = spawn(binaryPath, {
|
|
env: { ...process.env, CONTINUE_GLOBAL_DIR },
|
|
});
|
|
messenger = new CoreBinaryMessenger<ToIdeProtocol, FromIdeProtocol>(
|
|
subprocess,
|
|
);
|
|
}
|
|
|
|
const testDir = path.join(__dirname, "..", ".test");
|
|
if (!fs.existsSync(testDir)) {
|
|
fs.mkdirSync(testDir);
|
|
}
|
|
const ide = new FileSystemIde(testDir);
|
|
const reverseIde = new ReverseMessageIde(messenger.on.bind(messenger), ide);
|
|
|
|
// Wait for core to set itself up
|
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
});
|
|
|
|
afterAll(async () => {
|
|
// Wait for the subprocess to exit
|
|
if (USE_TCP) {
|
|
(
|
|
messenger as CoreBinaryTcpMessenger<ToIdeProtocol, FromIdeProtocol>
|
|
).close();
|
|
} else {
|
|
subprocess.kill();
|
|
await new Promise((resolve) => subprocess.on("close", resolve));
|
|
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
}
|
|
});
|
|
|
|
it("should respond to ping with pong", async () => {
|
|
const resp = await messenger.request("ping", "ping");
|
|
expect(resp).toBe("pong");
|
|
});
|
|
|
|
it("should create .continue directory at the specified location with expected files", async () => {
|
|
expect(fs.existsSync(CONTINUE_GLOBAL_DIR)).toBe(true);
|
|
|
|
// Many of the files are only created when trying to load the config
|
|
const config = await messenger.request(
|
|
"config/getSerializedProfileInfo",
|
|
undefined,
|
|
);
|
|
|
|
const expectedFiles = [
|
|
"config.json",
|
|
"config.ts",
|
|
"package.json",
|
|
"logs/core.log",
|
|
"index/autocompleteCache.sqlite",
|
|
"out/config.js",
|
|
"types/core/index.d.ts",
|
|
];
|
|
|
|
for (const file of expectedFiles) {
|
|
const filePath = path.join(CONTINUE_GLOBAL_DIR, file);
|
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
}
|
|
});
|
|
|
|
it("should properly edit config", async () => {
|
|
const { config } = await messenger.request(
|
|
"config/getSerializedProfileInfo",
|
|
undefined,
|
|
);
|
|
expect(config).toHaveProperty("models");
|
|
expect(config).toHaveProperty("embeddingsProvider");
|
|
expect(config).toHaveProperty("contextProviders");
|
|
expect(config).toHaveProperty("slashCommands");
|
|
});
|
|
});
|