@cuongtran001/kanna 1.76.2 → 1.76.3

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 (95) hide show
  1. package/dist/client/assets/{BoardsPage-BvYUo0PD.js → BoardsPage-DCh9hj51.js} +1 -1
  2. package/dist/client/assets/{BoardsRoutePage-D5hLNJ2q.js → BoardsRoutePage-DPw5ve6w.js} +1 -1
  3. package/dist/client/assets/ChatPage-CEeRSI6r.js +93 -0
  4. package/dist/client/assets/{CronJobRow-VCv0jyI2.js → CronJobRow-D2ex-2ZV.js} +1 -1
  5. package/dist/client/assets/{CronJobsPage-8FE4cO2q.js → CronJobsPage-BGk_HGOZ.js} +1 -1
  6. package/dist/client/assets/{FilePreviewSheet-B5b8L-4e.js → FilePreviewSheet-BnQeVNHq.js} +2 -2
  7. package/dist/client/assets/{FlowSurface-DmNZQO7Z.js → FlowSurface-RRPSX4vy.js} +1 -1
  8. package/dist/client/assets/{GenUIBlock-DX1nLbtf.js → GenUIBlock-DKGMRQmN.js} +2 -2
  9. package/dist/client/assets/{KannaSocketProvider-CiuKyRYE.js → KannaSocketProvider-CNmZYIUz.js} +1 -1
  10. package/dist/client/assets/{LocalProjectsPage-DjCZmQ8c.js → LocalProjectsPage-Dr5JrPMN.js} +1 -1
  11. package/dist/client/assets/SettingsPage-Bhy_51Vm.js +13 -0
  12. package/dist/client/assets/{StackBoardsRoutePage-i7WMqsk0.js → StackBoardsRoutePage-B-O5uIvz.js} +1 -1
  13. package/dist/client/assets/{ToolCallMessage-BhxowUjs.js → ToolCallMessage-C8Z9pIBo.js} +1 -1
  14. package/dist/client/assets/{VChartSurface-DQ6HIQXe.js → VChartSurface-C_LuezMZ.js} +1 -1
  15. package/dist/client/assets/{WorkflowsPage-BCIsFa6f.js → WorkflowsPage-BmGlYGWF.js} +1 -1
  16. package/dist/client/assets/{WorkflowsSection-B5TkVqRA.js → WorkflowsSection-SjENofEr.js} +1 -1
  17. package/dist/client/assets/{chart-renderer-DQLdORyQ.js → chart-renderer-Ce4S2Bew.js} +1 -1
  18. package/dist/client/assets/{chatSounds-CUN4vZG0.js → chatSounds-ih86yh5r.js} +1 -1
  19. package/dist/client/assets/chevron-left-DZQr0sRY.js +1 -0
  20. package/dist/client/assets/{clipboard.adapter-BvW6oQa_.js → clipboard.adapter-BLu7Xx3Q.js} +1 -1
  21. package/dist/client/assets/{columnStyle-C0IvZxLY.js → columnStyle-CXivQEvf.js} +1 -1
  22. package/dist/client/assets/{contextWindow-WJUHfP_d.js → contextWindow-Cpz1HmWo.js} +1 -1
  23. package/dist/client/assets/copyFeedbackStore-NslkB2Ap.js +1 -0
  24. package/dist/client/assets/{createScopedStore-DW4wfjbM.js → createScopedStore-CZBfIcri.js} +1 -1
  25. package/dist/client/assets/{dist-Q8elClTa.js → dist-DHxwilnY.js} +1 -1
  26. package/dist/client/assets/{ellipsis-D_1qLZbX.js → ellipsis-Ba-nFhTR.js} +1 -1
  27. package/dist/client/assets/{flow-kinds-Df0GmP61.js → flow-kinds-BIh-hHN9.js} +1 -1
  28. package/dist/client/assets/{folder-UHukK2MD.js → folder-B34crHxE.js} +1 -1
  29. package/dist/client/assets/{formatDuration-BA1K5CFs.js → formatDuration-JKx5LBF4.js} +1 -1
  30. package/dist/client/assets/{genui-CZI72r1O.js → genui-DmCmYDHH.js} +1 -1
  31. package/dist/client/assets/{globe-CQI7GjsK.js → globe-DV73QVTP.js} +1 -1
  32. package/dist/client/assets/{host-C0p_56Re.js → host-FY7xgVKG.js} +1 -1
  33. package/dist/client/assets/index-BYus2o1t.css +1 -0
  34. package/dist/client/assets/{index-3lHvRekg.js → index-MU4WHdaY.js} +3 -3
  35. package/dist/client/assets/{info-BXzVPePc.js → info-COBF8Hkz.js} +1 -1
  36. package/dist/client/assets/{input-BerPPEIs.js → input-BJRDZBOh.js} +1 -1
  37. package/dist/client/assets/{lexicalToReact-DdXqoi0d.js → lexicalToReact-BVHTqlu5.js} +3 -3
  38. package/dist/client/assets/{log-7fGlFSON.js → log-7NXJbErN.js} +1 -1
  39. package/dist/client/assets/{monitor-BOFtyQiW.js → monitor-Wl8GxNgR.js} +1 -1
  40. package/dist/client/assets/{pendingActionsStore-idc6m2Ya.js → pendingActionsStore-DDpYeRNm.js} +1 -1
  41. package/dist/client/assets/{play-DltDjX9H.js → play-CmxvHVzO.js} +1 -1
  42. package/dist/client/assets/{plus-CwWMJ0a-.js → plus-C3QbbvBk.js} +1 -1
  43. package/dist/client/assets/{popover-gn1uvc-1.js → popover-Dm-pdC4M.js} +1 -1
  44. package/dist/client/assets/{pushClient-NeXrldi-.js → pushClient-COMO42mb.js} +1 -1
  45. package/dist/client/assets/runDetached-mjGecpjX.js +1 -0
  46. package/dist/client/assets/{segmented-control-3UDSwswP.js → segmented-control-CfauwRtX.js} +1 -1
  47. package/dist/client/assets/{select-Df67vheJ.js → select-7zTZH1xA.js} +1 -1
  48. package/dist/client/assets/{settings-header-button-CKZHCdXh.js → settings-header-button-TMNvLQQs.js} +1 -1
  49. package/dist/client/assets/{sidebarPendingActions-B8iNQJfE.js → sidebarPendingActions-Bd_2oNH_.js} +1 -1
  50. package/dist/client/assets/{square-pen-DJjPW4f4.js → square-pen-BB5GlYSZ.js} +1 -1
  51. package/dist/client/assets/{state-mark-CU2hw5D9.js → state-mark-x5ennY81.js} +1 -1
  52. package/dist/client/assets/{terminal-8Bxl5uZh.js → terminal-D5pfyUjC.js} +1 -1
  53. package/dist/client/assets/{timer.adapter-BD7zwXEm.js → timer.adapter-C5oNrWbM.js} +1 -1
  54. package/dist/client/assets/{tools-Lo2VrFmM.js → tools-BlXGwwwh.js} +1 -1
  55. package/dist/client/assets/{triangle-alert-CQwDyl4K.js → triangle-alert-BwAIBaGG.js} +1 -1
  56. package/dist/client/assets/{useAppGlobalState-uP5C1BG8.js → useAppGlobalState-BL9aCLak.js} +1 -1
  57. package/dist/client/assets/{useKannaState-B2eDC-Dw.js → useKannaState-DTILzHBb.js} +1 -1
  58. package/dist/client/assets/{useTheme-B_JDh31l.js → useTheme-9knhPtrR.js} +1 -1
  59. package/dist/client/index.html +34 -34
  60. package/package.json +1 -1
  61. package/src/server/agent-coordinator-types.ts +1 -0
  62. package/src/server/agent-coordinator.ts +4 -0
  63. package/src/server/beacon-mention-prompt.test.ts +33 -0
  64. package/src/server/beacon-mention-prompt.ts +33 -0
  65. package/src/server/beacon-registry.test.ts +1 -0
  66. package/src/server/beacon-registry.ts +9 -1
  67. package/src/server/beacon-services.test.ts +11 -1
  68. package/src/server/beacon-services.ts +4 -0
  69. package/src/server/beacon-settings.test.ts +74 -1
  70. package/src/server/beacon-settings.ts +54 -3
  71. package/src/server/claude-turn-starter-types.ts +3 -0
  72. package/src/server/claude-turn-starter.test.ts +85 -0
  73. package/src/server/claude-turn-starter.ts +5 -1
  74. package/src/server/kanna-mcp-beacon-transfer.test.ts +1 -0
  75. package/src/server/kanna-mcp-beacon.test.ts +4 -1
  76. package/src/server/kanna-mcp-beacon.ts +16 -5
  77. package/src/server/push/push-manager.test.ts +39 -0
  78. package/src/server/push/push-manager.ts +45 -1
  79. package/src/server/server.ts +1 -0
  80. package/src/server/ws-router-broadcast.ts +1 -1
  81. package/src/server/ws-router-envelope.ts +2 -0
  82. package/src/server/ws-router-settings.test.ts +1 -0
  83. package/src/server/ws-router.test.ts +68 -0
  84. package/src/shared/beacon-alias.test.ts +64 -0
  85. package/src/shared/beacon-alias.ts +120 -0
  86. package/src/shared/beacon-config.ts +2 -0
  87. package/src/shared/beacon-status.test.ts +2 -0
  88. package/src/shared/beacon-status.ts +2 -0
  89. package/src/shared/chat-activity.ts +8 -0
  90. package/dist/client/assets/ChatPage-zfy8nznW.js +0 -93
  91. package/dist/client/assets/SettingsPage-ELjbPQEw.js +0 -13
  92. package/dist/client/assets/chevron-left-DpI8tMxJ.js +0 -1
  93. package/dist/client/assets/copyFeedbackStore-BsjXKW0-.js +0 -1
  94. package/dist/client/assets/index-D8o_YX_z.css +0 -1
  95. package/dist/client/assets/runDetached-BWsF_7Xo.js +0 -1
@@ -1,4 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-DiVRNtpo.js";import{t as n}from"./react-dom-CvX0TCLz.js";import{d as r,l as i}from"./chunk-OB3PAWPO-CCBUsQEH.js";import{t as a}from"./jsx-runtime-BdxMnOeJ.js";import{F as o,G as s,I as c,R as l,V as u,W as d,Y as f,a as p,fn as m,ft as h,i as g,j as _,q as v,r as y,yt as b}from"./useAppGlobalState-uP5C1BG8.js";import{c as x,d as S,f as C,t as w}from"./log-7fGlFSON.js";import{a as T,c as E,d as D,f as O,l as k,n as A,r as j,s as M,t as N}from"./pendingActionsStore-idc6m2Ya.js";import{A as P,C as ee,H as F,I,M as te,N as L,O as R,P as ne,R as z,S as re,T as B,V as ie,_ as ae,a as oe,b as se,g as ce,h as V,j as le,k as ue,n as de,t as fe,v as pe,w as me}from"./FilePreviewSheet-B5b8L-4e.js";import{c as H,d as he,f as U,h as ge,l as _e,o as ve,p as ye,r as be,t as xe,u as Se}from"./ToolCallMessage-BhxowUjs.js";import{t as Ce}from"./lexicalToReact-DdXqoi0d.js";import{a as we,d as Te,i as Ee,n as De,o as Oe,s as ke}from"./KannaSocketProvider-CiuKyRYE.js";import{n as Ae,r as je,t as Me}from"./clipboard.adapter-BvW6oQa_.js";import{n as Ne,r as Pe,t as Fe}from"./dist-Q8elClTa.js";import{t as Ie}from"./chevron-left-DpI8tMxJ.js";import{r as Le}from"./terminal-8Bxl5uZh.js";import{i as Re}from"./host-C0p_56Re.js";import{d as ze,f as Be,h as Ve,l as He,u as W}from"./pushClient-NeXrldi-.js";import{t as Ue}from"./triangle-alert-CQwDyl4K.js";import{i as We}from"./formatDuration-BA1K5CFs.js";import{t as Ge}from"./timer.adapter-BD7zwXEm.js";import{C as Ke,D as qe,E as Je,O as G,T as Ye,b as Xe,c as Ze,d as Qe,f as $e,g as et,h as tt,l as nt,m as rt,n as it,p as at,s as ot,u as st,v as ct,w as lt,x as ut,y as dt}from"./chatFocusPolicy-DYR_9DV3.js";import{i as ft,n as pt,r as mt,t as ht}from"./dist-Bd4iXDMM.js";import{t as gt}from"./createScopedStore-DW4wfjbM.js";import{t as _t}from"./input-BerPPEIs.js";import{T as vt,c as yt,g as bt,l as xt}from"./useTheme-B_JDh31l.js";import{t as St}from"./runDetached-BWsF_7Xo.js";import{l as Ct}from"./contextWindow-WJUHfP_d.js";import{a as wt,o as Tt}from"./formatters-BGORekd-.js";import{a as Et,n as Dt}from"./state-mark-CU2hw5D9.js";import{o as Ot,s as kt,t as At}from"./tools-Lo2VrFmM.js";var jt={name:`asterisk`,size:24,node:[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m18.065 8.496-12.125 7`,key:`1h26g9`}],[`path`,{d:`m5.94 8.504 12.125 7`,key:`k77sdm`}]]};jt.node;var Mt=O(jt),Nt={name:`bell-off`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742`,key:`178tsu`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05`,key:`1hqiys`}]]};Nt.node;var Pt=O(Nt),Ft={name:`calendar-x-2`,size:24,node:[[`path`,{d:`M16 2v3`,key:`otl347`}],[`path`,{d:`m17 16 5 5`,key:`1a37d9`}],[`path`,{d:`m17 21 5-5`,key:`1b797a`}],[`path`,{d:`M21 12V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h8`,key:`14ws7l`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 2v3`,key:`1ioesn`}]]};Ft.node;var It=O(Ft),Lt={name:`check-check`,size:24,node:[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]};Lt.node;var Rt=O(Lt),zt={name:`circle-slash`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`9`,x2:`15`,y1:`15`,y2:`9`,key:`1dfufj`}]]};zt.node;var Bt=O(zt),Vt={name:`circle`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]};Vt.node;var Ht=O(Vt),Ut={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};Ut.node;var Wt=O(Ut),Gt={name:`flower`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`M12 16.5A4.5 4.5 0 1 1 7.5 12 4.5 4.5 0 1 1 12 7.5a4.5 4.5 0 1 1 4.5 4.5 4.5 4.5 0 1 1-4.5 4.5`,key:`14wa3c`}],[`path`,{d:`M12 7.5V9`,key:`1oy5b0`}],[`path`,{d:`M7.5 12H9`,key:`eltsq1`}],[`path`,{d:`M16.5 12H15`,key:`vk5kw4`}],[`path`,{d:`M12 16.5V15`,key:`k7eayi`}],[`path`,{d:`m8 8 1.88 1.88`,key:`nxy4qf`}],[`path`,{d:`M14.12 9.88 16 8`,key:`1lst6k`}],[`path`,{d:`m8 16 1.88-1.88`,key:`h2eex1`}],[`path`,{d:`M14.12 14.12 16 16`,key:`uqkrx3`}]]};Gt.node;var Kt=O(Gt),qt={name:`hand`,size:24,node:[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]};qt.node;var Jt=O(qt),Yt={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};Yt.node;var Xt=O(Yt),Zt={name:`minimize`,size:24,node:[[`path`,{d:`M8 3v3a2 2 0 0 1-2 2H3`,key:`hohbtr`}],[`path`,{d:`M21 8h-3a2 2 0 0 1-2-2V3`,key:`5jw1f3`}],[`path`,{d:`M3 16h3a2 2 0 0 1 2 2v3`,key:`198tvr`}],[`path`,{d:`M16 21v-3a2 2 0 0 1 2-2h3`,key:`ph8mxp`}]]};Zt.node;var Qt=O(Zt),$t={name:`panel-left`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]],aliases:[`sidebar`]};$t.node;var en=O($t),tn={name:`send`,size:24,node:[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]};tn.node;var nn=O(tn),rn={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};rn.node;var an=O(rn),on={name:`shield-alert`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]};on.node;var sn=O(on),cn={name:`skip-forward`,size:24,node:[[`path`,{d:`M21 4v16`,key:`7j8fe9`}],[`path`,{d:`M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z`,key:`zs4d6`}]]};cn.node;var ln=O(cn),un={name:`slash`,size:24,node:[[`path`,{d:`M22 2 2 22`,key:`y4kqgn`}]]};un.node;var dn=O(un),fn={name:`square-kanban`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M8 7v7`,key:`1x2jlm`}],[`path`,{d:`M12 7v4`,key:`xawao1`}],[`path`,{d:`M16 7v9`,key:`1hp2iy`}]],aliases:[`kanban-square`]};fn.node;var pn=O(fn),mn={name:`zap`,size:24,node:[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]};mn.node;var hn=O(mn),K=e(t(),1),q=e(a(),1),gn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`bg-card text-card-foreground`,e),...t}));gn.displayName=`Card`;var _n=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`flex flex-col space-y-1.5 p-2`,e),...t}));_n.displayName=`CardHeader`;var vn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`h3`,{ref:n,className:E(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));vn.displayName=`CardTitle`;var yn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`p`,{ref:n,className:E(`text-sm text-muted-foreground`,e),...t}));yn.displayName=`CardDescription`;var bn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`p-6 pt-0`,e),...t}));bn.displayName=`CardContent`;var xn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`flex items-center p-6 pt-0`,e),...t}));xn.displayName=`CardFooter`;var Sn=[],Cn=[],wn=[],Tn=x()(e=>({sidebarItems:Sn,panels:Cn,commandCenterItems:wn,setContributions:({sidebarItems:t,panels:n,commandCenterItems:r})=>e({sidebarItems:t,panels:n,commandCenterItems:r}),clearContributions:()=>e(e=>e.sidebarItems.length===0&&e.panels.length===0&&e.commandCenterItems.length===0?e:{sidebarItems:Sn,panels:Cn,commandCenterItems:wn})})),En=e=>e.sidebarItems??Sn,Dn=e=>e.panels??Cn,On=e=>e.commandCenterItems??wn,kn=4,An=6;function jn({kind:e,className:t}){return(0,q.jsxs)(`svg`,{"aria-hidden":!0,viewBox:`0 0 12 12`,className:E(`inline-block size-3 shrink-0`,t),children:[e===`filled`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`currentColor`}):null,e===`half`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25}),(0,q.jsx)(`path`,{d:`M ${An} 2 A ${kn} ${kn} 0 0 0 ${An} 10 Z`,fill:`currentColor`})]}):null,e===`ring`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25}):null,e===`dashed`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25,strokeDasharray:`2 2`}):null]})}function Mn(e){if(e.activeChats===0)return null;let t=[];return e.awaitingAnswer>0&&t.push(`${e.awaitingAnswer} awaiting`),e.failing>0&&t.push(`${e.failing} failing`),e.agents>0&&t.push(`${e.agents} agent${e.agents===1?``:`s`}`),e.loops>0&&t.push(`${e.loops} loop${e.loops===1?``:`s`}`),e.workflows>0&&t.push(`${e.workflows} workflow${e.workflows===1?``:`s`}`),e.backgroundTasks>0&&t.push(`${e.backgroundTasks} task${e.backgroundTasks===1?``:`s`}`),t.length===0?`${e.activeChats} active`:t.join(`, `)}function Nn(e){let t=[];return e.agents>0&&t.push(`${e.agents} agent${e.agents===1?``:`s`}`),e.workflow!==null&&t.push(`workflow`),e.backgroundTasks>0&&t.push(`${e.backgroundTasks} task${e.backgroundTasks===1?``:`s`}`),t.length===0?null:t.join(`, `)}function Pn(e){if(e.status===`running`||e.status===`starting`)return{tone:`warning`,label:Et(e.status)};if(e.status===`waiting_for_user`)return{tone:`info`,label:Et(e.status)};if(e.status===`failed`)return{tone:`destructive`,label:Et(e.status)};let t=e.activity?Nn(e.activity):null;return t?{tone:`warning`,label:t}:e.unread?{tone:`success`,label:`Unread`}:null}function Fn(e){switch(e){case`warning`:return`bg-warning`;case`info`:return`bg-info`;case`success`:return`bg-success`;case`destructive`:return`bg-destructive`;case`muted`:return`bg-muted-foreground`;default:return``}}function In(e){switch(e){case`warning`:return`text-warning-text`;case`info`:return`text-info-text`;case`success`:return`text-success-text`;case`destructive`:return`text-destructive-text`;default:return`text-muted-foreground`}}function Ln(e){switch(e){case`active`:return{kind:`filled`,toneClass:`text-success-text`,title:`Claude session active`};case`warming`:return{kind:`half`,toneClass:`text-warning-text`,title:`Claude session warming`};case`idle`:return{kind:`ring`,toneClass:`text-muted-foreground`,title:`Claude session idle`};case`cooling`:return{kind:`dashed`,toneClass:`text-muted-foreground`,title:`Claude session cooling down`};default:return null}}var Rn=Object.defineProperty,zn=(e,t)=>Rn(e,`name`,{value:t,configurable:!0}),Bn=!1;function Vn(){let[e,t]=K.useState(Bn);return K.useEffect(()=>{Bn||(Bn=!0,t(!0))},[]),e}zn(Vn,`useIsHydrated`);var Hn=K.useSyncExternalStore;function Un(){return()=>{}}zn(Un,`subscribe`);function Wn(){return Hn(Un,()=>!0,()=>!1)}zn(Wn,`useIsHydratedModern`);var Gn=typeof Hn==`function`?Wn:Vn,Kn=Object.defineProperty,qn=(e,t)=>Kn(e,`name`,{value:t,configurable:!0}),Jn=`rovingFocusGroup.onEntryFocus`,Yn={bubbles:!1,cancelable:!0},Xn=`RovingFocusGroup`,[Zn,Qn,$n]=Ne(Xn),[er,tr]=Je(Xn,[$n]),nr={Vertical:`vertical`,Horizontal:`horizontal`},rr={LTR:`ltr`,RTL:`rtl`},[ir,ar]=er(Xn),or=K.forwardRef(qn(function(e,t){return(0,q.jsx)(Zn.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,q.jsx)(Zn.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,q.jsx)(sr,{...e,ref:t})})})},`RovingFocusGroup`)),sr=K.forwardRef(qn(function(e,t){let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...d}=e,f=K.useRef(null),p=qe(t,f),m=Fe(a),[h,g]=Ke({prop:o,defaultProp:s??null,onChange:c,caller:Xn}),[_,v]=K.useState(!1),y=ct(l),b=Qn(n),x=K.useRef(!1),[S,C]=K.useState(0);return K.useEffect(()=>{let e=f.current;if(e)return e.addEventListener(Jn,y),()=>e.removeEventListener(Jn,y)},[y]),(0,q.jsx)(ir,{scope:n,orientation:r,dir:m,loop:i,currentTabStopId:h,onItemFocus:K.useCallback(e=>g(e),[g]),onItemShiftTab:K.useCallback(()=>v(!0),[]),onFocusableItemAdd:K.useCallback(()=>C(e=>e+1),[]),onFocusableItemRemove:K.useCallback(()=>C(e=>e-1),[]),children:(0,q.jsx)(dt.div,{tabIndex:_||S===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:`none`,...e.style},onMouseDown:G(e.onMouseDown,()=>{x.current=!0}),onFocus:G(e.onFocus,e=>{let t=!x.current;if(e.target===e.currentTarget&&t&&!_){let t=new CustomEvent(Jn,Yn);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=b().filter(e=>e.focusable);pr([e.find(e=>e.active),e.find(e=>e.id===h),...e].filter(Boolean).map(e=>e.ref.current),u)}}x.current=!1}),onBlur:G(e.onBlur,()=>v(!1))})})},`RovingFocusGroupImpl`)),cr=`RovingFocusGroupItem`,lr=K.forwardRef(qn(function(e,t){let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=lt(),l=a||c,u=ar(cr,n),d=u.currentTabStopId===l,f=Qn(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:h}=u,g=Gn();return Ye(()=>{if(g&&r)return p(),()=>m()},[g,r,p,m]),K.useEffect(()=>{if(!g&&r)return p(),()=>m()},[g,r,p,m]),(0,q.jsx)(Zn.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,q.jsx)(dt.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:G(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:G(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:G(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=fr(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?mr(n,r+1):n.slice(r+1)}setTimeout(()=>pr(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:h!=null}):o})})},`RovingFocusGroupItem`)),ur={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function dr(e,t){return t===rr.RTL?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}qn(dr,`getDirectionAwareKey`);function fr(e,t,n){let r=dr(e.key,n);if(!(t===nr.Vertical&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===nr.Horizontal&&[`ArrowUp`,`ArrowDown`].includes(r)))return ur[r]}qn(fr,`getFocusIntent`);function pr(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}qn(pr,`focusFirst`);function mr(e,t){return e.map((n,r)=>e[(t+r)%e.length])}qn(mr,`wrapArray`);var hr=Object.defineProperty,J=(e,t)=>hr(e,`name`,{value:t,configurable:!0}),gr=[`Enter`,` `],_r=[`ArrowDown`,`PageUp`,`Home`],vr=[`ArrowUp`,`PageDown`,`End`],yr=[..._r,...vr];[...gr],[...gr];var br=`Menu`,[xr,Sr,Cr]=Ne(br),[wr,Tr]=Je(br,[Cr,ft,tr]),Er=ft(),Dr=tr(),[Or,kr]=wr(br),[Ar,jr]=wr(br),Mr=J(e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=Er(t),[c,l]=K.useState(null),u=K.useRef(!1),d=ct(a),f=Fe(i);return K.useEffect(()=>{let e=J(()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},`handleKeyDown`),t=J(()=>u.current=!1,`handlePointer`);return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),K.useEffect(()=>{if(!n)return;let e=J(()=>d(!1),`handleBlur`);return window.addEventListener(`blur`,e),()=>window.removeEventListener(`blur`,e)},[n,d]),(0,q.jsx)(ht,{...s,children:(0,q.jsx)(Or,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,q.jsx)(Ar,{scope:t,onClose:K.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})},`Menu`),Nr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,...r}=e,i=Er(n);return(0,q.jsx)(pt,{...i,...r,ref:t})},`MenuAnchor`)),Pr=`MenuPortal`,[Fr,Ir]=wr(Pr,{forceMount:void 0}),Lr=J(e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=kr(Pr,t);return(0,q.jsx)(Fr,{scope:t,forceMount:n,children:(0,q.jsx)(st,{present:n||a.open,children:(0,q.jsx)(Qe,{asChild:!0,container:i,children:r})})})},`MenuPortal`),Rr=`MenuContent`,[zr,Br]=wr(Rr),Vr=K.forwardRef(J(function(e,t){let n=Ir(Rr,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=kr(Rr,e.__scopeMenu),o=jr(Rr,e.__scopeMenu);return(0,q.jsx)(xr.Provider,{scope:e.__scopeMenu,children:(0,q.jsx)(st,{present:r||a.open,children:(0,q.jsx)(xr.Slot,{scope:e.__scopeMenu,children:o.modal?(0,q.jsx)(Hr,{...i,ref:t}):(0,q.jsx)(Ur,{...i,ref:t})})})})},`MenuContent`)),Hr=K.forwardRef(J(function(e,t){let n=kr(Rr,e.__scopeMenu),r=K.useRef(null),i=qe(t,r);return K.useEffect(()=>{let e=r.current;if(e)return ot(e)},[]),(0,q.jsx)(Gr,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:G(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})},`MenuRootContentModal`)),Ur=K.forwardRef(J(function(e,t){let n=kr(Rr,e.__scopeMenu);return(0,q.jsx)(Gr,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})},`MenuRootContentNonModal`)),Wr=ut(`MenuContent.ScrollLock`),Gr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:m,...h}=e,g=kr(Rr,n),_=jr(Rr,n),v=Er(n),y=Dr(n),b=Sr(n),[x,S]=K.useState(null),C=K.useRef(null),[w,T]=K.useState(null);rt(w);let{nodes:E,registry:D}=tt(),O=!!(i||m),k=qe(t,C,g.onContentChange,T),A=K.useRef(0),j=K.useRef(``),M=K.useRef(0),N=K.useRef(null),P=K.useRef(`right`),ee=K.useRef(0),F=K.useMemo(()=>m?[C,...E.map(e=>({current:e}))]:[],[C,E,m]),I=m?Ze:K.Fragment,te=m?{as:Wr,allowPinchZoom:!0,shards:F}:void 0,L=J(e=>{let t=j.current+e,n=b().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=ci(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;J((function e(t){j.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))}),`updateSearch`)(t),o&&setTimeout(()=>o.focus())},`handleTypeaheadSearch`);K.useEffect(()=>()=>window.clearTimeout(A.current),[]),nt();let R=K.useCallback(e=>P.current===N.current?.side&&ui(e,N.current?.area),[]);return(0,q.jsx)(zr,{scope:n,searchRef:j,onItemEnter:K.useCallback(e=>{R(e)&&e.preventDefault()},[R]),onItemLeave:K.useCallback(e=>{R(e)||(C.current?.focus(),S(null))},[R]),onTriggerLeave:K.useCallback(e=>{R(e)&&e.preventDefault()},[R]),pointerGraceTimerRef:M,onPointerGraceIntentChange:K.useCallback(e=>{N.current=e},[]),children:(0,q.jsx)(at,{registry:O?D:null,children:(0,q.jsx)(I,{...te,children:(0,q.jsx)($e,{asChild:!0,trapped:i,branches:E,onMountAutoFocus:G(a,e=>{e.preventDefault(),C.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,q.jsx)(et,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,q.jsx)(or,{asChild:!0,...y,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:x,onCurrentTabStopIdChange:S,onEntryFocus:G(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,q.jsx)(mt,{role:`menu`,"aria-orientation":`vertical`,"data-state":ri(g.open),"data-radix-menu-content":``,dir:_.dir,...v,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:G(h.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&L(e.key));let i=C.current;if(e.target!==i||!yr.includes(e.key))return;e.preventDefault();let a=b().filter(e=>!e.disabled).map(e=>e.ref.current);vr.includes(e.key)&&a.reverse(),oi(a)}),onBlur:G(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),j.current=``)}),onPointerMove:G(e.onPointerMove,di(e=>{let t=e.target,n=ee.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>ee.current?`right`:`left`;P.current=t,ee.current=e.clientX}}))})})})})})})})},`MenuContentImpl`)),Kr=`MenuItem`,qr=`menu.itemSelect`,Jr=K.forwardRef(J(function(e,t){let{disabled:n=!1,onSelect:r,...i}=e,a=K.useRef(null),o=jr(Kr,e.__scopeMenu),s=Br(Kr,e.__scopeMenu),c=qe(t,a),l=K.useRef(!1),u=J(()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(qr,{bubbles:!0,cancelable:!0});e.addEventListener(qr,e=>r?.(e),{once:!0}),Xe(e,t),t.defaultPrevented?l.current=!1:o.onClose()}},`handleSelect`);return(0,q.jsx)(Yr,{...i,ref:c,disabled:n,onClick:G(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:G(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:G(e.onKeyDown,e=>{n||e.target!==e.currentTarget||(s.searchRef.current===``||e.key!==` `)&&gr.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})},`MenuItem`)),Yr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=Br(Kr,n),s=Dr(n),c=K.useRef(null),l=qe(t,c),[u,d]=K.useState(!1),[f,p]=K.useState(``);return K.useEffect(()=>{let e=c.current;e&&p((e.textContent??``).trim())},[a.children]),(0,q.jsx)(xr.ItemSlot,{scope:n,disabled:r,textValue:i??f,children:(0,q.jsx)(lr,{asChild:!0,...s,focusable:!r,children:(0,q.jsx)(dt.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:G(e.onPointerMove,di(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:G(e.onPointerLeave,di(e=>o.onItemLeave(e))),onFocus:G(e.onFocus,()=>d(!0)),onBlur:G(e.onBlur,()=>d(!1))})})})},`MenuItemImpl`)),[Xr,Zr]=wr(`MenuRadioGroup`,{value:void 0,onValueChange:J(()=>{},`onValueChange`)}),[Qr,$r]=wr(`MenuItemIndicator`,{checked:!1}),ei=K.forwardRef(J(function(e,t){let{__scopeMenu:n,...r}=e;return(0,q.jsx)(dt.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})},`MenuSeparator`)),[ti,ni]=wr(`MenuSub`);function ri(e){return e?`open`:`closed`}J(ri,`getOpenState`);function ii(e){return e===`indeterminate`}J(ii,`isIndeterminate`);function ai(e){return ii(e)?`indeterminate`:e?`checked`:`unchecked`}J(ai,`getCheckedState`);function oi(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}J(oi,`focusFirst`);function si(e,t){return e.map((n,r)=>e[(t+r)%e.length])}J(si,`wrapArray`);function ci(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=si(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}J(ci,`getNextMatch`);function li(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}J(li,`isPointInPolygon`);function ui(e,t){return t?li({x:e.clientX,y:e.clientY},t):!1}J(ui,`isPointerInGraceArea`);function di(e){return t=>t.pointerType===`mouse`?e(t):void 0}J(di,`whenMouse`);var fi=Object.defineProperty,pi=(e,t)=>fi(e,`name`,{value:t,configurable:!0}),mi=`ContextMenu`,[hi,gi]=Je(mi,[Tr]),_i=Tr(),[vi,yi]=hi(mi),bi=pi(e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,dir:a,modal:o=!0}=e,s=K.useRef(!1),[c,l]=Ke({prop:i,defaultProp:!1,onChange:r,caller:mi}),u=_i(t);return(0,q.jsx)(vi,{scope:t,open:c,onOpenChange:l,modal:o,hasInteractedRef:s,children:(0,q.jsx)(Mr,{...u,dir:a,open:c,onOpenChange:l,modal:o,children:n})})},`ContextMenu`),xi=`ContextMenuTrigger`,Si=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,disabled:r=!1,...i}=e,a=yi(xi,n),o=_i(n),[s,c]=K.useState({x:0,y:0}),l=K.useMemo(()=>({current:{getBoundingClientRect:pi(()=>DOMRect.fromRect({width:0,height:0,...s}),`getBoundingClientRect`)}}),[s]),u=K.useRef(0),d=K.useCallback(()=>window.clearTimeout(u.current),[]),f=pi(e=>{a.hasInteractedRef.current=!0,c({x:e.clientX,y:e.clientY}),a.onOpenChange(!0)},`handleOpen`);return K.useEffect(()=>d,[d]),K.useEffect(()=>void(r&&d()),[r,d]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Nr,{...o,virtualRef:l}),(0,q.jsx)(dt.span,{"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,...i,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:G(e.onContextMenu,e=>{d(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:G(e.onPointerDown,Oi(e=>{d(),a.open&&a.onOpenChange(!1),u.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:G(e.onPointerMove,Oi(d)),onPointerCancel:r?e.onPointerCancel:G(e.onPointerCancel,Oi(d)),onPointerUp:r?e.onPointerUp:G(e.onPointerUp,Oi(d))})]})},`ContextMenuTrigger`)),Ci=pi(e=>{let{__scopeContextMenu:t,...n}=e,r=_i(t);return(0,q.jsx)(Lr,{...r,...n})},`ContextMenuPortal`),wi=`ContextMenuContent`,Ti=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=yi(wi,n),a=_i(n),o=K.useRef(!1);return(0,q.jsx)(Vr,{...a,...r,ref:t,side:`right`,sideOffset:2,align:`start`,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),!t.defaultPrevented&&o.current&&t.preventDefault(),o.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),!t.defaultPrevented&&!i.modal&&(o.current=!0)},style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})},`ContextMenuContent`)),Ei=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=_i(n);return(0,q.jsx)(Jr,{...i,...r,ref:t})},`ContextMenuItem`)),Di=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=_i(n);return(0,q.jsx)(ei,{...i,...r,ref:t})},`ContextMenuSeparator`));function Oi(e){return t=>t.pointerType===`mouse`?void 0:e(t)}pi(Oi,`whenTouchOrPen`);var ki=K.createContext(null);function Ai({onOpenChange:e,...t}){let[n,r]=K.useState(0),i=K.useCallback(()=>{r(e=>e+1),e?.(!1)},[e]);return(0,q.jsx)(ki.Provider,{value:i,children:(0,q.jsx)(bi,{onOpenChange:e,...t},n)})}var ji=Si,Mi=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(Ci,{children:(0,q.jsx)(Ti,{ref:n,className:E(`z-50 min-w-[170px] overflow-hidden rounded-xl border border-border bg-background p-1 shadow-lg outline-hidden animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...t})}));Mi.displayName=Ti.displayName;var Ni=K.forwardRef(({className:e,onSelect:t,...n},r)=>{let i=K.useContext(ki);return(0,q.jsx)(Ei,{ref:r,className:E(`relative flex cursor-default select-none items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-medium text-foreground outline-hidden transition-colors hover:bg-muted focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,e),onSelect:e=>{t?.(e),i?.()},...n})});Ni.displayName=Ei.displayName;var Pi=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(Di,{ref:n,className:E(`-mx-1 my-1 h-px bg-border`,e),...t}));Pi.displayName=Di.displayName;var Fi=e(n());function Ii(){var e=[...arguments];return(0,K.useMemo)(()=>t=>{e.forEach(e=>e(t))},e)}var Li=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Ri(e){let t=Object.prototype.toString.call(e);return t===`[object Window]`||t===`[object global]`}function zi(e){return`nodeType`in e}function Y(e){return e?Ri(e)?e:zi(e)?e.ownerDocument?.defaultView??window:window:window}function Bi(e){let{Document:t}=Y(e);return e instanceof t}function Vi(e){return!Ri(e)&&e instanceof Y(e).HTMLElement}function Hi(e){return e instanceof Y(e).SVGElement}function Ui(e){return e?Ri(e)?e.document:zi(e)?Bi(e)?e:Vi(e)||Hi(e)?e.ownerDocument:document:document:document}var Wi=Li?K.useLayoutEffect:K.useEffect;function Gi(e){let t=(0,K.useRef)(e);return Wi(()=>{t.current=e}),(0,K.useCallback)(function(){var e=[...arguments];return t.current==null?void 0:t.current(...e)},[])}function Ki(){let e=(0,K.useRef)(null);return[(0,K.useCallback)((t,n)=>{e.current=setInterval(t,n)},[]),(0,K.useCallback)(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[])]}function qi(e,t){t===void 0&&(t=[e]);let n=(0,K.useRef)(e);return Wi(()=>{n.current!==e&&(n.current=e)},t),n}function Ji(e,t){let n=(0,K.useRef)();return(0,K.useMemo)(()=>{let t=e(n.current);return n.current=t,t},[...t])}function Yi(e){let t=Gi(e),n=(0,K.useRef)(null);return[n,(0,K.useCallback)(e=>{e!==n.current&&t?.(e,n.current),n.current=e},[])]}function Xi(e){let t=(0,K.useRef)();return(0,K.useEffect)(()=>{t.current=e},[e]),t.current}var Zi={};function Qi(e,t){return(0,K.useMemo)(()=>{if(t)return t;let n=Zi[e]==null?0:Zi[e]+1;return Zi[e]=n,e+`-`+n},[e,t])}function $i(e){return function(t){return[...arguments].slice(1).reduce((t,n)=>{let r=Object.entries(n);for(let[n,i]of r){let r=t[n];r!=null&&(t[n]=r+e*i)}return t},{...t})}}var ea=$i(1),ta=$i(-1);function na(e){return`clientX`in e&&`clientY`in e}function ra(e){if(!e)return!1;let{KeyboardEvent:t}=Y(e.target);return t&&e instanceof t}function ia(e){if(!e)return!1;let{TouchEvent:t}=Y(e.target);return t&&e instanceof t}function aa(e){if(ia(e)){if(e.touches&&e.touches.length){let{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}if(e.changedTouches&&e.changedTouches.length){let{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return na(e)?{x:e.clientX,y:e.clientY}:null}var oa=Object.freeze({Translate:{toString(e){if(!e)return;let{x:t,y:n}=e;return`translate3d(`+(t?Math.round(t):0)+`px, `+(n?Math.round(n):0)+`px, 0)`}},Scale:{toString(e){if(!e)return;let{scaleX:t,scaleY:n}=e;return`scaleX(`+t+`) scaleY(`+n+`)`}},Transform:{toString(e){if(e)return[oa.Translate.toString(e),oa.Scale.toString(e)].join(` `)}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+` `+n+`ms `+r}}}),sa=`a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]`;function ca(e){return e.matches(sa)?e:e.querySelector(sa)}var la={display:`none`};function ua(e){let{id:t,value:n}=e;return K.createElement(`div`,{id:t,style:la},n)}function da(e){let{id:t,announcement:n,ariaLiveType:r=`assertive`}=e;return K.createElement(`div`,{id:t,style:{position:`fixed`,top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(100%)`,whiteSpace:`nowrap`},role:`status`,"aria-live":r,"aria-atomic":!0},n)}function fa(){let[e,t]=(0,K.useState)(``);return{announce:(0,K.useCallback)(e=>{e!=null&&t(e)},[]),announcement:e}}var pa=(0,K.createContext)(null);function ma(e){let t=(0,K.useContext)(pa);(0,K.useEffect)(()=>{if(!t)throw Error(`useDndMonitor must be used within a children of <DndContext>`);return t(e)},[e,t])}function ha(){let[e]=(0,K.useState)(()=>new Set),t=(0,K.useCallback)(t=>(e.add(t),()=>e.delete(t)),[e]);return[(0,K.useCallback)(t=>{let{type:n,event:r}=t;e.forEach(e=>e[n]?.call(e,r))},[e]),t]}var ga={draggable:`
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-DiVRNtpo.js";import{t as n}from"./react-dom-CvX0TCLz.js";import{d as r,l as i}from"./chunk-OB3PAWPO-CCBUsQEH.js";import{t as a}from"./jsx-runtime-BdxMnOeJ.js";import{F as o,G as s,I as c,R as l,V as u,W as d,Y as f,a as p,fn as m,ft as h,i as g,j as _,q as v,r as y,yt as b}from"./useAppGlobalState-BL9aCLak.js";import{c as x,d as S,f as C,t as w}from"./log-7NXJbErN.js";import{a as T,c as E,d as D,f as O,l as k,n as A,r as j,s as M,t as N}from"./pendingActionsStore-DDpYeRNm.js";import{A as P,C as ee,H as F,I,M as te,N as L,O as R,P as ne,R as z,S as re,T as B,V as ie,_ as ae,a as oe,b as se,g as ce,h as V,j as le,k as ue,n as de,t as fe,v as pe,w as me}from"./FilePreviewSheet-BnQeVNHq.js";import{c as H,d as he,f as U,h as ge,l as _e,o as ve,p as ye,r as be,t as xe,u as Se}from"./ToolCallMessage-C8Z9pIBo.js";import{t as Ce}from"./lexicalToReact-BVHTqlu5.js";import{a as we,d as Te,i as Ee,n as De,o as Oe,s as ke}from"./KannaSocketProvider-CNmZYIUz.js";import{n as Ae,r as je,t as Me}from"./clipboard.adapter-BLu7Xx3Q.js";import{n as Ne,r as Pe,t as Fe}from"./dist-DHxwilnY.js";import{t as Ie}from"./chevron-left-DZQr0sRY.js";import{r as Le}from"./terminal-D5pfyUjC.js";import{i as Re}from"./host-FY7xgVKG.js";import{d as ze,f as Be,h as Ve,l as He,u as W}from"./pushClient-COMO42mb.js";import{t as Ue}from"./triangle-alert-BwAIBaGG.js";import{i as We}from"./formatDuration-JKx5LBF4.js";import{t as Ge}from"./timer.adapter-C5oNrWbM.js";import{C as Ke,D as qe,E as Je,O as G,T as Ye,b as Xe,c as Ze,d as Qe,f as $e,g as et,h as tt,l as nt,m as rt,n as it,p as at,s as ot,u as st,v as ct,w as lt,x as ut,y as dt}from"./chatFocusPolicy-DYR_9DV3.js";import{i as ft,n as pt,r as mt,t as ht}from"./dist-Bd4iXDMM.js";import{t as gt}from"./createScopedStore-CZBfIcri.js";import{t as _t}from"./input-BJRDZBOh.js";import{T as vt,c as yt,g as bt,l as xt}from"./useTheme-9knhPtrR.js";import{t as St}from"./runDetached-mjGecpjX.js";import{l as Ct}from"./contextWindow-Cpz1HmWo.js";import{a as wt,o as Tt}from"./formatters-BGORekd-.js";import{a as Et,n as Dt}from"./state-mark-x5ennY81.js";import{o as Ot,s as kt,t as At}from"./tools-BlXGwwwh.js";var jt={name:`asterisk`,size:24,node:[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m18.065 8.496-12.125 7`,key:`1h26g9`}],[`path`,{d:`m5.94 8.504 12.125 7`,key:`k77sdm`}]]};jt.node;var Mt=O(jt),Nt={name:`bell-off`,size:24,node:[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742`,key:`178tsu`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}],[`path`,{d:`M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05`,key:`1hqiys`}]]};Nt.node;var Pt=O(Nt),Ft={name:`calendar-x-2`,size:24,node:[[`path`,{d:`M16 2v3`,key:`otl347`}],[`path`,{d:`m17 16 5 5`,key:`1a37d9`}],[`path`,{d:`m17 21 5-5`,key:`1b797a`}],[`path`,{d:`M21 12V5a2 2 0 00-2-2H5a2 2 0 00-2 2v14a2 2 0 002 2h8`,key:`14ws7l`}],[`path`,{d:`M3 9h18`,key:`1pudct`}],[`path`,{d:`M8 2v3`,key:`1ioesn`}]]};Ft.node;var It=O(Ft),Lt={name:`check-check`,size:24,node:[[`path`,{d:`M18 6 7 17l-5-5`,key:`116fxf`}],[`path`,{d:`m22 10-7.5 7.5L13 16`,key:`ke71qq`}]]};Lt.node;var Rt=O(Lt),zt={name:`circle-slash`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`9`,x2:`15`,y1:`15`,y2:`9`,key:`1dfufj`}]]};zt.node;var Bt=O(zt),Vt={name:`circle`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]};Vt.node;var Ht=O(Vt),Ut={name:`corner-down-left`,size:24,node:[[`path`,{d:`M20 4v7a4 4 0 0 1-4 4H4`,key:`6o5b7l`}],[`path`,{d:`m9 10-5 5 5 5`,key:`1kshq7`}]]};Ut.node;var Wt=O(Ut),Gt={name:`flower`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`path`,{d:`M12 16.5A4.5 4.5 0 1 1 7.5 12 4.5 4.5 0 1 1 12 7.5a4.5 4.5 0 1 1 4.5 4.5 4.5 4.5 0 1 1-4.5 4.5`,key:`14wa3c`}],[`path`,{d:`M12 7.5V9`,key:`1oy5b0`}],[`path`,{d:`M7.5 12H9`,key:`eltsq1`}],[`path`,{d:`M16.5 12H15`,key:`vk5kw4`}],[`path`,{d:`M12 16.5V15`,key:`k7eayi`}],[`path`,{d:`m8 8 1.88 1.88`,key:`nxy4qf`}],[`path`,{d:`M14.12 9.88 16 8`,key:`1lst6k`}],[`path`,{d:`m8 16 1.88-1.88`,key:`h2eex1`}],[`path`,{d:`M14.12 14.12 16 16`,key:`uqkrx3`}]]};Gt.node;var Kt=O(Gt),qt={name:`hand`,size:24,node:[[`path`,{d:`M18 11V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2`,key:`1fvzgz`}],[`path`,{d:`M14 10V4a2 2 0 0 0-2-2a2 2 0 0 0-2 2v2`,key:`1kc0my`}],[`path`,{d:`M10 10.5V6a2 2 0 0 0-2-2a2 2 0 0 0-2 2v8`,key:`10h0bg`}],[`path`,{d:`M18 8a2 2 0 1 1 4 0v6a8 8 0 0 1-8 8h-2c-2.8 0-4.5-.86-5.99-2.34l-3.6-3.6a2 2 0 0 1 2.83-2.82L7 15`,key:`1s1gnw`}]]};qt.node;var Jt=O(qt),Yt={name:`list-checks`,size:24,node:[[`path`,{d:`M13 5h8`,key:`a7qcls`}],[`path`,{d:`M13 12h8`,key:`h98zly`}],[`path`,{d:`M13 19h8`,key:`c3s6r1`}],[`path`,{d:`m3 17 2 2 4-4`,key:`1jhpwq`}],[`path`,{d:`m3 7 2 2 4-4`,key:`1obspn`}]]};Yt.node;var Xt=O(Yt),Zt={name:`minimize`,size:24,node:[[`path`,{d:`M8 3v3a2 2 0 0 1-2 2H3`,key:`hohbtr`}],[`path`,{d:`M21 8h-3a2 2 0 0 1-2-2V3`,key:`5jw1f3`}],[`path`,{d:`M3 16h3a2 2 0 0 1 2 2v3`,key:`198tvr`}],[`path`,{d:`M16 21v-3a2 2 0 0 1 2-2h3`,key:`ph8mxp`}]]};Zt.node;var Qt=O(Zt),$t={name:`panel-left`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M9 3v18`,key:`fh3hqa`}]],aliases:[`sidebar`]};$t.node;var en=O($t),tn={name:`send`,size:24,node:[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]};tn.node;var nn=O(tn),rn={name:`settings`,size:24,node:[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]};rn.node;var an=O(rn),on={name:`shield-alert`,size:24,node:[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`M12 8v4`,key:`1got3b`}],[`path`,{d:`M12 16h.01`,key:`1drbdi`}]]};on.node;var sn=O(on),cn={name:`skip-forward`,size:24,node:[[`path`,{d:`M21 4v16`,key:`7j8fe9`}],[`path`,{d:`M6.029 4.285A2 2 0 0 0 3 6v12a2 2 0 0 0 3.029 1.715l9.997-5.998a2 2 0 0 0 .003-3.432z`,key:`zs4d6`}]]};cn.node;var ln=O(cn),un={name:`slash`,size:24,node:[[`path`,{d:`M22 2 2 22`,key:`y4kqgn`}]]};un.node;var dn=O(un),fn={name:`square-kanban`,size:24,node:[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M8 7v7`,key:`1x2jlm`}],[`path`,{d:`M12 7v4`,key:`xawao1`}],[`path`,{d:`M16 7v9`,key:`1hp2iy`}]],aliases:[`kanban-square`]};fn.node;var pn=O(fn),mn={name:`zap`,size:24,node:[[`path`,{d:`M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z`,key:`1v7up4`}]]};mn.node;var hn=O(mn),K=e(t(),1),q=e(a(),1),gn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`bg-card text-card-foreground`,e),...t}));gn.displayName=`Card`;var _n=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`flex flex-col space-y-1.5 p-2`,e),...t}));_n.displayName=`CardHeader`;var vn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`h3`,{ref:n,className:E(`text-2xl font-semibold leading-none tracking-tight`,e),...t}));vn.displayName=`CardTitle`;var yn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`p`,{ref:n,className:E(`text-sm text-muted-foreground`,e),...t}));yn.displayName=`CardDescription`;var bn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`p-6 pt-0`,e),...t}));bn.displayName=`CardContent`;var xn=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(`div`,{ref:n,className:E(`flex items-center p-6 pt-0`,e),...t}));xn.displayName=`CardFooter`;var Sn=[],Cn=[],wn=[],Tn=x()(e=>({sidebarItems:Sn,panels:Cn,commandCenterItems:wn,setContributions:({sidebarItems:t,panels:n,commandCenterItems:r})=>e({sidebarItems:t,panels:n,commandCenterItems:r}),clearContributions:()=>e(e=>e.sidebarItems.length===0&&e.panels.length===0&&e.commandCenterItems.length===0?e:{sidebarItems:Sn,panels:Cn,commandCenterItems:wn})})),En=e=>e.sidebarItems??Sn,Dn=e=>e.panels??Cn,On=e=>e.commandCenterItems??wn,kn=4,An=6;function jn({kind:e,className:t}){return(0,q.jsxs)(`svg`,{"aria-hidden":!0,viewBox:`0 0 12 12`,className:E(`inline-block size-3 shrink-0`,t),children:[e===`filled`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`currentColor`}):null,e===`half`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25}),(0,q.jsx)(`path`,{d:`M ${An} 2 A ${kn} ${kn} 0 0 0 ${An} 10 Z`,fill:`currentColor`})]}):null,e===`ring`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25}):null,e===`dashed`?(0,q.jsx)(`circle`,{cx:An,cy:An,r:kn,fill:`none`,stroke:`currentColor`,strokeWidth:1.25,strokeDasharray:`2 2`}):null]})}function Mn(e){if(e.activeChats===0)return null;let t=[];return e.awaitingAnswer>0&&t.push(`${e.awaitingAnswer} awaiting`),e.failing>0&&t.push(`${e.failing} failing`),e.agents>0&&t.push(`${e.agents} agent${e.agents===1?``:`s`}`),e.loops>0&&t.push(`${e.loops} loop${e.loops===1?``:`s`}`),e.workflows>0&&t.push(`${e.workflows} workflow${e.workflows===1?``:`s`}`),e.backgroundTasks>0&&t.push(`${e.backgroundTasks} task${e.backgroundTasks===1?``:`s`}`),t.length===0?`${e.activeChats} active`:t.join(`, `)}function Nn(e){let t=[];return e.agents>0&&t.push(`${e.agents} agent${e.agents===1?``:`s`}`),e.workflow!==null&&t.push(`workflow`),e.backgroundTasks>0&&t.push(`${e.backgroundTasks} task${e.backgroundTasks===1?``:`s`}`),t.length===0?null:t.join(`, `)}function Pn(e){if(e.status===`running`||e.status===`starting`)return{tone:`warning`,label:Et(e.status)};if(e.status===`waiting_for_user`)return{tone:`info`,label:Et(e.status)};if(e.status===`failed`)return{tone:`destructive`,label:Et(e.status)};let t=e.activity?Nn(e.activity):null;return t?{tone:`warning`,label:t}:e.unread?{tone:`success`,label:`Unread`}:null}function Fn(e){switch(e){case`warning`:return`bg-warning`;case`info`:return`bg-info`;case`success`:return`bg-success`;case`destructive`:return`bg-destructive`;case`muted`:return`bg-muted-foreground`;default:return``}}function In(e){switch(e){case`warning`:return`text-warning-text`;case`info`:return`text-info-text`;case`success`:return`text-success-text`;case`destructive`:return`text-destructive-text`;default:return`text-muted-foreground`}}function Ln(e){switch(e){case`active`:return{kind:`filled`,toneClass:`text-success-text`,title:`Claude session active`};case`warming`:return{kind:`half`,toneClass:`text-warning-text`,title:`Claude session warming`};case`idle`:return{kind:`ring`,toneClass:`text-muted-foreground`,title:`Claude session idle`};case`cooling`:return{kind:`dashed`,toneClass:`text-muted-foreground`,title:`Claude session cooling down`};default:return null}}var Rn=Object.defineProperty,zn=(e,t)=>Rn(e,`name`,{value:t,configurable:!0}),Bn=!1;function Vn(){let[e,t]=K.useState(Bn);return K.useEffect(()=>{Bn||(Bn=!0,t(!0))},[]),e}zn(Vn,`useIsHydrated`);var Hn=K.useSyncExternalStore;function Un(){return()=>{}}zn(Un,`subscribe`);function Wn(){return Hn(Un,()=>!0,()=>!1)}zn(Wn,`useIsHydratedModern`);var Gn=typeof Hn==`function`?Wn:Vn,Kn=Object.defineProperty,qn=(e,t)=>Kn(e,`name`,{value:t,configurable:!0}),Jn=`rovingFocusGroup.onEntryFocus`,Yn={bubbles:!1,cancelable:!0},Xn=`RovingFocusGroup`,[Zn,Qn,$n]=Ne(Xn),[er,tr]=Je(Xn,[$n]),nr={Vertical:`vertical`,Horizontal:`horizontal`},rr={LTR:`ltr`,RTL:`rtl`},[ir,ar]=er(Xn),or=K.forwardRef(qn(function(e,t){return(0,q.jsx)(Zn.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,q.jsx)(Zn.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,q.jsx)(sr,{...e,ref:t})})})},`RovingFocusGroup`)),sr=K.forwardRef(qn(function(e,t){let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...d}=e,f=K.useRef(null),p=qe(t,f),m=Fe(a),[h,g]=Ke({prop:o,defaultProp:s??null,onChange:c,caller:Xn}),[_,v]=K.useState(!1),y=ct(l),b=Qn(n),x=K.useRef(!1),[S,C]=K.useState(0);return K.useEffect(()=>{let e=f.current;if(e)return e.addEventListener(Jn,y),()=>e.removeEventListener(Jn,y)},[y]),(0,q.jsx)(ir,{scope:n,orientation:r,dir:m,loop:i,currentTabStopId:h,onItemFocus:K.useCallback(e=>g(e),[g]),onItemShiftTab:K.useCallback(()=>v(!0),[]),onFocusableItemAdd:K.useCallback(()=>C(e=>e+1),[]),onFocusableItemRemove:K.useCallback(()=>C(e=>e-1),[]),children:(0,q.jsx)(dt.div,{tabIndex:_||S===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:`none`,...e.style},onMouseDown:G(e.onMouseDown,()=>{x.current=!0}),onFocus:G(e.onFocus,e=>{let t=!x.current;if(e.target===e.currentTarget&&t&&!_){let t=new CustomEvent(Jn,Yn);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=b().filter(e=>e.focusable);pr([e.find(e=>e.active),e.find(e=>e.id===h),...e].filter(Boolean).map(e=>e.ref.current),u)}}x.current=!1}),onBlur:G(e.onBlur,()=>v(!1))})})},`RovingFocusGroupImpl`)),cr=`RovingFocusGroupItem`,lr=K.forwardRef(qn(function(e,t){let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=lt(),l=a||c,u=ar(cr,n),d=u.currentTabStopId===l,f=Qn(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:h}=u,g=Gn();return Ye(()=>{if(g&&r)return p(),()=>m()},[g,r,p,m]),K.useEffect(()=>{if(!g&&r)return p(),()=>m()},[g,r,p,m]),(0,q.jsx)(Zn.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,q.jsx)(dt.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:G(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:G(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:G(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=fr(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?mr(n,r+1):n.slice(r+1)}setTimeout(()=>pr(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:h!=null}):o})})},`RovingFocusGroupItem`)),ur={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function dr(e,t){return t===rr.RTL?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}qn(dr,`getDirectionAwareKey`);function fr(e,t,n){let r=dr(e.key,n);if(!(t===nr.Vertical&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===nr.Horizontal&&[`ArrowUp`,`ArrowDown`].includes(r)))return ur[r]}qn(fr,`getFocusIntent`);function pr(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}qn(pr,`focusFirst`);function mr(e,t){return e.map((n,r)=>e[(t+r)%e.length])}qn(mr,`wrapArray`);var hr=Object.defineProperty,J=(e,t)=>hr(e,`name`,{value:t,configurable:!0}),gr=[`Enter`,` `],_r=[`ArrowDown`,`PageUp`,`Home`],vr=[`ArrowUp`,`PageDown`,`End`],yr=[..._r,...vr];[...gr],[...gr];var br=`Menu`,[xr,Sr,Cr]=Ne(br),[wr,Tr]=Je(br,[Cr,ft,tr]),Er=ft(),Dr=tr(),[Or,kr]=wr(br),[Ar,jr]=wr(br),Mr=J(e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:o=!0}=e,s=Er(t),[c,l]=K.useState(null),u=K.useRef(!1),d=ct(a),f=Fe(i);return K.useEffect(()=>{let e=J(()=>{u.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},`handleKeyDown`),t=J(()=>u.current=!1,`handlePointer`);return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),K.useEffect(()=>{if(!n)return;let e=J(()=>d(!1),`handleBlur`);return window.addEventListener(`blur`,e),()=>window.removeEventListener(`blur`,e)},[n,d]),(0,q.jsx)(ht,{...s,children:(0,q.jsx)(Or,{scope:t,open:n,onOpenChange:d,content:c,onContentChange:l,children:(0,q.jsx)(Ar,{scope:t,onClose:K.useCallback(()=>d(!1),[d]),isUsingKeyboardRef:u,dir:f,modal:o,children:r})})})},`Menu`),Nr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,...r}=e,i=Er(n);return(0,q.jsx)(pt,{...i,...r,ref:t})},`MenuAnchor`)),Pr=`MenuPortal`,[Fr,Ir]=wr(Pr,{forceMount:void 0}),Lr=J(e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=kr(Pr,t);return(0,q.jsx)(Fr,{scope:t,forceMount:n,children:(0,q.jsx)(st,{present:n||a.open,children:(0,q.jsx)(Qe,{asChild:!0,container:i,children:r})})})},`MenuPortal`),Rr=`MenuContent`,[zr,Br]=wr(Rr),Vr=K.forwardRef(J(function(e,t){let n=Ir(Rr,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=kr(Rr,e.__scopeMenu),o=jr(Rr,e.__scopeMenu);return(0,q.jsx)(xr.Provider,{scope:e.__scopeMenu,children:(0,q.jsx)(st,{present:r||a.open,children:(0,q.jsx)(xr.Slot,{scope:e.__scopeMenu,children:o.modal?(0,q.jsx)(Hr,{...i,ref:t}):(0,q.jsx)(Ur,{...i,ref:t})})})})},`MenuContent`)),Hr=K.forwardRef(J(function(e,t){let n=kr(Rr,e.__scopeMenu),r=K.useRef(null),i=qe(t,r);return K.useEffect(()=>{let e=r.current;if(e)return ot(e)},[]),(0,q.jsx)(Gr,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:G(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})},`MenuRootContentModal`)),Ur=K.forwardRef(J(function(e,t){let n=kr(Rr,e.__scopeMenu);return(0,q.jsx)(Gr,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})},`MenuRootContentNonModal`)),Wr=ut(`MenuContent.ScrollLock`),Gr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,loop:r=!1,trapFocus:i,onOpenAutoFocus:a,onCloseAutoFocus:o,disableOutsidePointerEvents:s,onEntryFocus:c,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,disableOutsideScroll:m,...h}=e,g=kr(Rr,n),_=jr(Rr,n),v=Er(n),y=Dr(n),b=Sr(n),[x,S]=K.useState(null),C=K.useRef(null),[w,T]=K.useState(null);rt(w);let{nodes:E,registry:D}=tt(),O=!!(i||m),k=qe(t,C,g.onContentChange,T),A=K.useRef(0),j=K.useRef(``),M=K.useRef(0),N=K.useRef(null),P=K.useRef(`right`),ee=K.useRef(0),F=K.useMemo(()=>m?[C,...E.map(e=>({current:e}))]:[],[C,E,m]),I=m?Ze:K.Fragment,te=m?{as:Wr,allowPinchZoom:!0,shards:F}:void 0,L=J(e=>{let t=j.current+e,n=b().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=ci(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;J((function e(t){j.current=t,window.clearTimeout(A.current),t!==``&&(A.current=window.setTimeout(()=>e(``),1e3))}),`updateSearch`)(t),o&&setTimeout(()=>o.focus())},`handleTypeaheadSearch`);K.useEffect(()=>()=>window.clearTimeout(A.current),[]),nt();let R=K.useCallback(e=>P.current===N.current?.side&&ui(e,N.current?.area),[]);return(0,q.jsx)(zr,{scope:n,searchRef:j,onItemEnter:K.useCallback(e=>{R(e)&&e.preventDefault()},[R]),onItemLeave:K.useCallback(e=>{R(e)||(C.current?.focus(),S(null))},[R]),onTriggerLeave:K.useCallback(e=>{R(e)&&e.preventDefault()},[R]),pointerGraceTimerRef:M,onPointerGraceIntentChange:K.useCallback(e=>{N.current=e},[]),children:(0,q.jsx)(at,{registry:O?D:null,children:(0,q.jsx)(I,{...te,children:(0,q.jsx)($e,{asChild:!0,trapped:i,branches:E,onMountAutoFocus:G(a,e=>{e.preventDefault(),C.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:o,children:(0,q.jsx)(et,{asChild:!0,disableOutsidePointerEvents:s,onEscapeKeyDown:l,onPointerDownOutside:u,onFocusOutside:d,onInteractOutside:f,onDismiss:p,children:(0,q.jsx)(or,{asChild:!0,...y,dir:_.dir,orientation:`vertical`,loop:r,currentTabStopId:x,onCurrentTabStopIdChange:S,onEntryFocus:G(c,e=>{_.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,q.jsx)(mt,{role:`menu`,"aria-orientation":`vertical`,"data-state":ri(g.open),"data-radix-menu-content":``,dir:_.dir,...v,...h,ref:k,style:{outline:`none`,...h.style},onKeyDown:G(h.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&L(e.key));let i=C.current;if(e.target!==i||!yr.includes(e.key))return;e.preventDefault();let a=b().filter(e=>!e.disabled).map(e=>e.ref.current);vr.includes(e.key)&&a.reverse(),oi(a)}),onBlur:G(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(A.current),j.current=``)}),onPointerMove:G(e.onPointerMove,di(e=>{let t=e.target,n=ee.current!==e.clientX;if(e.currentTarget.contains(t)&&n){let t=e.clientX>ee.current?`right`:`left`;P.current=t,ee.current=e.clientX}}))})})})})})})})},`MenuContentImpl`)),Kr=`MenuItem`,qr=`menu.itemSelect`,Jr=K.forwardRef(J(function(e,t){let{disabled:n=!1,onSelect:r,...i}=e,a=K.useRef(null),o=jr(Kr,e.__scopeMenu),s=Br(Kr,e.__scopeMenu),c=qe(t,a),l=K.useRef(!1),u=J(()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(qr,{bubbles:!0,cancelable:!0});e.addEventListener(qr,e=>r?.(e),{once:!0}),Xe(e,t),t.defaultPrevented?l.current=!1:o.onClose()}},`handleSelect`);return(0,q.jsx)(Yr,{...i,ref:c,disabled:n,onClick:G(e.onClick,u),onPointerDown:t=>{e.onPointerDown?.(t),l.current=!0},onPointerUp:G(e.onPointerUp,e=>{l.current||e.currentTarget?.click()}),onKeyDown:G(e.onKeyDown,e=>{n||e.target!==e.currentTarget||(s.searchRef.current===``||e.key!==` `)&&gr.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})},`MenuItem`)),Yr=K.forwardRef(J(function(e,t){let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=Br(Kr,n),s=Dr(n),c=K.useRef(null),l=qe(t,c),[u,d]=K.useState(!1),[f,p]=K.useState(``);return K.useEffect(()=>{let e=c.current;e&&p((e.textContent??``).trim())},[a.children]),(0,q.jsx)(xr.ItemSlot,{scope:n,disabled:r,textValue:i??f,children:(0,q.jsx)(lr,{asChild:!0,...s,focusable:!r,children:(0,q.jsx)(dt.div,{role:`menuitem`,"data-highlighted":u?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:l,onPointerMove:G(e.onPointerMove,di(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:G(e.onPointerLeave,di(e=>o.onItemLeave(e))),onFocus:G(e.onFocus,()=>d(!0)),onBlur:G(e.onBlur,()=>d(!1))})})})},`MenuItemImpl`)),[Xr,Zr]=wr(`MenuRadioGroup`,{value:void 0,onValueChange:J(()=>{},`onValueChange`)}),[Qr,$r]=wr(`MenuItemIndicator`,{checked:!1}),ei=K.forwardRef(J(function(e,t){let{__scopeMenu:n,...r}=e;return(0,q.jsx)(dt.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})},`MenuSeparator`)),[ti,ni]=wr(`MenuSub`);function ri(e){return e?`open`:`closed`}J(ri,`getOpenState`);function ii(e){return e===`indeterminate`}J(ii,`isIndeterminate`);function ai(e){return ii(e)?`indeterminate`:e?`checked`:`unchecked`}J(ai,`getCheckedState`);function oi(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}J(oi,`focusFirst`);function si(e,t){return e.map((n,r)=>e[(t+r)%e.length])}J(si,`wrapArray`);function ci(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=si(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}J(ci,`getNextMatch`);function li(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}J(li,`isPointInPolygon`);function ui(e,t){return t?li({x:e.clientX,y:e.clientY},t):!1}J(ui,`isPointerInGraceArea`);function di(e){return t=>t.pointerType===`mouse`?e(t):void 0}J(di,`whenMouse`);var fi=Object.defineProperty,pi=(e,t)=>fi(e,`name`,{value:t,configurable:!0}),mi=`ContextMenu`,[hi,gi]=Je(mi,[Tr]),_i=Tr(),[vi,yi]=hi(mi),bi=pi(e=>{let{__scopeContextMenu:t,children:n,onOpenChange:r,open:i,dir:a,modal:o=!0}=e,s=K.useRef(!1),[c,l]=Ke({prop:i,defaultProp:!1,onChange:r,caller:mi}),u=_i(t);return(0,q.jsx)(vi,{scope:t,open:c,onOpenChange:l,modal:o,hasInteractedRef:s,children:(0,q.jsx)(Mr,{...u,dir:a,open:c,onOpenChange:l,modal:o,children:n})})},`ContextMenu`),xi=`ContextMenuTrigger`,Si=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,disabled:r=!1,...i}=e,a=yi(xi,n),o=_i(n),[s,c]=K.useState({x:0,y:0}),l=K.useMemo(()=>({current:{getBoundingClientRect:pi(()=>DOMRect.fromRect({width:0,height:0,...s}),`getBoundingClientRect`)}}),[s]),u=K.useRef(0),d=K.useCallback(()=>window.clearTimeout(u.current),[]),f=pi(e=>{a.hasInteractedRef.current=!0,c({x:e.clientX,y:e.clientY}),a.onOpenChange(!0)},`handleOpen`);return K.useEffect(()=>d,[d]),K.useEffect(()=>void(r&&d()),[r,d]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Nr,{...o,virtualRef:l}),(0,q.jsx)(dt.span,{"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,...i,ref:t,style:{WebkitTouchCallout:`none`,...e.style},onContextMenu:r?e.onContextMenu:G(e.onContextMenu,e=>{d(),f(e),e.preventDefault()}),onPointerDown:r?e.onPointerDown:G(e.onPointerDown,Oi(e=>{d(),a.open&&a.onOpenChange(!1),u.current=window.setTimeout(()=>f(e),700)})),onPointerMove:r?e.onPointerMove:G(e.onPointerMove,Oi(d)),onPointerCancel:r?e.onPointerCancel:G(e.onPointerCancel,Oi(d)),onPointerUp:r?e.onPointerUp:G(e.onPointerUp,Oi(d))})]})},`ContextMenuTrigger`)),Ci=pi(e=>{let{__scopeContextMenu:t,...n}=e,r=_i(t);return(0,q.jsx)(Lr,{...r,...n})},`ContextMenuPortal`),wi=`ContextMenuContent`,Ti=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=yi(wi,n),a=_i(n),o=K.useRef(!1);return(0,q.jsx)(Vr,{...a,...r,ref:t,side:`right`,sideOffset:2,align:`start`,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),!t.defaultPrevented&&o.current&&t.preventDefault(),o.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),!t.defaultPrevented&&!i.modal&&(o.current=!0)},style:{...e.style,"--radix-context-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-context-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-context-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-context-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-context-menu-trigger-height":`var(--radix-popper-anchor-height)`}})},`ContextMenuContent`)),Ei=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=_i(n);return(0,q.jsx)(Jr,{...i,...r,ref:t})},`ContextMenuItem`)),Di=K.forwardRef(pi(function(e,t){let{__scopeContextMenu:n,...r}=e,i=_i(n);return(0,q.jsx)(ei,{...i,...r,ref:t})},`ContextMenuSeparator`));function Oi(e){return t=>t.pointerType===`mouse`?void 0:e(t)}pi(Oi,`whenTouchOrPen`);var ki=K.createContext(null);function Ai({onOpenChange:e,...t}){let[n,r]=K.useState(0),i=K.useCallback(()=>{r(e=>e+1),e?.(!1)},[e]);return(0,q.jsx)(ki.Provider,{value:i,children:(0,q.jsx)(bi,{onOpenChange:e,...t},n)})}var ji=Si,Mi=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(Ci,{children:(0,q.jsx)(Ti,{ref:n,className:E(`z-50 min-w-[170px] overflow-hidden rounded-xl border border-border bg-background p-1 shadow-lg outline-hidden animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95`,e),...t})}));Mi.displayName=Ti.displayName;var Ni=K.forwardRef(({className:e,onSelect:t,...n},r)=>{let i=K.useContext(ki);return(0,q.jsx)(Ei,{ref:r,className:E(`relative flex cursor-default select-none items-center gap-2.5 rounded-lg px-3 py-2 text-xs font-medium text-foreground outline-hidden transition-colors hover:bg-muted focus:bg-muted data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,e),onSelect:e=>{t?.(e),i?.()},...n})});Ni.displayName=Ei.displayName;var Pi=K.forwardRef(({className:e,...t},n)=>(0,q.jsx)(Di,{ref:n,className:E(`-mx-1 my-1 h-px bg-border`,e),...t}));Pi.displayName=Di.displayName;var Fi=e(n());function Ii(){var e=[...arguments];return(0,K.useMemo)(()=>t=>{e.forEach(e=>e(t))},e)}var Li=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0;function Ri(e){let t=Object.prototype.toString.call(e);return t===`[object Window]`||t===`[object global]`}function zi(e){return`nodeType`in e}function Y(e){return e?Ri(e)?e:zi(e)?e.ownerDocument?.defaultView??window:window:window}function Bi(e){let{Document:t}=Y(e);return e instanceof t}function Vi(e){return!Ri(e)&&e instanceof Y(e).HTMLElement}function Hi(e){return e instanceof Y(e).SVGElement}function Ui(e){return e?Ri(e)?e.document:zi(e)?Bi(e)?e:Vi(e)||Hi(e)?e.ownerDocument:document:document:document}var Wi=Li?K.useLayoutEffect:K.useEffect;function Gi(e){let t=(0,K.useRef)(e);return Wi(()=>{t.current=e}),(0,K.useCallback)(function(){var e=[...arguments];return t.current==null?void 0:t.current(...e)},[])}function Ki(){let e=(0,K.useRef)(null);return[(0,K.useCallback)((t,n)=>{e.current=setInterval(t,n)},[]),(0,K.useCallback)(()=>{e.current!==null&&(clearInterval(e.current),e.current=null)},[])]}function qi(e,t){t===void 0&&(t=[e]);let n=(0,K.useRef)(e);return Wi(()=>{n.current!==e&&(n.current=e)},t),n}function Ji(e,t){let n=(0,K.useRef)();return(0,K.useMemo)(()=>{let t=e(n.current);return n.current=t,t},[...t])}function Yi(e){let t=Gi(e),n=(0,K.useRef)(null);return[n,(0,K.useCallback)(e=>{e!==n.current&&t?.(e,n.current),n.current=e},[])]}function Xi(e){let t=(0,K.useRef)();return(0,K.useEffect)(()=>{t.current=e},[e]),t.current}var Zi={};function Qi(e,t){return(0,K.useMemo)(()=>{if(t)return t;let n=Zi[e]==null?0:Zi[e]+1;return Zi[e]=n,e+`-`+n},[e,t])}function $i(e){return function(t){return[...arguments].slice(1).reduce((t,n)=>{let r=Object.entries(n);for(let[n,i]of r){let r=t[n];r!=null&&(t[n]=r+e*i)}return t},{...t})}}var ea=$i(1),ta=$i(-1);function na(e){return`clientX`in e&&`clientY`in e}function ra(e){if(!e)return!1;let{KeyboardEvent:t}=Y(e.target);return t&&e instanceof t}function ia(e){if(!e)return!1;let{TouchEvent:t}=Y(e.target);return t&&e instanceof t}function aa(e){if(ia(e)){if(e.touches&&e.touches.length){let{clientX:t,clientY:n}=e.touches[0];return{x:t,y:n}}if(e.changedTouches&&e.changedTouches.length){let{clientX:t,clientY:n}=e.changedTouches[0];return{x:t,y:n}}}return na(e)?{x:e.clientX,y:e.clientY}:null}var oa=Object.freeze({Translate:{toString(e){if(!e)return;let{x:t,y:n}=e;return`translate3d(`+(t?Math.round(t):0)+`px, `+(n?Math.round(n):0)+`px, 0)`}},Scale:{toString(e){if(!e)return;let{scaleX:t,scaleY:n}=e;return`scaleX(`+t+`) scaleY(`+n+`)`}},Transform:{toString(e){if(e)return[oa.Translate.toString(e),oa.Scale.toString(e)].join(` `)}},Transition:{toString(e){let{property:t,duration:n,easing:r}=e;return t+` `+n+`ms `+r}}}),sa=`a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]`;function ca(e){return e.matches(sa)?e:e.querySelector(sa)}var la={display:`none`};function ua(e){let{id:t,value:n}=e;return K.createElement(`div`,{id:t,style:la},n)}function da(e){let{id:t,announcement:n,ariaLiveType:r=`assertive`}=e;return K.createElement(`div`,{id:t,style:{position:`fixed`,top:0,left:0,width:1,height:1,margin:-1,border:0,padding:0,overflow:`hidden`,clip:`rect(0 0 0 0)`,clipPath:`inset(100%)`,whiteSpace:`nowrap`},role:`status`,"aria-live":r,"aria-atomic":!0},n)}function fa(){let[e,t]=(0,K.useState)(``);return{announce:(0,K.useCallback)(e=>{e!=null&&t(e)},[]),announcement:e}}var pa=(0,K.createContext)(null);function ma(e){let t=(0,K.useContext)(pa);(0,K.useEffect)(()=>{if(!t)throw Error(`useDndMonitor must be used within a children of <DndContext>`);return t(e)},[e,t])}function ha(){let[e]=(0,K.useState)(()=>new Set),t=(0,K.useCallback)(t=>(e.add(t),()=>e.delete(t)),[e]);return[(0,K.useCallback)(t=>{let{type:n,event:r}=t;e.forEach(e=>e[n]?.call(e,r))},[e]),t]}var ga={draggable:`
2
2
  To pick up a draggable item, press the space bar.
3
3
  While dragging, use the arrow keys to move the item.
4
4
  Press space again to drop the item in its new position, or press escape to cancel.
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-DiVRNtpo.js";import{t as n}from"./jsx-runtime-BdxMnOeJ.js";import{c as r,d as i}from"./log-7fGlFSON.js";var a=e(t(),1),o=1e3,s=5e3;function c(e){return Number.isFinite(e)?Math.min(s,Math.max(500,Math.round(e))):o}var l={enabled:!0,publicUrl:null};function u(e){if(e===`localhost`||e===`[::1]`)return!0;let t=e.split(`.`);return t.length===4&&t[0]===`127`&&t.every(e=>/^\d+$/.test(e)&&Number(e)<=255)}function d(e){if(e===null)return null;let t;try{t=new URL(e.trim())}catch{return null}return t.protocol===`https:`||t.protocol===`http:`&&u(t.hostname)?t.origin:null}function f(e,t){return{...e,...t,terminal:{...e.terminal,...t.terminal},panes:{...e.panes,...t.panes},editor:{...e.editor,...t.editor},typography:{...e.typography,...t.typography},providerDefaults:{claude:{...e.providerDefaults.claude,...t.providerDefaults?.claude,modelOptions:{...e.providerDefaults.claude.modelOptions,...t.providerDefaults?.claude?.modelOptions}},codex:{...e.providerDefaults.codex,...t.providerDefaults?.codex,modelOptions:{...e.providerDefaults.codex.modelOptions,...t.providerDefaults?.codex?.modelOptions}},openrouter:{...e.providerDefaults.openrouter,...t.providerDefaults?.openrouter,modelOptions:{}},custom:{...e.providerDefaults.custom,...t.providerDefaults?.custom,modelOptions:{}}},cloudflareTunnel:{...e.cloudflareTunnel,...t.cloudflareTunnel},push:{...e.push,...t.push},telemetry:{...e.telemetry,...t.telemetry},claudeAuth:{tokens:t.claudeAuth?.tokens??e.claudeAuth.tokens,concurrencyDefault:t.claudeAuth?.concurrencyDefault??e.claudeAuth.concurrencyDefault},auth:{...e.auth,...t.auth},uploads:{...e.uploads,...t.uploads},subagents:e.subagents,customMcpServers:e.customMcpServers,customBeacons:e.customBeacons,customModels:e.customModels,customProviders:e.customProviders,textSnippets:e.textSnippets,plugins:{...e.plugins,...t.plugins},installedPlugins:e.installedPlugins,remoteMcp:{...e.remoteMcp,...t.remoteMcp},claudeDriver:{lifecycle:{...e.claudeDriver.lifecycle,...t.claudeDriver?.lifecycle}},globalPromptAppend:t.globalPromptAppend??e.globalPromptAppend,subagentRuntime:{runTimeoutMs:t.subagentRuntime?.runTimeoutMs??e.subagentRuntime.runTimeoutMs,defaultLoopSubagentId:t.subagentRuntime?.defaultLoopSubagentId===void 0?e.subagentRuntime.defaultLoopSubagentId:t.subagentRuntime.defaultLoopSubagentId},packageUpdates:{...e.packageUpdates,...t.packageUpdates}}}var p=r()(e=>({settings:null,hydrationStatus:`idle`,setHydrationStatus:t=>e({hydrationStatus:t}),setFromServer:t=>e({settings:t,hydrationStatus:`ready`}),applyOptimisticPatch:t=>e(e=>({settings:e.settings?f(e.settings,t):e.settings}))})),m=[],h=e=>e.settings?.customMcpServers??m,g=[],_=e=>e.settings?.customBeacons??g,v=[],y=e=>e.settings?.customModels??v,b=[],x=e=>e.settings?.customProviders??b,S=[],C=e=>e.settings?.textSnippets??S,w=[],T=e=>e.settings?.plugins.enabled??!1,E=e=>e.settings?.installedPlugins??w,D=e=>e.settings?.remoteMcp??l,O=450,k=`cursor`;function A(e){return e===`vscode`?`code {path}`:e===`xcode`?`xed {path}`:e===`windsurf`?`windsurf {path}`:`cursor {path}`}var j=e=>e.settings?.terminal.scrollbackLines??1e3,M=e=>e.settings?.terminal.minColumnWidth??O,ee=e=>e.settings?.editor.preset??k,N=e=>{let t=e.settings?.editor.preset??k,n=(e.settings?.editor.commandTemplate)?.trim();return n&&n.length>0?n:A(t)},P=e=>e.settings?.chatSoundPreference??`always`,F=e=>e.settings?.chatSoundId??`funk`;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function L(e){return Array.isArray(e)}function R(e){try{return JSON.parse(e)}catch{return null}}var z=`kanna-ui-intent`,B=/^[ \t]*(`{3,})[ \t]*kanna-ui[ \t]*$/i,V=/^[ \t]*(`{3,})[ \t]*kanna-ui-intent[ \t]*$/i;function H(e,t){let n=Math.max(2,...[...t.matchAll(/`+/g)].map(e=>e[0].length)),r="`".repeat(n+1);return`${r}${e}\n${t}\n${r}`}var U=e(n(),1),W=(0,a.createContext)(void 0),G=e=>e===`light`||e===`dark`||e===`system`;function K(e){return e===`dark`?`black-translucent`:`default`}function q(e,t,n){n.upsertHeadMeta(e,t)}function J(e,t=i){let n=t.getComputedBackgroundColor();n&&q(`theme-color`,n,t),q(`apple-mobile-web-app-status-bar-style`,K(e),t),t.setDocumentElementColorScheme(e)}var Y=(e=i)=>e.matchesMediaQuery(`(prefers-color-scheme: dark)`)?`dark`:`light`,X=(e,t=i)=>{let n=e===`system`?Y(t):e;t.toggleDocumentElementClass(`dark`,n===`dark`)},Z=()=>{let e=p.getState().settings?.theme;return e&&G(e)?e:`system`};function Q({children:e,dom:t=i}){let n=p(e=>e.settings?.theme),r=p(e=>e.applyOptimisticPatch),[o,s]=(0,a.useState)(Z);(0,a.useEffect)(()=>{n&&n!==o&&s(n)},[n,o]),(0,a.useEffect)(()=>{X(o,t)},[o,t]),(0,a.useEffect)(()=>{J(o===`system`?Y(t):o,t)},[o,t]),(0,a.useEffect)(()=>{if(o===`system`)return t.addMediaQueryListener(`(prefers-color-scheme: dark)`,()=>{X(`system`,t),J(Y(t),t)})},[o,t]);let c=(0,a.useMemo)(()=>{let e=o===`system`?Y(t):o;return{theme:o,resolvedTheme:e,setTheme:e=>{s(e),r({theme:e})}}},[r,o,t]);return(0,U.jsx)(W.Provider,{value:c,children:e})}function $(){return(0,a.useContext)(W)?.resolvedTheme??null}function te(){let e=(0,a.useContext)(W);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}export{j as C,o as D,d as E,s as O,D as S,p as T,N as _,z as a,M as b,L as c,F as d,P as f,x as g,y as h,B as i,c as k,I as l,h as m,$ as n,V as o,_ as p,te as r,H as s,Q as t,R as u,ee as v,C as w,T as x,E as y};
1
+ import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{t}from"./react-DiVRNtpo.js";import{t as n}from"./jsx-runtime-BdxMnOeJ.js";import{c as r,d as i}from"./log-7NXJbErN.js";var a=e(t(),1),o=1e3,s=5e3;function c(e){return Number.isFinite(e)?Math.min(s,Math.max(500,Math.round(e))):o}var l={enabled:!0,publicUrl:null};function u(e){if(e===`localhost`||e===`[::1]`)return!0;let t=e.split(`.`);return t.length===4&&t[0]===`127`&&t.every(e=>/^\d+$/.test(e)&&Number(e)<=255)}function d(e){if(e===null)return null;let t;try{t=new URL(e.trim())}catch{return null}return t.protocol===`https:`||t.protocol===`http:`&&u(t.hostname)?t.origin:null}function f(e,t){return{...e,...t,terminal:{...e.terminal,...t.terminal},panes:{...e.panes,...t.panes},editor:{...e.editor,...t.editor},typography:{...e.typography,...t.typography},providerDefaults:{claude:{...e.providerDefaults.claude,...t.providerDefaults?.claude,modelOptions:{...e.providerDefaults.claude.modelOptions,...t.providerDefaults?.claude?.modelOptions}},codex:{...e.providerDefaults.codex,...t.providerDefaults?.codex,modelOptions:{...e.providerDefaults.codex.modelOptions,...t.providerDefaults?.codex?.modelOptions}},openrouter:{...e.providerDefaults.openrouter,...t.providerDefaults?.openrouter,modelOptions:{}},custom:{...e.providerDefaults.custom,...t.providerDefaults?.custom,modelOptions:{}}},cloudflareTunnel:{...e.cloudflareTunnel,...t.cloudflareTunnel},push:{...e.push,...t.push},telemetry:{...e.telemetry,...t.telemetry},claudeAuth:{tokens:t.claudeAuth?.tokens??e.claudeAuth.tokens,concurrencyDefault:t.claudeAuth?.concurrencyDefault??e.claudeAuth.concurrencyDefault},auth:{...e.auth,...t.auth},uploads:{...e.uploads,...t.uploads},subagents:e.subagents,customMcpServers:e.customMcpServers,customBeacons:e.customBeacons,customModels:e.customModels,customProviders:e.customProviders,textSnippets:e.textSnippets,plugins:{...e.plugins,...t.plugins},installedPlugins:e.installedPlugins,remoteMcp:{...e.remoteMcp,...t.remoteMcp},claudeDriver:{lifecycle:{...e.claudeDriver.lifecycle,...t.claudeDriver?.lifecycle}},globalPromptAppend:t.globalPromptAppend??e.globalPromptAppend,subagentRuntime:{runTimeoutMs:t.subagentRuntime?.runTimeoutMs??e.subagentRuntime.runTimeoutMs,defaultLoopSubagentId:t.subagentRuntime?.defaultLoopSubagentId===void 0?e.subagentRuntime.defaultLoopSubagentId:t.subagentRuntime.defaultLoopSubagentId},packageUpdates:{...e.packageUpdates,...t.packageUpdates}}}var p=r()(e=>({settings:null,hydrationStatus:`idle`,setHydrationStatus:t=>e({hydrationStatus:t}),setFromServer:t=>e({settings:t,hydrationStatus:`ready`}),applyOptimisticPatch:t=>e(e=>({settings:e.settings?f(e.settings,t):e.settings}))})),m=[],h=e=>e.settings?.customMcpServers??m,g=[],_=e=>e.settings?.customBeacons??g,v=[],y=e=>e.settings?.customModels??v,b=[],x=e=>e.settings?.customProviders??b,S=[],C=e=>e.settings?.textSnippets??S,w=[],T=e=>e.settings?.plugins.enabled??!1,E=e=>e.settings?.installedPlugins??w,D=e=>e.settings?.remoteMcp??l,O=450,k=`cursor`;function A(e){return e===`vscode`?`code {path}`:e===`xcode`?`xed {path}`:e===`windsurf`?`windsurf {path}`:`cursor {path}`}var j=e=>e.settings?.terminal.scrollbackLines??1e3,M=e=>e.settings?.terminal.minColumnWidth??O,ee=e=>e.settings?.editor.preset??k,N=e=>{let t=e.settings?.editor.preset??k,n=(e.settings?.editor.commandTemplate)?.trim();return n&&n.length>0?n:A(t)},P=e=>e.settings?.chatSoundPreference??`always`,F=e=>e.settings?.chatSoundId??`funk`;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function L(e){return Array.isArray(e)}function R(e){try{return JSON.parse(e)}catch{return null}}var z=`kanna-ui-intent`,B=/^[ \t]*(`{3,})[ \t]*kanna-ui[ \t]*$/i,V=/^[ \t]*(`{3,})[ \t]*kanna-ui-intent[ \t]*$/i;function H(e,t){let n=Math.max(2,...[...t.matchAll(/`+/g)].map(e=>e[0].length)),r="`".repeat(n+1);return`${r}${e}\n${t}\n${r}`}var U=e(n(),1),W=(0,a.createContext)(void 0),G=e=>e===`light`||e===`dark`||e===`system`;function K(e){return e===`dark`?`black-translucent`:`default`}function q(e,t,n){n.upsertHeadMeta(e,t)}function J(e,t=i){let n=t.getComputedBackgroundColor();n&&q(`theme-color`,n,t),q(`apple-mobile-web-app-status-bar-style`,K(e),t),t.setDocumentElementColorScheme(e)}var Y=(e=i)=>e.matchesMediaQuery(`(prefers-color-scheme: dark)`)?`dark`:`light`,X=(e,t=i)=>{let n=e===`system`?Y(t):e;t.toggleDocumentElementClass(`dark`,n===`dark`)},Z=()=>{let e=p.getState().settings?.theme;return e&&G(e)?e:`system`};function Q({children:e,dom:t=i}){let n=p(e=>e.settings?.theme),r=p(e=>e.applyOptimisticPatch),[o,s]=(0,a.useState)(Z);(0,a.useEffect)(()=>{n&&n!==o&&s(n)},[n,o]),(0,a.useEffect)(()=>{X(o,t)},[o,t]),(0,a.useEffect)(()=>{J(o===`system`?Y(t):o,t)},[o,t]),(0,a.useEffect)(()=>{if(o===`system`)return t.addMediaQueryListener(`(prefers-color-scheme: dark)`,()=>{X(`system`,t),J(Y(t),t)})},[o,t]);let c=(0,a.useMemo)(()=>{let e=o===`system`?Y(t):o;return{theme:o,resolvedTheme:e,setTheme:e=>{s(e),r({theme:e})}}},[r,o,t]);return(0,U.jsx)(W.Provider,{value:c,children:e})}function $(){return(0,a.useContext)(W)?.resolvedTheme??null}function te(){let e=(0,a.useContext)(W);if(!e)throw Error(`useTheme must be used within ThemeProvider`);return e}export{j as C,o as D,d as E,s as O,D as S,p as T,N as _,z as a,M as b,L as c,F as d,P as f,x as g,y as h,B as i,c as k,I as l,h as m,$ as n,V as o,_ as p,te as r,H as s,Q as t,R as u,ee as v,C as w,T as x,E as y};
@@ -38,7 +38,7 @@
38
38
  })()
39
39
  </script>
40
40
  <title>Kanna</title>
41
- <script type="module" crossorigin src="/assets/index-3lHvRekg.js"></script>
41
+ <script type="module" crossorigin src="/assets/index-MU4WHdaY.js"></script>
42
42
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C0FnF6B9.js">
43
43
  <link rel="modulepreload" crossorigin href="/assets/react-DiVRNtpo.js">
44
44
  <link rel="modulepreload" crossorigin href="/assets/react-dom-CvX0TCLz.js">
@@ -46,42 +46,42 @@
46
46
  <link rel="modulepreload" crossorigin href="/assets/chunk-OB3PAWPO-CCBUsQEH.js">
47
47
  <link rel="modulepreload" crossorigin href="/assets/jsx-runtime-BdxMnOeJ.js">
48
48
  <link rel="modulepreload" crossorigin href="/assets/useQuery-Cqr8_M0q.js">
49
- <link rel="modulepreload" crossorigin href="/assets/log-7fGlFSON.js">
50
- <link rel="modulepreload" crossorigin href="/assets/pendingActionsStore-idc6m2Ya.js">
51
- <link rel="modulepreload" crossorigin href="/assets/clipboard.adapter-BvW6oQa_.js">
49
+ <link rel="modulepreload" crossorigin href="/assets/log-7NXJbErN.js">
50
+ <link rel="modulepreload" crossorigin href="/assets/pendingActionsStore-DDpYeRNm.js">
51
+ <link rel="modulepreload" crossorigin href="/assets/clipboard.adapter-BLu7Xx3Q.js">
52
52
  <link rel="modulepreload" crossorigin href="/assets/chatFocusPolicy-DYR_9DV3.js">
53
- <link rel="modulepreload" crossorigin href="/assets/timer.adapter-BD7zwXEm.js">
54
- <link rel="modulepreload" crossorigin href="/assets/createScopedStore-DW4wfjbM.js">
55
- <link rel="modulepreload" crossorigin href="/assets/useTheme-B_JDh31l.js">
56
- <link rel="modulepreload" crossorigin href="/assets/runDetached-BWsF_7Xo.js">
57
- <link rel="modulepreload" crossorigin href="/assets/lexicalToReact-DdXqoi0d.js">
53
+ <link rel="modulepreload" crossorigin href="/assets/timer.adapter-C5oNrWbM.js">
54
+ <link rel="modulepreload" crossorigin href="/assets/createScopedStore-CZBfIcri.js">
55
+ <link rel="modulepreload" crossorigin href="/assets/useTheme-9knhPtrR.js">
56
+ <link rel="modulepreload" crossorigin href="/assets/runDetached-mjGecpjX.js">
57
+ <link rel="modulepreload" crossorigin href="/assets/lexicalToReact-BVHTqlu5.js">
58
58
  <link rel="modulepreload" crossorigin href="/assets/dist-Bd4iXDMM.js">
59
- <link rel="modulepreload" crossorigin href="/assets/segmented-control-3UDSwswP.js">
60
- <link rel="modulepreload" crossorigin href="/assets/pushClient-NeXrldi-.js">
61
- <link rel="modulepreload" crossorigin href="/assets/input-BerPPEIs.js">
62
- <link rel="modulepreload" crossorigin href="/assets/state-mark-CU2hw5D9.js">
63
- <link rel="modulepreload" crossorigin href="/assets/contextWindow-WJUHfP_d.js">
59
+ <link rel="modulepreload" crossorigin href="/assets/segmented-control-CfauwRtX.js">
60
+ <link rel="modulepreload" crossorigin href="/assets/pushClient-COMO42mb.js">
61
+ <link rel="modulepreload" crossorigin href="/assets/input-BJRDZBOh.js">
62
+ <link rel="modulepreload" crossorigin href="/assets/state-mark-x5ennY81.js">
63
+ <link rel="modulepreload" crossorigin href="/assets/contextWindow-Cpz1HmWo.js">
64
64
  <link rel="modulepreload" crossorigin href="/assets/formatters-BGORekd-.js">
65
- <link rel="modulepreload" crossorigin href="/assets/useAppGlobalState-uP5C1BG8.js">
66
- <link rel="modulepreload" crossorigin href="/assets/terminal-8Bxl5uZh.js">
67
- <link rel="modulepreload" crossorigin href="/assets/triangle-alert-CQwDyl4K.js">
68
- <link rel="modulepreload" crossorigin href="/assets/formatDuration-BA1K5CFs.js">
69
- <link rel="modulepreload" crossorigin href="/assets/plus-CwWMJ0a-.js">
70
- <link rel="modulepreload" crossorigin href="/assets/FilePreviewSheet-B5b8L-4e.js">
71
- <link rel="modulepreload" crossorigin href="/assets/tools-Lo2VrFmM.js">
72
- <link rel="modulepreload" crossorigin href="/assets/ToolCallMessage-BhxowUjs.js">
73
- <link rel="modulepreload" crossorigin href="/assets/KannaSocketProvider-CiuKyRYE.js">
74
- <link rel="modulepreload" crossorigin href="/assets/dist-Q8elClTa.js">
75
- <link rel="modulepreload" crossorigin href="/assets/chevron-left-DpI8tMxJ.js">
76
- <link rel="modulepreload" crossorigin href="/assets/host-C0p_56Re.js">
77
- <link rel="modulepreload" crossorigin href="/assets/useKannaState-B2eDC-Dw.js">
78
- <link rel="modulepreload" crossorigin href="/assets/ellipsis-D_1qLZbX.js">
79
- <link rel="modulepreload" crossorigin href="/assets/square-pen-DJjPW4f4.js">
80
- <link rel="modulepreload" crossorigin href="/assets/genui-CZI72r1O.js">
81
- <link rel="modulepreload" crossorigin href="/assets/chatSounds-CUN4vZG0.js">
82
- <link rel="modulepreload" crossorigin href="/assets/sidebarPendingActions-B8iNQJfE.js">
83
- <link rel="modulepreload" crossorigin href="/assets/popover-gn1uvc-1.js">
84
- <link rel="stylesheet" crossorigin href="/assets/index-D8o_YX_z.css">
65
+ <link rel="modulepreload" crossorigin href="/assets/useAppGlobalState-BL9aCLak.js">
66
+ <link rel="modulepreload" crossorigin href="/assets/terminal-D5pfyUjC.js">
67
+ <link rel="modulepreload" crossorigin href="/assets/triangle-alert-BwAIBaGG.js">
68
+ <link rel="modulepreload" crossorigin href="/assets/formatDuration-JKx5LBF4.js">
69
+ <link rel="modulepreload" crossorigin href="/assets/plus-C3QbbvBk.js">
70
+ <link rel="modulepreload" crossorigin href="/assets/FilePreviewSheet-BnQeVNHq.js">
71
+ <link rel="modulepreload" crossorigin href="/assets/tools-BlXGwwwh.js">
72
+ <link rel="modulepreload" crossorigin href="/assets/ToolCallMessage-C8Z9pIBo.js">
73
+ <link rel="modulepreload" crossorigin href="/assets/KannaSocketProvider-CNmZYIUz.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/dist-DHxwilnY.js">
75
+ <link rel="modulepreload" crossorigin href="/assets/chevron-left-DZQr0sRY.js">
76
+ <link rel="modulepreload" crossorigin href="/assets/host-FY7xgVKG.js">
77
+ <link rel="modulepreload" crossorigin href="/assets/useKannaState-DTILzHBb.js">
78
+ <link rel="modulepreload" crossorigin href="/assets/ellipsis-Ba-nFhTR.js">
79
+ <link rel="modulepreload" crossorigin href="/assets/square-pen-BB5GlYSZ.js">
80
+ <link rel="modulepreload" crossorigin href="/assets/genui-DmCmYDHH.js">
81
+ <link rel="modulepreload" crossorigin href="/assets/chatSounds-ih86yh5r.js">
82
+ <link rel="modulepreload" crossorigin href="/assets/sidebarPendingActions-Bd_2oNH_.js">
83
+ <link rel="modulepreload" crossorigin href="/assets/popover-Dm-pdC4M.js">
84
+ <link rel="stylesheet" crossorigin href="/assets/index-BYus2o1t.css">
85
85
  </head>
86
86
  <body>
87
87
  <div id="root"></div>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cuongtran001/kanna",
3
3
  "type": "module",
4
- "version": "1.76.2",
4
+ "version": "1.76.3",
5
5
  "description": "A beautiful web UI for Claude Code",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -111,4 +111,5 @@ export interface AgentCoordinatorArgs {
111
111
  backgroundTaskOutputRegistry?: import("./background-task-output-registry").BackgroundTaskOutputRegistry
112
112
  liveBlocks?: import("./live-block-throttle").LiveBlockHub
113
113
  genuiDatasets?: import("./genui/dataset-service").GenUIDatasetService
114
+ onTurnOutcome?: (chatId: string, outcome: "finished" | "failed" | "cancelled") => void
114
115
  }
@@ -329,7 +329,9 @@ export class AgentCoordinator {
329
329
  }),
330
330
  createGenUIGuard(genuiEscalation, checkGenUIDataset, true),
331
331
  )
332
+ const onTurnOutcome = args.onTurnOutcome
332
333
  this.store.onTurnTerminal = (chatId, outcome) => {
334
+ onTurnOutcome?.(chatId, outcome)
333
335
  const active = this.activeTurns.get(chatId)
334
336
  if (active) {
335
337
  recordHistogram(TURN_DURATION_MS, Date.now() - active.startedAt, {
@@ -939,6 +941,8 @@ export class AgentCoordinator {
939
941
  clearDrainingStream: (chatId) => this.clearDrainingStream(chatId),
940
942
  emitStateChange: (chatId, opts) => this.emitStateChange(chatId, opts),
941
943
  getSubagents: () => this.getSubagents(),
944
+ getBeacons: this.getBeacons,
945
+ isBeaconOnline: (beaconId) => this.beaconRegistry?.isOnline(beaconId) ?? false,
942
946
  getAppSettingsSnapshot: () => this.getAppSettingsSnapshot(),
943
947
  listSkills: (chatId) => this.skillAccess.listSkills(chatId),
944
948
  generateTitleInBackground: (chatId, content, localPath, optimisticTitle) =>
@@ -0,0 +1,33 @@
1
+ import { describe, expect, test } from "bun:test"
2
+ import type { BeaconConfig } from "../shared/beacon-config"
3
+ import { DEFAULT_BEACON_SCOPE } from "../shared/beacon-scope"
4
+ import { withBeaconMentions } from "./beacon-mention-prompt"
5
+
6
+ const beacon: BeaconConfig = {
7
+ id: "beacon-1",
8
+ label: "MacBook-Pro.local",
9
+ alias: "office-mac",
10
+ publicKey: "pk",
11
+ os: "darwin",
12
+ scope: DEFAULT_BEACON_SCOPE,
13
+ enabled: true,
14
+ createdAt: "2026-10-13T00:00:00.000Z",
15
+ updatedAt: "2026-10-13T00:00:00.000Z",
16
+ }
17
+
18
+ describe("withBeaconMentions", () => {
19
+ test("a mentioned beacon is described with its id, hostname, os and presence", () => {
20
+ const prompt = withBeaconMentions("run uname on @beacon/office-mac", "run uname on @beacon/office-mac", [beacon], () => false)
21
+ expect(prompt).toContain(
22
+ "- @beacon/office-mac → beaconId beacon-1 (hostname MacBook-Pro.local, darwin, offline, enabled)",
23
+ )
24
+ })
25
+
26
+ test("a message that names no beacon is returned unchanged", () => {
27
+ expect(withBeaconMentions("hello", "hello", [beacon], () => true)).toBe("hello")
28
+ })
29
+
30
+ test("a handle matching no beacon adds nothing", () => {
31
+ expect(withBeaconMentions("hi @beacon/ghost", "hi @beacon/ghost", [beacon], () => true)).toBe("hi @beacon/ghost")
32
+ })
33
+ })
@@ -0,0 +1,33 @@
1
+ import { BEACON_MENTION_PREFIX, buildBeaconMentionIndex, resolveBeaconMentions } from "../shared/beacon-alias"
2
+ import type { BeaconConfig } from "../shared/beacon-config"
3
+
4
+ export function renderBeaconMentionBlock(
5
+ content: string,
6
+ beacons: readonly BeaconConfig[],
7
+ isOnline: (beaconId: string) => boolean,
8
+ ): string | null {
9
+ const { beacons: mentioned } = resolveBeaconMentions(content, beacons)
10
+ if (mentioned.length === 0) return null
11
+ const { handleByBeaconId } = buildBeaconMentionIndex(beacons)
12
+ const lines = mentioned.map((beacon) => {
13
+ const handle = handleByBeaconId.get(beacon.id) ?? beacon.id
14
+ const presence = isOnline(beacon.id) ? "online" : "offline"
15
+ const enablement = beacon.enabled ? "enabled" : "disabled"
16
+ return `- @${BEACON_MENTION_PREFIX}${handle} → beaconId ${beacon.id} (hostname ${beacon.label}, ${beacon.os}, ${presence}, ${enablement})`
17
+ })
18
+ return [
19
+ "Mentioned beacons:",
20
+ ...lines,
21
+ "Use this beaconId with the mcp__kanna__beacon_* tools.",
22
+ ].join("\n")
23
+ }
24
+
25
+ export function withBeaconMentions(
26
+ prompt: string,
27
+ typedContent: string,
28
+ beacons: readonly BeaconConfig[],
29
+ isOnline: (beaconId: string) => boolean,
30
+ ): string {
31
+ const block = renderBeaconMentionBlock(typedContent, beacons, isOnline)
32
+ return block === null ? prompt : `${prompt}\n\n${block}`
33
+ }
@@ -14,6 +14,7 @@ function fakeSocket() {
14
14
  sent.push(String(payload))
15
15
  return sent.length
16
16
  },
17
+ close(): void {},
17
18
  }
18
19
  }
19
20
 
@@ -17,7 +17,7 @@ import type { ClientState } from "./ws-router"
17
17
  export const PING_INTERVAL_MS = 15_000
18
18
  export const STALE_MS = 45_000
19
19
 
20
- export type BeaconSocket = Pick<ServerWebSocket<ClientState>, "send">
20
+ export type BeaconSocket = Pick<ServerWebSocket<ClientState>, "send" | "close">
21
21
 
22
22
  export interface BeaconRequestSink {
23
23
  onStdout?(chunk: string): void
@@ -37,6 +37,7 @@ export interface BeaconRegistry {
37
37
  }): void
38
38
  disconnect(beaconId: string): void
39
39
  disconnectIfCurrent(beaconId: string, socket: BeaconSocket): void
40
+ revoke(beaconId: string): void
40
41
  heartbeat(beaconId: string): void
41
42
  isOnline(beaconId: string): boolean
42
43
  live(): BeaconLiveState[]
@@ -151,6 +152,13 @@ export function createBeaconRegistry(deps: { now?: () => number } = {}): BeaconR
151
152
  notify()
152
153
  },
153
154
  disconnect,
155
+ revoke(beaconId) {
156
+ const socket = entries.get(beaconId)?.socket ?? null
157
+ entries.delete(beaconId)
158
+ failPending(beaconId, "beacon revoked")
159
+ socket?.close()
160
+ notify()
161
+ },
154
162
  disconnectIfCurrent(beaconId, socket) {
155
163
  if (entries.get(beaconId)?.socket !== socket) return
156
164
  disconnect(beaconId)
@@ -29,6 +29,7 @@ async function createFixture() {
29
29
  os: "windows",
30
30
  })
31
31
  const received: BeaconFrame[] = []
32
+ const socketState = { closed: false }
32
33
  services.registry.connect({
33
34
  beaconId: created.id,
34
35
  beaconVersion: "0.2.0",
@@ -39,9 +40,12 @@ async function createFixture() {
39
40
  received.push(JSON.parse(String(payload)))
40
41
  return 1
41
42
  },
43
+ close() {
44
+ socketState.closed = true
45
+ },
42
46
  },
43
47
  })
44
- return { appSettings, beaconId: created.id, received }
48
+ return { appSettings, beaconId: created.id, received, services, socketState }
45
49
  }
46
50
 
47
51
  test("a scope edited in Kanna Settings is pushed to the connected beacon", async () => {
@@ -56,3 +60,9 @@ test("a settings change that leaves the beacon's scope alone pushes nothing", as
56
60
  await appSettings.writePatch({ analyticsEnabled: false })
57
61
  expect(received).toEqual([])
58
62
  })
63
+
64
+ test("removing a beacon in Kanna Settings closes its live socket and forgets it", async () => {
65
+ const { appSettings, beaconId, services, socketState } = await createFixture()
66
+ await appSettings.writePatch({ customBeacons: { delete: { id: beaconId } } })
67
+ expect({ closed: socketState.closed, live: services.registry.live() }).toEqual({ closed: true, live: [] })
68
+ })
@@ -29,6 +29,10 @@ export function createBeaconServices(deps: { appSettings: BeaconServicesSettings
29
29
  setBeaconTransferMaxBytes(() => deps.appSettings.getSnapshot().uploads.maxFileSizeMb * BYTES_PER_MB)
30
30
  const transferSweepTimer = setInterval(() => getBeaconTransferTickets().sweep(), TRANSFER_SWEEP_INTERVAL_MS)
31
31
  const stopScopePush = deps.appSettings.onChange((snapshot) => {
32
+ const configuredIds = new Set(snapshot.customBeacons.map((beacon) => beacon.id))
33
+ for (const live of registry.live()) {
34
+ if (!configuredIds.has(live.beaconId)) registry.revoke(live.beaconId)
35
+ }
32
36
  for (const beacon of snapshot.customBeacons) registry.pushScope(beacon.id, beacon.scope)
33
37
  })
34
38
  return {
@@ -1,6 +1,12 @@
1
1
  import { describe, expect, test } from "bun:test"
2
2
  import { DEFAULT_BEACON_SCOPE } from "../shared/beacon-scope"
3
- import { normalizeBeacons, validateBeaconLabel } from "./beacon-settings"
3
+ import type { BeaconConfig } from "../shared/beacon-config"
4
+ import {
5
+ BeaconValidationException,
6
+ normalizeBeacons,
7
+ updateBeacon,
8
+ validateBeaconLabel,
9
+ } from "./beacon-settings"
4
10
 
5
11
  const valid = {
6
12
  id: "b1",
@@ -72,3 +78,70 @@ describe("validateBeaconLabel", () => {
72
78
  expect(validateBeaconLabel("desktop", others)).toBeNull()
73
79
  })
74
80
  })
81
+
82
+ describe("beacon alias", () => {
83
+ const stamp = "2026-10-13T00:00:00.000Z"
84
+ const config = (id: string, label: string, alias?: string): BeaconConfig => ({
85
+ id,
86
+ label,
87
+ ...(alias === undefined ? {} : { alias }),
88
+ publicKey: "pk",
89
+ os: "linux",
90
+ scope: DEFAULT_BEACON_SCOPE,
91
+ enabled: true,
92
+ createdAt: stamp,
93
+ updatedAt: stamp,
94
+ })
95
+ const first = config("b1", "laptop", "office-mac")
96
+ const second = config("b2", "desktop")
97
+ const current = [first, second]
98
+
99
+ function rejectionCode(run: () => BeaconConfig): string | null {
100
+ try {
101
+ run()
102
+ } catch (error) {
103
+ if (!(error instanceof BeaconValidationException)) throw error
104
+ return error.validationError.code
105
+ }
106
+ return null
107
+ }
108
+
109
+ test("an alias another beacon owns is rejected as INVALID_ALIAS", () => {
110
+ expect(rejectionCode(() => updateBeacon(second, { alias: "office-mac" }, current))).toBe("INVALID_ALIAS")
111
+ })
112
+
113
+ test("an alias with uppercase or spaces is rejected as INVALID_ALIAS", () => {
114
+ expect(rejectionCode(() => updateBeacon(second, { alias: "Office Mac" }, current))).toBe("INVALID_ALIAS")
115
+ })
116
+
117
+ test("a beacon may keep its own alias while editing something else", () => {
118
+ expect(updateBeacon(first, { alias: "office-mac", enabled: false }, current)).toMatchObject({
119
+ alias: "office-mac",
120
+ enabled: false,
121
+ })
122
+ })
123
+
124
+ test("a null alias patch clears the alias", () => {
125
+ expect(updateBeacon(first, { alias: null }, current).alias).toBeUndefined()
126
+ })
127
+
128
+ test("an update that does not mention the alias leaves it alone", () => {
129
+ expect(updateBeacon(first, { enabled: false }, current).alias).toBe("office-mac")
130
+ })
131
+
132
+ test("loading drops an invalid alias with a warning but keeps the beacon", () => {
133
+ const warnings: string[] = []
134
+ const [kept] = normalizeBeacons([{ ...valid, alias: "Not Valid" }], warnings)
135
+ expect(kept?.id).toBe("b1")
136
+ expect(kept?.alias).toBeUndefined()
137
+ expect(warnings).toHaveLength(1)
138
+ })
139
+
140
+ test("loading keeps the first of two beacons claiming the same alias", () => {
141
+ const loaded = normalizeBeacons(
142
+ [{ ...valid, alias: "shared" }, { ...valid, id: "b2", label: "other", alias: "shared" }],
143
+ [],
144
+ )
145
+ expect(loaded.map((beacon) => [beacon.id, beacon.alias])).toEqual([["b1", "shared"], ["b2", undefined]])
146
+ })
147
+ })