fix: restore Skill Workshop current chat toggle

This commit is contained in:
Shakker
2026-06-03 23:36:51 +01:00
committed by Shakker
parent 03c730c48f
commit 0771a8ab6f
40 changed files with 404 additions and 59 deletions

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:23.359Z",
"generatedAt": "2026-06-03T22:35:02.692Z",
"locale": "ar",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:21.786Z",
"generatedAt": "2026-06-03T22:35:01.407Z",
"locale": "de",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:22.097Z",
"generatedAt": "2026-06-03T22:35:01.661Z",
"locale": "es",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:26.307Z",
"generatedAt": "2026-06-03T22:35:05.014Z",
"locale": "fa",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:23.053Z",
"generatedAt": "2026-06-03T22:35:02.432Z",
"locale": "fr",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:24.706Z",
"generatedAt": "2026-06-03T22:35:03.722Z",
"locale": "id",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:23.725Z",
"generatedAt": "2026-06-03T22:35:02.949Z",
"locale": "it",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:22.425Z",
"generatedAt": "2026-06-03T22:35:01.919Z",
"locale": "ja-JP",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:22.739Z",
"generatedAt": "2026-06-03T22:35:02.176Z",
"locale": "ko",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:25.987Z",
"generatedAt": "2026-06-03T22:35:04.755Z",
"locale": "nl",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:25.027Z",
"generatedAt": "2026-06-03T22:35:03.977Z",
"locale": "pl",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:21.475Z",
"generatedAt": "2026-06-03T22:35:01.146Z",
"locale": "pt-BR",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:25.336Z",
"generatedAt": "2026-06-03T22:35:04.236Z",
"locale": "th",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:24.054Z",
"generatedAt": "2026-06-03T22:35:03.206Z",
"locale": "tr",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:24.380Z",
"generatedAt": "2026-06-03T22:35:03.461Z",
"locale": "uk",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:25.659Z",
"generatedAt": "2026-06-03T22:35:04.498Z",
"locale": "vi",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:20.827Z",
"generatedAt": "2026-06-03T22:35:00.622Z",
"locale": "zh-CN",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -1,5 +1,8 @@
{
"fallbackKeys": [
"skillWorkshop.header.useCurrentChat",
"skillWorkshop.header.useCurrentChatAria",
"skillWorkshop.header.useCurrentChatTooltip",
"workboard.dependencies",
"workboard.dependenciesBlocked",
"workboard.dependenciesBlockedTitle",
@@ -29,12 +32,12 @@
"workboard.unknownStatus",
"workboard.viewDetails"
],
"generatedAt": "2026-06-01T07:19:21.160Z",
"generatedAt": "2026-06-03T22:35:00.888Z",
"locale": "zh-TW",
"model": "claude-opus-4-8",
"provider": "anthropic",
"sourceHash": "0639815f4b249fd84b5149556602c9e5da1136d73a747f26a1c12981a4319ebb",
"totalKeys": 1330,
"sourceHash": "045696b27bf36b4d0ef74cfd8ec76124de70c9bcef7ca7cb378a0d07f1bdfa61",
"totalKeys": 1333,
"translatedKeys": 1302,
"workflow": 1
}

View File

@@ -448,6 +448,14 @@ export const ar: TranslationMap = {
logs: "سجلات Gateway المباشرة.",
dreams: "حلم الذاكرة، والدمج، والتأمل.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "النشاط",
subtitle: "نشاط أدوات مؤقت مشتق من أحداث الجلسة المباشرة.",

View File

@@ -453,6 +453,14 @@ export const de: TranslationMap = {
logs: "Live-Verfolgung der Gateway-Protokolldateien.",
dreams: "Speicherkonsolidierung im Schlaf.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Aktivität",
subtitle: "Flüchtige Tool-Aktivität, abgeleitet aus Live-Sitzungsereignissen.",

View File

@@ -447,6 +447,14 @@ export const en: TranslationMap = {
logs: "Live gateway logs.",
dreams: "Memory dreaming, consolidation, and reflection.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Activity",
subtitle: "Ephemeral tool activity derived from live session events.",

View File

@@ -450,6 +450,14 @@ export const es: TranslationMap = {
logs: "Seguimiento en vivo de los registros de la puerta de enlace.",
dreams: "Consolidación de la memoria durante el sueño.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Actividad",
subtitle: "Actividad efímera de herramientas derivada de eventos de sesión en vivo.",

View File

@@ -450,6 +450,14 @@ export const fa: TranslationMap = {
logs: "گزارش‌های زنده Gateway.",
dreams: "رؤیاپردازی حافظه، یکپارچه‌سازی و بازتاب.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "فعالیت",
subtitle: "فعالیت موقتی ابزار که از رویدادهای نشست زنده استخراج شده است.",

View File

@@ -452,6 +452,14 @@ export const fr: TranslationMap = {
logs: "Journaux Gateway en direct.",
dreams: "Consolidation de la mémoire pendant le sommeil.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Activité",
subtitle: "Activité éphémère des outils dérivée des événements de session en direct.",

View File

@@ -449,6 +449,14 @@ export const id: TranslationMap = {
logs: "Log Gateway langsung.",
dreams: "Konsolidasi memori saat tidur.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Aktivitas",
subtitle: "Aktivitas alat sementara yang berasal dari peristiwa sesi langsung.",

View File

@@ -451,6 +451,14 @@ export const it: TranslationMap = {
logs: "Log gateway live.",
dreams: "Sogni della memoria, consolidamento e riflessione.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Attività",
subtitle: "Attività effimera degli strumenti derivata dagli eventi della sessione live.",

View File

@@ -452,6 +452,14 @@ export const ja_JP: TranslationMap = {
logs: "ライブ Gateway ログ。",
dreams: "スリープ中のメモリ統合。",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "アクティビティ",
subtitle: "ライブセッションイベントから生成される一時的なツールアクティビティ。",

View File

@@ -448,6 +448,14 @@ export const ko: TranslationMap = {
logs: "실시간 Gateway 로그.",
dreams: "수면 중 메모리 통합.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "활동",
subtitle: "라이브 세션 이벤트에서 파생된 임시 도구 활동입니다.",

View File

@@ -451,6 +451,14 @@ export const nl: TranslationMap = {
logs: "Live Gateway-logs.",
dreams: "Geheugendromen, consolidatie en reflectie.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Activiteit",
subtitle: "Tijdelijke toolactiviteit afgeleid van live sessiegebeurtenissen.",

View File

@@ -450,6 +450,14 @@ export const pl: TranslationMap = {
logs: "Logi Gateway na żywo.",
dreams: "Konsolidacja pamięci podczas snu.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Aktywność",
subtitle: "Tymczasowa aktywność narzędzi pochodząca ze zdarzeń sesji na żywo.",

View File

@@ -449,6 +449,14 @@ export const pt_BR: TranslationMap = {
logs: "Logs ao vivo do gateway.",
dreams: "Consolidação de memória durante o sono.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Atividade",
subtitle: "Atividade efêmera de ferramentas derivada de eventos de sessão ao vivo.",

View File

@@ -447,6 +447,14 @@ export const th: TranslationMap = {
logs: "บันทึกเกตเวย์แบบสด",
dreams: "การฝันของหน่วยความจำ การรวมข้อมูล และการสะท้อนคิด",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "กิจกรรม",
subtitle: "กิจกรรมของเครื่องมือแบบชั่วคราวที่ได้จากเหตุการณ์เซสชันสด",

View File

@@ -452,6 +452,14 @@ export const tr: TranslationMap = {
logs: "Canlı Gateway günlükleri.",
dreams: "Uyku sırasında bellek birleştirme.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Etkinlik",
subtitle: "Canlı oturum olaylarından türetilen geçici araç etkinliği.",

View File

@@ -451,6 +451,14 @@ export const uk: TranslationMap = {
logs: "Журнали шлюзу в реальному часі.",
dreams: "Консолідація пам’яті під час сну.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Активність",
subtitle: "Тимчасова активність інструментів, отримана з подій поточного сеансу.",

View File

@@ -450,6 +450,14 @@ export const vi: TranslationMap = {
logs: "Nhật ký gateway trực tiếp.",
dreams: "Mơ bộ nhớ, hợp nhất và phản chiếu.",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "Hoạt động",
subtitle: "Hoạt động công cụ tạm thời được lấy từ các sự kiện phiên trực tiếp.",

View File

@@ -446,6 +446,14 @@ export const zh_CN: TranslationMap = {
logs: "实时网关日志。",
dreams: "睡眠时进行记忆巩固。",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "活动",
subtitle: "从实时会话事件派生的临时工具活动。",

View File

@@ -446,6 +446,14 @@ export const zh_TW: TranslationMap = {
logs: "實時網關日誌。",
dreams: "睡眠期間的記憶整合。",
},
skillWorkshop: {
header: {
useCurrentChat: "Use current chat",
useCurrentChatAria: "Use current chat for revision requests",
useCurrentChatTooltip:
"Send revision requests to the current chat session instead of the proposal's workshop session.",
},
},
activity: {
title: "活動",
subtitle: "從即時工作階段事件衍生的暫時性工具活動。",

View File

@@ -22,6 +22,7 @@ import {
createChatSession,
dismissChatError,
switchChatSession,
switchChatSessionAndWait,
} from "./app-render.helpers.ts";
import { hasOperatorAdminAccess, hasOperatorWriteAccess, warnQueryToken } from "./app-settings.ts";
import type { AppViewState } from "./app-view-state.ts";
@@ -119,6 +120,7 @@ import { loadNodes } from "./controllers/nodes.ts";
import { loadPresence } from "./controllers/presence.ts";
import {
branchSessionFromCheckpoint,
createSessionAndRefresh,
deleteSessionsAndRefresh,
loadSessions,
parseSessionsFilterInteger,
@@ -218,6 +220,8 @@ function runUiTask<Args extends unknown[]>(
}
const SKILL_WORKSHOP_MODE_KEY = "openclaw:control-ui:skill-workshop-mode:v1";
const SKILL_WORKSHOP_CURRENT_CHAT_REVISIONS_KEY =
"openclaw:control-ui:skill-workshop-current-chat-revisions:v1";
export function loadSkillWorkshopMode(): "board" | "today" {
try {
@@ -228,6 +232,23 @@ export function loadSkillWorkshopMode(): "board" | "today" {
}
}
export function loadSkillWorkshopUseCurrentChatForRevisions(): boolean {
try {
return getSafeLocalStorage()?.getItem(SKILL_WORKSHOP_CURRENT_CHAT_REVISIONS_KEY) === "true";
} catch {
return false;
}
}
function setSkillWorkshopUseCurrentChatForRevisions(state: AppViewState, enabled: boolean): void {
state.skillWorkshopUseCurrentChatForRevisions = enabled;
try {
getSafeLocalStorage()?.setItem(SKILL_WORKSHOP_CURRENT_CHAT_REVISIONS_KEY, String(enabled));
} catch {
// Preference persistence is optional; the active toggle still controls this handoff.
}
}
function setSkillWorkshopMode(state: AppViewState, mode: "board" | "today"): void {
if (state.skillWorkshopMode === mode) {
return;
@@ -241,8 +262,26 @@ function setSkillWorkshopMode(state: AppViewState, mode: "board" | "today"): voi
}
function renderSkillWorkshopHeaderControls(state: AppViewState) {
const useCurrentChatLabel = t("skillWorkshop.header.useCurrentChat");
return html`
<div class="sw-header-controls">
<label
class="sw-revision-session-toggle"
title=${t("skillWorkshop.header.useCurrentChatTooltip")}
>
<input
type="checkbox"
aria-label=${t("skillWorkshop.header.useCurrentChatAria")}
.checked=${state.skillWorkshopUseCurrentChatForRevisions}
@change=${(event: Event) =>
setSkillWorkshopUseCurrentChatForRevisions(
state,
(event.currentTarget as HTMLInputElement).checked,
)}
/>
<span class="sw-revision-session-toggle__track" aria-hidden="true"></span>
<span class="sw-revision-session-toggle__label">${useCurrentChatLabel}</span>
</label>
<div
class="sw-mode-switch"
role="tablist"
@@ -286,6 +325,101 @@ function renderSkillWorkshopHeaderControls(state: AppViewState) {
`;
}
function findSkillWorkshopRevisionSessionRow(
state: AppViewState,
sessionKey: string | undefined,
): GatewaySessionRow | null {
const key = normalizeOptionalString(sessionKey);
if (!key) {
return null;
}
const current = state.sessionsResult?.sessions.find((row) => row.key === key);
if (current) {
return current;
}
for (const rows of Object.values(state.chatAgentSessionRowsByAgent ?? {})) {
const cached = rows.find((row) => row.key === key);
if (cached) {
return cached;
}
}
return null;
}
function isUsableSkillWorkshopRevisionSession(
row: GatewaySessionRow | null,
): row is GatewaySessionRow {
return Boolean(row && !row.archived && !row.hasActiveRun);
}
async function ensureSkillWorkshopRevisionSessionsLoaded(
state: AppViewState,
agentId: string,
): Promise<void> {
const resultAgentId = normalizeOptionalString(state.sessionsResultAgentId);
if (resultAgentId === agentId && state.sessionsResult?.sessions.length) {
return;
}
await loadSessions(state, {
...createChatSessionsLoadOverrides(state),
agentId,
});
}
async function resolveSkillWorkshopRevisionSessionKey(
state: AppViewState,
proposal: { key: string; slug: string; origin?: { agentId?: string; sessionKey?: string } },
): Promise<string | null> {
if (state.skillWorkshopUseCurrentChatForRevisions) {
return normalizeOptionalString(state.sessionKey) ?? null;
}
const agentId = normalizeAgentId(
proposal.origin?.agentId ?? resolveSidebarSelectedAgentId(state),
);
await ensureSkillWorkshopRevisionSessionsLoaded(state, agentId);
const originRow = findSkillWorkshopRevisionSessionRow(state, proposal.origin?.sessionKey);
if (isUsableSkillWorkshopRevisionSession(originRow)) {
return originRow.key;
}
return createSessionAndRefresh(
state as unknown as Parameters<typeof createSessionAndRefresh>[0],
{
agentId,
label: `Skill Workshop: ${proposal.slug || proposal.key}`.slice(0, 80),
},
{
...createChatSessionsLoadOverrides(state),
agentId,
},
);
}
async function sendSkillWorkshopRevisionRequest(
state: AppViewState,
message: string,
proposal: { key: string; slug: string; origin?: { agentId?: string; sessionKey?: string } },
): Promise<void> {
if (!state.client || !state.connected) {
throw new Error("Gateway is not connected.");
}
const sessionKey = await resolveSkillWorkshopRevisionSessionKey(state, proposal);
if (!sessionKey) {
throw new Error(state.sessionsError ?? "Could not prepare a Skill Workshop session.");
}
if (state.tab !== "chat") {
state.setTab("chat" as Tab);
}
if (state.sessionKey === sessionKey) {
await loadChatHistory(state);
} else {
await switchChatSessionAndWait(state, sessionKey);
}
await state.handleSendChat(message, { restoreDraft: true });
}
function renderSettingsSectionNav(state: AppViewState) {
if (!isSettingsTab(state.tab)) {
return nothing;
@@ -3242,10 +3376,9 @@ export function renderApp(state: AppViewState) {
state.skillWorkshopRevisionDraft = "";
},
onRevisionSubmit: (key) =>
void requestSkillWorkshopRevision(state, key, async (message) => {
state.setTab("chat" as Tab);
await state.handleSendChat(message, { restoreDraft: true });
}),
void requestSkillWorkshopRevision(state, key, (message, proposal) =>
sendSkillWorkshopRevisionRequest(state, message, proposal),
),
onPreviewFile: (key, path) => {
state.skillWorkshopSelectedKey = key;
state.skillWorkshopFilePreviewKey = path;

View File

@@ -42,7 +42,11 @@ import {
} from "./app-lifecycle.ts";
import { initNativeBridge } from "./app-native-bridge.ts";
import { createChatSession as createChatSessionInternal } from "./app-render.helpers.ts";
import { loadSkillWorkshopMode, renderApp } from "./app-render.ts";
import {
loadSkillWorkshopMode,
loadSkillWorkshopUseCurrentChatForRevisions,
renderApp,
} from "./app-render.ts";
import {
exportLogs as exportLogsInternal,
handleActivityScroll as handleActivityScrollInternal,
@@ -644,6 +648,7 @@ export class OpenClawApp extends LitElement {
@state() skillWorkshopFilePreviewQuery = "";
@state() skillWorkshopQueueWidth = 360;
@state() skillWorkshopMode: SkillWorkshopState["skillWorkshopMode"] = loadSkillWorkshopMode();
@state() skillWorkshopUseCurrentChatForRevisions = loadSkillWorkshopUseCurrentChatForRevisions();
@state() healthLoading = false;
@state() healthResult: HealthSummary | null = null;

View File

@@ -92,6 +92,7 @@ export type SkillWorkshopState = {
skillWorkshopFilePreviewQuery: string;
skillWorkshopQueueWidth: number;
skillWorkshopMode: SkillWorkshopMode;
skillWorkshopUseCurrentChatForRevisions: boolean;
};
function getErrorMessage(err: unknown): string {