@openchambery/web 1.19.7-beta.6 → 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.
Files changed (76) hide show
  1. package/dist/assets/{AgentAvatar-ziUs4sw3.js → AgentAvatar-Di8F4QJh.js} +1 -1
  2. package/dist/assets/{AssistantView-CCy18vfR.js → AssistantView-AWe-3bXR.js} +1 -1
  3. package/dist/assets/{ChatContainer-DJe_JLcz.js → ChatContainer-XHQSSICA.js} +35 -35
  4. package/dist/assets/{ContextPanel-Zu_D3BhW.js → ContextPanel-BT6bgBJ_.js} +3 -3
  5. package/dist/assets/{DiagramView-DXBSE1Qg.js → DiagramView-DNLNZOT6.js} +1 -1
  6. package/dist/assets/{FadeInOnReveal-BAlsRFJH.js → FadeInOnReveal-CV2s6YN8.js} +1 -1
  7. package/dist/assets/{MarkdownRendererImpl-CznjvgQG.js → MarkdownRendererImpl-C6E0KL8H.js} +1 -1
  8. package/dist/assets/MarkstreamRendererImpl-BKsc-avF.js +1 -0
  9. package/dist/assets/{MobileDetailNavigation-Cd1aYfhC.js → MobileDetailNavigation-Sg0VMlOz.js} +1 -1
  10. package/dist/assets/{MobileShareBridge-BSAjAbV2.js → MobileShareBridge-QTUpK3s7.js} +2 -2
  11. package/dist/assets/{MobileSurface-Dzgv8_-B.js → MobileSurface-BasV1X13.js} +1 -1
  12. package/dist/assets/{MultiRunWindow-DUNzqNmB.js → MultiRunWindow-BxyF4Xy4.js} +1 -1
  13. package/dist/assets/{OnboardingScreen-CJYyR54B.js → OnboardingScreen-D6rtE7rj.js} +1 -1
  14. package/dist/assets/{OverlayScrollbar-C-jZ8ITG.js → OverlayScrollbar-DlNZho3q.js} +1 -1
  15. package/dist/assets/{SettingsView-Ncm_fo9e.js → SettingsView-BywiwJ_a.js} +1 -1
  16. package/dist/assets/{SettingsWindow-h0RnxmRw.js → SettingsWindow-zQ1dc-wl.js} +1 -1
  17. package/dist/assets/{TerminalView-CxNW-E1G.js → TerminalView-BMXYfo8d.js} +1 -1
  18. package/dist/assets/{ToolOutputDialog-BxhqfMo9.js → ToolOutputDialog-CFFkJzQ4.js} +1 -1
  19. package/dist/assets/{appThemeRegistry-B-rV3gVd.js → appThemeRegistry-4oEk9SR8.js} +2 -2
  20. package/dist/assets/{clipboard-Bz0Zm9VJ.js → clipboard-D35XSwID.js} +1 -1
  21. package/dist/assets/{desktopRelayRestore-LBt0CBOj.js → desktopRelayRestore-8pvI_dSc.js} +1 -1
  22. package/dist/assets/{dialog-HCE4eLUW.js → dialog-x2hirWBd.js} +1 -1
  23. package/dist/assets/{es-D9KcV5TX.js → es-C8Sqjsia.js} +1 -1
  24. package/dist/assets/{fileQueries-Dnn15WsA.js → fileQueries-DGHZqZHc.js} +1 -1
  25. package/dist/assets/{fr-DPA9qUl3.js → fr-p-Zwm_j2.js} +1 -1
  26. package/dist/assets/{gitApi-BQk5cH8O.js → gitApi-Dqg8EDsg.js} +1 -1
  27. package/dist/assets/{insertionBoundaries-7UaZ97RD.js → insertionBoundaries-BtiZxiKR.js} +1 -1
  28. package/dist/assets/{ja-Dsif3NoD.js → ja-B6REu1qP.js} +1 -1
  29. package/dist/assets/{ko-Dixx4Ctg.js → ko-CJBNH9IZ.js} +1 -1
  30. package/dist/assets/{main-D4zLYOaH.js → main-Blsi9j8P.js} +2 -2
  31. package/dist/assets/{main-D2whc6Yv.js → main-D4qq97ip.js} +3 -3
  32. package/dist/assets/{markdownTheme-TdhQOZSN.js → markdownTheme-SPe4jOwX.js} +1 -1
  33. package/dist/assets/{miniChat-C6qw4n5u.js → miniChat-QgI11lL4.js} +2 -2
  34. package/dist/assets/{mobile-D2-A0hzp.js → mobile-BjMMtvjD.js} +2 -2
  35. package/dist/assets/{multirun-BLs0gcI6.js → multirun-C9CKfXyS.js} +1 -1
  36. package/dist/assets/{persistence-CmjKImz2.js → persistence-w-AiX2i4.js} +1 -1
  37. package/dist/assets/{pl-Bj78ZGgf.js → pl-B2cBI_7K.js} +1 -1
  38. package/dist/assets/{platform-skqcMARt.js → platform-4eCmsdol.js} +1 -1
  39. package/dist/assets/{projectMeta-BAfqxsS4.js → projectMeta-DzGPV_uF.js} +1 -1
  40. package/dist/assets/{pt-BR-CFL3xSAf.js → pt-BR-CrCc9hmt.js} +1 -1
  41. package/dist/assets/{radio-Yoba9qwf.js → radio-TX0aocEX.js} +1 -1
  42. package/dist/assets/{renderElectronMiniChatApp-DI61MYvq.js → renderElectronMiniChatApp-DZOBP2No.js} +2 -2
  43. package/dist/assets/{renderMobileApp-DsKjY4c_.js → renderMobileApp-DP1_xIqJ.js} +10 -7
  44. package/dist/assets/{runtimeConfig-_bkBy5Wd.js → runtimeConfig-ClsErHd9.js} +1 -1
  45. package/dist/assets/{runtimeEndpointReset-CpAYissz.js → runtimeEndpointReset-DoLMDfAs.js} +1 -1
  46. package/dist/assets/{shikiHighlight-8q791YEM.js → shikiHighlight-B25fE64n.js} +1 -1
  47. package/dist/assets/{sortable-tabs-strip-Bj8N0VWf.js → sortable-tabs-strip-CNDgyX0B.js} +1 -1
  48. package/dist/assets/{store-DzpbXWX1.js → store-CL3WP48T.js} +2 -2
  49. package/dist/assets/{terminalApi-CNqqwjfG.js → terminalApi-CGtOtc8I.js} +1 -1
  50. package/dist/assets/{uk-BY60Ub3Z.js → uk-C8YKAz0x.js} +1 -1
  51. package/dist/assets/{useAppFontEffects-BkdcivZb.js → useAppFontEffects-D1u63a6o.js} +2 -2
  52. package/dist/assets/{useAssistantUIStore-DaplPyb0.js → useAssistantUIStore-I0VWrB5V.js} +1 -1
  53. package/dist/assets/{useDesktopWindowControlsLayout-CzAHnjTa.js → useDesktopWindowControlsLayout-DW_ouBDs.js} +1 -1
  54. package/dist/assets/{useEffectiveDirectory-NardZbAS.js → useEffectiveDirectory-D976zCCc.js} +1 -1
  55. package/dist/assets/{useFontPreferences-D8emhcNv.js → useFontPreferences-BLZ3y6mN.js} +1 -1
  56. package/dist/assets/{useMobileNavigationStore-lqmpSW1v.js → useMobileNavigationStore-lcj5GHR3.js} +4 -4
  57. package/dist/assets/{useSessionAutoCleanup-DUTte2bI.js → useSessionAutoCleanup-DMNa_krc.js} +1 -1
  58. package/dist/assets/useUIStore-CNLmCoPU.js +1 -0
  59. package/dist/assets/{useWorkerHighlightedLines-cPHAAzjo.js → useWorkerHighlightedLines-BQNOf2U4.js} +1 -1
  60. package/dist/assets/{zh-CN-Cox1LaOW.js → zh-CN-CCYwUnmB.js} +1 -1
  61. package/dist/assets/{zh-TW-B6RU0mxa.js → zh-TW-D8Y6py08.js} +1 -1
  62. package/dist/index.html +7 -7
  63. package/dist/mini-chat.html +7 -7
  64. package/dist/mobile.html +7 -7
  65. package/package.json +1 -1
  66. package/server/lib/notifications/APNS.md +4 -4
  67. package/server/lib/notifications/DOCUMENTATION.md +1 -1
  68. package/server/lib/notifications/apns-runtime.js +139 -20
  69. package/server/lib/notifications/apns-runtime.test.js +66 -7
  70. package/server/lib/notifications/apns-titles.js +62 -62
  71. package/server/lib/notifications/apns-titles.test.js +3 -1
  72. package/server/lib/notifications/routes.js +1 -1
  73. package/server/lib/notifications/runtime.js +25 -49
  74. package/server/lib/opencode/settings-runtime.js +16 -0
  75. package/dist/assets/MarkstreamRendererImpl-DorvdTK9.js +0 -1
  76. 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: 'Agent response is ready',
24
- error: 'Agent hit an error',
25
- question: 'Agent needs your input',
26
- permission: 'Agent needs permission',
27
- goal_complete: 'Goal complete',
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: 'Goal reached its token budget',
30
- update: 'Agent update',
29
+ goal_budget: 'Token budget reached',
30
+ update: 'Update',
31
31
  session: 'Session',
32
32
  }),
33
33
  fr: Object.freeze({
34
- ready: "La réponse de l'agent est prête",
35
- error: "L'agent a rencontré une erreur",
36
- question: "L'agent a besoin de votre saisie",
37
- permission: "L'agent a besoin d'une autorisation",
38
- goal_complete: 'Objectif terminé',
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: "L'objectif a atteint son budget de tokens",
41
- update: "Mise à jour de l'agent",
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: '目标已达 token 预算',
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: '目標已達 token 預算',
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: 'La respuesta del agente está lista',
79
- error: 'El agente encontró un error',
80
- question: 'El agente necesita tu entrada',
81
- permission: 'El agente necesita permiso',
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: 'El objetivo alcanzó su presupuesto de tokens',
85
- update: 'Actualización del agente',
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: 'A resposta do agente está pronta',
90
- error: 'O agente encontrou um erro',
91
- question: 'O agente precisa da sua entrada',
92
- permission: 'O agente precisa de permissão',
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: 'O objetivo atingiu o orçamento de tokens',
96
- update: 'Atualização do agente',
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: 'Odpowiedź agenta jest gotowa',
112
- error: 'Agent napotkał błąd',
113
- question: 'Agent potrzebuje Twojego wejścia',
114
- permission: 'Agent potrzebuje uprawnienia',
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: 'Cel osiągnął budżet tokenów',
118
- update: 'Aktualizacja agenta',
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 = `${formatMode(info?.mode)} agent is ready`;
408
- let body = `${formatModelId(info?.modelID)} completed the task`;
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: '{agent_name} is ready', message: '{model_name} completed the task' };
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 = /plan\s*mode/i.test(header)
496
- ? 'Switch to plan mode'
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: 'Input needed', message: '{last_message}' };
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 = 'Permission required';
622
- let body = fallbackMessage;
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: 'Permission required', message: '{last_message}' };
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{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{nt as t,rt as n}from"./vendor-base-ui-CnHfUmDN.js";import{t as r}from"./vendor-markstream-react-CwvbEg9R.js";import{n as i,r as a,u as o}from"./vendor-reactuses-core-DDoDDyM9.js";import{t as s}from"./utils-CTL16t2f.js";import{t as c}from"./useThemeSystem-DMzWVJaW.js";import{a as l,r as u}from"./url-KeihbE0d.js";import{r as d,t as f}from"./markdownHeightCache-CvUyZT4q.js";var p=e(n(),1),m=`img:not([data-md-link-favicon="true"])`,h=e=>e.getAttribute(`data-md-image-source`)??e.getAttribute(`src`)??``,g=(e,t)=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;let n=e.target;if(!(n instanceof Element))return;let r=n.closest(m);if(r instanceof HTMLImageElement&&t.onShowPopup){let n=e.currentTarget;if(!(n instanceof HTMLElement))return;let i=Array.from(n.querySelectorAll(m)).map(e=>({url:h(e),filename:e.alt||h(e)||void 0})).filter(e=>e.url),a=h(r),o=i.findIndex(e=>e.url===a);if(!a)return;e.preventDefault(),e.stopPropagation(),t.onShowPopup({open:!0,title:r.alt||a,content:``,image:{url:a,filename:r.alt||a,gallery:i,index:o>=0?o:0}});return}let i=n.closest(`a[href]`);if(!(i instanceof HTMLAnchorElement))return;let a=i.getAttribute(`href`)??``;u(a)&&(e.preventDefault(),e.stopPropagation(),l(a))},_={maxLiveNodes:0,liveNodeBuffer:0,batchRendering:!1,deferNodesUntilVisible:!1,viewportPriority:!1,smoothStreaming:!1,typewriter:!1,fade:!1},v=t(),y=e=>e===`tool`?`markdown-content markdown-tool oc-markstream-host`:e===`reasoning`?`markdown-content markdown-reasoning oc-markstream-host`:`markdown-content leading-relaxed oc-markstream-host`,b={overflow:`wrap`},x=p.memo(({content:e,part:t,messageId:n,className:l,isStreaming:u=!1,variant:m=`assistant`,onShowPopup:h})=>{let x=c()?.currentTheme.metadata.variant===`dark`,S=p.useRef(null),C=t?.id?`oc-ms-${t.id}`:`oc-ms-${n}`,w=f(e,`markstream:${m}`),T=!u,E=p.useRef(T);E.current=T;let D=p.useRef(w);D.current=w;let O=i(e=>{if(!E.current)return;let t=e[0];if(!t)return;let n=t.borderBoxSize?.[0],r=n?n.blockSize:t.contentRect.height,i=n?n.inlineSize:t.contentRect.width;d(D.current,r,i)});o(S,O);let k=i(e=>{g(e,{onShowPopup:h})});return a(`click`,k,S),(0,v.jsx)(`div`,{ref:S,className:s(`relative break-words w-full min-w-0`,y(m),l),"data-markdown-ready":`true`,"data-markdown-hydration":`ready`,"data-oc-markdown-engine":`markstream`,"data-oc-markstream-virtual":`off`,children:(0,v.jsx)(r,{content:e,customId:C,final:!u,isDark:x,codeBlockOptions:b,codeBlockStream:u,..._})})},(e,t)=>e.content===t.content&&e.isStreaming===t.isStreaming&&e.disableStreamAnimation===t.disableStreamAnimation&&e.variant===t.variant&&e.isAnimated===t.isAnimated&&e.skipFadeIn===t.skipFadeIn&&e.className===t.className&&e.messageId===t.messageId&&e.onShowPopup===t.onShowPopup&&e.enableFileReferences===t.enableFileReferences&&e.part?.id===t.part?.id);export{x as MarkstreamRenderer};
@@ -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};