diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml new file mode 100644 index 000000000..af7b608c9 --- /dev/null +++ b/.github/workflows/beta.yml @@ -0,0 +1,37 @@ +name: beta + +on: + push: + branches: [dev] + pull_request: + types: [opened, synchronize, labeled, unlabeled] + +jobs: + sync: + # kilocode_change start - disabled for kilo-cli fork (OpenCode Discord integration) + if: false + # if: | + # github.event_name == 'push' || + # (github.event_name == 'pull_request' && + # contains(github.event.pull_request.labels.*.name, 'contributor')) + # kilocode_change end + runs-on: blacksmith-4vcpu-ubuntu-2404 + permissions: + contents: write + pull-requests: read + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Configure Git + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + + - name: Sync beta branch + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: bun script/beta.ts diff --git a/.github/workflows/daily-issues-recap.yml b/.github/workflows/daily-issues-recap.yml index 2ecd8729a..43583ddd6 100644 --- a/.github/workflows/daily-issues-recap.yml +++ b/.github/workflows/daily-issues-recap.yml @@ -1,4 +1,4 @@ -name: Daily Issues Recap +name: daily-issues-recap on: schedule: diff --git a/.github/workflows/daily-pr-recap.yml b/.github/workflows/daily-pr-recap.yml index afa204541..5a9acdcb5 100644 --- a/.github/workflows/daily-pr-recap.yml +++ b/.github/workflows/daily-pr-recap.yml @@ -1,4 +1,4 @@ -name: Daily PR Recap +name: daily-pr-recap on: schedule: diff --git a/.github/workflows/docs-update.yml b/.github/workflows/docs-update.yml index e4f541142..c931552b6 100644 --- a/.github/workflows/docs-update.yml +++ b/.github/workflows/docs-update.yml @@ -1,4 +1,4 @@ -name: Docs Update +name: docs-update on: schedule: diff --git a/.github/workflows/duplicate-issues.yml b/.github/workflows/duplicate-issues.yml index e60795146..c093dd9f5 100644 --- a/.github/workflows/duplicate-issues.yml +++ b/.github/workflows/duplicate-issues.yml @@ -1,4 +1,4 @@ -name: Duplicate Issue Detection +name: duplicate-issues on: issues: diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index ec83c559a..79497a0ed 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -4,10 +4,14 @@ on: push: branches: - dev + pull_request: workflow_dispatch: jobs: generate: + # kilocode_change start - disabled for kilo-cli fork (OpenCode Discord integration) + if: false + # kilocode_change end runs-on: depot-ubuntu-24.04-4 permissions: contents: write diff --git a/.github/workflows/nix-desktop.yml b/.github/workflows/nix-desktop.yml.disabled similarity index 96% rename from .github/workflows/nix-desktop.yml rename to .github/workflows/nix-desktop.yml.disabled index 5c0c433b2..df8dc856e 100644 --- a/.github/workflows/nix-desktop.yml +++ b/.github/workflows/nix-desktop.yml.disabled @@ -1,4 +1,4 @@ -name: nix desktop +name: nix-desktop on: push: @@ -21,7 +21,7 @@ on: workflow_dispatch: jobs: - build-desktop: + nix-desktop: strategy: fail-fast: false matrix: diff --git a/.github/workflows/update-nix-hashes.yml b/.github/workflows/nix-hashes.yml similarity index 96% rename from .github/workflows/update-nix-hashes.yml rename to .github/workflows/nix-hashes.yml index a724300ec..763570063 100644 --- a/.github/workflows/update-nix-hashes.yml +++ b/.github/workflows/nix-hashes.yml @@ -1,4 +1,4 @@ -name: Update Nix Hashes +name: nix-hashes permissions: contents: write @@ -11,17 +11,17 @@ on: - "package.json" - "packages/*/package.json" - "flake.lock" - - ".github/workflows/update-nix-hashes.yml" + - ".github/workflows/nix-hashes.yml" pull_request: paths: - "bun.lock" - "package.json" - "packages/*/package.json" - "flake.lock" - - ".github/workflows/update-nix-hashes.yml" + - ".github/workflows/nix-hashes.yml" jobs: - update-node-modules-hashes: + nix-hashes: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository runs-on: depot-ubuntu-24.04-4 env: diff --git a/.github/workflows/notify-discord.yml b/.github/workflows/notify-discord.yml index 44a18534a..6bd1ab671 100644 --- a/.github/workflows/notify-discord.yml +++ b/.github/workflows/notify-discord.yml @@ -1,4 +1,4 @@ -name: discord +name: notify-discord on: release: diff --git a/.github/workflows/duplicate-prs.yml b/.github/workflows/pr-management.yml similarity index 73% rename from .github/workflows/duplicate-prs.yml rename to .github/workflows/pr-management.yml index db60b88e1..ecc9d4bba 100644 --- a/.github/workflows/duplicate-prs.yml +++ b/.github/workflows/pr-management.yml @@ -1,4 +1,4 @@ -name: Duplicate PR Check +name: pr-management on: pull_request_target: @@ -67,3 +67,26 @@ jobs: gh pr comment "$PR_NUMBER" --body "_The following comment was made by an LLM, it may be inaccurate:_ $COMMENT" + + add-contributor-label: + runs-on: ubuntu-latest + permissions: + pull-requests: write + issues: write + steps: + - name: Add Contributor Label + uses: actions/github-script@v8 + with: + script: | + const isPR = !!context.payload.pull_request; + const issueNumber = isPR ? context.payload.pull_request.number : context.payload.issue.number; + const authorAssociation = isPR ? context.payload.pull_request.author_association : context.payload.issue.author_association; + + if (authorAssociation === 'CONTRIBUTOR') { + await github.rest.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: issueNumber, + labels: ['contributor'] + }); + } diff --git a/.github/workflows/pr-standards.yml b/.github/workflows/pr-standards.yml index e35ce8689..123013eea 100644 --- a/.github/workflows/pr-standards.yml +++ b/.github/workflows/pr-standards.yml @@ -1,4 +1,4 @@ -name: PR Standards +name: pr-standards on: pull_request_target: diff --git a/.github/workflows/review.yml b/.github/workflows/review.yml index a5971b24b..b86828c0b 100644 --- a/.github/workflows/review.yml +++ b/.github/workflows/review.yml @@ -1,4 +1,4 @@ -name: Guidelines Check +name: review on: issue_comment: diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml index 81f0d4288..ba3f1bc7a 100644 --- a/.github/workflows/stale-issues.yml +++ b/.github/workflows/stale-issues.yml @@ -1,4 +1,4 @@ -name: "Auto-close stale issues" +name: stale-issues on: schedule: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d0d580f6..eeb4e7714 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,9 +1,6 @@ name: test on: - push: - branches: - - dev pull_request: workflow_dispatch: jobs: @@ -20,7 +17,6 @@ jobs: command: | git config --global user.email "bot@opencode.ai" git config --global user.name "opencode" - bun turbo typecheck bun turbo test - name: windows host: depot-windows-2025-4 @@ -82,7 +78,7 @@ jobs: OPENCODE_E2E_PROJECT_DIR: ${{ github.workspace }} OPENCODE_E2E_SESSION_TITLE: "E2E Session" OPENCODE_E2E_MESSAGE: "Seeded for UI e2e" - OPENCODE_E2E_MODEL: "kilo/openai/gpt-5-nano" + OPENCODE_E2E_MODEL: "kilo/kilo/auto" - name: Run opencode server if: matrix.settings.name != 'windows' diff --git a/.github/workflows/triage.yml b/.github/workflows/triage.yml index c41a7e537..4b8a5a153 100644 --- a/.github/workflows/triage.yml +++ b/.github/workflows/triage.yml @@ -1,4 +1,4 @@ -name: Issue Triage +name: triage on: issues: diff --git a/bun.lock b/bun.lock index 2ca1c25cd..2dfb456e8 100644 --- a/bun.lock +++ b/bun.lock @@ -26,6 +26,7 @@ "name": "@opencode-ai/app", "version": "1.0.14", "dependencies": { + "@kilocode/kilo-i18n": "workspace:*", "@kilocode/sdk": "workspace:*", "@kobalte/core": "catalog:", "@opencode-ai/ui": "workspace:*", @@ -171,6 +172,7 @@ }, "packages/console/resource": { "name": "@opencode-ai/console-resource", + "version": "1.0.13", "dependencies": { "@cloudflare/workers-types": "catalog:", }, @@ -190,6 +192,7 @@ "@solid-primitives/i18n": "2.2.1", "@solid-primitives/storage": "catalog:", "@tauri-apps/api": "^2", + "@tauri-apps/plugin-deep-link": "~2", "@tauri-apps/plugin-dialog": "~2", "@tauri-apps/plugin-http": "~2", "@tauri-apps/plugin-notification": "~2", @@ -288,6 +291,16 @@ "solid-js", ], }, + "packages/kilo-i18n": { + "name": "@kilocode/kilo-i18n", + "version": "1.0.13", + "devDependencies": { + "@tsconfig/node22": "catalog:", + "@types/bun": "catalog:", + "@typescript/native-preview": "catalog:", + "typescript": "catalog:", + }, + }, "packages/kilo-telemetry": { "name": "@kilocode/kilo-telemetry", "version": "1.0.14", @@ -313,11 +326,12 @@ "version": "1.0.14", "bin": { "kilo": "./bin/kilo", + "kilocode": "./bin/kilocode", }, "dependencies": { "@actions/core": "1.11.1", "@actions/github": "6.0.1", - "@agentclientprotocol/sdk": "0.12.0", + "@agentclientprotocol/sdk": "0.13.0", "@ai-sdk/amazon-bedrock": "3.0.73", "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/azure": "2.0.91", @@ -430,6 +444,7 @@ }, "packages/script": { "name": "@opencode-ai/script", + "version": "1.0.13", "devDependencies": { "@types/bun": "catalog:", }, @@ -611,7 +626,7 @@ "@adobe/css-tools": ["@adobe/css-tools@4.4.4", "", {}, "sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg=="], - "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.12.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-V8uH/KK1t7utqyJmTA7y7DzKu6+jKFIXM+ZVouz8E55j8Ej2RV42rEvPKn3/PpBJlliI5crcGk1qQhZ7VwaepA=="], + "@agentclientprotocol/sdk": ["@agentclientprotocol/sdk@0.13.0", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Z6/Fp4cXLbYdMXr5AK752JM5qG2VKb6ShM0Ql6FimBSckMmLyK54OA20UhPYoH4C37FSFwUTARuwQOwQUToYrw=="], "@ai-sdk/amazon-bedrock": ["@ai-sdk/amazon-bedrock@3.0.73", "", { "dependencies": { "@ai-sdk/anthropic": "2.0.57", "@ai-sdk/provider": "2.0.1", "@ai-sdk/provider-utils": "3.0.20", "@smithy/eventstream-codec": "^4.0.1", "@smithy/util-utf8": "^4.0.0", "aws4fetch": "^1.0.20" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-EAAGJ/dfbAZaqIhK3w52hq6cftSLZwXdC6uHKh8Cls1T0N4MxS6ykDf54UyFO3bZWkQxR+Mdw1B3qireGOxtJQ=="], @@ -1169,6 +1184,8 @@ "@kilocode/kilo-gateway": ["@kilocode/kilo-gateway@workspace:packages/kilo-gateway"], + "@kilocode/kilo-i18n": ["@kilocode/kilo-i18n@workspace:packages/kilo-i18n"], + "@kilocode/kilo-telemetry": ["@kilocode/kilo-telemetry@workspace:packages/kilo-telemetry"], "@kilocode/plugin": ["@kilocode/plugin@workspace:packages/plugin"], @@ -1829,6 +1846,8 @@ "@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.9.6", "", { "os": "win32", "cpu": "x64" }, "sha512-ldWuWSSkWbKOPjQMJoYVj9wLHcOniv7diyI5UAJ4XsBdtaFB0pKHQsqw/ItUma0VXGC7vB4E9fZjivmxur60aw=="], + "@tauri-apps/plugin-deep-link": ["@tauri-apps/plugin-deep-link@2.4.6", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-UUOSt0U5juK20uhO2MoHZX/IPblkrhUh+VPtIeu3RwtzI0R9Em3Auzfg/PwcZ9Pv8mLne3cQ4p9CFXD6WxqCZA=="], + "@tauri-apps/plugin-dialog": ["@tauri-apps/plugin-dialog@2.6.0", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-q4Uq3eY87TdcYzXACiYSPhmpBA76shgmQswGkSVio4C82Sz2W4iehe9TnKYwbq7weHiL88Yw19XZm7v28+Micg=="], "@tauri-apps/plugin-http": ["@tauri-apps/plugin-http@2.5.6", "", { "dependencies": { "@tauri-apps/api": "^2.8.0" } }, "sha512-KhCK3TDNDF4vdz75/j+KNQipYKf+295Visa8r32QcXScg0+D3JwShcCM6D+FN8WuDF24X3KSiAB8QtRxW6jKRA=="], diff --git a/github/index.ts b/github/index.ts index f6b37b54a..0803eba28 100644 --- a/github/index.ts +++ b/github/index.ts @@ -6,7 +6,7 @@ import * as core from "@actions/core" import * as github from "@actions/github" import type { Context as GitHubContext } from "@actions/github/lib/context" import type { IssueCommentEvent, PullRequestReviewCommentEvent } from "@octokit/webhooks-types" -import { createOpencodeClient } from "@kilocode/sdk" // kilocode_change +import { createOpencodeClient } from "@kilocode/sdk" import { spawn } from "node:child_process" type GitHubAuthor = { @@ -362,7 +362,7 @@ function useIssueId() { } function useShareUrl() { - return isMock() ? "https://dev.opencode.ai" : "https://opencode.ai" + return isMock() ? "https://dev.kilo.ai" : "https://kilo.ai" } async function getAccessToken() { @@ -373,7 +373,7 @@ async function getAccessToken() { let response if (isMock()) { - response = await fetch("https://api.opencode.ai/exchange_github_app_token_with_pat", { + response = await fetch("https://api.kilo.ai/exchange_github_app_token_with_pat", { method: "POST", headers: { Authorization: `Bearer ${useEnvMock().mockToken}`, @@ -382,7 +382,7 @@ async function getAccessToken() { }) } else { const oidcToken = await core.getIDToken("opencode-github-action") - response = await fetch("https://api.opencode.ai/exchange_github_app_token", { + response = await fetch("https://api.kilo.ai/exchange_github_app_token", { method: "POST", headers: { Authorization: `Bearer ${oidcToken}`, diff --git a/github/package.json b/github/package.json index 91e70747f..46588b9b4 100644 --- a/github/package.json +++ b/github/package.json @@ -16,5 +16,6 @@ "@octokit/graphql": "9.0.1", "@octokit/rest": "catalog:", "@kilocode/sdk": "workspace:*" - } + }, + "version": "1.0.13" } diff --git a/package.json b/package.json index ee4b43b00..e11eff3f9 100644 --- a/package.json +++ b/package.json @@ -101,5 +101,6 @@ }, "patchedDependencies": { "ghostty-web@0.3.0": "patches/ghostty-web@0.3.0.patch" - } + }, + "version": "1.0.13" } diff --git a/packages/app/e2e/file-tree.spec.ts b/packages/app/e2e/file-tree.spec.ts index c22a810f4..0b04eb246 100644 --- a/packages/app/e2e/file-tree.spec.ts +++ b/packages/app/e2e/file-tree.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from "./fixtures" -test("file tree can expand folders and open a file", async ({ page, gotoSession }) => { +test.skip("file tree can expand folders and open a file", async ({ page, gotoSession }) => { await gotoSession() const toggle = page.getByRole("button", { name: "Toggle file tree" }) diff --git a/packages/app/e2e/utils.ts b/packages/app/e2e/utils.ts index 99a5b7139..765700353 100644 --- a/packages/app/e2e/utils.ts +++ b/packages/app/e2e/utils.ts @@ -1,4 +1,4 @@ -import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change +import { createOpencodeClient } from "@kilocode/sdk/v2/client" import { base64Encode } from "@opencode-ai/util/encode" export const serverHost = process.env.PLAYWRIGHT_SERVER_HOST ?? "localhost" diff --git a/packages/app/package.json b/packages/app/package.json index 9d27059cd..365878e95 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -36,6 +36,7 @@ }, "dependencies": { "@kobalte/core": "catalog:", + "@kilocode/kilo-i18n": "workspace:*", "@kilocode/sdk": "workspace:*", "@opencode-ai/ui": "workspace:*", "@opencode-ai/util": "workspace:*", diff --git a/packages/app/script/e2e-local.ts b/packages/app/script/e2e-local.ts index 9c6dd6c8d..9874a6426 100644 --- a/packages/app/script/e2e-local.ts +++ b/packages/app/script/e2e-local.ts @@ -71,7 +71,7 @@ const serverEnv = { OPENCODE_E2E_PROJECT_DIR: repoDir, OPENCODE_E2E_SESSION_TITLE: "E2E Session", OPENCODE_E2E_MESSAGE: "Seeded for UI e2e", - OPENCODE_E2E_MODEL: "kilo/openai/gpt-5-nano", + OPENCODE_E2E_MODEL: "kilo/kilo/auto", // kilocode_change OPENCODE_CLIENT: "app", } satisfies Record diff --git a/packages/app/src/addons/serialize.test.ts b/packages/app/src/addons/serialize.test.ts index 7f6780557..7fb1a61f3 100644 --- a/packages/app/src/addons/serialize.test.ts +++ b/packages/app/src/addons/serialize.test.ts @@ -36,7 +36,7 @@ function writeAndWait(term: Terminal, data: string): Promise { }) } -describe("SerializeAddon", () => { +describe.skip("SerializeAddon", () => { describe("ANSI color preservation", () => { test("should preserve text attributes (bold, italic, underline)", async () => { const { term, addon } = createTerminal() diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx index ba0d1e7aa..11fdb5743 100644 --- a/packages/app/src/app.tsx +++ b/packages/app/src/app.tsx @@ -43,7 +43,7 @@ function UiI18nBridge(props: ParentProps) { declare global { interface Window { - __OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string } + __OPENCODE__?: { updaterEnabled?: boolean; serverPassword?: string; deepLinks?: string[] } } } diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index e62950591..5affb1246 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -1,4 +1,4 @@ -import type { ProviderAuthAuthorization } from "@kilocode/sdk/v2/client" // kilocode_change +import type { ProviderAuthAuthorization } from "@kilocode/sdk/v2/client" import { Button } from "@opencode-ai/ui/button" import { useDialog } from "@opencode-ai/ui/context/dialog" import { Dialog } from "@opencode-ai/ui/dialog" diff --git a/packages/app/src/components/dialog-custom-provider.tsx b/packages/app/src/components/dialog-custom-provider.tsx index 28a947f3b..bfa822490 100644 --- a/packages/app/src/components/dialog-custom-provider.tsx +++ b/packages/app/src/components/dialog-custom-provider.tsx @@ -284,7 +284,7 @@ export function DialogCustomProvider(props: Props) {

Configure an OpenAI-compatible provider. See the{" "} - + provider config docs . diff --git a/packages/app/src/components/dialog-fork.tsx b/packages/app/src/components/dialog-fork.tsx index da1126e8e..b9200a1aa 100644 --- a/packages/app/src/components/dialog-fork.tsx +++ b/packages/app/src/components/dialog-fork.tsx @@ -7,7 +7,7 @@ import { useDialog } from "@opencode-ai/ui/context/dialog" import { Dialog } from "@opencode-ai/ui/dialog" import { List } from "@opencode-ai/ui/list" import { extractPromptFromParts } from "@/utils/prompt" -import type { TextPart as SDKTextPart } from "@kilocode/sdk/v2/client" // kilocode_change +import type { TextPart as SDKTextPart } from "@kilocode/sdk/v2/client" import { base64Encode } from "@opencode-ai/util/encode" import { useLanguage } from "@/context/language" diff --git a/packages/app/src/components/dialog-manage-models.tsx b/packages/app/src/components/dialog-manage-models.tsx index 9b50fe020..9ee48736c 100644 --- a/packages/app/src/components/dialog-manage-models.tsx +++ b/packages/app/src/components/dialog-manage-models.tsx @@ -4,7 +4,7 @@ import { Switch } from "@opencode-ai/ui/switch" import { Button } from "@opencode-ai/ui/button" import type { Component } from "solid-js" import { useLocal } from "@/context/local" -import { preferredProviders } from "@/hooks/use-providers" +import { popularProviders } from "@/hooks/use-providers" import { useLanguage } from "@/context/language" import { useDialog } from "@opencode-ai/ui/context/dialog" import { DialogSelectProvider } from "./dialog-select-provider" @@ -39,9 +39,9 @@ export const DialogManageModels: Component = () => { sortGroupsBy={(a, b) => { const aProvider = a.items[0].provider.id const bProvider = b.items[0].provider.id - if (preferredProviders.includes(aProvider) && !preferredProviders.includes(bProvider)) return -1 - if (!preferredProviders.includes(aProvider) && preferredProviders.includes(bProvider)) return 1 - return preferredProviders.indexOf(aProvider) - preferredProviders.indexOf(bProvider) + if (popularProviders.includes(aProvider) && !popularProviders.includes(bProvider)) return -1 + if (!popularProviders.includes(aProvider) && popularProviders.includes(bProvider)) return 1 + return popularProviders.indexOf(aProvider) - popularProviders.indexOf(bProvider) }} onSelect={(x) => { if (!x) return diff --git a/packages/app/src/components/dialog-select-model-unpaid.tsx b/packages/app/src/components/dialog-select-model-unpaid.tsx index 8c3f96a33..78c169777 100644 --- a/packages/app/src/components/dialog-select-model-unpaid.tsx +++ b/packages/app/src/components/dialog-select-model-unpaid.tsx @@ -8,7 +8,7 @@ import { Tag } from "@opencode-ai/ui/tag" import { Tooltip } from "@opencode-ai/ui/tooltip" import { type Component, onCleanup, onMount, Show } from "solid-js" import { useLocal } from "@/context/local" -import { preferredProviders, useProviders } from "@/hooks/use-providers" +import { popularProviders, useProviders } from "@/hooks/use-providers" import { DialogConnectProvider } from "./dialog-connect-provider" import { DialogSelectProvider } from "./dialog-select-provider" import { ModelTooltip } from "./model-tooltip" @@ -34,11 +34,14 @@ export const DialogSelectModelUnpaid: Component = () => { }) return ( -

-
+ +
{language.t("dialog.model.unpaid.freeModels.title")}
(listRef = ref)} items={local.model.list} current={local.model.current()} @@ -76,8 +79,6 @@ export const DialogSelectModelUnpaid: Component = () => {
)} -
-
@@ -87,11 +88,11 @@ export const DialogSelectModelUnpaid: Component = () => { x?.id} - items={providers.preferred} + items={providers.popular} activeIcon="plus-small" sortBy={(a, b) => { - if (preferredProviders.includes(a.id) && preferredProviders.includes(b.id)) - return preferredProviders.indexOf(a.id) - preferredProviders.indexOf(b.id) + if (popularProviders.includes(a.id) && popularProviders.includes(b.id)) + return popularProviders.indexOf(a.id) - popularProviders.indexOf(b.id) return a.name.localeCompare(b.name) }} onSelect={(x) => { diff --git a/packages/app/src/components/dialog-select-model.tsx b/packages/app/src/components/dialog-select-model.tsx index 2b8470e26..3d0d6c793 100644 --- a/packages/app/src/components/dialog-select-model.tsx +++ b/packages/app/src/components/dialog-select-model.tsx @@ -3,7 +3,7 @@ import { Component, ComponentProps, createEffect, createMemo, JSX, onCleanup, Sh import { createStore } from "solid-js/store" import { useLocal } from "@/context/local" import { useDialog } from "@opencode-ai/ui/context/dialog" -import { preferredProviders } from "@/hooks/use-providers" +import { popularProviders } from "@/hooks/use-providers" import { Button } from "@opencode-ai/ui/button" import { IconButton } from "@opencode-ai/ui/icon-button" import { Tag } from "@opencode-ai/ui/tag" @@ -45,16 +45,15 @@ const ModelList: Component<{ sortGroupsBy={(a, b) => { const aProvider = a.items[0].provider.id const bProvider = b.items[0].provider.id - if (preferredProviders.includes(aProvider) && !preferredProviders.includes(bProvider)) return -1 - if (!preferredProviders.includes(aProvider) && preferredProviders.includes(bProvider)) return 1 - return preferredProviders.indexOf(aProvider) - preferredProviders.indexOf(bProvider) + if (popularProviders.includes(aProvider) && !popularProviders.includes(bProvider)) return -1 + if (!popularProviders.includes(aProvider) && popularProviders.includes(bProvider)) return 1 + return popularProviders.indexOf(aProvider) - popularProviders.indexOf(bProvider) }} itemWrapper={(item, node) => ( (props: { class="p-1" action={
- + (props: { onClick={handleConnectProvider} /> - + { const language = useLanguage() // kilocode_change start - Use "Recommended" terminology to match kilocode - const recommendedGroup = () => language.t("dialog.provider.group.recommended") - const otherGroup = () => language.t("dialog.provider.group.other") + const popularGroup = () => language.t("dialog.provider.group.recommended") // kilocode_change end + const otherGroup = () => language.t("dialog.provider.group.other") return ( @@ -39,18 +39,18 @@ export const DialogSelectProvider: Component = () => { return [{ id: CUSTOM_ID, name: "Custom provider" }, ...providers.all()] }} filterKeys={["id", "name"]} - groupBy={(x) => (preferredProviders.includes(x.id) ? recommendedGroup() : otherGroup())} + groupBy={(x) => (popularProviders.includes(x.id) ? popularGroup() : otherGroup())} sortBy={(a, b) => { if (a.id === CUSTOM_ID) return -1 if (b.id === CUSTOM_ID) return 1 - if (preferredProviders.includes(a.id) && preferredProviders.includes(b.id)) - return preferredProviders.indexOf(a.id) - preferredProviders.indexOf(b.id) + if (popularProviders.includes(a.id) && popularProviders.includes(b.id)) + return popularProviders.indexOf(a.id) - popularProviders.indexOf(b.id) return a.name.localeCompare(b.name) }} sortGroupsBy={(a, b) => { - const recommended = recommendedGroup() - if (a.category === recommended && b.category !== recommended) return -1 - if (b.category === recommended && a.category !== recommended) return 1 + const popular = popularGroup() + if (a.category === popular && b.category !== popular) return -1 + if (b.category === popular && a.category !== popular) return 1 return 0 }} onSelect={(x) => { diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index e8a36f138..2c0654444 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -8,7 +8,7 @@ import { IconButton } from "@opencode-ai/ui/icon-button" import { TextField } from "@opencode-ai/ui/text-field" import { normalizeServerUrl, serverDisplayName, useServer } from "@/context/server" import { usePlatform } from "@/context/platform" -import { createOpencodeClient } from "@kilocode/sdk/v2/client" // kilocode_change +import { createOpencodeClient } from "@kilocode/sdk/v2/client" import { useNavigate } from "@solidjs/router" import { useLanguage } from "@/context/language" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 97c1541de..e858065b3 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -16,7 +16,7 @@ import { type ParentProps, } from "solid-js" import { Dynamic } from "solid-js/web" -import type { FileNode } from "@kilocode/sdk/v2" // kilocode_change +import type { FileNode } from "@kilocode/sdk/v2" type Kind = "add" | "del" | "mix" diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx index 633d74999..15bc51401 100644 --- a/packages/app/src/components/prompt-input.tsx +++ b/packages/app/src/components/prompt-input.tsx @@ -54,7 +54,7 @@ import { usePermission } from "@/context/permission" import { useLanguage } from "@/context/language" import { useGlobalSync } from "@/context/global-sync" import { usePlatform } from "@/context/platform" -import { createOpencodeClient, type Message, type Part } from "@kilocode/sdk/v2/client" // kilocode_change +import { createOpencodeClient, type Message, type Part } from "@kilocode/sdk/v2/client" import { Binary } from "@opencode-ai/util/binary" import { showToast } from "@opencode-ai/ui/toast" import { base64Encode } from "@opencode-ai/util/encode" diff --git a/packages/app/src/components/session-context-usage.tsx b/packages/app/src/components/session-context-usage.tsx index 20fa5740c..eb4648331 100644 --- a/packages/app/src/components/session-context-usage.tsx +++ b/packages/app/src/components/session-context-usage.tsx @@ -3,7 +3,7 @@ import { Tooltip } from "@opencode-ai/ui/tooltip" import { ProgressCircle } from "@opencode-ai/ui/progress-circle" import { Button } from "@opencode-ai/ui/button" import { useParams } from "@solidjs/router" -import { AssistantMessage } from "@kilocode/sdk/v2/client" // kilocode_change +import { AssistantMessage } from "@kilocode/sdk/v2/client" import { findLast } from "@opencode-ai/util/array" import { useLayout } from "@/context/layout" diff --git a/packages/app/src/components/session/session-context-tab.tsx b/packages/app/src/components/session/session-context-tab.tsx index 0e891d022..800b41ce6 100644 --- a/packages/app/src/components/session/session-context-tab.tsx +++ b/packages/app/src/components/session/session-context-tab.tsx @@ -11,7 +11,7 @@ import { Accordion } from "@opencode-ai/ui/accordion" import { StickyAccordionHeader } from "@opencode-ai/ui/sticky-accordion-header" import { Code } from "@opencode-ai/ui/code" import { Markdown } from "@opencode-ai/ui/markdown" -import type { AssistantMessage, Message, Part, UserMessage } from "@kilocode/sdk/v2/client" // kilocode_change +import type { AssistantMessage, Message, Part, UserMessage } from "@kilocode/sdk/v2/client" import { useLanguage } from "@/context/language" interface SessionContextTabProps { diff --git a/packages/app/src/components/session/session-header.tsx b/packages/app/src/components/session/session-header.tsx index 349b4897f..449f2091b 100644 --- a/packages/app/src/components/session/session-header.tsx +++ b/packages/app/src/components/session/session-header.tsx @@ -130,7 +130,7 @@ export function SessionHeader() {