@openchambery/web 1.19.7-beta.5 → 1.19.7-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AgentAvatar-ziUs4sw3.js → AgentAvatar-Di8F4QJh.js} +1 -1
- package/dist/assets/{AssistantView-neqbgNaR.js → AssistantView-AWe-3bXR.js} +1 -1
- package/dist/assets/{ChatContainer-BBKcNWyJ.js → ChatContainer-XHQSSICA.js} +35 -35
- package/dist/assets/{ContextPanel-C3LRnrhI.js → ContextPanel-BT6bgBJ_.js} +3 -3
- package/dist/assets/{DiagramView-BOuujgEg.js → DiagramView-DNLNZOT6.js} +1 -1
- package/dist/assets/{FadeInOnReveal-BAlsRFJH.js → FadeInOnReveal-CV2s6YN8.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-Cj2Tk6Lb.js → MarkdownRendererImpl-C6E0KL8H.js} +1 -1
- package/dist/assets/{MobileDetailNavigation-BAy5LnnX.js → MobileDetailNavigation-Sg0VMlOz.js} +1 -1
- package/dist/assets/{MobileShareBridge-C03A2Qeb.js → MobileShareBridge-QTUpK3s7.js} +2 -2
- package/dist/assets/{MobileSurface-HlOBVawn.js → MobileSurface-BasV1X13.js} +1 -1
- package/dist/assets/{MultiRunWindow-0gmV5who.js → MultiRunWindow-BxyF4Xy4.js} +1 -1
- package/dist/assets/{OnboardingScreen-CJYyR54B.js → OnboardingScreen-D6rtE7rj.js} +1 -1
- package/dist/assets/{OverlayScrollbar-C-jZ8ITG.js → OverlayScrollbar-DlNZho3q.js} +1 -1
- package/dist/assets/{SettingsView-BaHbjZ-r.js → SettingsView-BywiwJ_a.js} +1 -1
- package/dist/assets/{SettingsWindow-BT-H9i50.js → SettingsWindow-zQ1dc-wl.js} +1 -1
- package/dist/assets/{TerminalView-v4YY-9kA.js → TerminalView-BMXYfo8d.js} +1 -1
- package/dist/assets/{ToolOutputDialog-1bp7aeoj.js → ToolOutputDialog-CFFkJzQ4.js} +1 -1
- package/dist/assets/{appThemeRegistry-ChC97xjW.js → appThemeRegistry-4oEk9SR8.js} +2 -2
- package/dist/assets/{clipboard-Bz0Zm9VJ.js → clipboard-D35XSwID.js} +1 -1
- package/dist/assets/{desktopRelayRestore-LBt0CBOj.js → desktopRelayRestore-8pvI_dSc.js} +1 -1
- package/dist/assets/{dialog-HCE4eLUW.js → dialog-x2hirWBd.js} +1 -1
- package/dist/assets/{es-D9KcV5TX.js → es-C8Sqjsia.js} +1 -1
- package/dist/assets/{fileQueries-Dnn15WsA.js → fileQueries-DGHZqZHc.js} +1 -1
- package/dist/assets/{fr-DPA9qUl3.js → fr-p-Zwm_j2.js} +1 -1
- package/dist/assets/{gitApi-BZQvlhsa.js → gitApi-Dqg8EDsg.js} +1 -1
- package/dist/assets/{insertionBoundaries-CLGkUXKc.js → insertionBoundaries-BtiZxiKR.js} +1 -1
- package/dist/assets/{ja-Dsif3NoD.js → ja-B6REu1qP.js} +1 -1
- package/dist/assets/{ko-Dixx4Ctg.js → ko-CJBNH9IZ.js} +1 -1
- package/dist/assets/{main-BtZPyHBH.js → main-Blsi9j8P.js} +2 -2
- package/dist/assets/{main-W1UkNfir.js → main-D4qq97ip.js} +3 -3
- package/dist/assets/{markdownTheme-TdhQOZSN.js → markdownTheme-SPe4jOwX.js} +1 -1
- package/dist/assets/{miniChat-Dqm16yyZ.js → miniChat-QgI11lL4.js} +2 -2
- package/dist/assets/{mobile-CzSQKW-r.js → mobile-BjMMtvjD.js} +2 -2
- package/dist/assets/{multirun-cDeDA8WZ.js → multirun-C9CKfXyS.js} +1 -1
- package/dist/assets/{persistence-CmjKImz2.js → persistence-w-AiX2i4.js} +1 -1
- package/dist/assets/{pl-Bj78ZGgf.js → pl-B2cBI_7K.js} +1 -1
- package/dist/assets/{platform-skqcMARt.js → platform-4eCmsdol.js} +1 -1
- package/dist/assets/{projectMeta-DJa04ZTk.js → projectMeta-DzGPV_uF.js} +1 -1
- package/dist/assets/{pt-BR-CFL3xSAf.js → pt-BR-CrCc9hmt.js} +1 -1
- package/dist/assets/{radio-CTAfZqAa.js → radio-TX0aocEX.js} +1 -1
- package/dist/assets/{renderElectronMiniChatApp-CR-zSyTR.js → renderElectronMiniChatApp-DZOBP2No.js} +2 -2
- package/dist/assets/{renderMobileApp-InxP28OZ.js → renderMobileApp-DP1_xIqJ.js} +10 -7
- package/dist/assets/{runtimeConfig-Fsa7BZKx.js → runtimeConfig-ClsErHd9.js} +1 -1
- package/dist/assets/{runtimeEndpointReset-Bp-Y9GZS.js → runtimeEndpointReset-DoLMDfAs.js} +1 -1
- package/dist/assets/{shikiHighlight-kzkGYjXV.js → shikiHighlight-B25fE64n.js} +1 -1
- package/dist/assets/{sortable-tabs-strip-Bj8N0VWf.js → sortable-tabs-strip-CNDgyX0B.js} +1 -1
- package/dist/assets/{store-DzpbXWX1.js → store-CL3WP48T.js} +2 -2
- package/dist/assets/{terminalApi-CNqqwjfG.js → terminalApi-CGtOtc8I.js} +1 -1
- package/dist/assets/{uk-BY60Ub3Z.js → uk-C8YKAz0x.js} +1 -1
- package/dist/assets/{useAppFontEffects-KatUA88o.js → useAppFontEffects-D1u63a6o.js} +2 -2
- package/dist/assets/{useAssistantUIStore-DaplPyb0.js → useAssistantUIStore-I0VWrB5V.js} +1 -1
- package/dist/assets/{useDesktopWindowControlsLayout-B3Vz7zfM.js → useDesktopWindowControlsLayout-DW_ouBDs.js} +1 -1
- package/dist/assets/{useEffectiveDirectory-CoY7Yf8Y.js → useEffectiveDirectory-D976zCCc.js} +1 -1
- package/dist/assets/{useFontPreferences-D8emhcNv.js → useFontPreferences-BLZ3y6mN.js} +1 -1
- package/dist/assets/{useMobileNavigationStore-90zAmNRR.js → useMobileNavigationStore-lcj5GHR3.js} +4 -4
- package/dist/assets/{useSessionAutoCleanup-B2UfFrMn.js → useSessionAutoCleanup-DMNa_krc.js} +1 -1
- package/dist/assets/useUIStore-CNLmCoPU.js +1 -0
- package/dist/assets/{useWorkerHighlightedLines-Cf50wR0y.js → useWorkerHighlightedLines-BQNOf2U4.js} +1 -1
- package/dist/assets/{zh-CN-Cox1LaOW.js → zh-CN-CCYwUnmB.js} +1 -1
- package/dist/assets/{zh-TW-B6RU0mxa.js → zh-TW-D8Y6py08.js} +1 -1
- package/dist/index.html +7 -7
- package/dist/mini-chat.html +7 -7
- package/dist/mobile.html +7 -7
- package/package.json +1 -1
- package/server/lib/notifications/APNS.md +4 -4
- package/server/lib/notifications/DOCUMENTATION.md +1 -1
- package/server/lib/notifications/apns-runtime.js +139 -20
- package/server/lib/notifications/apns-runtime.test.js +66 -7
- package/server/lib/notifications/apns-titles.js +62 -62
- package/server/lib/notifications/apns-titles.test.js +3 -1
- package/server/lib/notifications/routes.js +1 -1
- package/server/lib/notifications/runtime.js +25 -49
- package/server/lib/opencode/settings-runtime.js +16 -0
- package/dist/assets/useUIStore-B7KJS5G7.js +0 -1
|
@@ -20,113 +20,113 @@ export const APNS_LOCALES = Object.freeze([
|
|
|
20
20
|
|
|
21
21
|
const TITLES = Object.freeze({
|
|
22
22
|
en: Object.freeze({
|
|
23
|
-
ready: '
|
|
24
|
-
error: '
|
|
25
|
-
question: '
|
|
26
|
-
permission: '
|
|
27
|
-
goal_complete: 'Goal
|
|
23
|
+
ready: 'Task completed',
|
|
24
|
+
error: 'Something went wrong',
|
|
25
|
+
question: 'Needs your answer',
|
|
26
|
+
permission: 'Needs permission',
|
|
27
|
+
goal_complete: 'Goal completed',
|
|
28
28
|
goal_blocked: 'Goal blocked',
|
|
29
|
-
goal_budget: '
|
|
30
|
-
update: '
|
|
29
|
+
goal_budget: 'Token budget reached',
|
|
30
|
+
update: 'Update',
|
|
31
31
|
session: 'Session',
|
|
32
32
|
}),
|
|
33
33
|
fr: Object.freeze({
|
|
34
|
-
ready:
|
|
35
|
-
error: "
|
|
36
|
-
question:
|
|
37
|
-
permission:
|
|
38
|
-
goal_complete: 'Objectif
|
|
34
|
+
ready: 'Tâche terminée',
|
|
35
|
+
error: "Une erreur s'est produite",
|
|
36
|
+
question: 'Besoin de votre réponse',
|
|
37
|
+
permission: 'Autorisation requise',
|
|
38
|
+
goal_complete: 'Objectif atteint',
|
|
39
39
|
goal_blocked: 'Objectif bloqué',
|
|
40
|
-
goal_budget:
|
|
41
|
-
update:
|
|
40
|
+
goal_budget: 'Budget de tokens atteint',
|
|
41
|
+
update: 'Mise à jour',
|
|
42
42
|
session: 'Session',
|
|
43
43
|
}),
|
|
44
44
|
'zh-CN': Object.freeze({
|
|
45
|
-
ready: '
|
|
46
|
-
error: '
|
|
47
|
-
question: '
|
|
48
|
-
permission: '
|
|
45
|
+
ready: '任务已完成',
|
|
46
|
+
error: '出现错误',
|
|
47
|
+
question: '需要你回答',
|
|
48
|
+
permission: '需要你授权',
|
|
49
49
|
goal_complete: '目标已完成',
|
|
50
50
|
goal_blocked: '目标受阻',
|
|
51
|
-
goal_budget: '
|
|
52
|
-
update: '
|
|
51
|
+
goal_budget: '已达用量上限',
|
|
52
|
+
update: '有新进展',
|
|
53
53
|
session: '会话',
|
|
54
54
|
}),
|
|
55
55
|
'zh-TW': Object.freeze({
|
|
56
|
-
ready: '
|
|
57
|
-
error: '
|
|
58
|
-
question: '
|
|
59
|
-
permission: '
|
|
56
|
+
ready: '任務已完成',
|
|
57
|
+
error: '出現錯誤',
|
|
58
|
+
question: '需要你回答',
|
|
59
|
+
permission: '需要你授權',
|
|
60
60
|
goal_complete: '目標已完成',
|
|
61
61
|
goal_blocked: '目標受阻',
|
|
62
|
-
goal_budget: '
|
|
63
|
-
update: '
|
|
62
|
+
goal_budget: '已達用量上限',
|
|
63
|
+
update: '有新進展',
|
|
64
64
|
session: '工作階段',
|
|
65
65
|
}),
|
|
66
66
|
uk: Object.freeze({
|
|
67
|
-
ready: '
|
|
68
|
-
error: '
|
|
69
|
-
question: '
|
|
70
|
-
permission: '
|
|
67
|
+
ready: 'Завдання виконано',
|
|
68
|
+
error: 'Сталася помилка',
|
|
69
|
+
question: 'Потрібна ваша відповідь',
|
|
70
|
+
permission: 'Потрібен дозвіл',
|
|
71
71
|
goal_complete: 'Цілі досягнуто',
|
|
72
72
|
goal_blocked: 'Цілі заблоковано',
|
|
73
|
-
goal_budget: '
|
|
74
|
-
update: 'Оновлення
|
|
73
|
+
goal_budget: 'Досягнуто ліміт токенів',
|
|
74
|
+
update: 'Оновлення',
|
|
75
75
|
session: 'Сесія',
|
|
76
76
|
}),
|
|
77
77
|
es: Object.freeze({
|
|
78
|
-
ready: '
|
|
79
|
-
error: '
|
|
80
|
-
question: '
|
|
81
|
-
permission: '
|
|
78
|
+
ready: 'Tarea completada',
|
|
79
|
+
error: 'Se produjo un error',
|
|
80
|
+
question: 'Necesita tu respuesta',
|
|
81
|
+
permission: 'Necesita permiso',
|
|
82
82
|
goal_complete: 'Objetivo completado',
|
|
83
83
|
goal_blocked: 'Objetivo bloqueado',
|
|
84
|
-
goal_budget: '
|
|
85
|
-
update: 'Actualización
|
|
84
|
+
goal_budget: 'Presupuesto de tokens alcanzado',
|
|
85
|
+
update: 'Actualización',
|
|
86
86
|
session: 'Sesión',
|
|
87
87
|
}),
|
|
88
88
|
'pt-BR': Object.freeze({
|
|
89
|
-
ready: '
|
|
90
|
-
error: '
|
|
91
|
-
question: '
|
|
92
|
-
permission: '
|
|
89
|
+
ready: 'Tarefa concluída',
|
|
90
|
+
error: 'Ocorreu um erro',
|
|
91
|
+
question: 'Precisa da sua resposta',
|
|
92
|
+
permission: 'Precisa de permissão',
|
|
93
93
|
goal_complete: 'Objetivo concluído',
|
|
94
94
|
goal_blocked: 'Objetivo bloqueado',
|
|
95
|
-
goal_budget: '
|
|
96
|
-
update: 'Atualização
|
|
95
|
+
goal_budget: 'Orçamento de tokens atingido',
|
|
96
|
+
update: 'Atualização',
|
|
97
97
|
session: 'Sessão',
|
|
98
98
|
}),
|
|
99
99
|
ko: Object.freeze({
|
|
100
|
-
ready: '
|
|
101
|
-
error: '
|
|
102
|
-
question: '
|
|
103
|
-
permission: '
|
|
100
|
+
ready: '작업 완료',
|
|
101
|
+
error: '오류가 발생했습니다',
|
|
102
|
+
question: '답변이 필요합니다',
|
|
103
|
+
permission: '권한이 필요합니다',
|
|
104
104
|
goal_complete: '목표 완료',
|
|
105
105
|
goal_blocked: '목표 차단됨',
|
|
106
|
-
goal_budget: '
|
|
107
|
-
update: '
|
|
106
|
+
goal_budget: '토큰 한도 도달',
|
|
107
|
+
update: '업데이트',
|
|
108
108
|
session: '세션',
|
|
109
109
|
}),
|
|
110
110
|
pl: Object.freeze({
|
|
111
|
-
ready: '
|
|
112
|
-
error: '
|
|
113
|
-
question: '
|
|
114
|
-
permission: '
|
|
111
|
+
ready: 'Zadanie ukończone',
|
|
112
|
+
error: 'Wystąpił błąd',
|
|
113
|
+
question: 'Potrzebna twoja odpowiedź',
|
|
114
|
+
permission: 'Potrzebne uprawnienie',
|
|
115
115
|
goal_complete: 'Cel ukończony',
|
|
116
116
|
goal_blocked: 'Cel zablokowany',
|
|
117
|
-
goal_budget: '
|
|
118
|
-
update: 'Aktualizacja
|
|
117
|
+
goal_budget: 'Osiągnięto limit tokenów',
|
|
118
|
+
update: 'Aktualizacja',
|
|
119
119
|
session: 'Sesja',
|
|
120
120
|
}),
|
|
121
121
|
ja: Object.freeze({
|
|
122
|
-
ready: '
|
|
123
|
-
error: '
|
|
124
|
-
question: '
|
|
125
|
-
permission: '
|
|
122
|
+
ready: 'タスク完了',
|
|
123
|
+
error: 'エラーが発生しました',
|
|
124
|
+
question: '回答が必要です',
|
|
125
|
+
permission: '許可が必要です',
|
|
126
126
|
goal_complete: '目標完了',
|
|
127
127
|
goal_blocked: '目標がブロックされました',
|
|
128
|
-
goal_budget: '
|
|
129
|
-
update: '
|
|
128
|
+
goal_budget: 'トークン上限に達しました',
|
|
129
|
+
update: '更新',
|
|
130
130
|
session: 'セッション',
|
|
131
131
|
}),
|
|
132
132
|
});
|
|
@@ -33,12 +33,14 @@ describe('apns-titles', () => {
|
|
|
33
33
|
|
|
34
34
|
it('localizes payload title by type and keeps session name as body', () => {
|
|
35
35
|
expect(localizeApnsPayload({ type: 'question', sessionName: 'Build fix' }, 'zh-CN')).toEqual({
|
|
36
|
-
title: '
|
|
36
|
+
title: '需要你回答',
|
|
37
37
|
body: 'Build fix',
|
|
38
38
|
badge: undefined,
|
|
39
39
|
tag: undefined,
|
|
40
40
|
data: undefined,
|
|
41
41
|
});
|
|
42
|
+
expect(resolveApnsTitle('ready', 'zh-CN')).toBe('任务已完成');
|
|
43
|
+
expect(resolveApnsTitle('ready', 'en')).toBe('Task completed');
|
|
42
44
|
expect(localizeApnsPayload({ type: 'ready' }, 'fr').body).toBe('Session');
|
|
43
45
|
expect(localizeApnsPayload({ type: 'ready' }, 'zh-CN').body).toBe('会话');
|
|
44
46
|
});
|
|
@@ -219,7 +219,7 @@ export const registerNotificationRoutes = (app, dependencies) => {
|
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
if (typeof addOrUpdateLiveActivityToken === 'function') {
|
|
222
|
-
await addOrUpdateLiveActivityToken(uiToken, token, activityId, sessionId);
|
|
222
|
+
await addOrUpdateLiveActivityToken(uiToken, token, activityId, sessionId, req.body?.items);
|
|
223
223
|
}
|
|
224
224
|
return res.json({ ok: true });
|
|
225
225
|
});
|
|
@@ -273,40 +273,6 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
273
273
|
return trimmed.length > 0 ? trimmed : undefined;
|
|
274
274
|
};
|
|
275
275
|
|
|
276
|
-
const formatMode = (raw) => {
|
|
277
|
-
const value = typeof raw === 'string' ? raw.trim() : '';
|
|
278
|
-
const normalized = value.length > 0 ? value : 'agent';
|
|
279
|
-
return normalized
|
|
280
|
-
.split(/[-_\s]+/)
|
|
281
|
-
.filter(Boolean)
|
|
282
|
-
.map((token) => token.charAt(0).toUpperCase() + token.slice(1))
|
|
283
|
-
.join(' ');
|
|
284
|
-
};
|
|
285
|
-
|
|
286
|
-
const formatModelId = (raw) => {
|
|
287
|
-
const value = typeof raw === 'string' ? raw.trim() : '';
|
|
288
|
-
if (!value) {
|
|
289
|
-
return 'Assistant';
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
const tokens = value.split(/[-_]+/).filter(Boolean);
|
|
293
|
-
const result = [];
|
|
294
|
-
for (let i = 0; i < tokens.length; i += 1) {
|
|
295
|
-
const current = tokens[i];
|
|
296
|
-
const next = tokens[i + 1];
|
|
297
|
-
if (/^\d+$/.test(current) && next && /^\d+$/.test(next)) {
|
|
298
|
-
result.push(`${current}.${next}`);
|
|
299
|
-
i += 1;
|
|
300
|
-
continue;
|
|
301
|
-
}
|
|
302
|
-
result.push(current);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return result
|
|
306
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
307
|
-
.join(' ');
|
|
308
|
-
};
|
|
309
|
-
|
|
310
276
|
// A session with an ACTIVE goal suppresses per-turn ready notifications;
|
|
311
277
|
// the session-goal runtime sends its own notification when the goal
|
|
312
278
|
// settles. Fetch failures fall through to normal notification behavior.
|
|
@@ -338,6 +304,16 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
338
304
|
|
|
339
305
|
const sessionId = extractSessionIdFromPayload(payload);
|
|
340
306
|
const notificationDirectory = extractDirectoryFromPayload(payload);
|
|
307
|
+
if ((payload.type === 'session.updated' || payload.type === 'session.created') && sessionId) {
|
|
308
|
+
const title = payload.properties?.info?.title;
|
|
309
|
+
if (typeof title === 'string' && title.trim()) {
|
|
310
|
+
try {
|
|
311
|
+
await sendLiveActivityEnd?.({ sessionId, title: title.trim() });
|
|
312
|
+
} catch (error) {
|
|
313
|
+
console.warn('[Live Activity] title update failed:', error?.message ?? error);
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
}
|
|
341
317
|
if ((payload.type === 'session.idle' || payload.type === 'session.error') && sessionId) {
|
|
342
318
|
const error = payload.properties?.error;
|
|
343
319
|
const errorText = typeof error?.message === 'string'
|
|
@@ -404,13 +380,13 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
404
380
|
}
|
|
405
381
|
lastReadyNotificationAt.set(sessionId, now);
|
|
406
382
|
|
|
407
|
-
let title =
|
|
408
|
-
let body =
|
|
383
|
+
let title = 'Task completed';
|
|
384
|
+
let body = '';
|
|
409
385
|
let sessionName = '';
|
|
410
386
|
|
|
411
387
|
try {
|
|
412
388
|
const templates = settings.notificationTemplates || {};
|
|
413
|
-
const completionTemplate = templates.completion || { title: '
|
|
389
|
+
const completionTemplate = templates.completion || { title: 'Task completed', message: '{session_name}' };
|
|
414
390
|
|
|
415
391
|
const variables = await buildTemplateVariables(payload, sessionId);
|
|
416
392
|
sessionName = typeof variables.session_name === 'string' ? variables.session_name : sessionName;
|
|
@@ -430,8 +406,10 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
430
406
|
const resolvedBody = resolveNotificationTemplate(completionTemplate.message, variables);
|
|
431
407
|
if (resolvedTitle) title = resolvedTitle;
|
|
432
408
|
if (shouldApplyResolvedTemplateMessage(completionTemplate.message, resolvedBody, variables)) body = resolvedBody;
|
|
409
|
+
if (!body) body = sessionName || resolvedBody || 'Session';
|
|
433
410
|
} catch (error) {
|
|
434
411
|
console.warn('[Notification] Template resolution failed, using defaults:', error?.message || error);
|
|
412
|
+
if (!body) body = sessionName || 'Session';
|
|
435
413
|
}
|
|
436
414
|
|
|
437
415
|
if (settings.nativeNotificationsEnabled) {
|
|
@@ -492,12 +470,8 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
492
470
|
const header = typeof firstQuestion?.header === 'string' ? firstQuestion.header.trim() : '';
|
|
493
471
|
const questionText = typeof firstQuestion?.question === 'string' ? firstQuestion.question.trim() : '';
|
|
494
472
|
|
|
495
|
-
let title =
|
|
496
|
-
|
|
497
|
-
: /build\s*agent/i.test(header)
|
|
498
|
-
? 'Switch to build mode'
|
|
499
|
-
: header || 'Input needed';
|
|
500
|
-
let body = questionText || 'Agent is waiting for your response';
|
|
473
|
+
let title = 'Needs your answer';
|
|
474
|
+
let body = '';
|
|
501
475
|
let sessionName = '';
|
|
502
476
|
|
|
503
477
|
try {
|
|
@@ -506,14 +480,16 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
506
480
|
variables.last_message = questionText || header || '';
|
|
507
481
|
|
|
508
482
|
const templates = settings.notificationTemplates || {};
|
|
509
|
-
const questionTemplate = templates.question || { title: '
|
|
483
|
+
const questionTemplate = templates.question || { title: 'Needs your answer', message: '{session_name}' };
|
|
510
484
|
|
|
511
485
|
const resolvedTitle = resolveNotificationTemplate(questionTemplate.title, variables);
|
|
512
486
|
const resolvedBody = resolveNotificationTemplate(questionTemplate.message, variables);
|
|
513
487
|
if (resolvedTitle) title = resolvedTitle;
|
|
514
488
|
if (shouldApplyResolvedTemplateMessage(questionTemplate.message, resolvedBody, variables)) body = resolvedBody;
|
|
489
|
+
if (!body) body = sessionName || resolvedBody || 'Session';
|
|
515
490
|
} catch (error) {
|
|
516
491
|
console.warn('[Notification] Question template resolution failed, using defaults:', error?.message || error);
|
|
492
|
+
if (!body) body = sessionName || 'Session';
|
|
517
493
|
}
|
|
518
494
|
|
|
519
495
|
if (settings.nativeNotificationsEnabled) {
|
|
@@ -618,8 +594,8 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
618
594
|
? sessionTitle.trim()
|
|
619
595
|
: permissionText || 'Agent is waiting for your approval';
|
|
620
596
|
|
|
621
|
-
let title = '
|
|
622
|
-
let body =
|
|
597
|
+
let title = 'Needs permission';
|
|
598
|
+
let body = '';
|
|
623
599
|
let sessionName = '';
|
|
624
600
|
|
|
625
601
|
try {
|
|
@@ -628,14 +604,14 @@ export const createNotificationTriggerRuntime = (deps) => {
|
|
|
628
604
|
variables.last_message = fallbackMessage;
|
|
629
605
|
|
|
630
606
|
const templates = settings.notificationTemplates || {};
|
|
631
|
-
const questionTemplate = templates.question || { title: '
|
|
607
|
+
const questionTemplate = templates.question || { title: 'Needs permission', message: '{session_name}' };
|
|
632
608
|
|
|
633
|
-
const resolvedTitle = resolveNotificationTemplate(questionTemplate.title, variables);
|
|
634
609
|
const resolvedBody = resolveNotificationTemplate(questionTemplate.message, variables);
|
|
635
|
-
if (resolvedTitle) title = resolvedTitle;
|
|
636
610
|
if (shouldApplyResolvedTemplateMessage(questionTemplate.message, resolvedBody, variables)) body = resolvedBody;
|
|
611
|
+
if (!body) body = sessionName || fallbackMessage || 'Session';
|
|
637
612
|
} catch (error) {
|
|
638
613
|
console.warn('[Notification] Permission template resolution failed, using defaults:', error?.message || error);
|
|
614
|
+
if (!body) body = sessionName || fallbackMessage || 'Session';
|
|
639
615
|
}
|
|
640
616
|
|
|
641
617
|
if (settings.nativeNotificationsEnabled) {
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { createProjectIdFromPath } from '../projects/project-id.js';
|
|
2
2
|
|
|
3
3
|
const DEFAULT_NOTIFICATION_TEMPLATES = {
|
|
4
|
+
completion: { title: 'Task completed', message: '{session_name}' },
|
|
5
|
+
error: { title: 'Something went wrong', message: '{session_name}' },
|
|
6
|
+
question: { title: 'Needs your answer', message: '{session_name}' },
|
|
7
|
+
subtask: { title: 'Task completed', message: '{session_name}' },
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const LEGACY_NOTIFICATION_TEMPLATES = {
|
|
4
11
|
completion: { title: '{agent_name} is ready', message: '{model_name} completed the task' },
|
|
5
12
|
error: { title: 'Tool error', message: '{last_message}' },
|
|
6
13
|
question: { title: 'Input needed', message: '{last_message}' },
|
|
@@ -20,6 +27,15 @@ const ensureNotificationTemplateShape = (templates) => {
|
|
|
20
27
|
if (!currentEntry || typeof currentEntry.title !== 'string' || typeof currentEntry.message !== 'string') {
|
|
21
28
|
changed = true;
|
|
22
29
|
}
|
|
30
|
+
const legacy = LEGACY_NOTIFICATION_TEMPLATES[event];
|
|
31
|
+
const isLegacyDefault = legacy
|
|
32
|
+
&& currentTitle === legacy.title
|
|
33
|
+
&& currentMessage === legacy.message;
|
|
34
|
+
if (isLegacyDefault) {
|
|
35
|
+
changed = true;
|
|
36
|
+
next[event] = { title: base.title, message: base.message };
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
23
39
|
next[event] = { title: currentTitle, message: currentMessage };
|
|
24
40
|
}
|
|
25
41
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./runtime-switch-BkpTTbEi.js";import{a as t,i as n,r}from"./vendor-zustand-B4dlGEM2.js";var i=null,a=null,o=null,s=new Set,c=!1,l=e=>{if(s.add(e),c||typeof window>`u`)return;c=!0;let t=()=>{for(let e of s)e()};try{window.addEventListener(`pagehide`,t,{capture:!0}),window.addEventListener(`beforeunload`,t,{capture:!0}),window.addEventListener(`visibilitychange`,()=>{typeof document<`u`&&document.visibilityState===`hidden`&&t()}),window.addEventListener(`freeze`,t)}catch{}},u=(e,t)=>{let n;try{n=e()}catch{return}let r=new Map,i=new Set,a,o=()=>{if(a=void 0,r.size===0&&i.size===0)return!0;let e=Array.from(r.entries()),o=Array.from(i);r.clear(),i.clear();let c=!0;for(let[i,a]of e)try{n.setItem(i,JSON.stringify(a,t?.replacer))}catch(e){console.error(`Failed to persist deferred storage value`,e),r.set(i,a),c=!1}for(let e of o)try{n.removeItem(e)}catch(t){console.error(`Failed to remove deferred storage value`,t),i.add(e),c=!1}return c||s(),c},s=()=>{a===void 0&&(a=setTimeout(o,0))};return l(o),{getItem:e=>{if(r.has(e))return r.get(e)??null;if(i.has(e))return null;let a=e=>e===null?null:JSON.parse(e,t?.reviver),o=n.getItem(e);return o instanceof Promise?o.then(a):a(o)},setItem:(e,t)=>{r.set(e,t),i.delete(e),s()},removeItem:e=>{r.delete(e),i.add(e),s()},flush:o}},d=e=>u(()=>h(),e),f=e=>{let t=new Map,n=new Set,r,i=()=>{if(r=void 0,t.size===0&&n.size===0)return;let i=Array.from(t.entries()),a=Array.from(n);t.clear(),n.clear();for(let[t,n]of i)try{e.setItem(t,n)}catch(e){console.error(`Failed to persist deferred storage value`,e)}for(let t of a)try{e.removeItem(t)}catch(e){console.error(`Failed to remove deferred storage value`,e)}},a=()=>{r===void 0&&(r=setTimeout(i,0))};return l(i),{getItem:r=>t.has(r)?t.get(r)??null:n.has(r)?null:e.getItem(r),setItem:(e,r)=>{t.set(e,r),n.delete(e),a()},removeItem:e=>{t.delete(e),n.add(e),a()},clear:()=>{t.clear(),n.clear(),r!==void 0&&(clearTimeout(r),r=void 0),e.clear()},key:t=>e.key(t),get length(){return e.length}}},p=e=>{if(typeof window>`u`)return null;try{return window[e]??null}catch{return null}},m=()=>{let e=new Map;return{getItem:t=>e.get(t)??null,setItem:(t,n)=>{e.set(t,n)},removeItem:t=>{e.delete(t)},clear:()=>{e.clear()},key:t=>Array.from(e.keys())[t]??null,get length(){return e.size}}},ee=()=>{let e=p(`localStorage`);if(!e)return m();let t=m(),n=!0,r=()=>{n=!1};return{getItem:i=>{if(n)try{let t=e.getItem(i);if(t!==null)return t}catch{r()}return t.getItem(i)},setItem:(i,a)=>{if(n)try{e.setItem(i,a),t.removeItem(i);return}catch{r();try{e.removeItem(i)}catch{}}t.setItem(i,a)},removeItem:n=>{try{e.removeItem(n)}catch{r()}t.removeItem(n)},clear:()=>{try{e.clear()}catch{r()}t.clear()},key:i=>{if(n)try{return e.key(i)}catch{r()}return t.key(i)},get length(){if(n)try{return e.length+t.length}catch{r()}return t.length}}},h=()=>(i||=ee(),i),te=()=>(o||=f(h()),o),ne=()=>{let e=p(`sessionStorage`);if(!e)return m();let t=m(),n=!0,r=()=>{n=!1};return{getItem:i=>{if(n)try{let t=e.getItem(i);if(t!==null)return t}catch{r()}return t.getItem(i)},setItem:(i,a)=>{if(n)try{e.setItem(i,a),t.removeItem(i);return}catch{r();try{e.removeItem(i)}catch{}}t.setItem(i,a)},removeItem:n=>{try{e.removeItem(n)}catch{r()}t.removeItem(n)},clear:()=>{try{e.clear()}catch{r()}t.clear()},key:i=>{if(n)try{return e.key(i)}catch{r()}return t.key(i)},get length(){if(n)try{return e.length+t.length}catch{r()}return t.length}}},re=()=>(a||=ne(),a);function ie(e,t){return t>=12?e:(e.chatRenderMode===`live`&&(e.chatRenderMode=`sorted`),e.activityRenderMode===`summary`&&(e.activityRenderMode=`collapsed`),e.showTurnChangedFiles===!1&&(e.showTurnChangedFiles=!0),e)}var g={markdown:`0.875rem`,code:`0.75rem`,uiHeader:`0.9375rem`,uiLabel:`0.8750rem`,meta:`0.875rem`,micro:`0.875rem`},ae={markdown:`0.9375rem`,code:`0.8125rem`,uiHeader:`0.875rem`,uiLabel:`0.8125rem`,meta:`0.8125rem`,micro:`0.75rem`},oe={markdown:`0.9063rem`,code:`0.8750rem`,uiHeader:`0.9063rem`,uiLabel:`0.8438rem`,meta:`0.8438rem`,micro:`0.7813rem`};function _(e){return`--text-${e.replace(/([A-Z])/g,`-$1`).toLowerCase()}`}function v(e=document.documentElement){return e.classList.contains(`mobile-pointer`)&&!e.classList.contains(`desktop-runtime`)}function se(e,t){return t?.mobile?ae[e]:g[e]}var y={semanticMarkdown:{fontSize:`var(--text-markdown)`},semanticCode:{fontSize:`var(--text-code)`},uiHeader:{fontSize:`var(--text-ui-header)`},uiLabel:{fontSize:`var(--text-ui-label)`},meta:{fontSize:`var(--text-meta)`},micro:{fontSize:`var(--text-micro)`},ui:{button:{fontSize:`var(--text-ui-label)`,lineHeight:`var(--ui-button-line-height)`,letterSpacing:`var(--ui-button-letter-spacing)`,fontWeight:`var(--ui-button-font-weight)`},buttonSmall:{fontSize:`var(--text-meta)`,lineHeight:`var(--ui-button-small-line-height)`,letterSpacing:`var(--ui-button-small-letter-spacing)`,fontWeight:`var(--ui-button-small-font-weight)`},buttonLarge:{fontSize:`var(--text-ui-label)`,lineHeight:`var(--ui-button-large-line-height)`,letterSpacing:`var(--ui-button-large-letter-spacing)`,fontWeight:`var(--ui-button-large-font-weight)`},label:{fontSize:`var(--text-meta)`,lineHeight:`var(--ui-label-line-height)`,letterSpacing:`var(--ui-label-letter-spacing)`,fontWeight:`var(--ui-label-font-weight)`},caption:{fontSize:`var(--text-micro)`,lineHeight:`var(--ui-caption-line-height)`,letterSpacing:`var(--ui-caption-letter-spacing)`,fontWeight:`var(--ui-caption-font-weight)`},badge:{fontSize:`var(--text-micro)`,lineHeight:`var(--ui-badge-line-height)`,letterSpacing:`var(--ui-badge-letter-spacing)`,fontWeight:`var(--ui-badge-font-weight)`},tooltip:{fontSize:`var(--text-micro)`,lineHeight:`var(--ui-tooltip-line-height)`,letterSpacing:`var(--ui-tooltip-letter-spacing)`,fontWeight:`var(--ui-tooltip-font-weight)`},input:{fontSize:`var(--text-ui-label)`,lineHeight:`var(--ui-input-line-height)`,letterSpacing:`var(--ui-input-letter-spacing)`,fontWeight:`var(--ui-input-font-weight)`},helperText:{fontSize:`var(--text-meta)`,lineHeight:`var(--ui-helper-text-line-height)`,letterSpacing:`var(--ui-helper-text-letter-spacing)`,fontWeight:`var(--ui-helper-text-font-weight)`}},code:{inline:{fontSize:`var(--text-code)`,lineHeight:`var(--code-inline-line-height)`,letterSpacing:`var(--code-inline-letter-spacing)`,fontWeight:`var(--code-inline-font-weight)`},block:{fontSize:`var(--text-code)`,lineHeight:`var(--code-block-line-height)`,letterSpacing:`var(--code-block-letter-spacing)`,fontWeight:`var(--code-block-font-weight)`},lineNumbers:{fontSize:`var(--text-micro)`,lineHeight:`var(--code-line-numbers-line-height)`,letterSpacing:`var(--code-line-numbers-letter-spacing)`,fontWeight:`var(--code-line-numbers-font-weight)`}},markdown:{body:{fontSize:`var(--text-markdown)`,lineHeight:`var(--markdown-body-line-height)`,letterSpacing:`var(--markdown-body-letter-spacing)`,fontWeight:`var(--markdown-body-font-weight)`},bodySmall:{fontSize:`var(--text-meta)`,lineHeight:`var(--markdown-body-small-line-height)`,letterSpacing:`var(--markdown-body-small-letter-spacing)`,fontWeight:`var(--markdown-body-small-font-weight)`},bodyLarge:{fontSize:`var(--text-markdown)`,lineHeight:`var(--markdown-body-large-line-height)`,letterSpacing:`var(--markdown-body-large-letter-spacing)`,fontWeight:`var(--markdown-body-large-font-weight)`},blockquote:{fontSize:`var(--text-markdown)`,lineHeight:`var(--markdown-blockquote-line-height)`,letterSpacing:`var(--markdown-blockquote-letter-spacing)`,fontWeight:`var(--markdown-blockquote-font-weight)`},list:{fontSize:`var(--text-markdown)`,lineHeight:`var(--markdown-list-line-height)`,letterSpacing:`var(--markdown-list-letter-spacing)`,fontWeight:`var(--markdown-list-font-weight)`},link:{fontSize:`var(--text-markdown)`,lineHeight:`var(--markdown-link-line-height)`,letterSpacing:`var(--markdown-link-letter-spacing)`,fontWeight:`var(--markdown-link-font-weight)`},code:{fontSize:`var(--text-code)`,lineHeight:`var(--markdown-code-line-height)`,letterSpacing:`var(--markdown-code-letter-spacing)`,fontWeight:`var(--markdown-code-font-weight)`},codeBlock:{fontSize:`var(--text-code)`,lineHeight:`var(--markdown-code-block-line-height)`,letterSpacing:`var(--markdown-code-block-letter-spacing)`,fontWeight:`var(--markdown-code-block-font-weight)`}},tool:{collapsed:{fontSize:`var(--text-code)`,lineHeight:`var(--code-block-line-height)`,letterSpacing:`var(--code-block-letter-spacing)`,fontWeight:`var(--code-block-font-weight)`},popup:{fontSize:`var(--text-code)`,lineHeight:`var(--code-block-line-height)`,letterSpacing:`var(--code-block-letter-spacing)`,fontWeight:`var(--code-block-font-weight)`},inline:{fontSize:`var(--text-code)`,lineHeight:`var(--code-inline-line-height)`,letterSpacing:`var(--code-inline-letter-spacing)`,fontWeight:`var(--code-inline-font-weight)`}}},b={padding:{collapsed:`0.375rem`,popup:`0.75rem`,popupContainer:`1rem`},backgroundOpacity:{muted:`30`,mutedAlt:`50`},getCollapsedStyles:()=>({...y.tool.collapsed,background:`transparent`,backgroundColor:`transparent`,margin:0,padding:b.padding.collapsed,borderRadius:0}),getPopupStyles:()=>({...y.tool.popup,background:`transparent`,backgroundColor:`transparent`,margin:0,padding:b.padding.popup,borderRadius:`0.75rem`}),getPopupContainerStyles:()=>({...y.tool.popup,background:`transparent`,backgroundColor:`transparent`,margin:0,padding:b.padding.popupContainer,borderRadius:`0.5rem`,overflowX:`auto`}),getInlineStyles:()=>({...y.tool.inline})},x=[{id:`inter`,label:`Inter`,description:`Modern UI sans with excellent readability at small sizes.`,stack:`"Inter", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Inter`,packageName:`@fontsource/inter`,filePrefix:`inter`,weights:[400,500,600]}},{id:`geist-sans`,label:`Geist Sans`,description:`Crisp sans-serif with a technical interface feel.`,stack:`"Geist Sans", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Geist Sans`,packageName:`@fontsource/geist-sans`,filePrefix:`geist-sans`,weights:[400,500,600]}},{id:`atkinson-hyperlegible`,label:`Atkinson Hyperlegible`,description:`Accessibility-focused sans-serif optimized for character distinction.`,stack:`"Atkinson Hyperlegible", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Atkinson Hyperlegible`,packageName:`@fontsource/atkinson-hyperlegible`,filePrefix:`atkinson-hyperlegible`,weights:[400,700]}},{id:`source-sans-3`,label:`Source Sans 3`,description:`Adobe sans-serif tuned for clean, readable interfaces.`,stack:`"Source Sans 3", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Source Sans 3`,packageName:`@fontsource/source-sans-3`,filePrefix:`source-sans-3`,weights:[400,500,600]}},{id:`roboto`,label:`Roboto`,description:`Familiar Material-style sans-serif with broad UI usage.`,stack:`"Roboto", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Roboto`,packageName:`@fontsource/roboto`,filePrefix:`roboto`,weights:[400,500,600]}},{id:`noto-sans`,label:`Noto Sans`,description:`Readable sans-serif with strong international coverage.`,stack:`"Noto Sans", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Noto Sans`,packageName:`@fontsource/noto-sans`,filePrefix:`noto-sans`,weights:[400,500,600]}},{id:`dm-sans`,label:`DM Sans`,description:`Modern product UI sans-serif with friendly proportions.`,stack:`"DM Sans", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`DM Sans`,packageName:`@fontsource/dm-sans`,filePrefix:`dm-sans`,weights:[400,500,600]}},{id:`manrope`,label:`Manrope`,description:`Polished geometric sans-serif for modern app interfaces.`,stack:`"Manrope", "SF Pro Text", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif`,source:{family:`Manrope`,packageName:`@fontsource/manrope`,filePrefix:`manrope`,weights:[400,500,600]}},{id:`system`,label:`System`,description:`Native operating system interface font.`,stack:`-apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif`}],S=[{id:`jetbrains-mono`,label:`JetBrains Mono`,description:`Developer-focused monospace with strong punctuation clarity.`,stack:`"JetBrains Mono", "SFMono-Regular", "Menlo", monospace`,source:{family:`JetBrains Mono`,packageName:`@fontsource/jetbrains-mono`,filePrefix:`jetbrains-mono`,weights:[400,500,600]}},{id:`fira-code`,label:`Fira Code`,description:`Readable coding font with ligature support.`,stack:`"Fira Code", "SFMono-Regular", "Menlo", monospace`,source:{family:`Fira Code`,packageName:`@fontsource/fira-code`,filePrefix:`fira-code`,weights:[400,500,600]}},{id:`geist-mono`,label:`Geist Mono`,description:`Sharp monospace pair for Geist Sans.`,stack:`"Geist Mono", "SFMono-Regular", "Menlo", monospace`,source:{family:`Geist Mono`,packageName:`@fontsource/geist-mono`,filePrefix:`geist-mono`,weights:[400,500,600]}},{id:`commit-mono`,label:`Commit Mono`,description:`Code-oriented monospace with polished editor ergonomics.`,stack:`"Commit Mono", "SFMono-Regular", "Menlo", monospace`,source:{family:`Commit Mono`,packageName:`@fontsource/commit-mono`,filePrefix:`commit-mono`,weights:[400,500,600]}},{id:`source-code-pro`,label:`Source Code Pro`,description:`Adobe monospace designed for source code readability.`,stack:`"Source Code Pro", "SFMono-Regular", "Menlo", monospace`,source:{family:`Source Code Pro`,packageName:`@fontsource/source-code-pro`,filePrefix:`source-code-pro`,weights:[400,500,600]}},{id:`cascadia-code`,label:`Cascadia Code`,description:`Microsoft coding font popular in terminals and editors.`,stack:`"Cascadia Code", "SFMono-Regular", "Menlo", monospace`,source:{family:`Cascadia Code`,packageName:`@fontsource/cascadia-code`,filePrefix:`cascadia-code`,weights:[400,500,600]}},{id:`roboto-mono`,label:`Roboto Mono`,description:`Neutral monospace companion to Roboto.`,stack:`"Roboto Mono", "SFMono-Regular", "Menlo", monospace`,source:{family:`Roboto Mono`,packageName:`@fontsource/roboto-mono`,filePrefix:`roboto-mono`,weights:[400,500,600]}},{id:`iosevka`,label:`Iosevka`,description:`Compact monospace for dense code and terminal layouts.`,stack:`"Iosevka", "SFMono-Regular", "Menlo", monospace`,source:{family:`Iosevka`,packageName:`@fontsource/iosevka`,filePrefix:`iosevka`,weights:[400,500,600]}},{id:`system-mono`,label:`System Mono`,description:`Native operating system monospace font.`,stack:`ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace`}],C=e=>Object.fromEntries(e.map(e=>[e.id,e])),ce=C(x),le=C(S),ue=`system`,de=`system-mono`,fe=e=>typeof e==`string`&&e in ce,pe=e=>typeof e==`string`&&e in le,w=`openchamber.mobileKeyboardMode`,me=`meta[name="viewport"]`,T=`width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover`,he=()=>!0;function E(e,t=`resize-content`){return e===`native`||e===`resize-content`?e:t}var ge=e=>E(e)===`resize-content`?`${T}, interactive-widget=resizes-content`:T,_e=()=>{if(typeof window>`u`)return`resize-content`;try{return E(localStorage.getItem(w))}catch{return`resize-content`}},D=e=>{let t=E(e);if(typeof window<`u`)try{t===`resize-content`?localStorage.removeItem(w):localStorage.setItem(w,t)}catch{}return t},ve=e=>{let t=D(e);if(typeof document>`u`)return t;document.documentElement.setAttribute(`data-oc-mobile-keyboard-mode`,t);let n=document.querySelector(me);if(n instanceof HTMLMetaElement){let e=ge(t);n.getAttribute(`content`)!==e&&n.setAttribute(`content`,e)}return t};function O(e){return e===`vim`?`vim`:`default`}var k={completion:{title:`{agent_name} is ready`,message:`{last_message}`},error:{title:`Tool error`,message:`{last_message}`},question:{title:`{agent_name} needs input`,message:`{last_message}`},subtask:{title:`Subtask complete`,message:`{last_message}`}},A={completion:{title:``,message:``},error:{title:``,message:``},question:{title:``,message:``},subtask:{title:``,message:``}},j=(e,t)=>e?e.title===t.title&&e.message===t.message:!1,ye=e=>{if(!e||typeof e!=`object`)return!1;let t=e;return j(t.completion,k.completion)&&j(t.error,k.error)&&j(t.question,k.question)&&j(t.subtask,k.subtask)},M=380,be=380,xe=1400,N=12,Se=40,P=120,F=260,I=new Map,L=t=>(t??e()).trim()||`default`,R=e=>{if(!e)return``;let t=e.replace(/\\/g,`/`),n=t.startsWith(`//`),r=t.replace(/\/+$/g,``);return r=r.replace(/\/+/g,`/`),n&&!r.startsWith(`//`)&&(r=`/${r}`),r===``?t.startsWith(`/`)?`/`:``:r},z=e=>Number.isFinite(e)?Math.min(xe,Math.max(be,Math.round(e))):M,B=e=>{if(typeof e!=`string`)return null;let t=e.trim();return t?t.replace(/\\/g,`/`):null},V=e=>{if(typeof e!=`string`)return null;let t=e.trim();return t?t.length>P?t.slice(0,P):t:null},H=e=>e===`working`||e===`staged`||e===`turn`?e:null,U=e=>typeof e==`string`&&e.trim()||null,W=e=>typeof e==`string`&&e.trim()||null,Ce=(e,t)=>(e===`file`||e===`preview`)&&t||e,G=(e,t,n)=>{if(e===`diff`||e===`file-diff`)return e;if(typeof n==`string`){let e=n.trim();if(e)return e}return Ce(e,t)},K=(e,t)=>t===e?e:`${e}:${t}`,q=e=>e===`turn-diff-outside-workspace`?e:null,we=e=>{let t=B(e.targetPath),n=G(e.mode,t,e.dedupeKey);return{id:K(e.mode,n),mode:e.mode,targetPath:t,dedupeKey:n,label:V(e.label),sessionTitleFallback:V(e.sessionTitleFallback),readOnly:e.readOnly===!0,stagedDiff:e.stagedDiff===!0,diffScope:H(e.diffScope)??(e.stagedDiff===!0?`staged`:`working`),diffTargetLine:typeof e.diffTargetLine==`number`&&Number.isFinite(e.diffTargetLine)?Math.max(1,Math.trunc(e.diffTargetLine)):null,diffTurnMessageId:U(e.diffTurnMessageId),diffSessionId:W(e.diffSessionId),fileNotice:e.mode===`file`?q(e.fileNotice):null,touchedAt:Date.now()}},Te=(e,t,n)=>{if(e.length<=t)return e;let r=[...e].sort((e,t)=>e.touchedAt-t.touchedAt).filter(e=>e.id!==n),i=e.length-t;if(i<=0||r.length===0)return e.slice(-t);let a=new Set(r.slice(0,i).map(e=>e.id));return e.filter(e=>!a.has(e.id))},J=e=>{if(!Array.isArray(e))return[];let t=[],n=new Set;for(let r of e){if(!r||typeof r!=`object`)continue;let e=r;if(e.mode!==`diff`&&e.mode!==`file-diff`&&e.mode!==`file`&&e.mode!==`context`&&e.mode!==`chat`&&e.mode!==`preview`&&e.mode!==`browser`)continue;let i=B(typeof e.targetPath==`string`?e.targetPath:null),a=G(e.mode,i,typeof e.dedupeKey==`string`?e.dedupeKey:null),o=K(e.mode,a);!o||n.has(o)||(n.add(o),t.push({id:o,mode:e.mode,targetPath:i,dedupeKey:a,label:V(typeof e.label==`string`?e.label:null),sessionTitleFallback:V(typeof e.sessionTitleFallback==`string`?e.sessionTitleFallback:null),readOnly:e.readOnly===!0,stagedDiff:e.stagedDiff===!0,diffScope:H(e.diffScope)??(e.stagedDiff===!0?`staged`:`working`),diffTargetLine:typeof e.diffTargetLine==`number`&&Number.isFinite(e.diffTargetLine)?Math.max(1,Math.trunc(e.diffTargetLine)):null,diffTurnMessageId:U(e.diffTurnMessageId),diffSessionId:W(e.diffSessionId),fileNotice:e.mode===`file`?q(e.fileNotice):null,touchedAt:typeof e.touchedAt==`number`&&Number.isFinite(e.touchedAt)?e.touchedAt:Date.now()}))}return t},Y=(e,t)=>t&&e.some(e=>e.id===t)?t:e.length===0?null:e[e.length-1].id,X=e=>{if(e){let t=J(e.tabs),n=Y(t,e.activeTabId);return{...e,tabs:t,activeTabId:n,touchedAt:Date.now()}}return{isOpen:!1,expanded:!1,tabs:[],activeTabId:null,width:M,touchedAt:Date.now()}},Z=(e,t)=>{let n=we(t),r=e.tabs.findIndex(e=>e.id===n.id),i=r===-1?[...e.tabs,n]:e.tabs.map((e,t)=>t===r?{...e,diffTargetLine:n.diffTargetLine,diffTurnMessageId:n.diffTurnMessageId,diffSessionId:n.diffSessionId,mode:n.mode,targetPath:n.targetPath||e.targetPath,dedupeKey:n.dedupeKey,label:n.label,sessionTitleFallback:n.sessionTitleFallback||e.sessionTitleFallback,stagedDiff:n.stagedDiff,diffScope:n.diffScope,readOnly:n.readOnly,fileNotice:n.mode===`file`?n.fileNotice:null,touchedAt:Date.now()}:e),a=n.id,o=Te(i,N,a);return{...e,isOpen:!0,tabs:o,activeTabId:Y(o,a),touchedAt:Date.now()}},Ee=(e,t)=>{let n=e.tabs.filter(e=>e.id!==t),r=e.activeTabId===t?n[n.length-1]?.id??null:Y(n,e.activeTabId);return{...e,tabs:n,activeTabId:r,isOpen:n.length>0&&e.isOpen,touchedAt:Date.now()}},De=(e,t,n)=>{if(t===n)return e;let r=e.tabs.findIndex(e=>e.id===t),i=e.tabs.findIndex(e=>e.id===n);if(r===-1||i===-1)return e;let a=[...e.tabs],[o]=a.splice(r,1);return o?(a.splice(i,0,o),{...e,tabs:a,touchedAt:Date.now()}):e},Oe=(e,t,n)=>({...e,tabs:e.tabs.map(e=>e.id===t?{...e,targetPath:n}:e)}),Q=e=>{if(!e||typeof e!=`object`)return{};let t=e,n={};for(let[e,r]of Object.entries(t)){let t=R(e);if(!t||!r||typeof r!=`object`)continue;let i=r,a=J(i.tabs),o=typeof i.activeTabId==`string`?i.activeTabId:null;a.length===0&&(i.mode===`diff`||i.mode===`file-diff`||i.mode===`file`||i.mode===`context`||i.mode===`chat`)&&(a=[we({mode:i.mode,targetPath:typeof i.targetPath==`string`?i.targetPath:null,dedupeKey:typeof i.dedupeKey==`string`?i.dedupeKey:null,label:typeof i.label==`string`?i.label:null})],o=a[0]?.id??null);let s=Y(a,o),c=Te(a,N,s);n[t]={isOpen:i.isOpen===!0,expanded:i.expanded===!0,tabs:c,activeTabId:Y(c,s),width:z(typeof i.width==`number`?i.width:M),touchedAt:typeof i.touchedAt==`number`&&Number.isFinite(i.touchedAt)?i.touchedAt:Date.now()}}return n},$=(e,t)=>{let n=Object.entries(e);if(n.length<=t)return e;n.sort((e,t)=>(t[1]?.touchedAt??0)-(e[1]?.touchedAt??0));let r={};for(let[e,i]of n.slice(0,t))r[e]=i;return r},ke=(e,t)=>{let n=Object.entries(e);if(n.length<=t)return e;n.sort((e,t)=>(t[1]?.touchedAt??0)-(e[1]?.touchedAt??0));let r={};for(let[e,i]of n.slice(0,t))r[e]=i;return r},Ae=(e,t)=>{let n=R((t||``).trim())||null,r=n?e.contextPanelByDirectory[n]:void 0;return{isRightSidebarOpen:e.isRightSidebarOpen,rightSidebarTab:e.rightSidebarTab,contextPanelDirectory:n,contextPanelIsOpen:!!(r?.isOpen&&r.tabs.length>0),contextPanelActiveTabId:r?.activeTabId??null,contextPanelExpanded:!!r?.expanded,touchedAt:Date.now()}},je=(e,t,n)=>{let r=R((t||``).trim());if(!r)return e;let i=e[r];if(!i)return e;let a=!!(n?.contextPanelIsOpen&&n.contextPanelDirectory===r&&i.tabs.length>0),o=a?Y(i.tabs,n?.contextPanelActiveTabId??i.activeTabId):i.activeTabId,s=a?!!n?.contextPanelExpanded:i.expanded;return i.isOpen===a&&i.activeTabId===o&&i.expanded===s?e:{...e,[r]:{...i,isOpen:a,activeTabId:o,expanded:s,touchedAt:Date.now()}}},Me=t()(r(n((e,t)=>({theme:`system`,isMultiRunLauncherOpen:!1,isSidebarOpen:!0,sidebarWidth:F,hasManuallyResizedLeftSidebar:!1,isRightSidebarOpen:!1,rightSidebarWidth:360,hasManuallyResizedRightSidebar:!1,rightSidebarTab:`git`,contextPanelByDirectory:{},contextToolDiffByDirectory:{},sessionWorkspacePanelById:{},contextPanelsOpenBeforeRightSidebarCollapse:[],isBottomTerminalOpen:!1,isBottomTerminalExpanded:!1,bottomTerminalHeight:300,hasManuallyResizedBottomTerminal:!1,isSessionSwitcherOpen:!1,isSessionDropdownOpen:!1,activeMainTab:`chat`,mainTabGuard:null,sidebarOpenBeforeFullscreenTab:null,pendingDiffFile:null,pendingDiffStaged:!1,pendingDiffScope:null,pendingDiffLine:null,pendingDiagramFile:null,pendingFileNavigation:null,pendingFileFocusPath:null,pendingFileViewerMode:null,isMobile:!1,isCommandPaletteOpen:!1,isHelpDialogOpen:!1,isAboutDialogOpen:!1,isOpenCodeStatusDialogOpen:!1,openCodeStatusText:``,isSessionCreateDialogOpen:!1,isScheduledTasksDialogOpen:!1,isArchivedSessionsDialogOpen:!1,isSettingsDialogOpen:!1,isNewWorktreeDialogOpen:!1,isModelSelectorOpen:!1,isAgentSelectorOpen:!1,isModelSelectorInstant:!1,isAgentSelectorInstant:!1,sidebarSection:`sessions`,settingsPage:`home`,settingsHasOpenedOnce:!1,settingsProjectsSelectedId:null,settingsRemoteInstancesSelectedId:null,eventStreamStatus:`idle`,eventStreamHint:null,showReasoningTraces:!0,sessionTitleRefreshEnabled:!0,sessionGoalEnabled:!0,sessionGoalDefaultBudgetEnabled:!1,sessionGoalDefaultBudget:2e5,collapsibleThinkingBlocks:!0,chatRenderMode:`sorted`,activityRenderMode:`collapsed`,showDeletionDialog:!0,autoDeleteEnabled:!1,autoDeleteAfterDays:30,sessionRetentionAction:`archive`,autoDeleteLastRunAt:null,messageLimit:200,fontSize:100,codeFontSize:100,globalDraftStarters:null,terminalFontSize:13,editorFontSize:13,uiFont:ue,monoFont:de,padding:100,cornerRadius:18,inputBarOffset:0,mobileKeyboardMode:_e(),favoriteModels:[],hiddenModels:[],providerOrder:[],collapsedModelProviders:[],recentModels:[],recentAgents:[],recentEfforts:{},diffLayoutPreference:`inline`,diffFileLayout:{},diffWrapLines:!1,gitChangesViewMode:`tree`,isTimelineDialogOpen:!1,isPromptNavigatorPanelOpen:!1,isImagePreviewOpen:!1,nativeNotificationsEnabled:!1,notificationMode:`hidden-only`,notifyOnSubtasks:!1,dockBadgeEnabled:!0,notifyOnCompletion:!0,notifyOnError:!0,notifyOnQuestion:!0,notificationTemplates:{completion:{...A.completion},error:{...A.error},question:{...A.question},subtask:{...A.subtask}},summarizeLastMessage:!1,summaryThreshold:200,summaryLength:100,maxLastMessageLength:250,showTerminalQuickKeysOnDesktop:!1,persistChatDraft:!0,showOpenCodeUpdateNotifications:!0,inputSpellcheckEnabled:!1,wideChatLayoutEnabled:!1,codeBlockLineWrap:!0,showToolFileIcons:!0,showTurnChangedFiles:!0,showExpandedBashTools:!1,showSubagentTaskDetails:!1,timeFormatPreference:`auto`,weekStartPreference:`auto`,desktopWindowControlsPosition:`auto`,mermaidRenderingMode:`svg`,userMessageRenderingMode:`markdown`,collapsibleUserMessages:!0,stickyUserHeader:!1,promptNavigatorEnabled:!1,expandedEditorToolbar:!1,showSplitAssistantMessageActions:!1,showAssistantTps:!0,allowPromptingSubagentSessions:!1,isMobileSessionStatusBarCollapsed:!1,mobileSessionPanelOpen:!1,mobileSessionFilterProjectId:null,otaChannelOverride:null,isExpandedInput:!1,reportUsage:!1,shortcutOverrides:{},fileEditorKeymap:`default`,setTheme:n=>{e({theme:n}),t().applyTheme()},toggleSidebar:()=>{e(e=>{let t=!e.isSidebarOpen;return t&&!e.hasManuallyResizedLeftSidebar?{isSidebarOpen:t,sidebarWidth:F}:{isSidebarOpen:t}})},setSidebarOpen:t=>{e(e=>e.isSidebarOpen===t?t&&!e.hasManuallyResizedLeftSidebar&&e.sidebarWidth!==F?{isSidebarOpen:t,sidebarWidth:F}:e:t&&!e.hasManuallyResizedLeftSidebar?{isSidebarOpen:t,sidebarWidth:F}:{isSidebarOpen:t})},setSidebarWidth:t=>{e({sidebarWidth:t,hasManuallyResizedLeftSidebar:!0})},toggleRightSidebar:()=>{e(e=>{if(e.isRightSidebarOpen){let t=Object.entries(e.contextPanelByDirectory).filter(([,e])=>e.isOpen&&e.tabs.length>0).map(([e])=>e);return{isRightSidebarOpen:!1,contextPanelByDirectory:t.length===0?e.contextPanelByDirectory:Object.fromEntries(Object.entries(e.contextPanelByDirectory).map(([e,n])=>[e,t.includes(e)?{...n,isOpen:!1}:n])),contextPanelsOpenBeforeRightSidebarCollapse:t}}let t=e.contextPanelsOpenBeforeRightSidebarCollapse.length===0?e.contextPanelByDirectory:Object.fromEntries(Object.entries(e.contextPanelByDirectory).map(([t,n])=>[t,e.contextPanelsOpenBeforeRightSidebarCollapse.includes(t)&&n.tabs.length>0?{...n,isOpen:!0}:n]));return e.hasManuallyResizedRightSidebar?{isRightSidebarOpen:!0,contextPanelByDirectory:t,contextPanelsOpenBeforeRightSidebarCollapse:[]}:{isRightSidebarOpen:!0,rightSidebarWidth:360,contextPanelByDirectory:t,contextPanelsOpenBeforeRightSidebarCollapse:[]}})},setRightSidebarOpen:t=>{e(e=>e.isRightSidebarOpen===t?e:{isRightSidebarOpen:t,rightSidebarWidth:t&&!e.hasManuallyResizedRightSidebar&&e.rightSidebarWidth!==360?360:e.rightSidebarWidth})},setRightSidebarWidth:t=>{e({rightSidebarWidth:Math.min(860,Math.max(360,t)),hasManuallyResizedRightSidebar:!0})},setRightSidebarTab:t=>{e({rightSidebarTab:t})},syncWorkspacePanelsForSessionSwitch:({previousSessionId:t,previousDirectory:n,nextSessionId:r,nextDirectory:i})=>{let a=typeof t==`string`?t.trim():``,o=typeof r==`string`?r.trim():``;a!==o&&e(e=>{let t=e.sessionWorkspacePanelById;a&&(t={...t,[a]:Ae(e,n)});let r=o?t[o]:void 0,s=je(e.contextPanelByDirectory,i,r),c=R((n||``).trim()),l=R((i||``).trim()),u=s;if(c&&c!==l){let e=u[c];e?.isOpen&&(u={...u,[c]:{...e,isOpen:!1,touchedAt:Date.now()}})}let d=r?r.isRightSidebarOpen:!1,f=r?.rightSidebarTab??e.rightSidebarTab;return{sessionWorkspacePanelById:ke(t,Se),contextPanelByDirectory:u,isRightSidebarOpen:d,rightSidebarTab:f,contextPanelsOpenBeforeRightSidebarCollapse:[]}})},openContextPanelTab:(t,n)=>{let r=R((t||``).trim());r&&e(e=>{let t=e.contextPanelByDirectory[r],i=X(t),a={...e.contextPanelByDirectory,[r]:Z(i,n)};if(n.mode===`diff`||n.mode===`file-diff`){let t={...e.contextToolDiffByDirectory};return delete t[r],{contextPanelByDirectory:$(a,20),contextToolDiffByDirectory:t}}return{contextPanelByDirectory:$(a,20)}})},openContextDiff:(e,n,r=!1,i=null,a,o,s)=>{let c=R((e||``).trim()),l=(n||``).trim();if(!c||!l)return;let u=H(i)??(r?`staged`:`working`);t().openContextPanelTab(c,{mode:`diff`,targetPath:l,stagedDiff:u===`staged`,diffScope:u,diffTargetLine:a,diffTurnMessageId:o,diffSessionId:s})},openContextToolDiff:(t,n,r,i,a,o)=>{let s=R((t||``).trim()),c=(n||``).trim(),l=r.flatMap(e=>{let t=B(e.path),n=typeof e.patch==`string`?e.patch:``;return t&&n.trim()?[{path:t,patch:n}]:[]});if(!s||!c||l.length===0)return;let u={mode:`diff`,targetPath:c,stagedDiff:!1,diffScope:`turn`,diffTargetLine:i,diffTurnMessageId:a,diffSessionId:o};e(e=>{let t=e.contextPanelByDirectory[s],n=X(t),r=$({...e.contextPanelByDirectory,[s]:Z(n,u)},20),i=new Set(Object.keys(r)),o=Object.fromEntries(Object.entries(e.contextToolDiffByDirectory).filter(([e])=>i.has(e)));return o[s]={targetPath:c,patches:l,turnMessageId:U(a)},{contextPanelByDirectory:r,contextToolDiffByDirectory:o}})},openContextFileDiff:(e,n,r=!1,i=null)=>{let a=R((e||``).trim()),o=(n||``).trim();if(!a||!o)return;let s=H(i)??(r?`staged`:`working`);t().openContextPanelTab(a,{mode:`file-diff`,targetPath:o,stagedDiff:s===`staged`,diffScope:s})},openContextFile:(e,n,r)=>{let i=R((e||``).trim()),a=B(n);!i||!a||(t().openContextPanelTab(i,{mode:`file`,targetPath:a,fileNotice:q(r?.fileNotice)}),t().setPendingFileFocusPath(a),t().setPendingFileNavigation(null),t().setPendingFileViewerMode(r?.viewerMode??null))},openContextFileAtLine:(e,n,r,i)=>{let a=R((e||``).trim()),o=B(n),s=Number.isFinite(r)?Math.max(1,Math.trunc(r)):1,c=Number.isFinite(i)?Math.max(1,Math.trunc(i)):1;!a||!o||(t().openContextPanelTab(a,{mode:`file`,targetPath:o}),t().setPendingFileFocusPath(null),t().setPendingFileNavigation({path:o,line:s,column:c}))},openContextOverview:e=>{let n=R((e||``).trim());n&&t().openContextPanelTab(n,{mode:`context`})},openContextPreview:(e,n)=>{let r=R((e||``).trim()),i=(n||``).trim();if(!r||!i)return;let a=null;try{let e=new URL(i);(e.protocol===`http:`||e.protocol===`https:`)&&(a=e.host||e.hostname||`Preview`)}catch{}t().openContextPanelTab(r,{mode:`preview`,targetPath:i,dedupeKey:i,label:a})},openContextBrowser:(e,n=``)=>{let r=R((e||``).trim());if(!r)return;let i=typeof n==`string`&&n.trim().length>0?n.trim():``;t().openContextPanelTab(r,{mode:`browser`,targetPath:i,dedupeKey:`desktop-browser`,label:`Browser`})},setContextPanelTabTargetPath:(t,n,r)=>{let i=R((t||``).trim()),a=(n||``).trim();!i||!a||e(e=>{let t=e.contextPanelByDirectory[i];return t?{contextPanelByDirectory:{...e.contextPanelByDirectory,[i]:Oe(t,a,r)}}:e})},setActiveContextPanelTab:(t,n)=>{let r=R((t||``).trim()),i=(n||``).trim();!r||!i||e(e=>{let t=e.contextPanelByDirectory[r],n=X(t);return!n.tabs.some(e=>e.id===i)||n.activeTabId===i&&n.isOpen?e:{contextPanelByDirectory:$({...e.contextPanelByDirectory,[r]:{...n,isOpen:!0,activeTabId:i,touchedAt:Date.now(),tabs:n.tabs.map(e=>e.id===i?{...e,touchedAt:Date.now()}:e)}},20)}})},reorderContextPanelTabs:(t,n,r)=>{let i=R((t||``).trim()),a=(n||``).trim(),o=(r||``).trim();!i||!a||!o||e(e=>{let t=e.contextPanelByDirectory[i],n=X(t);if(!n.tabs.some(e=>e.id===a)||!n.tabs.some(e=>e.id===o))return e;let r=De(n,a,o);return r.tabs===n.tabs?e:{contextPanelByDirectory:$({...e.contextPanelByDirectory,[i]:r},20)}})},closeContextPanelTab:(t,n)=>{let r=R((t||``).trim()),i=(n||``).trim();!r||!i||e(e=>{let t=e.contextPanelByDirectory[r],n=X(t);if(!n.tabs.some(e=>e.id===i))return e;let a={...e.contextPanelByDirectory,[r]:Ee(n,i)};if(i===`diff`){let t={...e.contextToolDiffByDirectory};return delete t[r],{contextPanelByDirectory:$(a,20),contextToolDiffByDirectory:t}}return{contextPanelByDirectory:$(a,20)}})},closeActiveContextPanelTab:e=>{let n=R((e||``).trim());if(!n)return!1;let r=t().contextPanelByDirectory[n];if(!r?.isOpen||r.tabs.length===0)return!1;let i=Y(r.tabs,r.activeTabId);return i?(t().closeContextPanelTab(n,i),!0):!1},closeContextPanel:t=>{let n=R((t||``).trim());n&&e(e=>{let t=e.contextPanelByDirectory[n];return!t||!t.isOpen?e:{contextPanelByDirectory:$({...e.contextPanelByDirectory,[n]:{...X(t),isOpen:!1}},20)}})},toggleContextPanelExpanded:t=>{let n=R((t||``).trim());n&&e(e=>{let t=e.contextPanelByDirectory[n],r=X(t);return{contextPanelByDirectory:$({...e.contextPanelByDirectory,[n]:{...r,expanded:!r.expanded}},20)}})},setContextPanelWidth:(t,n)=>{let r=R((t||``).trim());r&&e(e=>{let t=e.contextPanelByDirectory[r],i=X(t);return{contextPanelByDirectory:$({...e.contextPanelByDirectory,[r]:{...i,width:z(n)}},20)}})},toggleBottomTerminal:()=>{e(e=>{let t=!e.isBottomTerminalOpen;return t&&typeof window<`u`?{isBottomTerminalOpen:t,bottomTerminalHeight:Math.floor(window.innerHeight*.32),hasManuallyResizedBottomTerminal:!1}:{isBottomTerminalOpen:t}})},setBottomTerminalOpen:t=>{e(e=>{if(e.isBottomTerminalOpen===t){if(!t)return e;if(!e.hasManuallyResizedBottomTerminal&&typeof window<`u`){let n=Math.floor(window.innerHeight*.32);return e.bottomTerminalHeight===n&&e.hasManuallyResizedBottomTerminal===!1?e:{isBottomTerminalOpen:t,bottomTerminalHeight:n,hasManuallyResizedBottomTerminal:!1}}return e}return t&&typeof window<`u`?{isBottomTerminalOpen:t,bottomTerminalHeight:Math.floor(window.innerHeight*.32),hasManuallyResizedBottomTerminal:!1}:{isBottomTerminalOpen:t}})},setBottomTerminalExpanded:t=>{e({isBottomTerminalExpanded:t})},setBottomTerminalHeight:t=>{e({bottomTerminalHeight:t,hasManuallyResizedBottomTerminal:!0})},setSessionSwitcherOpen:n=>{t().isSessionSwitcherOpen!==n&&e({isSessionSwitcherOpen:n})},setSessionDropdownOpen:n=>{t().isSessionDropdownOpen!==n&&e({isSessionDropdownOpen:n})},setMainTabGuard:n=>{t().mainTabGuard!==n&&e({mainTabGuard:n})},setActiveMainTab:n=>{let r=t().mainTabGuard;return r&&!r(n)?!1:(I.set(L(),n),e({activeMainTab:n}),!0)},prepareForRuntimeSwitch:n=>{I.set(L(n),t().activeMainTab),e({contextToolDiffByDirectory:{}})},restoreForRuntimeSwitch:t=>{e({activeMainTab:I.get(L(t))??`chat`})},setPendingDiffFile:(t,n=!1,r=null,i)=>{e({pendingDiffFile:t,pendingDiffStaged:t?n:!1,pendingDiffScope:t?r:null,pendingDiffLine:t&&typeof i==`number`&&Number.isFinite(i)?Math.max(1,Math.trunc(i)):null})},setPendingDiagramFile:t=>{e({pendingDiagramFile:t})},setPendingFileNavigation:t=>{e({pendingFileNavigation:t})},setPendingFileFocusPath:t=>{e({pendingFileFocusPath:t})},setPendingFileViewerMode:t=>{e({pendingFileViewerMode:t})},navigateToDiff:(n,r=!1,i=null,a)=>{let o=t().mainTabGuard;o&&!o(`diff`)||e({pendingDiffFile:n,pendingDiffStaged:r,pendingDiffScope:i,pendingDiffLine:typeof a==`number`&&Number.isFinite(a)?Math.max(1,Math.trunc(a)):null,activeMainTab:`diff`})},consumePendingDiffFile:()=>{let{pendingDiffFile:n}=t();return n&&e({pendingDiffFile:null,pendingDiffStaged:!1,pendingDiffScope:null,pendingDiffLine:null}),n},navigateToDiagram:n=>{let r=t().mainTabGuard;r&&!r(`diagram`)||e({pendingDiagramFile:n,activeMainTab:`diagram`})},consumePendingDiagramFile:()=>{let{pendingDiagramFile:n}=t();return n&&e({pendingDiagramFile:null}),n},setIsMobile:t=>{e({isMobile:t})},toggleCommandPalette:()=>{e(e=>({isCommandPaletteOpen:!e.isCommandPaletteOpen}))},setCommandPaletteOpen:t=>{e({isCommandPaletteOpen:t})},toggleHelpDialog:()=>{e(e=>({isHelpDialogOpen:!e.isHelpDialogOpen}))},setHelpDialogOpen:t=>{e({isHelpDialogOpen:t})},setAboutDialogOpen:t=>{e({isAboutDialogOpen:t})},setOpenCodeStatusDialogOpen:t=>{e({isOpenCodeStatusDialogOpen:t})},setOpenCodeStatusText:t=>{e({openCodeStatusText:t})},setSessionCreateDialogOpen:t=>{e({isSessionCreateDialogOpen:t})},setScheduledTasksDialogOpen:t=>{e({isScheduledTasksDialogOpen:t})},setArchivedSessionsDialogOpen:t=>{e({isArchivedSessionsDialogOpen:t})},setSettingsDialogOpen:t=>{e(e=>t?e.settingsHasOpenedOnce?{isSettingsDialogOpen:!0}:{isSettingsDialogOpen:!0,settingsHasOpenedOnce:!0}:{isSettingsDialogOpen:!1})},setNewWorktreeDialogOpen:t=>{e({isNewWorktreeDialogOpen:t})},setModelSelectorOpen:(t,n)=>{e(e=>t?{isModelSelectorOpen:!0,isAgentSelectorOpen:!1,isModelSelectorInstant:n?.instant===!0}:{isModelSelectorOpen:!1,isModelSelectorInstant:n?.instant===!0||n?.instant!==!1&&e.isModelSelectorInstant})},setAgentSelectorOpen:(t,n)=>{e(e=>t?{isAgentSelectorOpen:!0,isModelSelectorOpen:!1,isAgentSelectorInstant:n?.instant===!0}:{isAgentSelectorOpen:!1,isAgentSelectorInstant:n?.instant!==!1&&e.isAgentSelectorInstant})},setSidebarSection:t=>{e({sidebarSection:t})},setSettingsPage:t=>{e({settingsPage:t})},setSettingsProjectsSelectedId:t=>{e({settingsProjectsSelectedId:t})},setSettingsRemoteInstancesSelectedId:t=>{e({settingsRemoteInstancesSelectedId:t})},setEventStreamStatus:(t,n)=>{e({eventStreamStatus:t,eventStreamHint:n??null})},setShowReasoningTraces:t=>{e({showReasoningTraces:t})},setSessionTitleRefreshEnabled:t=>{e({sessionTitleRefreshEnabled:t})},setSessionGoalEnabled:t=>{e({sessionGoalEnabled:t})},setSessionGoalDefaultBudgetEnabled:t=>{e({sessionGoalDefaultBudgetEnabled:t})},setSessionGoalDefaultBudget:t=>{e({sessionGoalDefaultBudget:t})},setCollapsibleThinkingBlocks:t=>{e({collapsibleThinkingBlocks:t})},setChatRenderMode:t=>{e({chatRenderMode:t})},setActivityRenderMode:t=>{e({activityRenderMode:t})},setShowDeletionDialog:t=>{e({showDeletionDialog:t})},setAutoDeleteEnabled:t=>{e({autoDeleteEnabled:t})},setAutoDeleteAfterDays:t=>{e({autoDeleteAfterDays:Math.max(1,Math.min(365,t))})},setSessionRetentionAction:t=>{e({sessionRetentionAction:t})},setAutoDeleteLastRunAt:t=>{e({autoDeleteLastRunAt:t})},setMessageLimit:t=>{e({messageLimit:Math.max(10,Math.min(500,Math.round(t)))})},setFontSize:n=>{e({fontSize:Math.max(50,Math.min(200,n))}),t().applyTypography()},setCodeFontSize:n=>{e({codeFontSize:Math.max(50,Math.min(200,n))}),t().applyTypography()},setGlobalDraftStarters:t=>{e({globalDraftStarters:t})},setTerminalFontSize:t=>{e({terminalFontSize:Math.max(9,Math.min(52,Math.round(t)))})},setEditorFontSize:t=>{e({editorFontSize:Math.max(9,Math.min(32,Math.round(t)))})},setUiFont:t=>{e({uiFont:t})},setMonoFont:t=>{e({monoFont:t})},setPadding:n=>{e({padding:Math.max(50,Math.min(200,n))}),t().applyPadding()},setCornerRadius:t=>{e({cornerRadius:t})},applyTypography:()=>{let{fontSize:e,codeFontSize:n}=t(),r=document.documentElement,i=e/100,a=n/100,o=typeof document<`u`&&v(r),s=Object.keys(g);if(i===1&&a===1){for(let e of s)r.style.removeProperty(_(e));return}for(let e of s){let t=se(e,{mobile:o}),n=parseFloat(t);if(!Number.isFinite(n))continue;let s=e===`code`?a:i;if(s===1){r.style.removeProperty(_(e));continue}if(o){let t=n*16*s;r.style.setProperty(_(e),`calc(${Math.round(t*1e3)/1e3} * var(--dpt))`)}else r.style.setProperty(_(e),`${n*s}rem`)}},applyPadding:()=>{let{padding:e}=t(),n=document.documentElement,r=e/100;if(r===1){n.style.removeProperty(`--user-padding-scale`),n.style.removeProperty(`--line-height-tight`),n.style.removeProperty(`--line-height-normal`),n.style.removeProperty(`--line-height-relaxed`),n.style.removeProperty(`--line-height-loose`);return}let i=Math.sqrt(r);n.style.setProperty(`--user-padding-scale`,i.toString());let a=1+(r-1)*.15;n.style.setProperty(`--line-height-tight`,(1.25*a).toFixed(3)),n.style.setProperty(`--line-height-normal`,(1.5*a).toFixed(3)),n.style.setProperty(`--line-height-relaxed`,(1.625*a).toFixed(3)),n.style.setProperty(`--line-height-loose`,(2*a).toFixed(3))},setDiffLayoutPreference:t=>{e({diffLayoutPreference:t})},setDiffFileLayout:(t,n)=>{e(e=>({diffFileLayout:{...e.diffFileLayout,[t]:n}}))},setDiffWrapLines:t=>{e({diffWrapLines:t})},setGitChangesViewMode:t=>{e({gitChangesViewMode:t})},setInputBarOffset:t=>{e({inputBarOffset:t})},setMobileKeyboardMode:t=>{e(e=>e.mobileKeyboardMode===t?e:{mobileKeyboardMode:t})},toggleFavoriteModel:(t,n,r)=>{e(e=>e.favoriteModels.some(e=>e.providerID===t&&e.modelID===n)?{favoriteModels:e.favoriteModels.filter(e=>e.providerID!==t||e.modelID!==n)}:{favoriteModels:[r===void 0?{providerID:t,modelID:n}:{providerID:t,modelID:n,variant:r},...e.favoriteModels]})},reorderFavoriteModel:(t,n,r,i)=>{e(e=>{let a=e.favoriteModels.findIndex(e=>e.providerID===t&&e.modelID===n),o=e.favoriteModels.findIndex(e=>e.providerID===r&&e.modelID===i);if(a===-1||o===-1||a===o)return e;let s=e.favoriteModels.slice(),[c]=s.splice(a,1);return c?(s.splice(o,0,c),{favoriteModels:s}):e})},setProviderOrder:t=>{e(e=>{let n=t.filter(e=>typeof e==`string`&&e.length>0),r=e.providerOrder;return r.length===n.length&&r.every((e,t)=>e===n[t])?e:{providerOrder:n}})},toggleHiddenModel:(t,n)=>{e(e=>e.hiddenModels.some(e=>e.providerID===t&&e.modelID===n)?{hiddenModels:e.hiddenModels.filter(e=>e.providerID!==t||e.modelID!==n)}:{hiddenModels:[{providerID:t,modelID:n},...e.hiddenModels]})},isHiddenModel:(e,n)=>{let{hiddenModels:r}=t();return r.some(t=>t.providerID===e&&t.modelID===n)},hideAllModels:(t,n)=>{e(e=>{let r=e.hiddenModels.filter(e=>e.providerID!==t);return{hiddenModels:[...n.filter(e=>typeof e==`string`&&e.length>0).map(e=>({providerID:t,modelID:e})),...r]}})},showAllModels:t=>{e(e=>({hiddenModels:e.hiddenModels.filter(e=>e.providerID!==t)}))},toggleModelProviderCollapsed:t=>{let n=typeof t==`string`?t.trim():``;n&&e(e=>e.collapsedModelProviders.includes(n)?{collapsedModelProviders:e.collapsedModelProviders.filter(e=>e!==n)}:{collapsedModelProviders:[...e.collapsedModelProviders,n]})},setModelProvidersCollapsed:(t,n)=>{let r=Array.from(new Set(t.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean)));r.length!==0&&e(e=>{let t=new Set(r),i=e.collapsedModelProviders.filter(e=>!t.has(e));return{collapsedModelProviders:n?[...i,...r]:i}})},isFavoriteModel:(e,n)=>{let{favoriteModels:r}=t();return r.some(t=>t.providerID===e&&t.modelID===n)},addRecentModel:(t,n,r)=>{e(e=>{let i=[r===void 0?{providerID:t,modelID:n}:{providerID:t,modelID:n,variant:r},...e.recentModels.filter(e=>e.providerID!==t||e.modelID!==n)].slice(0,5),a=e.favoriteModels.findIndex(e=>e.providerID===t&&e.modelID===n);if(a===-1)return{recentModels:i};let o=e.favoriteModels[a];if(o.variant===r)return{recentModels:i};let s=r===void 0?{providerID:o.providerID,modelID:o.modelID}:{providerID:o.providerID,modelID:o.modelID,variant:r},c=e.favoriteModels.slice();return c[a]=s,{recentModels:i,favoriteModels:c}})},addRecentAgent:t=>{let n=typeof t==`string`?t.trim():``;n&&e(e=>{if(e.recentAgents.includes(n))return e;let t=e.recentAgents;return{recentAgents:[n,...t].slice(0,5)}})},addRecentEffort:(t,n,r)=>{let i=typeof t==`string`?t.trim():``,a=typeof n==`string`?n.trim():``;if(!i||!a)return;let o=`${i}/${a}`,s=typeof r==`string`&&r.trim().length>0?r.trim():`default`;e(e=>{let t=e.recentEfforts[o]??[];if(t.includes(s))return e;let n=t;return{recentEfforts:{...e.recentEfforts,[o]:[s,...n].slice(0,5)}}})},updateProportionalSidebarWidths:()=>{typeof window>`u`||e(e=>{let t={};if(e.isBottomTerminalOpen&&!e.hasManuallyResizedBottomTerminal){let n=Math.floor(window.innerHeight*.32);e.bottomTerminalHeight!==n&&(t.bottomTerminalHeight=n)}return Object.keys(t).length>0?t:e})},applyTheme:()=>{let{theme:e}=t(),n=document.documentElement;if(n.classList.remove(`light`,`dark`),e===`system`){let e=window.matchMedia(`(prefers-color-scheme: dark)`).matches?`dark`:`light`;n.classList.add(e)}else n.classList.add(e)},setMultiRunLauncherOpen:t=>{e({isMultiRunLauncherOpen:t})},openMultiRunLauncher:()=>{e({isMultiRunLauncherOpen:!0,isSessionSwitcherOpen:!1})},setTimelineDialogOpen:t=>{e({isTimelineDialogOpen:t})},setPromptNavigatorPanelOpen:t=>{e({isPromptNavigatorPanelOpen:t})},togglePromptNavigatorPanel:()=>{e(e=>({isPromptNavigatorPanelOpen:!e.isPromptNavigatorPanelOpen}))},setImagePreviewOpen:t=>{e({isImagePreviewOpen:t})},setNativeNotificationsEnabled:t=>{e({nativeNotificationsEnabled:t})},setNotificationMode:t=>{e({notificationMode:t})},setShowTerminalQuickKeysOnDesktop:t=>{e({showTerminalQuickKeysOnDesktop:t})},setNotifyOnSubtasks:t=>{e({notifyOnSubtasks:t})},setDockBadgeEnabled:t=>{e({dockBadgeEnabled:t})},setNotifyOnCompletion:t=>{e({notifyOnCompletion:t})},setNotifyOnError:t=>{e({notifyOnError:t})},setNotifyOnQuestion:t=>{e({notifyOnQuestion:t})},setNotificationTemplates:t=>{e({notificationTemplates:t})},setSummarizeLastMessage:t=>{e({summarizeLastMessage:t})},setSummaryThreshold:t=>{e({summaryThreshold:t})},setSummaryLength:t=>{e({summaryLength:t})},setMaxLastMessageLength:t=>{e({maxLastMessageLength:t})},setPersistChatDraft:t=>{e({persistChatDraft:t})},setShowOpenCodeUpdateNotifications:t=>{e({showOpenCodeUpdateNotifications:t})},setInputSpellcheckEnabled:t=>{e({inputSpellcheckEnabled:t})},setWideChatLayoutEnabled:t=>{e({wideChatLayoutEnabled:t})},setCodeBlockLineWrap:t=>{e({codeBlockLineWrap:t})},setShowToolFileIcons:t=>{e({showToolFileIcons:t})},setShowTurnChangedFiles:t=>{e({showTurnChangedFiles:t})},setShowExpandedBashTools:t=>{e({showExpandedBashTools:t})},setShowSubagentTaskDetails:t=>{e({showSubagentTaskDetails:t})},setTimeFormatPreference:t=>{e({timeFormatPreference:t})},setWeekStartPreference:t=>{e({weekStartPreference:t})},setDesktopWindowControlsPosition:t=>{e({desktopWindowControlsPosition:t})},setMermaidRenderingMode:t=>{e({mermaidRenderingMode:t})},setUserMessageRenderingMode:t=>{e({userMessageRenderingMode:t})},setCollapsibleUserMessages:t=>{e({collapsibleUserMessages:t})},setStickyUserHeader:t=>{e({stickyUserHeader:t})},setPromptNavigatorEnabled:t=>{e({promptNavigatorEnabled:t})},setExpandedEditorToolbar:t=>{e({expandedEditorToolbar:t})},setShowSplitAssistantMessageActions:t=>{e({showSplitAssistantMessageActions:t})},setShowAssistantTps:t=>{e({showAssistantTps:t})},setAllowPromptingSubagentSessions:t=>{e({allowPromptingSubagentSessions:t})},setIsMobileSessionStatusBarCollapsed:t=>{e({isMobileSessionStatusBarCollapsed:t})},setMobileSessionPanelOpen:t=>{e({mobileSessionPanelOpen:t})},setMobileSessionFilterProjectId:t=>{e({mobileSessionFilterProjectId:t})},setOtaChannelOverride:t=>{e({otaChannelOverride:t})},setReportUsage:t=>{e({reportUsage:t})},viewPagerPage:`center`,setViewPagerPage:t=>{e({viewPagerPage:t}),e(t===`left`?{isSessionSwitcherOpen:!0,isRightSidebarOpen:!1}:t===`right`?{isRightSidebarOpen:!0,isSessionSwitcherOpen:!1}:{isSessionSwitcherOpen:!1,isRightSidebarOpen:!1})},setShortcutOverride:(t,n)=>{e(e=>({shortcutOverrides:{...e.shortcutOverrides,[t]:n}}))},clearShortcutOverride:t=>{e(e=>{let n={...e.shortcutOverrides};return delete n[t],{shortcutOverrides:n}})},resetAllShortcutOverrides:()=>{e({shortcutOverrides:{}})},setFileEditorKeymap:t=>{e({fileEditorKeymap:O(t)})},toggleExpandedInput:()=>{e(e=>({isExpandedInput:!e.isExpandedInput}))},setExpandedInput:t=>{e({isExpandedInput:t})}}),{name:`ui-store`,storage:d(),version:13,migrate:(e,t)=>{if(!e||typeof e!=`object`)return e;let n=e;if(ie(n,t),t<11&&n.sidebarWidth===280&&(n.sidebarWidth=F),t<10&&delete n.diffViewMode,t<13&&(delete n.notesPanelHeight,delete n.todoPanelHeight,(n.activeMainTab===`plan`||n.activeMainTab===`context`)&&(n.activeMainTab=`chat`),n.rightSidebarTab===`context`&&(n.rightSidebarTab=`files`)),t<1&&ye(n.notificationTemplates)&&(n.notificationTemplates={completion:{...A.completion},error:{...A.error},question:{...A.question},subtask:{...A.subtask}}),t<3){let e=new Set([90,120,180,220]),t=n.memoryLimitHistorical,r=n.memoryLimitActiveSession;typeof t==`number`&&!e.has(t)?n.messageLimit=t:typeof r==`number`&&!e.has(r)&&(n.messageLimit=r),delete n.memoryLimitHistorical,delete n.memoryLimitViewport,delete n.memoryLimitActiveSession}if((typeof n.rightSidebarTab!=`string`||n.rightSidebarTab!==`git`&&n.rightSidebarTab!==`files`)&&(n.rightSidebarTab=`files`),n.contextPanelByDirectory=Q(n.contextPanelByDirectory),t<5)if(!n.shortcutOverrides||typeof n.shortcutOverrides!=`object`)n.shortcutOverrides={};else{let e=n.shortcutOverrides,t={};for(let[n,r]of Object.entries(e))typeof n==`string`&&typeof r==`string`&&(t[n]=r);n.shortcutOverrides=t}return t<6&&(n.contextPanelByDirectory=Q(n.contextPanelByDirectory)),t<7&&(n.contextPanelByDirectory=Q(n.contextPanelByDirectory)),t<8&&n.gitChangesViewMode!==`flat`&&n.gitChangesViewMode!==`tree`&&(n.gitChangesViewMode=`tree`),n.fileEditorKeymap=O(n.fileEditorKeymap),n},partialize:e=>({theme:e.theme,isSidebarOpen:e.isSidebarOpen,sidebarWidth:e.sidebarWidth,isRightSidebarOpen:e.isRightSidebarOpen,rightSidebarWidth:e.rightSidebarWidth,rightSidebarTab:e.rightSidebarTab,contextPanelByDirectory:e.contextPanelByDirectory,isBottomTerminalOpen:e.isBottomTerminalOpen,isBottomTerminalExpanded:e.isBottomTerminalExpanded,bottomTerminalHeight:e.bottomTerminalHeight,isSessionSwitcherOpen:e.isSessionSwitcherOpen,activeMainTab:e.activeMainTab,sidebarSection:e.sidebarSection,settingsPage:e.settingsPage,settingsHasOpenedOnce:e.settingsHasOpenedOnce,settingsProjectsSelectedId:e.settingsProjectsSelectedId,settingsRemoteInstancesSelectedId:e.settingsRemoteInstancesSelectedId,isSessionCreateDialogOpen:e.isSessionCreateDialogOpen,showReasoningTraces:e.showReasoningTraces,sessionTitleRefreshEnabled:e.sessionTitleRefreshEnabled,sessionGoalEnabled:e.sessionGoalEnabled,sessionGoalDefaultBudgetEnabled:e.sessionGoalDefaultBudgetEnabled,sessionGoalDefaultBudget:e.sessionGoalDefaultBudget,collapsibleThinkingBlocks:e.collapsibleThinkingBlocks,chatRenderMode:e.chatRenderMode,activityRenderMode:e.activityRenderMode,showDeletionDialog:e.showDeletionDialog,autoDeleteEnabled:e.autoDeleteEnabled,autoDeleteAfterDays:e.autoDeleteAfterDays,sessionRetentionAction:e.sessionRetentionAction,autoDeleteLastRunAt:e.autoDeleteLastRunAt,messageLimit:e.messageLimit,fontSize:e.fontSize,codeFontSize:e.codeFontSize,globalDraftStarters:e.globalDraftStarters,terminalFontSize:e.terminalFontSize,editorFontSize:e.editorFontSize,uiFont:e.uiFont,monoFont:e.monoFont,padding:e.padding,cornerRadius:e.cornerRadius,favoriteModels:e.favoriteModels,hiddenModels:e.hiddenModels,providerOrder:e.providerOrder,collapsedModelProviders:e.collapsedModelProviders,recentModels:e.recentModels,recentAgents:e.recentAgents,recentEfforts:e.recentEfforts,diffLayoutPreference:e.diffLayoutPreference,diffWrapLines:e.diffWrapLines,gitChangesViewMode:e.gitChangesViewMode,nativeNotificationsEnabled:e.nativeNotificationsEnabled,notificationMode:e.notificationMode,showTerminalQuickKeysOnDesktop:e.showTerminalQuickKeysOnDesktop,notifyOnSubtasks:e.notifyOnSubtasks,dockBadgeEnabled:e.dockBadgeEnabled,notifyOnCompletion:e.notifyOnCompletion,notifyOnError:e.notifyOnError,notifyOnQuestion:e.notifyOnQuestion,notificationTemplates:e.notificationTemplates,summarizeLastMessage:e.summarizeLastMessage,summaryThreshold:e.summaryThreshold,summaryLength:e.summaryLength,maxLastMessageLength:e.maxLastMessageLength,persistChatDraft:e.persistChatDraft,showOpenCodeUpdateNotifications:e.showOpenCodeUpdateNotifications,inputSpellcheckEnabled:e.inputSpellcheckEnabled,wideChatLayoutEnabled:e.wideChatLayoutEnabled,codeBlockLineWrap:e.codeBlockLineWrap,showToolFileIcons:e.showToolFileIcons,showTurnChangedFiles:e.showTurnChangedFiles,showExpandedBashTools:e.showExpandedBashTools,showSubagentTaskDetails:e.showSubagentTaskDetails,timeFormatPreference:e.timeFormatPreference,weekStartPreference:e.weekStartPreference,desktopWindowControlsPosition:e.desktopWindowControlsPosition,mermaidRenderingMode:e.mermaidRenderingMode,userMessageRenderingMode:e.userMessageRenderingMode,collapsibleUserMessages:e.collapsibleUserMessages,stickyUserHeader:e.stickyUserHeader,promptNavigatorEnabled:e.promptNavigatorEnabled,expandedEditorToolbar:e.expandedEditorToolbar,showSplitAssistantMessageActions:e.showSplitAssistantMessageActions,showAssistantTps:e.showAssistantTps,allowPromptingSubagentSessions:e.allowPromptingSubagentSessions,isMobileSessionStatusBarCollapsed:e.isMobileSessionStatusBarCollapsed,mobileSessionFilterProjectId:e.mobileSessionFilterProjectId,otaChannelOverride:e.otaChannelOverride,shortcutOverrides:e.shortcutOverrides,fileEditorKeymap:e.fileEditorKeymap})}),{name:`ui-store`}));export{h as S,y as _,he as a,te as b,de as c,ce as d,pe as f,b as g,oe as h,D as i,ue as l,g as m,ve as n,S as o,fe as p,E as r,le as s,Me as t,x as u,v,re as x,d as y};
|