@baique/pi-web-sky 0.1.35 → 0.1.36

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 (294) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +16 -16
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/react-loadable-manifest.json +1 -1
  5. package/.next/required-server-files.js +1 -1
  6. package/.next/required-server-files.json +1 -1
  7. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  13. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  14. package/.next/server/app/_not-found.html +1 -1
  15. package/.next/server/app/_not-found.rsc +3 -3
  16. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  17. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  18. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  19. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  20. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  21. package/.next/server/app/api/agent/[id]/route.js +1 -1
  22. package/.next/server/app/api/app-update/route.js +1 -1
  23. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  24. package/.next/server/app/api/cwd/validate/route.js +1 -1
  25. package/.next/server/app/api/default-cwd/route.js +1 -1
  26. package/.next/server/app/api/file-index/route.js +1 -1
  27. package/.next/server/app/api/files/[...path]/route.js +1 -1
  28. package/.next/server/app/api/mcp/route.js +1 -1
  29. package/.next/server/app/api/models/route.js +1 -1
  30. package/.next/server/app/api/plugins/route.js +1 -1
  31. package/.next/server/app/api/project-trust/route.js +1 -1
  32. package/.next/server/app/api/search/route.js +1 -1
  33. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  34. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  35. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  36. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  37. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  38. package/.next/server/app/api/sessions/[id]/todos/route.js +1 -1
  39. package/.next/server/app/api/sessions/route.js +1 -1
  40. package/.next/server/app/api/skills/check/route.js +1 -1
  41. package/.next/server/app/api/skills/check/route.js.nft.json +1 -1
  42. package/.next/server/app/api/skills/install/route.js +1 -1
  43. package/.next/server/app/api/skills/route.js +2 -31
  44. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  45. package/.next/server/app/api/skills/update/route.js +1 -1
  46. package/.next/server/app/api/skills/update/route.js.nft.json +1 -1
  47. package/.next/server/app/api/worktrees/route.js +1 -1
  48. package/.next/server/app/index.html +1 -1
  49. package/.next/server/app/index.rsc +5 -5
  50. package/.next/server/app/index.segments/__PAGE__.segment.rsc +5 -5
  51. package/.next/server/app/index.segments/_full.segment.rsc +5 -5
  52. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  53. package/.next/server/app/page.js +2 -2
  54. package/.next/server/app/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app-paths-manifest.json +16 -16
  56. package/.next/server/chunks/2404.js +1 -1
  57. package/.next/server/chunks/3500.js +30 -0
  58. package/.next/server/chunks/4226.js +2 -2
  59. package/.next/server/chunks/542.js +10 -5
  60. package/.next/server/chunks/5794.js +1 -1
  61. package/.next/server/chunks/6429.js +1 -1
  62. package/.next/server/chunks/898.js +1 -1
  63. package/.next/server/middleware-build-manifest.js +1 -1
  64. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  65. package/.next/server/pages/404.html +1 -1
  66. package/.next/server/pages/500.html +1 -1
  67. package/.next/static/chunks/5315.7e72d26a3ad3bd9a.js +4 -0
  68. package/.next/static/chunks/app/{layout-1d9a7a44fbc92d2e.js → layout-ebbc0d287267b07b.js} +1 -1
  69. package/.next/static/chunks/app/{page-6d6779a81a0a7639.js → page-e568623a44c67606.js} +2 -2
  70. package/.next/static/chunks/{webpack-fa4f40085b1ec1ac.js → webpack-2e4e348867a555cd.js} +1 -1
  71. package/.next/static/css/422c7dc0faa04d89.css +1 -0
  72. package/.next/trace +8 -9
  73. package/.next/trace-build +1 -1
  74. package/bin/pi-web-sky.js +15 -20
  75. package/lib/agent-client.test.mjs +64 -0
  76. package/lib/agent-client.ts +53 -0
  77. package/lib/agent-event-connection.test.mjs +193 -0
  78. package/lib/agent-event-connection.ts +202 -0
  79. package/lib/agent-event-stream.test.mjs +155 -0
  80. package/lib/agent-event-stream.ts +132 -0
  81. package/lib/agent-event-wire.test.mjs +278 -0
  82. package/lib/agent-event-wire.ts +107 -0
  83. package/lib/agent-phase.ts +24 -0
  84. package/lib/allowed-roots.ts +31 -0
  85. package/lib/ansi.test.mjs +52 -0
  86. package/lib/ansi.ts +211 -0
  87. package/lib/api-types.ts +139 -0
  88. package/lib/app-update.test.mjs +27 -0
  89. package/lib/app-update.ts +28 -0
  90. package/lib/atomic-file.test.mjs +37 -0
  91. package/lib/atomic-file.ts +34 -0
  92. package/lib/audit-session.ts +235 -0
  93. package/lib/bash-output.test.mjs +63 -0
  94. package/lib/bash-output.ts +53 -0
  95. package/lib/bg-image.ts +129 -0
  96. package/lib/board-events.ts +83 -0
  97. package/lib/board-purge.test.mjs +66 -0
  98. package/lib/board-purge.ts +65 -0
  99. package/lib/board-search.test.mjs +110 -0
  100. package/lib/board-search.ts +63 -0
  101. package/lib/board-store.test.mjs +542 -0
  102. package/lib/board-store.ts +794 -0
  103. package/lib/board-types.ts +96 -0
  104. package/lib/board-utils.ts +17 -0
  105. package/lib/bounded-form-data.test.mjs +54 -0
  106. package/lib/bounded-form-data.ts +49 -0
  107. package/lib/browser-notifications.test.mjs +167 -0
  108. package/lib/browser-notifications.ts +104 -0
  109. package/lib/chat-lazy-load.test.mjs +140 -0
  110. package/lib/chat-lazy-load.ts +64 -0
  111. package/lib/clipboard-paths.test.mjs +140 -0
  112. package/lib/clipboard-paths.ts +192 -0
  113. package/lib/clipboard.ts +18 -0
  114. package/lib/compaction-summary.test.mjs +44 -0
  115. package/lib/compaction-summary.ts +34 -0
  116. package/lib/custom-ui-terminal.test.mjs +32 -0
  117. package/lib/custom-ui-terminal.ts +27 -0
  118. package/lib/deepseek-pricing.test.mjs +120 -0
  119. package/lib/deepseek-pricing.ts +71 -0
  120. package/lib/directory-browser.test.mjs +60 -0
  121. package/lib/directory-browser.ts +83 -0
  122. package/lib/draft-stash.test.mjs +91 -0
  123. package/lib/draft-stash.ts +102 -0
  124. package/lib/draft-store.ts +105 -0
  125. package/lib/dropdown-direction.ts +27 -0
  126. package/lib/extension-command.test.mjs +63 -0
  127. package/lib/extension-command.ts +81 -0
  128. package/lib/file-access.test.mjs +31 -0
  129. package/lib/file-access.ts +59 -0
  130. package/lib/file-dirent.test.mjs +56 -0
  131. package/lib/file-dirent.ts +17 -0
  132. package/lib/file-explorer-state.test.mjs +63 -0
  133. package/lib/file-explorer-state.ts +36 -0
  134. package/lib/file-fuzzy.test.mjs +29 -0
  135. package/lib/file-fuzzy.ts +189 -0
  136. package/lib/file-links.test.mjs +92 -0
  137. package/lib/file-links.ts +148 -0
  138. package/lib/file-paths.ts +43 -0
  139. package/lib/file-types.test.mjs +34 -0
  140. package/lib/file-types.ts +73 -0
  141. package/lib/file-upload.test.mjs +70 -0
  142. package/lib/file-upload.ts +59 -0
  143. package/lib/file-viewer-state.test.mjs +20 -0
  144. package/lib/file-viewer-state.ts +15 -0
  145. package/lib/frontmatter.test.mjs +55 -0
  146. package/lib/frontmatter.ts +87 -0
  147. package/lib/git-changes.test.mjs +52 -0
  148. package/lib/git-changes.ts +232 -0
  149. package/lib/git-status.ts +47 -0
  150. package/lib/git-types.ts +29 -0
  151. package/lib/http-dispatcher.test.mjs +83 -0
  152. package/lib/http-dispatcher.ts +86 -0
  153. package/lib/i18n/format.test.mjs +19 -0
  154. package/lib/i18n/format.ts +60 -0
  155. package/lib/i18n/messages/en.ts +662 -0
  156. package/lib/i18n/messages/zh-CN.ts +661 -0
  157. package/lib/i18n/registry.test.mjs +32 -0
  158. package/lib/i18n/registry.ts +43 -0
  159. package/lib/i18n/types.ts +15 -0
  160. package/lib/image-attachments.test.mjs +27 -0
  161. package/lib/image-attachments.ts +56 -0
  162. package/lib/initial-navigation.test.mjs +65 -0
  163. package/lib/initial-navigation.ts +15 -0
  164. package/lib/markdown.test.mjs +104 -0
  165. package/lib/markdown.ts +347 -0
  166. package/lib/message-display.test.mjs +130 -0
  167. package/lib/message-display.ts +47 -0
  168. package/lib/model-catalog.test.mjs +327 -0
  169. package/lib/model-catalog.ts +414 -0
  170. package/lib/model-discovery-auth.ts +58 -0
  171. package/lib/model-discovery.test.mjs +50 -0
  172. package/lib/model-discovery.ts +75 -0
  173. package/lib/model-id-preference.ts +46 -0
  174. package/lib/model-scope.test.mjs +193 -0
  175. package/lib/model-scope.ts +198 -0
  176. package/lib/models-cache.test.mjs +122 -0
  177. package/lib/models-cache.ts +90 -0
  178. package/lib/models-config-store.test.mjs +200 -0
  179. package/lib/models-config-store.ts +84 -0
  180. package/lib/next-config-esm.test.mjs +14 -0
  181. package/lib/next-config.test.mjs +13 -0
  182. package/lib/node-version.test.mjs +33 -0
  183. package/lib/normalize.test.mjs +54 -0
  184. package/lib/normalize.ts +63 -0
  185. package/lib/npx.ts +62 -0
  186. package/lib/panel-layout.test.mjs +56 -0
  187. package/lib/panel-layout.ts +52 -0
  188. package/lib/patch.test.mjs +110 -0
  189. package/lib/patch.ts +134 -0
  190. package/lib/path-security.ts +42 -0
  191. package/lib/paths.test.mjs +58 -0
  192. package/lib/paths.ts +71 -0
  193. package/lib/pi-types.ts +183 -0
  194. package/lib/pi-web-options.test.mjs +63 -0
  195. package/lib/process-lifecycle.test.mjs +83 -0
  196. package/lib/project-command-env.test.mjs +298 -0
  197. package/lib/project-command-env.ts +129 -0
  198. package/lib/project-groups.test.mjs +60 -0
  199. package/lib/project-groups.ts +53 -0
  200. package/lib/project-identity.test.mjs +37 -0
  201. package/lib/project-identity.ts +26 -0
  202. package/lib/project-tree.test.mjs +115 -0
  203. package/lib/project-tree.ts +176 -0
  204. package/lib/project-trust.test.mjs +117 -0
  205. package/lib/project-trust.ts +48 -0
  206. package/lib/prompt-recovery.test.mjs +33 -0
  207. package/lib/prompt-recovery.ts +47 -0
  208. package/lib/provider-api-key-route.test.mjs +12 -0
  209. package/lib/provider-credential-store.test.mjs +126 -0
  210. package/lib/provider-credential-store.ts +114 -0
  211. package/lib/provider-listing-runtime.ts +37 -0
  212. package/lib/provider-listing.test.mjs +114 -0
  213. package/lib/provider-listing.ts +118 -0
  214. package/lib/provider-services.ts +64 -0
  215. package/lib/request-security.test.mjs +256 -0
  216. package/lib/request-security.ts +136 -0
  217. package/lib/rpc-manager-shutdown.test.mjs +372 -0
  218. package/lib/rpc-manager-widgets.test.mjs +342 -0
  219. package/lib/rpc-manager.test.mjs +139 -0
  220. package/lib/rpc-manager.ts +1703 -0
  221. package/lib/rpc-session-info.test.mjs +93 -0
  222. package/lib/session-delete.test.mjs +53 -0
  223. package/lib/session-delete.ts +86 -0
  224. package/lib/session-file-references-core.ts +82 -0
  225. package/lib/session-file-references.test.mjs +91 -0
  226. package/lib/session-file-references.ts +29 -0
  227. package/lib/session-path.test.mjs +24 -0
  228. package/lib/session-path.ts +11 -0
  229. package/lib/session-reader.pagination.test.mjs +115 -0
  230. package/lib/session-reader.test.mjs +446 -0
  231. package/lib/session-reader.ts +548 -0
  232. package/lib/session-resolve.test.mjs +65 -0
  233. package/lib/session-row-context-menu.test.mjs +46 -0
  234. package/lib/session-row-context-menu.ts +29 -0
  235. package/lib/session-scanner.test.mjs +151 -0
  236. package/lib/session-scanner.ts +238 -0
  237. package/lib/session-search.test.mjs +173 -0
  238. package/lib/session-search.ts +284 -0
  239. package/lib/session-stats.ts +26 -0
  240. package/lib/session-timing.test.mjs +107 -0
  241. package/lib/session-timing.ts +45 -0
  242. package/lib/session-title.test.mjs +284 -0
  243. package/lib/session-title.ts +255 -0
  244. package/lib/skill-frontmatter.test.mjs +75 -0
  245. package/lib/skill-frontmatter.ts +40 -0
  246. package/lib/skill-lock.test.mjs +182 -0
  247. package/lib/skill-lock.ts +146 -0
  248. package/lib/skill-updates.test.mjs +182 -0
  249. package/lib/skill-updates.ts +263 -0
  250. package/lib/skills-service.ts +16 -0
  251. package/lib/slash-display.test.mjs +122 -0
  252. package/lib/slash-display.ts +30 -0
  253. package/lib/sqlite-db.test.mjs +140 -0
  254. package/lib/sqlite-db.ts +205 -0
  255. package/lib/startup-preferences.test.mjs +130 -0
  256. package/lib/startup-preferences.ts +65 -0
  257. package/lib/streaming-message.test.mjs +212 -0
  258. package/lib/streaming-message.ts +151 -0
  259. package/lib/subagent-widget.test.mjs +87 -0
  260. package/lib/subagent-widget.ts +109 -0
  261. package/lib/sync-room-server.mjs +137 -0
  262. package/lib/task-card-store.test.mjs +309 -0
  263. package/lib/task-card-store.ts +559 -0
  264. package/lib/task-scheduler.ts +498 -0
  265. package/lib/task-store.test.mjs +216 -0
  266. package/lib/task-store.ts +271 -0
  267. package/lib/terminal-input.test.mjs +46 -0
  268. package/lib/terminal-input.ts +63 -0
  269. package/lib/terminal-manager.test.mjs +71 -0
  270. package/lib/terminal-manager.ts +245 -0
  271. package/lib/tool-execution-progress.test.mjs +32 -0
  272. package/lib/tool-execution-progress.ts +29 -0
  273. package/lib/tool-names.ts +25 -0
  274. package/lib/tool-preset-preference.test.mjs +72 -0
  275. package/lib/tool-preset-preference.ts +41 -0
  276. package/lib/tool-presets.test.mjs +56 -0
  277. package/lib/tool-presets.ts +42 -0
  278. package/lib/turn-written-files.test.mjs +137 -0
  279. package/lib/turn-written-files.ts +60 -0
  280. package/lib/types.ts +349 -0
  281. package/lib/wallpaper-settings.ts +191 -0
  282. package/lib/web-auth.test.mjs +50 -0
  283. package/lib/web-auth.ts +45 -0
  284. package/lib/workspace-memory.test.mjs +129 -0
  285. package/lib/workspace-memory.ts +98 -0
  286. package/lib/worktree.test.mjs +50 -0
  287. package/lib/worktree.ts +250 -0
  288. package/package.json +3 -1
  289. package/server.mjs +34 -0
  290. package/.next/server/chunks/7513.js +0 -30
  291. package/.next/static/chunks/5315.03de3c6abd8b283e.js +0 -4
  292. package/.next/static/css/cf25164cb7c04d95.css +0 -1
  293. /package/.next/static/{Ud6Y2ONkGuPVFbo1xZQvk → EoBw3VYlygpr1EqlVOa5b}/_buildManifest.js +0 -0
  294. /package/.next/static/{Ud6Y2ONkGuPVFbo1xZQvk → EoBw3VYlygpr1EqlVOa5b}/_ssgManifest.js +0 -0
@@ -1,4 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5315],{15315:(e,t,r)=>{r.r(t),r.d(t,{SessionCanvas:()=>g});var n=r(95155),o=r(12115),i=r(37206),a=r(39247),s=r(96793),l=r(64536),d=r(71309),c=r(34229),u=r(26479),p=r(24456);function h({editor:e,inputRef:t}){let{t:r}=(0,a.s)(),{setHighlight:i}=(0,d.kz)(),[s,l]=(0,o.useState)(""),[c,u]=(0,o.useState)(!1),[p,x]=(0,o.useState)(-1),g=(0,o.useRef)(null),f=t??g,b=(0,o.useMemo)(()=>{var t;let r;return e?(t=function(e){let t=[];for(let r of e.getCurrentPageShapes())if("session-card"===r.type){let e=String(r.props.title??"").trim();e&&t.push({shapeId:r.id,kind:"session-card",text:e})}else if("sticky-note"===r.type){let e=String(r.props.text??"").trim();e&&t.push({shapeId:r.id,kind:"sticky-note",text:e})}return t}(e),0===(r=s.trim().toLowerCase().split(/\s+/).filter(Boolean)).length?[]:t.filter(e=>{let t=e.text.toLowerCase();return r.every(e=>t.includes(e))}).map(e=>({item:e,snippet:function(e,t,r=44){let n=t.trim().toLowerCase(),o=e.toLowerCase().indexOf(n);if(o<0)return e.length>r?`${e.slice(0,r)}…`:e;let i=Math.max(0,o-Math.floor((r-n.length)/2)),a=Math.min(e.length,i+r),s=i>0?"…":"",l=a<e.length?"…":"";return`${s}${e.slice(i,a)}${l}`}(e.text,r[0])}))):[]},[e,s]),v=(0,o.useCallback)(t=>{if(!e)return;let r=b[t];if(!r)return;let n=e.getShape(r.item.shapeId);if(!n)return;let o=e.getShapePageBounds(n.id);o&&(e.centerOnPoint(o.center,{animation:{duration:300}}),e.select(n.id),i(n.id),x(t))},[e,b,i]),y=(0,o.useCallback)(()=>{0!==b.length&&v((p+1)%b.length)},[b,p,v]),m=(0,o.useCallback)(()=>{0!==b.length&&v((p-1+b.length)%b.length)},[b,p,v]),w=(0,o.useCallback)(e=>{"Enter"===e.key||"ArrowDown"===e.key?(e.preventDefault(),y()):"ArrowUp"===e.key?(e.preventDefault(),m()):"Escape"===e.key&&(e.preventDefault(),c?u(!1):(l(""),x(-1),f.current?.blur()))},[c,y,m,f]),k=c&&s.trim().length>0;return(0,n.jsxs)("div",{style:{position:"relative",width:280},"data-testid":"board-search",children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,height:34,padding:"0 8px 0 10px",borderRadius:999,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)"},children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{color:"var(--text-dim)",flexShrink:0},children:[(0,n.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,n.jsx)("path",{d:"m21 21-4.35-4.35"})]}),(0,n.jsx)("input",{ref:f,value:s,onChange:e=>{l(e.target.value),x(-1),u(!0)},onKeyDown:w,onFocus:()=>{s.trim()&&u(!0)},onBlur:()=>u(!1),onPointerDown:e=>e.stopPropagation(),placeholder:r("boards.searchPlaceholder"),spellCheck:!1,"aria-label":r("boards.searchPlaceholder"),style:{flex:1,minWidth:0,border:"none",outline:"none",background:"transparent",color:"var(--text)",fontSize:12.5,fontFamily:"inherit"}}),s&&(0,n.jsx)("button",{type:"button",title:r("common.close"),onPointerDown:e=>e.stopPropagation(),onClick:()=>{l(""),x(-1),f.current?.focus()},style:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",width:18,height:18,padding:0,border:"none",borderRadius:"50%",background:"color-mix(in srgb, var(--border) 35%, transparent)",color:"var(--text-muted)",cursor:"pointer",fontSize:11,lineHeight:1},children:"\xd7"})]}),k&&(0,n.jsx)("div",{"data-testid":"board-search-dropdown",onPointerDown:e=>e.stopPropagation(),style:{position:"absolute",top:40,left:0,right:0,zIndex:60,maxHeight:320,overflowY:"auto",borderRadius:12,padding:4,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 4px 18px -6px rgba(0,0,0,0.28)"},children:0===b.length?(0,n.jsx)("div",{style:{padding:"8px 12px",fontSize:12,color:"var(--text-muted)"},children:r("boards.searchNoResults")}):b.map((e,t)=>{let o=t===p;return(0,n.jsxs)("button",{type:"button",onMouseDown:e=>e.preventDefault(),onClick:()=>v(t),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 10px",border:"none",borderRadius:8,background:o?"color-mix(in srgb, var(--accent) 14%, transparent)":"transparent",color:"var(--text)",fontSize:12.5,textAlign:"left",cursor:"pointer"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0,display:"inline-flex",color:o?"var(--accent)":"var(--text-dim)"},children:"session-card"===e.item.kind?(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})}):(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,n.jsx)("path",{d:"M15.5 3H5a2 2 0 0 0-2 2v14c0 1.1.9 2 2 2h14a2 2 0 0 0 2-2V8.5L15.5 3z"}),(0,n.jsx)("path",{d:"M15 3v6h6"})]})}),(0,n.jsx)("span",{style:{minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.snippet}),(0,n.jsx)("span",{style:{flexShrink:0,fontSize:10,color:"var(--text-dim)"},children:"session-card"===e.item.kind?r("boards.searchSession"):r("boards.searchNote")})]},e.item.shapeId)})})]})}let x=(0,i.default)(()=>Promise.all([r.e(6009),r.e(333)]).then(r.bind(r,20333)).then(e=>e.CanvasStage),{loadableGenerated:{webpack:()=>[20333]},ssr:!1,loading:()=>(0,n.jsx)("div",{style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(8, 14, 30, 0.85)",color:"rgba(255, 255, 255, 0.85)",fontSize:13},children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{width:14,height:14,borderRadius:"50%",border:"2px solid rgba(255, 255, 255, 0.18)",borderTopColor:"rgba(255, 255, 255, 0.9)",animation:"spin 0.8s linear infinite"}}),"正在加载画布…"]})})});function g({boardId:e,taskId:t,newSessionCwd:r,onRunningSessionIdsChange:i,wallSettings:b,updateWallSettings:v}){let{t:y}=(0,a.s)(),{isDark:m}=(0,s.D)(),w=(0,l.C6)({boardId:e,taskId:t,newSessionCwd:r}),k=!!(w.board?.taskId??t),j=(0,o.useRef)(null);(0,o.useEffect)(()=>{let e=e=>{if(!(e.ctrlKey||e.metaKey)||"f"!==e.key.toLowerCase())return;let t=document.activeElement;if(t&&t!==j.current){let e=t.tagName;if("INPUT"===e||"TEXTAREA"===e||t.isContentEditable)return}e.preventDefault(),j.current?.focus(),j.current?.select()};return window.addEventListener("keydown",e,!0),()=>window.removeEventListener("keydown",e,!0)},[]);let[S,C]=(0,o.useState)(!1),[R,I]=(0,o.useState)(null);(0,o.useEffect)(()=>{let e=!1,t=async()=>{try{let t=await fetch("/api/task-scheduler/status",{cache:"no-store"});if(!t.ok)return;let r=await t.json();e||I(r.status)}catch{}};t();let r=setInterval(t,5e3);return()=>{e=!0,clearInterval(r)}},[]);let[E,L]=(0,o.useState)(!1),T=(0,o.useCallback)(async()=>{if(!E){L(!0);try{w.loadSessionSummaries(),await w.reloadCanvas()}finally{setTimeout(()=>L(!1),800)}}},[w,E]);return(0,o.useEffect)(()=>{i?.(new Set(w.running?.runningSessionIds??[]))},[w.running,i]),(0,n.jsx)("div",{"data-glass-scope":"board",style:{height:"100%",display:"flex",flexDirection:"column",overflow:"hidden",position:"relative"},children:(0,n.jsx)(c.I,{value:"board",children:(0,n.jsx)(u.Nc.Provider,{value:{boardId:w.board?.id??null,defaultCwd:r??null},children:(0,n.jsxs)(d.eR,{children:[!w.loading&&w.board?.name&&(0,n.jsxs)("div",{style:{position:"absolute",top:12,left:12,zIndex:40,display:"flex",alignItems:"center",gap:6,maxWidth:300,height:34,padding:"0 8px 0 12px",borderRadius:999,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)",color:"var(--text)"},title:w.board.name,children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{flexShrink:0,opacity:.7},children:[(0,n.jsx)("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1.5"}),(0,n.jsx)("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1.5"})]}),(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:600,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:w.board.name}),(0,n.jsx)("button",{type:"button",onClick:()=>void T(),title:y("boards.reloadCanvas"),"aria-label":y("boards.reloadCanvas"),style:{display:"flex",alignItems:"center",justifyContent:"center",width:22,height:22,padding:0,flexShrink:0,border:"none",background:"transparent",color:"var(--text-muted)",cursor:E?"default":"pointer",borderRadius:999,transition:"background 0.12s, color 0.12s"},children:(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",style:{animation:E?"spin 0.8s linear infinite":void 0},children:[(0,n.jsx)("path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8"}),(0,n.jsx)("path",{d:"M21 3v5h-5"})]})})]}),!w.loading&&R&&R.running.length>0&&(0,n.jsxs)("div",{title:`调度器正在执行 ${R.running.length} 个任务`,style:{position:"absolute",top:52,left:12,zIndex:40,display:"flex",alignItems:"center",gap:6,maxWidth:260,padding:"3px 10px",borderRadius:999,background:"color-mix(in srgb, var(--board-card-glass) 85%, transparent)",border:"1px solid color-mix(in srgb, var(--border) 45%, transparent)",color:"var(--text-muted)",fontSize:10.5,lineHeight:1.4,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0,width:7,height:7,borderRadius:"50%",background:"#10b981",boxShadow:"0 0 6px 1px rgba(16,185,129,0.6)",animation:"pulse 1.6s ease-in-out infinite"}}),(0,n.jsxs)("span",{style:{overflow:"hidden",textOverflow:"ellipsis"},children:["正在运行 ",R.running.map(e=>`#${e.number} ${e.name}`).join("、")]})]}),!w.loading&&(0,n.jsx)("div",{style:{position:"absolute",top:12,left:"50%",transform:"translateX(-50%)",zIndex:40},children:(0,n.jsx)(h,{editor:w.editor,inputRef:j})}),(0,n.jsxs)("div",{style:{position:"absolute",top:10,right:10,zIndex:30,display:"flex",flexDirection:"column",alignItems:"flex-end",gap:6},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:4,padding:4,borderRadius:10,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)"},children:[(0,n.jsx)("button",{type:"button",onClick:()=>w.addNewSessionCard(),title:y("boards.newSession"),style:{...f,color:"var(--accent)"},children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),(0,n.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}),(0,n.jsx)("button",{type:"button",disabled:!0,title:y("boards.autoLayoutDesc"),"aria-label":y("boards.autoLayout"),style:{...f,color:"var(--text-dim)",opacity:.55,cursor:"not-allowed"},children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"3",y:"3",width:"7",height:"7",rx:"1"}),(0,n.jsx)("rect",{x:"14",y:"3",width:"7",height:"7",rx:"1"}),(0,n.jsx)("rect",{x:"3",y:"14",width:"7",height:"7",rx:"1"}),(0,n.jsx)("rect",{x:"14",y:"14",width:"7",height:"7",rx:"1"})]})}),(0,n.jsx)("button",{type:"button",onClick:()=>C(e=>!e),title:y("boards.scrimTitle"),"aria-expanded":S,style:{...f,color:S?"var(--accent)":"var(--text-muted)",background:S?"color-mix(in srgb, var(--accent) 12%, transparent)":"transparent"},children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M12 3v2"}),(0,n.jsx)("path",{d:"M12 19v2"}),(0,n.jsx)("path",{d:"M5 7l1.5 1.5"}),(0,n.jsx)("path",{d:"M17.5 15.5L19 17"}),(0,n.jsx)("path",{d:"M3 12h2"}),(0,n.jsx)("path",{d:"M19 12h2"}),(0,n.jsx)("path",{d:"M5 17l1.5-1.5"}),(0,n.jsx)("path",{d:"M17.5 8.5L19 7"}),(0,n.jsx)("circle",{cx:"12",cy:"12",r:"3"})]})}),(0,n.jsx)("button",{type:"button",onClick:()=>{(0,p.l)({message:k?y("boards.clearTaskConfirm"):y("boards.clearConfirm"),confirmText:y("boards.clear")}).then(e=>{e&&w.clearBoard()})},title:k?y("boards.clearTaskBoardDesc"):y("boards.clearDesc"),style:f,children:(0,n.jsxs)("svg",{width:"15",height:"15",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M18 6 6 18"}),(0,n.jsx)("path",{d:"m6 6 12 12"})]})})]}),S&&(0,n.jsx)("div",{style:{display:"flex",flexDirection:"column",gap:6,padding:"8px 10px",borderRadius:10,background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 2px 12px -6px rgba(0,0,0,0.18)",color:"var(--text)",fontSize:12.5,whiteSpace:"nowrap"},children:(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{style:{width:14,flexShrink:0,textAlign:"center",fontSize:12},children:"❄"}),(0,n.jsx)("span",{style:{flexShrink:0},children:y("boards.scrimBlur")}),(0,n.jsx)("input",{type:"range",min:0,max:30,value:b.scrimBlur,onChange:e=>v({scrimBlur:Number(e.target.value)}),style:{flex:1,minWidth:120,accentColor:"var(--accent)",cursor:"pointer"},"aria-label":y("boards.scrimBlur")}),(0,n.jsxs)("span",{style:{width:30,flexShrink:0,textAlign:"right",fontSize:11,color:"var(--text)"},children:[b.scrimBlur,"px"]})]})})]}),(0,n.jsx)(x,{board:w,isDark:m})]})})})})}let f={display:"flex",alignItems:"center",justifyContent:"center",width:32,height:32,padding:0,border:"none",background:"transparent",color:"var(--text-muted)",cursor:"pointer",borderRadius:7,transition:"background 0.12s, color 0.12s"}},24456:(e,t,r)=>{r.d(t,{l:()=>c});var n=r(95155),o=r(12115),i=r(12669);let a=null,s=null,l=null;function d(e){a?.(e),a=null,l?.unmount(),s?.remove(),l=null,s=null}function c(e){return new Promise(t=>{a&&d(!1),a=t;let r=s;r||(r=document.createElement("div"),document.body.appendChild(r),s=r);let o=l;o||(l=o=(0,i.createRoot)(r)),o.render((0,n.jsx)(u,{opts:e,onClose:d}))})}function u({opts:e,onClose:t}){let[r]=(0,o.useState)(!1);return(0,n.jsx)("div",{role:"alertdialog","aria-modal":"true",onPointerDown:()=>t(!1),style:{position:"fixed",inset:0,zIndex:2e3,display:"flex",alignItems:"center",justifyContent:"center",background:"rgba(0,0,0,0.35)"},children:(0,n.jsxs)("div",{onPointerDown:e=>e.stopPropagation(),style:{width:360,maxWidth:"calc(100vw - 48px)",borderRadius:"var(--bubble-radius, 14px)",background:"var(--board-card-glass)",backdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",WebkitBackdropFilter:"blur(var(--board-blur)) saturate(var(--glass-saturate))",border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)",boxShadow:"0 10px 40px -12px rgba(0,0,0,0.4)",color:"var(--text)",padding:"16px 18px",display:"flex",flexDirection:"column",gap:10},children:[e.title&&(0,n.jsx)("div",{style:{fontSize:14,fontWeight:600},children:e.title}),(0,n.jsx)("div",{style:{fontSize:12.5,lineHeight:1.6,color:"var(--text-muted)",whiteSpace:"pre-wrap"},children:e.message}),(0,n.jsxs)("div",{style:{display:"flex",justifyContent:"flex-end",gap:8,marginTop:6},children:[(0,n.jsx)("button",{type:"button",onClick:()=>t(!1),style:{border:"none",background:"color-mix(in srgb, var(--border) 30%, transparent)",color:"var(--text-muted)",borderRadius:6,padding:"5px 14px",fontSize:12,cursor:"pointer"},children:e.cancelText??"取消"}),(0,n.jsx)("button",{type:"button",disabled:r,onClick:()=>t(!0),style:{border:"none",background:!1===e.danger?"var(--accent)":"color-mix(in srgb, #ef4444 85%, transparent)",color:"#fff",borderRadius:6,padding:"5px 14px",fontSize:12,fontWeight:600,cursor:"pointer"},children:e.confirmText??"删除"})]})]})})}},26479:(e,t,r)=>{r.d(t,{Nc:()=>g,o_:()=>v});var n=r(95155),o=r(12115),i=r(23312),a=r(15934);function s(e,t){return(e??[]).filter(e=>e.kind===t).map(e=>e.targetCardId)}var l=r(20985);function d({value:e,options:t,onChange:r,width:i="100%"}){let[a,s]=(0,o.useState)(!1),[c,u]=(0,o.useState)(!1),p=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!a)return;let e=e=>{p.current&&!p.current.contains(e.target)&&s(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[a]);let h=t.find(t=>t.value===e);return(0,n.jsxs)("div",{ref:p,style:{position:"relative",width:i},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>s(e=>!e),onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),style:{width:"100%",height:28,boxSizing:"border-box",display:"flex",alignItems:"center",gap:6,padding:"0 8px",background:a?"var(--side-active)":c?"var(--side-hover)":"transparent",border:"1px solid var(--border)",borderRadius:5,cursor:"pointer",fontSize:11,color:"var(--text)",textAlign:"left",transition:"background 0.12s"},children:[(0,n.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:h?.label??""}),(0,n.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,color:"var(--text-dim)"},children:(0,n.jsx)("polyline",{points:"2 3.5 5 6.5 8 3.5"})})]}),a&&(0,n.jsx)(l.f,{open:!0,style:{position:"absolute",top:"calc(100% + 4px)",left:0,right:0,zIndex:120,minWidth:120,maxHeight:200,overflowY:"auto",background:"var(--popover-glass)",border:"1px solid var(--border)",borderRadius:6,boxShadow:"0 6px 20px -6px rgba(0,0,0,0.35)",padding:4},children:t.map(t=>(0,n.jsx)("button",{type:"button",onClick:()=>{r(t.value),s(!1)},style:{display:"block",width:"100%",boxSizing:"border-box",padding:"5px 8px",border:"none",borderRadius:4,background:t.value===e?"var(--side-active)":"transparent",color:"var(--text)",fontSize:11,textAlign:"left",cursor:"pointer"},onMouseEnter:e=>{e.currentTarget.style.background="var(--side-hover)"},onMouseLeave:r=>{r.currentTarget.style.background=t.value===e?"var(--side-active)":"transparent"},children:t.label},t.value))})]})}var c=r(87278);function u({candidates:e,selected:t,onChange:r,placeholder:i="选择任务卡…",excludeId:a,width:s="100%"}){let[d,c]=(0,o.useState)(!1),[p,h]=(0,o.useState)(!1),x=(0,o.useRef)(null),g=e.filter(e=>e.id!==a),f=new Set(t);(0,o.useEffect)(()=>{if(!d)return;let e=e=>{x.current&&!x.current.contains(e.target)&&c(!1)},t=e=>{"Escape"===e.key&&c(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[d]);let b=g.filter(e=>f.has(e.id)),v=b.length>3?b.length-3:0,y=b.slice(0,3);return(0,n.jsxs)("div",{ref:x,style:{position:"relative",width:s},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>c(e=>!e),onMouseEnter:()=>h(!0),onMouseLeave:()=>h(!1),style:{width:"100%",height:28,boxSizing:"border-box",display:"flex",alignItems:"center",gap:4,padding:"0 6px",background:d?"var(--side-active)":p?"var(--side-hover)":"transparent",border:"1px solid var(--border)",borderRadius:5,cursor:"pointer",fontSize:11,color:"var(--text)",textAlign:"left",transition:"background 0.12s"},children:[y.length>0?(0,n.jsxs)(n.Fragment,{children:[y.map(e=>(0,n.jsxs)("span",{style:{flexShrink:0,display:"inline-flex",alignItems:"center",gap:3,padding:"1px 5px",borderRadius:999,background:"var(--side-selected)",color:"var(--accent)",fontFamily:"var(--font-mono)",fontSize:10},children:["#",e.number]},e.id)),v>0&&(0,n.jsxs)("span",{style:{flexShrink:0,color:"var(--text-muted)",fontSize:10},children:["+",v]})]}):(0,n.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--text-dim)"},children:i}),(0,n.jsx)("span",{style:{flex:1}}),(0,n.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,color:"var(--text-dim)"},children:(0,n.jsx)("polyline",{points:"2 3.5 5 6.5 8 3.5"})})]}),d&&(0,n.jsx)(l.f,{open:!0,style:{position:"absolute",top:"calc(100% + 4px)",left:0,right:0,zIndex:120,minWidth:160,maxHeight:180,overflowY:"auto",background:"var(--popover-glass)",border:"1px solid var(--border)",borderRadius:6,boxShadow:"0 6px 20px -6px rgba(0,0,0,0.35)",padding:4},children:0===g.length?(0,n.jsx)("div",{style:{padding:"8px",color:"var(--text-dim)",fontSize:11},children:"本看板无其他任务卡"}):g.map(e=>{let o=f.has(e.id);return(0,n.jsxs)("button",{type:"button",onClick:n=>{var o;n.stopPropagation(),o=e.id,r(f.has(o)?t.filter(e=>e!==o):[...t,o])},style:{display:"flex",alignItems:"center",gap:7,width:"100%",boxSizing:"border-box",padding:"5px 8px",border:"none",borderRadius:4,background:o?"var(--side-selected)":"transparent",color:"var(--text)",fontSize:11,textAlign:"left",cursor:"pointer"},onMouseEnter:e=>{o||(e.currentTarget.style.background="var(--side-hover)")},onMouseLeave:e=>{e.currentTarget.style.background=o?"var(--side-selected)":"transparent"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0,width:12,height:12,borderRadius:3,border:"1px solid var(--border)",background:o?"var(--accent)":"transparent",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"var(--accent-contrast, #fff)"},children:o&&(0,n.jsx)("svg",{width:"8",height:"8",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,n.jsx)("polyline",{points:"1.5 5 3.5 7 8.5 2"})})}),(0,n.jsxs)("span",{style:{fontFamily:"var(--font-mono)",color:"var(--text-muted)",flexShrink:0},children:["#",e.number]}),(0,n.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.name})]},e.id)})})]})}var p=r(91897),h=r(29608);function x({cwd:e,value:t,onChange:r}){let[i,a]=(0,o.useState)(null),[s,d]=(0,o.useState)(!1),[c,u]=(0,o.useState)(!1),[p,h]=(0,o.useState)(""),[g,f]=(0,o.useState)(!1),[b,v]=(0,o.useState)(null),y=(0,o.useRef)(null),m=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(!e)return void a(null);let t=!1;return(async()=>{try{let r=await fetch(`/api/worktrees?cwd=${encodeURIComponent(e)}`,{cache:"no-store"});if(!r.ok)return;let n=await r.json();if(t)return;a({forCwd:e,projectRoot:n.projectRoot??e,isGit:n.isGit??!1,currentWorktreePath:n.currentWorktreePath??null,worktrees:(n.worktrees??[]).map(e=>({path:e.path,branch:e.branch??null,isMain:!!e.isMain}))})}catch{t||a(null)}})(),()=>{t=!0}},[e]);let w=i?.worktrees.find(e=>e.path===t)??i?.worktrees.find(t=>t.path===e)??(i?.currentWorktreePath?i.worktrees.find(e=>e.path===i.currentWorktreePath):void 0)??i?.worktrees.find(e=>e.isMain)??null,k=async()=>{let e=p.trim();if(e&&!g&&i){f(!0),v(null);try{let t=await fetch("/api/worktrees",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cwd:i.projectRoot,branch:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.path){v(n.error??"创建失败"),f(!1);return}h(""),u(!1),d(!1),r(n.path)}catch(e){v(e instanceof Error?e.message:String(e))}f(!1)}};(0,o.useEffect)(()=>{if(!s)return;let e=e=>{y.current&&!y.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s]);let j=w?w.isMain?`主 checkout(${w.branch??""})`:w.branch??w.path:i?.isGit?"选择工作区…":"非 git 项目";return(0,n.jsxs)("div",{ref:y,style:{position:"relative"},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>{d(e=>!e),v(null)},style:{width:"100%",height:28,boxSizing:"border-box",display:"flex",alignItems:"center",gap:6,padding:"0 8px",background:s?"var(--side-active)":"transparent",border:"1px solid var(--border)",borderRadius:5,cursor:"pointer",fontSize:11,color:"var(--text)",textAlign:"left",fontFamily:"var(--font-mono)"},title:w?.path??void 0,children:[(0,n.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,color:w&&!w.isMain?"var(--accent)":"var(--text-dim)"},children:[(0,n.jsx)("line",{x1:"6",y1:"3",x2:"6",y2:"15"}),(0,n.jsx)("circle",{cx:"18",cy:"6",r:"3"}),(0,n.jsx)("circle",{cx:"6",cy:"18",r:"3"}),(0,n.jsx)("path",{d:"M18 9a9 9 0 0 1-9 9"})]}),(0,n.jsx)("span",{style:{flex:1,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:j}),(0,n.jsx)("svg",{width:"9",height:"9",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,color:"var(--text-dim)"},children:(0,n.jsx)("polyline",{points:"2 3.5 5 6.5 8 3.5"})})]}),(0,n.jsxs)(l.f,{open:s,style:{position:"absolute",top:"calc(100% + 4px)",left:0,right:0,zIndex:120,minWidth:200,background:"var(--popover-glass)",border:"1px solid var(--border)",borderRadius:6,boxShadow:"0 6px 20px -6px rgba(0,0,0,0.35)",overflow:"hidden"},children:[(0,n.jsx)("div",{style:{maxHeight:"min(40vh, 260px)",overflowY:"auto",padding:4},children:0===(i?.worktrees??[]).length?(0,n.jsx)("div",{style:{padding:"8px 10px",fontSize:11,color:"var(--text-dim)"},children:i?.isGit===!1?"非 git 项目,无法创建工作区":"暂无工作区"}):(i?.worktrees??[]).map(e=>{let o=e.path===(w?.path??t);return(0,n.jsxs)("button",{type:"button",onClick:()=>{r(e.path),d(!1),v(null)},title:e.path,style:{display:"block",width:"100%",boxSizing:"border-box",padding:"6px 8px",border:"none",borderRadius:4,background:o?"var(--side-active)":"transparent",color:"var(--text)",fontSize:11,textAlign:"left",cursor:"pointer",fontFamily:"var(--font-mono)"},onMouseEnter:e=>{o||(e.currentTarget.style.background="var(--side-hover)")},onMouseLeave:e=>{o||(e.currentTarget.style.background="transparent")},children:[(0,n.jsx)("span",{style:{display:"block",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.isMain?`主 checkout(${e.branch??""})`:e.branch??e.path}),(0,n.jsx)("span",{style:{display:"block",fontSize:9.5,color:"var(--text-dim)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.path})]},e.path)})}),c?(0,n.jsxs)("div",{style:{padding:"6px 8px",borderTop:"1px solid var(--bubble-hairline)"},children:[(0,n.jsx)("input",{ref:m,value:p,onChange:e=>{h(e.target.value),v(null)},onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),k()),"Escape"===e.key&&(u(!1),h(""),v(null))},placeholder:"新分支名",style:{width:"100%",fontSize:11,fontFamily:"var(--font-mono)",padding:"5px 8px",border:"1px solid var(--accent)",borderRadius:5,outline:"none",background:"var(--side-input)",color:"var(--text)",boxSizing:"border-box"}}),(0,n.jsxs)("div",{style:{display:"flex",gap:5,marginTop:5},children:[(0,n.jsx)("button",{type:"button",onClick:()=>void k(),disabled:g||!p.trim(),style:{flex:1,padding:"4px 0",background:"var(--accent)",border:"none",borderRadius:5,color:"var(--accent-contrast, #fff)",fontSize:11,fontWeight:600,cursor:g||!p.trim()?"not-allowed":"pointer",opacity:g||!p.trim()?.65:1},children:g?"创建中…":"创建"}),(0,n.jsx)("button",{type:"button",onClick:()=>{u(!1),h(""),v(null)},style:{flex:1,padding:"4px 0",background:"transparent",border:"1px solid var(--border)",borderRadius:5,color:"var(--text-muted)",fontSize:11,cursor:"pointer"},children:"取消"})]})]}):(0,n.jsxs)("button",{type:"button",onClick:e=>{e.stopPropagation(),u(!0),v(null),setTimeout(()=>m.current?.focus(),0)},style:{display:"flex",alignItems:"center",gap:7,width:"100%",padding:"7px 10px",background:"none",border:"none",borderTop:"1px solid var(--bubble-hairline)",color:"var(--text-muted)",cursor:"pointer",textAlign:"left",fontSize:11},children:[(0,n.jsxs)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.1",strokeLinecap:"round",style:{flexShrink:0},children:[(0,n.jsx)("line",{x1:"5",y1:"1",x2:"5",y2:"9"}),(0,n.jsx)("line",{x1:"1",y1:"5",x2:"9",y2:"5"})]}),(0,n.jsx)("span",{children:"新建工作区"})]}),b&&(0,n.jsx)("div",{style:{padding:"5px 10px 8px",color:"#dc2626",fontSize:11,lineHeight:1.35,overflowWrap:"anywhere"},children:b})]})]})}let g=(0,o.createContext)(null),f={cardId:i.T.string,number:i.T.number,name:i.T.string,description:i.T.string.optional(),readyStatus:i.T.string,execStatus:i.T.string,priority:i.T.number,due:i.T.number.nullable().optional(),expanded:i.T.boolean,w:i.T.number,h:i.T.number,expandedW:i.T.number,expandedH:i.T.number,collapsedW:i.T.number,collapsedH:i.T.number},b={not_started:{color:"#9ca3af",label:"未开始"},running:{color:"#10b981",label:"进行中"},review:{color:"#f59e0b",label:"待审核"},done:{color:"#10b981",label:"完成"},failed:{color:"#ef4444",label:"失败"},abandoned:{color:"#9ca3af",label:"放弃"},waiting_reply:{color:"#3184f8",label:"等回复"}};class v extends i.A8{static{this.type="task-card"}static{this.props=f}getDefaultProps(){return{cardId:"",number:0,name:"新建任务",description:"",readyStatus:"draft",execStatus:"not_started",priority:0,expanded:!1,w:380,h:270,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}canEdit(){return!0}canResize(){return!0}canScroll(){return!0}hideRotateHandle(){return!0}onDoubleClick(e){var t;return{id:e.id,type:"task-card",props:(t=e).props.expanded?{expanded:!1,expandedW:t.props.w,expandedH:t.props.h,w:t.props.collapsedW||380,h:t.props.collapsedH||270}:{expanded:!0,collapsedW:t.props.w,collapsedH:t.props.h,w:t.props.expandedW||760,h:t.props.expandedH||600}}}onResize(e,t){let r=e.props.expanded;return(0,i.mfH)(e,t,{minWidth:r?480:380,minHeight:r?400:240})}getIndicatorPath(e){let{w:t,h:r}=e.props,n=new Path2D;return n.roundRect(0,0,t,r,12),n}component(e){return(0,n.jsx)(y,{shape:e})}}function y({shape:e}){return(0,n.jsx)(k,{shape:e})}let m={width:"100%",boxSizing:"border-box",border:"1px solid var(--border)",borderRadius:6,background:"transparent",color:"var(--text)",fontSize:12,padding:"4px 8px",outline:"none"},w={display:"block",fontSize:10,color:"var(--text)",fontWeight:600,margin:"8px 0 3px"};function k({shape:e}){let{cardId:t,w:r,h:l,expanded:f}=e.props,v=(0,i.hGv)(),y=(0,o.useContext)(g)?.boardId??null,R=(0,o.useContext)(g)?.defaultCwd??null,{detail:I,candidates:E,loading:L,error:T,reload:W,createCard:z,saveCard:P}=function(e,t){let[r,n]=(0,o.useState)(null),[i,s]=(0,o.useState)([]),[l,d]=(0,o.useState)(!1),[c,u]=(0,o.useState)(null),p=(0,o.useRef)(null);p.current=r;let h=(0,o.useCallback)(async(t=!1)=>{if(!e)return void n(null);t||d(!0);try{let t=await fetch(`/api/task-cards/${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok){if(404===t.status)return void n(null);throw Error(`HTTP ${t.status}`)}let r=await t.json();n(r)}catch(e){t||u(e instanceof Error?e.message:String(e))}finally{t||d(!1)}},[e]),x=(0,o.useCallback)(()=>h(!1),[h]);(0,o.useEffect)(()=>{x()},[x]),(0,o.useEffect)(()=>{if(!t)return;let e=!1;return(async()=>{try{let r=await fetch(`/api/task-cards?boardId=${encodeURIComponent(t)}`,{cache:"no-store"});if(!r.ok)return;let n=await r.json();e||s(n.cards)}catch{}})(),()=>{e=!0}},[t]);let g=(0,o.useCallback)(async e=>{try{let t=await fetch("/api/task-cards",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??`HTTP ${t.status}`)}let r=await t.json();return"number"==typeof r.updated&&(0,a.D2)(e.boardId,r.updated),r.card}catch(e){return u(e instanceof Error?e.message:String(e)),null}},[]),f=(0,o.useCallback)(async t=>{if(!e)return!1;try{let r=await fetch(`/api/task-cards/${encodeURIComponent(e)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`HTTP ${r.status}`)}let n=await r.json();return"number"==typeof n.updated&&p.current?.card.boardId&&(0,a.D2)(p.current.card.boardId,n.updated),await x(),!0}catch(e){return u(e instanceof Error?e.message:String(e)),!1}},[e,x]);return{detail:r,candidates:i,loading:l,error:c,reload:x,createCard:g,saveCard:f}}(t||null,y),M=(0,c.G)(v,e.id,"var(--assistant-card-glass)"),D=!t,$=I?.card.sessionId??null;(0,o.useEffect)(()=>{f&&!D&&W()},[f,D,W]);let H=(0,o.useCallback)(()=>{if($)for(let e of v.getCurrentPageShapes()){if("session-card"!==e.type)continue;let t=e.props;if(t.sessionId!==$)continue;let r={x:e.x+(t.w??0)/2,y:e.y+(t.h??0)/2};v.centerOnPoint(r),v.select(e.id);return}},[v,$]),A=(0,i.hau)("execStatus",()=>{let t=v.getShape(e.id);return t?.props?.execStatus??null},[v,e.id]);(0,o.useEffect)(()=>{A&&O&&O.execStatus!==A&&ed("execStatus",A)},[A]);let B=(0,i.hau)("remoteName",()=>{let t=v.getShape(e.id),r=t?.props,n=r?.name;return n&&"新建任务"!==n?n:""},[v,e.id]),F=(0,i.hau)("remoteDescription",()=>{let t=v.getShape(e.id);return t?.props?.description??""},[v,e.id]),N=(0,o.useRef)(!1);(0,o.useEffect)(()=>{!O||N.current||void 0!==B&&B!==O.name&&U(e=>e?{...e,name:B}:e)},[B]),(0,o.useEffect)(()=>{!O||N.current||void 0!==F&&F!==O.description&&U(e=>e?{...e,description:F}:e)},[F]);let[O,U]=(0,o.useState)(()=>D?{id:"",boardId:"",projectKey:"",number:0,name:"新建任务"===e.props.name?"":e.props.name,description:e.props.description??"",readyStatus:"draft",execStatus:"not_started",priority:0,due:null,attachments:[],cwd:R,useWorktree:!1,maxRetries:3,retryCount:0,sessionId:null,created:0,updated:0}:null);(0,o.useEffect)(()=>{!D&&I?.card&&!O&&U({...I.card})},[D,I,O]);let[_,Y]=(0,o.useState)([]),[K,G]=(0,o.useState)([]),q=(0,o.useRef)(!1);(0,o.useEffect)(()=>{I&&!q.current&&(q.current=!0,Y(s(I.links,"prerequisite")),G(s(I.links,"related")))},[I]);let[J,V]=(0,o.useState)(!1),X=(0,o.useRef)(!1),[Q,Z]=(0,o.useState)(null),[ee,et]=(0,o.useState)(null),[er,en]=(0,o.useState)(!1);(0,o.useEffect)(()=>{en(f)},[f]);let[eo,ei]=(0,o.useState)(!1),[ea,es]=(0,o.useState)(null),el=(0,o.useRef)(null),ed=(t,r)=>{U(n=>{let o=n?{...n,[t]:r}:n;return o&&("name"===t||"description"===t)&&v.updateShape({id:e.id,type:"task-card",props:{name:"name"===t?r:o.name,description:"description"===t?r:o.description??""}}),o})};(0,o.useEffect)(()=>{let e=el.current;if(!e)return;let t=t=>{if(t.ctrlKey||t.metaKey)return;let r=t.target;r instanceof Node&&e.contains(r)&&function(e,t){let r=e instanceof Element?e:e.parentElement;for(;r&&r instanceof HTMLElement&&r!==t;){let e=r.scrollHeight>r.clientHeight,t=r.scrollWidth>r.clientWidth;if(e||t){let n=getComputedStyle(r),o=n.overflowY,i=n.overflowX;if(e&&("auto"===o||"scroll"===o||"overlay"===o)||t&&("auto"===i||"scroll"===i||"overlay"===i))return!0}r=r.parentElement}return!1}(r,e)&&t.stopPropagation()};return e.addEventListener("wheel",t),()=>e.removeEventListener("wheel",t)});let ec=async()=>{if(!y)return void Z("缺少看板上下文,无法创建");if(!O?.name.trim())return void et("请填写任务名称");if(V(!0),Z(null),X.current)return;X.current=!0;let t=await z({boardId:y,name:O.name,description:O.description,readyStatus:"todo",priority:O.priority,due:O.due??null,cwd:O.cwd??void 0,useWorktree:O.useWorktree,maxRetries:O.maxRetries,attachments:O.attachments,prerequisites:_,related:K});X.current=!1,V(!1),t&&(v.updateShape({id:e.id,type:"task-card",props:{cardId:t.id,number:t.number,name:t.name,readyStatus:t.readyStatus,execStatus:t.execStatus,priority:t.priority,due:t.due??void 0}}),U(e=>e?{...e,...t,sessionId:t.sessionId}:e),W())},eu=async()=>{if(!O?.name.trim())return void et("请填写任务名称");if(X.current)return;V(!0),X.current=!0,Z(null);let t=await P({name:O.name,description:O.description,readyStatus:O.readyStatus,priority:O.priority,due:O.due??null,attachments:O.attachments,cwd:O.cwd??null,useWorktree:O.useWorktree,maxRetries:O.maxRetries,prerequisites:_,related:K});X.current=!1,V(!1),t?v.updateShape({id:e.id,type:"task-card",props:{name:O.name,description:O.description??"",readyStatus:O.readyStatus,priority:O.priority,due:O.due??void 0}}):Z(T??"保存失败")},ep=(0,o.useMemo)(()=>{if(D||!I?.card||!O)return!1;let e=I.card;return O.name!==e.name||O.description!==e.description||O.priority!==e.priority||O.due!==e.due||O.cwd!==e.cwd||O.useWorktree!==e.useWorktree||O.maxRetries!==e.maxRetries||JSON.stringify(O.attachments??[])!==JSON.stringify(e.attachments??[])||JSON.stringify([..._].sort())!==JSON.stringify(s(I.links,"prerequisite").sort())||JSON.stringify([...K].sort())!==JSON.stringify(s(I.links,"related").sort())},[D,I,O,_,K]),eh=(0,i.hau)("selected",()=>v.getSelectedShapeIds().includes(e.id),[v,e.id]),ex=(0,o.useRef)(eh),eg=(0,o.useRef)(ep);eg.current=ep;let ef=(0,o.useRef)(eu);ef.current=eu,(0,o.useEffect)(()=>{let e=ex.current;ex.current=eh,e&&!eh&&!D&&eg.current&&ef.current()},[eh,D]);let eb=O?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("label",{style:w,children:"任务名称 *"}),(0,n.jsx)("input",{style:{...m,...ee?{borderColor:"#f87171",boxShadow:"0 0 0 1px #f87171"}:{}},value:O.name,onChange:e=>{ed("name",e.target.value),ee&&et(null)},onFocus:()=>{N.current=!0},onBlur:()=>{N.current=!1},placeholder:"任务名称"}),ee&&(0,n.jsx)("div",{style:{color:"#f87171",fontSize:11,marginTop:3},children:ee}),(0,n.jsx)("label",{style:w,children:"需求说明"}),(0,n.jsx)("textarea",{style:{...m,flex:1,minHeight:70,resize:"none",fontFamily:"var(--font-mono)",fontSize:11},value:O.description,onChange:e=>ed("description",e.target.value),onFocus:()=>{N.current=!0},onBlur:()=>{N.current=!1},placeholder:"任务描述",spellCheck:!1}),(0,n.jsxs)(S,{title:"高级",open:er,onToggle:()=>en(e=>!e),children:[(0,n.jsx)("label",{style:w,children:"工作目录"}),(0,n.jsxs)("div",{style:{display:"flex",gap:6},children:[(0,n.jsx)("input",{style:{...m,flex:1},value:O.cwd??"",onChange:e=>ed("cwd",e.target.value||null),placeholder:"默认项目根目录",readOnly:!0}),(0,n.jsx)("button",{type:"button",style:j,onClick:()=>ei(!0),children:"选择目录"})]}),eo&&O&&(0,n.jsx)(h.K,{onCancel:()=>ei(!1),onSelect:e=>{ed("cwd",e),ei(!1)}}),(0,n.jsx)("label",{style:w,children:"工作区"}),(0,n.jsx)(x,{cwd:O.cwd,value:ea,onChange:e=>{es(e),ed("cwd",e)}}),(0,n.jsx)("label",{style:w,children:"预计截止"}),(0,n.jsx)(C,{due:O.due??null,onChange:e=>ed("due",e)}),(0,n.jsxs)("div",{style:{display:"flex",gap:8},children:[(0,n.jsxs)("div",{style:{flex:1},children:[(0,n.jsx)("label",{style:w,children:"优先级"}),(0,n.jsx)(d,{value:String(O.priority),onChange:e=>ed("priority",Number(e)),options:[{value:"1",label:"高"},{value:"0",label:"中"},{value:"-1",label:"低"}]})]}),(0,n.jsxs)("div",{style:{flex:1},children:[(0,n.jsx)("label",{style:w,children:"最大重试次数"}),(0,n.jsx)("input",{style:m,type:"number",min:0,value:O.maxRetries,onChange:e=>ed("maxRetries",Math.max(0,Number(e.target.value)||0))})]})]}),(0,n.jsx)("label",{style:w,children:"前置任务(可多选)"}),(0,n.jsx)(u,{candidates:E,selected:_,onChange:Y,excludeId:t,placeholder:"本看板内选择前置任务…"}),(0,n.jsx)("label",{style:w,children:"关联任务(可多选)"}),(0,n.jsx)(u,{candidates:E,selected:K,onChange:G,excludeId:t,placeholder:"本看板内选择关联任务…"}),(0,n.jsx)("label",{style:w,children:"附件(引用文件路径,每行一个)"}),(0,n.jsx)("textarea",{style:{...m,minHeight:46,resize:"vertical",fontFamily:"var(--font-mono)",fontSize:11},value:(O.attachments??[]).join("\n"),onChange:e=>ed("attachments",e.target.value.split("\n").map(e=>e.trim()).filter(Boolean)),placeholder:"/path/to/file",spellCheck:!1})]}),(Q||T)&&(0,n.jsx)("div",{style:{color:"#f87171",fontSize:11,marginTop:6},children:Q??T})]}):L?(0,n.jsx)("div",{style:{color:"var(--text-dim)",fontSize:12,padding:20,textAlign:"center"},children:"加载中…"}):(0,n.jsx)("div",{style:{color:"var(--text-dim)",fontSize:12,padding:20,textAlign:"center"},children:"未找到任务卡"});return(0,n.jsx)(i.hDc,{"data-testid":`task-card-${e.id}`,onPointerDown:()=>v.bringToFront([e.id]),style:{width:r,height:l,pointerEvents:"none"},children:(0,n.jsxs)("div",{ref:e=>{el.current=e,M(e)},style:{position:"relative",width:r,height:l,borderRadius:"var(--bubble-radius, 12px)",border:"1px solid var(--bubble-border)",background:"transparent",boxShadow:"0 2px 10px -6px rgba(0,0,0,0.2)",color:"var(--text)",display:"flex",flexDirection:"column",overflow:"hidden",pointerEvents:"all",userSelect:"none"},children:[(0,n.jsxs)("div",{style:{flexShrink:0,height:36,display:"flex",alignItems:"center",gap:6,padding:"0 10px",borderBottom:"1px solid var(--bubble-hairline)",cursor:"grab",fontSize:11,color:"var(--text-muted)"},children:[(0,n.jsx)("span",{title:`执行状态:${(b[O?.execStatus??"not_started"]??b.not_started).label}`,style:{display:"flex",alignItems:"center",gap:4,flexShrink:0},children:(0,n.jsx)(p.i,{kind:"task",color:(b[O?.execStatus??"not_started"]??b.not_started).color})}),(0,n.jsx)("span",{style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontSize:12.5,fontWeight:600,color:"var(--text)"},children:O?.name||(D?"新建任务卡":"任务卡")}),O?.number?(0,n.jsxs)("span",{style:{flexShrink:0,fontSize:12.5,fontWeight:600,color:"var(--text)",marginLeft:4},children:["#",O.number]}):null,(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,flexShrink:0},onPointerDown:e=>e.stopPropagation(),children:[D?(0,n.jsx)("button",{type:"button",style:j,disabled:J||!y,onClick:()=>void ec(),title:"创建任务并派发(转待办,调度器可执行)",children:J?"创建中…":"派发"}):O?.readyStatus==="draft"?(0,n.jsx)("button",{type:"button",style:j,disabled:J,onClick:()=>{ed("readyStatus","todo"),!D&&t&&P({readyStatus:"todo"})},title:"派发(转待办,调度器可执行)",children:J?"派发中…":"派发"}):O?.readyStatus==="todo"?(0,n.jsxs)("span",{title:`执行状态:${(b[O?.execStatus??"not_started"]??b.not_started).label}`,style:{display:"flex",alignItems:"center",gap:4,fontSize:11,fontWeight:600,color:(b[O?.execStatus??"not_started"]??b.not_started).color,whiteSpace:"nowrap"},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",background:(b[O?.execStatus??"not_started"]??b.not_started).color,...O?.execStatus==="running"?{animation:"pulse-dot 1.6s ease-in-out infinite"}:{}}}),(b[O?.execStatus??"not_started"]??b.not_started).label]}):null,$&&(0,n.jsx)("button",{type:"button",style:j,onClick:H,title:"定位到该任务的执行会话卡",children:"会话"}),D?null:ep?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("button",{type:"button",style:j,onClick:()=>{I&&(U({...I.card}),Y(s(I.links,"prerequisite")),G(s(I.links,"related")),es(null),Z(null),et(null))},title:"撤销本次编辑",children:"取消"}),(0,n.jsx)("button",{type:"button",style:j,disabled:J,onClick:()=>void eu(),title:"完成(保存)",children:J?"保存中…":"完成"})]}):null]})]}),(0,n.jsx)("div",{style:{flex:1,minHeight:0,display:"flex"},children:(0,n.jsx)("div",{className:"[scrollbar-width:none]",style:{flex:"1 1 auto",minWidth:0,overflowY:"auto",padding:"10px 12px",display:"flex",flexDirection:"column"},onPointerDown:e=>{0===e.button&&e.stopPropagation()},onPointerUp:e=>{0===e.button&&e.stopPropagation()},onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:eb})})]})})}let j={border:"none",background:"color-mix(in srgb, var(--border) 30%, transparent)",color:"var(--text-muted)",borderRadius:5,padding:"2px 10px",fontSize:11,cursor:"pointer",whiteSpace:"nowrap"};function S({title:e,open:t,onToggle:r,children:o}){return(0,n.jsxs)("div",{children:[(0,n.jsxs)("button",{type:"button",onClick:r,style:{display:"flex",alignItems:"center",gap:4,width:"100%",marginTop:10,padding:"5px 0 3px",border:"none",borderTop:"1px solid var(--bubble-hairline)",background:"transparent",color:"var(--text-muted)",fontSize:11,fontWeight:600,cursor:"pointer",textAlign:"left"},children:[(0,n.jsx)("svg",{width:"10",height:"10",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round",style:{flexShrink:0,transform:t?"rotate(90deg)":"none",transition:"transform 0.12s"},children:(0,n.jsx)("polyline",{points:"3 2 6.5 5 3 8"})}),e]}),t&&(0,n.jsx)("div",{children:o})]})}function C({due:e,onChange:t}){let r=new Date,o=e?new Date(e):r,[i,a,s]=[o.getFullYear(),o.getMonth()+1,o.getDate()],l=[];for(let e=r.getFullYear()-2;e<=r.getFullYear()+3;e++)l.push(String(e));let c=Array.from({length:12},(e,t)=>String(t+1)),u=new Date(i,a,0).getDate(),p=Array.from({length:u},(e,t)=>String(t+1)),h=(e,r,n)=>{let o=new Date(e,r-1,n,0,0,0,0).getTime();t(Number.isNaN(o)?null:o)};return(0,n.jsxs)("div",{style:{display:"flex",gap:4},children:[(0,n.jsx)("div",{style:{flex:1.4,minWidth:0},children:(0,n.jsx)(d,{value:String(i),options:l.map(e=>({value:e,label:e})),onChange:e=>h(Number(e),a,Math.min(s,u))})}),(0,n.jsx)("div",{style:{flex:1,minWidth:0},children:(0,n.jsx)(d,{value:String(a),options:c.map(e=>({value:e,label:`${e}月`})),onChange:e=>h(i,Number(e),Math.min(s,new Date(i,Number(e),0).getDate()))})}),(0,n.jsx)("div",{style:{flex:1,minWidth:0},children:(0,n.jsx)(d,{value:String(s),options:p.map(e=>({value:e,label:e})),onChange:e=>h(i,a,Number(e))})})]})}},41264:(e,t,r)=>{r.d(t,{QQ:()=>h});var n=r(95155),o=r(12115),i=r(23312),a=r(32316),s=r(71309),l=r(91897),d=r(87278);let c={blue:"#3184f8",green:"#10b981",red:"#ef4444",yellow:"#f59e0b",purple:"#8b5cf6"},u={blue:"蓝",green:"绿",red:"红",yellow:"黄",purple:"紫"},p={text:i.T.string,w:i.T.number,h:i.T.number,badge:i.T.string.optional(),createdAt:i.T.number.optional()};class h extends i.A8{static{this.type="sticky-note"}static{this.props=p}getDefaultProps(){return{text:"",w:338,h:230,badge:"blue",createdAt:Date.now()}}canEdit(){return!0}canResize(){return!0}canScroll(){return!0}hideRotateHandle(){return!0}onResize(e,t){return(0,i.mfH)(e,t,{minWidth:182,minHeight:115})}getIndicatorPath(e){let{w:t,h:r}=e.props,n=new Path2D;return n.roundRect(0,0,t,r,12),n}component(e){return(0,n.jsx)(x,{shape:e})}}function x({shape:e}){let t,r,{w:p,h,text:f}=e.props,b=(0,i.hGv)(),v=(0,d.G)(b,e.id,"var(--assistant-card-glass)"),{highlightId:y}=(0,s.kz)(),m=y===e.id,w=(0,i.hau)("editing",()=>b.getEditingShapeId()===e.id,[b,e.id]),k=(0,o.useCallback)(e=>{0===e.button&&e.stopPropagation()},[]),j=(0,o.useCallback)(t=>{t.stopPropagation(),b.getEditingShapeId()!==e.id&&b.select(e.id)},[b,e.id]),S=(0,o.useCallback)(t=>{t.stopPropagation(),b.setEditingShape(e.id)},[b,e.id]),[C]=(0,o.useState)(()=>e.props.createdAt??Date.now()),R=e.props.badge??"blue",[I,E]=(0,o.useState)(f),L=(0,o.useRef)(f),[T,W]=(0,o.useState)(R),z=(0,o.useRef)(null),P=(0,o.useRef)(null),M=(0,o.useRef)(!1),D=(0,o.useRef)(!1),[$,H]=(0,o.useState)(!1),A=(0,o.useRef)(null);(0,o.useEffect)(()=>{let e=e=>{if(!e)return;let t=t=>{t.ctrlKey||t.metaKey||e.scrollHeight>e.clientHeight&&t.stopPropagation()};return e.addEventListener("wheel",t),()=>e.removeEventListener("wheel",t)},t=e(z.current),r=e(P.current);return()=>{t?.(),r?.()}}),(0,o.useEffect)(()=>{let e=P.current;if(!e)return;let t=e=>{let t=window.getSelection();t&&t.toString().length>0&&e.stopPropagation()};return e.addEventListener("copy",t),()=>e.removeEventListener("copy",t)});let B=(0,o.useCallback)(t=>{t.stopPropagation();let r=P.current?.querySelector(".markdown-body")?.innerText??e.props.text;navigator.clipboard.writeText(r).then(()=>{H(!0),A.current&&clearTimeout(A.current),A.current=setTimeout(()=>H(!1),1200)}).catch(()=>{try{let e=document.createElement("textarea");e.value=r,document.body.appendChild(e),e.select(),document.execCommand("copy"),document.body.removeChild(e),H(!0),A.current&&clearTimeout(A.current),A.current=setTimeout(()=>H(!1),1200)}catch{}})},[e.props.text]);(0,o.useEffect)(()=>()=>{A.current&&clearTimeout(A.current)},[]),(0,o.useEffect)(()=>{w&&(E(f),L.current=f,W(R),requestAnimationFrame(()=>z.current?.focus()))},[w,f,R]);let F=(0,o.useCallback)(()=>{let t=L.current;(t!==e.props.text||T!==R)&&b.updateShapes([{id:e.id,type:"sticky-note",props:{text:t,badge:T}}])},[b,e.id,e.props.text,R,T]);(0,o.useEffect)(()=>{w||!D.current||M.current||F(),M.current=!1,D.current=w},[w,F]);let N=(0,o.useCallback)(()=>{b.setEditingShape(null)},[b]),O=(0,o.useCallback)(()=>{M.current=!0,b.setEditingShape(null)},[b]),U={position:"relative",width:p,height:h,borderRadius:"var(--bubble-radius, 12px)",border:m?"2px solid var(--accent)":"1px solid var(--bubble-border)",background:"transparent",boxShadow:m?s.u:"0 2px 10px -6px rgba(0,0,0,0.2)",animation:m?"board-search-glow 1.8s ease-out forwards":void 0,color:"var(--text)",display:"flex",flexDirection:"column",overflow:"hidden",fontSize:13,lineHeight:1.5,pointerEvents:"all",userSelect:"none"};return w?(0,n.jsx)(i.hDc,{"data-testid":`sticky-note-${e.id}`,style:{width:p,height:h,pointerEvents:"none"},children:(0,n.jsxs)("div",{ref:v,style:U,children:[(0,n.jsxs)("div",{onPointerDown:e=>e.stopPropagation(),style:{flexShrink:0,height:32,display:"flex",alignItems:"center",gap:6,padding:"0 var(--bubble-pad-x, 12px)",fontSize:10,color:"var(--text-muted)",boxSizing:"border-box"},children:[(0,n.jsx)(l.i,{kind:"note",color:c[T]??c.blue}),(0,n.jsx)("div",{style:{display:"flex",alignItems:"center",gap:5},children:Object.entries(c).map(([e,t])=>(0,n.jsx)("button",{type:"button",title:`徽记\xb7${u[e]??e}`,onClick:t=>{t.stopPropagation(),W(e)},style:{width:14,height:14,padding:0,border:"none",borderRadius:"50%",background:t,cursor:"pointer",boxShadow:T===e?`0 0 0 2px var(--bg-panel), 0 0 0 3.5px ${t}`:`0 0 0 1px color-mix(in srgb, ${t} 45%, transparent)`,opacity:T===e?1:.72}},e))}),(0,n.jsx)("div",{style:{flex:1}}),(0,n.jsx)("button",{type:"button",onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),O()},style:g,title:"放弃变更 (Esc)",children:"取消"}),(0,n.jsx)("button",{type:"button",onPointerDown:e=>e.stopPropagation(),onClick:e=>{e.stopPropagation(),N()},style:g,title:"完成 (Ctrl+Enter)",children:"完成"})]}),(0,n.jsx)("textarea",{ref:z,value:I,onChange:e=>{E(e.target.value),L.current=e.target.value},onKeyDown:e=>{e.stopPropagation(),"Enter"===e.key&&(e.ctrlKey||e.metaKey)?(e.preventDefault(),N()):"Escape"===e.key&&(e.preventDefault(),O())},onPointerDown:e=>{0===e.button&&e.stopPropagation()},spellCheck:!1,placeholder:"Markdown 便笺…",className:"sticky-note-input",style:{flex:1,minHeight:0,resize:"none",border:"none",outline:"none",background:"transparent",color:"var(--text)",fontFamily:"var(--font-mono)",fontSize:14,lineHeight:1.7,padding:"var(--bubble-pad-y, 8px) var(--bubble-pad-x, 12px)"}})]})}):(0,n.jsx)(i.hDc,{"data-testid":`sticky-note-${e.id}`,onPointerDown:()=>b.bringToFront([e.id]),style:{width:p,height:h,pointerEvents:"none"},children:(0,n.jsxs)("div",{ref:v,style:U,children:[(0,n.jsxs)("div",{style:{flexShrink:0,height:32,display:"flex",alignItems:"center",gap:6,padding:"0 var(--bubble-pad-x, 12px)",fontSize:10,color:"var(--text-muted)",cursor:"grab",boxSizing:"border-box"},children:[(0,n.jsx)(l.i,{kind:"note",color:c[R]??c.blue}),(0,n.jsx)("div",{style:{flex:1}}),(0,n.jsx)("span",{style:{fontFamily:"var(--font-mono)",whiteSpace:"nowrap"},children:(t=new Date(C),r=new Date,t.getFullYear()===r.getFullYear()&&t.getMonth()===r.getMonth()&&t.getDate()===r.getDate()?t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):`${t.getMonth()+1}/${t.getDate()}`)}),(0,n.jsx)("button",{type:"button",title:$?"已复制":"复制内容",onClick:B,onPointerDown:e=>e.stopPropagation(),style:{flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",width:22,height:20,padding:0,border:"none",borderRadius:5,background:"transparent",color:$?"var(--accent)":"var(--text-dim)",cursor:"pointer",pointerEvents:"all"},children:$?(0,n.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M20 6L9 17l-5-5"})}):(0,n.jsxs)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2"}),(0,n.jsx)("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})})]}),(0,n.jsx)("div",{ref:P,style:{flex:1,minHeight:0,overflowY:"auto",padding:"4px var(--bubble-pad-x, 12px) var(--bubble-pad-y, 8px)",textAlign:"left"},children:f.trim()?(0,n.jsx)("div",{className:"markdown-body",onPointerDown:k,onPointerUp:k,onClick:j,onDoubleClick:S,style:{wordBreak:"break-word",cursor:"text"},children:(0,n.jsx)(a.oz,{children:f})}):(0,n.jsx)("div",{onClick:j,onDoubleClick:S,style:{color:"var(--text-dim)",fontSize:12,cursor:"text"},children:"双击编辑 markdown"})})]})})}let g={border:"none",background:"color-mix(in srgb, var(--border) 30%, transparent)",color:"var(--text-muted)",borderRadius:5,padding:"2px 10px",fontSize:11,cursor:"pointer"}},64536:(e,t,r)=>{r.d(t,{C6:()=>b,ZI:()=>h,eo:()=>x});var n=r(12115),o=r(23312),i=r(17357),a=r(93647),s=r(15934),l=r(24456),d=r(82264),c=r(41264),u=r(26479),p=r(41463);let h=340,x=160,g=p.env.NEXT_PUBLIC_SYNC_WS??"ws://127.0.0.1:30143",f=[...o.Ats,d.V,c.QQ,u.o_];function b({boardId:e,taskId:t,newSessionCwd:r}){let[d,c]=(0,n.useState)(null),[u,p]=(0,n.useState)(null),[y,m]=(0,n.useState)(!1),w=(0,n.useRef)(null),k=(0,n.useRef)(e);k.current=e;let j=d?.taskId??null,S=t??j,C=(0,n.useRef)(S);C.current=S;let R=(0,n.useRef)(r);R.current=r;let I=(0,n.useMemo)(()=>`${g}/connect/${encodeURIComponent(e)}`,[e]),E=(0,i.pX)({uri:I,assets:a.AWg,shapeUtils:f}),L=(0,n.useCallback)(async()=>{try{let t=await fetch(`/api/boards/${encodeURIComponent(e)}`,{cache:"no-store"});if(!t.ok)return void p(`HTTP ${t.status}`);let r=await t.json();c(r.board)}catch(e){p(e instanceof Error?e.message:String(e))}},[e]);(0,n.useEffect)(()=>{L()},[L]);let[T,W]=(0,n.useState)(()=>globalThis.__piRunningSnapshot??null),z=(0,n.useCallback)(e=>{globalThis.__piRunningSnapshot=e,W(e)},[]),P=(0,n.useRef)(!1),M=(0,n.useRef)(0),D=(0,n.useRef)(new Set),$=(0,n.useRef)(async()=>{});(0,n.useEffect)(()=>{let e=!1,t=null,r=async()=>{if(!e&&!P.current&&"visible"===document.visibilityState){P.current=!0;try{let t=await fetch("/api/agent/running",{cache:"no-store"});if(!t.ok)return;let r=await t.json();if(e)return;z(r);let n=w.current;if(!n)return;let o=[];for(let e of n.getCurrentPageShapes())if("session-card"===e.type){let t=e.props;if(!t.sessionId)continue;let n=r.states[t.sessionId],i=r.runningSessionIds.includes(t.sessionId);if(i&&n){let r=n.phase??"waiting_model",i=n.startedAt?Date.now()-n.startedAt:0;(t.phase!==r||t.runningMs!==i||0!==t.endedAt)&&o.push({id:e.id,type:"session-card",props:{phase:r,runningMs:i,endedAt:0}})}else i||"idle"===t.phase||o.push({id:e.id,type:"session-card",props:{phase:"idle",runningMs:0,endedAt:0}})}else if("task-card"===e.type){let t=e.props;if(!t.cardId)continue;let n=r.taskCards?.find(e=>e.cardId===t.cardId&&e.boardId===k.current);n&&n.execStatus!==t.execStatus&&o.push({id:e.id,type:"task-card",props:{execStatus:n.execStatus}})}o.length>0&&n.updateShapes(o);let i=D.current,a=(r.taskCards??[]).some(e=>e.boardId===k.current&&"running"===e.execStatus&&!i.has(e.cardId));for(let e of r.taskCards??[])i.add(e.cardId);a&&Date.now()-M.current>2e3&&(M.current=Date.now(),$.current())}catch{}finally{P.current=!1}}},n=()=>{e||(t=setTimeout(async()=>{await r(),n()},2500))};r(),n();let o=()=>{"visible"===document.visibilityState&&r()};return document.addEventListener("visibilitychange",o),()=>{e=!0,t&&clearTimeout(t),document.removeEventListener("visibilitychange",o)}},[z]);let[H,A]=(0,n.useState)({}),B=(0,n.useRef)({});B.current=H;let F=(0,n.useRef)(!1),N=(0,n.useCallback)(async()=>{if(!F.current){F.current=!0;try{let e=await fetch("/api/sessions",{cache:"no-store"});if(!e.ok)return;let t=await e.json(),r={};for(let e of t.sessions)r[e.id]={title:e.name??e.firstMessage??"Untitled",messageCount:e.messageCount??0,projectName:e.projectKey??e.projectRoot??"",lastReply:e.lastReply??"",lastActivityAt:e.modified?Date.parse(e.modified):0};A(r)}catch{}finally{F.current=!1}}},[]);(0,n.useEffect)(()=>{let e,t=!1,r=async()=>{await N(),t||(e=setTimeout(r,1e4))};r();let n=()=>{"visible"===document.visibilityState&&(e&&clearTimeout(e),r())};return document.addEventListener("visibilitychange",n),()=>{t=!0,e&&clearTimeout(e),document.removeEventListener("visibilitychange",n)}},[N]),(0,n.useEffect)(()=>{let e=w.current;if(!e||!y||0===Object.keys(H).length)return;let t=[];for(let r of e.getCurrentPageShapes()){if("session-card"!==r.type)continue;let e=r.props,n=H[e.sessionId];n&&(e.title!==n.title||e.lastReply!==n.lastReply||e.messageCount!==n.messageCount||e.lastActivityAt!==n.lastActivityAt)&&t.push({id:r.id,type:"session-card",props:{title:n.title,lastReply:n.lastReply,messageCount:n.messageCount,lastActivityAt:n.lastActivityAt}})}t.length>0&&e.updateShapes(t)},[H,y]);let O=(0,n.useCallback)(e=>{w.current=e,m(!0);let t=e.deleteShapes.bind(e);e.deleteShapes=r=>{let n=Array.isArray(r)?r:[r],o=[],i=[],a=[];for(let t of n){let r="string"==typeof t?t:t.id,n=e.getShape(r);if(!n){o.push(r);continue}if("arrow"===n.type){let e=n.meta;if(e?.taskLinkLabel||e?.execLinkLabel)continue;o.push(r);continue}if("session-card"===n.type){let e=n.props;e.sessionId&&!e.cwd?i.push({sid:e.sessionId,shapeId:r}):o.push(r);continue}if("task-card"===n.type){let e=n.props.cardId;e?a.push({cid:e,shapeId:r}):o.push(r);continue}o.push(r)}if(i.length>0||a.length>0){let t;return t=i.length>0&&a.length>0?`删除 ${i.length} 个会话和 ${a.length} 张任务卡?
2
- 将同时清理画布卡片与关联关系。此操作不可撤销。`:i.length>1?`删除 ${i.length} 个会话?
3
- 将同时删除画布卡片并断开任务卡关联。此操作不可撤销。`:1===i.length?"删除该会话?\n将同时删除画布卡片并断开任务卡关联。此操作不可撤销。":a.length>1?`删除 ${a.length} 张任务卡?
4
- 将删除卡/依赖线/执行会话连线;关联的执行会话保留。`:"删除该任务卡?\n将删除任务卡、依赖线与执行会话连线;关联的执行会话保留。此操作不可撤销。",(0,l.l)({message:t}).then(t=>{if(!t)return;let r=[...i.map(e=>e.shapeId),...a.map(e=>e.shapeId)],n=new Set;for(let t of r)for(let r of e.getBindingsInvolvingShape(t,"arrow"))n.add(r.fromId);for(let t of(e.store.remove([...r,...n,...o]),i))fetch(`/api/sessions/${encodeURIComponent(t.sid)}`,{method:"DELETE"}).then(()=>(0,s.Qp)(t.sid)).catch(e=>console.warn(`[board] 删除会话 ${t.sid} 异常`,e));for(let e of a)fetch(`/api/task-cards/${encodeURIComponent(e.cid)}`,{method:"DELETE"}).catch(t=>console.warn(`[board] 删除任务卡 ${e.cid} 异常`,t))}),e}return o.length>0&&t(o),e}},[]),U=(0,n.useCallback)(e=>{let t=e.getCurrentPageShapes().filter(e=>"session-card"===e.type).map(e=>({x:e.x,y:e.y,w:e.props.w||h,h:e.props.h||x})),r=(e,r)=>t.some(t=>e<t.x+t.w+24&&e+h+24>t.x&&r<t.y+t.h+24&&r+x+24>t.y),n=60,o=0;for(;o<2e3;){for(let e=0;e<4;e+=1){let t=60+e*(h+24);if(!r(t,n))return{x:t,y:n}}n+=x+24,o+=1}return{x:60+120*Math.random(),y:60+120*Math.random()}},[]),_=(0,n.useRef)(!1),Y=(0,n.useCallback)(async()=>{let e=w.current;if(!e||_.current)return;let t=C.current,r=k.current;if(t){_.current=!0;try{var n,i,a,s,l,d,c,u,p;let[g,f]=await Promise.all([fetch(`/api/tasks/${encodeURIComponent(t)}`,{cache:"no-store"}).catch(()=>null),fetch(`/api/task-cards?boardId=${encodeURIComponent(r)}`,{cache:"no-store"}).catch(()=>null)]);if(!g?.ok||!f?.ok)return;let b=await g.json(),y=await f.json(),m=e.getCurrentPageShapes(),w=new Map,k=new Map;for(let e of m){if("session-card"!==e.type)continue;let t=e.props.sessionId;t&&(w.set(t,e.id),k.set(t,e.id))}let j=new Set(b.task?.sessionIds??[]),S=[];for(let[t,r]of w){if(j.has(t))continue;let n=e.getShape(r);n&&n.props.cwd||S.push(r)}if(S.length>0&&e.store.remove(S),!m.some(e=>"session-card"===e.type&&e.props.cwd&&e.props.taskId===t))for(let t of j){if(w.has(t))continue;let r=B.current[t],n=U(e);e.createShape({id:(0,o.n6Y)(`session-${t}`),type:"session-card",x:n.x,y:n.y,props:{sessionId:t,title:r?.title??"Untitled",projectName:r?.projectName??"",messageCount:r?.messageCount??0,lastReply:r?.lastReply??"",lastActivityAt:r?.lastActivityAt??0,phase:"idle",runningMs:0,endedAt:0,stale:!1,expanded:!1,w:h,h:x}})}let C=new Map;for(let e of m)if("task-card"===e.type){let t=e.props.cardId;t&&C.set(t,e.id)}let R=new Map;for(let t of m){if("arrow"!==t.type)continue;let r=t.meta;if(!r?.execLinkLabel)continue;let n=e.getBindingsInvolvingShape(t.id,"arrow"),o="",i="";for(let e of n){let t=e.props.terminal;"start"===t&&(o=e.toId),"end"===t&&(i=e.toId)}if(o){let e=R.get(o)??[];e.push({to:i,arrowId:t.id}),R.set(o,e)}}for(let t of y.cards){let r=C.get(t.id);if(!r)continue;let o=t.sessionId?k.get(t.sessionId):null,d=R.get(r)??[];for(let t of d)t.to!==o&&e.deleteShapes([t.arrowId]);!o||d.some(e=>e.to===o)||(n=e,i=r,a=o,s=t.id,l=t.sessionId,v(n,i,a,`exec-${s}-${l}`,{execLinkLabel:"exec"},!0))}let I=new Map;for(let t of m){if("arrow"!==t.type)continue;let r=t.meta;if(!r?.taskLinkLabel)continue;let n=e.getBindingsInvolvingShape(t.id,"arrow"),o="",i="";for(let e of n){let t=e.props.terminal;"start"===t&&(o=e.toId),"end"===t&&(i=e.toId)}o&&i&&I.set(`${o}->${i}:${r.taskLinkLabel}`,t.id)}let E=new Set;for(let t of y.cards){let r=C.get(t.id);if(r)for(let n of t.links??[]){let t=C.get(n.targetCardId);if(!t)continue;let o=`${r}->${t}:${n.kind}`;E.add(o),I.has(o)||(d=e,c=r,u=t,p=n.kind,v(d,c,u,`link-${c}-${u}-${p}`,{taskLinkLabel:p},!1))}}for(let[t,r]of I)E.has(t)||e.deleteShapes([r])}catch{}finally{_.current=!1}}},[U]);(0,n.useEffect)(()=>{$.current=Y},[Y]),(0,n.useEffect)(()=>{let e;if(!S)return;let t=!1,r=async()=>{await Y(),t||(e=setTimeout(r,1e4))},n=setTimeout(()=>void r(),1200),o=()=>{"visible"===document.visibilityState&&(e&&clearTimeout(e),r())};return document.addEventListener("visibilitychange",o),()=>{t=!0,e&&clearTimeout(e),clearTimeout(n),document.removeEventListener("visibilitychange",o)}},[S,y,Y]);let K=(0,n.useRef)(0),G=(0,n.useCallback)(()=>{let e=w.current;if(!e)return;let t=e.getViewportPageBounds(),r=t.minX+(t.width-840)/2,n=t.minY+(t.height-600)/2;600>t.height&&(n=t.minY+16),840>t.width&&(r=t.minX+16);let i=K.current%3*24;K.current+=1;let a=crypto.randomUUID();e.createShape({id:(0,o.n6Y)(),type:"session-card",x:r+i,y:n+i,props:{sessionId:a,title:"",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!0,cwd:R.current??"",taskId:C.current??"",w:840,h:600}})},[]),q=(0,n.useCallback)((e,t,r)=>{let n=w.current;if(!n)return;let i=B.current[e];n.createShape({id:(0,o.n6Y)(`session-${e}`),type:"session-card",x:t,y:r,props:{sessionId:e,title:i?.title??"Untitled",projectName:i?.projectName??"",messageCount:i?.messageCount??0,lastReply:i?.lastReply??"",lastActivityAt:i?.lastActivityAt??0,phase:"idle",runningMs:0,endedAt:0,stale:!1,expanded:!1,w:h,h:x}})},[]),J=(0,n.useCallback)(async()=>{let e=w.current;if(!e)return;let t=!!C.current,r=e.getCurrentPageShapes(),n=t?r.filter(e=>"session-card"!==e.type).map(e=>e.id):r.map(e=>e.id);n.length>0&&e.deleteShapes(n),t&&Y()},[Y]),V="synced-remote"!==E.status;return(0,n.useMemo)(()=>({board:d,loading:V,error:u,running:T,runningCount:T?.runningSessionIds.length??0,editor:y?w.current:null,syncStore:E,onMount:O,addSessionNode:q,addNewSessionCard:G,clearBoard:J,sessionTitles:H,loadSessionSummaries:N,reloadCanvas:L}),[d,V,u,T,y,E,O,q,G,J,H,N,L])}function v(e,t,r,n,i,a){let s=(0,o.n6Y)(n);e.createShape({id:s,type:"arrow",x:0,y:0,meta:i,props:{start:{x:0,y:0},end:{x:0,y:0},color:"blue",fill:"none",dash:a?"dashed":"solid",arrowheadStart:"none",arrowheadEnd:"arrow",labelColor:"black",font:"sans",richText:{type:"doc",content:[]},scale:1,size:"m",bend:0,kind:"elbow",labelPosition:.5,elbowMidPoint:.5}}),e.createBindings([{type:"arrow",fromId:s,toId:t,props:{terminal:"start",isPrecise:!1,isExact:!1,normalizedAnchor:{x:.5,y:.5},snap:"none"}},{type:"arrow",fromId:s,toId:r,props:{terminal:"end",isPrecise:!1,isExact:!1,normalizedAnchor:{x:.5,y:.5},snap:"none"}}])}},71309:(e,t,r)=>{r.d(t,{eR:()=>s,kz:()=>l,u:()=>i});var n=r(95155),o=r(12115);let i="0 0 0 3px var(--accent), 0 0 24px color-mix(in srgb, var(--accent) 45%, transparent)",a=(0,o.createContext)(null);function s({children:e}){let[t,r]=(0,o.useState)(null),i=(0,o.useRef)(null),l=(0,o.useCallback)(e=>{i.current&&clearTimeout(i.current),i.current=null,r(e),e&&(i.current=setTimeout(()=>r(null),1800))},[]);return(0,o.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]),(0,n.jsx)(a.Provider,{value:{highlightId:t,setHighlight:l},children:e})}function l(){let e=(0,o.useContext)(a);return e||{highlightId:null,setHighlight:()=>{}}}},82264:(e,t,r)=>{r.d(t,{V:()=>E});var n=r(95155),o=r(23312),i=r(12115),a=r(47650),s=r(60015),l=r(39247);function d({stats:e,contextUsage:t}){if(!e)return null;let r=e.tokens,o=e.cost??0,i=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}k`:String(e),a=o>0?o>=.01?`$${o.toFixed(2)}`:"<$0.01":null,s="var(--text-muted)",l=null;if(t?.contextWindow){let e=t.percent;null!==e&&e>90?s="#ef4444":null!==e&&e>70&&(s="rgba(234,179,8,0.95)"),l=null!==e?`${e.toFixed(0)}% / ${i(t.contextWindow)}`:`? / ${i(t.contextWindow)}`}let c={display:"flex",alignItems:"center",gap:4,flexShrink:0};return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,minWidth:0,fontSize:11,color:"var(--text-muted)",whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:[r.input>0&&(0,n.jsxs)("span",{style:c,children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("line",{x1:"5",y1:"8.5",x2:"5",y2:"1.5"}),(0,n.jsx)("polyline",{points:"2 4 5 1.5 8 4"})]}),i(r.input)]}),r.output>0&&(0,n.jsxs)("span",{style:c,children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("line",{x1:"5",y1:"1.5",x2:"5",y2:"8.5"}),(0,n.jsx)("polyline",{points:"2 6 5 8.5 8 6"})]}),i(r.output)]}),r.cacheRead>0&&(0,n.jsxs)("span",{style:c,children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M8.5 5a3.5 3.5 0 1 1-1-2.45"}),(0,n.jsx)("polyline",{points:"6.5 1.5 8.5 2.5 7.5 4.5"})]}),i(r.cacheRead)]}),a&&(0,n.jsx)("span",{style:{display:"flex",alignItems:"center",color:"var(--text)",fontWeight:500,flexShrink:0},children:a}),l&&(0,n.jsxs)("span",{style:{display:"flex",alignItems:"center",gap:4,color:s,flexShrink:0},children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 10 10",fill:"none",stroke:"currentColor",strokeWidth:"1.2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M1 9 L1 5 Q1 1 5 1 Q9 1 9 5 L9 9"}),(0,n.jsx)("line",{x1:"1",y1:"9",x2:"9",y2:"9"})]}),l]})]})}let c=(0,i.forwardRef)(function({sessionId:e,stats:t,contextUsage:r,todos:o},a){let{t:s}=(0,l.s)(),[d,c]=(0,i.useState)(!1),[y,m]=(0,i.useState)(!1),w=(0,i.useRef)(null),k=(0,i.useRef)(null),j=(0,i.useRef)(null);(0,i.useImperativeHandle)(a,()=>({openStats:()=>{c(!0),m(!1)}}),[]);let S=e=>{c("stats"===e),m("todo"===e)},C=(0,i.useCallback)(()=>{window.open(`/api/sessions/${encodeURIComponent(e)}/export?inline=1`,"_blank","noopener,noreferrer")},[e]),R=r?.contextWindow&&null!==r.percent?`${r.percent.toFixed(0)}% / ${f(r.contextWindow)}`:s("nav.stats"),I=o.filter(e=>"completed"!==e.status).length,E=(0,i.useCallback)(()=>{let e=w.current?.closest("[data-session-titlebar]"),t=e?.getBoundingClientRect().width;return t||(w.current?.closest(".tl-html-container")?.getBoundingClientRect().width??300)},[]),L=d||y;return(0,i.useEffect)(()=>{if(!L)return;let e=e=>{let t=e.target;t instanceof Node&&(w.current?.contains(t)||document.querySelector("[data-session-nav-popover]")?.contains(t)||document.querySelector("[data-session-nav-todo]")?.contains(t)||document.querySelector(".glass-top-panel")?.contains(t))||(c(!1),m(!1))},t=e=>{"Escape"===e.key&&(c(!1),m(!1))};return document.addEventListener("pointerdown",e,!0),document.addEventListener("keydown",t,!0),()=>{document.removeEventListener("pointerdown",e,!0),document.removeEventListener("keydown",t,!0)}},[L]),(0,n.jsxs)("div",{ref:w,style:{display:"flex",alignItems:"center",gap:2,padding:"0 4px",position:"relative",pointerEvents:"all",height:"100%"},children:[(0,n.jsxs)("button",{type:"button",onClick:C,title:s("history.full"),"aria-label":s("history.full"),style:u,onMouseEnter:e=>{e.currentTarget.style.color="var(--text)",e.currentTarget.style.background=x},onMouseLeave:e=>{e.currentTarget.style.color="var(--text-muted)",e.currentTarget.style.background="transparent"},children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("path",{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}),(0,n.jsx)("path",{d:"M3 3v5h5"}),(0,n.jsx)("path",{d:"M12 7v5l3 2"})]}),(0,n.jsx)("span",{style:p,children:s("history.full")})]}),(0,n.jsx)("span",{style:h}),(0,n.jsxs)("button",{ref:k,type:"button",onClick:()=>S(d?"none":"stats"),title:s("session.title"),"aria-label":s("session.title"),"aria-expanded":d,style:{...u,background:d?g:"transparent",color:d?"var(--accent)":"var(--text-muted)"},onMouseEnter:e=>{d||(e.currentTarget.style.color="var(--text)",e.currentTarget.style.background=x)},onMouseLeave:e=>{d||(e.currentTarget.style.color="var(--text-muted)",e.currentTarget.style.background="transparent")},children:[(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("line",{x1:"12",y1:"20",x2:"12",y2:"10"}),(0,n.jsx)("line",{x1:"18",y1:"20",x2:"18",y2:"4"}),(0,n.jsx)("line",{x1:"6",y1:"20",x2:"6",y2:"16"})]}),(0,n.jsx)("span",{style:p,children:R})]}),o.length>0&&(0,n.jsxs)("button",{ref:j,type:"button",onClick:()=>S(y?"none":"todo"),title:s("todo.title"),"aria-label":s("todo.title"),"aria-expanded":y,style:{...u,background:y?g:"transparent",color:y?"var(--accent)":"var(--text-muted)"},onMouseEnter:e=>{y||(e.currentTarget.style.color="var(--text)",e.currentTarget.style.background=x)},onMouseLeave:e=>{y||(e.currentTarget.style.color="var(--text-muted)",e.currentTarget.style.background="transparent")},children:[(0,n.jsxs)("svg",{width:"13",height:"13",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"3",y:"4",width:"18",height:"16",rx:"3"}),(0,n.jsx)("path",{d:"M8 9h8M8 13h5"})]}),(0,n.jsx)("span",{style:p,children:s("nav.todo")}),(0,n.jsx)("span",{style:{fontSize:10,fontWeight:700,color:"var(--text-muted)"},children:I>0?I:"✓"})]}),d&&t&&(0,n.jsx)(b,{navRef:w,navWidth:E(),stats:t,contextUsage:r,onClose:()=>c(!1)}),y&&o.length>0&&(0,n.jsx)(v,{navRef:w,navWidth:E(),todos:o,onClose:()=>m(!1)})]})}),u={flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",gap:4,width:"auto",height:26,padding:"0 6px",border:"none",borderRadius:6,background:"transparent",color:"var(--text-muted)",cursor:"pointer",transition:"color 0.12s, background 0.12s"},p={fontSize:11,fontWeight:600,lineHeight:1,whiteSpace:"nowrap"},h={flexShrink:0,width:1,height:16,alignSelf:"center",background:"color-mix(in srgb, var(--border) 70%, transparent)",margin:"0 3px"},x="color-mix(in srgb, var(--glass-bg-strong) 40%, transparent)",g="color-mix(in srgb, var(--glass-bg-strong) 60%, transparent)";function f(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(0)}k`:String(e)}function b({navRef:e,navWidth:t,stats:r,contextUsage:o,onClose:s}){let{t:c}=(0,l.s)(),[u,p]=(0,i.useState)(null),h=(0,i.useRef)(null);if((0,i.useEffect)(()=>{let r=()=>{let r=e.current;if(!r)return;let n=r.getBoundingClientRect(),o=r.closest("[data-session-titlebar]"),i=o?.getBoundingClientRect(),a=i?i.left:Math.min(n.right-t,Math.max(8,n.left));p({top:i?i.bottom:n.bottom,left:a})};r();let n=new ResizeObserver(r);return e.current&&n.observe(e.current),e.current?.closest("[data-session-titlebar]")&&n.observe(e.current.closest("[data-session-titlebar]")),window.addEventListener("resize",r),()=>{n.disconnect(),window.removeEventListener("resize",r)}},[e,t]),(0,i.useEffect)(()=>{let t=t=>{let r=t.target;h.current?.contains(r)||e.current?.contains(r)||s()};return document.addEventListener("pointerdown",t,!0),()=>document.removeEventListener("pointerdown",t,!0)},[e,s]),!u)return null;let x=r.totalActiveMs??0,g=[...r.sessionName?[{label:c("session.name"),value:r.sessionName}]:[],{label:c("session.id"),value:r.sessionId},...x>0?[{label:c("session.totalActive"),value:(e=>{if(e<=0)return"0s";let t=Math.floor(e/1e3),r=Math.floor(t/3600),n=Math.floor(t%3600/60),o=t%60;return r>0?`${r}h ${n}m`:n>0?`${n}m ${o}s`:`${o}s`})(x)}]:[]],v=[[c("session.user"),r.userMessages.toLocaleString()],[c("session.assistant"),r.assistantMessages.toLocaleString()],[c("session.toolCalls"),r.toolCalls.toLocaleString()],[c("session.toolResults"),r.toolResults.toLocaleString()],[c("session.total"),r.totalMessages.toLocaleString()]],y=[[c("session.input"),r.tokens.input.toLocaleString()],[c("session.output"),r.tokens.output.toLocaleString()],...r.tokens.cacheRead>0?[[c("session.cacheRead"),r.tokens.cacheRead.toLocaleString()]]:[],...r.tokens.cacheWrite>0?[[c("session.cacheWrite"),r.tokens.cacheWrite.toLocaleString()]]:[],[c("session.total"),r.tokens.total.toLocaleString()],...r.cost>0?[[c("session.cost"),`$${r.cost.toFixed(4)}`]]:[],...r.contextUsage?.contextWindow?[[c("session.context"),`${null!==r.contextUsage.percent?`${r.contextUsage.percent.toFixed(1)}%`:"?"} / ${f(r.contextUsage.contextWindow)}`]]:[]],m=(e,t,r="left",o=!1)=>(0,n.jsxs)("div",{style:{minWidth:0},children:[(0,n.jsx)("div",{style:{fontSize:11,fontWeight:700,color:"var(--text)",marginBottom:6},children:e}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:o?"max-content minmax(0, 1fr)":"auto minmax(0, 1fr)",columnGap:o?14:12,rowGap:4,justifyContent:o?"start":void 0},children:t.map(([t,o])=>(0,n.jsxs)("div",{style:{display:"contents"},children:[(0,n.jsx)("div",{style:{color:"var(--text-meta)",whiteSpace:"nowrap"},children:t}),(0,n.jsx)("div",{style:{color:"var(--text-muted)",minWidth:0,overflowWrap:"anywhere",textAlign:r,whiteSpace:"normal"},children:o})]},`${e}:${t}`))})]}),w=(0,n.jsx)("div",{ref:h,"data-session-nav-popover":!0,role:"dialog","aria-label":c("session.title"),className:"glass-panel",style:{position:"fixed",top:u.top,left:u.left,width:t,maxHeight:"min(560px, calc(100dvh - 44px))",overflowY:"auto",zIndex:1200,padding:"12px 16px",fontSize:12,lineHeight:1.5,fontFamily:"var(--font-mono)",borderRadius:12,border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)"},children:(0,n.jsxs)("div",{style:{display:"grid",gap:16,fontSize:12,lineHeight:1.5,fontFamily:"var(--font-mono)"},children:[(0,n.jsx)(d,{stats:r,contextUsage:o}),(0,n.jsx)("div",{style:{display:"grid",gridTemplateColumns:"auto minmax(0, 1fr)",columnGap:12,rowGap:8,alignItems:"start"},children:g.map(e=>(0,n.jsxs)("div",{style:{display:"contents"},children:[(0,n.jsx)("div",{style:{color:"var(--text-meta)",whiteSpace:"nowrap"},children:e.label}),(0,n.jsx)("div",{style:{color:"var(--text-muted)",minWidth:0,overflowWrap:"anywhere",wordBreak:"break-word",whiteSpace:"normal"},children:e.value})]},e.label))}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:"minmax(160px, 0.5fr) minmax(240px, 0.7fr)",gap:24},children:[m(c("session.messages"),v),m(c("session.tokens"),y,"right",!0)]})]})});return(0,a.createPortal)(w,document.body)}function v({navRef:e,navWidth:t,todos:r,onClose:o}){let{t:s}=(0,l.s)(),[d,c]=(0,i.useState)(null),u=(0,i.useRef)(null);if((0,i.useEffect)(()=>{let r=()=>{let r=e.current;if(!r)return;let n=r.getBoundingClientRect(),o=r.closest("[data-session-titlebar]"),i=o?.getBoundingClientRect(),a=i?i.left:Math.min(n.right-t,Math.max(8,n.left));c({top:i?i.bottom:n.bottom,left:a})};r();let n=new ResizeObserver(r);return e.current&&n.observe(e.current),e.current?.closest("[data-session-titlebar]")&&n.observe(e.current.closest("[data-session-titlebar]")),window.addEventListener("resize",r),()=>{n.disconnect(),window.removeEventListener("resize",r)}},[e,t]),(0,i.useEffect)(()=>{let t=t=>{let r=t.target;u.current?.contains(r)||e.current?.contains(r)||o()};return document.addEventListener("pointerdown",t,!0),()=>document.removeEventListener("pointerdown",t,!0)},[e,o]),!d)return null;let p=(0,n.jsxs)("div",{ref:u,"data-session-nav-todo":!0,role:"menu","aria-label":s("todo.title"),className:"glass-panel",style:{position:"fixed",top:d.top,left:d.left,width:t,maxHeight:"min(440px, calc(100dvh - 44px))",overflowY:"auto",zIndex:1200,fontFamily:"inherit",borderRadius:12,border:"1px solid color-mix(in srgb, var(--border) 60%, transparent)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"9px 12px",borderBottom:"1px solid color-mix(in srgb, var(--border) 70%, transparent)",fontSize:12,fontWeight:650,color:"var(--text)"},children:[s("todo.title"),(0,n.jsxs)("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-meta)",fontWeight:500},children:[r.filter(e=>"completed"===e.status).length,"/",r.length," ",s("todo.completed")]})]}),0===r.length?(0,n.jsx)("div",{style:{padding:"12px 14px",fontSize:12,color:"var(--text-muted)",fontStyle:"italic"},children:s("todo.empty")}):(0,n.jsx)("div",{style:{maxHeight:330,overflowY:"auto"},children:r.map(e=>{let t="completed"===e.status,r="high"===e.priority?"#ef4444":"medium"===e.priority?"rgba(234,179,8,0.9)":"var(--text-meta)";return(0,n.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",gap:8,padding:"7px 12px",borderBottom:"1px solid color-mix(in srgb, var(--border) 45%, transparent)"},children:[(0,n.jsx)("span",{"aria-hidden":"true",style:{flexShrink:0,marginTop:2,width:13,height:13,borderRadius:4,display:"flex",alignItems:"center",justifyContent:"center",fontSize:10,fontWeight:800,lineHeight:1,color:t?"#fff":"transparent",background:t?"#16a34a":"color-mix(in srgb, var(--border) 70%, transparent)",border:t?"none":"1px solid color-mix(in srgb, var(--border) 80%, transparent)"},children:"✓"}),(0,n.jsx)("span",{style:{flex:1,minWidth:0,fontSize:12,lineHeight:1.4,color:t?"var(--text-meta)":"var(--text)",textDecoration:t?"line-through":"none",wordBreak:"break-word"},children:e.content}),(0,n.jsx)("span",{"aria-hidden":"true",style:{flexShrink:0,marginTop:5,width:7,height:7,borderRadius:"50%",background:r}})]},e.id??e.content)})})]});return(0,a.createPortal)(p,document.body)}var y=r(32782),m=r(15934);function w({sessionId:e,cwd:t,taskId:r}){let{t:d}=(0,l.s)(),{soundEnabled:u,onSoundToggle:p,playDoneSound:h,unlockAudio:x}=(0,y.G)(),g=(0,o.hGv)(),[f,b]=(0,i.useState)(null),[v,j]=(0,i.useState)(null),[S,C]=(0,i.useState)(0),R=(0,i.useRef)(null),I=(0,i.useRef)(null),E=(0,i.useRef)(null),L=!!t,T=(0,i.useRef)(null);T.current=L&&r?{taskId:r}:null;let W=(0,i.useRef)(e),z=(0,i.useRef)(t??null),P=(0,i.useRef)(L),M=(0,i.useRef)(!1),D=(0,i.useRef)(t);(0,i.useEffect)(()=>{let e=D.current;D.current=t,!e||t||P.current&&!M.current&&(P.current=!1,C(e=>e+1))},[t]);let[$,H]=(0,i.useState)(null);(0,i.useEffect)(()=>{let e=R.current?.closest(".tl-html-container"),t=e?.querySelector("[data-session-navbar-slot]")??null;H(e=>e===t?e:t)});let[A,B]=(0,i.useState)(null),[F,N]=(0,i.useState)(null),[O,U]=(0,i.useState)([]),_=(0,i.useCallback)(e=>{B(e)},[]),Y=(0,i.useCallback)(()=>{E.current?.openStats()},[]),K=(0,i.useCallback)(e=>{N(e)},[]),G=(0,i.useCallback)(e=>{U(e)},[]),q=(0,i.useCallback)(e=>{if(!e?.id)return;M.current=!0;let t=R.current?.closest(".tl-html-container"),r=t?.getAttribute("data-node-id");r&&g.updateShapes([{id:`shape:${r}`,type:"session-card",props:{cwd:""}}]),(0,m.PH)(e.id)},[g]),J=(0,i.useCallback)(t=>{(0,m.PK)(e,t)},[e]),V=(0,i.useCallback)(t=>{(0,m.Wd)(e,t)},[e]),X=(0,i.useCallback)(()=>{(0,m.Ho)(e,f?.name)},[e,f?.name]),Q=(0,i.useCallback)(t=>{(0,m.sV)(e,{title:"custom"===t.method?void 0:t.title,method:t.method})},[e]);return((0,i.useEffect)(()=>{let e=R.current;if(!e)return;let t=t=>{if(t.ctrlKey||t.metaKey)return;let r=t.target;r instanceof Node&&e.contains(r)&&function(e,t){let r=e instanceof Element?e:e.parentElement;for(;r&&r instanceof HTMLElement&&r!==t;){let e=r.scrollHeight>r.clientHeight,t=r.scrollWidth>r.clientWidth;if(e||t){let n=getComputedStyle(r),o=n.overflowY,i=n.overflowX;if(e&&("auto"===o||"scroll"===o||"overlay"===o)||t&&("auto"===i||"scroll"===i||"overlay"===i))return!0}r=r.parentElement}return!1}(r,e)&&t.stopPropagation()};return e.addEventListener("wheel",t),()=>{e.removeEventListener("wheel",t)}}),(0,i.useEffect)(()=>{let e=R.current;if(!e)return;let t=e=>{let t=window.getSelection();t&&t.toString().length>0&&e.stopPropagation()};return e.addEventListener("copy",t),()=>e.removeEventListener("copy",t)}),(0,i.useEffect)(()=>{if(L)return;let t=!1;return P.current?(j(null),(async()=>{try{let r=await fetch("/api/sessions",{cache:"no-store"});if(!r.ok)throw Error(`HTTP ${r.status}`);let n=(await r.json()).sessions.find(t=>t.id===e);if(t)return;n&&b(n)}catch(e){console.warn("new session metadata load failed:",e)}})(),()=>{t=!0}):(b(null),j(null),(async()=>{try{let r=await fetch("/api/sessions",{cache:"no-store"});if(!r.ok)throw Error(`HTTP ${r.status}`);let n=(await r.json()).sessions.find(t=>t.id===e);if(t)return;if(!n)return void j(d("boards.sessionMissing"));b(n),C(e=>e+1)}catch(e){t||j(e instanceof Error?e.message:String(e))}})(),()=>{t=!0})},[e,d,L]),v)?(0,n.jsx)("div",{style:k,children:(0,n.jsx)("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"#f87171",fontSize:13},children:v})}):f||L||P.current?(0,n.jsxs)("div",{ref:R,className:"board-workbench",style:k,onPointerDown:e=>{0===e.button&&e.stopPropagation()},onPointerUp:e=>{0===e.button&&e.stopPropagation()},onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[$&&f&&(0,a.createPortal)((0,n.jsx)(c,{ref:E,sessionId:f.id,stats:A,contextUsage:F,todos:O}),$),(0,n.jsx)(s.l,{session:L||P.current?null:f,newSessionCwd:L||P.current?z.current??null:null,newSessionDraftKey:L||P.current?W.current:null,pendingNewSessionTaskRef:L||P.current?T:void 0,chatInputRef:I,inWorkbench:!0,onSessionStatsChange:_,onContextUsageChange:K,onSessionStatsPanelOpen:Y,onTodosChange:G,onOpenFile:J,onSessionCreated:L?e=>q(e):void 0,onSessionForked:V,onAgentEnd:X,onAttentionNeeded:Q,soundEnabled:u,onSoundToggle:p,playDoneSound:h,unlockAudio:x},S)]}):(0,n.jsx)("div",{style:k,children:(0,n.jsx)("div",{style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-muted)",fontSize:13},children:d("boards.loadingSession")})})}let k={display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"visible",color:"var(--text)"};var j=r(64536),S=r(87278),C=r(71309),R=r(91897);let I={sessionId:o.T.string,title:o.T.string,projectName:o.T.string,messageCount:o.T.number,lastReply:o.T.string,phase:o.T.string,runningMs:o.T.number,endedAt:o.T.number,lastActivityAt:o.T.number,stale:o.T.boolean,expanded:o.T.boolean,cwd:o.T.string,taskId:o.T.string,w:o.T.number,h:o.T.number,expandedW:o.T.number,expandedH:o.T.number,collapsedW:o.T.number,collapsedH:o.T.number};class E extends o.A8{static{this.type="session-card"}static{this.props=I}getDefaultProps(){return{sessionId:"",title:"Untitled session",projectName:"",messageCount:0,lastReply:"",phase:"idle",runningMs:0,endedAt:0,lastActivityAt:0,stale:!1,expanded:!1,cwd:"",taskId:"",w:280,h:120,expandedW:0,expandedH:0,collapsedW:0,collapsedH:0}}component(e){return(0,n.jsx)(W,{shape:e})}getIndicatorPath(e){let{w:t,h:r}=e.props,n=new Path2D;return n.roundRect(0,0,t,r,14),n}canResize(){return!0}canScroll(){return!0}hideRotateHandle(){return!0}onResize(e,t){let r=e.props.expanded,n=r?600:j.ZI,i=r?500:j.eo;return(0,o.mfH)(e,t,{minWidth:n,minHeight:i})}onDoubleClick(e){return{id:e.id,type:"session-card",props:L(e)}}}function L(e){return e.props.expanded?{expanded:!1,expandedW:e.props.w,expandedH:e.props.h,w:e.props.collapsedW||j.ZI,h:e.props.collapsedH||j.eo}:{expanded:!0,collapsedW:e.props.w,collapsedH:e.props.h,w:e.props.expandedW||840,h:e.props.expandedH||600}}let T={waiting_model:{dot:"var(--accent)",label:"thinking"},running_tools:{dot:"#f59e0b",label:"tools"},running_command:{dot:"#f59e0b",label:"command"},waiting_input:{dot:"var(--text)",label:"waiting"},idle:{dot:"var(--text-dim)",label:"idle"},"just-ended":{dot:"#10b981",label:"done"}};function W({shape:e}){let{w:t,h:r,title:a,projectName:s,messageCount:l,phase:d,runningMs:c,endedAt:u,lastActivityAt:p,stale:h,sessionId:x,expanded:g,lastReply:f,cwd:b,taskId:v}=e.props,y=(0,o.hGv)(),k=(0,S.G)(y,e.id,"var(--board-card-glass)"),{highlightId:j}=(0,C.kz)(),I=j===e.id,E=!!b,z=(0,i.useRef)(null);(0,i.useEffect)(()=>{let e=z.current;if(!e)return;let t=t=>{t.ctrlKey||t.metaKey||e.scrollHeight>e.clientHeight&&t.stopPropagation()};return e.addEventListener("wheel",t),()=>e.removeEventListener("wheel",t)}),(0,i.useEffect)(()=>{let e=z.current;if(!e)return;let t=e=>{let t=window.getSelection();t&&t.toString().length>0&&e.stopPropagation()};return e.addEventListener("copy",t),()=>e.removeEventListener("copy",t)});let[P,M]=(0,i.useState)(!1),[D,$]=(0,i.useState)(""),H=(0,i.useRef)(null),A=e=>{e.stopPropagation(),$(a||""),M(!0),requestAnimationFrame(()=>{let e=H.current;e&&(e.focus(),e.select())})},B=async()=>{if(!x)return;let t=D.trim();if(M(!1),t&&t!==a){y?.updateShapes([{id:e.id,type:"session-card",props:{title:t}}]);try{(await fetch(`/api/sessions/${encodeURIComponent(x)}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:t})})).ok?(0,m.z6)(x,t):y?.updateShapes([{id:e.id,type:"session-card",props:{title:a}}])}catch{y?.updateShapes([{id:e.id,type:"session-card",props:{title:a}}])}}},F=()=>{y?.bringToFront([e.id])},N=t=>{(t.stopPropagation(),E)?y?.deleteShapes([e.id]):y?.updateShapes([{id:e.id,type:"session-card",props:L(e)}])};if(g)return(0,n.jsxs)("div",{style:{position:"relative",width:t,height:r,zIndex:0},children:[(0,n.jsx)("div",{ref:k,style:{position:"absolute",inset:0,overflow:"hidden",borderRadius:18,pointerEvents:"none",zIndex:-1}}),(0,n.jsxs)(o.hDc,{"data-testid":`session-card-${x}`,"data-node-id":e.id.replace("shape:",""),onPointerDown:F,style:{width:t,height:r,overflow:"visible",borderRadius:18,border:I?"2px solid var(--accent)":`1px solid ${h?"color-mix(in srgb, var(--border) 80%, transparent)":"color-mix(in srgb, var(--border) 60%, transparent)"}`,background:"transparent",boxShadow:I?C.u:"0 2px 12px -6px rgba(0,0,0,0.18)",animation:I?"board-search-glow 1.8s ease-out forwards":void 0,opacity:h?.55:1,pointerEvents:"all",display:"flex",flexDirection:"column",color:"var(--text)",userSelect:"none",padding:8},children:[(0,n.jsxs)("div",{"data-session-titlebar":!0,style:{flexShrink:0,display:"flex",alignItems:"center",gap:6,padding:"0 10px",height:"calc(36px + env(safe-area-inset-top))",borderTopLeftRadius:12,borderTopRightRadius:12,pointerEvents:"none",cursor:"grab",position:"relative"},children:[(0,n.jsx)(R.i,{kind:"session",color:T[d]?.dot??"var(--text-dim)"}),P?(0,n.jsx)("input",{ref:H,value:D,onChange:e=>$(e.target.value),onKeyDown:e=>{"Enter"===e.key&&B(),"Escape"===e.key&&M(!1)},onBlur:()=>void B(),onPointerDown:e=>e.stopPropagation(),style:{flex:1,minWidth:0,fontSize:12.5,fontWeight:600,padding:"2px 6px",border:"1px solid var(--accent)",borderRadius:5,outline:"none",background:"var(--side-input)",color:"var(--text)"}}):(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:600,minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--text)"},children:E?"New session":a||"Untitled"}),!E&&!P&&(0,n.jsx)("button",{type:"button",onClick:A,onPointerDown:e=>e.stopPropagation(),title:"Rename","aria-label":"Rename",style:{flexShrink:0,pointerEvents:"all",display:"flex",alignItems:"center",justifyContent:"center",width:20,height:20,padding:0,border:"none",borderRadius:5,background:"transparent",color:"var(--text-dim)",cursor:"pointer"},children:(0,n.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})})}),(0,n.jsx)("div",{style:{flex:1}}),(0,n.jsx)("div",{"data-session-navbar-slot":!0,style:{display:"flex",alignItems:"center",pointerEvents:"all"}}),(0,n.jsx)("button",{type:"button",onClick:N,onPointerDown:e=>e.stopPropagation(),title:E?"Discard":"Collapse",style:{flexShrink:0,pointerEvents:"all",display:"flex",alignItems:"center",justifyContent:"center",width:22,height:22,padding:0,border:"none",borderRadius:5,background:"transparent",color:"var(--text-dim)",cursor:"pointer"},children:E?(0,n.jsxs)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("polyline",{points:"3 6 5 6 21 6"}),(0,n.jsx)("path",{d:"M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"}),(0,n.jsx)("path",{d:"M10 11v6M14 11v6"}),(0,n.jsx)("path",{d:"M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"})]}):(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M18 15l-6-6-6 6"})})})]}),(0,n.jsx)("div",{style:{flex:1,minHeight:0,padding:"0 4px 0",pointerEvents:"all"},children:(0,n.jsx)(w,{sessionId:x,cwd:b,taskId:v})})]})]});let O=T[d]??T.idle;return(0,n.jsxs)("div",{style:{position:"relative",width:t,height:r,zIndex:0},children:[(0,n.jsx)("div",{ref:k,style:{position:"absolute",inset:0,overflow:"hidden",borderRadius:14,pointerEvents:"none",zIndex:-1}}),(0,n.jsxs)(o.hDc,{"data-testid":`session-card-${x}`,onPointerDown:F,style:{width:t,height:r,overflow:"visible",borderRadius:14,border:I?"2px solid var(--accent)":`1px solid ${h?"color-mix(in srgb, var(--border) 80%, transparent)":"color-mix(in srgb, var(--border) 60%, transparent)"}`,background:"transparent",boxShadow:I?C.u:"0 2px 12px -6px rgba(0,0,0,0.18)",animation:I?"board-search-glow 1.8s ease-out forwards":void 0,opacity:h?.55:1,pointerEvents:"all",display:"flex",flexDirection:"column",padding:"8px 10px 6px",color:"var(--text)",userSelect:"none",cursor:"grab"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,minHeight:20,flexShrink:0},children:[(0,n.jsx)(R.i,{kind:"session",color:O.dot}),P?(0,n.jsx)("input",{ref:H,value:D,onChange:e=>$(e.target.value),onKeyDown:e=>{"Enter"===e.key&&B(),"Escape"===e.key&&M(!1)},onBlur:()=>void B(),onPointerDown:e=>e.stopPropagation(),style:{flex:1,minWidth:0,fontSize:12,fontWeight:600,padding:"2px 6px",border:"1px solid var(--accent)",borderRadius:5,outline:"none",background:"var(--side-input)",color:"var(--text)"}}):(0,n.jsx)("span",{style:{fontSize:12.5,fontWeight:600,minWidth:0,flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",color:"var(--text)"},children:a||"Untitled"}),!E&&!P&&(0,n.jsx)("button",{type:"button",onClick:A,onPointerDown:e=>e.stopPropagation(),title:"Rename","aria-label":"Rename",style:{flexShrink:0,pointerEvents:"all",display:"flex",alignItems:"center",justifyContent:"center",width:20,height:20,padding:0,border:"none",borderRadius:5,background:"transparent",color:"var(--text-dim)",cursor:"pointer",opacity:.65},children:(0,n.jsx)("svg",{width:"11",height:"11",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"})})}),h&&(0,n.jsx)("span",{style:{flexShrink:0,fontSize:9.5,color:"var(--text-dim)",border:"1px solid color-mix(in srgb, var(--border) 70%, transparent)",borderRadius:4,padding:"0 4px"},children:"stale"}),(0,n.jsx)("button",{type:"button",onClick:N,onPointerDown:e=>e.stopPropagation(),title:"Expand",style:{flexShrink:0,pointerEvents:"all",display:"flex",alignItems:"center",justifyContent:"center",width:20,height:20,padding:0,border:"none",borderRadius:5,background:"transparent",color:"var(--text-dim)",cursor:"pointer"},children:(0,n.jsx)("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"M6 9l6 6 6-6"})})})]}),(0,n.jsx)("div",{ref:z,style:{flex:1,minHeight:0,display:"flex",flexDirection:"column",alignItems:"flex-start",justifyContent:"flex-start",gap:2,overflowY:"auto",overflowX:"hidden",padding:"2px 2px 2px 0",scrollbarWidth:"thin",scrollbarColor:"color-mix(in srgb, var(--border) 70%, transparent) transparent"},children:f?(0,n.jsx)("div",{style:{fontSize:11.5,lineHeight:1.45,color:"var(--text-muted)",wordBreak:"break-word",overflowWrap:"anywhere",whiteSpace:"pre-wrap",maxWidth:"100%",userSelect:"text"},children:f}):(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,fontSize:10.5,color:"var(--text-dim)"},children:[s&&(0,n.jsx)("span",{style:{minWidth:0,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",flexShrink:1},children:s}),l>0&&(0,n.jsxs)("span",{style:{flexShrink:0,whiteSpace:"nowrap"},children:[l," msgs"]})]})}),(0,n.jsxs)("div",{style:{flexShrink:0,display:"flex",alignItems:"center",gap:6,fontSize:10,color:"var(--text-dim)",borderTop:"1px solid color-mix(in srgb, var(--border) 50%, transparent)",paddingTop:3},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{flexShrink:0},children:"\uD83D\uDD52"}),(0,n.jsx)("span",{children:function(e){if(e<=0)return"";let t=new Date(e),r=new Date;return t.getFullYear()===r.getFullYear()&&t.getMonth()===r.getMonth()&&t.getDate()===r.getDate()?t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):`${t.getMonth()+1}/${t.getDate()} ${t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`}(p)}),(0,n.jsx)("div",{style:{flex:1}}),c>0&&"idle"!==d&&(0,n.jsx)("span",{style:{fontFamily:"var(--font-mono)",whiteSpace:"nowrap",flexShrink:0},children:function(e){let t=Math.max(1,Math.round(e/1e3));if(t<60)return`${t}s`;let r=Math.floor(t/60);if(r<60)return`${r}m${t%60}s`;let n=Math.floor(r/60);return`${n}h${r%60}m`}(c)})]})]})]})}},87278:(e,t,r)=>{r.d(t,{G:()=>i});var n=r(12115),o=r(23312);function i(e,t,r){let i=(0,n.useRef)(null),a=()=>{let r=i.current;if(!r||!e?.getShape(t)||!e)return;let n=e.getZoomLevel(),a=e.getShapePageTransform(t);if(!a)return;let s=o.V8r.Point(a),l=e.pageToScreen({x:s.x,y:s.y});r.style.width=`${window.innerWidth/n}px`,r.style.height=`${window.innerHeight/n}px`,r.style.transform=`translate(${-l.x/n}px, ${-l.y/n}px)`};return(0,n.useEffect)(()=>{if(!e)return;let t=0,r=()=>{t||(t=requestAnimationFrame(()=>{t=0,a()}))},n=()=>r();return r(),e.on("change",n),()=>{e.off("change",n),t&&cancelAnimationFrame(t)}},[e,t]),e=>{if(!e)return;let t=e.querySelector("[data-glass-layer]");if(t){i.current=t,a();return}let n=document.createElement("div");n.dataset.glassLayer="1",n.style.cssText=`position:absolute;left:0;top:0;pointer-events:none;z-index:-1;will-change:transform;background-image:linear-gradient(${r}, ${r}), var(--glass-bg-image, none);background-repeat:no-repeat,no-repeat;background-size:100% 100%,100% 100%;`,e.prepend(n),i.current=n,a()}}},91897:(e,t,r)=>{r.d(t,{i:()=>i});var n=r(95155);let o={session:"会话",note:"便笺",task:"任务"};function i({kind:e,color:t}){return(0,n.jsxs)("span",{title:`${o[e]} \xb7 状态由圆点颜色表示`,style:{display:"flex",alignItems:"center",gap:4,flexShrink:0,lineHeight:1},children:[(0,n.jsx)("span",{"aria-hidden":!0,style:{width:8,height:8,borderRadius:"50%",background:t,flexShrink:0}}),(0,n.jsx)("span",{style:{fontSize:11,color:"var(--text-muted)",whiteSpace:"nowrap"},children:o[e]})]})}}}]);
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-text-muted:var(--text-muted)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-\[4px\]{margin-bottom:4px}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-\[720px\]{height:720px}.h-full{height:100%}.w-\[720px\]{width:720px}.w-full{width:100%}.max-w-\[820px\]{max-width:820px}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-\[drop-ripple_2\.4s_ease-out_infinite_backwards\]{animation:drop-ripple 2.4s ease-out infinite backwards}.animate-\[drop-zone-in_0\.15s_ease_both\]{animation:drop-zone-in .15s both}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[rgba\(37\,99\,235\,0\.5\)\]{border-color:#2563eb80}.bg-\[rgba\(37\,99\,235\,0\.06\)\]{background-color:#2563eb0f}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pb-\[4px\]{padding-bottom:4px}.text-center{text-align:center}.font-mono{font-family:var(--font-mono)}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.break-all{word-break:break-all}.text-red-400{color:var(--color-red-400)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\]{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_6px_18px_rgba\(37\,99\,235\,0\.18\)\]{--tw-drop-shadow-size:drop-shadow(0 6px 18px var(--tw-drop-shadow-color,#2563eb2e));--tw-drop-shadow:var(--tw-drop-shadow-size)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px)}.backdrop-blur-\[1px\],.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[migrate\:debug\]{migrate:debug}.\[scrollbar-width\:none\]{scrollbar-width:none}.\[sync\:room\]{sync:room}.\[tool\:read\]{tool:read}}:root{--bg:#fff;--bg-panel:#f5f5f5;--bg-hover:#eee;--bg-selected:#e8e8e8;--border:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--border:color-mix(in srgb,var(--text) 20%,transparent)}}:root{--text:#0f172a;--text-muted:#3f4c5f;--text-dim:#8b95a3;--text-meta:#1e293beb;--msg-tool-text:#000}@supports (color:color-mix(in lab,red,red)){:root{--msg-tool-text:color-mix(in srgb,#000 85%,var(--text-muted))}}:root{--accent:#3184f8;--accent-hover:#1d4ed8;--user-bg:#eff6ff;--assistant-bg:#fff;--tool-bg:#f9fafb;--bg-subtle:#0000000a;--side-hover:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--side-hover:color-mix(in srgb,var(--text) 6%,transparent)}}:root{--side-active:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--side-active:color-mix(in srgb,var(--text) 10%,transparent)}}:root{--side-selected:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--side-selected:color-mix(in srgb,var(--accent) 12%,transparent)}}:root{--side-input:var(--glass-bg-strong)}@supports (color:color-mix(in lab,red,red)){:root{--side-input:color-mix(in srgb,var(--glass-bg-strong) 60%,transparent)}}:root{--frame-glass:#ffffffc2;--side-panel:var(--frame-glass);--popover-glass:#ffffffdb;--app-bg-scrim:#0000000d;--glass-bg:#fafafba6;--glass-bg-strong:#ffffffc7;--glass-bg-input:#fafafb85;--panel-glass:#fafafbe0;--panel-glass-todo:#fafafbbf;--panel-glass-minimap:#fafafbbf;--timeline-rail:linear-gradient(to bottom,transparent,var(--text) 8%,var(--text) 92%,transparent)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-rail:linear-gradient(to bottom,transparent,color-mix(in srgb,var(--text) 22%,transparent) 8%,color-mix(in srgb,var(--text) 22%,transparent) 92%,transparent)}}:root{--timeline-dot-bg:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-dot-bg:color-mix(in srgb,var(--text) 16%,transparent)}}:root{--timeline-dot-border:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-dot-border:color-mix(in srgb,var(--text) 30%,transparent)}}:root{--timeline-dot-active-bg:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-dot-active-bg:color-mix(in srgb,var(--accent) 55%,transparent)}}:root{--timeline-dot-active-border:var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-dot-active-border:color-mix(in srgb,var(--accent) 85%,transparent)}}:root{--timeline-dot-active-glow:0 0 0 3px var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--timeline-dot-active-glow:0 0 0 3px color-mix(in srgb,var(--accent) 16%,transparent)}}:root{--file-panel:var(--side-panel);--file-panel-chrome:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--file-panel-chrome:color-mix(in srgb,var(--text) 5%,transparent)}}:root{--file-panel-gutter:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--file-panel-gutter:color-mix(in srgb,var(--text) 3%,transparent)}}:root{--file-panel-paper:var(--bg)}@supports (color:color-mix(in lab,red,red)){:root{--file-panel-paper:color-mix(in srgb,var(--bg) 60%,transparent)}}:root{--board-card-glass:#fafafb8c;--board-blur:12px;--board-scrim-alpha:0;--board-scrim-bg:rgba(0,0,0,var(--board-scrim-alpha));--board-scrim-blur:2px;--glass-blur:8px;--glass-blur-heavy:12px;--glass-blur-panel:10px;--glass-blur-popover:10px;--steer-active:#f97316;--follow-active:#8b5cf6;--user-bg-rgb:219,234,254;--assistant-bg-rgb:252,252,253;--tool-bg-rgb:248,248,250;--bubble-alpha:.44;--user-bg-glass:rgba(var(--user-bg-rgb),var(--bubble-alpha));--user-border-glass:#3b82f638;--assistant-card-glass:rgba(var(--assistant-bg-rgb),var(--bubble-alpha));--tool-bg-glass:rgba(var(--tool-bg-rgb),var(--bubble-alpha));--glass-blur-bubble:8px;--bubble-pad-x:14px;--bubble-pad-y:7px;--bubble-pad-end:8px;--bubble-gap:8px;--bubble-radius:12px;--bubble-inner-radius:7px;--bubble-meta-fs:11px;--bubble-title-fs:12px;--bubble-border:var(--border)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-border:color-mix(in srgb,var(--border) 60%,transparent)}}:root{--bubble-hairline:var(--border)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-hairline:color-mix(in srgb,var(--border) 55%,transparent)}}:root{--bubble-tool-bg:var(--tool-bg-glass)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-tool-bg:color-mix(in srgb,var(--tool-bg-glass) 58%,transparent)}}:root{--bubble-tool-bg-hover:var(--tool-bg-glass)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-tool-bg-hover:color-mix(in srgb,var(--tool-bg-glass) 80%,transparent)}}:root{--bubble-tool-bg-fold:var(--tool-bg-glass)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-tool-bg-fold:color-mix(in srgb,var(--tool-bg-glass) 28%,transparent)}}:root{--bubble-code-bg:var(--tool-bg-glass)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-code-bg:color-mix(in srgb,var(--tool-bg-glass) 58%,transparent)}}:root{--bubble-th-bg:var(--tool-bg-glass)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-th-bg:color-mix(in srgb,var(--tool-bg-glass) 45%,transparent)}}:root{--bubble-file-bg:var(--bg)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-file-bg:color-mix(in srgb,var(--bg) 98%,var(--bg-panel))}}:root{--bubble-file-chrome:var(--bg)}@supports (color:color-mix(in lab,red,red)){:root{--bubble-file-chrome:color-mix(in srgb,var(--bg) 93%,var(--bg-panel))}}:root{--glass-saturate:80%}html.dark{--bg:#1a1a1a;--bg-panel:#242424;--bg-hover:#2e2e2e;--bg-selected:#383838;--border:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark{--border:color-mix(in srgb,var(--text) 25%,transparent)}}html.dark{--text:#f5f7fa;--text-muted:#c7d0da;--text-dim:#8a93a0;--text-meta:#e8eef7eb;--msg-tool-text:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark{--msg-tool-text:color-mix(in srgb,var(--text) 32%,var(--text-muted))}}html.dark{--accent:#60a5fa;--accent-hover:#93c5fd;--side-hover:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark{--side-hover:color-mix(in srgb,var(--text) 6%,transparent)}}html.dark{--side-active:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark{--side-active:color-mix(in srgb,var(--text) 10%,transparent)}}html.dark{--side-selected:var(--accent)}@supports (color:color-mix(in lab,red,red)){html.dark{--side-selected:color-mix(in srgb,var(--accent) 14%,transparent)}}html.dark{--side-input:var(--glass-bg-strong)}@supports (color:color-mix(in lab,red,red)){html.dark{--side-input:color-mix(in srgb,var(--glass-bg-strong) 60%,transparent)}}html.dark{--frame-glass:#1c1c1fad;--side-panel:var(--frame-glass);--popover-glass:#1c1c1fcc;--user-bg:#1e293b;--assistant-bg:#1a1a1a;--tool-bg:#1f2937;--bg-subtle:#ffffff0d;--app-bg-scrim:#0000000f;--board-card-glass:#2222258c;--glass-bg:#1e1e21a6;--glass-bg-strong:#222225c7;--glass-saturate:140%;--glass-bg-input:#22222585;--panel-glass:#222225e0;--panel-glass-todo:#222225bf;--panel-glass-minimap:#222225bf;--glass-blur:8px;--glass-blur-heavy:12px;--steer-active:#d97706;--follow-active:#818cf8;--user-bg-rgb:30,58,95;--assistant-bg-rgb:36,36,39;--tool-bg-rgb:36,36,39;--bubble-alpha:.55;--user-bg-glass:rgba(var(--user-bg-rgb),var(--bubble-alpha));--user-border-glass:#60a5fa47;--assistant-card-glass:rgba(var(--assistant-bg-rgb),var(--bubble-alpha));--tool-bg-glass:rgba(var(--tool-bg-rgb),var(--bubble-alpha));--glass-blur-bubble:6px}.catppuccin-file-icon{background:50%/contain no-repeat var(--catppuccin-icon-light);flex-shrink:0;display:block}html.dark .catppuccin-file-icon{background-image:var(--catppuccin-icon-dark)}@supports ((-webkit-mask-image:url("mask.svg")) or (mask-image:url("mask.svg"))){.catppuccin-file-icon{background:var(--text-dim);mask:center/contain no-repeat var(--catppuccin-icon-light);-webkit-mask:center/contain no-repeat var(--catppuccin-icon-light)}html.dark .catppuccin-file-icon{background:var(--text-dim);mask-image:var(--catppuccin-icon-dark);-webkit-mask-image:var(--catppuccin-icon-dark)}}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}body,html{width:100%;height:100dvh;height:var(--app-viewport-height,100dvh);background:var(--bg);color:var(--text);overscroll-behavior:none;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-size:14px;overflow:hidden}body{background-color:var(--bg);background-image:linear-gradient(var(--app-bg-scrim),var(--app-bg-scrim)),var(--app-bg-image,none),var(--app-bg-fill,none);background-size:100% 100%,var(--app-bg-size,cover),100% 100%;background-position:50%,var(--app-bg-pos-x,center) center,50%;background-repeat:no-repeat,var(--app-bg-repeat,no-repeat),no-repeat;flex-direction:column;display:flex}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.glass-panel{background:var(--panel-glass);-webkit-backdrop-filter:blur(var(--glass-blur-panel)) saturate(var(--glass-saturate));transform:translateZ(0)}.glass-canvas{background-color:var(--frame-glass);background-image:linear-gradient(var(--frame-glass),var(--frame-glass)),var(--glass-bg-image-heavy,none);background-position:0 0,0 0;background-repeat:no-repeat,no-repeat;background-size:100% 100%,100% 100%;background-attachment:fixed}.glass-popover{background:var(--glass-bg-strong)}@supports (color:color-mix(in lab,red,red)){.glass-popover{background:color-mix(in srgb,var(--glass-bg-strong) 60%,transparent)}}.glass-popover{-webkit-backdrop-filter:blur(var(--glass-blur-popover)) saturate(var(--glass-saturate));transform:translateZ(0)}[data-glass-scope=board] .extension-status-shelf,[data-glass-scope=board] .glass-canvas{background-image:none}.glass-top-panel{background:var(--frame-glass);-webkit-backdrop-filter:blur(var(--glass-blur-heavy)) saturate(var(--glass-saturate));border:1px solid var(--border);transform:translateZ(0)}@supports (color:color-mix(in lab,red,red)){.glass-top-panel{border:1px solid color-mix(in srgb,var(--border) 60%,transparent)}}.glass-top-panel{border-top:none;border-radius:0 0 12px 12px;box-shadow:0 1px 2px #0f172a0a,0 4px 16px -8px #0f172a1a}.extension-status-shelf{border-top:1px solid var(--border);flex-wrap:nowrap;flex-shrink:0;align-items:stretch;min-width:0;display:flex;position:relative}@supports (color:color-mix(in lab,red,red)){.extension-status-shelf{border-top:1px solid color-mix(in srgb,var(--border) 60%,transparent)}}.extension-status-shelf{background-color:var(--frame-glass);background-image:linear-gradient(var(--frame-glass),var(--frame-glass)),var(--glass-bg-image-heavy,none);background-position:0 0,0 0;background-repeat:no-repeat,no-repeat;background-size:100% 100%,100% 100%;background-attachment:fixed}.extension-status-left{flex-wrap:wrap;flex:auto;align-items:stretch;min-width:0;display:flex}.extension-status-right{flex:0 auto;justify-content:center;align-items:stretch;min-width:0;display:flex}.extension-widget-panels{z-index:60;overscroll-behavior:contain;scrollbar-gutter:stable;border:1px solid var(--border);flex-direction:column;max-height:min(144px,18dvh);display:flex;position:absolute;bottom:100%;left:0;right:0;overflow:hidden auto}@supports (color:color-mix(in lab,red,red)){.extension-widget-panels{border:1px solid color-mix(in srgb,var(--border) 78%,transparent)}}.extension-widget-panels{background:var(--frame-glass);-webkit-backdrop-filter:blur(var(--glass-blur-heavy)) saturate(var(--glass-saturate));border-radius:8px 8px 0 0;box-shadow:0 -4px 16px #0000001a}.extension-widget-panel{background:0 0;flex-shrink:0;min-width:0;overflow:hidden}.extension-widget-panel-heading{height:26px;color:var(--text);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;padding:5px 12px 0;font-size:11px;font-weight:600;overflow:hidden}.extension-widget-triggers{overscroll-behavior-x:contain;scrollbar-width:none;flex:0 auto;align-items:stretch;min-width:0;height:35px;display:flex;overflow:auto hidden}.extension-widget-triggers::-webkit-scrollbar{display:none}.extension-status-shelf.has-widgets.has-status .extension-widget-triggers{border-right:1px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.extension-status-shelf.has-widgets.has-status .extension-widget-triggers{border-right:1px solid color-mix(in srgb,var(--border) 78%,transparent)}}.extension-widget-trigger{border:0;border-right:1px solid var(--border);flex:0 0 108px;align-items:center;gap:5px;width:108px;height:35px;padding:0 7px;display:flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.extension-widget-trigger{border-right:1px solid color-mix(in srgb,var(--border) 78%,transparent)}}.extension-widget-trigger{color:var(--text-muted);font-family:var(--font-mono);text-align:left;background:0 0;font-size:11px}.extension-widget-update-pulse{z-index:0;opacity:0;pointer-events:none;transition:opacity .18s ease-out;position:absolute;inset:0}.extension-widget-update-pulse:before{background:var(--accent);content:"";opacity:.12;position:absolute;inset:0}.extension-widget-trigger.is-updating .extension-widget-update-pulse{opacity:1}.extension-widget-trigger.is-updating .extension-widget-update-pulse:before{animation:extension-widget-update-pulse .9s ease-in-out infinite alternate}@keyframes extension-widget-update-pulse{0%{opacity:.18}to{opacity:.06}}button.extension-widget-trigger{cursor:pointer;transition:background .12s,color .12s}.extension-widget-trigger.is-expanded,button.extension-widget-trigger:hover{background:var(--bg-hover);color:var(--text)}button.extension-widget-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.extension-widget-placement{z-index:1;width:10px;color:var(--text-dim);flex:0 0 10px;justify-content:center;align-items:center;display:flex;position:relative}.extension-widget-placement-icon{fill:currentColor;flex:0 0 8px;width:8px;height:6px;display:block}.extension-widget-key{z-index:1;min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-weight:600;position:relative;overflow:hidden}.subagent-widget-card{cursor:pointer}.subagent-widget-card:hover{color:var(--text)}.subagent-widget-card.is-expanded{color:var(--text);background:var(--bg-selected);border-top:2px solid var(--accent)}.subagent-widget-card:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}@media (prefers-reduced-motion:reduce){.extension-widget-update-pulse{transition:none}.extension-widget-trigger.is-updating .extension-widget-update-pulse:before{opacity:.12;animation:none}}.extension-widget-content{color:var(--text-muted);font-family:var(--font-mono);overflow-wrap:anywhere;white-space:pre-wrap;margin:0;padding:3px 12px 8px;font-size:14px;line-height:1.45}.extension-status-line{flex:0 auto;align-items:center;min-width:0;height:35px;padding:0 12px;display:flex}.extension-status-text{min-width:0;color:var(--text-muted);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}@media (max-width:640px){.extension-status-right:not(.has-tools){display:none}}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}:root{--font-mono:ui-monospace,"SF Mono",SFMono-Regular,Menlo,Consolas,"PingFang SC","Microsoft YaHei",monospace}.markdown-body,code,pre{font-family:var(--font-mono)}.markdown-body{min-width:0;max-width:100%;color:var(--text);word-break:break-word;font-size:14px;line-height:1.7;overflow-x:hidden}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{color:var(--text);letter-spacing:0;margin:10px 0 5px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:1.16em}.markdown-body h2{font-size:1.08em}.markdown-body h3{color:var(--text);font-size:.98em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ul{padding-left:22px}.markdown-body ol,.markdown-body ul{margin:5px 0 8px;list-style-position:outside}.markdown-body ol{padding-left:30px}.markdown-body li{margin:3px 0;padding-left:2px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body img{border-radius:6px;max-width:100%;height:auto;margin:8px 0;display:block}.markdown-body .markdown-inline-code{background:var(--bg-subtle);color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 70%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:var(--bubble-inner-radius);width:100%;margin:8px 0;overflow:auto hidden}.markdown-body table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:13px}.markdown-body td,.markdown-body th{border:0;border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 10px}.markdown-body tr:last-child td{border-bottom:0}.markdown-body th{background:var(--bubble-th-bg);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body th{font-weight:650}.markdown-body tbody tr:nth-child(2n) td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-skill-body,.markdown-skill-body a,.markdown-skill-body h1,.markdown-skill-body h2,.markdown-skill-body h3,.markdown-skill-body h4,.markdown-skill-body h5,.markdown-skill-body h6{color:var(--text-muted)}.markdown-skill-body a{-webkit-text-decoration-color:var(--text-muted);text-decoration-color:var(--text-muted)}@supports (color:color-mix(in lab,red,red)){.markdown-skill-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--text-muted) 40%,transparent);text-decoration-color:color-mix(in srgb,var(--text-muted) 40%,transparent)}}.markdown-skill-body a:hover{-webkit-text-decoration-color:var(--text-muted);text-decoration-color:var(--text-muted)}.markdown-skill-body code{color:var(--text-muted)}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);border-radius:var(--bubble-inner-radius);background:var(--bubble-code-bg);width:100%;min-width:0;max-width:100%;box-shadow:0 1px 0 var(--border);margin:6px 0;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.markdown-code-block{box-shadow:0 1px 0 color-mix(in srgb,var(--border) 42%,transparent)}}.markdown-code-header{background:var(--bubble-th-bg);border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;font-size:11px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.75}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bubble-code-bg);padding:12px;overflow-x:auto}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);font-size:12px}.mermaid-preview-button{width:100%;color:inherit;cursor:zoom-in;text-align:left;border:0}.mermaid-preview-button:hover{opacity:.85}.mermaid-preview-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.image-preview-dialog{width:100vw;max-width:none;height:100dvh;max-height:none;padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));color:var(--text);background:0 0;border:0;margin:0;position:fixed;inset:0;overflow:hidden}.image-preview-dialog[open]{justify-content:center;align-items:center;display:flex}.image-preview-dialog::backdrop{background:#000000b8}.image-preview-image{object-fit:contain;border-radius:8px;max-width:100%;max-height:100%;display:block;box-shadow:0 20px 60px #0006}.image-preview-close{top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));z-index:1;border:1px solid var(--border);background:var(--bg-panel);width:36px;height:36px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:background-color .12s,color .12s;display:inline-flex;position:absolute;box-shadow:0 2px 10px #00000047}.image-preview-close:hover{background:var(--bg-hover);color:var(--text)}.image-preview-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (pointer:coarse){.image-preview-close{width:44px;height:44px}}.mermaid-zoom-dialog{background:var(--bg);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text);border:0;margin:0;padding:0}.mermaid-zoom-dialog::backdrop{background:#00000059}.mermaid-zoom-layout{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.mermaid-zoom-toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:7px 10px;display:flex}.mermaid-zoom-title{min-width:0;color:var(--text-muted);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.mermaid-zoom-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.mermaid-zoom-stepper{border:1px solid var(--border);background:var(--bg);border-radius:5px;align-items:center;height:24px;display:flex;overflow:hidden}.mermaid-zoom-icon-button,.mermaid-zoom-stepper button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.mermaid-zoom-stepper button{height:22px}.mermaid-zoom-stepper button+.mermaid-zoom-value,.mermaid-zoom-value+button{border-left:1px solid var(--border)}.mermaid-zoom-icon-button{border:1px solid var(--border);border-radius:5px;flex:0 0 24px}.mermaid-zoom-icon-button:hover,.mermaid-zoom-stepper button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.mermaid-zoom-stepper button:disabled{opacity:.35;cursor:default}.mermaid-zoom-icon-button:focus-visible,.mermaid-zoom-stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.mermaid-zoom-value{min-width:48px;height:22px;color:var(--text-muted);font-family:var(--font-mono);text-align:center;-webkit-user-select:none;user-select:none;font-size:12px;line-height:22px}.mermaid-zoom-viewport{background:var(--bg);-webkit-overflow-scrolling:touch;min-width:0;min-height:0;padding:24px;overflow:auto}.mermaid-zoom-canvas{border:1px solid var(--border);background:var(--bg-panel);border-radius:7px;margin:0 auto;padding:12px;transition:width .15s}.mermaid-zoom-canvas svg{height:auto;display:block;width:100%!important;max-width:none!important}@media (max-width:480px){.mermaid-zoom-toolbar{padding-inline:8px}.mermaid-zoom-title{font-size:10px}.mermaid-zoom-viewport{padding:12px}}.file-viewer-toolbar{min-width:0;min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta,.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-viewer-meta{flex:0 auto;min-width:0}.file-viewer-live-indicator{border-radius:50%;flex:0 0 7px;width:7px;height:7px}.file-viewer-controls{gap:6px}.file-viewer-actions,.file-viewer-controls{flex-shrink:0;align-items:center;display:flex}.file-viewer-actions{order:-1;gap:4px;height:24px}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:5px;flex:0 0 24px;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.file-viewer-icon-button:hover{color:var(--text);background:var(--side-hover)!important}.file-viewer-icon-button:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.55}.file-viewer-icon-button:disabled:hover{color:var(--text-dim);background:0 0!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.directory-picker-path:focus-visible{box-shadow:0 0 0 3px var(--accent);border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.directory-picker-path:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{background:var(--bubble-code-bg);border:1px solid var(--border);font-family:var(--font-mono);border-radius:6px;margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code{font-family:var(--font-mono);background:var(--bg-subtle);border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-frontmatter{border:1px solid var(--border);background:var(--bubble-code-bg);border-radius:8px;margin-bottom:20px;padding:14px 16px 12px}.markdown-frontmatter-title{color:var(--text);font-size:1.3em;font-weight:600;line-height:1.35}.markdown-frontmatter-tags{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.markdown-frontmatter-tag{color:var(--text-muted);background:var(--bg-subtle);border:1px solid var(--border);border-radius:999px;padding:0 10px;font-size:12px;line-height:1.6}.markdown-frontmatter-rows{grid-template-columns:auto 1fr;gap:5px 14px;margin:10px 0 0;font-size:13px;line-height:1.55;display:grid}.markdown-frontmatter-row{display:contents}.markdown-frontmatter-row dt{color:var(--text-muted);font-family:var(--font-mono);white-space:nowrap;font-size:.92em}.markdown-frontmatter-row dd{color:var(--text);word-break:break-word;min-width:0;margin:0}.markdown-frontmatter-row dd a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}span.token.table{display:inline}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-icon-float{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}@keyframes drop-ring-pulse{0%,to{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.06)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(1turn)}}@keyframes toast-in{0%{opacity:0;transform:translate(-50%)translateY(-6px)}to{opacity:1;transform:translate(-50%)translateY(0)}}@keyframes board-search-glow{0%{box-shadow:0 0 0 3px var(--accent),0 0 24px color-mix(in srgb,var(--accent) 45%,transparent)}to{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 0%,transparent),0 0 24px color-mix(in srgb,var(--accent) 0%,transparent)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes compaction-breathe{0%,to{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 0%,transparent)}50%{box-shadow:0 0 16px 1px color-mix(in srgb,var(--accent) 22%,transparent)}}@keyframes compaction-dot-breathe{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.85)}}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)scale(1)}to{opacity:0;transform:translateY(8px)scale(.98)}}@keyframes notice-flash{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 55%,transparent)}40%{box-shadow:0 0 0 7px color-mix(in srgb,var(--accent) 0%,transparent);transform:scale(1.03)}60%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 55%,transparent);transform:scale(1)}to{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 0%,transparent);transform:scale(1)}}@keyframes notice-drawer-in{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:translateY(0)scale(1)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}.notice-pill{animation:none!important}.notice-drawer,.notice-drawer-item{animation-duration:.001ms!important}.compaction-status,.compaction-status-dot{animation:none!important}}@keyframes saved-pop{0%{transform:scale(1);box-shadow:0 0 #4ade808c}40%{transform:scale(1.08);box-shadow:0 0 0 6px #4ade8040}to{transform:scale(1);box-shadow:0 0 #4ade8000}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}.panel-resize-handle{z-index:220;cursor:col-resize;touch-action:none;outline:none;flex:0 0 12px;width:12px;margin:0 -6px;position:relative}.panel-resize-handle:after{content:"";pointer-events:none;background:0 0;width:2px;transition:background .12s;position:absolute;top:0;bottom:0;left:5px}.panel-resize-handle.is-resizing:after,.panel-resize-handle:focus-visible:after,.panel-resize-handle:hover:after{background:var(--text-muted)}@supports (color:color-mix(in lab,red,red)){.panel-resize-handle.is-resizing:after,.panel-resize-handle:focus-visible:after,.panel-resize-handle:hover:after{background:color-mix(in srgb,var(--text-muted) 70%,var(--border))}}.right-panel-overlay-backdrop{display:none}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-container>*{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-resizing,.sidebar-container.sidebar-resizing>*{transition:none!important}}@media (min-width:960px){.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-container.right-panel-open{width:var(--right-panel-width,clamp(360px,42vw,640px));min-width:300px}.right-panel-container.right-panel-closed{width:0;min-width:0;border-left:none!important}.right-panel-container>*{width:var(--right-panel-width,clamp(360px,42vw,640px));min-width:300px}.right-panel-container.right-panel-resizing,.right-panel-container.right-panel-resizing>*{transition:none!important}}@media (min-width:641px) and (max-width:959px){.right-panel-resize-handle{display:none}.right-panel-overlay-backdrop{z-index:240;opacity:0;pointer-events:none;background:#0000003d;transition:opacity .2s;display:block;position:fixed;inset:0}.right-panel-overlay-backdrop.is-open{opacity:1;pointer-events:auto}.right-panel-container{top:0;right:env(safe-area-inset-right);z-index:250;width:min(560px,100vw - 48px);min-width:300px;transition:transform .2s;position:fixed;bottom:0;overflow:hidden;box-shadow:-12px 0 32px #0000002e}.right-panel-container.right-panel-open{transform:translate(0)}.right-panel-container.right-panel-closed{pointer-events:none;transform:translate(100%)}.right-panel-container>*{width:100%;min-width:0}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{top:0;left:env(safe-area-inset-left);width:280px;max-width:85vw;height:var(--app-viewport-height,100dvh);transition:transform .25s,box-shadow .25s;bottom:0;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{transform:translateX(calc(-100% - env(safe-area-inset-left)));box-shadow:none}.right-panel-container{inset:0 env(safe-area-inset-right) 0 env(safe-area-inset-left);height:var(--app-viewport-height,100dvh);z-index:250;transition:transform .2s;position:fixed;overflow:hidden}.right-panel-container.right-panel-open{width:auto;min-width:0}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}.right-panel-container>*{width:100%;min-width:0}.panel-resize-handle,.right-panel-overlay-backdrop{display:none}.directory-picker-action,.directory-picker-back,.directory-picker-entry{min-height:44px!important}.directory-picker-back{min-width:44px!important}.directory-picker-footer{flex-wrap:wrap;padding-bottom:max(10px,env(safe-area-inset-bottom))!important}input,select,textarea{font-size:16px!important}}@media (prefers-reduced-transparency:reduce){:root,html.dark{--app-bg-scrim:#fff;--glass-bg:var(--bg);--glass-bg-strong:var(--bg);--frame-glass:var(--bg);--side-panel:var(--frame-glass);--popover-glass:var(--bg);--panel-glass:var(--bg);--panel-glass-todo:var(--bg);--panel-glass-minimap:var(--bg);--glass-blur:0px;--glass-blur-heavy:0px;--glass-blur-panel:0px;--glass-blur-popover:0px;--glass-blur-bubble:0px}html.dark{--app-bg-scrim:#000}}@media (prefers-contrast:more){:root,html.dark{--glass-bg:var(--bg);--glass-bg-strong:var(--bg);--frame-glass:var(--bg);--side-panel:var(--frame-glass);--popover-glass:var(--bg);--panel-glass:var(--bg);--panel-glass-todo:var(--bg);--panel-glass-minimap:var(--bg);--glass-blur:0px;--glass-blur-heavy:0px;--glass-blur-panel:0px;--glass-blur-popover:0px;--glass-blur-bubble:0px}}@keyframes back-to-latest-in{0%{opacity:0;transform:translateY(4px)scale(.92)}to{opacity:1;transform:translateY(0)scale(1)}}.terminal-panel{border:1px solid var(--border);border-radius:10px;flex-direction:column;display:flex;overflow:hidden}@keyframes terminal-panel-in-top{0%{opacity:0;transform:translateY(-6px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes terminal-panel-in-bottombar{0%{opacity:0;transform:translateY(6px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.terminal-panel-top{transform-origin:100% 0;animation:terminal-panel-in-top .15s ease-out both;border-top:none!important;border-radius:0 0 10px 10px!important}.terminal-panel-bottombar{transform-origin:100% 100%;animation:terminal-panel-in-bottombar .15s ease-out both;border-bottom:none!important;border-radius:10px 10px 0 0!important}.terminal-panel-dragged{border-top:1px solid var(--border)!important;border-bottom:1px solid var(--border)!important;border-radius:10px!important}.terminal-panel-hidden{display:none}.terminal-panel-mobile{animation:terminal-panel-in-bottombar .15s ease-out both;inset:10px;width:auto!important;height:auto!important}@media (prefers-reduced-motion:reduce){.terminal-panel-bottombar,.terminal-panel-mobile,.terminal-panel-top{animation:none}}.terminal-tabs{border-bottom:1px solid var(--text);flex-shrink:0;align-items:stretch;gap:2px;height:34px;padding-left:6px;display:flex}@supports (color:color-mix(in lab,red,red)){.terminal-tabs{border-bottom:1px solid color-mix(in srgb,var(--text) 8%,transparent)}}html.dark .terminal-tabs{border-bottom-color:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark .terminal-tabs{border-bottom-color:color-mix(in srgb,var(--text) 6%,transparent)}}.terminal-tab-scroll{scrollbar-width:none;flex:1;align-items:stretch;gap:10px;min-width:0;display:flex;overflow-x:auto}.terminal-tab-scroll::-webkit-scrollbar{display:none}.terminal-group{flex-shrink:0;align-items:stretch;gap:2px;display:flex}.terminal-group-label{letter-spacing:.07em;text-transform:uppercase;color:var(--text);align-items:center;font-size:10px;font-weight:600;display:flex}@supports (color:color-mix(in lab,red,red)){.terminal-group-label{color:color-mix(in srgb,var(--text) 45%,transparent)}}.terminal-group-label{white-space:nowrap}.terminal-chip{cursor:pointer;color:var(--text);border-radius:5px;align-items:center;gap:5px;margin:4px 0;padding:0 4px 0 8px;display:flex}@supports (color:color-mix(in lab,red,red)){.terminal-chip{color:color-mix(in srgb,var(--text) 75%,transparent)}}.terminal-chip{white-space:nowrap;-webkit-user-select:none;user-select:none;font-size:11px;transition:background .1s}.terminal-chip:hover{background:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-chip:hover{background:color-mix(in srgb,var(--text) 8%,transparent)}}.terminal-chip.is-active{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.terminal-chip.is-active{background:color-mix(in srgb,var(--accent) 26%,transparent)}}.terminal-chip.is-active{color:var(--text)}.terminal-chip.is-dead{opacity:.55}.terminal-dot{background:#34d399;border-radius:50%;flex-shrink:0;width:6px;height:6px}.terminal-dot.is-dead{background:#6b7280}.terminal-dot.is-disconnected{background:#f59e0b;box-shadow:0 0 0 1px #f59e0b66}.terminal-chip-cwd{text-overflow:ellipsis;max-width:130px;overflow:hidden}.terminal-chip-close,.terminal-close,.terminal-new{color:var(--text);background:0 0;border:none;justify-content:center;align-items:center;display:flex}@supports (color:color-mix(in lab,red,red)){.terminal-chip-close,.terminal-close,.terminal-new{color:color-mix(in srgb,var(--text) 50%,transparent)}}.terminal-chip-close,.terminal-close,.terminal-new{cursor:pointer;border-radius:4px;flex-shrink:0;transition:color .1s,background .1s}.terminal-chip-close{width:16px;height:16px;margin-left:2px}.terminal-chip-close:hover,.terminal-close:hover{color:var(--text);background:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-chip-close:hover,.terminal-close:hover{background:color-mix(in srgb,var(--text) 12%,transparent)}}.terminal-close,.terminal-new{align-self:center;width:30px;height:24px;margin-right:2px}.terminal-new:hover{color:var(--text);background:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-new:hover{background:color-mix(in srgb,var(--text) 12%,transparent)}}.terminal-close{color:#f87171cc}.terminal-close:hover{color:#fff;background:#ef4444d9}.terminal-chip-close:hover{color:#fff;background:#ef4444cc}.terminal-chip.is-disconnected{opacity:.72}.terminal-cleanup{color:#f59e0bd9;cursor:pointer;background:0 0;border:none;border-radius:4px;flex-shrink:0;justify-content:center;align-self:center;align-items:center;width:30px;height:24px;margin-right:2px;transition:color .1s,background .1s;display:flex}.terminal-cleanup:hover{color:#f59e0b;background:#f59e0b24}.terminal-all-select{appearance:none;max-width:150px;height:24px;color:var(--text);color-scheme:light;background-color:var(--text);align-self:center;margin-right:2px;padding:0 22px 0 8px;font-family:inherit;font-size:11px}@supports (color:color-mix(in lab,red,red)){.terminal-all-select{background-color:color-mix(in srgb,var(--text) 7%,transparent)}}.terminal-all-select{border:1px solid var(--text);background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%236b7280' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-position:right 6px center;background-repeat:no-repeat;background-size:10px 10px}@supports (color:color-mix(in lab,red,red)){.terminal-all-select{border:1px solid color-mix(in srgb,var(--text) 12%,transparent)}}.terminal-all-select{cursor:pointer;border-radius:5px;outline:none;flex-shrink:0;transition:background-color .1s,border-color .1s}html.dark .terminal-all-select{color-scheme:dark;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 24 24' fill='none' stroke='%23a1a1aa' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E")}.terminal-all-select:hover{background-color:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-all-select:hover{background-color:color-mix(in srgb,var(--text) 11%,transparent)}}.terminal-all-select:hover{border-color:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-all-select:hover{border-color:color-mix(in srgb,var(--text) 20%,transparent)}}.terminal-all-select:focus-visible{border-color:var(--accent)}.terminal-all-select optgroup,.terminal-all-select option{color:var(--text);background:var(--bg-panel)}.terminal-error{color:#f87171;border-bottom:1px solid var(--text);flex-shrink:0;padding:6px 12px;font-size:11px}@supports (color:color-mix(in lab,red,red)){.terminal-error{border-bottom:1px solid color-mix(in srgb,var(--text) 8%,transparent)}}.terminal-body{flex:1;min-height:0;padding:6px 8px 8px;position:relative}.terminal-body .xterm,.terminal-body .xterm-screen,.terminal-body .xterm-viewport{background:0 0!important}.terminal-body .xterm{height:100%}.terminal-body .xterm.terminal-attaching{opacity:0}.terminal-body .xterm-viewport{background-color:#0000!important}.terminal-placeholder{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.terminal-placeholder button{border:1px dashed var(--text);border-radius:7px;padding:7px 16px}@supports (color:color-mix(in lab,red,red)){.terminal-placeholder button{border:1px dashed color-mix(in srgb,var(--text) 25%,transparent)}}.terminal-placeholder button{background:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-placeholder button{background:color-mix(in srgb,var(--text) 5%,transparent)}}.terminal-placeholder button{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-placeholder button{color:color-mix(in srgb,var(--text) 85%,transparent)}}.terminal-placeholder button{cursor:pointer;font-size:12px}.terminal-placeholder button:hover{background:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-placeholder button:hover{background:color-mix(in srgb,var(--text) 10%,transparent)}}.terminal-tabs{cursor:default}.terminal-tabs:active{cursor:move}.terminal-resize-handle{z-index:3;cursor:nwse-resize;touch-action:none;width:18px;height:18px;position:absolute;bottom:0;right:0}.terminal-resize-handle:after{content:"";opacity:0;border-bottom:1.5px solid #0000;border-right:1.5px solid #0000;width:7px;height:7px;transition:opacity .12s,border-color .12s;position:absolute;bottom:3px;right:3px}.terminal-resize-handle:hover:after{opacity:1;border-color:var(--text)}@supports (color:color-mix(in lab,red,red)){.terminal-resize-handle:hover:after{border-color:color-mix(in srgb,var(--text) 35%,transparent)}}.terminal-panel-hidden .terminal-resize-handle{display:none}.bottom-band{align-items:stretch;min-width:0;height:36px;display:flex}.bottom-band .extension-status-shelf{flex:auto;min-width:0}.extension-actions{border-top:1px solid var(--border);flex:none;justify-content:center;align-items:stretch;min-width:0;display:flex}@supports (color:color-mix(in lab,red,red)){.extension-actions{border-top:1px solid color-mix(in srgb,var(--border) 60%,transparent)}}.extension-actions{background:var(--frame-glass);-webkit-backdrop-filter:blur(var(--glass-blur-heavy)) saturate(var(--glass-saturate))}.board-workbench .bottom-band{height:36px;overflow:visible}.board-workbench .extension-status-left{flex-wrap:nowrap;min-width:0;overflow:visible}.board-workbench .extension-status-right{flex-shrink:0}.board-workbench .extension-status-right>div{padding:0 6px}.board-workbench .extension-status-line,.board-workbench .extension-widget-triggers{min-width:0;overflow:hidden}.board-workbench .terminal-bar-toggle{display:none}.terminal-bar-toggle{width:110px;color:var(--text-muted);white-space:nowrap;cursor:pointer;background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;gap:5px;padding:0 10px;font-size:11px;transition:color .1s,background .1s;display:flex}.terminal-bar-toggle:hover{color:var(--text);background:var(--bg-hover)}.terminal-bar-toggle.is-open{color:var(--accent);background:var(--bg-selected)}@media (prefers-reduced-transparency:reduce){.terminal-bar-toggle{background:var(--bg-panel)}}.tl-watermark_SEE-LICENSE{display:none!important}.tl-background,.tl-canvas,.tl-container{background:0 0!important}.tl-container .board-workbench,.tl-container .board-workbench *,.tl-container [data-testid^=sticky-note] .markdown-body,.tl-container [data-testid^=sticky-note] .markdown-body *{-webkit-user-select:text;user-select:text}@media (prefers-reduced-transparency:reduce){:root,html.dark{--board-card-glass:#fafafb8c;--board-blur:12px}html.dark{--board-card-glass:#2222258c}}.sticky-note-input::placeholder{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.sticky-note-input::placeholder{color:color-mix(in srgb,var(--text) 18%,transparent)}}html.dark .sticky-note-input::placeholder{color:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark .sticky-note-input::placeholder{color:color-mix(in srgb,var(--text) 28%,transparent)}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}