diff --git a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx index bb8211a267..24dcb444d0 100644 --- a/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/dialog-model.tsx @@ -143,11 +143,7 @@ export function DialogModel(props: { providerID?: string }) { } // kilocode_change start - Show "Recommended" category for recommended Kilo models const isKiloRecommended = provider.id === "kilo" && KILO_RECOMMENDED_MODELS.includes(model) - const category = connected() - ? isKiloRecommended - ? "Recommended" - : provider.name - : undefined + const category = connected() ? (isKiloRecommended ? "Recommended" : provider.name) : undefined // kilocode_change end return { value, diff --git a/packages/opencode/src/kilocode/docs/rules-migration.md b/packages/opencode/src/kilocode/docs/rules-migration.md index a0076a9aea..6e47fb140a 100644 --- a/packages/opencode/src/kilocode/docs/rules-migration.md +++ b/packages/opencode/src/kilocode/docs/rules-migration.md @@ -9,12 +9,15 @@ Kilocode stores rules in various file locations. When Opencode starts, it reads ## Key Guarantees ### 1. Read-Only Migration + The migration **never modifies project files**. We only: + - Read existing rule files from disk - Inject file paths into the config's `instructions` array - Never write to the project or modify any files ### 2. Combines with Existing Config (Never Overwrites) + If you have existing opencode config with `instructions`, the Kilocode rules are **combined**, not replaced: ```typescript @@ -29,6 +32,7 @@ If you have existing opencode config with `instructions`, the Kilocode rules are ``` ### 3. Restart to Pick Up Changes + If you change your Kilocode configuration (e.g., edit `.kilocoderules`), simply restart kilo-cli to pick up the new config. No manual migration or conversion needed. ## Source Locations @@ -37,32 +41,33 @@ The migrator reads rules from these locations: ### Project Rules -| Location | Description | -|----------|-------------| -| `.kilocoderules` | Legacy single-file rules in project root | -| `.kilocode/rules/*.md` | Directory-based rules (multiple markdown files) | -| `.kilocoderules-{mode}` | Mode-specific legacy rules (e.g., `.kilocoderules-code`) | -| `.kilocode/rules-{mode}/*.md` | Mode-specific rule directories | +| Location | Description | +| ----------------------------- | -------------------------------------------------------- | +| `.kilocoderules` | Legacy single-file rules in project root | +| `.kilocode/rules/*.md` | Directory-based rules (multiple markdown files) | +| `.kilocoderules-{mode}` | Mode-specific legacy rules (e.g., `.kilocoderules-code`) | +| `.kilocode/rules-{mode}/*.md` | Mode-specific rule directories | ### Global Rules -| Location | Description | -|----------|-------------| +| Location | Description | +| ------------------------ | ---------------------- | | `~/.kilocode/rules/*.md` | Global rules directory | ## File Mapping -| Kilocode Location | Opencode Equivalent | -|-------------------|---------------------| -| `.kilocoderules` | `instructions: [".kilocoderules"]` | -| `.kilocoderules-{mode}` | `instructions: [".kilocoderules-{mode}"]` | -| `.kilocode/rules/*.md` | `instructions: [".kilocode/rules/file.md", ...]` | +| Kilocode Location | Opencode Equivalent | +| ----------------------------- | ------------------------------------------------------- | +| `.kilocoderules` | `instructions: [".kilocoderules"]` | +| `.kilocoderules-{mode}` | `instructions: [".kilocoderules-{mode}"]` | +| `.kilocode/rules/*.md` | `instructions: [".kilocode/rules/file.md", ...]` | | `.kilocode/rules-{mode}/*.md` | `instructions: [".kilocode/rules-{mode}/file.md", ...]` | -| `~/.kilocode/rules/*.md` | `instructions: ["~/.kilocode/rules/file.md", ...]` | +| `~/.kilocode/rules/*.md` | `instructions: ["~/.kilocode/rules/file.md", ...]` | ## AGENTS.md Compatibility `AGENTS.md` is loaded **natively** by Opencode - no migration needed. Opencode automatically loads: + - `AGENTS.md` in project root - `CLAUDE.md` in project root - `~/.opencode/AGENTS.md` (global) @@ -70,6 +75,7 @@ The migrator reads rules from these locations: ## Not Migrated The following are **not** migrated: + - `.roorules` - Roo-specific rules - `.clinerules` - Cline-specific rules @@ -82,6 +88,7 @@ Mode-specific rules (e.g., `.kilocoderules-code`, `.kilocode/rules-architect/`) ## Warnings The migrator generates warnings for: + - **Legacy files**: When `.kilocoderules` is found, a warning suggests migrating to `.kilocode/rules/` directory structure ## Example diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json index a029d0ef0e..b99072b106 100644 --- a/packages/sdk/openapi.json +++ b/packages/sdk/openapi.json @@ -3876,6 +3876,252 @@ ] } }, + "/kilo/profile": { + "get": { + "operationId": "kilo.profile", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + } + ], + "summary": "Get Kilo Gateway profile", + "description": "Fetch user profile and organizations from Kilo Gateway", + "responses": { + "200": { + "description": "Profile data", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "profile": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organizations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "role": { + "type": "string" + } + }, + "required": ["id", "name", "role"] + } + } + }, + "required": ["email"] + }, + "balance": { + "anyOf": [ + { + "type": "object", + "properties": { + "balance": { + "type": "number" + } + }, + "required": ["balance"] + }, + { + "type": "null" + } + ] + }, + "currentOrgId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": ["profile", "balance", "currentOrgId"] + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.kilo.profile({\n ...\n})" + } + ] + } + }, + "/kilo/organization": { + "post": { + "operationId": "kilo.organization.set", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + } + ], + "summary": "Update Kilo Gateway organization", + "description": "Switch to a different Kilo Gateway organization", + "responses": { + "200": { + "description": "Organization updated successfully", + "content": { + "application/json": { + "schema": { + "type": "boolean" + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + } + }, + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "organizationId": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": ["organizationId"] + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.kilo.organization.set({\n ...\n})" + } + ] + } + }, + "/kilo/notifications": { + "get": { + "operationId": "kilo.notifications", + "parameters": [ + { + "in": "query", + "name": "directory", + "schema": { + "type": "string" + } + } + ], + "summary": "Get Kilo notifications", + "description": "Fetch notifications from Kilo Gateway for CLI display", + "responses": { + "200": { + "description": "Notifications list", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "title": { + "type": "string" + }, + "message": { + "type": "string" + }, + "action": { + "type": "object", + "properties": { + "actionText": { + "type": "string" + }, + "actionURL": { + "type": "string" + } + }, + "required": ["actionText", "actionURL"] + }, + "showIn": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": ["id", "title", "message"] + } + } + } + } + }, + "400": { + "description": "Bad request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/BadRequestError" + } + } + } + } + }, + "x-codeSamples": [ + { + "lang": "js", + "source": "import { createOpencodeClient } from \"@opencode-ai/sdk\n\nconst client = createOpencodeClient()\nawait client.kilo.notifications({\n ...\n})" + } + ] + } + }, "/find": { "get": { "operationId": "find.text", @@ -9823,7 +10069,8 @@ "type": "boolean" }, "openTelemetry": { - "description": "Enable OpenTelemetry spans for AI SDK calls (using the 'experimental_telemetry' flag)", + "description": "Enable telemetry. Set to false to opt-out.", + "default": true, "type": "boolean" }, "primary_tools": {