diff --git a/packages/ui/src/components/message-part.css b/packages/ui/src/components/message-part.css index 58227f62597c..9a4ebaec67d7 100644 --- a/packages/ui/src/components/message-part.css +++ b/packages/ui/src/components/message-part.css @@ -225,13 +225,35 @@ } } +[data-component="reasoning-part-trigger"] { + width: 100%; + min-height: 24px; + display: flex; + align-items: center; + justify-content: flex-start; + gap: 0px; + cursor: pointer; + + [data-slot="reasoning-part-label"] { + font-family: var(--font-family-sans); + font-size: 14px; + font-weight: var(--font-weight-medium); + line-height: var(--line-height-large); + color: var(--text-strong); + } + + [data-slot="collapsible-arrow"] { + color: var(--icon-weaker); + } +} + [data-component="reasoning-part"] { width: 100%; color: var(--text-base); line-height: var(--line-height-normal); [data-component="markdown"] { - margin-top: 24px; + margin-top: 4px; font-style: normal; font-size: inherit; color: var(--text-weak); diff --git a/packages/ui/src/components/message-part.tsx b/packages/ui/src/components/message-part.tsx index 6b6dfe2e50ec..7a78f69aa257 100644 --- a/packages/ui/src/components/message-part.tsx +++ b/packages/ui/src/components/message-part.tsx @@ -102,6 +102,7 @@ export interface MessagePartProps { defaultOpen?: boolean showAssistantCopyPartID?: string | null turnDurationMs?: number + working?: boolean } export type PartComponent = Component @@ -391,6 +392,7 @@ export function AssistantParts(props: { showAssistantCopyPartID={props.showAssistantCopyPartID} turnDurationMs={props.turnDurationMs} defaultOpen={partDefaultOpen(entry().part, props.shellToolDefaultOpen, props.editToolDefaultOpen)} + working={props.working && tail()} /> )} @@ -886,6 +888,7 @@ export function Part(props: MessagePartProps) { defaultOpen={props.defaultOpen} showAssistantCopyPartID={props.showAssistantCopyPartID} turnDurationMs={props.turnDurationMs} + working={props.working} /> ) @@ -1142,15 +1145,31 @@ PART_MAPPING["text"] = function TextPartDisplay(props) { } PART_MAPPING["reasoning"] = function ReasoningPartDisplay(props) { + const i18n = useI18n() const part = props.part as ReasoningPart const text = () => part.text.trim() const throttledText = createThrottledValue(text) + const [open, setOpen] = createSignal(true) return ( -
- -
+ + +
+ + + + + + +
+
+ +
+ +
+
+
) } diff --git a/packages/ui/src/i18n/ar.ts b/packages/ui/src/i18n/ar.ts index 4eb1b4755675..151071ef7fae 100644 --- a/packages/ui/src/i18n/ar.ts +++ b/packages/ui/src/i18n/ar.ts @@ -55,6 +55,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "تفكير - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "جمع الأفكار", "ui.sessionTurn.status.consideringNextSteps": "النظر في الخطوات التالية", + "ui.sessionTurn.status.reasoning": "التفكير", + "ui.sessionTurn.status.reasoningSummary": "ملخّص التفكير", "ui.messagePart.questions.dismissed": "تم رفض الأسئلة", "ui.messagePart.context.read.one": "{{count}} قراءة", diff --git a/packages/ui/src/i18n/br.ts b/packages/ui/src/i18n/br.ts index a2c3fb642c0c..801ff6f0629b 100644 --- a/packages/ui/src/i18n/br.ts +++ b/packages/ui/src/i18n/br.ts @@ -55,6 +55,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Organizando pensamentos", "ui.sessionTurn.status.consideringNextSteps": "Considerando próximos passos", + "ui.sessionTurn.status.reasoning": "Raciocínio", + "ui.sessionTurn.status.reasoningSummary": "Resumo do Raciocínio", "ui.messagePart.questions.dismissed": "Perguntas descartadas", "ui.messagePart.context.read.one": "{{count}} leitura", diff --git a/packages/ui/src/i18n/bs.ts b/packages/ui/src/i18n/bs.ts index c75e158ba3bf..b44b79de8b11 100644 --- a/packages/ui/src/i18n/bs.ts +++ b/packages/ui/src/i18n/bs.ts @@ -59,6 +59,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Razmišljanje - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Sređivanje misli", "ui.sessionTurn.status.consideringNextSteps": "Razmatranje sljedećih koraka", + "ui.sessionTurn.status.reasoning": "Razmišljanje", + "ui.sessionTurn.status.reasoningSummary": "Sažetak Razmišljanja", "ui.messagePart.questions.dismissed": "Pitanja odbačena", "ui.messagePart.context.read.one": "{{count}} čitanje", diff --git a/packages/ui/src/i18n/da.ts b/packages/ui/src/i18n/da.ts index 59c18e8e92f0..1c14aaf6b9e6 100644 --- a/packages/ui/src/i18n/da.ts +++ b/packages/ui/src/i18n/da.ts @@ -54,6 +54,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Tænker - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", "ui.sessionTurn.status.consideringNextSteps": "Overvejer næste skridt", + "ui.sessionTurn.status.reasoning": "Ræsonnering", + "ui.sessionTurn.status.reasoningSummary": "Ræsonnerings Oversigt", "ui.messagePart.questions.dismissed": "Spørgsmål afvist", "ui.messagePart.context.read.one": "{{count}} læsning", diff --git a/packages/ui/src/i18n/de.ts b/packages/ui/src/i18n/de.ts index b3fb610615d3..1b76ed215813 100644 --- a/packages/ui/src/i18n/de.ts +++ b/packages/ui/src/i18n/de.ts @@ -60,6 +60,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Denken - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Gedanken sammeln", "ui.sessionTurn.status.consideringNextSteps": "Nächste Schritte erwägen", + "ui.sessionTurn.status.reasoning": "Überlegung", + "ui.sessionTurn.status.reasoningSummary": "Überlegungs Zusammenfassung", "ui.messagePart.questions.dismissed": "Fragen verworfen", "ui.messagePart.context.read.one": "{{count}} Lesevorgang", diff --git a/packages/ui/src/i18n/en.ts b/packages/ui/src/i18n/en.ts index ba4ff62fb400..40b75bbbdc08 100644 --- a/packages/ui/src/i18n/en.ts +++ b/packages/ui/src/i18n/en.ts @@ -56,6 +56,8 @@ export const dict: Record = { "ui.sessionTurn.status.thinkingWithTopic": "Thinking - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Gathering thoughts", "ui.sessionTurn.status.consideringNextSteps": "Considering next steps", + "ui.sessionTurn.status.reasoning": "Reasoning", + "ui.sessionTurn.status.reasoningSummary": "Reasoning Summary", "ui.messagePart.diagnostic.error": "Error", "ui.messagePart.title.edit": "Edit", diff --git a/packages/ui/src/i18n/es.ts b/packages/ui/src/i18n/es.ts index 0b4566c9bc50..dc4e2dc2f324 100644 --- a/packages/ui/src/i18n/es.ts +++ b/packages/ui/src/i18n/es.ts @@ -55,6 +55,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Pensando - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Recopilando pensamientos", "ui.sessionTurn.status.consideringNextSteps": "Considerando siguientes pasos", + "ui.sessionTurn.status.reasoning": "Razonamiento", + "ui.sessionTurn.status.reasoningSummary": "Resumen del Razonamiento", "ui.messagePart.questions.dismissed": "Preguntas descartadas", "ui.messagePart.context.read.one": "{{count}} lectura", diff --git a/packages/ui/src/i18n/fr.ts b/packages/ui/src/i18n/fr.ts index 4092fac9a3ff..7206cf43e372 100644 --- a/packages/ui/src/i18n/fr.ts +++ b/packages/ui/src/i18n/fr.ts @@ -55,6 +55,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Réflexion - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Rassemblement des idées", "ui.sessionTurn.status.consideringNextSteps": "Examen des prochaines étapes", + "ui.sessionTurn.status.reasoning": "Raisonnement", + "ui.sessionTurn.status.reasoningSummary": "Résumé du Raisonnement", "ui.messagePart.questions.dismissed": "Questions ignorées", "ui.messagePart.context.read.one": "{{count}} lecture", diff --git a/packages/ui/src/i18n/ja.ts b/packages/ui/src/i18n/ja.ts index ea855d1b726d..f545304afe40 100644 --- a/packages/ui/src/i18n/ja.ts +++ b/packages/ui/src/i18n/ja.ts @@ -54,6 +54,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "思考中 - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "考えをまとめています", "ui.sessionTurn.status.consideringNextSteps": "次のステップを検討中", + "ui.sessionTurn.status.reasoning": "推論", + "ui.sessionTurn.status.reasoningSummary": "推論サマリー", "ui.messagePart.questions.dismissed": "質問をスキップしました", "ui.messagePart.context.read.one": "{{count}} 件の読み取り", diff --git a/packages/ui/src/i18n/ko.ts b/packages/ui/src/i18n/ko.ts index 80de94e95d66..8a2c08704014 100644 --- a/packages/ui/src/i18n/ko.ts +++ b/packages/ui/src/i18n/ko.ts @@ -55,6 +55,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "생각 중 - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "생각 정리 중", "ui.sessionTurn.status.consideringNextSteps": "다음 단계 고려 중", + "ui.sessionTurn.status.reasoning": "추론", + "ui.sessionTurn.status.reasoningSummary": "추론 요약", "ui.messagePart.questions.dismissed": "질문 무시됨", "ui.messagePart.context.read.one": "{{count}}개 읽음", diff --git a/packages/ui/src/i18n/no.ts b/packages/ui/src/i18n/no.ts index 77f6df554584..24f61a56f778 100644 --- a/packages/ui/src/i18n/no.ts +++ b/packages/ui/src/i18n/no.ts @@ -58,6 +58,8 @@ export const dict: Record = { "ui.sessionTurn.status.thinkingWithTopic": "Tenker - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Samler tanker", "ui.sessionTurn.status.consideringNextSteps": "Vurderer neste trinn", + "ui.sessionTurn.status.reasoning": "Resonnering", + "ui.sessionTurn.status.reasoningSummary": "Resonnerings Sammendrag", "ui.messagePart.questions.dismissed": "Spørsmål avvist", "ui.messagePart.context.read.one": "{{count}} lest", diff --git a/packages/ui/src/i18n/pl.ts b/packages/ui/src/i18n/pl.ts index 877e6505fcde..dba85e56bc32 100644 --- a/packages/ui/src/i18n/pl.ts +++ b/packages/ui/src/i18n/pl.ts @@ -54,6 +54,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Myślenie - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Zbieranie myśli", "ui.sessionTurn.status.consideringNextSteps": "Rozważanie kolejnych kroków", + "ui.sessionTurn.status.reasoning": "Rozumowanie", + "ui.sessionTurn.status.reasoningSummary": "Podsumowanie Rozumowania", "ui.messagePart.questions.dismissed": "Pytania odrzucone", "ui.messagePart.context.read.one": "{{count}} odczyt", diff --git a/packages/ui/src/i18n/ru.ts b/packages/ui/src/i18n/ru.ts index 545be1b63a61..2bafc456cac7 100644 --- a/packages/ui/src/i18n/ru.ts +++ b/packages/ui/src/i18n/ru.ts @@ -54,6 +54,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "Размышление - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "Сбор мыслей", "ui.sessionTurn.status.consideringNextSteps": "Рассмотрение следующих шагов", + "ui.sessionTurn.status.reasoning": "Рассуждение", + "ui.sessionTurn.status.reasoningSummary": "Сводка Рассуждений", "ui.messagePart.questions.dismissed": "Вопросы отклонены", "ui.messagePart.context.read.one": "{{count}} чтение", diff --git a/packages/ui/src/i18n/th.ts b/packages/ui/src/i18n/th.ts index 54b3db649a67..17c1f0305b91 100644 --- a/packages/ui/src/i18n/th.ts +++ b/packages/ui/src/i18n/th.ts @@ -56,6 +56,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "กำลังคิด - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "รวบรวมความคิด", "ui.sessionTurn.status.consideringNextSteps": "พิจารณาขั้นตอนถัดไป", + "ui.sessionTurn.status.reasoning": "การใช้เหตุผล", + "ui.sessionTurn.status.reasoningSummary": "สรุปการใช้เหตุผล", "ui.messagePart.questions.dismissed": "ละทิ้งคำถามแล้ว", "ui.messagePart.context.read.one": "อ่าน {{count}} รายการ", diff --git a/packages/ui/src/i18n/zh.ts b/packages/ui/src/i18n/zh.ts index 9a00e2dc96c5..d9f13d9fd602 100644 --- a/packages/ui/src/i18n/zh.ts +++ b/packages/ui/src/i18n/zh.ts @@ -59,6 +59,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "思考:{{topic}}", "ui.sessionTurn.status.gatheringThoughts": "正在整理思路", "ui.sessionTurn.status.consideringNextSteps": "正在考虑下一步", + "ui.sessionTurn.status.reasoning": "推理", + "ui.sessionTurn.status.reasoningSummary": "推理摘要", "ui.messagePart.questions.dismissed": "问题已忽略", "ui.messagePart.context.read.one": "{{count}} 次读取", diff --git a/packages/ui/src/i18n/zht.ts b/packages/ui/src/i18n/zht.ts index 81a140d933ee..acb3dfe680d1 100644 --- a/packages/ui/src/i18n/zht.ts +++ b/packages/ui/src/i18n/zht.ts @@ -59,6 +59,8 @@ export const dict = { "ui.sessionTurn.status.thinkingWithTopic": "思考 - {{topic}}", "ui.sessionTurn.status.gatheringThoughts": "正在整理思緒", "ui.sessionTurn.status.consideringNextSteps": "正在考慮下一步", + "ui.sessionTurn.status.reasoning": "推理", + "ui.sessionTurn.status.reasoningSummary": "推理摘要", "ui.messagePart.questions.dismissed": "問題已略過", "ui.messagePart.context.read.one": "{{count}} 次讀取",