Merge branch 'main' into kirillk/dogfood

This commit is contained in:
Kirill Kalishev
2026-03-13 12:38:26 -04:00
committed by GitHub
24 changed files with 115 additions and 39 deletions
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:ed36de43a103f21512a259403f510d3b2918d0e05e9bdf141b3507f667094d24
size 15182
oid sha256:766f60460f5a405cbca27100d0679d3b088ff864e59b8ac9247ba19ca66f6826
size 15331
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:012356280751a224b15241fcfe1fe5d6cde3763540e5b6ea15b010843b13ee52
size 16829
oid sha256:7024b3bb96ecbe58489218a1066e81bdb7263521d2d94e50d5ad2ace770c7546
size 16953
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:901e8ef17097c7dc40c3d970d8e0000455aacc791647ecc5d425e2ffd1eab565
size 16347
oid sha256:75f083122d0707dd289f0466d2646789d285d302bb86fe05a5bc7a9a0a4f3301
size 16516
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3c3a1e0f87d27b78730155bc1fba0159b46e66df45e18bcd619e4787583d65cc
size 19400
oid sha256:81302ab3139c598604e009220347c9955e845f36ce739189a2dcab33c9281ab4
size 19370
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cb189525f58aa19640b4c9436073d25267a183c825acf3464bc018a42f997e0d
size 19175
oid sha256:82c90a5f1cb077a08bc30457d2426a6869c3acf883b64c2ba381c4307ac4de35
size 19263
@@ -12,6 +12,7 @@ import { Component, For, Show, createSignal } from "solid-js"
import { Button } from "@kilocode/kilo-ui/button"
import { DockPrompt } from "@kilocode/kilo-ui/dock-prompt"
import { Icon } from "@kilocode/kilo-ui/icon"
import { Tooltip } from "@kilocode/kilo-ui/tooltip"
import { useSession } from "../../context/session"
import { useLanguage } from "../../context/language"
import type { PermissionRequest } from "../../types/messages"
@@ -35,6 +36,8 @@ export const PermissionDock: Component<{
const [decisions, setDecisions] = createSignal<Record<number, PatternDecision>>({})
const hasDeniedPatterns = () => Object.values(decisions()).some((d) => d === "denied")
const collectPatterns = () => {
const all = patterns()
const approved: string[] = []
@@ -63,6 +66,16 @@ export const PermissionDock: Component<{
const decision = (index: number): PatternDecision => decisions()[index] ?? "pending"
const approveTooltip = (index: number) =>
decision(index) === "approved"
? language.t("ui.permission.pattern.removeFromAllowed")
: language.t("ui.permission.pattern.addToAllowed")
const denyTooltip = (index: number) =>
decision(index) === "denied"
? language.t("ui.permission.pattern.removeFromDenied")
: language.t("ui.permission.pattern.addToDenied")
const toolDescription = () => {
const key = `settings.permissions.tool.${props.request.toolName}.description`
const value = language.t(key as Parameters<typeof language.t>[0])
@@ -108,7 +121,7 @@ export const PermissionDock: Component<{
const { approved, denied } = collectPatterns()
props.onDecide("always", approved, denied)
}}
disabled={props.responding}
disabled={props.responding || hasDeniedPatterns()}
>
{language.t("ui.permission.allowAlways")}
</Button>
@@ -153,26 +166,30 @@ export const PermissionDock: Component<{
<span data-slot="permission-pattern-type">{props.request.toolName}</span>
<code data-slot="permission-pattern">{pattern}</code>
<div data-slot="permission-pattern-actions">
<button
data-slot="permission-pattern-toggle"
data-variant="approve"
data-active={decision(index()) === "approved" ? "" : undefined}
disabled={props.responding}
onClick={() => togglePattern(index(), "approved")}
aria-label={language.t("ui.permission.allowAlways")}
>
<Icon name="check-small" size="small" />
</button>
<button
data-slot="permission-pattern-toggle"
data-variant="deny"
data-active={decision(index()) === "denied" ? "" : undefined}
disabled={props.responding}
onClick={() => togglePattern(index(), "denied")}
aria-label={language.t("ui.permission.deny")}
>
<Icon name="close-small" size="small" />
</button>
<Tooltip value={approveTooltip(index())} placement="top">
<button
data-slot="permission-pattern-toggle"
data-variant="approve"
data-active={decision(index()) === "approved" ? "" : undefined}
disabled={props.responding}
onClick={() => togglePattern(index(), "approved")}
aria-label={approveTooltip(index())}
>
<Icon name="check-small" size="small" />
</button>
</Tooltip>
<Tooltip value={denyTooltip(index())} placement="top">
<button
data-slot="permission-pattern-toggle"
data-variant="deny"
data-active={decision(index()) === "denied" ? "" : undefined}
disabled={props.responding}
onClick={() => togglePattern(index(), "denied")}
aria-label={denyTooltip(index())}
>
<Icon name="close-small" size="small" />
</button>
</Tooltip>
</div>
</div>
)}
@@ -440,6 +440,10 @@ export const dict = {
"notification.permission.title": "مطلوب إذن",
"notification.permission.description": "{{sessionTitle}} في {{projectName}} يحتاج إلى إذن",
"ui.permission.pattern.addToAllowed": "أضف إلى قائمة المسموح",
"ui.permission.pattern.removeFromAllowed": "أزل من قائمة المسموح",
"ui.permission.pattern.addToDenied": "أضف إلى قائمة المرفوض",
"ui.permission.pattern.removeFromDenied": "أزل من قائمة المرفوض",
"notification.question.title": "سؤال",
"notification.question.description": "{{sessionTitle}} في {{projectName}} لديه سؤال",
"notification.action.goToSession": "انتقل إلى الجلسة",
@@ -442,6 +442,10 @@ export const dict = {
"notification.permission.title": "Permissão necessária",
"notification.permission.description": "{{sessionTitle}} em {{projectName}} precisa de permissão",
"ui.permission.pattern.addToAllowed": "Adicionar à lista de permitidos",
"ui.permission.pattern.removeFromAllowed": "Remover da lista de permitidos",
"ui.permission.pattern.addToDenied": "Adicionar à lista de negados",
"ui.permission.pattern.removeFromDenied": "Remover da lista de negados",
"notification.question.title": "Pergunta",
"notification.question.description": "{{sessionTitle}} em {{projectName}} tem uma pergunta",
"notification.action.goToSession": "Ir para sessão",
@@ -446,6 +446,10 @@ export const dict = {
"notification.permission.title": "Potrebna dozvola",
"notification.permission.description": "{{sessionTitle}} u {{projectName}} traži dozvolu",
"ui.permission.pattern.addToAllowed": "Dodaj na listu dozvoljenih",
"ui.permission.pattern.removeFromAllowed": "Ukloni sa liste dozvoljenih",
"ui.permission.pattern.addToDenied": "Dodaj na listu odbijenih",
"ui.permission.pattern.removeFromDenied": "Ukloni sa liste odbijenih",
"notification.question.title": "Pitanje",
"notification.question.description": "{{sessionTitle}} u {{projectName}} ima pitanje",
"notification.action.goToSession": "Idi na sesiju",
@@ -443,6 +443,10 @@ export const dict = {
"notification.permission.title": "Tilladelse påkrævet",
"notification.permission.description": "{{sessionTitle}} i {{projectName}} kræver tilladelse",
"ui.permission.pattern.addToAllowed": "Tilføj til tilladelseslisten",
"ui.permission.pattern.removeFromAllowed": "Fjern fra tilladelseslisten",
"ui.permission.pattern.addToDenied": "Tilføj til afvisningslisten",
"ui.permission.pattern.removeFromDenied": "Fjern fra afvisningslisten",
"notification.question.title": "Spørgsmål",
"notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørgsmål",
"notification.action.goToSession": "Gå til session",
@@ -450,6 +450,10 @@ export const dict = {
"notification.permission.title": "Berechtigung erforderlich",
"notification.permission.description": "{{sessionTitle}} in {{projectName}} benötigt Berechtigung",
"ui.permission.pattern.addToAllowed": "Zur Erlaubt-Liste hinzufügen",
"ui.permission.pattern.removeFromAllowed": "Aus der Erlaubt-Liste entfernen",
"ui.permission.pattern.addToDenied": "Zur Verweigert-Liste hinzufügen",
"ui.permission.pattern.removeFromDenied": "Aus der Verweigert-Liste entfernen",
"notification.question.title": "Frage",
"notification.question.description": "{{sessionTitle}} in {{projectName}} hat eine Frage",
"notification.action.goToSession": "Zur Sitzung gehen",
@@ -445,6 +445,10 @@ export const dict = {
"notification.permission.title": "Permission required",
"notification.permission.description": "{{sessionTitle}} in {{projectName}} needs permission",
"ui.permission.pattern.addToAllowed": "Add to allowed list",
"ui.permission.pattern.removeFromAllowed": "Remove from allowed list",
"ui.permission.pattern.addToDenied": "Add to denied list",
"ui.permission.pattern.removeFromDenied": "Remove from denied list",
"notification.question.title": "Question",
"notification.question.description": "{{sessionTitle}} in {{projectName}} has a question",
"notification.action.goToSession": "Go to session",
@@ -445,6 +445,10 @@ export const dict = {
"notification.permission.title": "Permiso requerido",
"notification.permission.description": "{{sessionTitle}} en {{projectName}} necesita permiso",
"ui.permission.pattern.addToAllowed": "Añadir a la lista de permitidos",
"ui.permission.pattern.removeFromAllowed": "Quitar de la lista de permitidos",
"ui.permission.pattern.addToDenied": "Añadir a la lista de denegados",
"ui.permission.pattern.removeFromDenied": "Quitar de la lista de denegados",
"notification.question.title": "Pregunta",
"notification.question.description": "{{sessionTitle}} en {{projectName}} tiene una pregunta",
"notification.action.goToSession": "Ir a sesión",
@@ -450,6 +450,10 @@ export const dict = {
"notification.permission.title": "Permission requise",
"notification.permission.description": "{{sessionTitle}} dans {{projectName}} a besoin d'une permission",
"ui.permission.pattern.addToAllowed": "Ajouter à la liste des autorisés",
"ui.permission.pattern.removeFromAllowed": "Retirer de la liste des autorisés",
"ui.permission.pattern.addToDenied": "Ajouter à la liste des refusés",
"ui.permission.pattern.removeFromDenied": "Retirer de la liste des refusés",
"notification.question.title": "Question",
"notification.question.description": "{{sessionTitle}} dans {{projectName}} a une question",
"notification.action.goToSession": "Aller à la session",
@@ -441,6 +441,10 @@ export const dict = {
"notification.permission.title": "権限が必要です",
"notification.permission.description": "{{projectName}} の {{sessionTitle}} が権限を必要としています",
"ui.permission.pattern.addToAllowed": "許可リストに追加",
"ui.permission.pattern.removeFromAllowed": "許可リストから削除",
"ui.permission.pattern.addToDenied": "拒否リストに追加",
"ui.permission.pattern.removeFromDenied": "拒否リストから削除",
"notification.question.title": "質問",
"notification.question.description": "{{projectName}} の {{sessionTitle}} から質問があります",
"notification.action.goToSession": "セッションへ移動",
@@ -444,6 +444,10 @@ export const dict = {
"notification.permission.title": "권한 필요",
"notification.permission.description": "{{projectName}}의 {{sessionTitle}}에서 권한이 필요합니다",
"ui.permission.pattern.addToAllowed": "허용 목록에 추가",
"ui.permission.pattern.removeFromAllowed": "허용 목록에서 제거",
"ui.permission.pattern.addToDenied": "거부 목록에 추가",
"ui.permission.pattern.removeFromDenied": "거부 목록에서 제거",
"notification.question.title": "질문",
"notification.question.description": "{{projectName}}의 {{sessionTitle}}에서 질문이 있습니다",
"notification.action.goToSession": "세션으로 이동",
@@ -445,6 +445,10 @@ export const dict = {
"notification.permission.title": "Tillatelse påkrevd",
"notification.permission.description": "{{sessionTitle}} i {{projectName}} trenger tillatelse",
"ui.permission.pattern.addToAllowed": "Legg til i tillatt-listen",
"ui.permission.pattern.removeFromAllowed": "Fjern fra tillatt-listen",
"ui.permission.pattern.addToDenied": "Legg til i blokkert-listen",
"ui.permission.pattern.removeFromDenied": "Fjern fra blokkert-listen",
"notification.question.title": "Spørsmål",
"notification.question.description": "{{sessionTitle}} i {{projectName}} har et spørsmål",
"notification.action.goToSession": "Gå til sesjon",
@@ -444,6 +444,10 @@ export const dict = {
"notification.permission.title": "Wymagane uprawnienie",
"notification.permission.description": "{{sessionTitle}} w {{projectName}} potrzebuje uprawnienia",
"ui.permission.pattern.addToAllowed": "Dodaj do listy dozwolonych",
"ui.permission.pattern.removeFromAllowed": "Usuń z listy dozwolonych",
"ui.permission.pattern.addToDenied": "Dodaj do listy zablokowanych",
"ui.permission.pattern.removeFromDenied": "Usuń z listy zablokowanych",
"notification.question.title": "Pytanie",
"notification.question.description": "{{sessionTitle}} w {{projectName}} ma pytanie",
"notification.action.goToSession": "Przejdź do sesji",
@@ -446,6 +446,10 @@ export const dict = {
"notification.permission.title": "Требуется разрешение",
"notification.permission.description": "{{sessionTitle}} в {{projectName}} требуется разрешение",
"ui.permission.pattern.addToAllowed": "Добавить в список разрешённых",
"ui.permission.pattern.removeFromAllowed": "Убрать из списка разрешённых",
"ui.permission.pattern.addToDenied": "Добавить в список запрещённых",
"ui.permission.pattern.removeFromDenied": "Убрать из списка запрещённых",
"notification.question.title": "Вопрос",
"notification.question.description": "У {{sessionTitle}} в {{projectName}} есть вопрос",
"notification.action.goToSession": "Перейти к сессии",
@@ -441,6 +441,10 @@ export const dict = {
"notification.permission.title": "ต้องการสิทธิ์",
"notification.permission.description": "{{sessionTitle}} ใน {{projectName}} ต้องการสิทธิ์",
"ui.permission.pattern.addToAllowed": "เพิ่มไปยังรายการที่อนุญาต",
"ui.permission.pattern.removeFromAllowed": "นำออกจากรายการที่อนุญาต",
"ui.permission.pattern.addToDenied": "เพิ่มไปยังรายการที่ถูกปฏิเสธ",
"ui.permission.pattern.removeFromDenied": "นำออกจากรายการที่ถูกปฏิเสธ",
"notification.question.title": "คำถาม",
"notification.question.description": "{{sessionTitle}} ใน {{projectName}} มีคำถาม",
"notification.action.goToSession": "ไปที่เซสชัน",
@@ -437,6 +437,10 @@ export const dict = {
"notification.permission.title": "需要权限",
"notification.permission.description": "{{sessionTitle}}({{projectName}})需要权限",
"ui.permission.pattern.addToAllowed": "添加到允许列表",
"ui.permission.pattern.removeFromAllowed": "从允许列表移除",
"ui.permission.pattern.addToDenied": "添加到拒绝列表",
"ui.permission.pattern.removeFromDenied": "从拒绝列表移除",
"notification.question.title": "问题",
"notification.question.description": "{{sessionTitle}}({{projectName}})有一个问题",
"notification.action.goToSession": "前往会话",
@@ -438,6 +438,10 @@ export const dict = {
"notification.permission.title": "需要權限",
"notification.permission.description": "{{sessionTitle}}({{projectName}})需要權限",
"ui.permission.pattern.addToAllowed": "加入允許清單",
"ui.permission.pattern.removeFromAllowed": "從允許清單移除",
"ui.permission.pattern.addToDenied": "加入拒絕清單",
"ui.permission.pattern.removeFromDenied": "從拒絕清單移除",
"notification.question.title": "問題",
"notification.question.description": "{{sessionTitle}}({{projectName}})有一個問題",
"notification.action.goToSession": "前往工作階段",
@@ -1167,9 +1167,10 @@
[data-component="dock-prompt"][data-kind="permission"] {
animation: permission-slide-in 0.3s ease-out;
margin: 12px;
border: 1px solid
color-mix(in srgb, var(--vscode-editorWarning-foreground, #cca700) 40%, var(--vscode-panel-border, transparent));
border-radius: 8px;
border-radius: 0.25rem;
overflow: clip;
[data-dock-surface="shell"] {
@@ -1183,11 +1184,6 @@
margin-top: 0;
}
[data-slot="permission-body"] {
padding: 10px 12px 0;
gap: 8px;
}
[data-slot="permission-header-title"] {
font-size: 13px;
display: flex;
@@ -54,8 +54,7 @@ export const PermissionRoutes = lazy(() =>
"/:requestID/pattern-rules",
describeRoute({
summary: "Save per-pattern permission rules",
description:
"Save approved/denied patterns for a pending permission request.",
description: "Save approved/denied patterns for a pending permission request.",
operationId: "permission.savePatternRules",
responses: {
200: {