diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts
index 694addfaeec..e5ca0038a3e 100644
--- a/packages/app/src/i18n/de.ts
+++ b/packages/app/src/i18n/de.ts
@@ -577,8 +577,7 @@ export const dict = {
"settings.general.row.appearance.title": "Erscheinungsbild",
"settings.general.row.appearance.description": "Anpassen, wie Kilo auf Ihrem Gerät aussieht",
"settings.general.row.colorScheme.title": "Farbschema",
- "settings.general.row.colorScheme.description":
- "Wählen Sie, ob Kilo dem System-, hellen oder dunklen Thema folgt",
+ "settings.general.row.colorScheme.description": "Wählen Sie, ob Kilo dem System-, hellen oder dunklen Thema folgt",
"settings.general.row.theme.title": "Thema",
"settings.general.row.theme.description": "Das Thema von Kilo anpassen.",
"settings.general.row.font.title": "Code-Schriftart",
diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts
index 2bd6ea940e6..6204ce037a3 100644
--- a/packages/app/src/i18n/fr.ts
+++ b/packages/app/src/i18n/fr.ts
@@ -398,8 +398,7 @@ export const dict = {
"toast.session.unshare.failed.description": "Une erreur s'est produite lors de l'annulation du partage de la session",
"toast.session.listFailed.title": "Échec du chargement des sessions pour {{project}}",
"toast.update.title": "Mise à jour disponible",
- "toast.update.description":
- "Une nouvelle version d'Kilo ({{version}}) est maintenant disponible pour installation.",
+ "toast.update.description": "Une nouvelle version d'Kilo ({{version}}) est maintenant disponible pour installation.",
"toast.update.action.installRestart": "Installer et redémarrer",
"toast.update.action.notYet": "Pas encore",
"error.page.title": "Quelque chose s'est mal passé",
@@ -549,8 +548,7 @@ export const dict = {
"sidebar.workspaces.enable": "Activer les espaces de travail",
"sidebar.workspaces.disable": "Désactiver les espaces de travail",
"sidebar.gettingStarted.title": "Commencer",
- "sidebar.gettingStarted.line1":
- "Kilo inclut des modèles gratuits pour que vous puissiez commencer immédiatement.",
+ "sidebar.gettingStarted.line1": "Kilo inclut des modèles gratuits pour que vous puissiez commencer immédiatement.",
"sidebar.gettingStarted.line2":
"Connectez n'importe quel fournisseur pour utiliser des modèles, y compris Claude, GPT, Gemini etc.",
"sidebar.project.recentSessions": "Sessions récentes",
diff --git a/packages/app/src/i18n/th.ts b/packages/app/src/i18n/th.ts
index 4a6bffdcbb5..0c22707e639 100644
--- a/packages/app/src/i18n/th.ts
+++ b/packages/app/src/i18n/th.ts
@@ -149,8 +149,7 @@ export const dict = {
"provider.connect.oauth.code.invalid": "รหัสการอนุญาตไม่ถูกต้อง",
"provider.connect.oauth.auto.visit.prefix": "เยี่ยมชม ",
"provider.connect.oauth.auto.visit.link": "ลิงก์นี้",
- "provider.connect.oauth.auto.visit.suffix":
- " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo",
+ "provider.connect.oauth.auto.visit.suffix": " และป้อนรหัสด้านล่างเพื่อเชื่อมต่อบัญชีและใช้โมเดล {{provider}} ใน Kilo",
"provider.connect.oauth.auto.confirmationCode": "รหัสยืนยัน",
"provider.connect.toast.connected.title": "{{provider}} ที่เชื่อมต่อแล้ว",
"provider.connect.toast.connected.description": "โมเดล {{provider}} พร้อมใช้งานแล้ว",
diff --git a/packages/app/src/i18n/tr.ts b/packages/app/src/i18n/tr.ts
index f6abb762f5e..a49256cc13f 100644
--- a/packages/app/src/i18n/tr.ts
+++ b/packages/app/src/i18n/tr.ts
@@ -143,8 +143,7 @@ export const dict = {
"provider.connect.opencodeZen.visit.prefix": "",
"provider.connect.opencodeZen.visit.link": "opencode.ai/zen",
"provider.connect.opencodeZen.visit.suffix": " adresini ziyaret ederek API anahtarınızı alın.",
- "provider.connect.oauth.code.visit.prefix":
- "Hesabınızı bağlamak ve Kilo'da {{provider}} modellerini kullanmak için ",
+ "provider.connect.oauth.code.visit.prefix": "Hesabınızı bağlamak ve Kilo'da {{provider}} modellerini kullanmak için ",
"provider.connect.oauth.code.visit.link": "bu bağlantıya",
"provider.connect.oauth.code.visit.suffix": " tıklayarak yetkilendirme kodunuzu alın.",
"provider.connect.oauth.code.label": "{{method}} yetkilendirme kodu",
@@ -639,8 +638,7 @@ export const dict = {
"settings.general.row.appearance.title": "Görünüm",
"settings.general.row.appearance.description": "Kilo'un cihazınızdaki görünümünü özelleştirin",
"settings.general.row.colorScheme.title": "Renk şeması",
- "settings.general.row.colorScheme.description":
- "Kilo'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin",
+ "settings.general.row.colorScheme.description": "Kilo'un sistem, açık veya koyu temayı takip etip etmeyeceğini seçin",
"settings.general.row.theme.title": "Tema",
"settings.general.row.theme.description": "Kilo'un temasını özelleştirin.",
"settings.general.row.font.title": "Kod Yazı Tipi",
diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts
index dcd680c9b93..b405880a0c3 100644
--- a/packages/app/src/i18n/zht.ts
+++ b/packages/app/src/i18n/zht.ts
@@ -150,8 +150,7 @@ export const dict = {
"provider.connect.oauth.code.invalid": "授權碼無效",
"provider.connect.oauth.auto.visit.prefix": "造訪 ",
"provider.connect.oauth.auto.visit.link": "此連結",
- "provider.connect.oauth.auto.visit.suffix":
- " 並輸入以下程式碼,以連線你的帳戶並在 Kilo 中使用 {{provider}} 模型。",
+ "provider.connect.oauth.auto.visit.suffix": " 並輸入以下程式碼,以連線你的帳戶並在 Kilo 中使用 {{provider}} 模型。",
"provider.connect.oauth.auto.confirmationCode": "確認碼",
"provider.connect.toast.connected.title": "{{provider}} 已連線",
"provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。",
diff --git a/packages/app/src/pages/layout/sidebar-items.tsx b/packages/app/src/pages/layout/sidebar-items.tsx
index bc8bade3bcd..c9c5c05513f 100644
--- a/packages/app/src/pages/layout/sidebar-items.tsx
+++ b/packages/app/src/pages/layout/sidebar-items.tsx
@@ -42,9 +42,7 @@ export const ProjectIcon = (props: { project: LocalProject; class?: string; noti
extends Omit<
- PopoverProps,
- "style" | "children"
-> {
+export interface PopupSelectorProps
+ extends Omit, "style" | "children"> {
/** Whether the selector is in expanded mode (wider + taller). */
expanded: boolean
/** Preferred width when collapsed. Default: 250 */
diff --git a/packages/sdk/js/src/v2/gen/types.gen.ts b/packages/sdk/js/src/v2/gen/types.gen.ts
index d4204e7e5b1..1d162e963c9 100644
--- a/packages/sdk/js/src/v2/gen/types.gen.ts
+++ b/packages/sdk/js/src/v2/gen/types.gen.ts
@@ -33,6 +33,13 @@ export type EventProjectUpdated = {
properties: Project
}
+export type EventServerInstanceDisposed = {
+ type: "server.instance.disposed"
+ properties: {
+ directory: string
+ }
+}
+
export type EventInstallationUpdated = {
type: "installation.updated"
properties: {
@@ -47,13 +54,6 @@ export type EventInstallationUpdateAvailable = {
}
}
-export type EventServerInstanceDisposed = {
- type: "server.instance.disposed"
- properties: {
- directory: string
- }
-}
-
export type EventServerConnected = {
type: "server.connected"
properties: {
@@ -209,6 +209,21 @@ export type EventMessagePartDelta = {
}
}
+export type EventSessionTurnOpen = {
+ type: "session.turn.open"
+ properties: {
+ sessionID: string
+ }
+}
+
+export type EventSessionTurnClose = {
+ type: "session.turn.close"
+ properties: {
+ sessionID: string
+ reason: "completed" | "error" | "interrupted"
+ }
+}
+
export type PermissionRequest = {
id: string
sessionID: string
@@ -352,75 +367,6 @@ export type EventVcsBranchUpdated = {
}
}
-export type EventTuiPromptAppend = {
- type: "tui.prompt.append"
- properties: {
- text: string
- }
-}
-
-export type EventTuiCommandExecute = {
- type: "tui.command.execute"
- properties: {
- command:
- | "session.list"
- | "session.new"
- | "session.share"
- | "session.interrupt"
- | "session.compact"
- | "session.page.up"
- | "session.page.down"
- | "session.line.up"
- | "session.line.down"
- | "session.half.page.up"
- | "session.half.page.down"
- | "session.first"
- | "session.last"
- | "prompt.clear"
- | "prompt.submit"
- | "agent.cycle"
- | string
- }
-}
-
-export type EventTuiToastShow = {
- type: "tui.toast.show"
- properties: {
- title?: string
- message: string
- variant: "info" | "success" | "warning" | "error"
- /**
- * Duration in milliseconds
- */
- duration?: number
- }
-}
-
-export type EventTuiSessionSelect = {
- type: "tui.session.select"
- properties: {
- /**
- * Session ID to navigate to
- */
- sessionID: string
- }
-}
-
-export type EventMcpToolsChanged = {
- type: "mcp.tools.changed"
- properties: {
- server: string
- }
-}
-
-export type EventMcpBrowserOpenFailed = {
- type: "mcp.browser.open.failed"
- properties: {
- mcpName: string
- url: string
- }
-}
-
export type EventCommandExecuted = {
type: "command.executed"
properties: {
@@ -431,20 +377,6 @@ export type EventCommandExecuted = {
}
}
-export type EventWorkspaceReady = {
- type: "workspace.ready"
- properties: {
- name: string
- }
-}
-
-export type EventWorkspaceFailed = {
- type: "workspace.failed"
- properties: {
- message: string
- }
-}
-
export type QuestionOption = {
/**
* Display text (1-5 words, concise)
@@ -516,6 +448,29 @@ export type EventQuestionRejected = {
}
}
+export type Todo = {
+ /**
+ * Brief description of the task
+ */
+ content: string
+ /**
+ * Current status of the task: pending, in_progress, completed, cancelled
+ */
+ status: string
+ /**
+ * Priority level of the task: high, medium, low
+ */
+ priority: string
+}
+
+export type EventTodoUpdated = {
+ type: "todo.updated"
+ properties: {
+ sessionID: string
+ todos: Array
+ }
+}
+
export type SessionStatus =
| {
type: "idle"
@@ -529,6 +484,11 @@ export type SessionStatus =
| {
type: "busy"
}
+ | {
+ type: "offline"
+ requestID: string
+ message: string
+ }
export type EventSessionStatus = {
type: "session.status"
@@ -552,26 +512,25 @@ export type EventSessionCompacted = {
}
}
-export type Todo = {
- /**
- * Brief description of the task
- */
- content: string
- /**
- * Current status of the task: pending, in_progress, completed, cancelled
- */
- status: string
- /**
- * Priority level of the task: high, medium, low
- */
- priority: string
+export type EventKiloSessionsRemoteStatusChanged = {
+ type: "kilo-sessions.remote-status-changed"
+ properties: {
+ enabled: boolean
+ connected: boolean
+ }
}
-export type EventTodoUpdated = {
- type: "todo.updated"
+export type EventWorkspaceReady = {
+ type: "workspace.ready"
properties: {
- sessionID: string
- todos: Array
+ name: string
+ }
+}
+
+export type EventWorkspaceFailed = {
+ type: "workspace.failed"
+ properties: {
+ message: string
}
}
@@ -1090,22 +1049,14 @@ export type EventSessionDeleted = {
export type Event =
| EventProjectUpdated
+ | EventServerInstanceDisposed
| EventInstallationUpdated
| EventInstallationUpdateAvailable
- | EventServerInstanceDisposed
| EventServerConnected
| EventGlobalDisposed
| EventGlobalConfigUpdated
| EventLspClientDiagnostics
| EventLspUpdated
- | EventMessagePartDelta
- | EventPermissionAsked
- | EventPermissionReplied
- | EventSessionDiff
- | EventSessionError
- | EventFileEdited
- | EventFileWatcherUpdated
- | EventVcsBranchUpdated
| EventTuiPromptAppend
| EventTuiCommandExecute
| EventTuiToastShow
@@ -1117,29 +1068,26 @@ export type Event =
| EventSessionNetworkRejected
| EventSessionNetworkRestored
| EventMessagePartDelta
- | EventPermissionAsked
- | EventPermissionReplied
- | EventQuestionAsked
- | EventQuestionReplied
- | EventQuestionRejected
- | EventTodoUpdated
| EventSessionTurnOpen
| EventSessionTurnClose
- | EventSessionStatus
- | EventSessionIdle
- | EventSessionCompacted
+ | EventPermissionAsked
+ | EventPermissionReplied
+ | EventSessionDiff
+ | EventSessionError
| EventFileEdited
| EventFileWatcherUpdated
+ | EventVcsBranchUpdated
| EventCommandExecuted
- | EventWorkspaceReady
- | EventWorkspaceFailed
| EventQuestionAsked
| EventQuestionReplied
| EventQuestionRejected
+ | EventTodoUpdated
| EventSessionStatus
| EventSessionIdle
| EventSessionCompacted
- | EventTodoUpdated
+ | EventKiloSessionsRemoteStatusChanged
+ | EventWorkspaceReady
+ | EventWorkspaceFailed
| EventPtyCreated
| EventPtyUpdated
| EventPtyExited
@@ -1416,7 +1364,7 @@ export type ProviderConfig = {
*/
setCacheKey?: boolean
/**
- * Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.
+ * Timeout in milliseconds for requests to this provider. Default is 120000 (2 minutes). Set to false to disable timeout.
*/
timeout?: number | false
/**
@@ -1461,10 +1409,6 @@ export type ProviderConfig = {
input: Array<"text" | "audio" | "image" | "video" | "pdf">
output: Array<"text" | "audio" | "image" | "video" | "pdf">
}
- recommendedIndex?: number
- prompt?: "codex" | "gemini" | "beast" | "anthropic" | "trinity" | "anthropic_without_todo"
- isFree?: boolean
- ai_sdk_provider?: "anthropic" | "openai" | "openai-compatible" | "openrouter"
experimental?: boolean
status?: "alpha" | "beta" | "deprecated"
provider?: {
diff --git a/packages/sdk/openapi.json b/packages/sdk/openapi.json
index c33547ade07..3c128ea5c7e 100644
--- a/packages/sdk/openapi.json
+++ b/packages/sdk/openapi.json
@@ -4418,7 +4418,19 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AssistantMessage"
+ "type": "object",
+ "properties": {
+ "info": {
+ "$ref": "#/components/schemas/Message"
+ },
+ "parts": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Part"
+ }
+ }
+ },
+ "required": ["info", "parts"]
}
}
}
@@ -5267,225 +5279,7 @@
"all": {
"type": "array",
"items": {
- "type": "object",
- "properties": {
- "api": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "env": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "id": {
- "type": "string"
- },
- "npm": {
- "type": "string"
- },
- "models": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string"
- },
- "name": {
- "type": "string"
- },
- "family": {
- "type": "string"
- },
- "release_date": {
- "type": "string"
- },
- "attachment": {
- "type": "boolean"
- },
- "reasoning": {
- "type": "boolean"
- },
- "temperature": {
- "type": "boolean"
- },
- "tool_call": {
- "type": "boolean"
- },
- "interleaved": {
- "anyOf": [
- {
- "type": "boolean",
- "const": true
- },
- {
- "type": "object",
- "properties": {
- "field": {
- "type": "string",
- "enum": ["reasoning_content", "reasoning_details"]
- }
- },
- "required": ["field"],
- "additionalProperties": false
- }
- ]
- },
- "cost": {
- "type": "object",
- "properties": {
- "input": {
- "type": "number"
- },
- "output": {
- "type": "number"
- },
- "cache_read": {
- "type": "number"
- },
- "cache_write": {
- "type": "number"
- },
- "context_over_200k": {
- "type": "object",
- "properties": {
- "input": {
- "type": "number"
- },
- "output": {
- "type": "number"
- },
- "cache_read": {
- "type": "number"
- },
- "cache_write": {
- "type": "number"
- }
- },
- "required": ["input", "output"]
- }
- },
- "required": ["input", "output"]
- },
- "limit": {
- "type": "object",
- "properties": {
- "context": {
- "type": "number"
- },
- "input": {
- "type": "number"
- },
- "output": {
- "type": "number"
- }
- },
- "required": ["context", "output"]
- },
- "modalities": {
- "type": "object",
- "properties": {
- "input": {
- "type": "array",
- "items": {
- "type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
- }
- },
- "output": {
- "type": "array",
- "items": {
- "type": "string",
- "enum": ["text", "audio", "image", "video", "pdf"]
- }
- }
- },
- "required": ["input", "output"]
- },
- "recommendedIndex": {
- "type": "number"
- },
- "prompt": {
- "type": "string",
- "enum": ["codex", "gemini", "beast", "anthropic", "trinity", "anthropic_without_todo"]
- },
- "isFree": {
- "type": "boolean"
- },
- "ai_sdk_provider": {
- "type": "string",
- "enum": ["anthropic", "openai", "openai-compatible", "openrouter"]
- },
- "experimental": {
- "type": "boolean"
- },
- "status": {
- "type": "string",
- "enum": ["alpha", "beta", "deprecated"]
- },
- "options": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- },
- "headers": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "string"
- }
- },
- "provider": {
- "type": "object",
- "properties": {
- "npm": {
- "type": "string"
- },
- "api": {
- "type": "string"
- }
- }
- },
- "variants": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {
- "type": "object",
- "propertyNames": {
- "type": "string"
- },
- "additionalProperties": {}
- }
- }
- },
- "required": [
- "id",
- "name",
- "release_date",
- "attachment",
- "reasoning",
- "temperature",
- "tool_call",
- "limit",
- "options"
- ]
- }
- }
- },
- "required": ["name", "env", "id", "models"]
+ "$ref": "#/components/schemas/Provider"
}
},
"default": {
@@ -10407,6 +10201,25 @@
},
"required": ["type", "properties"]
},
+ "Event.server.instance.disposed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "server.instance.disposed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "directory": {
+ "type": "string"
+ }
+ },
+ "required": ["directory"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
"Event.installation.updated": {
"type": "object",
"properties": {
@@ -10445,25 +10258,6 @@
},
"required": ["type", "properties"]
},
- "Event.server.instance.disposed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "server.instance.disposed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "directory": {
- "type": "string"
- }
- },
- "required": ["directory"]
- }
- },
- "required": ["type", "properties"]
- },
"Event.server.connected": {
"type": "object",
"properties": {
@@ -10840,6 +10634,48 @@
},
"required": ["type", "properties"]
},
+ "Event.session.turn.open": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.turn.open"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.session.turn.close": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.turn.close"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string"
+ },
+ "reason": {
+ "type": "string",
+ "enum": ["completed", "error", "interrupted"]
+ }
+ },
+ "required": ["sessionID", "reason"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
"PermissionRequest": {
"type": "object",
"properties": {
@@ -10930,448 +10766,6 @@
},
"required": ["type", "properties"]
},
- "QuestionOption": {
- "type": "object",
- "properties": {
- "label": {
- "description": "Display text (1-5 words, concise)",
- "type": "string"
- },
- "description": {
- "description": "Explanation of choice",
- "type": "string"
- }
- },
- "required": ["label", "description"]
- },
- "QuestionInfo": {
- "type": "object",
- "properties": {
- "question": {
- "description": "Complete question",
- "type": "string"
- },
- "header": {
- "description": "Very short label (max 30 chars)",
- "type": "string"
- },
- "options": {
- "description": "Available choices",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/QuestionOption"
- }
- },
- "multiple": {
- "description": "Allow selecting multiple choices",
- "type": "boolean"
- },
- "custom": {
- "description": "Allow typing a custom answer (default: true)",
- "type": "boolean"
- }
- },
- "required": ["question", "header", "options"]
- },
- "QuestionRequest": {
- "type": "object",
- "properties": {
- "id": {
- "type": "string",
- "pattern": "^que.*"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "questions": {
- "description": "Questions to ask",
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/QuestionInfo"
- }
- },
- "tool": {
- "type": "object",
- "properties": {
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- },
- "callID": {
- "type": "string"
- }
- },
- "required": ["messageID", "callID"]
- }
- },
- "required": ["id", "sessionID", "questions"]
- },
- "Event.question.asked": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "question.asked"
- },
- "properties": {
- "$ref": "#/components/schemas/QuestionRequest"
- }
- },
- "required": ["type", "properties"]
- },
- "QuestionAnswer": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "Event.question.replied": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "question.replied"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "requestID": {
- "type": "string",
- "pattern": "^que.*"
- },
- "answers": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/QuestionAnswer"
- }
- }
- },
- "required": ["sessionID", "requestID", "answers"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.question.rejected": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "question.rejected"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "requestID": {
- "type": "string",
- "pattern": "^que.*"
- }
- },
- "required": ["sessionID", "requestID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Todo": {
- "type": "object",
- "properties": {
- "content": {
- "description": "Brief description of the task",
- "type": "string"
- },
- "status": {
- "description": "Current status of the task: pending, in_progress, completed, cancelled",
- "type": "string"
- },
- "priority": {
- "description": "Priority level of the task: high, medium, low",
- "type": "string"
- }
- },
- "required": ["content", "status", "priority"]
- },
- "Event.todo.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "todo.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "todos": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/Todo"
- }
- }
- },
- "required": ["sessionID", "todos"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.turn.open": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.turn.open"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.turn.close": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.turn.close"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string"
- },
- "reason": {
- "type": "string",
- "enum": ["completed", "error", "interrupted"]
- }
- },
- "required": ["sessionID", "reason"]
- }
- },
- "required": ["type", "properties"]
- },
- "SessionStatus": {
- "anyOf": [
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "idle"
- }
- },
- "required": ["type"]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "retry"
- },
- "attempt": {
- "type": "number"
- },
- "message": {
- "type": "string"
- },
- "next": {
- "type": "number"
- }
- },
- "required": ["type", "attempt", "message", "next"]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "busy"
- }
- },
- "required": ["type"]
- },
- {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "offline"
- },
- "requestID": {
- "type": "string"
- },
- "message": {
- "type": "string"
- }
- },
- "required": ["type", "requestID", "message"]
- }
- ]
- },
- "Event.session.status": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.status"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "status": {
- "$ref": "#/components/schemas/SessionStatus"
- }
- },
- "required": ["sessionID", "status"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.idle": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.idle"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.session.compacted": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "session.compacted"
- },
- "properties": {
- "type": "object",
- "properties": {
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- }
- },
- "required": ["sessionID"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.file.edited": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "file.edited"
- },
- "properties": {
- "type": "object",
- "properties": {
- "file": {
- "type": "string"
- }
- },
- "required": ["file"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.file.watcher.updated": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "file.watcher.updated"
- },
- "properties": {
- "type": "object",
- "properties": {
- "file": {
- "type": "string"
- },
- "event": {
- "anyOf": [
- {
- "type": "string",
- "const": "add"
- },
- {
- "type": "string",
- "const": "change"
- },
- {
- "type": "string",
- "const": "unlink"
- }
- ]
- }
- },
- "required": ["file", "event"]
- }
- },
- "required": ["type", "properties"]
- },
- "Event.command.executed": {
- "type": "object",
- "properties": {
- "type": {
- "type": "string",
- "const": "command.executed"
- },
- "properties": {
- "type": "object",
- "properties": {
- "name": {
- "type": "string"
- },
- "sessionID": {
- "type": "string",
- "pattern": "^ses.*"
- },
- "arguments": {
- "type": "string"
- },
- "messageID": {
- "type": "string",
- "pattern": "^msg.*"
- }
- },
- "required": ["name", "sessionID", "arguments", "messageID"]
- }
- },
- "required": ["type", "properties"]
- },
"SnapshotFileDiff": {
"type": "object",
"properties": {
@@ -11628,6 +11022,60 @@
},
"required": ["type", "properties"]
},
+ "Event.file.edited": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.edited"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ }
+ },
+ "required": ["file"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.file.watcher.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "file.watcher.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "file": {
+ "type": "string"
+ },
+ "event": {
+ "anyOf": [
+ {
+ "type": "string",
+ "const": "add"
+ },
+ {
+ "type": "string",
+ "const": "change"
+ },
+ {
+ "type": "string",
+ "const": "unlink"
+ }
+ ]
+ }
+ },
+ "required": ["file", "event"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
"Event.vcs.branch.updated": {
"type": "object",
"properties": {
@@ -11646,6 +11094,352 @@
},
"required": ["type", "properties"]
},
+ "Event.command.executed": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "command.executed"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "arguments": {
+ "type": "string"
+ },
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ }
+ },
+ "required": ["name", "sessionID", "arguments", "messageID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "QuestionOption": {
+ "type": "object",
+ "properties": {
+ "label": {
+ "description": "Display text (1-5 words, concise)",
+ "type": "string"
+ },
+ "description": {
+ "description": "Explanation of choice",
+ "type": "string"
+ }
+ },
+ "required": ["label", "description"]
+ },
+ "QuestionInfo": {
+ "type": "object",
+ "properties": {
+ "question": {
+ "description": "Complete question",
+ "type": "string"
+ },
+ "header": {
+ "description": "Very short label (max 30 chars)",
+ "type": "string"
+ },
+ "options": {
+ "description": "Available choices",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionOption"
+ }
+ },
+ "multiple": {
+ "description": "Allow selecting multiple choices",
+ "type": "boolean"
+ },
+ "custom": {
+ "description": "Allow typing a custom answer (default: true)",
+ "type": "boolean"
+ }
+ },
+ "required": ["question", "header", "options"]
+ },
+ "QuestionRequest": {
+ "type": "object",
+ "properties": {
+ "id": {
+ "type": "string",
+ "pattern": "^que.*"
+ },
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "questions": {
+ "description": "Questions to ask",
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionInfo"
+ }
+ },
+ "tool": {
+ "type": "object",
+ "properties": {
+ "messageID": {
+ "type": "string",
+ "pattern": "^msg.*"
+ },
+ "callID": {
+ "type": "string"
+ }
+ },
+ "required": ["messageID", "callID"]
+ }
+ },
+ "required": ["id", "sessionID", "questions"]
+ },
+ "Event.question.asked": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.asked"
+ },
+ "properties": {
+ "$ref": "#/components/schemas/QuestionRequest"
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "QuestionAnswer": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "Event.question.replied": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.replied"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "requestID": {
+ "type": "string",
+ "pattern": "^que.*"
+ },
+ "answers": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/QuestionAnswer"
+ }
+ }
+ },
+ "required": ["sessionID", "requestID", "answers"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.question.rejected": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "question.rejected"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "requestID": {
+ "type": "string",
+ "pattern": "^que.*"
+ }
+ },
+ "required": ["sessionID", "requestID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Todo": {
+ "type": "object",
+ "properties": {
+ "content": {
+ "description": "Brief description of the task",
+ "type": "string"
+ },
+ "status": {
+ "description": "Current status of the task: pending, in_progress, completed, cancelled",
+ "type": "string"
+ },
+ "priority": {
+ "description": "Priority level of the task: high, medium, low",
+ "type": "string"
+ }
+ },
+ "required": ["content", "status", "priority"]
+ },
+ "Event.todo.updated": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "todo.updated"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "todos": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Todo"
+ }
+ }
+ },
+ "required": ["sessionID", "todos"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "SessionStatus": {
+ "anyOf": [
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "idle"
+ }
+ },
+ "required": ["type"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "retry"
+ },
+ "attempt": {
+ "type": "number"
+ },
+ "message": {
+ "type": "string"
+ },
+ "next": {
+ "type": "number"
+ }
+ },
+ "required": ["type", "attempt", "message", "next"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "busy"
+ }
+ },
+ "required": ["type"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "offline"
+ },
+ "requestID": {
+ "type": "string"
+ },
+ "message": {
+ "type": "string"
+ }
+ },
+ "required": ["type", "requestID", "message"]
+ }
+ ]
+ },
+ "Event.session.status": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.status"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ },
+ "status": {
+ "$ref": "#/components/schemas/SessionStatus"
+ }
+ },
+ "required": ["sessionID", "status"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.session.idle": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.idle"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
+ "Event.session.compacted": {
+ "type": "object",
+ "properties": {
+ "type": {
+ "type": "string",
+ "const": "session.compacted"
+ },
+ "properties": {
+ "type": "object",
+ "properties": {
+ "sessionID": {
+ "type": "string",
+ "pattern": "^ses.*"
+ }
+ },
+ "required": ["sessionID"]
+ }
+ },
+ "required": ["type", "properties"]
+ },
"Event.kilo-sessions.remote-status-changed": {
"type": "object",
"properties": {
@@ -13265,15 +13059,15 @@
{
"$ref": "#/components/schemas/Event.project.updated"
},
+ {
+ "$ref": "#/components/schemas/Event.server.instance.disposed"
+ },
{
"$ref": "#/components/schemas/Event.installation.updated"
},
{
"$ref": "#/components/schemas/Event.installation.update-available"
},
- {
- "$ref": "#/components/schemas/Event.server.instance.disposed"
- },
{
"$ref": "#/components/schemas/Event.server.connected"
},
@@ -13322,12 +13116,36 @@
{
"$ref": "#/components/schemas/Event.message.part.delta"
},
+ {
+ "$ref": "#/components/schemas/Event.session.turn.open"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.turn.close"
+ },
{
"$ref": "#/components/schemas/Event.permission.asked"
},
{
"$ref": "#/components/schemas/Event.permission.replied"
},
+ {
+ "$ref": "#/components/schemas/Event.session.diff"
+ },
+ {
+ "$ref": "#/components/schemas/Event.session.error"
+ },
+ {
+ "$ref": "#/components/schemas/Event.file.edited"
+ },
+ {
+ "$ref": "#/components/schemas/Event.file.watcher.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.vcs.branch.updated"
+ },
+ {
+ "$ref": "#/components/schemas/Event.command.executed"
+ },
{
"$ref": "#/components/schemas/Event.question.asked"
},
@@ -13340,12 +13158,6 @@
{
"$ref": "#/components/schemas/Event.todo.updated"
},
- {
- "$ref": "#/components/schemas/Event.session.turn.open"
- },
- {
- "$ref": "#/components/schemas/Event.session.turn.close"
- },
{
"$ref": "#/components/schemas/Event.session.status"
},
@@ -13355,24 +13167,6 @@
{
"$ref": "#/components/schemas/Event.session.compacted"
},
- {
- "$ref": "#/components/schemas/Event.file.edited"
- },
- {
- "$ref": "#/components/schemas/Event.file.watcher.updated"
- },
- {
- "$ref": "#/components/schemas/Event.command.executed"
- },
- {
- "$ref": "#/components/schemas/Event.session.diff"
- },
- {
- "$ref": "#/components/schemas/Event.session.error"
- },
- {
- "$ref": "#/components/schemas/Event.vcs.branch.updated"
- },
{
"$ref": "#/components/schemas/Event.kilo-sessions.remote-status-changed"
},
@@ -14129,6 +13923,60 @@
"npm": {
"type": "string"
},
+ "whitelist": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "blacklist": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "options": {
+ "type": "object",
+ "properties": {
+ "apiKey": {
+ "type": "string"
+ },
+ "baseURL": {
+ "type": "string"
+ },
+ "enterpriseUrl": {
+ "description": "GitHub Enterprise URL for copilot authentication",
+ "type": "string"
+ },
+ "setCacheKey": {
+ "description": "Enable promptCacheKey for this provider (default false)",
+ "type": "boolean"
+ },
+ "timeout": {
+ "description": "Timeout in milliseconds for requests to this provider. Default is 120000 (2 minutes). Set to false to disable timeout.",
+ "anyOf": [
+ {
+ "description": "Timeout in milliseconds for requests to this provider. Default is 120000 (2 minutes). Set to false to disable timeout.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ },
+ {
+ "description": "Disable timeout for this provider entirely.",
+ "type": "boolean",
+ "const": false
+ }
+ ]
+ },
+ "chunkTimeout": {
+ "description": "Timeout in milliseconds between streamed SSE chunks for this provider. If no chunk arrives within this window, the request is aborted.",
+ "type": "integer",
+ "exclusiveMinimum": 0,
+ "maximum": 9007199254740991
+ }
+ },
+ "additionalProperties": {}
+ },
"models": {
"type": "object",
"propertyNames": {
@@ -14251,20 +14099,6 @@
},
"required": ["input", "output"]
},
- "recommendedIndex": {
- "type": "number"
- },
- "prompt": {
- "type": "string",
- "enum": ["codex", "gemini", "beast", "anthropic", "trinity", "anthropic_without_todo"]
- },
- "isFree": {
- "type": "boolean"
- },
- "ai_sdk_provider": {
- "type": "string",
- "enum": ["anthropic", "openai", "openai-compatible", "openrouter"]
- },
"experimental": {
"type": "boolean"
},
@@ -14272,6 +14106,17 @@
"type": "string",
"enum": ["alpha", "beta", "deprecated"]
},
+ "provider": {
+ "type": "object",
+ "properties": {
+ "npm": {
+ "type": "string"
+ },
+ "api": {
+ "type": "string"
+ }
+ }
+ },
"options": {
"type": "object",
"propertyNames": {
@@ -14288,17 +14133,6 @@
"type": "string"
}
},
- "provider": {
- "type": "object",
- "properties": {
- "npm": {
- "type": "string"
- },
- "api": {
- "type": "string"
- }
- }
- },
"variants": {
"description": "Variant-specific configuration",
"type": "object",
@@ -14318,60 +14152,6 @@
}
}
}
- },
- "whitelist": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "blacklist": {
- "type": "array",
- "items": {
- "type": "string"
- }
- },
- "options": {
- "type": "object",
- "properties": {
- "apiKey": {
- "type": "string"
- },
- "baseURL": {
- "type": "string"
- },
- "enterpriseUrl": {
- "description": "GitHub Enterprise URL for copilot authentication",
- "type": "string"
- },
- "setCacheKey": {
- "description": "Enable promptCacheKey for this provider (default false)",
- "type": "boolean"
- },
- "timeout": {
- "description": "Timeout in milliseconds for requests to this provider. Default is 120000 (2 minutes). Set to false to disable timeout.",
- "anyOf": [
- {
- "description": "Timeout in milliseconds for requests to this provider. Default is 120000 (2 minutes). Set to false to disable timeout.",
- "type": "integer",
- "exclusiveMinimum": 0,
- "maximum": 9007199254740991
- },
- {
- "description": "Disable timeout for this provider entirely.",
- "type": "boolean",
- "const": false
- }
- ]
- },
- "chunkTimeout": {
- "description": "Timeout in milliseconds between streamed SSE chunks for this provider. If no chunk arrives within this window, the request is aborted.",
- "type": "integer",
- "exclusiveMinimum": 0,
- "maximum": 9007199254740991
- }
- },
- "additionalProperties": {}
}
},
"additionalProperties": false
@@ -14429,6 +14209,10 @@
"scope": {
"description": "OAuth scopes to request during authorization",
"type": "string"
+ },
+ "redirectUri": {
+ "description": "OAuth redirect URI (default: http://127.0.0.1:19876/mcp/oauth/callback).",
+ "type": "string"
}
},
"additionalProperties": false
diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx
index 0ef1c90ed02..63542d48e5b 100644
--- a/packages/ui/src/components/message-part.tsx
+++ b/packages/ui/src/components/message-part.tsx
@@ -2144,7 +2144,7 @@ ToolRegistry.register({
-
+