diff --git a/ui/src/i18n/.i18n/ar.meta.json b/ui/src/i18n/.i18n/ar.meta.json index ad201332e323..b3078e2e51db 100644 --- a/ui/src/i18n/.i18n/ar.meta.json +++ b/ui/src/i18n/.i18n/ar.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/de.meta.json b/ui/src/i18n/.i18n/de.meta.json index dee506d46ab2..d596fe2e3c95 100644 --- a/ui/src/i18n/.i18n/de.meta.json +++ b/ui/src/i18n/.i18n/de.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/es.meta.json b/ui/src/i18n/.i18n/es.meta.json index 3da5766f1a6b..e7eea6ee07d6 100644 --- a/ui/src/i18n/.i18n/es.meta.json +++ b/ui/src/i18n/.i18n/es.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/fa.meta.json b/ui/src/i18n/.i18n/fa.meta.json index 09587d31ed48..e1d7d4305dec 100644 --- a/ui/src/i18n/.i18n/fa.meta.json +++ b/ui/src/i18n/.i18n/fa.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/fr.meta.json b/ui/src/i18n/.i18n/fr.meta.json index afd8935420c5..5317bcf5532c 100644 --- a/ui/src/i18n/.i18n/fr.meta.json +++ b/ui/src/i18n/.i18n/fr.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/id.meta.json b/ui/src/i18n/.i18n/id.meta.json index 98d542010700..09afc7354c96 100644 --- a/ui/src/i18n/.i18n/id.meta.json +++ b/ui/src/i18n/.i18n/id.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/it.meta.json b/ui/src/i18n/.i18n/it.meta.json index 88d2cee88bd1..421c728535b8 100644 --- a/ui/src/i18n/.i18n/it.meta.json +++ b/ui/src/i18n/.i18n/it.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/ja-JP.meta.json b/ui/src/i18n/.i18n/ja-JP.meta.json index 8e53a9a0226b..eccc1ab2f0dc 100644 --- a/ui/src/i18n/.i18n/ja-JP.meta.json +++ b/ui/src/i18n/.i18n/ja-JP.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/ko.meta.json b/ui/src/i18n/.i18n/ko.meta.json index d95dc523e35f..35bbf7eacbec 100644 --- a/ui/src/i18n/.i18n/ko.meta.json +++ b/ui/src/i18n/.i18n/ko.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/nl.meta.json b/ui/src/i18n/.i18n/nl.meta.json index 0143bc635d9e..cd77ff136a54 100644 --- a/ui/src/i18n/.i18n/nl.meta.json +++ b/ui/src/i18n/.i18n/nl.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/pl.meta.json b/ui/src/i18n/.i18n/pl.meta.json index 7f5c8e4e4331..3a71b7f56ee8 100644 --- a/ui/src/i18n/.i18n/pl.meta.json +++ b/ui/src/i18n/.i18n/pl.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/pt-BR.meta.json b/ui/src/i18n/.i18n/pt-BR.meta.json index 166b36fe1e0f..83bff8688e82 100644 --- a/ui/src/i18n/.i18n/pt-BR.meta.json +++ b/ui/src/i18n/.i18n/pt-BR.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/th.meta.json b/ui/src/i18n/.i18n/th.meta.json index 143f604c0d88..312cdcd0bf8c 100644 --- a/ui/src/i18n/.i18n/th.meta.json +++ b/ui/src/i18n/.i18n/th.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/tr.meta.json b/ui/src/i18n/.i18n/tr.meta.json index aae73ce608f0..678eceef9430 100644 --- a/ui/src/i18n/.i18n/tr.meta.json +++ b/ui/src/i18n/.i18n/tr.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/uk.meta.json b/ui/src/i18n/.i18n/uk.meta.json index cf5670e4e0c4..d7307f10d0bc 100644 --- a/ui/src/i18n/.i18n/uk.meta.json +++ b/ui/src/i18n/.i18n/uk.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/vi.meta.json b/ui/src/i18n/.i18n/vi.meta.json index 1dd74be8b9c0..2ce9af8ce943 100644 --- a/ui/src/i18n/.i18n/vi.meta.json +++ b/ui/src/i18n/.i18n/vi.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/zh-CN.meta.json b/ui/src/i18n/.i18n/zh-CN.meta.json index a445d3efa4fc..36cb5781df5e 100644 --- a/ui/src/i18n/.i18n/zh-CN.meta.json +++ b/ui/src/i18n/.i18n/zh-CN.meta.json @@ -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 } diff --git a/ui/src/i18n/.i18n/zh-TW.meta.json b/ui/src/i18n/.i18n/zh-TW.meta.json index 8c25e7271171..8e70b0195069 100644 --- a/ui/src/i18n/.i18n/zh-TW.meta.json +++ b/ui/src/i18n/.i18n/zh-TW.meta.json @@ -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 } diff --git a/ui/src/i18n/locales/ar.ts b/ui/src/i18n/locales/ar.ts index aef0f2cc52c6..51f33b5acdf8 100644 --- a/ui/src/i18n/locales/ar.ts +++ b/ui/src/i18n/locales/ar.ts @@ -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: "نشاط أدوات مؤقت مشتق من أحداث الجلسة المباشرة.", diff --git a/ui/src/i18n/locales/de.ts b/ui/src/i18n/locales/de.ts index 6343a3ebac91..863b0cba7ed5 100644 --- a/ui/src/i18n/locales/de.ts +++ b/ui/src/i18n/locales/de.ts @@ -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.", diff --git a/ui/src/i18n/locales/en.ts b/ui/src/i18n/locales/en.ts index 09e28601bafb..f802f300d805 100644 --- a/ui/src/i18n/locales/en.ts +++ b/ui/src/i18n/locales/en.ts @@ -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.", diff --git a/ui/src/i18n/locales/es.ts b/ui/src/i18n/locales/es.ts index f71fd9000c38..fe5e053f4fe6 100644 --- a/ui/src/i18n/locales/es.ts +++ b/ui/src/i18n/locales/es.ts @@ -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.", diff --git a/ui/src/i18n/locales/fa.ts b/ui/src/i18n/locales/fa.ts index e6d29c4e00cb..4c790fa0d110 100644 --- a/ui/src/i18n/locales/fa.ts +++ b/ui/src/i18n/locales/fa.ts @@ -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: "فعالیت موقتی ابزار که از رویدادهای نشست زنده استخراج شده است.", diff --git a/ui/src/i18n/locales/fr.ts b/ui/src/i18n/locales/fr.ts index a540cb39f604..77bcd7e5aa39 100644 --- a/ui/src/i18n/locales/fr.ts +++ b/ui/src/i18n/locales/fr.ts @@ -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.", diff --git a/ui/src/i18n/locales/id.ts b/ui/src/i18n/locales/id.ts index 1d02951f3823..6f928f725b2d 100644 --- a/ui/src/i18n/locales/id.ts +++ b/ui/src/i18n/locales/id.ts @@ -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.", diff --git a/ui/src/i18n/locales/it.ts b/ui/src/i18n/locales/it.ts index 4a31afbee066..f62f81173a48 100644 --- a/ui/src/i18n/locales/it.ts +++ b/ui/src/i18n/locales/it.ts @@ -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.", diff --git a/ui/src/i18n/locales/ja-JP.ts b/ui/src/i18n/locales/ja-JP.ts index 468e6b588395..fce5884beaed 100644 --- a/ui/src/i18n/locales/ja-JP.ts +++ b/ui/src/i18n/locales/ja-JP.ts @@ -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: "ライブセッションイベントから生成される一時的なツールアクティビティ。", diff --git a/ui/src/i18n/locales/ko.ts b/ui/src/i18n/locales/ko.ts index cf4726490f5e..55e36b58fb9f 100644 --- a/ui/src/i18n/locales/ko.ts +++ b/ui/src/i18n/locales/ko.ts @@ -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: "라이브 세션 이벤트에서 파생된 임시 도구 활동입니다.", diff --git a/ui/src/i18n/locales/nl.ts b/ui/src/i18n/locales/nl.ts index 3707960b760e..0eb91720d860 100644 --- a/ui/src/i18n/locales/nl.ts +++ b/ui/src/i18n/locales/nl.ts @@ -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.", diff --git a/ui/src/i18n/locales/pl.ts b/ui/src/i18n/locales/pl.ts index a70f6e0bd6d4..879ea328546c 100644 --- a/ui/src/i18n/locales/pl.ts +++ b/ui/src/i18n/locales/pl.ts @@ -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.", diff --git a/ui/src/i18n/locales/pt-BR.ts b/ui/src/i18n/locales/pt-BR.ts index 78136c904fac..5f5f6b76e573 100644 --- a/ui/src/i18n/locales/pt-BR.ts +++ b/ui/src/i18n/locales/pt-BR.ts @@ -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.", diff --git a/ui/src/i18n/locales/th.ts b/ui/src/i18n/locales/th.ts index 5b030c844d0d..a48ca34c77bb 100644 --- a/ui/src/i18n/locales/th.ts +++ b/ui/src/i18n/locales/th.ts @@ -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: "กิจกรรมของเครื่องมือแบบชั่วคราวที่ได้จากเหตุการณ์เซสชันสด", diff --git a/ui/src/i18n/locales/tr.ts b/ui/src/i18n/locales/tr.ts index 2a1aaa066498..0b42c80e7a3d 100644 --- a/ui/src/i18n/locales/tr.ts +++ b/ui/src/i18n/locales/tr.ts @@ -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.", diff --git a/ui/src/i18n/locales/uk.ts b/ui/src/i18n/locales/uk.ts index 462c8e66677d..415a0e7eaaa2 100644 --- a/ui/src/i18n/locales/uk.ts +++ b/ui/src/i18n/locales/uk.ts @@ -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: "Тимчасова активність інструментів, отримана з подій поточного сеансу.", diff --git a/ui/src/i18n/locales/vi.ts b/ui/src/i18n/locales/vi.ts index 11f5e91ba9fd..794eeffe9e89 100644 --- a/ui/src/i18n/locales/vi.ts +++ b/ui/src/i18n/locales/vi.ts @@ -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.", diff --git a/ui/src/i18n/locales/zh-CN.ts b/ui/src/i18n/locales/zh-CN.ts index d65ca200f15f..1f927c30108a 100644 --- a/ui/src/i18n/locales/zh-CN.ts +++ b/ui/src/i18n/locales/zh-CN.ts @@ -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: "从实时会话事件派生的临时工具活动。", diff --git a/ui/src/i18n/locales/zh-TW.ts b/ui/src/i18n/locales/zh-TW.ts index 1aafef61f11e..d69615d1e8f5 100644 --- a/ui/src/i18n/locales/zh-TW.ts +++ b/ui/src/i18n/locales/zh-TW.ts @@ -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: "從即時工作階段事件衍生的暫時性工具活動。", diff --git a/ui/src/ui/app-render.ts b/ui/src/ui/app-render.ts index 82257a3fc3aa..9bb56738975e 100644 --- a/ui/src/ui/app-render.ts +++ b/ui/src/ui/app-render.ts @@ -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( } 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`
+
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 { + 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 { + 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[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 { + 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; diff --git a/ui/src/ui/app.ts b/ui/src/ui/app.ts index f36a430283d5..40ce8517912e 100644 --- a/ui/src/ui/app.ts +++ b/ui/src/ui/app.ts @@ -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; diff --git a/ui/src/ui/controllers/skill-workshop.ts b/ui/src/ui/controllers/skill-workshop.ts index 54049ae0ca01..29e827279cdc 100644 --- a/ui/src/ui/controllers/skill-workshop.ts +++ b/ui/src/ui/controllers/skill-workshop.ts @@ -92,6 +92,7 @@ export type SkillWorkshopState = { skillWorkshopFilePreviewQuery: string; skillWorkshopQueueWidth: number; skillWorkshopMode: SkillWorkshopMode; + skillWorkshopUseCurrentChatForRevisions: boolean; }; function getErrorMessage(err: unknown): string {