refactor: merge dev

This commit is contained in:
Catriel Müller
2026-02-13 12:41:44 -03:00
34 changed files with 223 additions and 184 deletions
+1 -1
View File
@@ -811,7 +811,7 @@ model: "anthropic/claude-sonnet-4-5"
modes/
node_modules/
openai/gpt-4.1
opencode.ai/config.json
app.kilo.ai/config.json
opencode/<model-id>
opencode/gpt-5.1-codex
opencode/gpt-5.2-codex
+1 -1
View File
@@ -1,5 +1,5 @@
{
"$schema": "https://opencode.ai/config.json",
"$schema": "https://app.kilo.ai/config.json",
// "enterprise": {
// "url": "https://enterprise.dev.opencode.ai",
// },
+1
View File
@@ -1,6 +1,7 @@
MIT License
Copyright (c) 2025 Kilo Code
Copyright (c) 2025 opencode
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+13 -13
View File
@@ -23,7 +23,7 @@
},
"packages/app": {
"name": "@opencode-ai/app",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@kilocode/kilo-i18n": "workspace:*",
"@kilocode/kilo-ui": "workspace:*",
@@ -75,7 +75,7 @@
},
"packages/desktop": {
"name": "@opencode-ai/desktop",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@opencode-ai/app": "workspace:*",
"@opencode-ai/ui": "workspace:*",
@@ -108,7 +108,7 @@
},
"packages/kilo-gateway": {
"name": "@kilocode/kilo-gateway",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@clack/prompts": "1.0.0-alpha.1",
"@kilocode/plugin": "workspace:*",
@@ -140,7 +140,7 @@
},
"packages/kilo-i18n": {
"name": "@kilocode/kilo-i18n",
"version": "1.0.20",
"version": "1.0.21",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
@@ -150,7 +150,7 @@
},
"packages/kilo-telemetry": {
"name": "@kilocode/kilo-telemetry",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@kilocode/kilo-gateway": "workspace:*",
"@opentelemetry/api": "1.9.0",
@@ -170,7 +170,7 @@
},
"packages/kilo-ui": {
"name": "@kilocode/kilo-ui",
"version": "1.0.20",
"version": "1.0.21",
"devDependencies": {
"@tsconfig/node22": "catalog:",
"@types/bun": "catalog:",
@@ -183,7 +183,7 @@
},
"packages/kilo-vscode": {
"name": "kilo-code",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@anthropic-ai/sdk": "^0.39.0",
"@kilocode/kilo-i18n": "file:../kilo-i18n",
@@ -224,7 +224,7 @@
},
"packages/opencode": {
"name": "@kilocode/cli",
"version": "1.0.20",
"version": "1.0.21",
"bin": {
"kilo": "./bin/kilo",
"kilocode": "./bin/kilocode",
@@ -333,7 +333,7 @@
},
"packages/plugin": {
"name": "@kilocode/plugin",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"zod": "catalog:",
@@ -347,14 +347,14 @@
},
"packages/script": {
"name": "@opencode-ai/script",
"version": "1.0.20",
"version": "1.0.21",
"devDependencies": {
"@types/bun": "catalog:",
},
},
"packages/sdk/js": {
"name": "@kilocode/sdk",
"version": "1.0.20",
"version": "1.0.21",
"devDependencies": {
"@hey-api/openapi-ts": "0.90.10",
"@tsconfig/node22": "catalog:",
@@ -365,7 +365,7 @@
},
"packages/ui": {
"name": "@opencode-ai/ui",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"@kilocode/sdk": "workspace:*",
"@kobalte/core": "catalog:",
@@ -407,7 +407,7 @@
},
"packages/util": {
"name": "@opencode-ai/util",
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {
"zod": "catalog:",
},
+1 -1
View File
@@ -102,6 +102,6 @@
"@standard-community/standard-openapi@0.2.9": "patches/@standard-community%2Fstandard-openapi@0.2.9.patch",
"ghostty-web@0.3.0": "patches/ghostty-web@0.3.0.patch"
},
"version": "1.0.20",
"version": "1.0.21",
"peerDependencies": {}
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/app",
"version": "1.0.20",
"version": "1.0.21",
"description": "",
"type": "module",
"exports": {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "@opencode-ai/desktop",
"private": true,
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"scripts": {
+6 -6
View File
@@ -1,7 +1,7 @@
id = "kilo"
name = "Kilo"
description = "The open source coding agent."
version = "1.0.20"
version = "1.0.21"
schema_version = 1
authors = ["Anomaly"]
repository = "https://github.com/Kilo-Org/kilo"
@@ -11,26 +11,26 @@ name = "Kilo"
icon = "./icons/opencode.svg"
[agent_servers.opencode.targets.darwin-aarch64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.20/opencode-darwin-arm64.zip"
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.21/opencode-darwin-arm64.zip"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.darwin-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.20/opencode-darwin-x64.zip"
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.21/opencode-darwin-x64.zip"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.linux-aarch64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.20/opencode-linux-arm64.tar.gz"
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.21/opencode-linux-arm64.tar.gz"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.linux-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.20/opencode-linux-x64.tar.gz"
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.21/opencode-linux-x64.tar.gz"
cmd = "./opencode"
args = ["acp"]
[agent_servers.opencode.targets.windows-x86_64]
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.20/opencode-windows-x64.zip"
archive = "https://github.com/Kilo-Org/kilo/releases/download/v1.0.21/opencode-windows-x64.zip"
cmd = "./opencode.exe"
args = ["acp"]
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-gateway",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"description": "Unified Kilo Gateway package for OpenCode - authentication, provider, and API integration",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-i18n",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"description": "Kilo-specific i18n translations and overrides",
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/kilo-telemetry",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"description": "Telemetry for Kilo CLI - PostHog analytics integration",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@kilocode/kilo-ui",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"exports": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "kilo-code",
"displayName": "Kilo Code",
"description": "Kilo Code AI Agent & Autocomplete",
"version": "1.0.20",
"version": "1.0.21",
"engines": {
"vscode": "^1.109.0"
},
+33 -3
View File
@@ -1,4 +1,5 @@
import * as vscode from "vscode"
import { z } from "zod"
import { type HttpClient, type SessionInfo, type SSEEvent, type KiloConnectionService } from "./services/cli-backend"
import { handleChatCompletionRequest } from "./services/autocomplete/chat-autocomplete/handleChatCompletionRequest"
import { handleChatCompletionAccepted } from "./services/autocomplete/chat-autocomplete/handleChatCompletionAccepted"
@@ -152,15 +153,22 @@ export class KiloProvider implements vscode.WebviewViewProvider {
this.isWebviewReady = true
await this.syncWebviewState("webviewReady")
break
case "sendMessage":
case "sendMessage": {
const files = z
.array(z.object({ mime: z.string(), url: z.string().startsWith("file://") }))
.optional()
.catch(undefined)
.parse(message.files)
await this.handleSendMessage(
message.text,
message.sessionID,
message.providerID,
message.modelID,
message.agent,
files,
)
break
}
case "abort":
await this.handleAbort(message.sessionID)
break
@@ -718,6 +726,7 @@ export class KiloProvider implements vscode.WebviewViewProvider {
providerID?: string,
modelID?: string,
agent?: string,
files?: Array<{ mime: string; url: string }>,
): Promise<void> {
if (!this.httpClient) {
this.postMessage({
@@ -746,8 +755,29 @@ export class KiloProvider implements vscode.WebviewViewProvider {
throw new Error("No session available")
}
// Send message with text part, optional model selection, and optional agent/mode
await this.httpClient.sendMessage(targetSessionID, [{ type: "text", text }], workspaceDir, {
// Build parts array with file context and user text
const parts: Array<{ type: "text"; text: string } | { type: "file"; mime: string; url: string }> = []
// Inject active editor file as context
const editor = vscode.window.activeTextEditor
if (editor && editor.document.uri.scheme === "file") {
const url = editor.document.uri.toString()
const already = files?.some((f) => f.url === url)
if (!already) {
parts.push({ type: "file", mime: "text/plain", url })
}
}
// Add any explicitly attached files from the webview
if (files) {
for (const f of files) {
parts.push({ type: "file", mime: f.mime, url: f.url })
}
}
parts.push({ type: "text", text })
await this.httpClient.sendMessage(targetSessionID, parts, workspaceDir, {
providerID,
modelID,
agent,
@@ -33,6 +33,7 @@ import type {
ContextUsage,
AgentInfo,
ExtensionMessage,
FileAttachment,
} from "../types/messages"
// Store structure for messages and parts
@@ -87,7 +88,7 @@ interface SessionContextValue {
selectAgent: (name: string) => void
// Actions
sendMessage: (text: string, providerID?: string, modelID?: string) => void
sendMessage: (text: string, providerID?: string, modelID?: string, files?: FileAttachment[]) => void
abort: () => void
compact: () => void
respondToPermission: (permissionId: string, response: "once" | "always" | "reject") => void
@@ -491,7 +492,7 @@ export const SessionProvider: ParentComponent = (props) => {
setSelectedAgentName(name)
}
function sendMessage(text: string, providerID?: string, modelID?: string) {
function sendMessage(text: string, providerID?: string, modelID?: string, files?: FileAttachment[]) {
if (!server.isConnected()) {
console.warn("[Kilo New] Cannot send message: not connected")
return
@@ -506,6 +507,7 @@ export const SessionProvider: ParentComponent = (props) => {
providerID,
modelID,
agent,
files,
})
}
@@ -519,6 +519,11 @@ export type ExtensionMessage =
// Messages FROM webview TO extension
// ============================================
export interface FileAttachment {
mime: string
url: string
}
export interface SendMessageRequest {
type: "sendMessage"
text: string
@@ -526,6 +531,7 @@ export interface SendMessageRequest {
providerID?: string
modelID?: string
agent?: string
files?: FileAttachment[]
}
export interface AbortRequest {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "1.0.20",
"version": "1.0.21",
"name": "@kilocode/cli",
"type": "module",
"license": "MIT",
@@ -12,7 +12,7 @@ test("agent color parsed from project config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
code: { color: "#FFA500" }, // kilocode_change
plan: { color: "primary" },
@@ -37,7 +37,7 @@ test("Agent.get includes color from config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
plan: { color: "#A855F7" },
build: { color: "accent" },
+48 -48
View File
@@ -39,7 +39,7 @@ test("loads JSON config file", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "test/model",
username: "testuser",
})
@@ -62,7 +62,7 @@ test("loads JSONC config file", async () => {
path.join(dir, "opencode.jsonc"),
`{
// This is a comment
"$schema": "https://opencode.ai/config.json",
"$schema": "https://app.kilo.ai/config.json",
"model": "test/model",
"username": "testuser"
}`,
@@ -85,14 +85,14 @@ test("merges multiple config files with correct precedence", async () => {
await writeConfig(
dir,
{
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "base",
username: "base",
},
"opencode.jsonc",
)
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "override",
})
},
@@ -115,7 +115,7 @@ test("handles environment variable substitution", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
theme: "{env:TEST_VAR}",
})
},
@@ -179,7 +179,7 @@ test("handles file inclusion substitution", async () => {
init: async (dir) => {
await Bun.write(path.join(dir, "included.txt"), "test_theme")
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
theme: "{file:included.txt}",
})
},
@@ -198,7 +198,7 @@ test("handles file inclusion with replacement tokens", async () => {
init: async (dir) => {
await Bun.write(path.join(dir, "included.md"), "const out = await Bun.$`echo hi`")
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
theme: "{file:included.md}",
})
},
@@ -216,7 +216,7 @@ test("validates config schema and throws on invalid fields", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
invalid_field: "should cause error",
})
},
@@ -248,7 +248,7 @@ test("handles agent configuration", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test_agent: {
model: "test/model",
@@ -278,7 +278,7 @@ test("treats agent variant as model-scoped setting (not provider option)", async
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test_agent: {
model: "openai/gpt-5.2",
@@ -309,7 +309,7 @@ test("handles command configuration", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
command: {
test_command: {
template: "test template",
@@ -339,7 +339,7 @@ test("migrates autoshare to share field", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
autoshare: true,
}),
)
@@ -361,7 +361,7 @@ test("migrates mode field to agent field", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mode: {
test_mode: {
model: "test/model",
@@ -676,7 +676,7 @@ test("resolves scoped npm plugins in config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({ $schema: "https://opencode.ai/config.json", plugin: ["@scope/plugin"] }, null, 2),
JSON.stringify({ $schema: "https://app.kilo.ai/config.json", plugin: ["@scope/plugin"] }, null, 2),
)
},
})
@@ -711,7 +711,7 @@ test("merges plugin arrays from global and local configs", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
plugin: ["global-plugin-1", "global-plugin-2"],
}),
)
@@ -720,7 +720,7 @@ test("merges plugin arrays from global and local configs", async () => {
await Bun.write(
path.join(opencodeDir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
plugin: ["local-plugin-1"],
}),
)
@@ -787,7 +787,7 @@ test("merges instructions arrays from global and local configs", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
instructions: ["global-instructions.md", "shared-rules.md"],
}),
)
@@ -795,7 +795,7 @@ test("merges instructions arrays from global and local configs", async () => {
await Bun.write(
path.join(opencodeDir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
instructions: ["local-instructions.md"],
}),
)
@@ -826,7 +826,7 @@ test("deduplicates duplicate instructions from global and local configs", async
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
instructions: ["duplicate.md", "global-only.md"],
}),
)
@@ -834,7 +834,7 @@ test("deduplicates duplicate instructions from global and local configs", async
await Bun.write(
path.join(opencodeDir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
instructions: ["duplicate.md", "local-only.md"],
}),
)
@@ -870,7 +870,7 @@ test("deduplicates duplicate plugins from global and local configs", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
plugin: ["duplicate-plugin", "global-plugin-1"],
}),
)
@@ -879,7 +879,7 @@ test("deduplicates duplicate plugins from global and local configs", async () =>
await Bun.write(
path.join(opencodeDir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
plugin: ["duplicate-plugin", "local-plugin-1"],
}),
)
@@ -918,7 +918,7 @@ test("migrates legacy tools config to permissions - allow", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -949,7 +949,7 @@ test("migrates legacy tools config to permissions - deny", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -980,7 +980,7 @@ test("migrates legacy write tool to edit permission", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -1010,7 +1010,7 @@ test("managed settings override user settings", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "user/model",
share: "auto",
username: "testuser",
@@ -1019,7 +1019,7 @@ test("managed settings override user settings", async () => {
})
await writeManagedSettings({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "managed/model",
share: "disabled",
})
@@ -1039,7 +1039,7 @@ test("managed settings override project settings", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
autoupdate: true,
disabled_providers: [],
theme: "dark",
@@ -1048,7 +1048,7 @@ test("managed settings override project settings", async () => {
})
await writeManagedSettings({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
autoupdate: false,
disabled_providers: ["openai"],
})
@@ -1068,7 +1068,7 @@ test("missing managed settings file is not an error", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await writeConfig(dir, {
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "user/model",
})
},
@@ -1089,7 +1089,7 @@ test("migrates legacy edit tool to edit permission", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -1118,7 +1118,7 @@ test("migrates legacy patch tool to edit permission", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -1147,7 +1147,7 @@ test("migrates legacy multiedit tool to edit permission", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -1176,7 +1176,7 @@ test("migrates mixed legacy tools config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
tools: {
@@ -1211,7 +1211,7 @@ test("merges legacy tools with existing permission config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
agent: {
test: {
permission: {
@@ -1244,7 +1244,7 @@ test("permission config preserves key order", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
permission: {
"*": "deny",
edit: "ask",
@@ -1292,7 +1292,7 @@ test("project config can override MCP server enabled status", async () => {
await Bun.write(
path.join(dir, "opencode.jsonc"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
jira: {
type: "remote",
@@ -1311,7 +1311,7 @@ test("project config can override MCP server enabled status", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
jira: {
type: "remote",
@@ -1350,7 +1350,7 @@ test("MCP config deep merges preserving base config properties", async () => {
await Bun.write(
path.join(dir, "opencode.jsonc"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
myserver: {
type: "remote",
@@ -1367,7 +1367,7 @@ test("MCP config deep merges preserving base config properties", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
myserver: {
type: "remote",
@@ -1402,7 +1402,7 @@ test("local .opencode config can override MCP from project config", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
docs: {
type: "remote",
@@ -1418,7 +1418,7 @@ test("local .opencode config can override MCP from project config", async () =>
await Bun.write(
path.join(opencodeDir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
docs: {
type: "remote",
@@ -1486,7 +1486,7 @@ test("project config overrides remote well-known config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
jira: {
type: "remote",
@@ -1579,7 +1579,7 @@ describe("deduplicatePlugins", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
plugin: ["my-plugin@1.0.0"],
}),
)
@@ -1614,7 +1614,7 @@ describe("KILO_DISABLE_PROJECT_CONFIG", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "project/model",
username: "project-user",
}),
@@ -1709,7 +1709,7 @@ describe("KILO_DISABLE_PROJECT_CONFIG", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
instructions: ["./CUSTOM.md"],
}),
)
@@ -1755,7 +1755,7 @@ describe("KILO_DISABLE_PROJECT_CONFIG", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "configdir/model",
}),
)
@@ -1768,7 +1768,7 @@ describe("KILO_DISABLE_PROJECT_CONFIG", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "project/model",
}),
)
+1 -1
View File
@@ -26,7 +26,7 @@ export async function tmpdir<T>(options?: TmpDirOptions<T>) {
await Bun.write(
path.join(dirpath, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
...options.config,
}),
)
@@ -55,7 +55,7 @@ test("model fetch uses accountId from OAuth auth as kilocodeOrganizationId", asy
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -94,7 +94,7 @@ test("model fetch without OAuth accountId does not set kilocodeOrganizationId",
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
+1 -1
View File
@@ -53,7 +53,7 @@ test("headers are passed to transports when oauth is enabled (default)", async (
await Bun.write(
`${dir}/opencode.json`,
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
"test-server": {
type: "remote",
@@ -111,7 +111,7 @@ test("BrowserOpenFailed event is published when open() throws", async () => {
await Bun.write(
`${dir}/opencode.json`,
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
"test-oauth-server": {
type: "remote",
@@ -162,7 +162,7 @@ test("BrowserOpenFailed event is NOT published when open() succeeds", async () =
await Bun.write(
`${dir}/opencode.json`,
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
"test-oauth-server-2": {
type: "remote",
@@ -211,7 +211,7 @@ test("open() is called with the authorization URL", async () => {
await Bun.write(
`${dir}/opencode.json`,
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
mcp: {
"test-oauth-server-3": {
type: "remote",
@@ -14,7 +14,7 @@ test("Bedrock: config region takes precedence over AWS_REGION env var", async ()
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -46,7 +46,7 @@ test("Bedrock: falls back to AWS_REGION env var when no config region", async ()
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -71,7 +71,7 @@ test("Bedrock: loads when bearer token from auth.json is present", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -139,7 +139,7 @@ test("Bedrock: config profile takes precedence over AWS_PROFILE env var", async
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -172,7 +172,7 @@ test("Bedrock: includes custom endpoint in options when specified", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -205,7 +205,7 @@ test("Bedrock: autoloads when AWS_WEB_IDENTITY_TOKEN_FILE is present", async ()
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -243,7 +243,7 @@ test("Bedrock: model with us. prefix should not be double-prefixed", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -280,7 +280,7 @@ test("Bedrock: model with global. prefix should not be prefixed", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -316,7 +316,7 @@ test("Bedrock: model with eu. prefix should not be double-prefixed", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -352,7 +352,7 @@ test("Bedrock: model without prefix in US region should get us. prefix added", a
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"amazon-bedrock": {
options: {
@@ -13,7 +13,7 @@ test("GitLab Duo: loads provider with API key from environment", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -37,7 +37,7 @@ test("GitLab Duo: config instanceUrl option sets baseURL", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
gitlab: {
options: {
@@ -69,7 +69,7 @@ test("GitLab Duo: loads with OAuth token from auth.json", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -106,7 +106,7 @@ test("GitLab Duo: loads with Personal Access Token from auth.json", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -142,7 +142,7 @@ test("GitLab Duo: supports self-hosted instance configuration", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
gitlab: {
options: {
@@ -174,7 +174,7 @@ test("GitLab Duo: config apiKey takes precedence over environment variable", asy
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
gitlab: {
options: {
@@ -204,7 +204,7 @@ test("GitLab Duo: supports feature flags configuration", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
gitlab: {
options: {
@@ -239,7 +239,7 @@ test("GitLab Duo: has multiple agentic chat models available", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -12,7 +12,7 @@ test("provider loaded from env variable", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -39,7 +39,7 @@ test("provider loaded from config with apiKey option", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
options: {
@@ -66,7 +66,7 @@ test("disabled_providers excludes provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
disabled_providers: ["anthropic"],
}),
)
@@ -90,7 +90,7 @@ test("enabled_providers restricts to only listed providers", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: ["anthropic"],
}),
)
@@ -116,7 +116,7 @@ test("model whitelist filters models for provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
whitelist: ["claude-sonnet-4-20250514"],
@@ -147,7 +147,7 @@ test("model blacklist excludes specific models", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
blacklist: ["claude-sonnet-4-20250514"],
@@ -177,7 +177,7 @@ test("custom model alias via config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -212,7 +212,7 @@ test("custom provider with npm package", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"custom-provider": {
name: "Custom Provider",
@@ -255,7 +255,7 @@ test("env variable takes precedence, config merges options", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
options: {
@@ -287,7 +287,7 @@ test("getModel returns model for valid provider/model", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -314,7 +314,7 @@ test("getModel throws ModelNotFoundError for invalid model", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -336,7 +336,7 @@ test("getModel throws ModelNotFoundError for invalid provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -367,7 +367,7 @@ test("defaultModel returns first available model when no config set", async () =
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -391,7 +391,7 @@ test("defaultModel respects config model setting", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
model: "anthropic/claude-sonnet-4-20250514",
}),
)
@@ -416,7 +416,7 @@ test("provider with baseURL from config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"custom-openai": {
name: "Custom OpenAI",
@@ -455,7 +455,7 @@ test("model cost defaults to zero when not specified", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"test-provider": {
name: "Test Provider",
@@ -496,7 +496,7 @@ test("model options are merged from existing model", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -531,7 +531,7 @@ test("provider removed when all models filtered out", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
whitelist: ["nonexistent-model"],
@@ -559,7 +559,7 @@ test("closest finds model by partial match", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -584,7 +584,7 @@ test("closest returns undefined for nonexistent provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -604,7 +604,7 @@ test("getModel uses realIdByKey for aliased models", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -642,7 +642,7 @@ test("provider api field sets model api.url", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"custom-api": {
name: "Custom API",
@@ -681,7 +681,7 @@ test("explicit baseURL overrides api field", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"custom-api": {
name: "Custom API",
@@ -720,7 +720,7 @@ test("model inherits properties from existing database model", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -756,7 +756,7 @@ test("disabled_providers prevents loading even with env var", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
disabled_providers: ["openai"],
}),
)
@@ -780,7 +780,7 @@ test("enabled_providers with empty array allows no providers", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: [],
}),
)
@@ -805,7 +805,7 @@ test("whitelist and blacklist can be combined", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
whitelist: ["claude-sonnet-4-20250514", "claude-opus-4-20250514"],
@@ -838,7 +838,7 @@ test("model modalities default correctly", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"test-provider": {
name: "Test",
@@ -875,7 +875,7 @@ test("model with custom cost values", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"test-provider": {
name: "Test",
@@ -920,7 +920,7 @@ test("getSmallModel returns appropriate small model", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -944,7 +944,7 @@ test("getSmallModel respects config small_model override", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
small_model: "anthropic/claude-sonnet-4-20250514",
}),
)
@@ -985,7 +985,7 @@ test("multiple providers can be configured simultaneously", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
options: { timeout: 30000 },
@@ -1020,7 +1020,7 @@ test("provider with custom npm package", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"local-llm": {
name: "Local LLM",
@@ -1062,7 +1062,7 @@ test("model alias name defaults to alias key when id differs", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1095,7 +1095,7 @@ test("provider with multiple env var options only includes apiKey when single en
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"multi-env": {
name: "Multi Env Provider",
@@ -1137,7 +1137,7 @@ test("provider with single env var includes apiKey automatically", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"single-env": {
name: "Single Env Provider",
@@ -1179,7 +1179,7 @@ test("model cost overrides existing cost values", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1216,7 +1216,7 @@ test("completely new provider not in database can be configured", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"brand-new-provider": {
name: "Brand New",
@@ -1266,7 +1266,7 @@ test("disabled_providers and enabled_providers interaction", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
// enabled_providers takes precedence - only these are considered
enabled_providers: ["anthropic", "openai"],
// Then disabled_providers filters from the enabled set
@@ -1300,7 +1300,7 @@ test("model with tool_call false", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"no-tools": {
name: "No Tools Provider",
@@ -1335,7 +1335,7 @@ test("model defaults tool_call to true when not specified", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"default-tools": {
name: "Default Tools Provider",
@@ -1370,7 +1370,7 @@ test("model headers are preserved", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"headers-provider": {
name: "Headers Provider",
@@ -1413,7 +1413,7 @@ test("provider env fallback - second env var used if first missing", async () =>
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"fallback-env": {
name: "Fallback Env Provider",
@@ -1453,7 +1453,7 @@ test("getModel returns consistent results", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1479,7 +1479,7 @@ test("provider name defaults to id when not in database", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"my-custom-id": {
// no name specified
@@ -1514,7 +1514,7 @@ test("ModelNotFoundError includes suggestions for typos", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1542,7 +1542,7 @@ test("ModelNotFoundError for provider includes suggestions", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1570,7 +1570,7 @@ test("getProvider returns undefined for nonexistent provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1590,7 +1590,7 @@ test("getProvider returns provider info", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1614,7 +1614,7 @@ test("closest returns undefined when no partial match found", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1637,7 +1637,7 @@ test("closest checks multiple query terms in order", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1662,7 +1662,7 @@ test("model limit defaults to zero when not specified", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"no-limit": {
name: "No Limit Provider",
@@ -1699,7 +1699,7 @@ test("provider options are deeply merged", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
options: {
@@ -1736,7 +1736,7 @@ test("custom model inherits npm package from models.dev provider config", async
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
openai: {
models: {
@@ -1772,7 +1772,7 @@ test("custom model inherits api.url from models.dev provider", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
openrouter: {
models: {
@@ -1816,7 +1816,7 @@ test("model variants are generated for reasoning models", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
}),
)
},
@@ -1843,7 +1843,7 @@ test("model variants can be disabled via config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1881,7 +1881,7 @@ test("model variants can be customized via config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1922,7 +1922,7 @@ test("disabled key is stripped from variant config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1962,7 +1962,7 @@ test("all variants can be disabled via config", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -1999,7 +1999,7 @@ test("variant config merges with generated variants", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
anthropic: {
models: {
@@ -2039,7 +2039,7 @@ test("variants filtered in second pass for database models", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
openai: {
models: {
@@ -2077,7 +2077,7 @@ test("custom model with variants enabled and disabled", async () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
provider: {
"custom-reasoning": {
name: "Custom Reasoning Provider",
+4 -4
View File
@@ -245,7 +245,7 @@ describe("session.llm.stream", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: [providerID],
provider: {
[providerID]: {
@@ -369,7 +369,7 @@ describe("session.llm.stream", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: ["openai"],
provider: {
openai: {
@@ -498,7 +498,7 @@ describe("session.llm.stream", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: [providerID],
provider: {
[providerID]: {
@@ -599,7 +599,7 @@ describe("session.llm.stream", () => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
$schema: "https://app.kilo.ai/config.json",
enabled_providers: [providerID],
provider: {
[providerID]: {
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/plugin",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -8,7 +8,7 @@
"exports": {
".": "./src/index.ts"
},
"version": "1.0.20",
"version": "1.0.21",
"dependencies": {},
"peerDependencies": {}
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://json.schemastore.org/package.json",
"name": "@kilocode/sdk",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"repository": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/ui",
"version": "1.0.20",
"version": "1.0.21",
"type": "module",
"license": "MIT",
"exports": {
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@opencode-ai/util",
"version": "1.0.20",
"version": "1.0.21",
"private": true,
"type": "module",
"license": "MIT",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@kilocode/upstream-merge",
"version": "1.0.20",
"version": "1.0.21",
"private": true,
"type": "module",
"description": "Scripts for automating upstream opencode merges into Kilo",
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "opencode",
"displayName": "opencode",
"description": "opencode for VS Code",
"version": "1.0.20",
"version": "1.0.21",
"publisher": "sst-dev",
"repository": {
"type": "git",