@rexvane/piweb 0.3.24 → 0.3.26

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 (285) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +11 -11
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +5 -5
  5. package/.next/react-loadable-manifest.json +13 -20
  6. package/.next/required-server-files.js +2 -1
  7. package/.next/required-server-files.json +2 -1
  8. package/.next/routes-manifest.json +6 -8
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  24. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -1
  27. package/.next/server/app/api/agent/[id]/tree/route.js +1 -1
  28. package/.next/server/app/api/agent/[id]/tree/route.js.nft.json +1 -1
  29. package/.next/server/app/api/agent/new/route.js +1 -1
  30. package/.next/server/app/api/agent/new/route.js.nft.json +1 -1
  31. package/.next/server/app/api/agent/resources/route.js +1 -0
  32. package/.next/server/app/api/agent/resources/route.js.nft.json +1 -0
  33. package/.next/server/app/api/agent/resources/route_client-reference-manifest.js +1 -0
  34. package/.next/server/app/api/config/route.js +1 -1
  35. package/.next/server/app/api/config/route.js.nft.json +1 -1
  36. package/.next/server/app/api/files/route.js +1 -1
  37. package/.next/server/app/api/files/route.js.nft.json +1 -1
  38. package/.next/server/app/api/fs/route.js +1 -1
  39. package/.next/server/app/api/fs/route.js.nft.json +1 -1
  40. package/.next/server/app/api/git/route.js +4 -4
  41. package/.next/server/app/api/git/route.js.nft.json +1 -1
  42. package/.next/server/app/api/github/route.js +4 -4
  43. package/.next/server/app/api/github/route.js.nft.json +1 -1
  44. package/.next/server/app/api/growth/route.js +1 -1
  45. package/.next/server/app/api/growth/route.js.nft.json +1 -1
  46. package/.next/server/app/api/health/route.js +1 -1
  47. package/.next/server/app/api/models/defaults/route.js +1 -1
  48. package/.next/server/app/api/models/defaults/route.js.nft.json +1 -1
  49. package/.next/server/app/api/models/route.js +1 -1
  50. package/.next/server/app/api/models/route.js.nft.json +1 -1
  51. package/.next/server/app/api/pi-settings/route.js +1 -1
  52. package/.next/server/app/api/pi-settings/route.js.nft.json +1 -1
  53. package/.next/server/app/api/plugins/route.js +1 -1
  54. package/.next/server/app/api/plugins/route.js.nft.json +1 -1
  55. package/.next/server/app/api/prompts/route.js +1 -1
  56. package/.next/server/app/api/prompts/route.js.nft.json +1 -1
  57. package/.next/server/app/api/remote/route.js +4 -3
  58. package/.next/server/app/api/security/route.js +1 -1
  59. package/.next/server/app/api/security/route.js.nft.json +1 -1
  60. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  61. package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -1
  62. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  63. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -1
  64. package/.next/server/app/api/sessions/import/route.js +2 -2
  65. package/.next/server/app/api/sessions/import/route.js.nft.json +1 -1
  66. package/.next/server/app/api/sessions/route.js +1 -1
  67. package/.next/server/app/api/sessions/route.js.nft.json +1 -1
  68. package/.next/server/app/api/skills/route.js +2 -2
  69. package/.next/server/app/api/skills/route.js.nft.json +1 -1
  70. package/.next/server/app/api/update/route.js +2 -2
  71. package/.next/server/app/api/update/route.js.nft.json +1 -1
  72. package/.next/server/app/api/version/route.js +1 -1
  73. package/.next/server/app/api/version/route.js.nft.json +1 -1
  74. package/.next/server/app/api/web-auth/route.js +2 -2
  75. package/.next/server/app/api/workspaces/route.js +1 -1
  76. package/.next/server/app/api/workspaces/route.js.nft.json +1 -1
  77. package/.next/server/app/icon.svg/route.js +1 -1
  78. package/.next/server/app/index.html +1 -1
  79. package/.next/server/app/index.rsc +6 -7
  80. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -7
  81. package/.next/server/app/index.segments/_full.segment.rsc +6 -7
  82. package/.next/server/app/index.segments/_tree.segment.rsc +2 -3
  83. package/.next/server/app/login/page.js +1 -1
  84. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/login.html +1 -1
  86. package/.next/server/app/login.rsc +3 -3
  87. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  88. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  89. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  90. package/.next/server/app/page.js +1 -1
  91. package/.next/server/app/page.js.nft.json +1 -1
  92. package/.next/server/app/page_client-reference-manifest.js +1 -1
  93. package/.next/server/app-paths-manifest.json +11 -11
  94. package/.next/server/chunks/3924.js +3 -3
  95. package/.next/server/chunks/538.js +1 -1
  96. package/.next/server/chunks/620.js +1 -0
  97. package/.next/server/chunks/6229.js +1 -1
  98. package/.next/server/chunks/7496.js +1 -1
  99. package/.next/server/chunks/7662.js +2 -2
  100. package/.next/server/chunks/8686.js +1 -1
  101. package/.next/server/functions-config-manifest.json +1 -2
  102. package/.next/server/instrumentation.js.nft.json +1 -1
  103. package/.next/server/middleware-build-manifest.js +1 -1
  104. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  105. package/.next/server/pages/404.html +1 -1
  106. package/.next/server/pages/500.html +1 -1
  107. package/.next/server/preview-props.json +3 -3
  108. package/.next/server/server-reference-manifest.json +1 -1
  109. package/.next/static/QJCtqgDKzGS2BdKABd9ch/_buildManifest.js +1 -0
  110. package/.next/static/chunks/2577.86c8538fbf05a8b2.js +1 -0
  111. package/.next/static/chunks/2716.fa561519675a3ff1.js +1 -0
  112. package/.next/static/chunks/2906.8a0e09bb47605cf1.js +1 -0
  113. package/.next/static/chunks/4673.ea36e55005c0f82f.js +1 -0
  114. package/.next/static/chunks/4686-4dc565817a160351.js +1 -0
  115. package/.next/static/chunks/4778.0d2c5d75b791d352.js +1 -0
  116. package/.next/static/chunks/{618.949981da99be7182.js → 618.9a22656b863f242b.js} +2 -2
  117. package/.next/static/chunks/app/_global-error/page-f2d93969c0bcf406.js +1 -0
  118. package/.next/static/chunks/app/api/agent/[id]/events/route-f2d93969c0bcf406.js +1 -0
  119. package/.next/static/chunks/app/api/agent/[id]/route-f2d93969c0bcf406.js +1 -0
  120. package/.next/static/chunks/app/api/agent/[id]/tree/route-f2d93969c0bcf406.js +1 -0
  121. package/.next/static/chunks/app/api/agent/new/route-f2d93969c0bcf406.js +1 -0
  122. package/.next/static/chunks/app/api/agent/resources/route-f2d93969c0bcf406.js +1 -0
  123. package/.next/static/chunks/app/api/config/route-f2d93969c0bcf406.js +1 -0
  124. package/.next/static/chunks/app/api/files/route-f2d93969c0bcf406.js +1 -0
  125. package/.next/static/chunks/app/api/fs/route-f2d93969c0bcf406.js +1 -0
  126. package/.next/static/chunks/app/api/git/route-f2d93969c0bcf406.js +1 -0
  127. package/.next/static/chunks/app/api/github/route-f2d93969c0bcf406.js +1 -0
  128. package/.next/static/chunks/app/api/growth/route-f2d93969c0bcf406.js +1 -0
  129. package/.next/static/chunks/app/api/health/route-f2d93969c0bcf406.js +1 -0
  130. package/.next/static/chunks/app/api/models/defaults/route-f2d93969c0bcf406.js +1 -0
  131. package/.next/static/chunks/app/api/models/route-f2d93969c0bcf406.js +1 -0
  132. package/.next/static/chunks/app/api/pi-settings/route-f2d93969c0bcf406.js +1 -0
  133. package/.next/static/chunks/app/api/plugins/route-f2d93969c0bcf406.js +1 -0
  134. package/.next/static/chunks/app/api/prompts/route-f2d93969c0bcf406.js +1 -0
  135. package/.next/static/chunks/app/api/remote/route-f2d93969c0bcf406.js +1 -0
  136. package/.next/static/chunks/app/api/security/route-f2d93969c0bcf406.js +1 -0
  137. package/.next/static/chunks/app/api/sessions/[id]/export/route-f2d93969c0bcf406.js +1 -0
  138. package/.next/static/chunks/app/api/sessions/[id]/route-f2d93969c0bcf406.js +1 -0
  139. package/.next/static/chunks/app/api/sessions/import/route-f2d93969c0bcf406.js +1 -0
  140. package/.next/static/chunks/app/api/sessions/route-f2d93969c0bcf406.js +1 -0
  141. package/.next/static/chunks/app/api/skills/route-f2d93969c0bcf406.js +1 -0
  142. package/.next/static/chunks/app/api/update/route-f2d93969c0bcf406.js +1 -0
  143. package/.next/static/chunks/app/api/version/route-f2d93969c0bcf406.js +1 -0
  144. package/.next/static/chunks/app/api/web-auth/route-f2d93969c0bcf406.js +1 -0
  145. package/.next/static/chunks/app/api/workspaces/route-f2d93969c0bcf406.js +1 -0
  146. package/.next/static/chunks/app/page-71f2d3b3ed864b3d.js +1 -0
  147. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f2d93969c0bcf406.js +1 -0
  148. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f2d93969c0bcf406.js +1 -0
  149. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f2d93969c0bcf406.js +1 -0
  150. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f2d93969c0bcf406.js +1 -0
  151. package/.next/static/chunks/webpack-ffc09b5fcc8aaa6d.js +1 -0
  152. package/.next/static/css/014eb1f21414e615.css +1 -0
  153. package/.next/static/css/56b129a13637fcfd.css +1 -0
  154. package/.next/static/css/7e3caf797e4cb19a.css +1 -0
  155. package/.next/types/app/api/agent/{[id]/side-chat → resources}/route.ts +3 -3
  156. package/.next/types/routes.d.ts +2 -2
  157. package/.next/types/validator.ts +9 -9
  158. package/README.md +1 -1
  159. package/next.config.ts +1 -1
  160. package/package.json +9 -9
  161. package/scripts/apply-global.mjs +87 -0
  162. package/scripts/launcher.mjs +21 -0
  163. package/scripts/testing/prepare-sdk-tools.mjs +19 -0
  164. package/src/app/api/agent/new/route.ts +2 -1
  165. package/src/app/api/agent/resources/route.ts +18 -0
  166. package/src/app/api/models/route.ts +22 -1
  167. package/src/app/api/plugins/route.ts +3 -2
  168. package/src/app/api/prompts/route.ts +3 -2
  169. package/src/app/api/remote/route.ts +22 -4
  170. package/src/app/api/sessions/[id]/export/route.ts +3 -1
  171. package/src/app/api/skills/route.ts +3 -2
  172. package/src/app/globals.css +1002 -1765
  173. package/src/components/AppShell.tsx +128 -93
  174. package/src/components/ChatInput.tsx +177 -98
  175. package/src/components/ChatWindow.tsx +189 -56
  176. package/src/components/ContextMeter.tsx +33 -9
  177. package/src/components/CustomSelect.module.css +142 -0
  178. package/src/components/CustomSelect.tsx +157 -0
  179. package/src/components/DrawerPanel.tsx +1 -1
  180. package/src/components/ExtensionUI.tsx +9 -3
  181. package/src/components/FileViewer.tsx +24 -21
  182. package/src/components/GitPanel.tsx +35 -13
  183. package/src/components/GrowthTree.tsx +6 -2
  184. package/src/components/ImageViewer.tsx +72 -0
  185. package/src/components/MarkdownBlock.tsx +67 -96
  186. package/src/components/ModelSelector.tsx +36 -39
  187. package/src/components/PiMark.tsx +76 -41
  188. package/src/components/PreviewImage.tsx +33 -0
  189. package/src/components/ProjectPanel.tsx +8 -5
  190. package/src/components/PromptPanel.tsx +85 -20
  191. package/src/components/ProviderSetupModal.module.css +12 -11
  192. package/src/components/ProviderSetupModal.tsx +107 -36
  193. package/src/components/RemoteSection.tsx +53 -2
  194. package/src/components/SessionImportSection.tsx +30 -15
  195. package/src/components/SessionSidebar.tsx +72 -62
  196. package/src/components/SettingsPanel.tsx +49 -151
  197. package/src/components/TrajectoryAnalyzer.module.css +26 -11
  198. package/src/components/TrajectoryView.tsx +11 -3
  199. package/src/components/chat/markdown-actions.tsx +23 -0
  200. package/src/components/composer/ComposerFiles.tsx +224 -0
  201. package/src/components/composer/ComposerImages.tsx +59 -127
  202. package/src/hooks/usePiWeb.ts +47 -2
  203. package/src/i18n.tsx +62 -80
  204. package/src/lib/agent-manager.ts +365 -33
  205. package/src/lib/chat/file-path.ts +54 -0
  206. package/src/lib/chat/skill-expansion.ts +51 -0
  207. package/src/lib/extension-ui.ts +25 -1
  208. package/src/lib/font.ts +37 -39
  209. package/src/lib/git-service.ts +4 -2
  210. package/src/lib/growth-turns.ts +3 -1
  211. package/src/lib/model-draft.ts +69 -2
  212. package/src/lib/models-service.ts +53 -3
  213. package/src/lib/pi.ts +2 -2
  214. package/src/lib/remote/assets.json +1 -1
  215. package/src/lib/remote/supervisor.ts +48 -5
  216. package/src/lib/security-service.ts +2 -1
  217. package/src/lib/session-reader.ts +25 -13
  218. package/src/lib/session-retention.ts +11 -8
  219. package/src/lib/skills-service.ts +2 -1
  220. package/src/lib/slash-command-token.ts +14 -0
  221. package/src/lib/trajectory.ts +111 -15
  222. package/src/lib/types.ts +28 -3
  223. package/src/lib/update-service.ts +29 -9
  224. package/src/lib/workspace-store.ts +36 -1
  225. package/.next/server/app/api/agent/[id]/side-chat/route.js +0 -5
  226. package/.next/server/app/api/agent/[id]/side-chat/route.js.nft.json +0 -1
  227. package/.next/server/app/api/agent/[id]/side-chat/route_client-reference-manifest.js +0 -1
  228. package/.next/server/chunks/3421.js +0 -1
  229. package/.next/static/chunks/2716.44fdf1b21454b961.js +0 -1
  230. package/.next/static/chunks/4673.e261707dce391be7.js +0 -1
  231. package/.next/static/chunks/4686-0cd87513f9ea3538.js +0 -1
  232. package/.next/static/chunks/4778.eddd3a5813f85824.js +0 -1
  233. package/.next/static/chunks/7411.5f79671208209b13.js +0 -1
  234. package/.next/static/chunks/8552.25c39ef4c995eba0.js +0 -1
  235. package/.next/static/chunks/app/_global-error/page-cbaaee0d7aacb85a.js +0 -1
  236. package/.next/static/chunks/app/api/agent/[id]/events/route-cbaaee0d7aacb85a.js +0 -1
  237. package/.next/static/chunks/app/api/agent/[id]/route-cbaaee0d7aacb85a.js +0 -1
  238. package/.next/static/chunks/app/api/agent/[id]/side-chat/route-cbaaee0d7aacb85a.js +0 -1
  239. package/.next/static/chunks/app/api/agent/[id]/tree/route-cbaaee0d7aacb85a.js +0 -1
  240. package/.next/static/chunks/app/api/agent/new/route-cbaaee0d7aacb85a.js +0 -1
  241. package/.next/static/chunks/app/api/config/route-cbaaee0d7aacb85a.js +0 -1
  242. package/.next/static/chunks/app/api/files/route-cbaaee0d7aacb85a.js +0 -1
  243. package/.next/static/chunks/app/api/fs/route-cbaaee0d7aacb85a.js +0 -1
  244. package/.next/static/chunks/app/api/git/route-cbaaee0d7aacb85a.js +0 -1
  245. package/.next/static/chunks/app/api/github/route-cbaaee0d7aacb85a.js +0 -1
  246. package/.next/static/chunks/app/api/growth/route-cbaaee0d7aacb85a.js +0 -1
  247. package/.next/static/chunks/app/api/health/route-cbaaee0d7aacb85a.js +0 -1
  248. package/.next/static/chunks/app/api/models/defaults/route-cbaaee0d7aacb85a.js +0 -1
  249. package/.next/static/chunks/app/api/models/route-cbaaee0d7aacb85a.js +0 -1
  250. package/.next/static/chunks/app/api/pi-settings/route-cbaaee0d7aacb85a.js +0 -1
  251. package/.next/static/chunks/app/api/plugins/route-cbaaee0d7aacb85a.js +0 -1
  252. package/.next/static/chunks/app/api/prompts/route-cbaaee0d7aacb85a.js +0 -1
  253. package/.next/static/chunks/app/api/remote/route-cbaaee0d7aacb85a.js +0 -1
  254. package/.next/static/chunks/app/api/security/route-cbaaee0d7aacb85a.js +0 -1
  255. package/.next/static/chunks/app/api/sessions/[id]/export/route-cbaaee0d7aacb85a.js +0 -1
  256. package/.next/static/chunks/app/api/sessions/[id]/route-cbaaee0d7aacb85a.js +0 -1
  257. package/.next/static/chunks/app/api/sessions/import/route-cbaaee0d7aacb85a.js +0 -1
  258. package/.next/static/chunks/app/api/sessions/route-cbaaee0d7aacb85a.js +0 -1
  259. package/.next/static/chunks/app/api/skills/route-cbaaee0d7aacb85a.js +0 -1
  260. package/.next/static/chunks/app/api/update/route-cbaaee0d7aacb85a.js +0 -1
  261. package/.next/static/chunks/app/api/version/route-cbaaee0d7aacb85a.js +0 -1
  262. package/.next/static/chunks/app/api/web-auth/route-cbaaee0d7aacb85a.js +0 -1
  263. package/.next/static/chunks/app/api/workspaces/route-cbaaee0d7aacb85a.js +0 -1
  264. package/.next/static/chunks/app/page-dc3cb41d91c7432e.js +0 -1
  265. package/.next/static/chunks/next/dist/client/components/builtin/app-error-cbaaee0d7aacb85a.js +0 -1
  266. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-cbaaee0d7aacb85a.js +0 -1
  267. package/.next/static/chunks/next/dist/client/components/builtin/not-found-cbaaee0d7aacb85a.js +0 -1
  268. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-cbaaee0d7aacb85a.js +0 -1
  269. package/.next/static/chunks/webpack-2ac3d76b81895f5b.js +0 -1
  270. package/.next/static/css/08815507594e8b8d.css +0 -1
  271. package/.next/static/css/9fc559c2c4ad1d0f.css +0 -1
  272. package/.next/static/css/c6e2227c36ec2fd6.css +0 -1
  273. package/.next/static/css/f15a853af8b5127f.css +0 -1
  274. package/.next/static/lvKCJmjFj8LuqSojRVLRF/_buildManifest.js +0 -1
  275. package/src/app/api/agent/[id]/side-chat/route.ts +0 -77
  276. package/src/components/side-chat/SideChatPanel.module.css +0 -131
  277. package/src/components/side-chat/SideChatPanel.tsx +0 -189
  278. package/src/components/side-chat/icons.tsx +0 -8
  279. package/src/components/side-chat/request-history.ts +0 -29
  280. package/src/components/side-chat/store.ts +0 -248
  281. package/src/lib/chat/stream-settings.ts +0 -192
  282. package/src/lib/side-chat/context.ts +0 -123
  283. package/src/lib/side-chat/service.ts +0 -191
  284. package/src/lib/side-chat/types.ts +0 -61
  285. /package/.next/static/{lvKCJmjFj8LuqSojRVLRF → QJCtqgDKzGS2BdKABd9ch}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,635,1097,2138,2164,2437,2772,2836,2909,2922,4459,4896,5221,5368,5907,6031,6450,6819,6849,6863,6884,6988,7203,7822,7844,7851,8091,8167,8651,9223,9742,9799,9968],{4441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,635,1097,2138,2164,2437,2772,2836,2909,2922,4459,4896,5221,5368,5907,6031,6450,6819,6849,6863,6884,6988,7203,7822,7844,7851,8091,8167,8651,9223,9742,9799,9968],{4441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,635,1097,2138,2164,2437,2772,2836,2909,2922,4459,4896,5221,5368,5907,6031,6450,6819,6849,6863,6884,6988,7203,7822,7844,7851,8091,8167,8651,9223,9742,9799,9968],{4441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[552,635,1097,2138,2164,2437,2772,2836,2909,2922,4459,4896,5221,5368,5907,6031,6450,6819,6849,6863,6884,6988,7203,7822,7844,7851,8091,8167,8651,9223,9742,9799,9968],{4441:()=>{}},_=>{_.O(0,[8441,3794,7358],()=>_(_.s=4441)),_N_E=_.O()}]);
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e,t,r,o,n,a,i,l,u,d={},s={};function c(e){var t=s[e];if(void 0!==t)return t.exports;var r=s[e]={exports:{}},o=!0;try{d[e].call(r.exports,r,r.exports,c),o=!1}finally{o&&delete s[e]}return r.exports}c.m=d,e=[],c.O=(t,r,o,n)=>{if(r){n=n||0;for(var a=e.length;a>0&&e[a-1][2]>n;a--)e[a]=e[a-1];e[a]=[r,o,n];return}for(var i=1/0,a=0;a<e.length;a++){for(var[r,o,n]=e[a],l=!0,u=0;u<r.length;u++)(!1&n||i>=n)&&Object.keys(c.O).every(e=>c.O[e](r[u]))?r.splice(u--,1):(l=!1,n<i&&(i=n));if(l){e.splice(a--,1);var d=o();void 0!==d&&(t=d)}}return t},c.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return c.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,o){if(1&o&&(e=this(e)),8&o||"object"==typeof e&&e&&(4&o&&e.__esModule||16&o&&"function"==typeof e.then))return e;var n=Object.create(null);c.r(n);var a={};t=t||[null,r({}),r([]),r(r)];for(var i=2&o&&e;"object"==typeof i&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach(t=>a[t]=()=>e[t]);return a.default=()=>e,c.d(n,a),n},c.d=(e,t)=>{for(var r in t)c.o(t,r)&&!c.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((t,r)=>(c.f[r](e,t),t),[])),c.u=e=>"static/chunks/"+e+"."+({618:"9a22656b863f242b",2577:"86c8538fbf05a8b2",2716:"fa561519675a3ff1",2906:"8a0e09bb47605cf1",4673:"ea36e55005c0f82f",4778:"0d2c5d75b791d352",5173:"dfd1cbb795b9a21c"})[e]+".js",c.miniCssF=e=>"static/css/"+({1675:"56b129a13637fcfd",7250:"014eb1f21414e615"})[e]+".css",c.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),c.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o={},c.l=(e,t,r,n)=>{if(o[e])return void o[e].push(t);if(void 0!==r)for(var a,i,l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var d=l[u];if(d.getAttribute("src")==e||d.getAttribute("data-webpack")=="_N_E:"+r){a=d;break}}a||(i=!0,(a=document.createElement("script")).charset="utf-8",a.timeout=120,c.nc&&a.setAttribute("nonce",c.nc),a.setAttribute("data-webpack","_N_E:"+r),a.src=c.tu(e)),o[e]=[t];var s=(t,r)=>{a.onerror=a.onload=null,clearTimeout(f);var n=o[e];if(delete o[e],a.parentNode&&a.parentNode.removeChild(a),n&&n.forEach(e=>e(r)),t)return t(r)},f=setTimeout(s.bind(null,void 0,{type:"timeout",target:a}),12e4);a.onerror=s.bind(null,a.onerror),a.onload=s.bind(null,a.onload),i&&document.head.appendChild(a)},c.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.tt=()=>(void 0===n&&(n={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(n=trustedTypes.createPolicy("nextjs#bundler",n))),n),c.tu=e=>c.tt().createScriptURL(e),c.p="/_next/",a={8068:0},c.f.miniCss=(e,t)=>{if(a[e])t.push(a[e]);else 0!==a[e]&&({1675:1,7250:1})[e]&&t.push(a[e]=new Promise((t,r)=>{var o=c.miniCssF(e),n=c.p+o;if(((e,t)=>{for(var r=document.getElementsByTagName("link"),o=0;o<r.length;o++){var n=r[o],a=n.getAttribute("data-href")||n.getAttribute("href");if("stylesheet"===n.rel&&(a===e||a===t))return n}for(var i=document.getElementsByTagName("style"),o=0;o<i.length;o++){var n=i[o],a=n.getAttribute("data-href");if(a===e||a===t)return n}})(o,n))return t();((e,t,r,o)=>{var n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.onerror=n.onload=a=>{if(n.onerror=n.onload=null,"load"===a.type)r();else{var i=a&&("load"===a.type?"missing":a.type),l=a&&a.target&&a.target.href||t,u=Error("Loading CSS chunk "+e+" failed.\n("+l+")");u.code="CSS_CHUNK_LOAD_FAILED",u.type=i,u.request=l,n.parentNode.removeChild(n),o(u)}},n.href=t;if("function"==typeof _N_E_STYLE_LOAD){var a=n.href,i=n.onload,l=n.onerror;_N_E_STYLE_LOAD(0===a.indexOf(window.location.origin)?new URL(a).pathname:a).then(function(){i&&i.call(n,{type:"load"})},function(){l&&l.call(n,{})})}else document.head.appendChild(n)})(e,n,t,r)}).then(()=>{a[e]=0},t=>{throw delete a[e],t}))},i={8068:0,5483:0,7086:0,3334:0},c.f.j=(e,t)=>{var r=c.o(i,e)?i[e]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(1675|3334|5483|7086|7250|8068)$/.test(e))i[e]=0;else{var o=new Promise((t,o)=>r=i[e]=[t,o]);t.push(r[2]=o);var n=c.p+c.u(e),a=Error();c.l(n,t=>{if(c.o(i,e)&&(0!==(r=i[e])&&(i[e]=void 0),r)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;a.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",a.name="ChunkLoadError",a.type=o,a.request=n,r[1](a)}},"chunk-"+e,e)}},c.O.j=e=>0===i[e],l=(e,t)=>{var r,o,[n,a,l]=t,u=0;if(n.some(e=>0!==i[e])){for(r in a)c.o(a,r)&&(c.m[r]=a[r]);if(l)var d=l(c)}for(e&&e(t);u<n.length;u++)o=n[u],c.o(i,o)&&i[o]&&i[o][0](),i[o]=0;return c.O(d)},(u=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(l.bind(null,0)),u.push=l.bind(null,u.push.bind(u))})();
@@ -0,0 +1 @@
1
+ .TrajectoryAnalyzer_root__8OvwA{--traj-input:#8b949e;--traj-user:var(--dsw-deepseek-450);--traj-model:#a881d5;--traj-model-wait:color-mix(in srgb,var(--traj-model) 48%,var(--dsw-bg-base));--traj-tool:#d09a57;--traj-context:#41b97a;display:flex;height:100%;min-height:0;flex-direction:column;background:var(--dsw-bg-base)}.TrajectoryAnalyzer_toolbar__Oacl7{display:flex;flex:none;height:36px;align-items:center;gap:8px;padding:0 8px;border-bottom:.5px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated)}.TrajectoryAnalyzer_toolbarActions__ifdiJ{display:flex;align-items:center;gap:2px}.TrajectoryAnalyzer_toolbarButton__4Z2x_{display:inline-flex;height:20px;align-items:center;gap:4px;padding:0 5px;border-radius:3px;color:var(--dsw-label-tertiary);font-size:12px}.TrajectoryAnalyzer_toolbarButton__4Z2x_:first-child{padding:0 7px}.TrajectoryAnalyzer_durationIcon__pqiw6{width:12px;height:12px;flex:none;stroke:currentColor;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round}.TrajectoryAnalyzer_foldIcon__c33yJ{width:14px;flex:none;color:var(--dsw-label-tertiary);font-family:var(--font-mono);font-size:14px;line-height:14px;text-align:center}.TrajectoryAnalyzer_toolbarButton__4Z2x_:hover,.TrajectoryAnalyzer_toolbarButton__4Z2x_[aria-pressed=true]{color:var(--dsw-label-primary);background:var(--dsw-hover);transform:translateY(-.5px)}.TrajectoryAnalyzer_searchBox__TCm2z{display:flex;width:min(230px,30vw);height:26px;align-items:center;gap:5px;margin-left:auto;padding:0 8px;border:1.5px solid var(--dsw-border-l2);border-radius:12px;color:var(--dsw-label-secondary);background:var(--dsw-layer-2);transition:border-color .22s var(--isx-ease)}.TrajectoryAnalyzer_searchBox__TCm2z:focus-within{border-color:var(--dsw-label-primary)}.TrajectoryAnalyzer_searchBox__TCm2z input{width:100%;min-width:0;font-size:12px}.TrajectoryAnalyzer_timeline__XCgCp{display:grid;grid-template-columns:54px minmax(0,1fr);height:54px;flex:none;border-bottom:.5px solid var(--dsw-border-l2);background:var(--dsw-module-platform);user-select:none}.TrajectoryAnalyzer_laneLabels__8izl9{position:relative;border-right:.5px solid var(--dsw-border-l1);color:var(--dsw-label-caption);font-size:10px;line-height:1}.TrajectoryAnalyzer_laneLabels__8izl9 span{position:absolute;right:5px;height:10px}.TrajectoryAnalyzer_laneLabels__8izl9 span:first-child{top:8px}.TrajectoryAnalyzer_laneLabels__8izl9 span:nth-child(2){top:22px}.TrajectoryAnalyzer_laneLabels__8izl9 span:nth-child(3){top:36px}.TrajectoryAnalyzer_timelineTrack__PdeZf{position:relative;overflow:hidden;background-image:linear-gradient(to right,transparent 24.9%,var(--dsw-border-l1) 25%,transparent 25.1%,transparent 49.9%,var(--dsw-border-l1) 50%,transparent 50.1%,transparent 74.9%,var(--dsw-border-l1) 75%,transparent 75.1%)}.TrajectoryAnalyzer_timelineSpan__VVeBw{position:absolute;height:9px;min-width:2px;border-radius:2px;background:var(--traj-input);opacity:.82;transition:opacity .12s var(--ds-ease-in-out),box-shadow .12s var(--ds-ease-in-out)}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-kind=user]{background:var(--traj-user)}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-kind=context]{background:var(--traj-context)}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-kind=message]{background:var(--traj-model);opacity:1}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-kind=tool]{background:var(--traj-tool);opacity:1}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-error=true]{background:var(--dsw-danger)}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-muted=true]{opacity:.12}.TrajectoryAnalyzer_timelineSpan__VVeBw:hover{opacity:1}.TrajectoryAnalyzer_timelineSpan__VVeBw[data-selected=true]{z-index:2;opacity:1;box-shadow:0 0 0 1px var(--dsw-module-platform),0 0 0 2px var(--dsw-accent)}.TrajectoryAnalyzer_ledger__zGjcd{min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain}.TrajectoryAnalyzer_groupBody__K0fDf{display:flex;width:100%;flex-direction:column}.TrajectoryAnalyzer_row__IKBr_{display:grid;grid-template-columns:84px minmax(120px,1fr) repeat(4,64px);align-items:center;width:100%;height:38px;padding:0 16px 0 8px;gap:10px;border-bottom:.5px solid var(--dsw-border-l1);background:var(--dsw-bg-base);text-align:left;transition:background .2s var(--isx-ease),transform .2s var(--isx-ease)}.TrajectoryAnalyzer_row__IKBr_:hover{background:var(--dsw-hover);transform:translateX(2px)}.TrajectoryAnalyzer_row__IKBr_[data-selected=true]{background:var(--dsw-hover);box-shadow:inset 3px 0 0 var(--dsw-label-primary)}.TrajectoryAnalyzer_row__IKBr_[data-environment=true]{background:var(--dsw-bg-elevated)}.TrajectoryAnalyzer_row__IKBr_[data-environment=true]:hover,.TrajectoryAnalyzer_row__IKBr_[data-environment=true][data-selected=true]{background:var(--dsw-hover)}.TrajectoryAnalyzer_metric__mxU4O{color:var(--dsw-label-tertiary);font-size:11px}.TrajectoryAnalyzer_inspectorTag__rxP64,.TrajectoryAnalyzer_kindTag__GpW3j{display:inline-flex;width:max-content;max-width:100%;height:22px;align-items:center;padding:0 8px;overflow:hidden;border-radius:999px;border:1px solid var(--dsw-border-l1);color:var(--dsw-label-secondary);background:var(--dsw-module-platform);font-family:var(--font-mono);font-size:10.5px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.TrajectoryAnalyzer_inspectorTag__rxP64[data-kind=user],.TrajectoryAnalyzer_row__IKBr_[data-kind=user] .TrajectoryAnalyzer_kindTag__GpW3j{color:var(--dsw-accent);background:var(--dsw-accent-soft)}.TrajectoryAnalyzer_inspectorTag__rxP64[data-kind=context],.TrajectoryAnalyzer_row__IKBr_[data-kind=context] .TrajectoryAnalyzer_kindTag__GpW3j{color:var(--traj-context);background:color-mix(in srgb,var(--traj-context) 14%,transparent)}.TrajectoryAnalyzer_inspectorTag__rxP64[data-kind=message],.TrajectoryAnalyzer_row__IKBr_[data-kind=message] .TrajectoryAnalyzer_kindTag__GpW3j{color:var(--traj-model);background:color-mix(in srgb,var(--traj-model) 14%,transparent)}.TrajectoryAnalyzer_inspectorTag__rxP64[data-kind=tool],.TrajectoryAnalyzer_row__IKBr_[data-kind=tool] .TrajectoryAnalyzer_kindTag__GpW3j{color:var(--traj-tool);background:color-mix(in srgb,var(--traj-tool) 14%,transparent)}.TrajectoryAnalyzer_inspectorTag__rxP64[data-kind=compacted],.TrajectoryAnalyzer_row__IKBr_[data-kind=compacted] .TrajectoryAnalyzer_kindTag__GpW3j{color:var(--dsw-label-tertiary)}.TrajectoryAnalyzer_rowText__IS0ih{min-width:0;overflow:hidden;color:var(--dsw-label-primary);font-size:12.5px;text-overflow:ellipsis;white-space:nowrap}.TrajectoryAnalyzer_empty__qw9mP{display:flex;height:100%;align-items:center;justify-content:center;color:var(--dsw-label-caption);font-size:13px}.TrajectoryAnalyzer_inspector__7AafK{--traj-model:#a881d5;--traj-tool:#d09a57;display:flex;height:100%;min-height:0;flex-direction:column;background:var(--dsw-bg-base)}.TrajectoryAnalyzer_inspectorHeader__cz73W{display:flex;height:56px;flex:none;align-items:center;gap:9px;padding:0 14px;border-bottom:.5px solid var(--dsw-border-l2)}.TrajectoryAnalyzer_inspectorTitle__eEWJN{min-width:0;flex:1;overflow:hidden;font-family:var(--font-mono);font-size:12px;text-overflow:ellipsis;white-space:nowrap}.TrajectoryAnalyzer_closeButton__VxUyl{display:flex;width:28px;height:28px;align-items:center;justify-content:center;border-radius:7px;color:var(--dsw-label-tertiary)}.TrajectoryAnalyzer_closeButton__VxUyl:hover{color:var(--dsw-label-primary);background:var(--dsw-hover)}.TrajectoryAnalyzer_inspectorTabs__Kh_AZ{display:flex;height:42px;flex:none;align-items:flex-end;gap:22px;padding:0 14px;border-bottom:.5px solid var(--dsw-border-l2)}.TrajectoryAnalyzer_inspectorTabs__Kh_AZ button{position:relative;height:34px;color:var(--dsw-label-tertiary);font-size:12.5px}.TrajectoryAnalyzer_inspectorTabs__Kh_AZ button[aria-selected=true]{color:var(--dsw-accent)}.TrajectoryAnalyzer_inspectorTabs__Kh_AZ button[aria-selected=true]:after{position:absolute;right:0;bottom:-1px;left:0;height:2px;border-radius:2px;background:var(--dsw-accent);content:""}.TrajectoryAnalyzer_inspectorBody__NugnH{min-height:0;flex:1;overflow-y:auto;padding:10px 0 24px}.TrajectoryAnalyzer_summaryList__vHd3B{margin:0;padding:0 14px 8px}.TrajectoryAnalyzer_summaryList__vHd3B>div{display:grid;grid-template-columns:88px minmax(0,1fr);min-height:30px;align-items:center;font-size:12.5px}.TrajectoryAnalyzer_summaryList__vHd3B dt{color:var(--dsw-label-tertiary)}.TrajectoryAnalyzer_summaryList__vHd3B dd{min-width:0;margin:0;overflow:hidden;color:var(--dsw-label-primary);text-overflow:ellipsis;white-space:nowrap}.TrajectoryAnalyzer_summaryList__vHd3B dd[data-error=true]{color:var(--dsw-danger)}.TrajectoryAnalyzer_monoValue__7oDjZ{font-family:var(--font-mono);font-size:11px}.TrajectoryAnalyzer_payloadSection__JPp_f h3{margin:0;padding:8px 14px 5px;color:var(--dsw-label-secondary);font-size:12.5px;font-weight:650}.TrajectoryAnalyzer_payloadSection__JPp_f pre{margin:0;padding:8px 14px 14px;overflow-wrap:anywhere;color:var(--dsw-label-primary);font-family:var(--font-ui);font-size:12.5px;line-height:1.65;white-space:pre-wrap}.TrajectoryAnalyzer_payloadSection__JPp_f pre[data-mono=true]{background:var(--dsw-hover);font-family:var(--font-mono);font-size:11.5px}@media (max-width:980px){.TrajectoryAnalyzer_row__IKBr_{grid-template-columns:74px minmax(100px,1fr) 52px 52px}.TrajectoryAnalyzer_row__IKBr_ .TrajectoryAnalyzer_metric__mxU4O:nth-last-child(n+3){display:none}}@media (max-width:640px){.TrajectoryAnalyzer_toolbar__Oacl7{padding-left:46px}.TrajectoryAnalyzer_toolbarButton__4Z2x_{padding:0 4px;font-size:11px}.TrajectoryAnalyzer_searchBox__TCm2z{width:112px}.TrajectoryAnalyzer_row__IKBr_{grid-template-columns:70px minmax(0,1fr) 48px;gap:6px;padding:0 8px}.TrajectoryAnalyzer_row__IKBr_ .TrajectoryAnalyzer_metric__mxU4O{display:none}.TrajectoryAnalyzer_row__IKBr_ .TrajectoryAnalyzer_metric__mxU4O:last-child{display:block}}
@@ -0,0 +1 @@
1
+ .CustomSelect_wrap__oiRn_{position:relative;display:inline-block}.CustomSelect_trigger__HTxwt{display:flex;align-items:center;justify-content:space-between;gap:6px;border:.5px solid var(--dsw-border-l2);background:var(--dsw-glass-input);color:var(--dsw-label-primary);cursor:pointer;text-align:left;user-select:none;transition:border-color .18s var(--isx-ease),box-shadow .18s var(--isx-ease),background .18s var(--isx-ease)}.CustomSelect_trigger__HTxwt:hover:not(:disabled){border-color:var(--dsw-border-l3);background:var(--dsw-bg-elevated)}.CustomSelect_trigger__HTxwt:focus-visible,.CustomSelect_trigger__HTxwt[data-open=true]{border-color:var(--dsw-accent);box-shadow:0 0 0 2px var(--dsw-accent-soft);outline:none}.CustomSelect_trigger__HTxwt:disabled{opacity:.45;cursor:not-allowed}.CustomSelect_sizeSm__u7Yk8{min-height:32px;padding:0 9px;font-size:12.5px;border-radius:10px}.CustomSelect_sizeMd__Uw1i1{width:100%;min-height:42px;padding:0 13px;font-size:13.5px;border-radius:13px}.CustomSelect_label__7_kg8{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.CustomSelect_chevron__Nqa1g{flex:none;color:var(--dsw-label-secondary);transition:transform .2s var(--isx-ease)}.CustomSelect_chevronOpen__3Do3Z{transform:rotate(180deg)}.CustomSelect_menu___tEPS{position:absolute;top:calc(100% + 5px);left:0;min-width:100%;width:max-content;max-width:300px;z-index:100;max-height:220px;overflow-y:auto;padding:4px;border:.5px solid var(--dsw-border-l2);border-radius:12px;background:var(--dsw-glass-popover);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);box-shadow:0 8px 24px rgba(0,0,0,.35);animation:CustomSelect_popover-in__SJuUo .15s cubic-bezier(.16,1,.3,1)}.CustomSelect_menuFlip__jJRsr{top:auto;bottom:calc(100% + 5px)}@keyframes CustomSelect_popover-in__SJuUo{0%{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.CustomSelect_option__5wBtO{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;padding:6px 9px;border-radius:8px;font-size:12.5px;color:var(--dsw-label-primary);background:transparent;border:none;cursor:pointer;text-align:left;user-select:none;transition:background .12s ease,color .12s ease}.CustomSelect_option__5wBtO:hover:not(:disabled){background:var(--dsw-hover)}.CustomSelect_optionSelected__i3yKA{color:var(--dsw-accent);font-weight:550;background:var(--dsw-accent-soft)}.CustomSelect_option__5wBtO:disabled{opacity:.4;cursor:not-allowed}.CustomSelect_check__hSGwB{flex:none;color:var(--dsw-accent)}.ProviderSetupModal_mask__wwU3u{position:fixed;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;padding:24px;background:var(--dsw-mask);backdrop-filter:blur(8px)}.ProviderSetupModal_dialog__BxSeI{width:min(760px,100%);max-height:min(820px,calc(100vh - 48px));display:flex;flex-direction:column;overflow:hidden;border:.5px solid var(--dsw-border-l2);border-radius:28px;background:var(--dsw-glass-modal);box-shadow:var(--dsw-elevation-prominent)}.ProviderSetupModal_builtinDialog__vA7_B{overflow:visible}.ProviderSetupModal_header__Nvgmb{display:flex;align-items:center;justify-content:space-between;padding:22px 24px 14px}.ProviderSetupModal_title__ZIIXp{font-size:17px;font-weight:590;letter-spacing:-.015em}.ProviderSetupModal_body__QAlNu{min-height:0;overflow-y:auto;padding:6px 24px 22px}.ProviderSetupModal_builtinBody___4EFo{overflow:visible}.ProviderSetupModal_field__ZMO8M{display:flex;flex-direction:column;gap:7px;margin-top:18px}.ProviderSetupModal_field__ZMO8M:first-child{margin-top:0}.ProviderSetupModal_label__4_BYS{font-size:13px;font-weight:580;color:var(--dsw-label-secondary)}.ProviderSetupModal_hint__yCwPV{font-size:12px;line-height:1.55;color:var(--dsw-label-caption)}.ProviderSetupModal_input__YZYV5,.ProviderSetupModal_providerTrigger__TXtau,.ProviderSetupModal_select___PTpP{width:100%;min-height:44px;border:.5px solid var(--dsw-border-l2);border-radius:13px;background:var(--dsw-glass-input);color:var(--dsw-label-primary)}.ProviderSetupModal_input__YZYV5{padding:0 13px;font-size:13.5px}.ProviderSetupModal_select___PTpP{padding:0 38px 0 13px;font-size:13.5px}.ProviderSetupModal_input__YZYV5:focus,.ProviderSetupModal_providerTrigger__TXtau[data-open=true],.ProviderSetupModal_select___PTpP:focus{border-color:var(--dsw-accent);box-shadow:0 0 0 2px var(--dsw-accent-soft)}.ProviderSetupModal_picker__VQdQc{position:relative;z-index:4;width:min(440px,100%)}.ProviderSetupModal_providerTrigger__TXtau{display:flex;align-items:center;gap:11px;padding:7px 11px;text-align:left}.ProviderSetupModal_providerText__l9bwJ{min-width:0;flex:1}.ProviderSetupModal_providerName__Hwwfg{display:block;overflow:hidden;font-size:13.5px;font-weight:570;text-overflow:ellipsis;white-space:nowrap}.ProviderSetupModal_providerMeta____3za{display:block;overflow:hidden;font-size:11.5px;line-height:1.35;color:var(--dsw-label-caption);text-overflow:ellipsis;white-space:nowrap}.ProviderSetupModal_menu__zO5CU{position:absolute;top:calc(100% + 8px);left:0;z-index:10;width:min(480px,calc(100vw - 64px));overflow:hidden;border:.5px solid var(--dsw-border-l2);border-radius:18px;background:var(--dsw-glass-popover);box-shadow:var(--dsw-elevation-panel)}.ProviderSetupModal_searchWrap__5yw1r{position:relative;padding:10px;border-bottom:.5px solid var(--dsw-border-l1)}.ProviderSetupModal_searchIcon__BZeD1{position:absolute;top:50%;left:21px;display:inline-flex;color:var(--dsw-label-caption);transform:translateY(-50%)}.ProviderSetupModal_search__j_n_8{width:100%;height:36px;padding:0 11px 0 34px;border-radius:10px;background:var(--dsw-hover);font-size:12.5px}.ProviderSetupModal_providerList__bMnFj{max-height:min(360px,46vh);overflow-y:auto;padding:6px}.ProviderSetupModal_providerRow__Zf7fg{display:flex;width:100%;align-items:center;gap:11px;padding:8px 9px;border-radius:13px;text-align:left}.ProviderSetupModal_providerRow__Zf7fg:hover{background:var(--dsw-hover)}.ProviderSetupModal_providerRow__Zf7fg[data-selected=true]{background:var(--dsw-accent-soft)}.ProviderSetupModal_selectedMark___8UDb{display:inline-flex;flex:none;color:var(--dsw-accent)}.ProviderSetupModal_empty__4V1WK{padding:28px 14px;font-size:12.5px;text-align:center;color:var(--dsw-label-caption)}.ProviderSetupModal_advanced__kWaTH{margin-top:20px;border-top:.5px solid var(--dsw-border-l2)}.ProviderSetupModal_advancedButton__efHwl{display:flex;width:100%;height:48px;align-items:center;gap:6px;font-size:13.5px;font-weight:540;text-align:left}.ProviderSetupModal_advancedButton__efHwl svg{transition:transform .16s ease}.ProviderSetupModal_advancedButton__efHwl[data-open=true] svg{transform:rotate(180deg)}.ProviderSetupModal_catalog__mXakU{margin-top:18px;padding-top:18px;border-top:.5px solid var(--dsw-border-l2)}.ProviderSetupModal_catalogHeader__0MDA4{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.ProviderSetupModal_catalogStatus__JRz0P{font-size:12px;color:var(--dsw-label-caption)}.ProviderSetupModal_discoverButton__GGuZX{flex:none;font-size:12px;color:var(--dsw-label-tertiary);text-decoration:none}.ProviderSetupModal_discoverButton__GGuZX:not(:disabled):hover{color:var(--dsw-accent);text-decoration:underline}.ProviderSetupModal_discoverButton__GGuZX:disabled{cursor:default;opacity:.48}.ProviderSetupModal_discoverControls___0_l8{display:flex;flex:none;align-items:center;gap:12px}.ProviderSetupModal_modelEmpty__h1N_8{margin-top:13px;padding:17px;border:.5px dashed var(--dsw-border-l3);border-radius:13px;font-size:12px;line-height:1.55;text-align:center;color:var(--dsw-label-caption)}.ProviderSetupModal_modelList__jkYVz{display:flex;flex-direction:column;gap:8px;margin-top:13px}.ProviderSetupModal_headerRow__2JBNp{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr) 34px;gap:8px;align-items:center}.ProviderSetupModal_headerRow__2JBNp+.ProviderSetupModal_headerRow__2JBNp{margin-top:8px}.ProviderSetupModal_modelRow__mHfRv{display:grid;grid-template-columns:28px minmax(0,1.2fr) minmax(0,1fr) 34px;gap:8px;align-items:center}.ProviderSetupModal_modelRow__mHfRv .ProviderSetupModal_input__YZYV5{min-height:40px}.ProviderSetupModal_removeModel___LjE1{display:inline-flex;height:40px;align-items:center;justify-content:center;border:.5px solid var(--dsw-border-l2);border-radius:11px;color:var(--dsw-label-tertiary)}.ProviderSetupModal_removeModel___LjE1:hover{background:rgba(236,19,19,.1);color:var(--dsw-danger)}.ProviderSetupModal_addModel__Q3KOU{display:inline-flex;height:34px;align-items:center;gap:6px;margin-top:12px;padding:0 12px;border:.5px solid var(--dsw-border-l3);border-radius:999px;font-size:12px}.ProviderSetupModal_error__EAOK6{margin-top:14px;padding:9px 11px;border-radius:10px;background:rgba(236,19,19,.1);color:var(--dsw-danger);font-size:12px}.ProviderSetupModal_footer__zVp_c{display:flex;flex:none;justify-content:flex-end;gap:10px;padding:14px 24px 20px;border-top:.5px solid var(--dsw-border-l1)}.ProviderSetupModal_footerButton__FL58k{min-width:76px;height:40px;padding:0 18px;border:.5px solid var(--dsw-border-l3);border-radius:999px;font-size:13.5px}.ProviderSetupModal_primary__ArzeF{border-color:transparent;background:var(--dsw-label-primary);color:var(--dsw-bg-base);font-weight:570}.ProviderSetupModal_footerButton__FL58k:disabled{cursor:default;opacity:.42}@media (max-width:640px){.ProviderSetupModal_mask__wwU3u{align-items:flex-end;padding:8px}.ProviderSetupModal_dialog__BxSeI{max-height:calc(100vh - 16px);border-radius:22px}.ProviderSetupModal_header__Nvgmb{padding:18px 16px 10px}.ProviderSetupModal_body__QAlNu{padding:4px 16px 18px}.ProviderSetupModal_footer__zVp_c{padding:12px 16px 16px}.ProviderSetupModal_picker__VQdQc{width:100%}.ProviderSetupModal_menu__zO5CU{position:fixed;top:auto;right:8px;bottom:8px;left:8px;width:auto;max-height:72vh}.ProviderSetupModal_providerList__bMnFj{max-height:calc(72vh - 58px)}.ProviderSetupModal_modelRow__mHfRv{grid-template-columns:minmax(0,1fr) 34px}.ProviderSetupModal_modelRow__mHfRv .ProviderSetupModal_input__YZYV5:nth-child(2){grid-column:1/-1;grid-row:2}}.ProviderSetupModal_modelEntry__G067u{display:flex;flex-direction:column;gap:6px;padding:6px;border:.5px solid var(--dsw-border-l2);border-radius:12px}.ProviderSetupModal_rowToggle__kc_Za{display:inline-flex;align-items:center;justify-content:center;width:28px;height:40px;flex:none;color:var(--dsw-label-tertiary)}.ProviderSetupModal_capacityRow__0miDX{display:flex;align-items:center;gap:12px;padding-left:28px;flex-wrap:wrap}.ProviderSetupModal_capacityField___TX70{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--dsw-label-tertiary)}.ProviderSetupModal_capacityField___TX70 span{flex:none}.ProviderSetupModal_capacityField___TX70 .ProviderSetupModal_input__YZYV5,.ProviderSetupModal_capacityField___TX70 input{width:90px}.ProviderSetupModal_capacityHint__z_5re{font-size:11px;color:var(--dsw-label-caption)}.ProviderSetupModal_rowError__2vHrG{padding-left:28px;font-size:11.5px;color:var(--dsw-danger)}.ProviderSetupModal_catalogError__ZL5D7{font-size:12px;color:var(--dsw-danger);padding:4px 0}.ProviderSetupModal_catalogHint__ws49_{margin-top:8px;font-size:11.5px;line-height:1.5;color:var(--dsw-label-caption)}.ProviderSetupModal_candidateMask__YUZn7{position:fixed;inset:0;z-index:130;display:flex;align-items:center;justify-content:center;background:var(--dsw-mask)}.ProviderSetupModal_candidateDialog__upECk{display:flex;flex-direction:column;width:460px;max-width:92vw;max-height:70vh;border-radius:20px;background:var(--dsw-glass-modal);box-shadow:var(--dsw-elevation-prominent);padding:16px;gap:10px}.ProviderSetupModal_candidateHeader__bUvHV{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:14px;font-weight:500;color:var(--dsw-label-primary)}.ProviderSetupModal_candidateList__JRufC{flex:1;min-height:120px;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.ProviderSetupModal_candidateRow__Omm_o{display:flex;align-items:center;gap:10px;padding:6px 8px;border-radius:10px;cursor:pointer;font-size:13px;color:var(--dsw-label-primary)}.ProviderSetupModal_candidateRow__Omm_o:hover{background:var(--dsw-hover)}.ProviderSetupModal_candidateRow__Omm_o[data-disabled]{cursor:default;color:var(--dsw-label-tertiary)}.ProviderSetupModal_candidateRow__Omm_o[data-disabled]:hover{background:transparent}.ProviderSetupModal_candidateTag__lE99_{flex:none;margin-left:auto;font-size:11px;color:var(--dsw-label-caption)}.ProviderSetupModal_candidateId__7Hy7u{font-family:var(--font-mono);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ProviderSetupModal_candidateName__D4rXE{color:var(--dsw-label-tertiary);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ProviderSetupModal_candidateActions__iptOe{display:flex;align-items:center;gap:10px;padding-top:8px;border-top:.5px solid var(--dsw-border-l2)}.ProviderSetupModal_candidateAll__yhD_R{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--dsw-label-secondary);cursor:pointer}.ProviderSetupModal_candidatePicked__cJ78H{flex:1;font-size:12px;color:var(--dsw-label-caption)}
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.3.3 | 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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--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-leading:initial;--tw-font-weight:initial;--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-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:host,:root{--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,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-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--blur-sm:8px;--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)}}@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,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans",Arial,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:where(:not(iframe)){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{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.\!relative{position:relative!important}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.start-1{inset-inline-start:calc(var(--spacing) * 1)}.start-2{inset-inline-start:calc(var(--spacing) * 2)}.-top-1{top:calc(var(--spacing) * -1)}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-5{top:calc(var(--spacing) * 5)}.top-6{top:calc(var(--spacing) * 6)}.top-8{top:calc(var(--spacing) * 8)}.top-9{top:calc(var(--spacing) * 9)}.top-16{top:calc(var(--spacing) * 16)}.top-full{top:100%}.-right-1{right:calc(var(--spacing) * -1)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.right-5{right:calc(var(--spacing) * 5)}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-7{bottom:calc(var(--spacing) * 7)}.bottom-9{bottom:calc(var(--spacing) * 9)}.bottom-10{bottom:calc(var(--spacing) * 10)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.z-20{z-index:20}.z-50{z-index:50}.z-\[70\]{z-index:70}.z-\[80\]{z-index:80}.z-\[85\]{z-index:85}.z-\[95\]{z-index:95}.z-\[100\]{z-index:100}.z-\[105\]{z-index:105}.z-\[110\]{z-index:110}.z-\[120\]{z-index:120}.z-\[130\]{z-index:130}.z-\[9999\]{z-index:9999}.col-span-3{grid-column:span 3/span 3}.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}}.mx-1{margin-inline:var(--spacing)}.mx-1\.5{margin-inline:calc(var(--spacing) * 1.5)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\!block{display:block!important}.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-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-8{height:calc(var(--spacing) * 8)}.h-14{height:calc(var(--spacing) * 14)}.h-\[7px\]{height:7px}.h-\[42px\]{height:42px}.h-full{height:100%}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[70vh\]{max-height:70vh}.max-h-\[260px\]{max-height:260px}.max-h-\[320px\]{max-height:320px}.max-h-\[340px\]{max-height:340px}.min-h-0{min-height:0}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-14{width:calc(var(--spacing) * 14)}.w-36{width:calc(var(--spacing) * 36)}.w-44{width:calc(var(--spacing) * 44)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-\[7px\]{width:7px}.w-\[260px\]{width:260px}.w-\[268px\]{width:268px}.w-\[312px\]{width:312px}.w-\[calc\(100\%-8px\)\]{width:calc(100% - 8px)}.w-\[calc\(100\%-12px\)\]{width:calc(100% - 12px)}.w-\[min\(92vw\,360px\)\]{width:min(92vw,360px)}.w-\[min\(92vw\,380px\)\]{width:min(92vw,380px)}.w-\[min\(92vw\,480px\)\]{width:min(92vw,480px)}.w-full{width:100%}.w-max{width:max-content}.w-screen{width:100vw}.max-w-32{max-width:calc(var(--spacing) * 32)}.max-w-\[45\%\]{max-width:45%}.max-w-\[85\%\]{max-width:85%}.max-w-\[90vw\]{max-width:90vw}.max-w-\[110px\]{max-width:110px}.max-w-\[220px\]{max-width:220px}.max-w-\[420px\]{max-width:420px}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[calc\(100vw-96px\)\]{max-width:calc(100vw - 96px)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:0}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-\[86px\]{min-width:86px}.min-w-\[132px\]{min-width:132px}.flex-1{flex:1}.flex-none{flex:none}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1)}.-translate-x-1\/2,.-translate-y-1\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[6px\]{gap:6px}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.rounded-\[9px\]{border-radius:9px}.rounded-\[10px\]{border-radius:10px}.rounded-\[12px\]{border-radius:12px}.rounded-\[24px\]{border-radius:24px}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-lg{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-\[var\(--dsw-border-l1\)\]{border-color:var(--dsw-border-l1)}.border-\[var\(--dsw-label-tertiary\)\]{border-color:var(--dsw-label-tertiary)}.border-current{border-color:currentColor}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.border-white\/15{border-color:#ffffff26}@supports (color:color-mix(in lab,red,red)){.border-white\/15{border-color:color-mix(in oklab,var(--color-white) 15%,transparent)}}.border-t-transparent{border-top-color:#0000}.bg-\[\#2c2c2c\]{background-color:#2c2c2c}.bg-\[\#212121\]{background-color:#212121}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-7{padding:calc(var(--spacing) * 7)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-12{padding-inline:calc(var(--spacing) * 12)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-\[2px\]{padding-block:2px}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-27{padding-right:calc(var(--spacing) * 27)}.pr-28{padding-right:calc(var(--spacing) * 28)}.pr-29{padding-right:calc(var(--spacing) * 29)}.pr-30{padding-right:calc(var(--spacing) * 30)}.pr-31{padding-right:calc(var(--spacing) * 31)}.pr-32{padding-right:calc(var(--spacing) * 32)}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-1{padding-left:var(--spacing)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[12px\]{font-size:12px}.text-\[14\.5px\]{font-size:14.5px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[overflow-wrap\:anywhere\]{overflow-wrap:anywhere}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#f87171\]{color:#f87171}.text-\[var\(--dsw-label-primary\)\]{color:var(--dsw-label-primary)}.text-black{color:var(--color-black)}.text-white{color:var(--color-white)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.lowercase{text-transform:lowercase}.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}.accent-\[var\(--dsw-accent\)\]{accent-color:var(--dsw-accent)}.opacity-0{opacity:0}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040)}.shadow-2xl,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.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}.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-sm{--tw-backdrop-blur:blur(var(--blur-sm))}.backdrop-blur-sm,.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))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:flex:is(:where(.group):focus-within *){display:flex}.group-focus-within\:hidden:is(:where(.group):focus-within *){display:none}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:flex:is(:where(.group):hover *){display:flex}.group-hover\:hidden:is(:where(.group):hover *){display:none}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\/tool\:opacity-100:is(:where(.group\/tool):hover *){opacity:1}}.first\:mt-0:first-child{margin-top:0}@media (hover:hover){.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\[\#f87171\]\/40:hover{border-color:oklab(71.0627% .153814 .0628211/.4)}.hover\:border-white\/25:hover{border-color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.hover\:border-white\/25:hover{border-color:color-mix(in oklab,var(--color-white) 25%,transparent)}}.hover\:bg-\[\#383838\]:hover{background-color:#383838}.hover\:bg-\[var\(--dsw-hover\)\]:hover{background-color:var(--dsw-hover)}.hover\:bg-white\/10:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/10:hover{background-color:color-mix(in oklab,var(--color-white) 10%,transparent)}}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:text-\[\#ef4444\]:hover{color:#ef4444}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-white\/40:focus{border-color:#fff6}@supports (color:color-mix(in lab,red,red)){.focus\:border-white\/40:focus{border-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.focus\:ring-1:focus{--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)}.focus\:ring-white\/30:focus{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.focus\:ring-white\/30:focus{--tw-ring-color:color-mix(in oklab,var(--color-white) 30%,transparent)}}.focus-visible\:opacity-100:focus-visible{opacity:1}.disabled\:cursor-wait:disabled{cursor:wait}.disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.sm\:top-auto{top:auto}.sm\:bottom-24{bottom:calc(var(--spacing) * 24)}.sm\:col-span-1{grid-column:span 1/span 1}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-\[minmax\(0\,1fr\)_92px_92px_108px\]{grid-template-columns:minmax(0,1fr) 92px 92px 108px}}}:root{--dsw-deepseek-400:#679efe;--dsw-deepseek-450:#5686fe;--dsw-deepseek-500:#4176e6;--dsw-amber-500:#f59e0b;--dsw-green-500:#22c55e;--dsw-red-600:#e2162a;--isx-aura-gradient:conic-gradient(from 180deg at 50% 50%,#02defc 0deg,#7ffe00 65deg,#fdf301 130deg,#f66315 200deg,#fc0197 275deg,#fe9efb 325deg,#02defc 360deg);--isx-line-gradient:linear-gradient(90deg,#02defc,#7ffe00 22%,#fdf301 44%,#f66315 66%,#fc0197 84%,#fe9efb);--isx-ease:cubic-bezier(.22,1,.36,1);--isx-spring:cubic-bezier(.16,1,.3,1);--dsw-bg-base:#fff;--dsw-bg-elevated:#fff;--dsw-sidebar-fill:#f4f4f6;--dsw-input-major:#fff;--dsw-bubble:#f1f2f5;--dsw-hover:#0000000d;--dsw-active:#00000017;--dsw-label-primary:#09090b;--dsw-label-secondary:#3f3f46;--dsw-label-tertiary:#71717a;--dsw-label-caption:#a1a1aa;--dsw-border-l1:#00000014;--dsw-border-l2:#d1d5db;--dsw-border-l3:#9ca3af;--dsw-border-l4:#6b7280;--dsw-accent:var(--dsw-deepseek-500);--dsw-accent-soft:#4176e61a;--dsw-warn:var(--dsw-amber-500);--dsw-success:var(--dsw-green-500);--dsw-danger:var(--dsw-red-600);--dsw-selector:#0000000f;--dsw-layer-2:#fff;--dsw-layer-3:#f4f4f6;--dsw-btn-elevated:#fff;--dsw-btn-floating-hover:#f0f0f3;--dsw-module-platform:#f2f2f5;--dsw-border-strong:#09090b;--dsw-glass-popover:#fffffff0;--dsw-glass-input:#fff;--dsw-glass-modal:#fffffff5;--dsw-mask:#00000052;--dsw-mask-blur:blur(10px);--dsw-elevation-stroke:var(--dsw-border-l2);--dsw-elevation-soft:0 0 0 1px var(--dsw-elevation-stroke),0 4px 16px #00000008,0 0 24px #00000008;--dsw-elevation-panel:0 0 0 1px var(--dsw-elevation-stroke),0 10px 34px #00000014;--dsw-elevation-prominent:0 0 0 1px var(--dsw-elevation-stroke),0 18px 52px #0000002e;--ds-ease-in-out:cubic-bezier(.22,1,.36,1);--ds-duration-fast:.16s;--ds-duration-normal:.25s;--ds-duration-slow:.32s;--dsh-content-font-size:14px;--dsh-content-font-delta:0px;--dsh-content-font-size-secondary:13px;--piweb-chat-font-size:var(--dsh-content-font-size);--piweb-chat-font-l:calc(var(--piweb-chat-font-size) * .96);--piweb-chat-font-m:calc(var(--piweb-chat-font-size) * .93);--piweb-chat-font-s:calc(var(--piweb-chat-font-size) * .89);--piweb-chat-font-t:calc(var(--piweb-chat-font-size) * .86);--piweb-chat-font-xs:calc(var(--piweb-chat-font-size) * .82);--font-ui:"Maple Mono CN",ui-monospace,SFMono-Regular,Menlo,Consolas,"PingFang SC","Microsoft YaHei",monospace;--font-mono:ui-monospace,SFMono-Regular,Menlo,Consolas,"Liberation Mono",monospace;--dsh-chat-content-width:clamp(544px,51.2%,736px);--dsh-composer-card-max-width:calc(var(--dsh-chat-content-width) + 32px)}@media (prefers-color-scheme:dark){:root:not([data-ds-light-theme]),body:not([data-ds-light-theme]){--dsw-bg-base:#09090c;--dsw-bg-elevated:#111116;--dsw-sidebar-fill:#0c0c10;--dsw-input-major:#131318;--dsw-bubble:#17181e;--dsw-hover:#ffffff0d;--dsw-active:#ffffff17;--dsw-label-primary:#e3e4e8;--dsw-label-secondary:#9da1ad;--dsw-label-tertiary:#6b707e;--dsw-label-caption:#4d515e;--dsw-border-l1:#ffffff0d;--dsw-border-l2:#ffffff14;--dsw-border-l3:#ffffff1f;--dsw-border-l4:#ffffff2e;--dsw-accent:var(--dsw-deepseek-400);--dsw-accent-soft:#679efe26;--dsw-danger:#e2162a;--dsw-selector:#ffffff12;--dsw-layer-2:#14141a;--dsw-layer-3:#1b1c23;--dsw-btn-elevated:#15161c;--dsw-btn-floating-hover:#1f2028;--dsw-module-platform:#15161c;--dsw-border-strong:#e3e4e8;--dsw-glass-popover:#111116f0;--dsw-glass-input:#111116;--dsw-glass-modal:#0f0f14f5;--dsw-mask:#000000a6;--dsw-elevation-stroke:var(--dsw-border-l2);--dsw-elevation-soft:0 0 0 1px var(--dsw-elevation-stroke),0 4px 18px #00000059,0 0 24px #00000040;--dsw-elevation-panel:0 0 0 1px var(--dsw-elevation-stroke),0 12px 38px #0000008c;--dsw-elevation-prominent:0 0 0 1px var(--dsw-elevation-stroke),0 20px 56px #000000b8}}body[data-ds-dark-theme],html[data-ds-dark-theme]{--dsw-bg-base:#09090c;--dsw-bg-elevated:#111116;--dsw-sidebar-fill:#0c0c10;--dsw-input-major:#131318;--dsw-bubble:#17181e;--dsw-hover:#ffffff0d;--dsw-active:#ffffff17;--dsw-label-primary:#e3e4e8;--dsw-label-secondary:#9da1ad;--dsw-label-tertiary:#6b707e;--dsw-label-caption:#4d515e;--dsw-border-l1:#ffffff0d;--dsw-border-l2:#ffffff14;--dsw-border-l3:#ffffff1f;--dsw-border-l4:#ffffff2e;--dsw-accent:var(--dsw-deepseek-400);--dsw-accent-soft:#679efe26;--dsw-danger:#e2162a;--dsw-selector:#ffffff12;--dsw-layer-2:#14141a;--dsw-layer-3:#1b1c23;--dsw-btn-elevated:#15161c;--dsw-btn-floating-hover:#1f2028;--dsw-module-platform:#15161c;--dsw-border-strong:#e3e4e8;--dsw-glass-popover:#111116f0;--dsw-glass-input:#111116;--dsw-glass-modal:#0f0f14f5;--dsw-mask:#000000a6;--dsw-elevation-stroke:var(--dsw-border-l2);--dsw-elevation-soft:0 0 0 1px var(--dsw-elevation-stroke),0 4px 18px #00000059,0 0 24px #00000040;--dsw-elevation-panel:0 0 0 1px var(--dsw-elevation-stroke),0 12px 38px #0000008c;--dsw-elevation-prominent:0 0 0 1px var(--dsw-elevation-stroke),0 20px 56px #000000b8}body,html{height:100%}body{background:var(--dsw-bg-base);color:var(--dsw-label-primary);font-family:var(--font-ui);font-size:var(--dsh-content-font-size);line-height:calc(24px + var(--dsh-content-font-delta));-webkit-font-smoothing:antialiased;overflow:hidden}button{font-size:inherit;cursor:pointer;padding:0}button,input,select,textarea{font-family:inherit;color:inherit;background:0 0;border:none}input,select,textarea{outline:none}select{color-scheme:light}select option{background:var(--dsw-layer-2);color:var(--dsw-label-primary)}body[data-ds-dark-theme] select{color-scheme:dark}input::placeholder,textarea::placeholder{color:var(--dsw-label-caption)}*{box-sizing:border-box;corner-shape:superellipse(1.5)}@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}.piweb-conversation-width-handle{z-index:3;cursor:col-resize;touch-action:none;width:12px;position:absolute;top:0;bottom:0}.piweb-conversation-width-handle[data-side=left]{left:calc(50% - var(--dsh-chat-content-width) / 2 - 20px)}.piweb-conversation-width-handle[data-side=right]{right:calc(50% - var(--dsh-chat-content-width) / 2 - 20px)}.piweb-conversation-width-handle:after{content:"";background:var(--dsw-border-l3);opacity:.3;width:2px;transition:opacity var(--ds-duration-fast);border-radius:2px;position:absolute;top:35%;bottom:35%;left:5px}.piweb-conversation-width-handle:focus-visible:after,.piweb-conversation-width-handle:hover:after,.piweb-conversation-width-handle[data-dragging]:after{opacity:1}@media (max-width:840px){:root{--dsh-chat-content-width:100%;--dsh-composer-card-max-width:100%}.piweb-conversation-width-handle{display:none}.pi-main>.hairline-b{padding-left:56px;padding-right:12px}.settings-dialog{flex-direction:column;border-radius:22px!important;width:calc(100vw - 16px)!important;max-width:none!important;height:calc(100vh - 16px)!important}.settings-nav{border-bottom:.5px solid var(--dsw-border-l2);overflow-x:auto;flex-direction:row!important;width:100%!important;padding:10px!important}.settings-nav>button{flex:none;height:36px}.settings-title{display:none}}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:var(--dsw-active);background-clip:content-box;border:2.5px solid #0000;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--dsw-border-l3);background-clip:content-box;border:2px solid #0000}::-webkit-scrollbar-track{background:0 0}.icon-btn{width:28px;height:28px;color:var(--dsw-label-secondary);transition:background .22s var(--isx-ease),color .22s var(--isx-ease),transform .2s var(--isx-ease);border-radius:10px;justify-content:center;align-items:center;display:inline-flex}.icon-btn svg{transition:transform .22s var(--isx-ease)}.icon-btn:hover:not(:disabled){background:var(--dsw-hover);color:var(--dsw-label-primary)}.icon-btn:hover:not(:disabled) svg{transform:scale(1.14)}.icon-btn:active:not(:disabled){transform:scale(.9)}.chip{height:28px;color:var(--dsw-label-primary);white-space:nowrap;transition:background .24s var(--isx-ease),color .24s var(--isx-ease),border-color .24s var(--isx-ease),transform .2s var(--isx-ease);border:1px solid #0000;border-radius:25px;align-items:center;gap:5px;padding:0 11px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.chip:hover:not(:disabled),.chip[data-open=true]{background:var(--dsw-hover);border-color:var(--dsw-border-l3);color:var(--dsw-label-primary)}.chip:active:not(:disabled){transform:scale(.93)}.chip .chevron{color:var(--dsw-label-caption);transition:transform .22s var(--isx-ease)}.chip[data-open=true] .chevron{transform:rotate(180deg)}.hero-chip{border:1px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);height:30px;color:var(--dsw-label-primary);white-space:nowrap;cursor:pointer;transition:background .25s var(--isx-ease),border-color .25s var(--isx-ease),transform .2s var(--isx-ease);border-radius:25px;align-items:center;gap:6px;padding:0 12px;font-size:13px;font-weight:500;line-height:20px;display:inline-flex}.hero-chip:hover,.hero-chip[data-open=true]{background:var(--dsw-hover);border-color:var(--dsw-label-primary)}.hero-chip:active{transform:scale(.92)}.hero-chip .hero-chip-icon{color:var(--dsw-label-primary);transition:transform .25s var(--isx-ease);flex:none}.hero-chip:hover .hero-chip-icon{transform:scale(1.12)}.hero-chip .chevron{color:var(--dsw-label-caption);transition:transform .22s var(--isx-ease);flex:none}.hero-chip[data-open=true] .chevron{transform:rotate(180deg)}.btn-outline{border:1.5px solid var(--dsw-border-l2);height:36px;color:var(--dsw-label-primary);transition:background .25s var(--isx-ease),border-color .25s var(--isx-ease),transform .2s var(--isx-ease),color .25s var(--isx-ease);background:0 0;border-radius:25px;justify-content:center;align-items:center;gap:6px;padding:0 15px;font-size:14px;line-height:22px;display:inline-flex}.btn-outline:hover:not(:disabled){background:var(--dsw-hover);border-color:var(--dsw-label-primary)}.btn-outline:active:not(:disabled){transform:scale(.92)}.btn-primary-white{background:var(--dsw-label-primary);height:36px;color:var(--dsw-bg-base);transition:opacity .2s var(--isx-ease),transform .22s var(--isx-ease),box-shadow .25s var(--isx-ease);border-radius:25px;justify-content:center;align-items:center;gap:6px;padding:0 16px;font-size:14px;font-weight:500;line-height:22px;display:inline-flex}.btn-primary-white:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 6px 18px #00000038}.btn-primary-white:active:not(:disabled){transform:scale(.92)}.btn-primary-white:disabled{opacity:.45;cursor:default}.btn-new-session{isolation:isolate;border:1px solid var(--dsw-border-l3);background:var(--dsw-btn-elevated);height:40px;color:var(--dsw-label-primary);transition:transform .25s var(--isx-ease),border-color .25s var(--isx-ease),box-shadow .28s var(--isx-ease);border-radius:25px;justify-content:center;align-items:center;gap:7px;padding:8px 18px;font-size:14px;font-weight:500;line-height:22px;display:inline-flex;position:relative;overflow:hidden}.btn-new-session:before{background:var(--isx-aura-gradient);filter:blur(12px);opacity:.52;z-index:-2;transition:opacity .32s var(--isx-ease),transform .55s var(--isx-ease);inset:-14px}.btn-new-session:after,.btn-new-session:before{content:"";pointer-events:none;position:absolute}.btn-new-session:after{background:var(--dsw-btn-elevated);z-index:-1;transition:inset .25s var(--isx-ease),background .25s var(--isx-ease);border-radius:24px;inset:1.5px}.btn-new-session svg{transition:transform .25s var(--isx-ease)}.btn-new-session:hover{border-color:#0000;transform:translateY(-1px);box-shadow:0 6px 22px #02defc29,0 4px 18px #fc019724}.btn-new-session:hover:before{opacity:.95;transform:rotate(24deg)scale(1.08)}.btn-new-session:hover svg{transform:scale(1.15)rotate(90deg)}.btn-new-session:active{transform:scale(.92)}.select-chip{border:1.5px solid var(--dsw-border-l2);height:32px;color:var(--dsw-label-primary);transition:background .24s var(--isx-ease),border-color .24s var(--isx-ease),transform .2s var(--isx-ease);border-radius:25px;align-items:center;gap:6px;padding:0 13px;font-size:13px;display:inline-flex}.select-chip:hover:not(:disabled){background:var(--dsw-hover);border-color:var(--dsw-label-primary)}.select-chip:active:not(:disabled){transform:scale(.94)}.tab-underline{color:var(--dsw-label-tertiary);transition:color .24s var(--isx-ease);padding:6px 2px;font-size:13.5px;position:relative}.tab-underline:hover{color:var(--dsw-label-primary)}.tab-underline[data-active=true]{color:var(--dsw-label-primary);font-weight:600}.tab-underline:after{content:"";background:var(--dsw-label-primary);width:0;height:2px;transition:width .26s var(--isx-ease);border-radius:2px;position:absolute;bottom:-1px;left:50%;transform:translate(-50%)}.tab-underline[data-active=true]:after{width:100%}.settings-tab-underline{color:var(--dsw-label-tertiary);transition:color .24s var(--isx-ease),transform .2s var(--isx-ease);padding:6px 4px 10px;font-size:13.5px;position:relative}.settings-tab-underline:hover{color:var(--dsw-label-primary)}.settings-tab-underline[data-active=true]{color:var(--dsw-label-primary);font-weight:600}.settings-tab-underline:after{content:"";background:var(--dsw-label-primary);width:0;height:2px;transition:width .26s var(--isx-ease);border-radius:2px;position:absolute;bottom:-1px;left:50%;transform:translate(-50%)}.settings-tab-underline[data-active=true]:after{width:22px}.pw-app-shell{height:100vh}@supports (height:100dvh){.pw-app-shell{height:100dvh}}.drawer-tab{transition:background .22s var(--isx-ease),color .22s var(--isx-ease)}.drawer-tab svg{transition:transform .22s var(--isx-ease),color .22s var(--isx-ease)}.drawer-tab:hover:not([data-active=true]){background:var(--dsw-hover)}.drawer-tab:hover svg,.drawer-tab[data-active=true] svg{color:var(--dsw-label-primary);transform:scale(1.16)}.drawer-tab[data-active=true]:after{background:var(--isx-line-gradient)!important;width:28px!important}.drawer-tab:active{transform:scale(.95)}.btn-primary-circle{background:var(--dsw-label-primary);width:34px;height:34px;color:var(--dsw-bg-base);transition:opacity .2s var(--isx-ease),transform .24s var(--isx-ease),box-shadow .26s var(--isx-ease);border-radius:999px;flex:none;justify-content:center;align-items:center;margin-top:-3px;margin-bottom:-3px;display:inline-flex;transform:translateY(-2px);box-shadow:0 2px 10px #00000029}.btn-primary-circle:hover:not(:disabled){transform:translateY(-2px)scale(1.07);box-shadow:0 0 16px #02defc5c,0 0 22px #fc01973d}.btn-primary-circle:active:not(:disabled){transform:translateY(-2px)scale(.9)}.btn-primary-circle:disabled{opacity:.35;cursor:default;box-shadow:none}.btn-ghost-circle{width:30px;height:30px;color:var(--dsw-label-secondary);border:1.5px solid var(--dsw-border-l2);transition:color .22s var(--isx-ease),border-color .22s var(--isx-ease),transform .2s var(--isx-ease);background:0 0;border-radius:999px;flex:none;justify-content:center;align-items:center;margin-top:-3px;margin-bottom:-3px;display:inline-flex;transform:translateY(-2px)}.btn-ghost-circle:hover{color:var(--dsw-danger);border-color:var(--dsw-danger);transform:translateY(-2px)scale(1.06)}.btn-ghost-circle:active{transform:translateY(-2px)scale(.9)}.btn-primary-circle.isx-btn-stop,.btn-primary-circle[data-streaming=true]{color:#fff;background:#e2162a;animation:isx-stop-breathe 2s ease-in-out infinite;box-shadow:0 0 16px #e2162a73,0 0 28px #e2162a40}@keyframes isx-stop-breathe{0%,to{transform:translateY(-2px)scale(1);box-shadow:0 0 14px #e2162a66}50%{transform:translateY(-2px)scale(1.06);box-shadow:0 0 22px #e2162aa6,0 0 32px #e2162a59}}.btn-primary-circle.isx-btn-stop:hover:not(:disabled),.btn-primary-circle[data-streaming=true]:hover:not(:disabled){background:#f01e34;transform:translateY(-2px)scale(1.1);box-shadow:0 0 24px #e2162abf}.btn-ghost-circle.isx-btn-stop{color:#e2162a;transition:all .24s var(--isx-ease);background:#e2162a14;border-color:#e2162a66}.btn-ghost-circle.isx-btn-stop:hover{color:#fff;background:#e2162a;border-color:#e2162a;box-shadow:0 0 16px #e2162a8c}.pw-queue{background:var(--dsw-bg-elevated);border:1px solid var(--dsw-border-l2);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);animation:pw-queue-in .22s var(--isx-ease);border-radius:16px;justify-content:space-between;align-items:center;gap:12px;margin:0 14px 10px;padding:8px 14px;font-size:12.5px;display:flex;box-shadow:0 4px 18px #00000017}@keyframes pw-queue-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.pw-queue-list{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.pw-queue-row{min-width:0;color:var(--dsw-label-primary);align-items:center;gap:8px;display:flex}.pw-queue-tag{text-transform:capitalize;border:1px solid var(--dsw-border-l2);background:var(--dsw-selector);color:var(--dsw-label-secondary);border-radius:999px;flex:none;align-items:center;gap:4.5px;padding:1px 8px;font-size:11px;font-weight:600;line-height:18px;display:inline-flex}.pw-queue-tag-steer{color:var(--dsw-warn);background:#f59e0b1f;border-color:#f59e0b47}.pw-queue-tag-queue{background:var(--dsw-accent-soft);color:var(--dsw-accent);border-color:#4176e640}.pw-queue-dot{background:currentColor;border-radius:999px;width:5px;height:5px}.pw-queue-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-label-primary);font-size:13px;font-weight:500;overflow:hidden}.pw-queue-foot{flex:none;align-items:center;gap:6px;display:flex}.pw-queue-btn{cursor:pointer;height:28px;transition:all .2s var(--isx-ease);border-radius:999px;align-items:center;gap:5px;padding:0 11px;font-size:12px;font-weight:500;display:inline-flex}.pw-queue-btn-pull{background:var(--dsw-hover);border:1px solid var(--dsw-border-l2);color:var(--dsw-label-primary)}.pw-queue-btn-pull:hover{background:var(--dsw-label-primary);color:var(--dsw-bg-base);border-color:var(--dsw-label-primary);transform:translateY(-1px);box-shadow:0 2px 8px #0000001f}.pw-queue-kbd{background:var(--dsw-selector);width:16px;height:16px;font-size:11px;font-weight:700;font-family:var(--font-mono);border-radius:4px;justify-content:center;align-items:center;line-height:1;display:inline-flex}.pw-queue-btn-pull:hover .pw-queue-kbd{color:inherit;background:#fff3}.pw-queue-btn-drop{color:var(--dsw-label-tertiary);background:0 0;border:1px solid #0000}.pw-queue-btn-drop:hover{color:var(--dsw-danger);background:#ef44441a;border-color:#ef444433}.pw-busy-hint{color:var(--dsw-label-caption);margin:6px 14px 0;font-size:11.5px;line-height:16px}.hairline-t{border-top:1px solid var(--dsw-border-l2)}.hairline-b{border-bottom:1px solid var(--dsw-border-l2)}.hairline-r{border-right:1px solid var(--dsw-border-l2)}.rail-btn{border:1px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);width:38px;height:38px;color:var(--dsw-label-secondary);transition:background .25s var(--isx-ease),color .25s var(--isx-ease),border-color .25s var(--isx-ease),transform .22s var(--isx-ease);border-radius:14px;justify-content:center;align-items:center;display:inline-flex}.rail-btn svg{transition:transform .25s var(--isx-ease)}.rail-btn:hover{background:var(--dsw-hover);border-color:var(--dsw-label-primary);color:var(--dsw-label-primary);transform:translateY(-1px)}.rail-btn:hover svg{transform:scale(1.16)}.rail-btn:active{transform:scale(.9)}.isx-menu-item{transition:background .24s var(--isx-ease),color .24s var(--isx-ease),padding-left .24s var(--isx-ease),transform .2s var(--isx-ease);border-radius:12px;position:relative}.isx-menu-item:after{content:"";background:var(--dsw-bg-base);opacity:0;width:2px;height:0;transition:height .24s var(--isx-ease),opacity .24s var(--isx-ease);pointer-events:none;border-radius:5px;position:absolute;top:50%;right:7px;transform:translateY(-50%)}.isx-menu-item .isx-menu-icon,.isx-menu-item>svg{transition:transform .24s var(--isx-ease),color .24s var(--isx-ease)}.isx-menu-item .isx-menu-shift{transition:transform .24s var(--isx-ease)}.isx-menu-item:hover:not(:disabled):not([data-no-invert=true]),.isx-menu-item[data-active=true]{background:var(--dsw-label-primary)!important;color:var(--dsw-bg-base)!important}.isx-menu-item:hover:not(:disabled):not([data-no-invert=true]) .isx-menu-icon,.isx-menu-item:hover:not(:disabled):not([data-no-invert=true])>svg,.isx-menu-item[data-active=true] .isx-menu-icon,.isx-menu-item[data-active=true]>svg{transform:scale(1.18);color:var(--dsw-bg-base)!important}.isx-menu-item:hover:not(:disabled):not([data-no-invert=true]) .isx-menu-shift,.isx-menu-item[data-active=true] .isx-menu-shift{transform:translate(4px)}.isx-menu-item:hover:not(:disabled):not([data-no-invert=true]) .isx-menu-sub,.isx-menu-item[data-active=true] .isx-menu-sub{opacity:.72;color:var(--dsw-bg-base)!important}.isx-menu-item:hover:not(:disabled):not([data-no-invert=true]):after,.isx-menu-item[data-active=true]:after{opacity:1;height:14px}.isx-menu-item:hover:not(:disabled) .icon-btn,.isx-menu-item[data-active=true] .icon-btn{color:var(--dsw-bg-base)}.isx-menu-item:hover:not(:disabled) .icon-btn:hover,.isx-menu-item[data-active=true] .icon-btn:hover{color:var(--dsw-bg-base);background:#80808040}.isx-menu-item[data-danger=true]:hover:not(:disabled){background:var(--dsw-danger)!important;color:#fff!important}.isx-menu-item[data-danger=true]:hover:not(:disabled) .isx-menu-icon,.isx-menu-item[data-danger=true]:hover:not(:disabled)>svg{color:#fff!important}.isx-menu-item[data-danger=true]:hover:not(:disabled):after{background:#fff}.isx-search{border:1.5px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);transition:border-color .25s var(--isx-ease),background .25s var(--isx-ease),box-shadow .25s var(--isx-ease);border-radius:14px;position:relative}.isx-search:hover{border-color:var(--dsw-border-l3)}.isx-search:focus-within{border-color:var(--dsw-label-primary)}.isx-search .isx-search-icon,.isx-search>svg:first-of-type{transition:transform .3s var(--isx-ease),color .25s var(--isx-ease)}.isx-search:focus-within .isx-search-icon,.isx-search:focus-within>svg:first-of-type{transform:rotate(90deg)scale(1.1);color:var(--dsw-label-primary)!important}.isx-search input{transition:padding-left .25s var(--isx-ease)}.isx-search:focus-within input{padding-left:4px}.isx-composer{border:1.5px solid var(--dsw-border-l2);background:var(--dsw-glass-input);box-shadow:var(--dsw-elevation-panel);transition:border-color .28s var(--isx-ease),box-shadow .28s var(--isx-ease),transform .25s var(--isx-ease);position:relative;border-radius:24px!important}.isx-composer:after{content:"";background:var(--dsw-label-primary);opacity:.55;width:22px;height:2px;transition:width .32s var(--isx-ease),opacity .28s var(--isx-ease),background .28s var(--isx-ease);pointer-events:none;border-radius:2px;position:absolute;bottom:-1px;left:34px}.isx-composer:hover{border-color:var(--dsw-border-l3)}.isx-composer:focus-within{border-color:var(--dsw-label-primary)}.isx-composer:focus-within:after{opacity:1;background:var(--isx-line-gradient);width:58px}.isx-card{border:1px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);transition:border-color .25s var(--isx-ease),background .25s var(--isx-ease),transform .24s var(--isx-ease),box-shadow .25s var(--isx-ease);border-radius:20px;position:relative}.isx-card:after{content:"";background:var(--dsw-label-primary);opacity:.38;width:20px;height:2px;transition:width .28s var(--isx-ease),opacity .28s var(--isx-ease);pointer-events:none;border-radius:2px;position:absolute;bottom:-1px;left:26px}.isx-card:hover:not(:disabled),.isx-card[aria-pressed=true],.isx-card[data-active=true]{border-color:var(--dsw-label-primary)}.isx-card:hover:not(:disabled):after,.isx-card[aria-pressed=true]:after,.isx-card[data-active=true]:after{opacity:1;width:36px}.isx-ring-btn{transition:background .24s var(--isx-ease),border-color .24s var(--isx-ease),transform .24s var(--isx-ease);border:1px solid #0000;border-radius:12px}.isx-ring-btn:hover{background:var(--dsw-hover);border-color:var(--dsw-border-l3);transform:scale(1.06)}.isx-ring-btn:active{transform:scale(.92)}.line-dots{background:var(--dsw-border-l2);height:1px;position:relative}.line-dots:after,.line-dots:before{content:"";background:var(--dsw-border-l4);border-radius:999px;width:4px;height:4px;position:absolute;top:-1.5px}.line-dots:before{left:0}.line-dots:after{right:0}.state-dot{border-radius:999px;flex:none;width:8px;height:8px;position:relative}.state-dot.running{animation:isx-dot-ripple 1.6s var(--isx-ease) infinite;background:#02defc;box-shadow:0 0 8px #02defcb3}.state-dot.pending{background:var(--dsw-warn);box-shadow:0 0 0 3px #f59e0b1a}.state-dot.done{background:var(--dsw-success)}@keyframes isx-dot-ripple{0%{transform:scale(.9);box-shadow:0 0 4px #02defc99,0 0 #02defc66}50%{transform:scale(1.15);box-shadow:0 0 10px #02defce6,0 0 0 4px #02defc00}to{transform:scale(.9);box-shadow:0 0 4px #02defc99,0 0 #02defc00}}@keyframes dot-breathe{0%,to{opacity:1}50%{opacity:.45}}.popover{background:var(--dsw-glass-popover);-webkit-backdrop-filter:blur(18px);box-shadow:var(--dsw-elevation-prominent);border:1px solid var(--dsw-border-l2);animation:isx-popover-in .2s var(--isx-spring) both;border-radius:20px;padding:6px;overflow:hidden}@keyframes isx-popover-in{0%{opacity:0;transform:translateY(4px)scale(.97)}to{opacity:1;transform:none}}.modal-mask{background:var(--dsw-mask);-webkit-backdrop-filter:var(--dsw-mask-blur)}.glass-modal{background:var(--dsw-glass-modal);-webkit-backdrop-filter:blur(20px);border:1px solid var(--dsw-border-l2)}.md{overflow-wrap:break-word;min-width:0;font-size:var(--piweb-chat-font-size);line-height:1.65}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md p{margin:.5em 0}.md h1,.md h2,.md h3,.md h4{margin:1em 0 .4em;font-weight:600;line-height:1.35}.md h1{font-size:1.35em}.md h2{font-size:1.22em}.md h3{font-size:1.1em}.md ol,.md ul{margin:.5em 0;padding-left:1.5em}.md li{margin:.2em 0}.md a{color:var(--dsw-accent);text-decoration:none}.md a:hover{text-decoration:underline}.md-external-mark{opacity:.6;vertical-align:.06em;margin-left:1px;font-size:.85em;display:inline-block}.md-external:hover .md-external-mark{opacity:1}.md .md-file-path{font-family:inherit;font-size:inherit;color:var(--dsw-accent);background:inherit;padding:inherit;cursor:pointer;text-align:left;border:none;border-radius:5px}.md .md-file-path:hover{color:var(--dsw-accent-hover,var(--dsw-accent));background:var(--dsw-accent-soft)}.md blockquote{border-left-color:var(--dsw-border-l3);color:var(--dsw-label-secondary);border-left:3px solid var(--dsw-accent);background:var(--dsw-accent-soft);border-radius:0 8px 8px 0;margin:.6em 0;padding:.5em .9em}.md code{font-family:var(--font-mono);background:var(--dsw-selector);border-radius:5px;padding:.1em .35em;font-size:.9em}.md pre{background:var(--dsw-bg-elevated);border:1px solid var(--dsw-border-l2);border-radius:14px;margin:.7em 0;padding:12px 14px;overflow-x:auto}.md pre code{background:0 0;padding:0;font-size:13px;line-height:1.6}.md-code-block{border:1px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);transition:border-color .25s var(--isx-ease),box-shadow .25s var(--isx-ease);border-radius:16px;margin:.85em 0;position:relative;overflow:hidden;box-shadow:0 4px 18px #0000001a}.md-code-block:hover{border-color:var(--dsw-border-l3);box-shadow:0 6px 24px #00000029}.md-code-copy{z-index:2;position:absolute;top:8px;right:10px}.md-code-copy .icon-btn{background:var(--dsw-hover);border:1px solid var(--dsw-border-l1);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:8px;width:26px;height:26px}.md-code-copy .icon-btn:hover{background:var(--dsw-label-primary);color:var(--dsw-bg-base);border-color:var(--dsw-label-primary)}.md-code-block pre{background:0 0;border:0;border-radius:0;margin:0;padding:38px 16px 14px}.md table{border-collapse:separate;border-spacing:0;border:1px solid var(--dsw-border-l2);border-radius:14px;width:100%;margin:.8em 0;font-size:.95em;overflow:hidden}.md td,.md th{border-bottom:1px solid var(--dsw-border-l1);border-right:1px solid var(--dsw-border-l1);text-align:left;padding:7px 12px}.md tr:last-child td{border-bottom:0}.md td:last-child,.md th:last-child{border-right:0}.md th{color:var(--dsw-label-primary);font-weight:600}.md th,.md tr:hover td{background:var(--dsw-hover)}.md hr{border:none;border-top:.5px solid var(--dsw-border-l2);margin:1em 0}.pw-stream{display:flow-root}.pw-stream>.pw-stream-tail:first-child>:first-child{margin-top:0}.pw-stream>.pw-stream-tail:last-child>:last-child{margin-bottom:0}:root{--hl-comment:#828892;--hl-keyword:#a046c8;--hl-string:#1e825a;--hl-number:#be6414;--hl-func:#3764dc;--hl-type:#148296;--hl-attr:#8c5a1e;--hl-tag:#c8325a;--hl-regex:#c83c28;--hl-meta:#786e28;--hl-punct:var(--dsw-label-tertiary);--hl-variable:#1e64aa}body[data-ds-dark-theme],html[data-ds-dark-theme]{--hl-comment:#78808c;--hl-keyword:#c896ff;--hl-string:#96d2a5;--hl-number:#f0af6e;--hl-func:#8cb9ff;--hl-type:#64c8d2;--hl-attr:#dcc382;--hl-tag:#f08296;--hl-regex:#eb826e;--hl-meta:#c8be78;--hl-punct:var(--dsw-label-tertiary);--hl-variable:#96c8fa}.hljs{color:var(--dsw-label-secondary)}.hljs-comment,.hljs-quote{color:var(--hl-comment);font-style:italic}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-section,.hljs-selector-tag,.hljs-strong{color:var(--hl-keyword)}.hljs-strong{font-weight:600}.hljs-addition,.hljs-bullet,.hljs-link,.hljs-string,.hljs-symbol{color:var(--hl-string)}.hljs-number,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-template-variable{color:var(--hl-number)}.hljs-code,.hljs-name,.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:var(--hl-func)}.hljs-built_in,.hljs-builtin-name,.hljs-class .hljs-title,.hljs-type{color:var(--hl-type)}.hljs-attr,.hljs-attribute,.hljs-property{color:var(--hl-attr)}.hljs-deletion,.hljs-selector-attr,.hljs-tag{color:var(--hl-tag)}.hljs-char.escape_,.hljs-regexp,.hljs-subst{color:var(--hl-regex)}.hljs-formula,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:var(--hl-meta)}.hljs-operator,.hljs-params,.hljs-variable,.hljs-variable.language_{color:var(--hl-variable)}.hljs-punctuation{color:var(--hl-punct)}.hljs-emphasis{font-style:italic}.hljs-addition,.hljs-deletion{background:0 0}.msg-user-bubble{background:var(--dsw-input-major);border:1px solid var(--dsw-border-l2);max-width:85%;font-size:var(--piweb-chat-font-size);transition:border-color .25s var(--isx-ease),box-shadow .25s var(--isx-ease);border-radius:20px 20px 6px;padding:10px 16px;line-height:1.65;display:inline-block}.msg-user-bubble:hover{border-color:var(--dsw-border-l3)}.pw-step[data-kind=skill] .pw-line{font-size:var(--piweb-chat-font-s)}.pw-skill-name{font-family:var(--font-mono);color:var(--dsw-accent);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.msg-actions{opacity:.45;transition:opacity .2s var(--isx-ease);align-items:center;gap:4px;margin-top:6px;display:inline-flex}.msg-actions:hover{opacity:1}.msg-clock{font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(24px + var(--dsh-content-font-delta,0px));color:var(--dsw-label-tertiary)}.msg-clock-start{padding-right:12px}:root{--pw-danger-soft:#ec13131f;--pw-shimmer-hi:#96beff}body[data-ds-dark-theme],html[data-ds-dark-theme]{--pw-danger-soft:#f25a5a29;--pw-shimmer-hi:#e1ecff}.pw-turn{padding:6px 0 2px}.pw-run,.pw-turn{flex-direction:column;gap:1px;display:flex}.pw-step{min-height:26px;animation:pw-in .16s var(--ds-ease-in-out,ease-out) both;align-items:flex-start;gap:10px;display:flex}@keyframes pw-in{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}.pw-icon{width:16px;height:26px;color:var(--dsw-label-caption);transition:transform .24s var(--isx-ease),color .24s var(--isx-ease);flex:none;justify-content:center;align-items:center;display:inline-flex}.pw-step:hover .pw-icon{color:var(--dsw-label-primary);transform:scale(1.14)}.pw-step[data-tone=live] .pw-icon{color:var(--dsw-label-primary);animation:isx-icon-pulse 1.8s var(--isx-ease) infinite}@keyframes isx-icon-pulse{0%,to{filter:drop-shadow(0 0 4px #02defc66)drop-shadow(0 0 8px #fc019733);transform:scale(1)}50%{filter:drop-shadow(0 0 8px #02defcbf)drop-shadow(0 0 16px #fc019780);transform:scale(1.18)}}.pw-step[data-tone=fail] .pw-icon{color:var(--dsw-danger);filter:drop-shadow(0 0 6px #e2162a73)}.pw-step[data-tone=warn] .pw-icon{color:var(--dsw-warn)}.pw-step[data-kind=retry] .pw-icon{animation:pw-rotate 1.2s linear infinite}@keyframes pw-rotate{to{transform:rotate(1turn)}}.pw-pi{font-family:var(--font-mono);color:var(--dsw-label-primary);font-size:15px;font-weight:600;line-height:1;animation:isx-pi-glow 2.2s ease-in-out infinite;display:inline-block;transform:translateY(-1px)}@keyframes isx-pi-glow{0%,to{filter:drop-shadow(0 0 2px #02defc40);transform:translateY(-1px)scale(1)}50%{filter:drop-shadow(0 0 8px #02defcb3)drop-shadow(0 0 14px #fc019766);transform:translateY(-1px)scale(1.12)}}.pw-body{flex:1;min-width:0}.pw-line{min-height:26px;line-height:26px;font-size:var(--piweb-chat-font-m);color:var(--dsw-label-tertiary);align-items:center;gap:6px;display:flex}button.pw-line{text-align:left;cursor:pointer;width:calc(100% + 12px);font:inherit;font-size:var(--piweb-chat-font-m);transition:background .22s var(--isx-ease),color .22s var(--isx-ease),padding-left .22s var(--isx-ease);background:0 0;border:0;border-radius:8px;margin:0 -6px;padding:0 6px}button.pw-line:hover{background:var(--dsw-hover);color:var(--dsw-label-primary);padding-left:10px}.pw-verb{flex:none}.pw-verb[data-failed=true]{color:var(--dsw-danger)}.pw-arg{font-family:var(--font-mono);font-size:var(--piweb-chat-font-s);color:var(--dsw-label-secondary);flex:0 auto}.pw-arg,.pw-gist{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.pw-gist{flex:1}.pw-meta{font-size:var(--piweb-chat-font-t);white-space:nowrap}.pw-line .pw-chev,.pw-meta{color:var(--dsw-label-caption);flex:none}.pw-line .pw-chev{transition:transform .24s var(--isx-ease),color .2s var(--isx-ease)}button.pw-line:hover .pw-chev{color:var(--dsw-label-primary)}.pw-line[aria-expanded=true] .pw-chev{color:var(--dsw-label-primary);transform:rotate(90deg)}.pw-summary strong{color:var(--dsw-label-secondary);font-weight:600}.pw-run[data-open]>.pw-step:not(:first-child){margin-left:4px}.pw-step[data-tone=live] .pw-arg{color:var(--dsw-label-primary);font-weight:500}.pw-shimmer{background:linear-gradient(90deg,var(--dsw-label-secondary) 0,var(--dsw-label-primary) 18%,#02defc 38%,#fff 50%,#fc0197 62%,var(--dsw-label-primary) 82%,var(--dsw-label-secondary) 100%);color:#0000;background-size:260% 100%;-webkit-background-clip:text;background-clip:text;flex:none;font-weight:500;animation:pw-shimmer 2s linear infinite}@keyframes pw-shimmer{0%{background-position:130% 0}to{background-position:-130% 0}}.pw-tail{font-size:var(--piweb-chat-font-s);color:var(--dsw-label-caption);word-break:break-word;-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:-4px 0 5px;line-height:1.5;display:-webkit-box;overflow:hidden}.pw-result{font-family:var(--font-mono);font-size:var(--piweb-chat-font-t);color:var(--dsw-label-tertiary);align-items:flex-start;gap:6px;margin:-4px 0 5px;line-height:1.55;display:flex}.pw-result[role=button]{cursor:pointer}.pw-rail{text-align:center;width:14px;color:var(--dsw-label-caption);-webkit-user-select:none;user-select:none;flex:none}.pw-lines{white-space:pre-wrap;word-break:break-word;flex:1;min-width:0}.pw-lines>div{text-overflow:ellipsis;white-space:pre;overflow:hidden}.pw-lines .pw-head{color:var(--dsw-label-tertiary)}.pw-lines .pw-more{color:var(--dsw-label-caption)}.pw-result[role=button]:hover .pw-more{text-decoration:underline}.pw-result[data-failed=true],.pw-result[data-failed=true] .pw-head,.pw-result[data-failed=true] .pw-rail{color:var(--dsw-danger)}.pw-diff{max-height:420px;padding:8px 10px}.pw-diff,.pw-output{border:1px solid var(--dsw-border-l2);background:var(--dsw-markdown-code-block,var(--dsw-bg-elevated));border-radius:14px;margin:2px 0 8px 20px;overflow:auto}.pw-output{max-height:360px;font-family:var(--font-mono);font-size:var(--piweb-chat-font-t);color:var(--dsw-label-secondary);white-space:pre-wrap;word-break:break-word;padding:10px 14px;line-height:1.55}.pw-output.pw-think-full{color:var(--dsw-label-tertiary);font-family:inherit}.pw-output .cmdline{color:var(--dsw-label-tertiary);border-bottom:1px solid var(--dsw-border-l2);white-space:pre-wrap;word-break:break-all;margin-bottom:6px;padding-bottom:6px}.pw-output .cmdline:before{content:"$ ";color:var(--dsw-label-caption)}button.pw-more{font:inherit;font-family:var(--font-mono);font-size:var(--piweb-chat-font-t);color:var(--dsw-label-caption);cursor:pointer;text-align:left;background:0 0;border:0;margin-top:4px;padding:0;display:block}button.pw-more:hover{color:var(--dsw-label-secondary);text-decoration:underline}.pw-narr{font-size:var(--piweb-chat-font-l);color:var(--dsw-label-primary);margin:7px 0 3px;line-height:1.65}.pw-turn>.pw-narr:first-child{margin-top:1px}.pw-narr[data-error=true]{color:var(--dsw-danger)}.pw-narr .md p{margin:0}.pw-narr .md p+p{margin-top:.5em}.pw-narr .md pre{margin:.5em 0}.pw-warn-text{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--dsw-warn);flex:1;overflow:hidden}.pw-step[data-kind=abort] .pw-line,.pw-step[data-kind=context] .pw-line{color:var(--dsw-label-caption);font-size:var(--piweb-chat-font-s)}body[data-pebrel-theme],html[data-pebrel-theme]{--dsw-bg-base:#fff;--dsw-bg-elevated:#fff;--dsw-input-major:#fff;--dsw-bubble:#64748b0d;--dsw-hover:#64748b21;--dsw-active:#64748b33;--dsw-label-primary:#334155;--dsw-label-secondary:#64748b;--dsw-label-tertiary:#94a3b8;--dsw-label-caption:#a3adbb;--dsw-border-l1:#33415514;--dsw-border-l2:#3341551f;--dsw-border-l3:#33415529;--dsw-border-l4:#3341553d;--dsw-warn:#d97706;--dsw-success:#548c9e;--dsw-danger:#b23a48;--dsw-selector:#64748b14;--dsw-layer-2:#fff;--dsw-layer-3:#f5f5f6;--dsw-btn-elevated:#fff;--dsw-btn-floating-hover:#64748b21;--dsw-module-platform:#f5f5f6;--dsw-border-strong:#64748b;--dsw-glass-popover:#fff;--dsw-glass-input:#fff;--dsw-glass-modal:#fff;--dsw-mask:#0f172a38;--dsw-elevation-stroke:var(--dsw-border-l2)}body[data-pebrel-theme=pebrel],body[data-pebrel-theme=silver-steel],html[data-pebrel-theme=pebrel],html[data-pebrel-theme=silver-steel]{--dsw-sidebar-fill:#f3f4f6;--dsw-accent:#495057;--dsw-accent-soft:#4950571f}body[data-pebrel-theme=limestone-coal],html[data-pebrel-theme=limestone-coal]{--dsw-sidebar-fill:#f0efeb;--dsw-layer-3:#f0efeb;--dsw-module-platform:#f0efeb;--dsw-accent:#58554c;--dsw-accent-soft:#58554c1f}body[data-pebrel-theme=linen-moss],html[data-pebrel-theme=linen-moss]{--dsw-sidebar-fill:#f2f2ec;--dsw-layer-3:#f2f2ec;--dsw-module-platform:#f2f2ec;--dsw-accent:#5f635f;--dsw-accent-soft:#5f635f1f}body[data-pebrel-theme=nord-paper],html[data-pebrel-theme=nord-paper]{--dsw-bg-base:#fcfbf9;--dsw-bg-elevated:#f5f4f0;--dsw-sidebar-fill:#f5f4f0;--dsw-input-major:#fcfbf9;--dsw-bubble:#8c8a8014;--dsw-hover:#ebeae5;--dsw-active:#2b5a382e;--dsw-label-primary:#1a1a1a;--dsw-label-secondary:#474646;--dsw-label-tertiary:#8c8a80;--dsw-label-caption:#a8a49a;--dsw-border-l1:#eceae4;--dsw-border-l2:#e0dfd5;--dsw-border-l3:#d5d3c9;--dsw-border-l4:#c1beb5;--dsw-accent:#2b5a38;--dsw-accent-soft:#2b5a382e;--dsw-warn:#a85a20;--dsw-success:#2b5a38;--dsw-danger:#a33a3a;--dsw-selector:#ebeae5;--dsw-layer-2:#fcfbf9;--dsw-layer-3:#f5f4f0;--dsw-btn-elevated:#fcfbf9;--dsw-btn-floating-hover:#ebeae5;--dsw-module-platform:#f0efe9;--dsw-border-strong:#8c8a80;--dsw-glass-popover:#fcfbf9;--dsw-glass-input:#fcfbf9;--dsw-glass-modal:#f5f4f0;--dsw-mask:#1a1a1a30}body[data-pebrel-theme][data-ds-dark-theme],html[data-pebrel-theme][data-ds-dark-theme]{--dsw-label-primary:#e2e8f0;--dsw-label-secondary:#b9c3cf;--dsw-label-tertiary:#94a3b8;--dsw-label-caption:#64748b;--dsw-bubble:#ffffff0d;--dsw-hover:#cbd5e124;--dsw-active:#cbd5e136;--dsw-border-l1:#cbd5e114;--dsw-border-l2:#cbd5e11f;--dsw-border-l3:#cbd5e129;--dsw-border-l4:#cbd5e13d;--dsw-warn:#f59e0b;--dsw-success:#7db2c2;--dsw-danger:#c44a58;--dsw-selector:#cbd5e114;--dsw-border-strong:#94a3b8;--dsw-mask:#02061780;--dsw-elevation-stroke:var(--dsw-border-l2)}body[data-pebrel-theme=silver-steel][data-ds-dark-theme],html[data-pebrel-theme=silver-steel][data-ds-dark-theme]{--dsw-bg-base:#16181e;--dsw-bg-elevated:#1e2129;--dsw-sidebar-fill:#16181e;--dsw-input-major:#1a1c24;--dsw-layer-2:#1e2129;--dsw-layer-3:#343a48;--dsw-btn-elevated:#1e2129;--dsw-btn-floating-hover:#cbd5e124;--dsw-module-platform:#1e2129;--dsw-glass-popover:#1e2129;--dsw-glass-input:#1a1c24;--dsw-glass-modal:#1e2129;--dsw-accent:#94a3b8;--dsw-accent-soft:#94a3b826}body[data-pebrel-theme=limestone-coal][data-ds-dark-theme],html[data-pebrel-theme=limestone-coal][data-ds-dark-theme]{--dsw-bg-base:#161616;--dsw-bg-elevated:#1e1e1e;--dsw-sidebar-fill:#161616;--dsw-input-major:#171717;--dsw-layer-2:#1e1e1e;--dsw-layer-3:#383836;--dsw-btn-elevated:#1e1e1e;--dsw-btn-floating-hover:#cbd5e124;--dsw-module-platform:#1e1e1e;--dsw-glass-popover:#1e1e1e;--dsw-glass-input:#171717;--dsw-glass-modal:#1e1e1e;--dsw-accent:#d4d4d4;--dsw-accent-soft:#d4d4d424;--dsw-warn:#ceb27e}body[data-pebrel-theme=linen-moss][data-ds-dark-theme],html[data-pebrel-theme=linen-moss][data-ds-dark-theme]{--dsw-bg-base:#191c19;--dsw-bg-elevated:#212521;--dsw-sidebar-fill:#191c19;--dsw-input-major:#1e211e;--dsw-layer-2:#212521;--dsw-layer-3:#363d36;--dsw-btn-elevated:#212521;--dsw-btn-floating-hover:#cbd5e124;--dsw-module-platform:#212521;--dsw-glass-popover:#212521;--dsw-glass-input:#1e211e;--dsw-glass-modal:#212521;--dsw-accent:#a3b3a3;--dsw-accent-soft:#a3b3a326}body[data-pebrel-theme=nord-paper][data-ds-dark-theme],html[data-pebrel-theme=nord-paper][data-ds-dark-theme]{--dsw-bg-base:#2e3440;--dsw-bg-elevated:#3b4252;--dsw-sidebar-fill:#2e3440;--dsw-input-major:#3b4252;--dsw-bubble:#3b4252;--dsw-hover:#ffffff0f;--dsw-active:#88c0d02e;--dsw-label-primary:#e5e9f0;--dsw-label-secondary:#c0c7d3;--dsw-label-tertiary:#7b8294;--dsw-label-caption:#6f7688;--dsw-border-l1:#ffffff0d;--dsw-border-l2:#ffffff0f;--dsw-border-l3:#434c5e;--dsw-border-l4:#4c566a;--dsw-accent:#88c0d0;--dsw-accent-soft:#88c0d02e;--dsw-warn:#ebcb8b;--dsw-success:#a3be8c;--dsw-danger:#bf616a;--dsw-selector:#ffffff0f;--dsw-layer-2:#3b4252;--dsw-layer-3:#434c5e;--dsw-btn-elevated:#3b4252;--dsw-btn-floating-hover:#434c5e;--dsw-module-platform:#3b4252;--dsw-border-strong:#7b8294;--dsw-glass-popover:#3b4252;--dsw-glass-input:#3b4252;--dsw-glass-modal:#3b4252;--dsw-mask:#0206175c}body[data-pebrel-theme=pebrel][data-ds-dark-theme],html[data-pebrel-theme=pebrel][data-ds-dark-theme]{--dsw-bg-base:#222630;--dsw-bg-elevated:#2b303b;--dsw-sidebar-fill:#222630;--dsw-input-major:#0f111a;--dsw-layer-2:#2b303b;--dsw-layer-3:#414858;--dsw-btn-elevated:#2b303b;--dsw-btn-floating-hover:#cbd5e124;--dsw-module-platform:#2b303b;--dsw-glass-popover:#2b303b;--dsw-glass-input:#0f111a;--dsw-glass-modal:#2b303b;--dsw-accent:#52a8ff;--dsw-accent-soft:#52a8ff26}@keyframes piweb-spin-kf{to{transform:rotate(1turn)}}.piweb-spin{animation:piweb-spin-kf .8s linear infinite}@keyframes piweb-pulse-kf{0%,to{opacity:1}50%{opacity:.3}}.piweb-pulse{animation:piweb-pulse-kf 1.1s ease-in-out infinite}@keyframes stream-cursor-kf{0%,49%{opacity:1}50%,to{opacity:0}}.stream-cursor{vertical-align:-.15em;background:var(--dsw-accent);width:2px;height:1em;margin-left:2px;animation:stream-cursor-kf 1s step-end infinite;display:inline-block}.pw-seg{border:1px solid var(--dsw-border-l2);background:var(--dsw-bg-elevated);border-radius:10px;flex:none;gap:2px;padding:2px;display:inline-flex}.pw-seg>button{height:20px;color:var(--dsw-label-tertiary);white-space:nowrap;transition:background .22s var(--isx-ease),color .22s var(--isx-ease),transform .18s var(--isx-ease);border-radius:7px;padding:0 9px;font-size:11.5px;line-height:20px}.pw-seg>button:hover:not([data-active=true]){color:var(--dsw-label-primary);background:var(--dsw-hover)}.pw-seg>button[data-active=true]{background:var(--dsw-label-primary);color:var(--dsw-bg-base);font-weight:500}.pw-chip{border:1px solid var(--dsw-border-l2);height:22px;color:var(--dsw-label-secondary);white-space:nowrap;transition:background .22s var(--isx-ease),color .22s var(--isx-ease),border-color .22s var(--isx-ease),transform .2s var(--isx-ease);border-radius:999px;flex:none;padding:0 9px;font-size:11px;line-height:20px}.pw-chip:hover:not(:disabled){background:var(--dsw-hover);border-color:var(--dsw-label-primary);color:var(--dsw-label-primary);transform:translateY(-.5px)}.pw-chip:active:not(:disabled){transform:scale(.92)}.pw-chip[data-active=true]{background:var(--dsw-label-primary);border-color:var(--dsw-label-primary);color:var(--dsw-bg-base)}.pw-chip:disabled{opacity:.4;pointer-events:none}.pw-ref-chip{max-width:260px;height:22px;font-size:12px;font-family:var(--font-mono);color:var(--dsw-label-secondary);transition:background var(--ds-duration-fast) var(--ds-ease-in-out),border-color var(--ds-duration-fast) var(--ds-ease-in-out),color var(--ds-duration-fast) var(--ds-ease-in-out);background:0 0;border:.5px solid #0000;border-radius:6px;flex:none;align-items:center;gap:5px;padding:0 4px 0 6px;animation:pw-ref-rise .24s cubic-bezier(.2,.8,.2,1) backwards;display:flex}.pw-ref-chip:hover{background:var(--dsw-hover);border-color:var(--dsw-border-l3);color:var(--dsw-label-primary)}@keyframes pw-ref-rise{0%{opacity:0;transform:translateY(6px)scale(.96)}to{opacity:1;transform:none}}.pw-ref-close{width:16px;height:16px;color:var(--dsw-label-caption);opacity:0;transition:opacity var(--ds-duration-fast) var(--ds-ease-in-out),background var(--ds-duration-fast) var(--ds-ease-in-out);border-radius:999px;flex:none;justify-content:center;align-items:center;font-size:10px;display:flex}.pw-ref-chip:focus-within .pw-ref-close,.pw-ref-chip:hover .pw-ref-close{opacity:1}.pw-ref-close:hover{background:var(--dsw-selector);color:var(--dsw-label-primary)}.pw-ref-close:disabled{opacity:.4}@media (prefers-reduced-motion:reduce){.pw-ref-chip{animation:none}}.pw-file-fan-container{flex:none;position:relative}.pw-file-card{transition:transform .32s cubic-bezier(.2,.8,.2,1),box-shadow .2s var(--isx-ease),border-color .2s var(--isx-ease);box-shadow:0 1px 4px #00000014;background:var(--dsw-bg-elevated)!important;border:1px solid var(--dsw-border-l2)!important;border-radius:10px!important}.pw-file-card:hover,.pw-file-card[data-lifted=true]{border-color:var(--dsw-border-l3)!important;box-shadow:0 4px 14px #00000029!important}.pw-file-card .pw-ref-close{opacity:.6}.pw-file-card:focus-within .pw-ref-close,.pw-file-card:hover .pw-ref-close{opacity:1}.pw-deck-action-btn{height:28px;color:var(--dsw-label-primary);background:var(--dsw-bg-elevated);border:1px solid var(--dsw-border-l2);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);cursor:pointer;white-space:nowrap;transition:all .2s var(--isx-ease);border-radius:999px;align-items:center;gap:5px;padding:0 12px;font-size:12px;font-weight:500;display:inline-flex;box-shadow:0 4px 14px #00000038}.pw-deck-action-btn:hover:not(:disabled){background:var(--dsw-label-primary);color:var(--dsw-bg-base);border-color:var(--dsw-label-primary);transform:translateY(-1px);box-shadow:0 6px 18px #00000047}.pw-deck-action-btn:active:not(:disabled){transform:scale(.94)}.pw-deck-action-btn:disabled{opacity:.45;cursor:not-allowed}.pw-deck-action-btn.pw-deck-action-clear:hover:not(:disabled){color:var(--dsw-danger);background:#ef444426;border-color:#ef444459}.pw-image-thumb{flex:none;position:relative}.pw-image-thumb img{box-shadow:0 0 0 .5px var(--dsw-border-l2);display:block}.pw-image-fan{flex:none;transition:width .32s cubic-bezier(.2,.8,.2,1),height .32s cubic-bezier(.2,.8,.2,1);position:relative}.pw-image-card{width:96px;height:96px;transition:transform .36s cubic-bezier(.2,.8,.2,1),opacity .2s;position:absolute;top:0;left:0}.pw-image-card[data-hidden=true]{opacity:0;pointer-events:none}.pw-image-face{background:linear-gradient(var(--dsw-selector),var(--dsw-selector)),var(--dsw-glass-input);width:100%;height:100%;box-shadow:0 0 0 .5px var(--dsw-border-l3),0 1px 3px #0000001f;transition:box-shadow var(--ds-duration-fast) var(--ds-ease-in-out);border-radius:10px;display:block;overflow:hidden}.pw-image-card[data-lifted=true] .pw-image-face{box-shadow:0 0 0 .5px var(--dsw-border-l4),0 10px 24px #00000038}.pw-image-face img{transition:opacity .24s}.pw-image-fan:not([data-expanded=true]) .pw-image-card+.pw-image-card .pw-image-face img{opacity:0}.pw-image-face:focus-visible{outline:2px solid var(--dsw-accent);outline-offset:2px}.pw-image-fan[data-crowded=true] .pw-image-delete{opacity:0;pointer-events:none;transition:opacity var(--ds-duration-fast) var(--ds-ease-in-out)}.pw-image-fan[data-crowded=true] .pw-image-card:focus-within .pw-image-delete,.pw-image-fan[data-crowded=true] .pw-image-card:hover .pw-image-delete{opacity:1;pointer-events:auto}.pw-image-delete{background:var(--dsw-label-primary);width:22px;height:22px;color:var(--dsw-bg-base);box-shadow:0 0 0 1.5px var(--dsw-glass-input);border-radius:999px;justify-content:center;align-items:center;font-size:11px;display:flex;position:absolute;top:-6px;right:-6px}.pw-image-delete:disabled{opacity:.4}.pw-chat-image-preview{cursor:zoom-in;vertical-align:top;background:0 0;border:0;max-width:100%;padding:0;display:inline-block}.pw-chat-image-preview>img{display:block}.pw-chat-image-preview:focus-visible{outline:2px solid var(--dsw-accent);outline-offset:3px;border-radius:12px}.pw-lightbox{z-index:200;background:#000000c7;justify-content:center;padding:56px 16px 24px;position:fixed;inset:0}.pw-lightbox,.pw-lightbox-bar{align-items:center;display:flex}.pw-lightbox-bar{gap:8px;position:absolute;top:12px;left:16px;right:16px}.pw-lightbox-count{font-variant-numeric:tabular-nums;color:#ffffffc7;flex:1;font-size:13px}.pw-lightbox-btn{color:#fff;min-width:30px;height:30px;transition:background var(--ds-duration-fast) var(--ds-ease-in-out);background:#ffffff24;border-radius:999px;padding:0 12px;font-size:13px}.pw-lightbox-btn:hover{background:#ffffff3d}.pw-lightbox-btn:disabled{opacity:.4}.pw-lightbox-image{object-fit:contain;transform-origin:50%;border-radius:12px;max-width:100%;max-height:100%;animation:pw-viewer-zoom .2s cubic-bezier(.2,.8,.2,1)}@keyframes pw-viewer-zoom{0%{opacity:0;transform:scale(.92)}to{opacity:1;transform:none}}.pw-lightbox-nav{color:#fff;width:40px;height:40px;transition:background var(--ds-duration-fast) var(--ds-ease-in-out);background:#ffffff24;border-radius:999px;margin-top:-20px;font-size:26px;line-height:38px;position:absolute;top:50%}.pw-lightbox-nav:hover{background:#ffffff3d}.pw-lightbox-nav[data-side=prev]{left:16px}.pw-lightbox-nav[data-side=next]{right:16px}.pw-lightbox-btn:focus-visible,.pw-lightbox-nav:focus-visible{outline-offset:2px;outline:2px solid #fff}@media (prefers-reduced-motion:reduce){.pw-image-card,.pw-image-fan{transition:none}}.pw-audit-field{border:.5px solid var(--dsw-border-l2);background:var(--dsw-glass-input);width:100%;height:30px;color:var(--dsw-label-primary);transition:border-color var(--ds-duration-fast) var(--ds-ease-in-out),box-shadow var(--ds-duration-fast) var(--ds-ease-in-out);border-radius:9px;padding:0 8px;font-size:12.5px}.pw-audit-field:focus{border-color:var(--dsw-accent);box-shadow:0 0 0 2px var(--dsw-accent-soft)}.pw-audit-field[aria-invalid=true]{border-color:var(--dsw-danger)}.pw-audit-field:disabled{opacity:.55}.pw-project{background:var(--dsw-sidebar-fill);border-right:.5px solid var(--dsw-border-l2)}.pw-project input,.pw-viewer input{color:var(--dsw-label-primary);outline:none}.pw-tree{-webkit-user-select:none;user-select:none;font-size:12.5px;line-height:22px}.pw-tree-row{cursor:pointer;white-space:nowrap;height:22px;color:var(--dsw-label-primary);transition:background .18s var(--isx-ease),transform .18s var(--isx-ease);border-radius:8px;align-items:center;gap:4px;padding-right:8px;display:flex;position:absolute;left:0;right:0}.pw-tree-row:hover{background:var(--dsw-hover);transform:translate(2px)}.pw-tree-row[data-focused],.pw-tree-row[data-selected]{background:var(--dsw-active)}.pw-tree:focus-visible .pw-tree-row[data-focused]{box-shadow:inset 0 0 0 1px var(--dsw-accent)}.pw-tree-chevron,.pw-tree-row[data-lazy]>.pw-tree-name{color:var(--dsw-label-caption)}.pw-tree-chevron{width:12px;flex:none;justify-content:center;align-items:center;display:inline-flex}.pw-tree-icon{object-fit:contain;flex:none;width:16px;height:16px}.pw-tree-row>.pw-tree-icon{filter:saturate(.78);transition:filter var(--ds-duration-fast) var(--ds-ease-in-out),opacity var(--ds-duration-fast) var(--ds-ease-in-out)}.pw-tree-row>.pw-tree-icon[data-kind=dir]{opacity:.88;transform:translateY(-.25px)scale(.87)}.pw-tree-row>.pw-tree-icon[data-kind=file]{opacity:.93;transform:scale(.91)}.pw-tree-row:hover>.pw-tree-icon{filter:saturate(.95);opacity:1}.pw-viewer .pw-tree-icon{filter:saturate(.82);opacity:.92;transform:scale(.9)}.pw-tree-name{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.pw-tree-from{color:var(--dsw-label-caption);margin-left:6px;font-size:11px}.pw-tree-stat{font-variant-numeric:tabular-nums;color:var(--dsw-label-caption);flex:none;gap:4px;font-size:10.5px;display:inline-flex}.pw-tree-badge{text-align:center;font-variant-numeric:tabular-nums;border:1px solid;border-radius:999px;flex:none;min-width:14px;height:14px;padding:0 4px;font-size:10px;font-weight:700;line-height:12px}.pw-tree-actions{flex:none;align-items:center;gap:1px;display:none}.pw-tree-row:hover .pw-tree-actions{display:inline-flex}.pw-tree-row:hover .pw-tree-stat{display:none}.pw-tree-pulse{background:var(--dsw-accent);border-radius:999px;flex:none;width:6px;height:6px;animation:dot-breathe 1s ease-in-out infinite}.pw-tree-row[data-pending]>.pw-tree-name{color:var(--dsw-accent)}@keyframes pw-tree-in{0%{opacity:0;transform:translate(-6px)}to{opacity:1;transform:none}}@keyframes pw-tree-glow-add{0%{background:#22c55e47}to{background:0 0}}@keyframes pw-tree-glow-mod{0%{background:#f59e0b42}to{background:0 0}}@keyframes pw-tree-glow-del{0%{background:#ec13133d}to{background:0 0}}.pw-tree-row[data-fresh]{animation:pw-tree-in .25s var(--ds-ease-in-out) both,pw-tree-glow-mod 2.2s ease-out both}.pw-tree-row[data-fresh=A]{animation-name:pw-tree-in,pw-tree-glow-add}.pw-tree-row[data-fresh=D]{animation-name:pw-tree-in,pw-tree-glow-del}.pw-timeline{flex:none}.pw-tl-rail{scrollbar-width:none;align-items:flex-end;gap:3px;height:34px;padding:6px 10px 2px;display:flex;overflow-x:auto}.pw-tl-rail::-webkit-scrollbar{display:none}.pw-tl-bar{opacity:.55;width:8px;min-height:3px;transition:opacity .2s var(--isx-ease),transform .2s var(--isx-ease),box-shadow .2s var(--isx-ease);border-radius:4px 4px 1px 1px;flex:none}.pw-tl-bar:hover{opacity:.95;transform:scaleY(1.15)}.pw-tl-bar[data-active]{opacity:1;box-shadow:0 0 0 1px var(--dsw-sidebar-fill),0 0 0 2px var(--dsw-label-secondary)}.pw-tl-bar[data-kind=user]{width:4px}.pw-tl-bar[data-running]{border:1px dashed var(--dsw-label-caption);height:14px;animation:pw-tl-breathe 1.6s var(--ds-ease-in-out) infinite;background:0 0}@keyframes pw-tl-breathe{50%{opacity:.2}}.pw-viewer{width:80vw;height:80vh;box-shadow:var(--dsw-elevation-prominent);animation:pw-in .16s var(--ds-ease-in-out) both;transition:width var(--ds-duration-normal) var(--ds-ease-in-out),height var(--ds-duration-normal) var(--ds-ease-in-out),border-radius var(--ds-duration-normal) var(--ds-ease-in-out);border-radius:20px}.pw-viewer[data-fullscreen]{border-radius:0;width:100vw;height:100vh}.pw-viewer-tabs{flex:none;height:40px;padding:0 8px 0 10px}.pw-viewer-tabs,.pw-viewer-tabstrip{align-items:center;gap:2px;display:flex}.pw-viewer-tabstrip{scrollbar-width:none;min-width:0;overflow-x:auto}.pw-viewer-tabstrip::-webkit-scrollbar{display:none}.pw-viewer-tab{max-width:200px;height:28px;color:var(--dsw-label-tertiary);transition:background var(--ds-duration-fast) var(--ds-ease-in-out),color var(--ds-duration-fast) var(--ds-ease-in-out);border-radius:8px;flex:none;align-items:center;gap:6px;padding:0 8px;font-size:12.5px;display:inline-flex}.pw-viewer-tab:hover{background:var(--dsw-hover);color:var(--dsw-label-primary)}.pw-viewer-tab[data-active=true]{background:var(--dsw-active);color:var(--dsw-label-primary)}.pw-viewer-tab-main{min-width:0;color:inherit;align-items:center;gap:6px;display:inline-flex}.pw-viewer-tab-close{width:16px;height:16px;color:var(--dsw-label-caption);opacity:0;transition:opacity var(--ds-duration-fast) var(--ds-ease-in-out);border-radius:4px;justify-content:center;align-items:center;margin-right:-4px;display:inline-flex}.pw-viewer-tab-close:focus-visible,.pw-viewer-tab:hover .pw-viewer-tab-close,.pw-viewer-tab[data-active=true] .pw-viewer-tab-close{opacity:1}.pw-viewer-tab-close:hover{background:var(--dsw-hover);color:var(--dsw-label-primary)}.pw-viewer-toolbar{flex:none;gap:6px;height:36px;padding:0 12px}.pw-crumb,.pw-viewer-toolbar{align-items:center;display:flex}.pw-crumb{color:var(--dsw-label-tertiary);white-space:nowrap;flex-wrap:nowrap;font-size:12.5px;overflow:hidden}.pw-crumb button:hover{color:var(--dsw-accent)}.pw-crumb-sep{color:var(--dsw-label-caption);margin:0 4px}.pw-viewer-notice{color:var(--dsw-label-secondary);background:var(--dsw-hover);border-bottom:.5px solid var(--dsw-border-l1);flex:none;padding:4px 14px;font-size:11.5px}.pw-viewer-notice[data-kind=deleted]{color:var(--dsw-danger);background:#ec131314}.pw-viewer-notice[data-kind=warn]{color:var(--dsw-warn)}.pw-viewer .md pre{overflow-x:auto}.pw-quick{z-index:5;background:#00000014;justify-content:center;align-items:flex-start;padding-top:56px;display:flex;position:absolute;inset:0}.pw-quick-box{border-radius:14px;width:min(560px,90%);padding:4px}.pw-quick-list{max-height:50vh;padding:2px;overflow-y:auto}.pw-quick-item{width:100%;height:30px;color:var(--dsw-label-primary);text-align:left;border-radius:8px;align-items:center;gap:8px;padding:0 8px;font-size:12.5px;display:flex}.pw-quick-item[data-active=true]{background:var(--dsw-active)}.pw-fdiff{font-family:var(--font-mono);font-size:12px;line-height:20px}.pw-fdiff-row{white-space:pre;height:20px;color:var(--dsw-label-secondary);align-items:stretch;display:flex;position:absolute;left:0;right:0}.pw-fdiff-row[data-kind=add]{box-shadow:inset 2px 0 0 var(--dsw-success);background:#22c55e24}.pw-fdiff-row[data-kind=del]{box-shadow:inset 2px 0 0 var(--dsw-danger);background:#ec13131f}.pw-fdiff-gutter{color:var(--dsw-label-caption);-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;background:inherit;flex:none;gap:1ch;padding:0 8px 0 10px;display:inline-flex;position:sticky;left:0}.pw-fdiff-gutter>span{display:inline-block}.pw-fdiff-sign{-webkit-user-select:none;user-select:none;width:1.5ch;color:var(--dsw-label-caption);flex:none}.pw-fdiff-row[data-kind=add] .pw-fdiff-sign{color:var(--dsw-success)}.pw-fdiff-row[data-kind=del] .pw-fdiff-sign{color:var(--dsw-danger)}.pw-fdiff-text{background:0 0;flex:1;padding-right:24px}.pw-fdiff-fold{height:20px;color:var(--dsw-label-caption);background:var(--dsw-hover);text-align:center;letter-spacing:.02em;font-size:11px;position:absolute;left:0;right:0}.pw-fdiff-fold:hover{color:var(--dsw-accent)}.pw-fdiff-ticks{pointer-events:none;width:8px;position:absolute;top:0;bottom:0;right:2px}.pw-fdiff-tick{pointer-events:auto;cursor:pointer;background:var(--dsw-success);opacity:.6;border-radius:1px;width:8px;height:3px;position:absolute;right:0}.pw-fdiff-tick[data-kind=del]{background:var(--dsw-danger)}.pw-fdiff-tick[data-current]{opacity:1;box-shadow:0 0 0 1px var(--dsw-label-tertiary)}.pw-turn-lite>div{white-space:pre-wrap;overflow-wrap:anywhere}@media (max-width:840px){.pw-viewer{border-radius:0;width:100vw;height:100vh}}@supports (height:100dvh){.pw-viewer[data-fullscreen]{height:100dvh}@media (max-width:840px){.pw-viewer{height:100dvh}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@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-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@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-duration{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(1turn)}}
@@ -1,10 +1,10 @@
1
- // File: /home/runner/work/PiWeb/PiWeb/src/app/api/agent/[id]/side-chat/route.ts
2
- import * as entry from '../../../../../../../src/app/api/agent/[id]/side-chat/route.js'
1
+ // File: /home/runner/work/PiWeb/PiWeb/src/app/api/agent/resources/route.ts
2
+ import * as entry from '../../../../../../src/app/api/agent/resources/route.js'
3
3
  import type { NextRequest } from 'next/server.js'
4
4
 
5
5
  import type { InstantConfigForTypeCheckInternal, Prefetch, EnsureStatic } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
6
 
7
- type TEntry = typeof import('../../../../../../../src/app/api/agent/[id]/side-chat/route.js')
7
+ type TEntry = typeof import('../../../../../../src/app/api/agent/resources/route.js')
8
8
 
9
9
  type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
10
  ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/login"
5
- type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/events" | "/api/agent/[id]/side-chat" | "/api/agent/[id]/tree" | "/api/agent/new" | "/api/config" | "/api/files" | "/api/fs" | "/api/git" | "/api/github" | "/api/growth" | "/api/health" | "/api/models" | "/api/models/defaults" | "/api/pi-settings" | "/api/plugins" | "/api/prompts" | "/api/remote" | "/api/security" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/export" | "/api/sessions/import" | "/api/skills" | "/api/update" | "/api/version" | "/api/web-auth" | "/api/workspaces"
5
+ type AppRouteHandlerRoutes = "/api/agent/[id]" | "/api/agent/[id]/events" | "/api/agent/[id]/tree" | "/api/agent/new" | "/api/agent/resources" | "/api/config" | "/api/files" | "/api/fs" | "/api/git" | "/api/github" | "/api/growth" | "/api/health" | "/api/models" | "/api/models/defaults" | "/api/pi-settings" | "/api/plugins" | "/api/prompts" | "/api/remote" | "/api/security" | "/api/sessions" | "/api/sessions/[id]" | "/api/sessions/[id]/export" | "/api/sessions/import" | "/api/skills" | "/api/update" | "/api/version" | "/api/web-auth" | "/api/workspaces"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -14,9 +14,9 @@ interface ParamMap {
14
14
  "/": {}
15
15
  "/api/agent/[id]": { "id": string; }
16
16
  "/api/agent/[id]/events": { "id": string; }
17
- "/api/agent/[id]/side-chat": { "id": string; }
18
17
  "/api/agent/[id]/tree": { "id": string; }
19
18
  "/api/agent/new": {}
19
+ "/api/agent/resources": {}
20
20
  "/api/config": {}
21
21
  "/api/files": {}
22
22
  "/api/fs": {}
@@ -106,30 +106,30 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
106
106
  type __Unused = __Check
107
107
  }
108
108
 
109
- // Validate ../../src/app/api/agent/[id]/side-chat/route.ts
109
+ // Validate ../../src/app/api/agent/[id]/tree/route.ts
110
110
  {
111
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/[id]/side-chat">> = Specific
112
- const handler = {} as typeof import("../../src/app/api/agent/[id]/side-chat/route.js")
111
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/[id]/tree">> = Specific
112
+ const handler = {} as typeof import("../../src/app/api/agent/[id]/tree/route.js")
113
113
  type __Check = __IsExpected<typeof handler>
114
114
 
115
115
  // @ts-ignore
116
116
  type __Unused = __Check
117
117
  }
118
118
 
119
- // Validate ../../src/app/api/agent/[id]/tree/route.ts
119
+ // Validate ../../src/app/api/agent/new/route.ts
120
120
  {
121
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/[id]/tree">> = Specific
122
- const handler = {} as typeof import("../../src/app/api/agent/[id]/tree/route.js")
121
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/new">> = Specific
122
+ const handler = {} as typeof import("../../src/app/api/agent/new/route.js")
123
123
  type __Check = __IsExpected<typeof handler>
124
124
 
125
125
  // @ts-ignore
126
126
  type __Unused = __Check
127
127
  }
128
128
 
129
- // Validate ../../src/app/api/agent/new/route.ts
129
+ // Validate ../../src/app/api/agent/resources/route.ts
130
130
  {
131
- type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/new">> = Specific
132
- const handler = {} as typeof import("../../src/app/api/agent/new/route.js")
131
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/agent/resources">> = Specific
132
+ const handler = {} as typeof import("../../src/app/api/agent/resources/route.js")
133
133
  type __Check = __IsExpected<typeof handler>
134
134
 
135
135
  // @ts-ignore
package/README.md CHANGED
@@ -110,7 +110,7 @@ is npm's default tag, so `npm install -g @rexvane/piweb` behaves identically; if
110
110
  is a mirror that syncs with a delay, add `--registry=https://registry.npmjs.org` to get a
111
111
  release the moment it is published. Restart `piweb` afterwards to serve the new version.
112
112
 
113
- Or install a specific version: `npm install -g @rexvane/piweb@0.3.4`.
113
+ Or install a specific version: `npm install -g @rexvane/piweb@0.3.26`.
114
114
 
115
115
  **Updating from the UI**: every time PiWeb starts it checks PiWeb and pi for new versions in the
116
116
  background. When one is available it prints `[更新] 有新版本:…` in the terminal and shows a notice
package/next.config.ts CHANGED
@@ -48,7 +48,7 @@ export default (phase: string): NextConfig => {
48
48
  // pi SDK 与其动态加载的扩展都运行在服务端(Node runtime),不对客户端打包。
49
49
  // pi-ai 也走运行时加载:打进 .next 的话,服务里会有两份 pi-ai(pi-coding-agent 自己从
50
50
  // node_modules 再加载一份),npm 成品包单独更新 pi 后打包的那份还停在旧版本。
51
- serverExternalPackages: ["@earendil-works/pi-coding-agent", "@earendil-works/pi-ai"],
51
+ serverExternalPackages: ["@earendil-works/pi-coding-agent", "@earendil-works/pi-ai", "@earendil-works/pi-agent-core"],
52
52
  // Image prompts allow 268 MB of base64 plus text and JSON framing.
53
53
  experimental: { proxyClientMaxBodySize: "272mb" },
54
54
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rexvane/piweb",
3
- "version": "0.3.24",
3
+ "version": "0.3.26",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Modern web UI for the pi coding agent, driven by the official pi SDK without modifying pi",
@@ -52,14 +52,14 @@
52
52
  },
53
53
  "dependencies": {
54
54
  "@automann/maple-mono-cn": "^7.9.2",
55
- "@earendil-works/chord": "1.2.0",
56
- "@earendil-works/pi-agent-core": "1.2.0",
57
- "@earendil-works/pi-ai": "1.2.0",
58
- "@earendil-works/pi-codemode": "1.2.0",
59
- "@earendil-works/pi-coding-agent": "1.2.0",
60
- "@earendil-works/pi-mcp": "1.2.0",
61
- "@earendil-works/pi-telemetry": "1.2.0",
62
- "@earendil-works/pi-tui": "1.2.0",
55
+ "@earendil-works/chord": "1.3.0",
56
+ "@earendil-works/pi-agent-core": "1.3.0",
57
+ "@earendil-works/pi-ai": "1.3.0",
58
+ "@earendil-works/pi-codemode": "1.3.0",
59
+ "@earendil-works/pi-coding-agent": "1.3.0",
60
+ "@earendil-works/pi-mcp": "1.3.0",
61
+ "@earendil-works/pi-telemetry": "1.3.0",
62
+ "@earendil-works/pi-tui": "1.3.0",
63
63
  "@lobehub/icons-static-svg": "^1.95.0",
64
64
  "@tailwindcss/postcss": "^4.2.2",
65
65
  "@types/node": "^26",
@@ -0,0 +1,87 @@
1
+ /**
2
+ * 把本仓的 src/ 同步进全局安装的 @rexvane/piweb,并就地重建成品构建。
3
+ *
4
+ * 为什么不是直接把仓库里的 .next 拷过去:Next 的 webpack/swc 规则会排除一切
5
+ * node_modules 下的路径,而安装目录本身就在 node_modules 里,直接在原地构建
6
+ * 会以「@/i18n 解析不到 / TS 文件的 import 被当语法错误」失败。仓库里本来就有
7
+ * 官方解法 —— scripts/install-build.mjs 的 ensureInstallBuild:在一个不经过任何
8
+ * node_modules 的暂存目录里构建,再把成品 .next 拷回来。这里复用它。
9
+ *
10
+ * 只动 src/ 与 .next/src/assets、pi 的依赖、用户数据一律不碰。
11
+ * 用法:node scripts/apply-global.mjs [--out <全局安装根>] [--dry]
12
+ */
13
+ import { spawnSync } from "node:child_process";
14
+ import fs from "node:fs";
15
+ import path from "node:path";
16
+ import { pathToFileURL } from "node:url";
17
+
18
+ const DEFAULT_OUT = "D:\\NodeJs\\node_modules\\@rexvane\\piweb";
19
+ const args = process.argv.slice(2);
20
+ const outIndex = args.indexOf("--out");
21
+ const OUT = outIndex >= 0 ? path.resolve(args[outIndex + 1]) : DEFAULT_OUT;
22
+ const DRY = args.includes("--dry");
23
+ const SRC = process.cwd();
24
+ const SKIP_DIRS = new Set(["assets"]); // 发布包自带的图片资源,源码仓里是同一份,不必覆盖
25
+
26
+ const read = (file) => JSON.parse(fs.readFileSync(file, "utf8"));
27
+ const same = (a, b) => {
28
+ const fa = fs.readFileSync(a), fb = fs.readFileSync(b);
29
+ return fa.length === fb.length && fa.equals(fb);
30
+ };
31
+
32
+ // 1) 版本必须一致:src 是某个版本的源码,装到别的版本上会静默错配
33
+ const localPkg = read(path.join(SRC, "package.json"));
34
+ const outPkg = read(path.join(OUT, "package.json"));
35
+ if (localPkg.version !== outPkg.version) {
36
+ console.error(`版本不一致:源码 ${localPkg.version},目标 ${outPkg.version}。先 npm install -g @rexvane/piweb@${localPkg.version} 对齐。`);
37
+ process.exit(1);
38
+ }
39
+
40
+ // 2) 同步 src/。目标里多出来的文件不动,只覆盖与新增
41
+ let copied = 0;
42
+ const walk = (rel) => {
43
+ for (const entry of fs.readdirSync(path.join(SRC, "src", rel), { withFileTypes: true })) {
44
+ const child = path.join(rel, entry.name);
45
+ if (entry.isDirectory()) {
46
+ if (rel === "" && SKIP_DIRS.has(entry.name)) continue;
47
+ fs.mkdirSync(path.join(OUT, "src", child), { recursive: true });
48
+ walk(child);
49
+ continue;
50
+ }
51
+ const from = path.join(SRC, "src", child);
52
+ const to = path.join(OUT, "src", child);
53
+ if (fs.existsSync(to) && same(from, to)) continue;
54
+ if (!DRY) {
55
+ fs.mkdirSync(path.dirname(to), { recursive: true });
56
+ fs.copyFileSync(from, to);
57
+ }
58
+ copied += 1;
59
+ }
60
+ };
61
+ walk("");
62
+ console.log(`src 同步:${copied} 个文件${DRY ? "(dry-run,未写入)" : "已写入"}(src/assets 不覆盖)`);
63
+ if (DRY) process.exit(0);
64
+
65
+ // 3) 重建成品构建。ensureInstallBuild 只看「有没有可用构建」,所以先把旧 .next 让开
66
+ const build = await import(pathToFileURL(path.join(OUT, "scripts", "install-build.mjs")).href);
67
+ const nextBin = build.resolveNextBin(OUT);
68
+ if (!nextBin) {
69
+ console.error("安装目录里找不到 Next(依赖被清空过?),无法重建。");
70
+ process.exit(1);
71
+ }
72
+ const old = path.join(OUT, `.next-old-${Date.now()}`);
73
+ const target = path.join(OUT, ".next");
74
+ if (fs.existsSync(target)) fs.renameSync(target, old);
75
+ const status = spawnSync(process.execPath, ["-e", `
76
+ const { ensureInstallBuild } = await import(${JSON.stringify(pathToFileURL(path.join(OUT, "scripts", "install-build.mjs")).href)});
77
+ const r = ensureInstallBuild(${JSON.stringify(OUT)});
78
+ if (r !== "built") { console.error("ensureInstallBuild ->", r); process.exit(1); }
79
+ `], { stdio: "inherit", env: { ...process.env, PIWEB_SKIP_INSTALL_BUILD: "0", PIWEB_BUILD_DIR: ".next" }, cwd: OUT });
80
+ if (status.status !== 0 || !fs.existsSync(path.join(target, "BUILD_ID"))) {
81
+ // 失败就把旧构建放回去,别把安装留成不可用的状态
82
+ if (fs.existsSync(target)) fs.rmSync(target, { recursive: true, force: true });
83
+ if (fs.existsSync(old)) fs.renameSync(old, target);
84
+ console.error("重建失败,已回滚到原构建(全局安装未被破坏)。");
85
+ process.exit(status.status ?? 1);
86
+ }
87
+ console.log(`构建完成:${target}(旧构建留在 ${path.basename(old)},确认新构建可用后再删)`);
@@ -393,6 +393,27 @@ export async function runLauncher({ args = process.argv.slice(2), env = process.
393
393
  log(`[piweb] 登录链接(令牌即凭据,别外传;它会进浏览器历史):${loginUrl}`);
394
394
  }
395
395
  const next = path.join(plan.root, "node_modules", "next", "dist", "bin", "next");
396
+ /**
397
+ * 服务进程的工作目录**必须是项目根目录**,不能用 `next [directory]` 传参代替。
398
+ *
399
+ * 曾试过把工作目录移到安装目录之外、改由 `next [directory]` 传入项目目录,
400
+ * 目的是让 Windows 上 npm 能替换正在运行的包(进程 cwd 落在包目录内时改名为 EBUSY)。
401
+ * 这条路在 Next 16.4.0 上不成立,原因在 Next 内部:
402
+ *
403
+ * 1. `build/define-env.js` 把 `path.relative(process.cwd(), projectPath)` 作为
404
+ * `__NEXT_RELATIVE_PROJECT_DIR` 烘焙进产物;
405
+ * 2. 处理请求时 `server/route-modules/route-module.js` 用
406
+ * `join(process.cwd(), relativeProjectDir)` 还原项目目录。
407
+ *
408
+ * 于是 cwd 一旦不等于项目目录,还原结果就是错的:
409
+ * - 生产构建烘焙的是空串(构建时 cwd 就是项目根),`join(cwd, "")` 直接等于 cwd;
410
+ * - 跨盘符(cwd 在 C:、项目在 D:)时 `path.relative` 直接返回绝对路径,
411
+ * `join(cwd, "D:\\...")` 拼成 `C:\\...\\run\\D:\\...\\PiWeb` 这种双份路径,
412
+ * 表现为 `ENOENT ... routes-manifest.json`。
413
+ *
414
+ * 所以 cwd 保持项目根;Windows 上「服务运行时就地自我更新」改为让用户先停服务再装
415
+ * (update-service 会据此退回复制命令,见 canSelfUpdateNpmInstall)。
416
+ */
396
417
  const child = start(process.execPath, [next, plan.command, ...(plan.command === "dev" ? ["--webpack"] : []), "-p", String(port), "-H", options.hostname], {
397
418
  cwd: plan.root, stdio: "inherit", env: plan.env,
398
419
  });
@@ -0,0 +1,19 @@
1
+ /** Prepare Pi's real search binaries before the CI suite switches to offline mode. */
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { createFindTool, createGrepTool } from "@earendil-works/pi-coding-agent";
5
+
6
+ if (process.env.PI_OFFLINE === "1" || /^(true|yes)$/i.test(process.env.PI_OFFLINE ?? "")) {
7
+ throw new Error("Prepare SDK binaries with PI_OFFLINE unset, then run the tests offline.");
8
+ }
9
+ const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../..");
10
+ const probes = [
11
+ { name: "fd", tool: createFindTool(root), input: { pattern: "package.json", path: root, limit: 1 } },
12
+ { name: "rg", tool: createGrepTool(root), input: { pattern: '"name"', path: path.join(root, "package.json"), limit: 1 } },
13
+ ];
14
+ for (const { name, tool, input } of probes) {
15
+ const result = await tool.execute(`ci-prepare-${name}`, input, AbortSignal.timeout(120_000));
16
+ if (result.isError) throw new Error(name + ": " + JSON.stringify(result.content));
17
+ if (!result.content.some((part) => part.type === "text" && part.text.trim())) throw new Error(name + " produced no probe output");
18
+ console.log(`[ci] ${name} is ready for offline SDK tests`);
19
+ }
@@ -1,13 +1,14 @@
1
1
  import { NextResponse } from "next/server";
2
2
  import { createNewSession } from "@/lib/agent-manager";
3
3
  import { BoundaryError, resolveWorkspacePath } from "@/lib/path-security";
4
+ import { APP_ROOT } from "@/lib/app-root";
4
5
 
5
6
  export const dynamic = "force-dynamic";
6
7
 
7
8
  export async function POST(req: Request) {
8
9
  try {
9
10
  const body = (await req.json()) as { cwd?: unknown };
10
- const cwd = await resolveWorkspacePath(body.cwd ?? process.cwd());
11
+ const cwd = await resolveWorkspacePath(body.cwd ?? APP_ROOT);
11
12
  const { sessionPath } = await createNewSession(cwd);
12
13
  return NextResponse.json({ success: true, data: { sessionPath } });
13
14
  } catch (error) {
@@ -0,0 +1,18 @@
1
+ import { NextResponse } from "next/server";
2
+ import { loadWorkspaceResources } from "@/lib/agent-manager";
3
+ import { BoundaryError, resolveWorkspacePath } from "@/lib/path-security";
4
+
5
+ export const dynamic = "force-dynamic";
6
+
7
+ /** 新会话/冷会话的补全数据;不建会话、不启动 MCP。 */
8
+ export async function GET(req: Request) {
9
+ try {
10
+ const cwd = await resolveWorkspacePath(new URL(req.url).searchParams.get("cwd"));
11
+ return NextResponse.json({ success: true, data: await loadWorkspaceResources(cwd) });
12
+ } catch (error) {
13
+ return NextResponse.json(
14
+ { success: false, error: error instanceof Error ? error.message : "request failed" },
15
+ { status: error instanceof BoundaryError ? 400 : 500 },
16
+ );
17
+ }
18
+ }