purplemux 0.1.12 → 0.1.13

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 (117) hide show
  1. package/.next/standalone/.next/BUILD_ID +1 -1
  2. package/.next/standalone/.next/build-manifest.json +32 -32
  3. package/.next/standalone/.next/prerender-manifest.json +3 -3
  4. package/.next/standalone/.next/required-server-files.json +1 -1
  5. package/.next/standalone/.next/routes-manifest.json +20 -14
  6. package/.next/standalone/.next/server/chunks/[externals]__0l1mhe5._.js +3 -0
  7. package/.next/standalone/.next/server/chunks/[root-of-the-server]__06an6au._.js +1 -1
  8. package/.next/standalone/.next/server/chunks/[root-of-the-server]__09q4wzd._.js +1 -1
  9. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0hls3o-._.js +20 -20
  10. package/.next/standalone/.next/server/chunks/[root-of-the-server]__0j.vqs2._.js +20 -20
  11. package/.next/standalone/.next/server/chunks/[root-of-the-server]__10o5i.7._.js +3 -0
  12. package/.next/standalone/.next/server/chunks/node_modules_next_dist_esm_build_templates_pages-api_0ulrm.8.js +1 -1
  13. package/.next/standalone/.next/server/chunks/src_lib_status-manager_ts_003hlhy._.js +1 -1
  14. package/.next/standalone/.next/server/chunks/ssr/_0-xx2s1._.js +1 -1
  15. package/.next/standalone/.next/server/chunks/ssr/_0.fa33p._.js +1 -1
  16. package/.next/standalone/.next/server/chunks/ssr/_0camkxl._.js +1 -1
  17. package/.next/standalone/.next/server/chunks/ssr/_0i209pm._.js +1 -1
  18. package/.next/standalone/.next/server/chunks/ssr/_0sfa_96._.js +1 -1
  19. package/.next/standalone/.next/server/chunks/ssr/src_components_features_mobile_mobile-terminal-page_tsx_02chzch._.js +1 -1
  20. package/.next/standalone/.next/server/chunks/ssr/src_components_features_terminal_terminal-page_tsx_0o~2bsa._.js +1 -1
  21. package/.next/standalone/.next/server/functions-config-manifest.json +2 -2
  22. package/.next/standalone/.next/server/middleware-build-manifest.js +32 -32
  23. package/.next/standalone/.next/server/middleware.js +1 -1
  24. package/.next/standalone/.next/server/pages/_app/build-manifest.json +3 -3
  25. package/.next/standalone/.next/server/pages/_app/client-build-manifest.json +1 -1
  26. package/.next/standalone/.next/server/pages/agents/[agentId]/chat/build-manifest.json +3 -3
  27. package/.next/standalone/.next/server/pages/agents/[agentId]/chat/client-build-manifest.json +1 -1
  28. package/.next/standalone/.next/server/pages/agents/[agentId]/memory/build-manifest.json +3 -3
  29. package/.next/standalone/.next/server/pages/agents/[agentId]/memory/client-build-manifest.json +1 -1
  30. package/.next/standalone/.next/server/pages/agents/[agentId]/workspace/build-manifest.json +3 -3
  31. package/.next/standalone/.next/server/pages/agents/[agentId]/workspace/client-build-manifest.json +1 -1
  32. package/.next/standalone/.next/server/pages/agents/build-manifest.json +3 -3
  33. package/.next/standalone/.next/server/pages/agents/client-build-manifest.json +1 -1
  34. package/.next/standalone/.next/server/pages/api/health/pages-manifest.json +3 -0
  35. package/.next/standalone/.next/server/pages/api/health.js +5 -0
  36. package/.next/standalone/.next/server/pages/api/health.js.map +5 -0
  37. package/.next/standalone/.next/server/pages/api/health.js.nft.json +1 -0
  38. package/.next/standalone/.next/server/pages/api/stats/daily-report/cache.js +1 -1
  39. package/.next/standalone/.next/server/pages/api/stats/daily-report/generate.js +1 -1
  40. package/.next/standalone/.next/server/pages/api/stats/sessions.js +2 -2
  41. package/.next/standalone/.next/server/pages/de/404.html +1 -1
  42. package/.next/standalone/.next/server/pages/de/500.html +1 -1
  43. package/.next/standalone/.next/server/pages/en/404.html +1 -1
  44. package/.next/standalone/.next/server/pages/en/500.html +1 -1
  45. package/.next/standalone/.next/server/pages/es/404.html +1 -1
  46. package/.next/standalone/.next/server/pages/es/500.html +1 -1
  47. package/.next/standalone/.next/server/pages/fr/404.html +1 -1
  48. package/.next/standalone/.next/server/pages/fr/500.html +1 -1
  49. package/.next/standalone/.next/server/pages/index/build-manifest.json +4 -4
  50. package/.next/standalone/.next/server/pages/index/client-build-manifest.json +1 -1
  51. package/.next/standalone/.next/server/pages/index/react-loadable-manifest.json +2 -2
  52. package/.next/standalone/.next/server/pages/ja/404.html +1 -1
  53. package/.next/standalone/.next/server/pages/ja/500.html +1 -1
  54. package/.next/standalone/.next/server/pages/ko/404.html +1 -1
  55. package/.next/standalone/.next/server/pages/ko/500.html +1 -1
  56. package/.next/standalone/.next/server/pages/pt-BR/404.html +1 -1
  57. package/.next/standalone/.next/server/pages/pt-BR/500.html +1 -1
  58. package/.next/standalone/.next/server/pages/reports/build-manifest.json +4 -4
  59. package/.next/standalone/.next/server/pages/reports/client-build-manifest.json +1 -1
  60. package/.next/standalone/.next/server/pages/ru/404.html +1 -1
  61. package/.next/standalone/.next/server/pages/ru/500.html +1 -1
  62. package/.next/standalone/.next/server/pages/stats/build-manifest.json +3 -3
  63. package/.next/standalone/.next/server/pages/stats/client-build-manifest.json +1 -1
  64. package/.next/standalone/.next/server/pages/tr/404.html +1 -1
  65. package/.next/standalone/.next/server/pages/tr/500.html +1 -1
  66. package/.next/standalone/.next/server/pages/webview/build-manifest.json +3 -3
  67. package/.next/standalone/.next/server/pages/webview/client-build-manifest.json +1 -1
  68. package/.next/standalone/.next/server/pages/zh-CN/404.html +1 -1
  69. package/.next/standalone/.next/server/pages/zh-CN/500.html +1 -1
  70. package/.next/standalone/.next/server/pages/zh-TW/404.html +1 -1
  71. package/.next/standalone/.next/server/pages/zh-TW/500.html +1 -1
  72. package/.next/standalone/.next/server/pages-manifest.json +1 -0
  73. package/.next/standalone/.next/static/{IGLfY98cOpT_s-m_8zv8r → cUc-iVh9yPvV5U6zlJnRI}/_buildManifest.js +9 -8
  74. package/.next/standalone/.next/static/{IGLfY98cOpT_s-m_8zv8r → cUc-iVh9yPvV5U6zlJnRI}/_clientMiddlewareManifest.js +2 -2
  75. package/.next/standalone/.next/static/chunks/{0sg17g3rw3j79.js → 0.emlk-pyrq15.js} +3 -3
  76. package/.next/standalone/.next/static/chunks/{0ebzi~xd5kbf6.js → 04~5g0kns0w-3.js} +3 -3
  77. package/.next/standalone/.next/static/chunks/{0modp.voz0yb8.js → 05~-~kex871hu.js} +3 -3
  78. package/.next/standalone/.next/static/chunks/09.nvq4m4q6nw.js +1 -0
  79. package/.next/standalone/.next/static/chunks/{1749j145r0f24.js → 0bu_7.oshhrhc.js} +3 -3
  80. package/.next/standalone/.next/static/chunks/{0~4_p.wm8.z1b.js → 0c3fuwgxh-35e.js} +1 -1
  81. package/.next/standalone/.next/static/chunks/{0s7-~f7~nxsvv.js → 0cacobjih1-zm.js} +1 -1
  82. package/.next/standalone/.next/static/chunks/{0y3i2gt468lcz.js → 0e7eht~s9maij.js} +4 -4
  83. package/.next/standalone/.next/static/chunks/0g65_p2-lr~2p.js +1 -0
  84. package/.next/standalone/.next/static/chunks/0g7dnwyslqeva.css +1 -0
  85. package/.next/standalone/.next/static/chunks/{0vnqr1g65cq~a.js → 0pitqn2--9ly-.js} +3 -3
  86. package/.next/standalone/.next/static/chunks/0rr4-5v-_uawq.js +1 -0
  87. package/.next/standalone/.next/static/chunks/0rtjgrowjz8n3.js +1 -0
  88. package/.next/standalone/.next/static/chunks/{0-ltvzwc~iee..js → 0uv~o_jk4b1cj.js} +1 -1
  89. package/.next/standalone/.next/static/chunks/0wbv3pd2oyilv.js +1 -0
  90. package/.next/standalone/.next/static/chunks/{07tmc1fd581-v.js → 11oe_y_tnk5rs.js} +1 -1
  91. package/.next/standalone/.next/static/chunks/{0fot2fshtz0xb.js → 12p51x0jwo~g0.js} +4 -4
  92. package/.next/standalone/.next/static/chunks/{00t4cxw76sr6_.js → 13zscswif89xn.js} +3 -3
  93. package/.next/standalone/.next/static/chunks/17rm0jup5m3lg.js +1 -0
  94. package/.next/standalone/.next/static/chunks/{0uvj8zvtnbzk..js → 18eatd5x-6wn7.js} +3 -3
  95. package/.next/standalone/.next/static/chunks/{turbopack-02sp76-9vzd-3.js → turbopack-0g9hcqkf8--nt.js} +1 -1
  96. package/.next/standalone/.next/static/chunks/{turbopack-0scaqrnmscmk5.js → turbopack-0kc~8bc2j~nm5.js} +1 -1
  97. package/.next/standalone/.next/static/chunks/{turbopack-0-_7t3yzrv2o0.js → turbopack-0kxgmh4de86.c.js} +1 -1
  98. package/.next/standalone/.next/static/chunks/{turbopack-0gcm0ao7ar0vo.js → turbopack-0pbs5o5-yw7zn.js} +1 -1
  99. package/.next/standalone/.next/static/chunks/{turbopack-0.efilbq57kj~.js → turbopack-0qzp5t.v8o4yd.js} +1 -1
  100. package/.next/standalone/.next/static/chunks/{turbopack-0jbxqfqs~bhnb.js → turbopack-0v2s_rrv-4zo_.js} +1 -1
  101. package/.next/standalone/.next/static/chunks/{turbopack-0xl824.ut7kv5.js → turbopack-0vg_jegb9r64~.js} +1 -1
  102. package/.next/standalone/.next/static/chunks/{turbopack-0g..zdci5n6yt.js → turbopack-0z94ziwry23f8.js} +1 -1
  103. package/.next/standalone/.next/static/chunks/{turbopack-102tph-sy46xp.js → turbopack-0zo4s0e54r18i.js} +1 -1
  104. package/.next/standalone/package.json +2 -1
  105. package/.next/standalone/server.js +1 -1
  106. package/bin/purplemux.js +6 -0
  107. package/dist/server.js +220 -85
  108. package/package.json +2 -1
  109. package/.next/standalone/.next/server/chunks/[externals]__13k.c.~._.js +0 -3
  110. package/.next/standalone/.next/static/chunks/078ug0z94g-5f.css +0 -1
  111. package/.next/standalone/.next/static/chunks/09ic8khns87py.js +0 -1
  112. package/.next/standalone/.next/static/chunks/0_24.ba0w6i58.js +0 -1
  113. package/.next/standalone/.next/static/chunks/0a0i6iubp4z.k.js +0 -1
  114. package/.next/standalone/.next/static/chunks/0zv-py60g55wn.js +0 -1
  115. package/.next/standalone/.next/static/chunks/0~qmpv1k~~-.r.js +0 -1
  116. package/.next/standalone/.next/static/chunks/13h_qiv748a8c.js +0 -1
  117. /package/.next/standalone/.next/static/{IGLfY98cOpT_s-m_8zv8r → cUc-iVh9yPvV5U6zlJnRI}/_ssgManifest.js +0 -0
@@ -1,3 +1,3 @@
1
- module.exports=[760644,a=>{"use strict";var b=a.i(4873);let c={terminalConnected:!1,claudeStatus:"unknown",claudeStatusCheckedAt:0,cliState:"inactive",isTimelineLoading:!0,isRestarting:!1,isResuming:!1,workspaceId:""},d=(a,b,c)=>{let d=a[b];return d?{...a,[b]:{...d,...c}}:a},e=(0,b.create)(a=>({tabs:{},tabOrders:{},statusWsConnected:!1,initTab:(b,d)=>a(a=>{let e=a.tabs[b],f={...c,...e,...d};return e?.cliState==="ready-for-review"&&"ready-for-review"!==f.cliState&&(f.cliState="ready-for-review",f.readyForReviewAt=e.readyForReviewAt),{tabs:{...a.tabs,[b]:f}}}),removeTab:b=>a(a=>{let{[b]:c,...d}=a.tabs;return{tabs:d}}),setTerminalConnected:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.terminalConnected!==c?{tabs:d(a.tabs,b,{terminalConnected:c})}:a}),setClaudeStatus:(b,c,e)=>a(a=>{let f=a.tabs[b];if(!f||f.claudeStatusCheckedAt>e||f.claudeStatus===c||"running"===f.claudeStatus&&"starting"===c)return a;let g={claudeStatus:c,claudeStatusCheckedAt:e};return("running"===f.claudeStatus||"starting"===f.claudeStatus)&&"running"!==c&&"starting"!==c&&f.isResuming&&(g.isResuming=!1),{tabs:d(a.tabs,b,g)}}),setTimelineLoading:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isTimelineLoading!==c?{tabs:d(a.tabs,b,{isTimelineLoading:c})}:a}),setRestarting:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isRestarting!==c?{tabs:d(a.tabs,b,{isRestarting:c})}:a}),cancelTab:b=>a(a=>{let c=a.tabs[b];return c&&"cancelled"!==c.cliState?{tabs:d(a.tabs,b,{cliState:"cancelled",localUpdatedAt:Date.now()})}:a}),dismissTab:b=>a(a=>{let c=a.tabs[b];return c&&"ready-for-review"===c.cliState?{tabs:d(a.tabs,b,{cliState:"idle",dismissedAt:Date.now()})}:a}),setResuming:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isResuming!==c?{tabs:d(a.tabs,b,{isResuming:c})}:a}),setWorkspaceId:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.workspaceId!==c?{tabs:d(a.tabs,b,{workspaceId:c})}:a}),setPanelType:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.panelType!==c?{tabs:d(a.tabs,b,{panelType:c})}:a}),setCurrentProcess:(b,c)=>a(a=>{let e=a.tabs[b];if(!e)return a;let f=c??void 0;return e.currentProcess===f?a:{tabs:d(a.tabs,b,{currentProcess:f,localUpdatedAt:Date.now()})}}),setTabOrder:(b,c)=>a(a=>{let d=a.tabOrders[b];return d&&d.length===c.length&&d.every((a,b)=>a===c[b])?a:{tabOrders:{...a.tabOrders,[b]:c}}}),setStatusWsConnected:b=>a({statusWsConnected:b}),syncAllFromServer:b=>a(a=>{let d=Date.now(),e={};for(let[f,g]of Object.entries(b)){let b=a.tabs[f];if(b?.cliState==="cancelled"){e[f]=b;continue}b?.localUpdatedAt&&d-b.localUpdatedAt<3e4?e[f]={...b,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}:b?e[f]={...b,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,panelType:g.panelType??b.panelType,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,currentProcess:g.currentProcess,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}:e[f]={...c,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,panelType:g.panelType,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,currentProcess:g.currentProcess,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}}for(let[b,c]of Object.entries(a.tabs))e[b]||(e[b]=c);return{tabs:e}}),updateFromServer:(b,e)=>a(a=>{if(null===e.cliState){let{[b]:c,...d}=a.tabs;return{tabs:d}}let f=a.tabs[b];if(f){if("cancelled"===f.cliState)return a;let c=void 0!==e.eventSeq&&(void 0===f.eventSeq||e.eventSeq>=f.eventSeq)?{lastEvent:e.lastEvent,eventSeq:e.eventSeq}:{};return{tabs:d(a.tabs,b,{cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,panelType:e.panelType??f.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,currentProcess:e.currentProcess,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,...c})}}return{tabs:{...a.tabs,[b]:{...c,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,currentProcess:e.currentProcess,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq}}}}),applyHookEvent:(b,c)=>a(a=>{let e=a.tabs[b];return!e||void 0!==e.eventSeq&&c.seq<=e.eventSeq?a:{tabs:d(a.tabs,b,{lastEvent:c,eventSeq:c.seq})}})}));a.s(["default",0,e,"isCliIdle",0,a=>"idle"===a||"ready-for-review"===a,"selectGlobalStatus",0,a=>{let b=0,c=0;for(let d of Object.values(a))"busy"===d.cliState?b++:("ready-for-review"===d.cliState||"needs-input"===d.cliState)&&c++;return{busyCount:b,attentionCount:c}},"selectSessionView",0,(a,b)=>{let c=a[b];return c?c.isRestarting?"restarting":"not-installed"===c.claudeStatus?"not-installed":"unknown"===c.claudeStatus||"starting"===c.claudeStatus?"loading":"running"===c.claudeStatus?c.isTimelineLoading?"loading":"timeline":c.isResuming||c.isTimelineLoading?"loading":"inactive":"loading"},"selectTabDisplayStatus",0,(a,b)=>{let c=a[b];return c&&"inactive"!==c.cliState?"busy"===c.cliState?"busy":"ready-for-review"===c.cliState?"ready-for-review":"needs-input"===c.cliState?"needs-input":"unknown"===c.cliState?"unknown":"idle":"idle"},"selectWorkspacePortsLabel",0,(a,b)=>{let c=new Set;for(let d of Object.values(a))if(d.workspaceId===b&&d.listeningPorts)for(let a of d.listeningPorts)c.add(a);return 0===c.size?"":":"+[...c].sort((a,b)=>a-b).join(", :")}])},484682,a=>{"use strict";var b=a.i(127669);let c=(a,b)=>{let c=a instanceof Map?a:new Map(a.entries()),d=b instanceof Map?b:new Map(b.entries());if(c.size!==d.size)return!1;for(let[a,b]of c)if(!d.has(a)||!Object.is(b,d.get(a)))return!1;return!0};a.s(["useShallow",0,function(a){let d=b.default.useRef(void 0);return b=>{let e=a(b);return!function(a,b){if(Object.is(a,b))return!0;if("object"!=typeof a||null===a||"object"!=typeof b||null===b||Object.getPrototypeOf(a)!==Object.getPrototypeOf(b))return!1;if(Symbol.iterator in a&&Symbol.iterator in b){if("entries"in a&&"entries"in b)return c(a,b);let d=a[Symbol.iterator](),e=b[Symbol.iterator](),f=d.next(),g=e.next();for(;!f.done&&!g.done;){if(!Object.is(f.value,g.value))return!1;f=d.next(),g=e.next()}return!!f.done&&!!g.done}return c({entries:()=>Object.entries(a)},{entries:()=>Object.entries(b)})}(d.current,e)?d.current=e:d.current}}],484682)},959709,912251,a=>{"use strict";var b=a.i(127669),c=a.i(510414),d=a.i(892209),e=a.i(760644);let f=new Set(["/new","/clear"]),g=a=>`pt-input-draft:${a}`,h=a=>{try{localStorage.removeItem(g(a))}catch{}};a.s(["clearInputDraft",0,h,"default",0,(a,i,j,k)=>{let l=k?.tabId,[m,n]=(0,b.useState)(()=>l?(a=>{try{return localStorage.getItem(g(a))??""}catch{return""}})(l):""),o=(0,b.useRef)(null),p=(0,b.useMemo)(()=>(0,e.isCliIdle)(a)||"unknown"===a?"input":"busy"===a||"needs-input"===a?"interrupt":"disabled",[a]),q=k?.onRestartSession,r=k?.onMessageSent,s=(0,b.useRef)(null);(0,b.useEffect)(()=>{if(l)return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>((a,b)=>{try{b?localStorage.setItem(g(a),b):localStorage.removeItem(g(a))}catch{}})(l,m),300),()=>{s.current&&clearTimeout(s.current)}},[l,m]);let t=(0,b.useCallback)(()=>{if("disabled"===p)return void c.toast.error("Claude Code가 실행 중이 아닙니다");if(!j)return void c.toast.error((0,d.t)("connection","terminalDisconnected"));if(""!==m.trim()){if(f.has(m.trim().toLowerCase())){q?.(),n(""),l&&h(l);return}m.includes("\n")?(i(`\x1b[200~${m}\x1b[201~\r`),setTimeout(()=>i("\r"),500)):(i(m),setTimeout(()=>i("\r"),50)),m.trim().startsWith("/")||r?.(m.trim()),n(""),l&&h(l)}},[p,m,i,j,q,r,l]),u=(0,b.useCallback)(()=>{j?i("\x1b\x1b"):c.toast.error((0,d.t)("connection","terminalDisconnected"))},[i,j]),v=(0,b.useCallback)(()=>{let a=o.current;if(!a)return;a.focus();let b=a.value.length;a.setSelectionRange(b,b)},[]),[w,x]=(0,b.useState)(p);w!==p&&(x(p),"disabled"===p&&n(""));let y="disabled"!==p&&j;return{value:m,setValue:n,mode:p,canSend:y,send:t,interrupt:u,textareaRef:o,focusInput:v}}],959709);var i=a.i(4873);let j=[],k=!0,l=a=>{},m=a=>{fetch("/api/workspace/active",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({activeWorkspaceId:a})}).catch(()=>{})},n=(a,b)=>b&&a.some(a=>a.id===b)?b:a[0]?.id??null,o=a=>{fetch("/api/workspace/active",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).catch(a=>{console.log(`[workspace-store] active update failed: ${a instanceof Error?a.message:a}`)})},p=(0,i.create)((a,b)=>({workspaces:j,activeWorkspaceId:j.length>0?n(j):null,sidebarCollapsed:!1,sidebarWidth:240,sidebarTab:"workspace",isLoading:k,error:null,hydrate:b=>{let c=n(b.workspaces,b.activeWorkspaceId);l(c),c&&m(c),a({workspaces:b.workspaces,activeWorkspaceId:c,sidebarCollapsed:b.sidebarCollapsed,sidebarWidth:b.sidebarWidth,isLoading:!1,error:null})},fetchWorkspaces:async()=>{a({isLoading:!0,error:null});try{let b=await fetch("/api/workspace");if(!b.ok)throw Error();let c=await b.json(),d=n(c.workspaces,c.activeWorkspaceId);l(d),a({workspaces:c.workspaces,activeWorkspaceId:d,sidebarCollapsed:c.sidebarCollapsed??!1,sidebarWidth:c.sidebarWidth??240,isLoading:!1})}catch{a({error:(0,d.t)("workspace","fetchError"),isLoading:!1})}},syncWorkspaces:async()=>{try{let c=await fetch("/api/workspace");if(!c.ok)return;let d=await c.json(),e=b().workspaces;if(JSON.stringify(e)===JSON.stringify(d.workspaces))return;a({workspaces:d.workspaces})}catch(a){console.log(`[workspace-store] sync error: ${a instanceof Error?a.message:a}`)}},createWorkspace:async(b,e,f)=>{try{let c=await fetch("/api/workspace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({directory:b,name:e,resumeSessionId:f})});if(!c.ok){let a=await c.json();throw Error(a.error||(0,d.t)("workspace","createFailed"))}let g=await c.json();return a(a=>({workspaces:[...a.workspaces,g]})),g}catch(b){let a=b instanceof Error?b.message:(0,d.t)("workspace","createFailed");return c.toast.error(a),null}},deleteWorkspace:async a=>{try{let b=await fetch(`/api/workspace/${a}`,{method:"DELETE"});if(!b.ok&&204!==b.status&&404!==b.status)throw Error();return!0}catch{return c.toast.error((0,d.t)("workspace","deleteFailed")),!1}},removeWorkspace:b=>{a(a=>{let c=a.workspaces.filter(a=>a.id!==b),d=a.activeWorkspaceId===b,e=d?c[0]?.id??null:a.activeWorkspaceId;return d&&(l(e),e&&m(e)),{workspaces:c,activeWorkspaceId:e}})},switchWorkspace:b=>{a({activeWorkspaceId:b}),l(b),m(b)},renameWorkspace:async(e,f)=>{let g=b().workspaces.find(a=>a.id===e),h=g?.name??"";a(a=>({workspaces:a.workspaces.map(a=>a.id===e?{...a,name:f}:a)}));try{if(!(await fetch(`/api/workspace/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:f})})).ok)throw Error();return!0}catch{return a(a=>({workspaces:a.workspaces.map(a=>a.id===e?{...a,name:h}:a)})),c.toast.error((0,d.t)("workspace","renameFailed")),!1}},reorderWorkspaces:(e,f)=>{let g=[...b().workspaces],[h]=g.splice(e,1);g.splice(f,0,h),a({workspaces:g}),fetch("/api/workspace/reorder",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceIds:g.map(a=>a.id)})}).catch(()=>{c.toast.error((0,d.t)("workspace","reorderFailed")),b().fetchWorkspaces()})},updateDirectories:(b,c)=>{a(a=>({workspaces:a.workspaces.map(a=>a.id===b?{...a,directories:c}:a)}))},toggleSidebar:()=>{a(a=>{let b=!a.sidebarCollapsed;return o({sidebarCollapsed:b}),{sidebarCollapsed:b}})},setSidebarWidth:b=>{a({sidebarWidth:b})},saveSidebarWidth:a=>{o({sidebarWidth:a})},setSidebarTab:b=>{a({sidebarTab:b});try{localStorage.setItem("sidebar-tab",b)}catch{}},validateDirectory:async a=>{try{let b=await fetch(`/api/workspace/validate?directory=${encodeURIComponent(a)}`);if(!b.ok)throw Error();return await b.json()}catch{return{valid:!1,error:(0,d.t)("workspace","validateFailed")}}}}));a.s(["default",0,p],912251)},626605,a=>{"use strict";a.s(["default",()=>C,"navigateToTab",()=>A,"navigateToTabOrCreate",()=>B,"useLayoutStore",()=>z]);var b=a.i(127669),c=a.i(41910),d=a.i(4873),e=a.i(484682),f=a.i(510414),g=a.i(892209),h=a.i(959709),i=a.i(760644),j=a.i(912251),k=a.i(199462),l=a.i(144784);let m="pt-active-pane-",n="pt-active-tab-",o=a=>{try{return sessionStorage.getItem(`${n}${a}`)}catch{return null}},p=null,q=null,r=null,s=!1,t=(a,b)=>{if(!b)return a;let c=a.includes("?")?"&":"?";return`${a}${c}workspace=${b}`},u=(a,b)=>{let c=a?(0,l.collectPanes)(a.root).length:0;return{paneCount:c,canSplit:c<10&&!b}},v=(a,b,c)=>{a({layout:c,...u(c,b().isSplitting)})},w=(a,b,c)=>{let d=b().layout;if(d){let a=(0,l.collectPanes)(c.root);for(let b of(d.activePaneId&&a.some(a=>a.id===d.activePaneId)&&(c.activePaneId=d.activePaneId),a)){let a=(0,l.findPane)(d.root,b.id);a?.activeTabId&&b.tabs.some(b=>b.id===a.activeTabId)&&(b.activeTabId=a.activeTabId)}}a({layout:c,...u(c,b().isSplitting)})},x=(a,b,c,d)=>{let{layout:e}=b();if(!e)return;let f=(0,l.updatePaneInTree)(e.root,c,d);f!==e.root&&v(a,b,{...e,root:f})},y=async(a,b)=>{try{let c=await fetch(a,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok)return null;return await c.json()}catch{return null}},z=(0,d.create)((a,b)=>({layout:null,isLoading:!0,error:null,isSplitting:!1,workspaceId:null,retryCount:0,paneCount:0,canSplit:!1,pendingFocusTabId:null,setWorkspaceId:b=>{s=!1,a({workspaceId:b})},setLayout:c=>{v(a,b,c)},fetchLayout:async(c,d)=>{if(s)return;let e=c??b().workspaceId;if(!e)return;p?.abort();let h=new AbortController;p=h,b().layout||a({isLoading:!0,error:null});try{let c=await fetch(t("/api/layout",e),{signal:h.signal});if(!c.ok)throw Error();let f=await c.json();if(h.signal.aborted)return;let g=b().layout;if(!1!==d){let a=(0,l.collectPanes)(f.root);if(g)for(let b of(g.activePaneId&&a.some(a=>a.id===g.activePaneId)&&(f.activePaneId=g.activePaneId),a)){let a=(0,l.findPane)(g.root,b.id);a?.activeTabId&&b.tabs.some(b=>b.id===a.activeTabId)&&(b.activeTabId=a.activeTabId)}else{let b=(a=>{try{return sessionStorage.getItem(`${m}${a}`)}catch{return null}})(e);for(let c of(b&&a.some(a=>a.id===b)&&(f.activePaneId=b),a)){let a=o(c.id);a&&c.tabs.some(b=>b.id===a)&&(c.activeTabId=a)}}}if(g){let c={root:g.root,activePaneId:g.activePaneId},d={root:f.root,activePaneId:f.activePaneId};if(JSON.stringify(c)===JSON.stringify(d)){let c=b().pendingFocusTabId;c&&(a({pendingFocusTabId:null}),b().focusTab(c));return}}let i=b().pendingFocusTabId,j=null;if(i){for(let b of(a({pendingFocusTabId:null}),(0,l.collectPanes)(f.root)))if(b.tabs.some(a=>a.id===i)){f.activePaneId=b.id,b.activeTabId=i,j=b.id;break}}a({layout:f,retryCount:0,...u(f,b().isSplitting)}),j&&(y(t("/api/layout",e),{activePaneId:j}),y(t(`/api/layout/pane/${j}`,e),{activeTabId:i}))}catch(d){if(d instanceof DOMException&&"AbortError"===d.name)return;let c=b().retryCount+1;if(a({retryCount:c}),c>=3)try{let c=await fetch(t("/api/layout/pane",e),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(c.ok){let{paneId:d,tab:e}=await c.json(),h={root:{type:"pane",id:d,tabs:[e],activeTabId:e.id},activePaneId:d,updatedAt:new Date().toISOString()};a({layout:h,...u(h,b().isSplitting)}),f.toast.info((0,g.t)("terminal","fallbackLayout")),a({retryCount:0});return}}catch{}a({error:(0,g.t)("terminal","layoutFetchError")}),q?.()}finally{h.signal.aborted||a({isLoading:!1})}},splitPane:async(c,d)=>{let{layout:e,isSplitting:h,workspaceId:i}=b();if(e&&!h&&!((0,l.collectPanes)(e.root).length>=10)){a({isSplitting:!0,canSplit:!1});try{let f,g,h=(0,l.findPane)(e.root,c),j=h?.tabs.find(a=>a.id===h.activeTabId);if(j){g=j.panelType;try{let a=await fetch(t(`/api/layout/cwd?session=${j.sessionName}`,i));a.ok&&(f=(await a.json()).cwd)}catch{}}let k=await fetch(t("/api/layout/pane",i),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourcePaneId:c,orientation:d,cwd:f,panelType:g})});if(!k.ok)throw Error();let m=await k.json();v(a,b,m)}catch{f.toast.error((0,g.t)("terminal","splitFailed"))}finally{a(a=>({isSplitting:!1,canSplit:a.paneCount<10}))}}},closePane:async c=>{let{layout:d,workspaceId:e}=b();if(d&&!((0,l.collectPanes)(d.root).length<=1))try{let d=await fetch(t(`/api/layout/pane/${c}`,e),{method:"DELETE"});if(!d.ok)throw Error();let f=await d.json();v(a,b,f)}catch{f.toast.error("Pane을 닫을 수 없습니다")}},focusPane:c=>{let{layout:d,workspaceId:e}=b();d&&d.activePaneId!==c&&(a({layout:{...d,activePaneId:c}}),y(t("/api/layout",e),{activePaneId:c}).then(c=>{c&&w(a,b,c)}))},updateRatio:(c,d)=>{let{layout:e,workspaceId:f}=b();e&&(a({layout:{...e,root:(0,l.updateRatioAtPath)(e.root,c,d)}}),r&&clearTimeout(r),r=setTimeout(()=>{r=null,y(t("/api/layout",f),{ratioUpdate:{path:c,ratio:d}}).then(c=>{c&&w(a,b,c)})},300))},moveTab:(c,d,e,f)=>{if(d===e)return;let{layout:g,workspaceId:h}=b();if(!g)return;let i=JSON.parse(JSON.stringify(g)),j=(0,l.findPane)(i.root,d),k=(0,l.findPane)(i.root,e);if(j&&k){let g=j.tabs.findIndex(a=>a.id===c);if(-1!==g){let[h]=j.tabs.splice(g,1);j.activeTabId===c&&(j.activeTabId=j.tabs[0]?.id??null),j.tabs.forEach((a,b)=>{a.order=b}),k.tabs.splice(f,0,h),k.tabs.forEach((a,b)=>{a.order=b}),k.activeTabId=c,0===j.tabs.length&&(0,l.collectPanes)(i.root).length>1&&(0,l.removePaneWithFocus)(i,d),i.activePaneId=e,v(a,b,i)}}fetch(t(`/api/layout/pane/${d}/tabs/${c}/move`,h),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({toPaneId:e,toIndex:f})}).then(async c=>{c.ok?w(a,b,await c.json()):await b().fetchLayout(void 0,!1)}).catch(()=>b().fetchLayout(void 0,!1))},createTabInPane:async(c,d,e)=>{let{layout:h,workspaceId:j}=b();try{let f,g=d,m=h?(0,l.findPane)(h.root,c):void 0,n=m?.tabs.find(a=>a.id===m.activeTabId);!g&&n&&(g=n.panelType),"web-browser"!==g&&n&&(f=k.default.getState().metadata[n.id]?.cwd);let o=await fetch(t(`/api/layout/pane/${c}/tabs`,j),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:f,panelType:g,command:e})});if(!o.ok)throw Error();let p=await o.json();return e&&i.default.getState().initTab(p.id,{panelType:g,isRestarting:!0}),x(a,b,c,a=>({...a,tabs:[...a.tabs,p],activeTabId:p.id})),b().fetchLayout(),p}catch{return f.toast.error((0,g.t)("terminal","tabCreateFailed")),null}},deleteTabInPane:async(c,d)=>{(0,h.clearInputDraft)(d),i.default.getState().cancelTab(d),x(a,b,c,a=>{let b=[...a.tabs].sort((a,b)=>a.order-b.order),c=b.findIndex(a=>a.id===d),e=b.filter(a=>a.id!==d);e.forEach((a,b)=>{a.order=b});let f=a.activeTabId;if(a.activeTabId===d){let a=b[c+1]||b[c-1];f=a?.id??null}return{...a,tabs:e,activeTabId:f}});let{workspaceId:e}=b();try{let a=await fetch(t(`/api/layout/pane/${c}/tabs/${d}`,e),{method:"DELETE"});a.ok||404===a.status||(f.toast.error((0,g.t)("terminal","tabDeleteError")),await b().fetchLayout())}catch{f.toast.error((0,g.t)("terminal","tabDeleteError")),await b().fetchLayout()}},restartTabInPane:async(a,c,d)=>{let{workspaceId:e}=b();try{return(await fetch(t(`/api/layout/pane/${a}/tabs/${c}`,e),{method:"POST",headers:d?{"Content-Type":"application/json"}:void 0,body:d?JSON.stringify({command:d}):void 0})).ok}catch{return f.toast.error((0,g.t)("terminal","sessionRestartFailed")),!1}},switchTabInPane:(c,d)=>{x(a,b,c,a=>({...a,activeTabId:d}));let{workspaceId:e}=b();y(t(`/api/layout/pane/${c}`,e),{activeTabId:d}).then(c=>{c&&w(a,b,c)})},renameTabInPane:async(c,d,e)=>{x(a,b,c,a=>({...a,tabs:a.tabs.map(a=>a.id===d?{...a,name:e}:a)}));let{workspaceId:h}=b(),i=await y(t(`/api/layout/pane/${c}/tabs/${d}`,h),{name:e});i?w(a,b,i):f.toast.error((0,g.t)("terminal","tabRenameFailed"))},reorderTabsInPane:(c,d)=>{x(a,b,c,a=>{let b=new Map(a.tabs.map(a=>[a.id,a])),c=d.map((a,c)=>{let d=b.get(a);return d?{...d,order:c}:null}).filter(a=>null!==a);return{...a,tabs:c}});let{workspaceId:e}=b();y(t(`/api/layout/pane/${c}/tabs/order`,e),{tabIds:d}).then(c=>{c&&w(a,b,c)})},removeTabLocally:(a,c)=>{(0,h.clearInputDraft)(c);let{workspaceId:d}=b();fetch(t(`/api/layout/pane/${a}/tabs/${c}`,d),{method:"DELETE"}).then(()=>b().fetchLayout()).catch(()=>{console.log("[layout] removeTabLocally failed")})},equalizeRatios:()=>{let{workspaceId:c}=b();y(t("/api/layout",c),{equalize:!0}).then(c=>{c&&w(a,b,c)})},updateTabPanelType:(c,d,e)=>{x(a,b,c,a=>({...a,tabs:a.tabs.map(a=>{if(a.id!==d)return a;let b={...a,panelType:e};return"terminal"===e&&(b.claudeSessionId=null),b})})),i.default.getState().setPanelType(d,e);let{workspaceId:f}=b();y(t(`/api/layout/pane/${c}/tabs/${d}`,f),{panelType:e}).then(c=>{c&&w(a,b,c)})},clearLayout:()=>{s=!0,p?.abort(),a({layout:null,paneCount:0,canSplit:!1})},focusTab:a=>{let{layout:c}=b();if(!c)return!1;for(let d of(0,l.collectPanes)(c.root))if(d.tabs.some(b=>b.id===a))return b().focusPane(d.id),b().switchTabInPane(d.id,a),!0;return!1},focusPrevTab:()=>{let{layout:a}=b();if(!a)return;let c=(0,l.collectPanes)(a.root),d=c.find(b=>b.id===a.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=e.findIndex(a=>a.id===d.activeTabId);if(f>0)b().switchTabInPane(d.id,e[f-1].id);else{let a=c.indexOf(d);if(a>0){let d=c[a-1],e=[...d.tabs].sort((a,b)=>a.order-b.order);b().focusPane(d.id),b().switchTabInPane(d.id,e[e.length-1].id)}}},focusNextTab:()=>{let{layout:a}=b();if(!a)return;let c=(0,l.collectPanes)(a.root),d=c.find(b=>b.id===a.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=e.findIndex(a=>a.id===d.activeTabId);if(f<e.length-1)b().switchTabInPane(d.id,e[f+1].id);else{let a=c.indexOf(d);if(a<c.length-1){let d=c[a+1],e=[...d.tabs].sort((a,b)=>a.order-b.order);b().focusPane(d.id),b().switchTabInPane(d.id,e[0].id)}}},focusTabByIndex:a=>{let{layout:c}=b();if(!c?.activePaneId)return;let d=(0,l.collectPanes)(c.root).find(a=>a.id===c.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=a>=e.length?e[e.length-1]:e[a];f&&f.id!==d.activeTabId&&b().switchTabInPane(d.id,f.id)}}));z.subscribe((a,b)=>{if(a.layout&&a.workspaceId&&a.layout!==b.layout){var c=a.workspaceId,d=a.layout;try{for(let a of(d.activePaneId&&sessionStorage.setItem(`${m}${c}`,d.activePaneId),(0,l.collectPanes)(d.root)))a.activeTabId&&sessionStorage.setItem(`${n}${a.id}`,a.activeTabId)}catch{}}});let A=(a,b)=>{let d=z.getState();if("/"!==c.default.pathname){z.setState({pendingFocusTabId:b}),j.default.getState().switchWorkspace(a),c.default.push("/");return}a===d.workspaceId?d.focusTab(b):(d.clearLayout(),z.setState({pendingFocusTabId:b}),j.default.getState().switchWorkspace(a))},B=async(a,b,c,d,e)=>{let f=j.default.getState(),g=a,h=f.workspaces.find(b=>b.id===a);if(!h){if(!e)return;let a=await f.createWorkspace(e,d,c??void 0);if(!a)return;g=a.id;let b=await fetch(t("/api/layout",g));if(!b.ok)return;let h=await b.json(),j=(0,l.collectAllTabs)(h.root)[0];if(!j)return;c&&i.default.getState().initTab(j.id,{panelType:"claude-code",isResuming:!0}),A(g,j.id);return}let k=await fetch(t("/api/layout",g));if(!k.ok)return;let m=await k.json();if((0,l.collectAllTabs)(m.root).some(a=>a.id===b))return void A(g,b);let n=m.activePaneId??(0,l.getFirstPaneId)(m.root),o={panelType:"claude-code",cwd:h.directories[0]};c&&(o.resumeSessionId=c);let p=await fetch(t(`/api/layout/pane/${n}/tabs`,g),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!p.ok)return;let q=await p.json();c&&i.default.getState().initTab(q.id,{panelType:"claude-code",isResuming:!0}),g===z.getState().workspaceId?(z.setState({pendingFocusTabId:q.id}),z.getState().fetchLayout()):A(g,q.id)},C=({workspaceId:a,onFetchError:c})=>((0,b.useEffect)(()=>{q=c??null},[c]),(0,b.useEffect)(()=>{if(a){let b=z.getState();b.setWorkspaceId(a),b.fetchLayout(a)}},[a]),(0,b.useEffect)(()=>z.subscribe(a=>{let b=a.workspaceId;if(!b||!a.layout?.root)return;let c=(0,l.collectPanes)(a.layout.root).flatMap(a=>a.tabs.map(a=>a.id));i.default.getState().setTabOrder(b,c)}),[]),z((0,e.useShallow)(a=>({layout:a.layout,isLoading:a.isLoading,error:a.error,isSplitting:a.isSplitting,paneCount:a.paneCount,canSplit:a.canSplit,splitPane:a.splitPane,closePane:a.closePane,focusPane:a.focusPane,updateRatio:a.updateRatio,moveTab:a.moveTab,createTabInPane:a.createTabInPane,deleteTabInPane:a.deleteTabInPane,restartTabInPane:a.restartTabInPane,switchTabInPane:a.switchTabInPane,renameTabInPane:a.renameTabInPane,reorderTabsInPane:a.reorderTabsInPane,removeTabLocally:a.removeTabLocally,equalizeRatios:a.equalizeRatios,updateTabPanelType:a.updateTabPanelType,clearLayout:a.clearLayout,fetchLayout:a.fetchLayout,focusTab:a.focusTab,focusPrevTab:a.focusPrevTab,focusNextTab:a.focusNextTab,focusTabByIndex:a.focusTabByIndex}))))},199462,a=>{"use strict";a.s(["default",()=>j]);var b=a.i(4873),c=a.i(626605),d=a.i(144784),e=a.i(912251);let f=null,g="",h=()=>{f&&clearTimeout(f),f=setTimeout(()=>{f=null;let{metadata:a}=i.getState(),b=c.useLayoutStore.getState().layout,h=c.useLayoutStore.getState().workspaceId;if(!b||!h)return;let j=`?workspace=${h}`;for(let c of(0,d.collectPanes)(b.root))for(let b of c.tabs){let d=a[b.id];if(!d)continue;let e={};void 0!==d.title&&d.title!==b.title&&(e.title=d.title),void 0!==d.cwd&&d.cwd!==b.cwd&&(e.cwd=d.cwd),void 0!==d.lastCommand&&(d.lastCommand??null)!==(b.lastCommand??null)&&(e.lastCommand=d.lastCommand??null),Object.keys(e).length>0&&fetch(`/api/layout/pane/${c.id}/tabs/${b.id}${j}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).catch(a=>{console.log(`[tab-metadata] sync failed: ${a instanceof Error?a.message:a}`)})}let k=[...new Set(Object.values(a).map(a=>a.cwd).filter(a=>!!a))],l=k.join("\0");if(l!==g){g=l;let{activeWorkspaceId:a,updateDirectories:b}=e.default.getState();a&&k.length>0&&b(a,k)}},100)},i=(0,b.create)(a=>({metadata:{},setTitle:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.title===c?a:{metadata:{...a.metadata,[b]:{...d,title:c}}}}),h()},setCwd:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.cwd===c?a:{metadata:{...a.metadata,[b]:{...d,cwd:c}}}}),h()},setLastCommand:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.lastCommand===c?a:{metadata:{...a.metadata,[b]:{...d,lastCommand:c}}}}),h()},removeTab:b=>{a(a=>{let{[b]:c,...d}=a.metadata;return{metadata:d}}),h()},hydrate:b=>{a(a=>{let c={};for(let[d,e]of Object.entries(b)){let b=a.metadata[d];b?c[d]={...e,...b.title?{title:b.title}:{},...b.cwd?{cwd:b.cwd}:{}}:c[d]=e}return{metadata:c}}),g=""},retainOnly:b=>{a(a=>{let c={};for(let d of b)a.metadata[d]&&(c[d]=a.metadata[d]);return{metadata:c}})},reset:()=>{f&&clearTimeout(f),f=null,g="",a({metadata:{}})}})),j=i},266254,168711,175679,206456,409679,a=>{"use strict";var b=a.i(127669),c=a.i(760644),d=a.i(199462),e=a.i(4873);let f=(0,e.create)(a=>({data:null,setData:b=>a({data:b})}));a.s(["default",0,f],168711);let g=(0,e.create)(a=>({entries:[],syncFromServer:b=>a({entries:b}),upsertEntry:b=>a(a=>{let c=a.entries.findIndex(a=>a.id===b.id);if(c>=0){let d=[...a.entries];return d[c]=b,{entries:d}}return{entries:[b,...a.entries]}})}));a.s(["default",0,g],175679);let h=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),i=a=>{if("~"===a||"/"===a)return a;let b=a.replace(/\/$/,"").split("/");return b[b.length-1]||a},j=a=>{let b=a.trim();if(!b)return null;let c=b.indexOf("|");return c>0?b.slice(0,c):null},k=a=>{let b=a.trim();if(!b)return"";let c=j(a);if(null!==c){let a=b.slice(b.indexOf("|")+1);return h.has(c)?i(a):c}let d=b.match(/@[^:]+:\s*(.*)/);if(d)return i(d[1].trim());if(b.startsWith("/")||b.startsWith("~"))return i(b);let e=b.split(/\s+/)[0];return h.has(e)?"":e||""};a.s(["formatTabTitle",0,k,"parseCurrentCommand",0,j],206456);let l=null;a.s(["ackNotificationInput",0,(a,b)=>{l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:ack-notification",tabId:a,seq:b}))},"default",0,()=>{let a=(0,b.useRef)(0),e=(0,b.useRef)(null),h=(0,b.useRef)(!0);(0,b.useEffect)(()=>{h.current=!0;let b=()=>{if(!h.current)return;let i="https:"===location.protocol?"wss:":"ws:",j=new WebSocket(`${i}//${location.host}/api/status`);l=j,j.onopen=()=>{h.current&&(a.current=0,c.default.getState().setStatusWsConnected(!0))},j.onmessage=a=>{if(h.current)try{let b=JSON.parse(a.data);switch(b.type){case"status:sync":for(let[a,e]of(c.default.getState().syncAllFromServer(b.tabs),Object.entries(b.tabs)))e.paneTitle&&!d.default.getState().metadata[a]?.title&&d.default.getState().setTitle(a,k(e.paneTitle));break;case"status:update":c.default.getState().updateFromServer(b.tabId,{cliState:b.cliState,workspaceId:b.workspaceId,tabName:b.tabName,panelType:b.panelType,terminalStatus:b.terminalStatus,listeningPorts:b.listeningPorts,currentProcess:b.currentProcess,claudeSummary:b.claudeSummary,lastUserMessage:b.lastUserMessage,lastAssistantMessage:b.lastAssistantMessage,currentAction:b.currentAction,readyForReviewAt:b.readyForReviewAt,busySince:b.busySince,dismissedAt:b.dismissedAt,claudeSessionId:b.claudeSessionId,compactingSince:b.compactingSince,lastEvent:b.lastEvent,eventSeq:b.eventSeq}),b.paneTitle&&d.default.getState().setTitle(b.tabId,k(b.paneTitle));break;case"status:hook-event":c.default.getState().applyHookEvent(b.tabId,b.event);break;case"rate-limits:update":f.getState().setData(b.data);break;case"session-history:sync":g.getState().syncFromServer(b.entries);break;case"session-history:update":g.getState().upsertEntry(b.entry)}}catch{}},j.onclose=()=>{if(!h.current)return;c.default.getState().setStatusWsConnected(!1),l=null;let d=Math.min(1e3*Math.pow(2,a.current),3e4);a.current++,e.current=setTimeout(b,d)},j.onerror=()=>{}};b();let i=()=>{if("visible"!==document.visibilityState)return;let c=l?.readyState;c!==WebSocket.OPEN&&c!==WebSocket.CONNECTING&&(e.current&&(clearTimeout(e.current),e.current=null),a.current=0,b())};return document.addEventListener("visibilitychange",i),()=>{h.current=!1,e.current&&(clearTimeout(e.current),e.current=null),l&&(l.close(),l=null),document.removeEventListener("visibilitychange",i)}},[])},"dismissTab",0,a=>{c.default.getState().dismissTab(a),l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:tab-dismissed",tabId:a}))},"requestSync",0,()=>{l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:request-sync"}))}],266254),a.i(986013),a.i(678240),a.i(626605);var m=a.i(721043);let n=async()=>{try{let a=await navigator.serviceWorker.ready,b=await a.pushManager.getSubscription();return b?.endpoint??null}catch{return null}},o=async a=>{fetch("/api/push/register-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:await n(),sessionId:a}),keepalive:!0}).catch(()=>{})};a.s(["default",0,()=>{(0,b.useRef)(!1),(0,b.useEffect)(()=>{m.default},[]),(0,b.useEffect)(()=>{},[])},"registerPushTarget",0,o],409679)}];
1
+ module.exports=[760644,a=>{"use strict";var b=a.i(4873);let c={terminalConnected:!1,claudeStatus:"unknown",claudeStatusCheckedAt:0,cliState:"inactive",isTimelineLoading:!0,isRestarting:!1,isResuming:!1,workspaceId:""},d=(a,b,c)=>{let d=a[b];return d?{...a,[b]:{...d,...c}}:a},e=(0,b.create)(a=>({tabs:{},tabOrders:{},statusWsConnected:!1,initTab:(b,d)=>a(a=>{let e=a.tabs[b],f={...c,...e,...d};return e?.cliState==="ready-for-review"&&"ready-for-review"!==f.cliState&&(f.cliState="ready-for-review",f.readyForReviewAt=e.readyForReviewAt),{tabs:{...a.tabs,[b]:f}}}),removeTab:b=>a(a=>{let{[b]:c,...d}=a.tabs;return{tabs:d}}),setTerminalConnected:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.terminalConnected!==c?{tabs:d(a.tabs,b,{terminalConnected:c})}:a}),setClaudeStatus:(b,c,e)=>a(a=>{let f=a.tabs[b];if(!f||f.claudeStatusCheckedAt>e||f.claudeStatus===c||"running"===f.claudeStatus&&"starting"===c)return a;let g={claudeStatus:c,claudeStatusCheckedAt:e};return("running"===f.claudeStatus||"starting"===f.claudeStatus)&&"running"!==c&&"starting"!==c&&f.isResuming&&(g.isResuming=!1),{tabs:d(a.tabs,b,g)}}),setTimelineLoading:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isTimelineLoading!==c?{tabs:d(a.tabs,b,{isTimelineLoading:c})}:a}),setRestarting:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isRestarting!==c?{tabs:d(a.tabs,b,{isRestarting:c})}:a}),cancelTab:b=>a(a=>{let c=a.tabs[b];return c&&"cancelled"!==c.cliState?{tabs:d(a.tabs,b,{cliState:"cancelled",localUpdatedAt:Date.now()})}:a}),dismissTab:b=>a(a=>{let c=a.tabs[b];return c&&"ready-for-review"===c.cliState?{tabs:d(a.tabs,b,{cliState:"idle",dismissedAt:Date.now()})}:a}),setResuming:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.isResuming!==c?{tabs:d(a.tabs,b,{isResuming:c})}:a}),setWorkspaceId:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.workspaceId!==c?{tabs:d(a.tabs,b,{workspaceId:c})}:a}),setPanelType:(b,c)=>a(a=>{let e=a.tabs[b];return e&&e.panelType!==c?{tabs:d(a.tabs,b,{panelType:c})}:a}),setCurrentProcess:(b,c)=>a(a=>{let e=a.tabs[b];if(!e)return a;let f=c??void 0;return e.currentProcess===f?a:{tabs:d(a.tabs,b,{currentProcess:f,localUpdatedAt:Date.now()})}}),setTabOrder:(b,c)=>a(a=>{let d=a.tabOrders[b];return d&&d.length===c.length&&d.every((a,b)=>a===c[b])?a:{tabOrders:{...a.tabOrders,[b]:c}}}),setStatusWsConnected:b=>a({statusWsConnected:b}),syncAllFromServer:b=>a(a=>{let d=Date.now(),e={};for(let[f,g]of Object.entries(b)){let b=a.tabs[f];if(b?.cliState==="cancelled"){e[f]=b;continue}b?.localUpdatedAt&&d-b.localUpdatedAt<3e4?e[f]={...b,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}:b?e[f]={...b,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,panelType:g.panelType??b.panelType,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,currentProcess:g.currentProcess,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}:e[f]={...c,cliState:g.cliState,workspaceId:g.workspaceId,tabName:g.tabName,panelType:g.panelType,terminalStatus:g.terminalStatus,listeningPorts:g.listeningPorts,currentProcess:g.currentProcess,claudeSummary:g.claudeSummary,lastUserMessage:g.lastUserMessage,lastAssistantMessage:g.lastAssistantMessage,currentAction:g.currentAction,readyForReviewAt:g.readyForReviewAt,busySince:g.busySince,dismissedAt:g.dismissedAt,claudeSessionId:g.claudeSessionId,compactingSince:g.compactingSince,lastEvent:g.lastEvent,eventSeq:g.eventSeq}}for(let[b,c]of Object.entries(a.tabs))e[b]||(e[b]=c);return{tabs:e}}),updateFromServer:(b,e)=>a(a=>{if(null===e.cliState){let{[b]:c,...d}=a.tabs;return{tabs:d}}let f=a.tabs[b];if(f){if("cancelled"===f.cliState)return a;let c=void 0!==e.eventSeq&&void 0!==f.eventSeq&&e.eventSeq<f.eventSeq,g=void 0!==e.eventSeq&&(void 0===f.eventSeq||e.eventSeq>=f.eventSeq)?{lastEvent:e.lastEvent,eventSeq:e.eventSeq}:{},h=c?{cliState:f.cliState,readyForReviewAt:f.readyForReviewAt,busySince:f.busySince,dismissedAt:f.dismissedAt}:{cliState:e.cliState,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt};return{tabs:d(a.tabs,b,{...h,workspaceId:e.workspaceId,tabName:e.tabName,panelType:e.panelType??f.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,currentProcess:e.currentProcess,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,currentAction:e.currentAction,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,...g})}}return{tabs:{...a.tabs,[b]:{...c,cliState:e.cliState,workspaceId:e.workspaceId,tabName:e.tabName,panelType:e.panelType,terminalStatus:e.terminalStatus,listeningPorts:e.listeningPorts,currentProcess:e.currentProcess,claudeSummary:e.claudeSummary,lastUserMessage:e.lastUserMessage,lastAssistantMessage:e.lastAssistantMessage,readyForReviewAt:e.readyForReviewAt,busySince:e.busySince,dismissedAt:e.dismissedAt,claudeSessionId:e.claudeSessionId,compactingSince:e.compactingSince,lastEvent:e.lastEvent,eventSeq:e.eventSeq}}}}),applyHookEvent:(b,c)=>a(a=>{let e=a.tabs[b];return!e||void 0!==e.eventSeq&&c.seq<=e.eventSeq?a:{tabs:d(a.tabs,b,{lastEvent:c,eventSeq:c.seq})}})}));a.s(["default",0,e,"isCliIdle",0,a=>"idle"===a||"ready-for-review"===a,"selectGlobalStatus",0,a=>{let b=0,c=0;for(let d of Object.values(a))"busy"===d.cliState?b++:("ready-for-review"===d.cliState||"needs-input"===d.cliState)&&c++;return{busyCount:b,attentionCount:c}},"selectSessionView",0,(a,b)=>{let c=a[b];return c?c.isRestarting?"restarting":"not-installed"===c.claudeStatus?"not-installed":"unknown"===c.claudeStatus||"starting"===c.claudeStatus?"loading":"running"===c.claudeStatus?c.isTimelineLoading?"loading":"timeline":c.isResuming||c.isTimelineLoading?"loading":"inactive":"loading"},"selectTabDisplayStatus",0,(a,b)=>{let c=a[b];return c&&"inactive"!==c.cliState?"busy"===c.cliState?"busy":"ready-for-review"===c.cliState?"ready-for-review":"needs-input"===c.cliState?"needs-input":"unknown"===c.cliState?"unknown":"idle":"idle"},"selectWorkspacePortsLabel",0,(a,b)=>{let c=new Set;for(let d of Object.values(a))if(d.workspaceId===b&&d.listeningPorts)for(let a of d.listeningPorts)c.add(a);return 0===c.size?"":":"+[...c].sort((a,b)=>a-b).join(", :")}])},484682,a=>{"use strict";var b=a.i(127669);let c=(a,b)=>{let c=a instanceof Map?a:new Map(a.entries()),d=b instanceof Map?b:new Map(b.entries());if(c.size!==d.size)return!1;for(let[a,b]of c)if(!d.has(a)||!Object.is(b,d.get(a)))return!1;return!0};a.s(["useShallow",0,function(a){let d=b.default.useRef(void 0);return b=>{let e=a(b);return!function(a,b){if(Object.is(a,b))return!0;if("object"!=typeof a||null===a||"object"!=typeof b||null===b||Object.getPrototypeOf(a)!==Object.getPrototypeOf(b))return!1;if(Symbol.iterator in a&&Symbol.iterator in b){if("entries"in a&&"entries"in b)return c(a,b);let d=a[Symbol.iterator](),e=b[Symbol.iterator](),f=d.next(),g=e.next();for(;!f.done&&!g.done;){if(!Object.is(f.value,g.value))return!1;f=d.next(),g=e.next()}return!!f.done&&!!g.done}return c({entries:()=>Object.entries(a)},{entries:()=>Object.entries(b)})}(d.current,e)?d.current=e:d.current}}],484682)},959709,912251,a=>{"use strict";var b=a.i(127669),c=a.i(510414),d=a.i(892209),e=a.i(760644);let f=new Set(["/new","/clear"]),g=a=>`pt-input-draft:${a}`,h=a=>{try{localStorage.removeItem(g(a))}catch{}};a.s(["clearInputDraft",0,h,"default",0,(a,i,j,k)=>{let l=k?.tabId,[m,n]=(0,b.useState)(()=>l?(a=>{try{return localStorage.getItem(g(a))??""}catch{return""}})(l):""),o=(0,b.useRef)(null),p=(0,b.useMemo)(()=>(0,e.isCliIdle)(a)||"unknown"===a?"input":"busy"===a||"needs-input"===a?"interrupt":"disabled",[a]),q=k?.onRestartSession,r=k?.onMessageSent,s=(0,b.useRef)(null);(0,b.useEffect)(()=>{if(l)return s.current&&clearTimeout(s.current),s.current=setTimeout(()=>((a,b)=>{try{b?localStorage.setItem(g(a),b):localStorage.removeItem(g(a))}catch{}})(l,m),300),()=>{s.current&&clearTimeout(s.current)}},[l,m]);let t=(0,b.useCallback)(()=>{if("disabled"===p)return void c.toast.error("Claude Code가 실행 중이 아닙니다");if(!j)return void c.toast.error((0,d.t)("connection","terminalDisconnected"));if(""!==m.trim()){if(f.has(m.trim().toLowerCase())){q?.(),n(""),l&&h(l);return}m.includes("\n")?(i(`\x1b[200~${m}\x1b[201~\r`),setTimeout(()=>i("\r"),500)):(i(m),setTimeout(()=>i("\r"),50)),m.trim().startsWith("/")||r?.(m.trim()),n(""),l&&h(l)}},[p,m,i,j,q,r,l]),u=(0,b.useCallback)(()=>{j?i("\x1b\x1b"):c.toast.error((0,d.t)("connection","terminalDisconnected"))},[i,j]),v=(0,b.useCallback)(()=>{let a=o.current;if(!a)return;a.focus();let b=a.value.length;a.setSelectionRange(b,b)},[]),[w,x]=(0,b.useState)(p);w!==p&&(x(p),"disabled"===p&&n(""));let y="disabled"!==p&&j;return{value:m,setValue:n,mode:p,canSend:y,send:t,interrupt:u,textareaRef:o,focusInput:v}}],959709);var i=a.i(4873);let j=[],k=!0,l=a=>{},m=a=>{fetch("/api/workspace/active",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({activeWorkspaceId:a})}).catch(()=>{})},n=(a,b)=>b&&a.some(a=>a.id===b)?b:a[0]?.id??null,o=a=>{fetch("/api/workspace/active",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(a)}).catch(a=>{console.log(`[workspace-store] active update failed: ${a instanceof Error?a.message:a}`)})},p=(0,i.create)((a,b)=>({workspaces:j,activeWorkspaceId:j.length>0?n(j):null,sidebarCollapsed:!1,sidebarWidth:240,sidebarTab:"workspace",isLoading:k,error:null,hydrate:b=>{let c=n(b.workspaces,b.activeWorkspaceId);l(c),c&&m(c),a({workspaces:b.workspaces,activeWorkspaceId:c,sidebarCollapsed:b.sidebarCollapsed,sidebarWidth:b.sidebarWidth,isLoading:!1,error:null})},fetchWorkspaces:async()=>{a({isLoading:!0,error:null});try{let b=await fetch("/api/workspace");if(!b.ok)throw Error();let c=await b.json(),d=n(c.workspaces,c.activeWorkspaceId);l(d),a({workspaces:c.workspaces,activeWorkspaceId:d,sidebarCollapsed:c.sidebarCollapsed??!1,sidebarWidth:c.sidebarWidth??240,isLoading:!1})}catch{a({error:(0,d.t)("workspace","fetchError"),isLoading:!1})}},syncWorkspaces:async()=>{try{let c=await fetch("/api/workspace");if(!c.ok)return;let d=await c.json(),e=b().workspaces;if(JSON.stringify(e)===JSON.stringify(d.workspaces))return;a({workspaces:d.workspaces})}catch(a){console.log(`[workspace-store] sync error: ${a instanceof Error?a.message:a}`)}},createWorkspace:async(b,e,f)=>{try{let c=await fetch("/api/workspace",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({directory:b,name:e,resumeSessionId:f})});if(!c.ok){let a=await c.json();throw Error(a.error||(0,d.t)("workspace","createFailed"))}let g=await c.json();return a(a=>({workspaces:[...a.workspaces,g]})),g}catch(b){let a=b instanceof Error?b.message:(0,d.t)("workspace","createFailed");return c.toast.error(a),null}},deleteWorkspace:async a=>{try{let b=await fetch(`/api/workspace/${a}`,{method:"DELETE"});if(!b.ok&&204!==b.status&&404!==b.status)throw Error();return!0}catch{return c.toast.error((0,d.t)("workspace","deleteFailed")),!1}},removeWorkspace:b=>{a(a=>{let c=a.workspaces.filter(a=>a.id!==b),d=a.activeWorkspaceId===b,e=d?c[0]?.id??null:a.activeWorkspaceId;return d&&(l(e),e&&m(e)),{workspaces:c,activeWorkspaceId:e}})},switchWorkspace:b=>{a({activeWorkspaceId:b}),l(b),m(b)},renameWorkspace:async(e,f)=>{let g=b().workspaces.find(a=>a.id===e),h=g?.name??"";a(a=>({workspaces:a.workspaces.map(a=>a.id===e?{...a,name:f}:a)}));try{if(!(await fetch(`/api/workspace/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:f})})).ok)throw Error();return!0}catch{return a(a=>({workspaces:a.workspaces.map(a=>a.id===e?{...a,name:h}:a)})),c.toast.error((0,d.t)("workspace","renameFailed")),!1}},reorderWorkspaces:(e,f)=>{let g=[...b().workspaces],[h]=g.splice(e,1);g.splice(f,0,h),a({workspaces:g}),fetch("/api/workspace/reorder",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({workspaceIds:g.map(a=>a.id)})}).catch(()=>{c.toast.error((0,d.t)("workspace","reorderFailed")),b().fetchWorkspaces()})},updateDirectories:(b,c)=>{a(a=>({workspaces:a.workspaces.map(a=>a.id===b?{...a,directories:c}:a)}))},toggleSidebar:()=>{a(a=>{let b=!a.sidebarCollapsed;return o({sidebarCollapsed:b}),{sidebarCollapsed:b}})},setSidebarWidth:b=>{a({sidebarWidth:b})},saveSidebarWidth:a=>{o({sidebarWidth:a})},setSidebarTab:b=>{a({sidebarTab:b});try{localStorage.setItem("sidebar-tab",b)}catch{}},validateDirectory:async a=>{try{let b=await fetch(`/api/workspace/validate?directory=${encodeURIComponent(a)}`);if(!b.ok)throw Error();return await b.json()}catch{return{valid:!1,error:(0,d.t)("workspace","validateFailed")}}}}));a.s(["default",0,p],912251)},626605,a=>{"use strict";a.s(["default",()=>C,"navigateToTab",()=>A,"navigateToTabOrCreate",()=>B,"useLayoutStore",()=>z]);var b=a.i(127669),c=a.i(41910),d=a.i(4873),e=a.i(484682),f=a.i(510414),g=a.i(892209),h=a.i(959709),i=a.i(760644),j=a.i(912251),k=a.i(199462),l=a.i(144784);let m="pt-active-pane-",n="pt-active-tab-",o=a=>{try{return sessionStorage.getItem(`${n}${a}`)}catch{return null}},p=null,q=null,r=null,s=!1,t=(a,b)=>{if(!b)return a;let c=a.includes("?")?"&":"?";return`${a}${c}workspace=${b}`},u=(a,b)=>{let c=a?(0,l.collectPanes)(a.root).length:0;return{paneCount:c,canSplit:c<10&&!b}},v=(a,b,c)=>{a({layout:c,...u(c,b().isSplitting)})},w=(a,b,c)=>{let d=b().layout;if(d){let a=(0,l.collectPanes)(c.root);for(let b of(d.activePaneId&&a.some(a=>a.id===d.activePaneId)&&(c.activePaneId=d.activePaneId),a)){let a=(0,l.findPane)(d.root,b.id);a?.activeTabId&&b.tabs.some(b=>b.id===a.activeTabId)&&(b.activeTabId=a.activeTabId)}}a({layout:c,...u(c,b().isSplitting)})},x=(a,b,c,d)=>{let{layout:e}=b();if(!e)return;let f=(0,l.updatePaneInTree)(e.root,c,d);f!==e.root&&v(a,b,{...e,root:f})},y=async(a,b)=>{try{let c=await fetch(a,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(b)});if(!c.ok)return null;return await c.json()}catch{return null}},z=(0,d.create)((a,b)=>({layout:null,isLoading:!0,error:null,isSplitting:!1,workspaceId:null,retryCount:0,paneCount:0,canSplit:!1,pendingFocusTabId:null,setWorkspaceId:b=>{s=!1,a({workspaceId:b})},setLayout:c=>{v(a,b,c)},fetchLayout:async(c,d)=>{if(s)return;let e=c??b().workspaceId;if(!e)return;p?.abort();let h=new AbortController;p=h,b().layout||a({isLoading:!0,error:null});try{let c=await fetch(t("/api/layout",e),{signal:h.signal});if(!c.ok)throw Error();let f=await c.json();if(h.signal.aborted)return;let g=b().layout;if(!1!==d){let a=(0,l.collectPanes)(f.root);if(g)for(let b of(g.activePaneId&&a.some(a=>a.id===g.activePaneId)&&(f.activePaneId=g.activePaneId),a)){let a=(0,l.findPane)(g.root,b.id);a?.activeTabId&&b.tabs.some(b=>b.id===a.activeTabId)&&(b.activeTabId=a.activeTabId)}else{let b=(a=>{try{return sessionStorage.getItem(`${m}${a}`)}catch{return null}})(e);for(let c of(b&&a.some(a=>a.id===b)&&(f.activePaneId=b),a)){let a=o(c.id);a&&c.tabs.some(b=>b.id===a)&&(c.activeTabId=a)}}}if(g){let c={root:g.root,activePaneId:g.activePaneId},d={root:f.root,activePaneId:f.activePaneId};if(JSON.stringify(c)===JSON.stringify(d)){let c=b().pendingFocusTabId;c&&(a({pendingFocusTabId:null}),b().focusTab(c));return}}let i=b().pendingFocusTabId,j=null;if(i){for(let b of(a({pendingFocusTabId:null}),(0,l.collectPanes)(f.root)))if(b.tabs.some(a=>a.id===i)){f.activePaneId=b.id,b.activeTabId=i,j=b.id;break}}a({layout:f,retryCount:0,...u(f,b().isSplitting)}),j&&(y(t("/api/layout",e),{activePaneId:j}),y(t(`/api/layout/pane/${j}`,e),{activeTabId:i}))}catch(d){if(d instanceof DOMException&&"AbortError"===d.name)return;let c=b().retryCount+1;if(a({retryCount:c}),c>=3)try{let c=await fetch(t("/api/layout/pane",e),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(c.ok){let{paneId:d,tab:e}=await c.json(),h={root:{type:"pane",id:d,tabs:[e],activeTabId:e.id},activePaneId:d,updatedAt:new Date().toISOString()};a({layout:h,...u(h,b().isSplitting)}),f.toast.info((0,g.t)("terminal","fallbackLayout")),a({retryCount:0});return}}catch{}a({error:(0,g.t)("terminal","layoutFetchError")}),q?.()}finally{h.signal.aborted||a({isLoading:!1})}},splitPane:async(c,d)=>{let{layout:e,isSplitting:h,workspaceId:i}=b();if(e&&!h&&!((0,l.collectPanes)(e.root).length>=10)){a({isSplitting:!0,canSplit:!1});try{let f,g,h=(0,l.findPane)(e.root,c),j=h?.tabs.find(a=>a.id===h.activeTabId);if(j){g=j.panelType;try{let a=await fetch(t(`/api/layout/cwd?session=${j.sessionName}`,i));a.ok&&(f=(await a.json()).cwd)}catch{}}let k=await fetch(t("/api/layout/pane",i),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({sourcePaneId:c,orientation:d,cwd:f,panelType:g})});if(!k.ok)throw Error();let m=await k.json();v(a,b,m)}catch{f.toast.error((0,g.t)("terminal","splitFailed"))}finally{a(a=>({isSplitting:!1,canSplit:a.paneCount<10}))}}},closePane:async c=>{let{layout:d,workspaceId:e}=b();if(d&&!((0,l.collectPanes)(d.root).length<=1))try{let d=await fetch(t(`/api/layout/pane/${c}`,e),{method:"DELETE"});if(!d.ok)throw Error();let f=await d.json();v(a,b,f)}catch{f.toast.error("Pane을 닫을 수 없습니다")}},focusPane:c=>{let{layout:d,workspaceId:e}=b();d&&d.activePaneId!==c&&(a({layout:{...d,activePaneId:c}}),y(t("/api/layout",e),{activePaneId:c}).then(c=>{c&&w(a,b,c)}))},updateRatio:(c,d)=>{let{layout:e,workspaceId:f}=b();e&&(a({layout:{...e,root:(0,l.updateRatioAtPath)(e.root,c,d)}}),r&&clearTimeout(r),r=setTimeout(()=>{r=null,y(t("/api/layout",f),{ratioUpdate:{path:c,ratio:d}}).then(c=>{c&&w(a,b,c)})},300))},moveTab:(c,d,e,f)=>{if(d===e)return;let{layout:g,workspaceId:h}=b();if(!g)return;let i=JSON.parse(JSON.stringify(g)),j=(0,l.findPane)(i.root,d),k=(0,l.findPane)(i.root,e);if(j&&k){let g=j.tabs.findIndex(a=>a.id===c);if(-1!==g){let[h]=j.tabs.splice(g,1);j.activeTabId===c&&(j.activeTabId=j.tabs[0]?.id??null),j.tabs.forEach((a,b)=>{a.order=b}),k.tabs.splice(f,0,h),k.tabs.forEach((a,b)=>{a.order=b}),k.activeTabId=c,0===j.tabs.length&&(0,l.collectPanes)(i.root).length>1&&(0,l.removePaneWithFocus)(i,d),i.activePaneId=e,v(a,b,i)}}fetch(t(`/api/layout/pane/${d}/tabs/${c}/move`,h),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({toPaneId:e,toIndex:f})}).then(async c=>{c.ok?w(a,b,await c.json()):await b().fetchLayout(void 0,!1)}).catch(()=>b().fetchLayout(void 0,!1))},createTabInPane:async(c,d,e)=>{let{layout:h,workspaceId:j}=b();try{let f,g=d,m=h?(0,l.findPane)(h.root,c):void 0,n=m?.tabs.find(a=>a.id===m.activeTabId);!g&&n&&(g=n.panelType),"web-browser"!==g&&n&&(f=k.default.getState().metadata[n.id]?.cwd);let o=await fetch(t(`/api/layout/pane/${c}/tabs`,j),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:f,panelType:g,command:e})});if(!o.ok)throw Error();let p=await o.json();return e&&i.default.getState().initTab(p.id,{panelType:g,isRestarting:!0}),x(a,b,c,a=>({...a,tabs:[...a.tabs,p],activeTabId:p.id})),b().fetchLayout(),p}catch{return f.toast.error((0,g.t)("terminal","tabCreateFailed")),null}},deleteTabInPane:async(c,d)=>{(0,h.clearInputDraft)(d),i.default.getState().cancelTab(d),x(a,b,c,a=>{let b=[...a.tabs].sort((a,b)=>a.order-b.order),c=b.findIndex(a=>a.id===d),e=b.filter(a=>a.id!==d);e.forEach((a,b)=>{a.order=b});let f=a.activeTabId;if(a.activeTabId===d){let a=b[c+1]||b[c-1];f=a?.id??null}return{...a,tabs:e,activeTabId:f}});let{workspaceId:e}=b();try{let a=await fetch(t(`/api/layout/pane/${c}/tabs/${d}`,e),{method:"DELETE"});a.ok||404===a.status||(f.toast.error((0,g.t)("terminal","tabDeleteError")),await b().fetchLayout())}catch{f.toast.error((0,g.t)("terminal","tabDeleteError")),await b().fetchLayout()}},restartTabInPane:async(a,c,d)=>{let{workspaceId:e}=b();try{return(await fetch(t(`/api/layout/pane/${a}/tabs/${c}`,e),{method:"POST",headers:d?{"Content-Type":"application/json"}:void 0,body:d?JSON.stringify({command:d}):void 0})).ok}catch{return f.toast.error((0,g.t)("terminal","sessionRestartFailed")),!1}},switchTabInPane:(c,d)=>{x(a,b,c,a=>({...a,activeTabId:d}));let{workspaceId:e}=b();y(t(`/api/layout/pane/${c}`,e),{activeTabId:d}).then(c=>{c&&w(a,b,c)})},renameTabInPane:async(c,d,e)=>{x(a,b,c,a=>({...a,tabs:a.tabs.map(a=>a.id===d?{...a,name:e}:a)}));let{workspaceId:h}=b(),i=await y(t(`/api/layout/pane/${c}/tabs/${d}`,h),{name:e});i?w(a,b,i):f.toast.error((0,g.t)("terminal","tabRenameFailed"))},reorderTabsInPane:(c,d)=>{x(a,b,c,a=>{let b=new Map(a.tabs.map(a=>[a.id,a])),c=d.map((a,c)=>{let d=b.get(a);return d?{...d,order:c}:null}).filter(a=>null!==a);return{...a,tabs:c}});let{workspaceId:e}=b();y(t(`/api/layout/pane/${c}/tabs/order`,e),{tabIds:d}).then(c=>{c&&w(a,b,c)})},removeTabLocally:(a,c)=>{(0,h.clearInputDraft)(c);let{workspaceId:d}=b();fetch(t(`/api/layout/pane/${a}/tabs/${c}`,d),{method:"DELETE"}).then(()=>b().fetchLayout()).catch(()=>{console.log("[layout] removeTabLocally failed")})},equalizeRatios:()=>{let{workspaceId:c}=b();y(t("/api/layout",c),{equalize:!0}).then(c=>{c&&w(a,b,c)})},updateTabPanelType:(c,d,e)=>{x(a,b,c,a=>({...a,tabs:a.tabs.map(a=>{if(a.id!==d)return a;let b={...a,panelType:e};return"terminal"===e&&(b.claudeSessionId=null),b})})),i.default.getState().setPanelType(d,e);let{workspaceId:f}=b();y(t(`/api/layout/pane/${c}/tabs/${d}`,f),{panelType:e}).then(c=>{c&&w(a,b,c)})},clearLayout:()=>{s=!0,p?.abort(),a({layout:null,paneCount:0,canSplit:!1})},focusTab:a=>{let{layout:c}=b();if(!c)return!1;for(let d of(0,l.collectPanes)(c.root))if(d.tabs.some(b=>b.id===a))return b().focusPane(d.id),b().switchTabInPane(d.id,a),!0;return!1},focusPrevTab:()=>{let{layout:a}=b();if(!a)return;let c=(0,l.collectPanes)(a.root),d=c.find(b=>b.id===a.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=e.findIndex(a=>a.id===d.activeTabId);if(f>0)b().switchTabInPane(d.id,e[f-1].id);else{let a=c.indexOf(d);if(a>0){let d=c[a-1],e=[...d.tabs].sort((a,b)=>a.order-b.order);b().focusPane(d.id),b().switchTabInPane(d.id,e[e.length-1].id)}}},focusNextTab:()=>{let{layout:a}=b();if(!a)return;let c=(0,l.collectPanes)(a.root),d=c.find(b=>b.id===a.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=e.findIndex(a=>a.id===d.activeTabId);if(f<e.length-1)b().switchTabInPane(d.id,e[f+1].id);else{let a=c.indexOf(d);if(a<c.length-1){let d=c[a+1],e=[...d.tabs].sort((a,b)=>a.order-b.order);b().focusPane(d.id),b().switchTabInPane(d.id,e[0].id)}}},focusTabByIndex:a=>{let{layout:c}=b();if(!c?.activePaneId)return;let d=(0,l.collectPanes)(c.root).find(a=>a.id===c.activePaneId);if(!d)return;let e=[...d.tabs].sort((a,b)=>a.order-b.order),f=a>=e.length?e[e.length-1]:e[a];f&&f.id!==d.activeTabId&&b().switchTabInPane(d.id,f.id)}}));z.subscribe((a,b)=>{if(a.layout&&a.workspaceId&&a.layout!==b.layout){var c=a.workspaceId,d=a.layout;try{for(let a of(d.activePaneId&&sessionStorage.setItem(`${m}${c}`,d.activePaneId),(0,l.collectPanes)(d.root)))a.activeTabId&&sessionStorage.setItem(`${n}${a.id}`,a.activeTabId)}catch{}}});let A=(a,b)=>{let d=z.getState();if("/"!==c.default.pathname){z.setState({pendingFocusTabId:b}),j.default.getState().switchWorkspace(a),c.default.push("/");return}a===d.workspaceId?d.focusTab(b):(d.clearLayout(),z.setState({pendingFocusTabId:b}),j.default.getState().switchWorkspace(a))},B=async(a,b,c,d,e)=>{let f=j.default.getState(),g=a,h=f.workspaces.find(b=>b.id===a);if(!h){if(!e)return;let a=await f.createWorkspace(e,d,c??void 0);if(!a)return;g=a.id;let b=await fetch(t("/api/layout",g));if(!b.ok)return;let h=await b.json(),j=(0,l.collectAllTabs)(h.root)[0];if(!j)return;c&&i.default.getState().initTab(j.id,{panelType:"claude-code",isResuming:!0}),A(g,j.id);return}let k=await fetch(t("/api/layout",g));if(!k.ok)return;let m=await k.json();if((0,l.collectAllTabs)(m.root).some(a=>a.id===b))return void A(g,b);let n=m.activePaneId??(0,l.getFirstPaneId)(m.root),o={panelType:"claude-code",cwd:h.directories[0]};c&&(o.resumeSessionId=c);let p=await fetch(t(`/api/layout/pane/${n}/tabs`,g),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!p.ok)return;let q=await p.json();c&&i.default.getState().initTab(q.id,{panelType:"claude-code",isResuming:!0}),g===z.getState().workspaceId?(z.setState({pendingFocusTabId:q.id}),z.getState().fetchLayout()):A(g,q.id)},C=({workspaceId:a,onFetchError:c})=>((0,b.useEffect)(()=>{q=c??null},[c]),(0,b.useEffect)(()=>{if(a){let b=z.getState();b.setWorkspaceId(a),b.fetchLayout(a)}},[a]),(0,b.useEffect)(()=>z.subscribe(a=>{let b=a.workspaceId;if(!b||!a.layout?.root)return;let c=(0,l.collectPanes)(a.layout.root).flatMap(a=>a.tabs.map(a=>a.id));i.default.getState().setTabOrder(b,c)}),[]),z((0,e.useShallow)(a=>({layout:a.layout,isLoading:a.isLoading,error:a.error,isSplitting:a.isSplitting,paneCount:a.paneCount,canSplit:a.canSplit,splitPane:a.splitPane,closePane:a.closePane,focusPane:a.focusPane,updateRatio:a.updateRatio,moveTab:a.moveTab,createTabInPane:a.createTabInPane,deleteTabInPane:a.deleteTabInPane,restartTabInPane:a.restartTabInPane,switchTabInPane:a.switchTabInPane,renameTabInPane:a.renameTabInPane,reorderTabsInPane:a.reorderTabsInPane,removeTabLocally:a.removeTabLocally,equalizeRatios:a.equalizeRatios,updateTabPanelType:a.updateTabPanelType,clearLayout:a.clearLayout,fetchLayout:a.fetchLayout,focusTab:a.focusTab,focusPrevTab:a.focusPrevTab,focusNextTab:a.focusNextTab,focusTabByIndex:a.focusTabByIndex}))))},199462,a=>{"use strict";a.s(["default",()=>j]);var b=a.i(4873),c=a.i(626605),d=a.i(144784),e=a.i(912251);let f=null,g="",h=()=>{f&&clearTimeout(f),f=setTimeout(()=>{f=null;let{metadata:a}=i.getState(),b=c.useLayoutStore.getState().layout,h=c.useLayoutStore.getState().workspaceId;if(!b||!h)return;let j=`?workspace=${h}`;for(let c of(0,d.collectPanes)(b.root))for(let b of c.tabs){let d=a[b.id];if(!d)continue;let e={};void 0!==d.title&&d.title!==b.title&&(e.title=d.title),void 0!==d.cwd&&d.cwd!==b.cwd&&(e.cwd=d.cwd),void 0!==d.lastCommand&&(d.lastCommand??null)!==(b.lastCommand??null)&&(e.lastCommand=d.lastCommand??null),Object.keys(e).length>0&&fetch(`/api/layout/pane/${c.id}/tabs/${b.id}${j}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).catch(a=>{console.log(`[tab-metadata] sync failed: ${a instanceof Error?a.message:a}`)})}let k=[...new Set(Object.values(a).map(a=>a.cwd).filter(a=>!!a))],l=k.join("\0");if(l!==g){g=l;let{activeWorkspaceId:a,updateDirectories:b}=e.default.getState();a&&k.length>0&&b(a,k)}},100)},i=(0,b.create)(a=>({metadata:{},setTitle:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.title===c?a:{metadata:{...a.metadata,[b]:{...d,title:c}}}}),h()},setCwd:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.cwd===c?a:{metadata:{...a.metadata,[b]:{...d,cwd:c}}}}),h()},setLastCommand:(b,c)=>{a(a=>{let d=a.metadata[b];return d?.lastCommand===c?a:{metadata:{...a.metadata,[b]:{...d,lastCommand:c}}}}),h()},removeTab:b=>{a(a=>{let{[b]:c,...d}=a.metadata;return{metadata:d}}),h()},hydrate:b=>{a(a=>{let c={};for(let[d,e]of Object.entries(b)){let b=a.metadata[d];b?c[d]={...e,...b.title?{title:b.title}:{},...b.cwd?{cwd:b.cwd}:{}}:c[d]=e}return{metadata:c}}),g=""},retainOnly:b=>{a(a=>{let c={};for(let d of b)a.metadata[d]&&(c[d]=a.metadata[d]);return{metadata:c}})},reset:()=>{f&&clearTimeout(f),f=null,g="",a({metadata:{}})}})),j=i},266254,168711,175679,206456,409679,a=>{"use strict";var b=a.i(127669),c=a.i(760644),d=a.i(199462),e=a.i(4873);let f=(0,e.create)(a=>({data:null,setData:b=>a({data:b})}));a.s(["default",0,f],168711);let g=(0,e.create)(a=>({entries:[],syncFromServer:b=>a({entries:b}),upsertEntry:b=>a(a=>{let c=a.entries.findIndex(a=>a.id===b.id);if(c>=0){let d=[...a.entries];return d[c]=b,{entries:d}}return{entries:[b,...a.entries]}})}));a.s(["default",0,g],175679);let h=new Set(["zsh","bash","fish","sh","-zsh","-bash","-fish","-sh"]),i=a=>{if("~"===a||"/"===a)return a;let b=a.replace(/\/$/,"").split("/");return b[b.length-1]||a},j=a=>{let b=a.trim();if(!b)return null;let c=b.indexOf("|");return c>0?b.slice(0,c):null},k=a=>{let b=a.trim();if(!b)return"";let c=j(a);if(null!==c){let a=b.slice(b.indexOf("|")+1);return h.has(c)?i(a):c}let d=b.match(/@[^:]+:\s*(.*)/);if(d)return i(d[1].trim());if(b.startsWith("/")||b.startsWith("~"))return i(b);let e=b.split(/\s+/)[0];return h.has(e)?"":e||""};a.s(["formatTabTitle",0,k,"parseCurrentCommand",0,j],206456);let l=null;a.s(["ackNotificationInput",0,(a,b)=>{l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:ack-notification",tabId:a,seq:b}))},"default",0,()=>{let a=(0,b.useRef)(0),e=(0,b.useRef)(null),h=(0,b.useRef)(!0);(0,b.useEffect)(()=>{h.current=!0;let b=()=>{if(!h.current)return;let i="https:"===location.protocol?"wss:":"ws:",j=new WebSocket(`${i}//${location.host}/api/status`);l=j,j.onopen=()=>{h.current&&(a.current=0,c.default.getState().setStatusWsConnected(!0))},j.onmessage=a=>{if(h.current)try{let b=JSON.parse(a.data);switch(b.type){case"status:sync":for(let[a,e]of(c.default.getState().syncAllFromServer(b.tabs),Object.entries(b.tabs)))e.paneTitle&&!d.default.getState().metadata[a]?.title&&d.default.getState().setTitle(a,k(e.paneTitle));break;case"status:update":c.default.getState().updateFromServer(b.tabId,{cliState:b.cliState,workspaceId:b.workspaceId,tabName:b.tabName,panelType:b.panelType,terminalStatus:b.terminalStatus,listeningPorts:b.listeningPorts,currentProcess:b.currentProcess,claudeSummary:b.claudeSummary,lastUserMessage:b.lastUserMessage,lastAssistantMessage:b.lastAssistantMessage,currentAction:b.currentAction,readyForReviewAt:b.readyForReviewAt,busySince:b.busySince,dismissedAt:b.dismissedAt,claudeSessionId:b.claudeSessionId,compactingSince:b.compactingSince,lastEvent:b.lastEvent,eventSeq:b.eventSeq}),b.paneTitle&&d.default.getState().setTitle(b.tabId,k(b.paneTitle));break;case"status:hook-event":c.default.getState().applyHookEvent(b.tabId,b.event);break;case"rate-limits:update":f.getState().setData(b.data);break;case"session-history:sync":g.getState().syncFromServer(b.entries);break;case"session-history:update":g.getState().upsertEntry(b.entry)}}catch{}},j.onclose=()=>{if(!h.current)return;c.default.getState().setStatusWsConnected(!1),l=null;let d=Math.min(1e3*Math.pow(2,a.current),3e4);a.current++,e.current=setTimeout(b,d)},j.onerror=()=>{}};b();let i=()=>{if("visible"!==document.visibilityState)return;let c=l?.readyState;c!==WebSocket.OPEN&&c!==WebSocket.CONNECTING&&(e.current&&(clearTimeout(e.current),e.current=null),a.current=0,b())};return document.addEventListener("visibilitychange",i),()=>{h.current=!1,e.current&&(clearTimeout(e.current),e.current=null),l&&(l.close(),l=null),document.removeEventListener("visibilitychange",i)}},[])},"dismissTab",0,a=>{c.default.getState().dismissTab(a),l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:tab-dismissed",tabId:a}))},"requestSync",0,()=>{l?.readyState===WebSocket.OPEN&&l.send(JSON.stringify({type:"status:request-sync"}))}],266254),a.i(986013),a.i(678240),a.i(626605);var m=a.i(721043);let n=async()=>{try{let a=await navigator.serviceWorker.ready,b=await a.pushManager.getSubscription();return b?.endpoint??null}catch{return null}},o=async a=>{fetch("/api/push/register-session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({endpoint:await n(),sessionId:a}),keepalive:!0}).catch(()=>{})};a.s(["default",0,()=>{(0,b.useRef)(!1),(0,b.useEffect)(()=>{m.default},[]),(0,b.useEffect)(()=>{},[])},"registerPushTarget",0,o],409679)}];
2
2
 
3
3
  //# sourceMappingURL=_0-xx2s1._.js.map
@@ -1,3 +1,3 @@
1
- module.exports=[811705,396552,a=>{"use strict";var b=a.i(508171),c=a.i(799856);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}],811705);var d=a.i(398544);let e=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString();a.s(["WEEKDAY_LABELS",0,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"formatAxisTick",0,a=>e(a),"formatCostWithComma",0,a=>{if(a<1)return`$${a.toFixed(2)}`;let[b,c]=a.toFixed(1).split(".");return`$${Number(b).toLocaleString()}.${c}`},"formatDate",0,a=>(0,d.default)(a).format("MM/DD"),"formatDuration",0,a=>{let b=Math.floor(a/6e4);if(b<60)return`${b}m`;let c=Math.floor(b/60);if(c<24)return`${c}h ${b%60}m`;let d=Math.floor(c/24);return`${d}d ${c%24}h`},"formatNumber",0,e,"formatNumberWithComma",0,a=>a.toLocaleString(),"getChangeRate",0,(a,b)=>{if(0===b)return null;let c=(a-b)/b*100;return`${c>=0?"+":""}${Math.round(c).toLocaleString()}%`}],396552)},356233,a=>{"use strict";var b=a.i(127669),c=a.i(760644);a.s(["default",0,a=>{let d=(0,c.default)(a=>(0,c.selectGlobalStatus)(a.tabs).attentionCount);(0,b.useEffect)(()=>{try{document.title=d>0?`(${d}) ${a}`:a}catch{}},[d,a])}])},274399,a=>{"use strict";let b=(0,a.i(564375).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,b],274399)},436028,a=>{"use strict";let b=(0,a.i(564375).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,b],436028)},776979,a=>{"use strict";var b=a.i(508171),c=a.i(127669),d=a.i(113952),e=a.i(436028),f=a.i(506766),g=a.i(396465);let h=({onRetry:a})=>{let c=(0,d.useTranslations)("stats"),h=(0,d.useTranslations)("common");return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl bg-card py-12 ring-1 ring-foreground/10",children:[(0,b.jsx)(e.AlertCircle,{className:"h-5 w-5 text-muted-foreground"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c("errorLoadFailed")}),(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:a,children:[(0,b.jsx)(f.RefreshCw,{className:"mr-1.5 h-3 w-3"}),h("retry")]})]})};class i extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(a,b){console.error(`[${this.props.sectionName}] Error:`,a,b)}handleRetry=()=>{this.setState({hasError:!1})};render(){return this.state.hasError?(0,b.jsx)(h,{onRetry:this.handleRetry}):this.props.children}}a.s(["default",0,i])},321327,a=>{"use strict";var b=a.i(579168),c=a.i(627068),d=a.i(332759),e=a.i(817359),f=a.i(468695),g=a.i(508171),h=a.i(127669),i=a.i(119059),j=a.i(113952),k=a.i(199987),l=a.i(125487),m=a.i(274399),n=a.i(396465),o=a.i(356233),p=a.i(266929),q=a.i(776979),r=a.i(398544),s=a.i(92654),t=a.i(93538),u=a.i(643228),v=a.i(506766),w=a.i(581228),x=a.i(510414),y=a.i(811705),z=a.i(396552);let A="prose prose-sm prose-invert max-w-none text-foreground/80 [&_h2]:mt-4 [&_h2]:mb-1 [&_h2]:text-base [&_h2]:font-semibold [&_h2]:text-foreground [&_h3]:mt-2 [&_h3]:mb-0.5 [&_h3]:text-sm [&_h3]:font-medium [&_h3]:text-foreground/80 [&_ul]:my-0.5 [&_ul]:pl-4 [&_li]:my-0 [&_li]:text-sm [&_p]:text-sm [&_p]:my-1 [&_p]:leading-relaxed",B=(0,h.memo)(({days:a,cache:b,onCacheUpdate:c,batchActions:d,onBatchRunningChange:e})=>{let f=(0,j.useTranslations)("stats"),[i,k]=(0,h.useState)(null),[m,o]=(0,h.useState)(new Set),[p,q]=(0,h.useState)(!1),B=(0,h.useRef)(!1),C=(0,h.useCallback)(async(a,b=!1)=>{let c=await fetch("/api/stats/daily-report/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({date:a,force:b})});if(!c.ok)throw Error((await c.json().catch(()=>({message:"unknown error"}))).message??`HTTP ${c.status}`);return await c.json()},[]),D=(0,h.useCallback)(async(a,b=!1)=>{k(a);try{let d=await C(a,b);c(a,d),x.toast.success(f("summaryGenerated"))}catch(a){x.toast.error(a instanceof Error?a.message:f("summaryFailed"))}finally{k(null)}},[C,c,f]),E=(0,h.useCallback)(async()=>{B.current=!1,q(!0);let d=0;try{for(let e of a){if(B.current)break;if(!b?.days[e.date]){k(e.date);try{let a=await C(e.date);c(e.date,a),d++}catch{x.toast.error(f("summaryDateFailed",{date:e.date}));break}}}}finally{k(null),q(!1),d>0&&x.toast.success(f("summaryBatchComplete",{count:d}))}},[a,b,C,c,f]),F=(0,h.useCallback)(()=>{B.current=!0},[]),G=(0,h.useCallback)(a=>{o(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),H=(0,r.default)().format("YYYY-MM-DD");return(0,h.useEffect)(()=>{d&&(d.start=E,d.stop=F)},[d,E,F]),(0,h.useEffect)(()=>{e?.(p)},[p,e]),(0,g.jsxs)("div",{className:"space-y-4",children:[a.map(a=>{let c=(0,r.default)(a.date),d=z.WEEKDAY_LABELS[c.day()],e=a.date===H,h=b?.days[a.date]??null,j=i===a.date,k=m.has(a.date);return(0,g.jsxs)("div",{className:"space-y-2",children:[(0,g.jsxs)("div",{className:"flex items-center justify-between px-1",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsxs)("span",{className:"text-base font-medium text-muted-foreground",children:[a.date," (",d,")"]}),e&&(0,g.jsx)("span",{className:"rounded bg-ui-teal/15 px-1.5 py-0.5 text-[10px] font-medium text-ui-teal",children:f("today")})]}),(0,g.jsxs)("div",{className:"flex items-center gap-1.5",children:[h&&(0,g.jsxs)(g.Fragment,{children:[j&&(0,g.jsx)("span",{className:"text-xs text-muted-foreground",children:f("generating")}),(0,g.jsx)(n.Button,{variant:"ghost",size:"icon-xs",onClick:()=>D(a.date,!0),disabled:null!==i,className:"text-muted-foreground",children:(0,g.jsx)(v.RefreshCw,{className:`h-3 w-3${j?" animate-spin":""}`})})]}),(0,g.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[f("sessionCount",{count:a.sessionCount})," · ",(0,z.formatCostWithComma)(a.cost)]})]})]}),(0,g.jsx)(y.Card,{size:"sm",children:(0,g.jsxs)(y.CardContent,{className:"space-y-2",children:[!h&&!j&&(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>D(a.date),disabled:null!==i,children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),f("summarize")]}),!h&&j&&(0,g.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,g.jsx)(w.default,{className:"h-2.5 w-2.5"}),(0,g.jsx)("span",{children:f("generatingSummary")})]}),h&&(0,g.jsx)(g.Fragment,{children:(0,g.jsxs)("div",{className:j?"opacity-40":void 0,children:[(0,g.jsx)("div",{className:A,children:(0,g.jsx)(s.default,{children:h.brief})}),h.detail&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.Button,{variant:"ghost",size:"xs",onClick:()=>G(a.date),className:"text-muted-foreground",disabled:j,children:k?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(t.ChevronDown,{className:"h-3 w-3"}),f("collapse")]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(u.ChevronRight,{className:"h-3 w-3"}),f("showMore")]})}),k&&(0,g.jsx)("div",{className:"border-t pt-2",children:(0,g.jsx)("div",{className:A,children:(0,g.jsx)(s.default,{children:h.detail})})})]})]})})]})})]},a.date)}),0===a.length&&(0,g.jsx)("p",{className:"py-4 text-center text-xs text-muted-foreground",children:f("noActivity")})]})}),C=()=>{let a=(0,j.useTranslations)("reports");(0,o.default)(a("title"));let[b,c]=(0,h.useState)([]),[d,e]=(0,h.useState)(0),[f,p]=(0,h.useState)(!0),[r,s]=(0,h.useState)(!1),t=(0,h.useCallback)(async(a,b)=>(await fetch(`/api/stats/daily-report/list?offset=${a}&limit=10`,{signal:b})).json(),[]);(0,h.useEffect)(()=>{let a=new AbortController;return t(0,a.signal).then(a=>{c(a.days),e(a.total)}).catch(()=>{}).finally(()=>p(!1)),()=>a.abort()},[t]);let u=(0,h.useCallback)(async()=>{s(!0);try{let a=await t(b.length);c(b=>[...b,...a.days]),e(a.total)}catch{}finally{s(!1)}},[b.length,t]),v=(0,h.useCallback)((a,b)=>{c(c=>c.map(c=>c.date===a?{...c,report:b}:c))},[]),w=b.map(a=>({date:a.date,sessionCount:a.sessionCount,cost:a.cost})),x={days:Object.fromEntries(b.filter(a=>a.report).map(a=>[a.date,a.report]))},y=b.length<d,z=b.filter(a=>!a.report).length,A=(0,h.useRef)({start:()=>{},stop:()=>{}}),[C,D]=(0,h.useState)(!1),E=(0,g.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,g.jsxs)("div",{className:"mx-auto max-w-content px-4 py-6",children:[(0,g.jsxs)("div",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsx)(k.FileText,{className:"h-5 w-5 text-claude-active"}),(0,g.jsx)("h1",{className:"text-base font-semibold",children:a("title")})]}),(0,g.jsx)("div",{className:"flex items-center gap-2",children:!f&&z>0&&(C?(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.stop(),children:[(0,g.jsx)(m.Square,{className:"h-3 w-3"}),a("stop")]}):(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.start(),children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),a("summarize",{count:z})]}))})]}),(0,g.jsx)(q.default,{sectionName:a("title"),children:f?(0,g.jsx)("div",{className:"space-y-2",children:Array.from({length:5}).map((a,b)=>(0,g.jsxs)("div",{className:"flex items-center gap-3 rounded-xl bg-card px-4 py-4 ring-1 ring-foreground/10",children:[(0,g.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,g.jsx)("div",{className:"h-3.5 w-32 animate-pulse rounded bg-muted"}),(0,g.jsx)("div",{className:"h-3 w-20 animate-pulse rounded bg-muted"})]}),(0,g.jsx)("div",{className:"h-3 w-24 animate-pulse rounded bg-muted"})]},b))}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(B,{days:w,cache:x,onCacheUpdate:v,batchActions:A.current,onBatchRunningChange:D}),y&&(0,g.jsx)("div",{className:"mt-3 flex justify-center",children:(0,g.jsx)(n.Button,{variant:"outline",size:"sm",onClick:u,disabled:r,children:r?a("loadingMore"):a("loadMore",{count:d-b.length})})})]})})]})});return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.default,{children:(0,g.jsx)("title",{children:a("pageTitle")})}),E]})};C.getLayout=p.getPageShellWithTitlebarLayout;let D=async b=>{let{requireAuth:c}=await a.A(120441),{loadMessagesServer:d}=await a.A(168414);return c(b,async()=>({props:{messages:await d()}}))};a.s(["default",0,C,"getServerSideProps",0,D],254728);var E=a.i(254728),F=a.i(509193);let G=(0,d.hoist)(E,"default"),H=(0,d.hoist)(E,"getStaticProps"),I=(0,d.hoist)(E,"getStaticPaths"),J=(0,d.hoist)(E,"getServerSideProps"),K=(0,d.hoist)(E,"config"),L=(0,d.hoist)(E,"reportWebVitals"),M=(0,d.hoist)(E,"unstable_getStaticProps"),N=(0,d.hoist)(E,"unstable_getStaticPaths"),O=(0,d.hoist)(E,"unstable_getStaticParams"),P=(0,d.hoist)(E,"unstable_getServerProps"),Q=(0,d.hoist)(E,"unstable_getServerSideProps"),R=new b.PagesRouteModule({definition:{kind:c.RouteKind.PAGES,page:"/reports",pathname:"/reports",bundlePath:"",filename:""},distDir:".next",relativeProjectDir:"",components:{App:f.default,Document:e.default},userland:E}),S=(0,F.getHandler)({srcPage:"/reports",config:K,userland:E,routeModule:R,getStaticPaths:I,getStaticProps:H,getServerSideProps:J});a.s(["config",0,K,"default",0,G,"getServerSideProps",0,J,"getStaticPaths",0,I,"getStaticProps",0,H,"handler",0,S,"reportWebVitals",0,L,"routeModule",0,R,"unstable_getServerProps",0,P,"unstable_getServerSideProps",0,Q,"unstable_getStaticParams",0,O,"unstable_getStaticPaths",0,N,"unstable_getStaticProps",0,M],321327)},49712,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_terminal_settings-dialog_tsx_10r3wh~._.js"].map(b=>a.l(b))).then(()=>b(600671)))},419326,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_0ya0dyi._.js"].map(b=>a.l(b))).then(()=>b(9252)))},120441,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_types_preflight_ts_06_o3k4._.js","server/chunks/ssr/src_lib_require-auth_ts_0lybmh2._.js"].map(b=>a.l(b))).then(()=>b(56975)))},168414,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_load-messages_ts_11e7h4~._.js"].map(b=>a.l(b))).then(()=>b(387607)))}];
1
+ module.exports=[811705,396552,a=>{"use strict";var b=a.i(508171),c=a.i(799856);a.s(["Card",0,function({className:a,size:d="default",...e}){return(0,b.jsx)("div",{"data-slot":"card","data-size":d,className:(0,c.cn)("group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",a),...e})},"CardContent",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-content",className:(0,c.cn)("px-4 group-data-[size=sm]/card:px-3",a),...d})},"CardHeader",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-header",className:(0,c.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",a),...d})},"CardTitle",0,function({className:a,...d}){return(0,b.jsx)("div",{"data-slot":"card-title",className:(0,c.cn)("font-heading text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",a),...d})}],811705);var d=a.i(398544);let e=a=>a>=1e6?`${(a/1e6).toFixed(1)}M`:a>=1e3?`${(a/1e3).toFixed(1)}K`:a.toLocaleString();a.s(["WEEKDAY_LABELS",0,["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"formatAxisTick",0,a=>e(a),"formatCostWithComma",0,a=>{if(a<1)return`$${a.toFixed(2)}`;let[b,c]=a.toFixed(1).split(".");return`$${Number(b).toLocaleString()}.${c}`},"formatDate",0,a=>(0,d.default)(a).format("MM/DD"),"formatDuration",0,a=>{let b=Math.floor(a/6e4);if(b<60)return`${b}m`;let c=Math.floor(b/60);if(c<24)return`${c}h ${b%60}m`;let d=Math.floor(c/24);return`${d}d ${c%24}h`},"formatNumber",0,e,"formatNumberWithComma",0,a=>a.toLocaleString(),"getChangeRate",0,(a,b)=>{if(0===b)return null;let c=(a-b)/b*100;return`${c>=0?"+":""}${Math.round(c).toLocaleString()}%`}],396552)},356233,a=>{"use strict";var b=a.i(127669),c=a.i(760644);a.s(["default",0,a=>{let d=(0,c.default)(a=>(0,c.selectGlobalStatus)(a.tabs).attentionCount);(0,b.useEffect)(()=>{try{document.title=d>0?`(${d}) ${a}`:a}catch{}},[d,a])}])},274399,a=>{"use strict";let b=(0,a.i(564375).default)("square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);a.s(["Square",0,b],274399)},436028,a=>{"use strict";let b=(0,a.i(564375).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);a.s(["AlertCircle",0,b],436028)},776979,a=>{"use strict";var b=a.i(508171),c=a.i(127669),d=a.i(113952),e=a.i(436028),f=a.i(506766),g=a.i(396465);let h=({onRetry:a})=>{let c=(0,d.useTranslations)("stats"),h=(0,d.useTranslations)("common");return(0,b.jsxs)("div",{className:"flex flex-col items-center justify-center gap-3 rounded-xl bg-card py-12 ring-1 ring-foreground/10",children:[(0,b.jsx)(e.AlertCircle,{className:"h-5 w-5 text-muted-foreground"}),(0,b.jsx)("p",{className:"text-sm text-muted-foreground",children:c("errorLoadFailed")}),(0,b.jsxs)(g.Button,{variant:"outline",size:"sm",onClick:a,children:[(0,b.jsx)(f.RefreshCw,{className:"mr-1.5 h-3 w-3"}),h("retry")]})]})};class i extends c.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(a,b){console.error(`[${this.props.sectionName}] Error:`,a,b)}handleRetry=()=>{this.setState({hasError:!1})};render(){return this.state.hasError?(0,b.jsx)(h,{onRetry:this.handleRetry}):this.props.children}}a.s(["default",0,i])},321327,a=>{"use strict";var b=a.i(579168),c=a.i(627068),d=a.i(332759),e=a.i(817359),f=a.i(468695),g=a.i(508171),h=a.i(127669),i=a.i(119059),j=a.i(113952),k=a.i(199987),l=a.i(125487),m=a.i(274399),n=a.i(396465),o=a.i(356233),p=a.i(266929),q=a.i(776979),r=a.i(398544),s=a.i(92654),t=a.i(93538),u=a.i(643228),v=a.i(506766),w=a.i(581228),x=a.i(510414),y=a.i(811705),z=a.i(678240),A=a.i(396552);let B="prose prose-sm prose-invert max-w-none text-foreground/80 [&_h2]:mt-4 [&_h2]:mb-1 [&_h2]:text-base [&_h2]:font-semibold [&_h2]:text-foreground [&_h3]:mt-2 [&_h3]:mb-0.5 [&_h3]:text-sm [&_h3]:font-medium [&_h3]:text-foreground/80 [&_ul]:my-0.5 [&_ul]:pl-4 [&_li]:my-0 [&_li]:text-sm [&_p]:text-sm [&_p]:my-1 [&_p]:leading-relaxed",C=(0,h.memo)(({days:a,cache:b,onCacheUpdate:c,batchActions:d,onBatchRunningChange:e})=>{let f=(0,j.useTranslations)("stats"),i=(0,z.default)(a=>a.locale),[k,m]=(0,h.useState)(null),[o,p]=(0,h.useState)(new Set),[q,C]=(0,h.useState)(!1),D=(0,h.useRef)(!1),E=(0,h.useCallback)(async(a,b=!1)=>{let c=await fetch("/api/stats/daily-report/generate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({date:a,force:b,locale:i})});if(!c.ok)throw Error((await c.json().catch(()=>({message:"unknown error"}))).message??`HTTP ${c.status}`);return await c.json()},[i]),F=(0,h.useCallback)(async(a,b=!1)=>{m(a);try{let d=await E(a,b);c(a,d),x.toast.success(f("summaryGenerated"))}catch(a){x.toast.error(a instanceof Error?a.message:f("summaryFailed"))}finally{m(null)}},[E,c,f]),G=(0,h.useCallback)(async()=>{D.current=!1,C(!0);let d=0;try{for(let e of a){if(D.current)break;let a=b?.days[e.date];if(!a||a.locale!==i){m(e.date);try{let a=await E(e.date);c(e.date,a),d++}catch{x.toast.error(f("summaryDateFailed",{date:e.date}));break}}}}finally{m(null),C(!1),d>0&&x.toast.success(f("summaryBatchComplete",{count:d}))}},[a,b,E,c,f,i]),H=(0,h.useCallback)(()=>{D.current=!0},[]),I=(0,h.useCallback)(a=>{p(b=>{let c=new Set(b);return c.has(a)?c.delete(a):c.add(a),c})},[]),J=(0,r.default)().format("YYYY-MM-DD");return(0,h.useEffect)(()=>{d&&(d.start=G,d.stop=H)},[d,G,H]),(0,h.useEffect)(()=>{e?.(q)},[q,e]),(0,g.jsxs)("div",{className:"space-y-4",children:[a.map(a=>{let c=(0,r.default)(a.date),d=A.WEEKDAY_LABELS[c.day()],e=a.date===J,h=b?.days[a.date]??null,i=k===a.date,j=o.has(a.date);return(0,g.jsxs)("div",{className:"space-y-2",children:[(0,g.jsxs)("div",{className:"flex items-center justify-between px-1",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsxs)("span",{className:"text-base font-medium text-muted-foreground",children:[a.date," (",d,")"]}),e&&(0,g.jsx)("span",{className:"rounded bg-ui-teal/15 px-1.5 py-0.5 text-[10px] font-medium text-ui-teal",children:f("today")})]}),(0,g.jsxs)("div",{className:"flex items-center gap-1.5",children:[h&&(0,g.jsxs)(g.Fragment,{children:[i&&(0,g.jsx)("span",{className:"text-xs text-muted-foreground",children:f("generating")}),(0,g.jsx)(n.Button,{variant:"ghost",size:"icon-xs",onClick:()=>F(a.date,!0),disabled:null!==k,className:"text-muted-foreground",children:(0,g.jsx)(v.RefreshCw,{className:`h-3 w-3${i?" animate-spin":""}`})})]}),(0,g.jsxs)("span",{className:"text-xs tabular-nums text-muted-foreground",children:[f("sessionCount",{count:a.sessionCount})," · ",(0,A.formatCostWithComma)(a.cost)]})]})]}),(0,g.jsx)(y.Card,{size:"sm",children:(0,g.jsxs)(y.CardContent,{className:"space-y-2",children:[!h&&!i&&(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>F(a.date),disabled:null!==k,children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),f("summarize")]}),!h&&i&&(0,g.jsxs)("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[(0,g.jsx)(w.default,{className:"h-2.5 w-2.5"}),(0,g.jsx)("span",{children:f("generatingSummary")})]}),h&&(0,g.jsx)(g.Fragment,{children:(0,g.jsxs)("div",{className:i?"opacity-40":void 0,children:[(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.brief})}),h.detail&&(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(n.Button,{variant:"ghost",size:"xs",onClick:()=>I(a.date),className:"text-muted-foreground",disabled:i,children:j?(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(t.ChevronDown,{className:"h-3 w-3"}),f("collapse")]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(u.ChevronRight,{className:"h-3 w-3"}),f("showMore")]})}),j&&(0,g.jsx)("div",{className:"border-t pt-2",children:(0,g.jsx)("div",{className:B,children:(0,g.jsx)(s.default,{children:h.detail})})})]})]})})]})})]},a.date)}),0===a.length&&(0,g.jsx)("p",{className:"py-4 text-center text-xs text-muted-foreground",children:f("noActivity")})]})}),D=()=>{let a=(0,j.useTranslations)("reports");(0,o.default)(a("title"));let[b,c]=(0,h.useState)([]),[d,e]=(0,h.useState)(0),[f,p]=(0,h.useState)(!0),[r,s]=(0,h.useState)(!1),t=(0,h.useCallback)(async(a,b)=>(await fetch(`/api/stats/daily-report/list?offset=${a}&limit=10`,{signal:b})).json(),[]);(0,h.useEffect)(()=>{let a=new AbortController;return t(0,a.signal).then(a=>{c(a.days),e(a.total)}).catch(()=>{}).finally(()=>p(!1)),()=>a.abort()},[t]);let u=(0,h.useCallback)(async()=>{s(!0);try{let a=await t(b.length);c(b=>[...b,...a.days]),e(a.total)}catch{}finally{s(!1)}},[b.length,t]),v=(0,h.useCallback)((a,b)=>{c(c=>c.map(c=>c.date===a?{...c,report:b}:c))},[]),w=b.map(a=>({date:a.date,sessionCount:a.sessionCount,cost:a.cost})),x={days:Object.fromEntries(b.filter(a=>a.report).map(a=>[a.date,a.report]))},y=b.length<d,z=b.filter(a=>!a.report).length,A=(0,h.useRef)({start:()=>{},stop:()=>{}}),[B,D]=(0,h.useState)(!1),E=(0,g.jsx)("div",{className:"min-h-0 flex-1 overflow-y-auto",children:(0,g.jsxs)("div",{className:"mx-auto max-w-content px-4 py-6",children:[(0,g.jsxs)("div",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,g.jsxs)("div",{className:"flex items-center gap-2",children:[(0,g.jsx)(k.FileText,{className:"h-5 w-5 text-claude-active"}),(0,g.jsx)("h1",{className:"text-base font-semibold",children:a("title")})]}),(0,g.jsx)("div",{className:"flex items-center gap-2",children:!f&&z>0&&(B?(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.stop(),children:[(0,g.jsx)(m.Square,{className:"h-3 w-3"}),a("stop")]}):(0,g.jsxs)(n.Button,{variant:"outline",size:"xs",onClick:()=>A.current.start(),children:[(0,g.jsx)(l.Sparkles,{className:"h-3 w-3"}),a("summarize",{count:z})]}))})]}),(0,g.jsx)(q.default,{sectionName:a("title"),children:f?(0,g.jsx)("div",{className:"space-y-2",children:Array.from({length:5}).map((a,b)=>(0,g.jsxs)("div",{className:"flex items-center gap-3 rounded-xl bg-card px-4 py-4 ring-1 ring-foreground/10",children:[(0,g.jsxs)("div",{className:"flex-1 space-y-2",children:[(0,g.jsx)("div",{className:"h-3.5 w-32 animate-pulse rounded bg-muted"}),(0,g.jsx)("div",{className:"h-3 w-20 animate-pulse rounded bg-muted"})]}),(0,g.jsx)("div",{className:"h-3 w-24 animate-pulse rounded bg-muted"})]},b))}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(C,{days:w,cache:x,onCacheUpdate:v,batchActions:A.current,onBatchRunningChange:D}),y&&(0,g.jsx)("div",{className:"mt-3 flex justify-center",children:(0,g.jsx)(n.Button,{variant:"outline",size:"sm",onClick:u,disabled:r,children:r?a("loadingMore"):a("loadMore",{count:d-b.length})})})]})})]})});return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.default,{children:(0,g.jsx)("title",{children:a("pageTitle")})}),E]})};D.getLayout=p.getPageShellWithTitlebarLayout;let E=async b=>{let{requireAuth:c}=await a.A(120441),{loadMessagesServer:d}=await a.A(168414);return c(b,async()=>({props:{messages:await d()}}))};a.s(["default",0,D,"getServerSideProps",0,E],254728);var F=a.i(254728),G=a.i(509193);let H=(0,d.hoist)(F,"default"),I=(0,d.hoist)(F,"getStaticProps"),J=(0,d.hoist)(F,"getStaticPaths"),K=(0,d.hoist)(F,"getServerSideProps"),L=(0,d.hoist)(F,"config"),M=(0,d.hoist)(F,"reportWebVitals"),N=(0,d.hoist)(F,"unstable_getStaticProps"),O=(0,d.hoist)(F,"unstable_getStaticPaths"),P=(0,d.hoist)(F,"unstable_getStaticParams"),Q=(0,d.hoist)(F,"unstable_getServerProps"),R=(0,d.hoist)(F,"unstable_getServerSideProps"),S=new b.PagesRouteModule({definition:{kind:c.RouteKind.PAGES,page:"/reports",pathname:"/reports",bundlePath:"",filename:""},distDir:".next",relativeProjectDir:"",components:{App:f.default,Document:e.default},userland:F}),T=(0,G.getHandler)({srcPage:"/reports",config:L,userland:F,routeModule:S,getStaticPaths:J,getStaticProps:I,getServerSideProps:K});a.s(["config",0,L,"default",0,H,"getServerSideProps",0,K,"getStaticPaths",0,J,"getStaticProps",0,I,"handler",0,T,"reportWebVitals",0,M,"routeModule",0,S,"unstable_getServerProps",0,Q,"unstable_getServerSideProps",0,R,"unstable_getStaticParams",0,P,"unstable_getStaticPaths",0,O,"unstable_getStaticProps",0,N],321327)},49712,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_features_terminal_settings-dialog_tsx_10r3wh~._.js"].map(b=>a.l(b))).then(()=>b(600671)))},419326,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_components_0ya0dyi._.js"].map(b=>a.l(b))).then(()=>b(9252)))},120441,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_types_preflight_ts_06_o3k4._.js","server/chunks/ssr/src_lib_require-auth_ts_0lybmh2._.js"].map(b=>a.l(b))).then(()=>b(56975)))},168414,a=>{a.v(b=>Promise.all(["server/chunks/ssr/src_lib_load-messages_ts_11e7h4~._.js"].map(b=>a.l(b))).then(()=>b(387607)))}];
2
2
 
3
3
  //# sourceMappingURL=_0.fa33p._.js.map