@calmabacus/pi-web 1.0.0

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 (778) hide show
  1. package/.next/BUILD_ID +1 -0
  2. package/.next/app-path-routes-manifest.json +66 -0
  3. package/.next/build-manifest.json +20 -0
  4. package/.next/diagnostics/build-diagnostics.json +6 -0
  5. package/.next/diagnostics/framework.json +1 -0
  6. package/.next/export-marker.json +6 -0
  7. package/.next/images-manifest.json +68 -0
  8. package/.next/next-minimal-server.js.nft.json +1 -0
  9. package/.next/next-server.js.nft.json +1 -0
  10. package/.next/package.json +1 -0
  11. package/.next/prerender-manifest.json +189 -0
  12. package/.next/react-loadable-manifest.json +2367 -0
  13. package/.next/required-server-files.js +387 -0
  14. package/.next/required-server-files.json +387 -0
  15. package/.next/routes-manifest.json +505 -0
  16. package/.next/server/app/_global-error/page.js +31 -0
  17. package/.next/server/app/_global-error/page.js.nft.json +1 -0
  18. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -0
  19. package/.next/server/app/_global-error.html +1 -0
  20. package/.next/server/app/_global-error.meta +27 -0
  21. package/.next/server/app/_global-error.rsc +14 -0
  22. package/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  23. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +20 -0
  24. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  25. package/.next/server/app/_not-found/page.js +1 -0
  26. package/.next/server/app/_not-found/page.js.nft.json +1 -0
  27. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  28. package/.next/server/app/_not-found.html +1 -0
  29. package/.next/server/app/_not-found.meta +27 -0
  30. package/.next/server/app/_not-found.rsc +23 -0
  31. package/.next/server/app/_not-found.segments/_full.segment.rsc +23 -0
  32. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +29 -0
  33. package/.next/server/app/_not-found.segments/_tree.segment.rsc +8 -0
  34. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -0
  35. package/.next/server/app/api/agent/[id]/bash-output/route.js.nft.json +1 -0
  36. package/.next/server/app/api/agent/[id]/bash-output/route_client-reference-manifest.js +1 -0
  37. package/.next/server/app/api/agent/[id]/events/route.js +3 -0
  38. package/.next/server/app/api/agent/[id]/events/route.js.nft.json +1 -0
  39. package/.next/server/app/api/agent/[id]/events/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/agent/[id]/lease/route.js +1 -0
  41. package/.next/server/app/api/agent/[id]/lease/route.js.nft.json +1 -0
  42. package/.next/server/app/api/agent/[id]/lease/route_client-reference-manifest.js +1 -0
  43. package/.next/server/app/api/agent/[id]/route.js +1 -0
  44. package/.next/server/app/api/agent/[id]/route.js.nft.json +1 -0
  45. package/.next/server/app/api/agent/[id]/route_client-reference-manifest.js +1 -0
  46. package/.next/server/app/api/agent/new/route.js +1 -0
  47. package/.next/server/app/api/agent/new/route.js.nft.json +1 -0
  48. package/.next/server/app/api/agent/new/route_client-reference-manifest.js +1 -0
  49. package/.next/server/app/api/agent/running/route.js +1 -0
  50. package/.next/server/app/api/agent/running/route.js.nft.json +1 -0
  51. package/.next/server/app/api/agent/running/route_client-reference-manifest.js +1 -0
  52. package/.next/server/app/api/app-update/route.js +1 -0
  53. package/.next/server/app/api/app-update/route.js.nft.json +1 -0
  54. package/.next/server/app/api/app-update/route_client-reference-manifest.js +1 -0
  55. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -0
  56. package/.next/server/app/api/auth/api-key/[provider]/route.js.nft.json +1 -0
  57. package/.next/server/app/api/auth/api-key/[provider]/route_client-reference-manifest.js +1 -0
  58. package/.next/server/app/api/auth/login/[provider]/route.js +3 -0
  59. package/.next/server/app/api/auth/login/[provider]/route.js.nft.json +1 -0
  60. package/.next/server/app/api/auth/login/[provider]/route_client-reference-manifest.js +1 -0
  61. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -0
  62. package/.next/server/app/api/auth/logout/[provider]/route.js.nft.json +1 -0
  63. package/.next/server/app/api/auth/logout/[provider]/route_client-reference-manifest.js +1 -0
  64. package/.next/server/app/api/auth/providers/route.js +1 -0
  65. package/.next/server/app/api/auth/providers/route.js.nft.json +1 -0
  66. package/.next/server/app/api/auth/providers/route_client-reference-manifest.js +1 -0
  67. package/.next/server/app/api/cwd/browse/route.js +1 -0
  68. package/.next/server/app/api/cwd/browse/route.js.nft.json +1 -0
  69. package/.next/server/app/api/cwd/browse/route_client-reference-manifest.js +1 -0
  70. package/.next/server/app/api/cwd/validate/route.js +1 -0
  71. package/.next/server/app/api/cwd/validate/route.js.nft.json +1 -0
  72. package/.next/server/app/api/cwd/validate/route_client-reference-manifest.js +1 -0
  73. package/.next/server/app/api/default-cwd/route.js +1 -0
  74. package/.next/server/app/api/default-cwd/route.js.nft.json +1 -0
  75. package/.next/server/app/api/default-cwd/route_client-reference-manifest.js +1 -0
  76. package/.next/server/app/api/file-index/route.js +1 -0
  77. package/.next/server/app/api/file-index/route.js.nft.json +1 -0
  78. package/.next/server/app/api/file-index/route_client-reference-manifest.js +1 -0
  79. package/.next/server/app/api/files/[...path]/route.js +49 -0
  80. package/.next/server/app/api/files/[...path]/route.js.nft.json +1 -0
  81. package/.next/server/app/api/files/[...path]/route_client-reference-manifest.js +1 -0
  82. package/.next/server/app/api/git/diff/route.js +6 -0
  83. package/.next/server/app/api/git/diff/route.js.nft.json +1 -0
  84. package/.next/server/app/api/git/diff/route_client-reference-manifest.js +1 -0
  85. package/.next/server/app/api/git/status/route.js +6 -0
  86. package/.next/server/app/api/git/status/route.js.nft.json +1 -0
  87. package/.next/server/app/api/git/status/route_client-reference-manifest.js +1 -0
  88. package/.next/server/app/api/home/route.js +1 -0
  89. package/.next/server/app/api/home/route.js.nft.json +1 -0
  90. package/.next/server/app/api/home/route_client-reference-manifest.js +1 -0
  91. package/.next/server/app/api/image-generation/route.js +1 -0
  92. package/.next/server/app/api/image-generation/route.js.nft.json +1 -0
  93. package/.next/server/app/api/image-generation/route_client-reference-manifest.js +1 -0
  94. package/.next/server/app/api/image-generation/settings/connections/route.js +1 -0
  95. package/.next/server/app/api/image-generation/settings/connections/route.js.nft.json +1 -0
  96. package/.next/server/app/api/image-generation/settings/connections/route_client-reference-manifest.js +1 -0
  97. package/.next/server/app/api/image-generation/settings/route.js +1 -0
  98. package/.next/server/app/api/image-generation/settings/route.js.nft.json +1 -0
  99. package/.next/server/app/api/image-generation/settings/route_client-reference-manifest.js +1 -0
  100. package/.next/server/app/api/models/route.js +1 -0
  101. package/.next/server/app/api/models/route.js.nft.json +1 -0
  102. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  103. package/.next/server/app/api/models-config/catalog/route.js +1 -0
  104. package/.next/server/app/api/models-config/catalog/route.js.nft.json +1 -0
  105. package/.next/server/app/api/models-config/catalog/route_client-reference-manifest.js +1 -0
  106. package/.next/server/app/api/models-config/discover/route.js +1 -0
  107. package/.next/server/app/api/models-config/discover/route.js.nft.json +1 -0
  108. package/.next/server/app/api/models-config/discover/route_client-reference-manifest.js +1 -0
  109. package/.next/server/app/api/models-config/picker/route.js +1 -0
  110. package/.next/server/app/api/models-config/picker/route.js.nft.json +1 -0
  111. package/.next/server/app/api/models-config/picker/route_client-reference-manifest.js +1 -0
  112. package/.next/server/app/api/models-config/route.js +1 -0
  113. package/.next/server/app/api/models-config/route.js.nft.json +1 -0
  114. package/.next/server/app/api/models-config/route_client-reference-manifest.js +1 -0
  115. package/.next/server/app/api/models-config/runtime/route.js +1 -0
  116. package/.next/server/app/api/models-config/runtime/route.js.nft.json +1 -0
  117. package/.next/server/app/api/models-config/runtime/route_client-reference-manifest.js +1 -0
  118. package/.next/server/app/api/models-config/test/route.js +1 -0
  119. package/.next/server/app/api/models-config/test/route.js.nft.json +1 -0
  120. package/.next/server/app/api/models-config/test/route_client-reference-manifest.js +1 -0
  121. package/.next/server/app/api/plugins/check/route.js +1 -0
  122. package/.next/server/app/api/plugins/check/route.js.nft.json +1 -0
  123. package/.next/server/app/api/plugins/check/route_client-reference-manifest.js +1 -0
  124. package/.next/server/app/api/plugins/route.js +1 -0
  125. package/.next/server/app/api/plugins/route.js.nft.json +1 -0
  126. package/.next/server/app/api/plugins/route_client-reference-manifest.js +1 -0
  127. package/.next/server/app/api/project-trust/route.js +1 -0
  128. package/.next/server/app/api/project-trust/route.js.nft.json +1 -0
  129. package/.next/server/app/api/project-trust/route_client-reference-manifest.js +1 -0
  130. package/.next/server/app/api/push/config/route.js +1 -0
  131. package/.next/server/app/api/push/config/route.js.nft.json +1 -0
  132. package/.next/server/app/api/push/config/route_client-reference-manifest.js +1 -0
  133. package/.next/server/app/api/push/subscribe/route.js +1 -0
  134. package/.next/server/app/api/push/subscribe/route.js.nft.json +1 -0
  135. package/.next/server/app/api/push/subscribe/route_client-reference-manifest.js +1 -0
  136. package/.next/server/app/api/sessions/[id]/auto-name/route.js +10 -0
  137. package/.next/server/app/api/sessions/[id]/auto-name/route.js.nft.json +1 -0
  138. package/.next/server/app/api/sessions/[id]/auto-name/route_client-reference-manifest.js +1 -0
  139. package/.next/server/app/api/sessions/[id]/context/route.js +1 -0
  140. package/.next/server/app/api/sessions/[id]/context/route.js.nft.json +1 -0
  141. package/.next/server/app/api/sessions/[id]/context/route_client-reference-manifest.js +1 -0
  142. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -0
  143. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js.nft.json +1 -0
  144. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route_client-reference-manifest.js +1 -0
  145. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js +1 -0
  146. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.js.nft.json +1 -0
  147. package/.next/server/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route_client-reference-manifest.js +1 -0
  148. package/.next/server/app/api/sessions/[id]/export/route.js +56 -0
  149. package/.next/server/app/api/sessions/[id]/export/route.js.nft.json +1 -0
  150. package/.next/server/app/api/sessions/[id]/export/route_client-reference-manifest.js +1 -0
  151. package/.next/server/app/api/sessions/[id]/outline/route.js +1 -0
  152. package/.next/server/app/api/sessions/[id]/outline/route.js.nft.json +1 -0
  153. package/.next/server/app/api/sessions/[id]/outline/route_client-reference-manifest.js +1 -0
  154. package/.next/server/app/api/sessions/[id]/route.js +1 -0
  155. package/.next/server/app/api/sessions/[id]/route.js.nft.json +1 -0
  156. package/.next/server/app/api/sessions/[id]/route_client-reference-manifest.js +1 -0
  157. package/.next/server/app/api/sessions/[id]/state/route.js +1 -0
  158. package/.next/server/app/api/sessions/[id]/state/route.js.nft.json +1 -0
  159. package/.next/server/app/api/sessions/[id]/state/route_client-reference-manifest.js +1 -0
  160. package/.next/server/app/api/sessions/route.js +1 -0
  161. package/.next/server/app/api/sessions/route.js.nft.json +1 -0
  162. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -0
  163. package/.next/server/app/api/sessions/search/route.js +1 -0
  164. package/.next/server/app/api/sessions/search/route.js.nft.json +1 -0
  165. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -0
  166. package/.next/server/app/api/skills/check/route.js +1 -0
  167. package/.next/server/app/api/skills/check/route.js.nft.json +1 -0
  168. package/.next/server/app/api/skills/check/route_client-reference-manifest.js +1 -0
  169. package/.next/server/app/api/skills/install/route.js +1 -0
  170. package/.next/server/app/api/skills/install/route.js.nft.json +1 -0
  171. package/.next/server/app/api/skills/install/route_client-reference-manifest.js +1 -0
  172. package/.next/server/app/api/skills/route.js +4 -0
  173. package/.next/server/app/api/skills/route.js.nft.json +1 -0
  174. package/.next/server/app/api/skills/route_client-reference-manifest.js +1 -0
  175. package/.next/server/app/api/skills/search/route.js +1 -0
  176. package/.next/server/app/api/skills/search/route.js.nft.json +1 -0
  177. package/.next/server/app/api/skills/search/route_client-reference-manifest.js +1 -0
  178. package/.next/server/app/api/skills/update/route.js +1 -0
  179. package/.next/server/app/api/skills/update/route.js.nft.json +1 -0
  180. package/.next/server/app/api/skills/update/route_client-reference-manifest.js +1 -0
  181. package/.next/server/app/api/subagents/[id]/route.js +1 -0
  182. package/.next/server/app/api/subagents/[id]/route.js.nft.json +1 -0
  183. package/.next/server/app/api/subagents/[id]/route_client-reference-manifest.js +1 -0
  184. package/.next/server/app/api/subagents/profiles/route.js +1 -0
  185. package/.next/server/app/api/subagents/profiles/route.js.nft.json +1 -0
  186. package/.next/server/app/api/subagents/profiles/route_client-reference-manifest.js +1 -0
  187. package/.next/server/app/api/subagents/settings/route.js +1 -0
  188. package/.next/server/app/api/subagents/settings/route.js.nft.json +1 -0
  189. package/.next/server/app/api/subagents/settings/route_client-reference-manifest.js +1 -0
  190. package/.next/server/app/api/terminal/[id]/events/route.js +4 -0
  191. package/.next/server/app/api/terminal/[id]/events/route.js.nft.json +1 -0
  192. package/.next/server/app/api/terminal/[id]/events/route_client-reference-manifest.js +1 -0
  193. package/.next/server/app/api/terminal/[id]/route.js +1 -0
  194. package/.next/server/app/api/terminal/[id]/route.js.nft.json +1 -0
  195. package/.next/server/app/api/terminal/[id]/route_client-reference-manifest.js +1 -0
  196. package/.next/server/app/api/terminal/route.js +1 -0
  197. package/.next/server/app/api/terminal/route.js.nft.json +1 -0
  198. package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -0
  199. package/.next/server/app/api/tools/settings/route.js +1 -0
  200. package/.next/server/app/api/tools/settings/route.js.nft.json +1 -0
  201. package/.next/server/app/api/tools/settings/route_client-reference-manifest.js +1 -0
  202. package/.next/server/app/api/web-auth/route.js +1 -0
  203. package/.next/server/app/api/web-auth/route.js.nft.json +1 -0
  204. package/.next/server/app/api/web-auth/route_client-reference-manifest.js +1 -0
  205. package/.next/server/app/api/worktrees/route.js +1 -0
  206. package/.next/server/app/api/worktrees/route.js.nft.json +1 -0
  207. package/.next/server/app/api/worktrees/route_client-reference-manifest.js +1 -0
  208. package/.next/server/app/favicon.ico/route.js +1 -0
  209. package/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  210. package/.next/server/app/favicon.ico.body +0 -0
  211. package/.next/server/app/favicon.ico.meta +1 -0
  212. package/.next/server/app/index.html +1 -0
  213. package/.next/server/app/index.meta +21 -0
  214. package/.next/server/app/index.rsc +24 -0
  215. package/.next/server/app/index.segments/__PAGE__.segment.rsc +29 -0
  216. package/.next/server/app/index.segments/_full.segment.rsc +24 -0
  217. package/.next/server/app/index.segments/_tree.segment.rsc +9 -0
  218. package/.next/server/app/login/page.js +3 -0
  219. package/.next/server/app/login/page.js.nft.json +1 -0
  220. package/.next/server/app/login/page_client-reference-manifest.js +1 -0
  221. package/.next/server/app/login.html +1 -0
  222. package/.next/server/app/login.meta +26 -0
  223. package/.next/server/app/login.rsc +27 -0
  224. package/.next/server/app/login.segments/_full.segment.rsc +27 -0
  225. package/.next/server/app/login.segments/_tree.segment.rsc +8 -0
  226. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +33 -0
  227. package/.next/server/app/manifest.webmanifest/route.js +17 -0
  228. package/.next/server/app/manifest.webmanifest/route.js.nft.json +1 -0
  229. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -0
  230. package/.next/server/app/manifest.webmanifest.body +1 -0
  231. package/.next/server/app/manifest.webmanifest.meta +1 -0
  232. package/.next/server/app/page.js +254 -0
  233. package/.next/server/app/page.js.nft.json +1 -0
  234. package/.next/server/app/page_client-reference-manifest.js +1 -0
  235. package/.next/server/app-paths-manifest.json +66 -0
  236. package/.next/server/chunks/1094.js +160 -0
  237. package/.next/server/chunks/1515.js +1 -0
  238. package/.next/server/chunks/1555.js +1 -0
  239. package/.next/server/chunks/1601.js +24 -0
  240. package/.next/server/chunks/1625.js +1 -0
  241. package/.next/server/chunks/1800.js +1 -0
  242. package/.next/server/chunks/1813.js +1 -0
  243. package/.next/server/chunks/1860.js +1 -0
  244. package/.next/server/chunks/2075.js +23 -0
  245. package/.next/server/chunks/2106.js +1 -0
  246. package/.next/server/chunks/2169.js +36 -0
  247. package/.next/server/chunks/2190.js +1 -0
  248. package/.next/server/chunks/2243.js +1 -0
  249. package/.next/server/chunks/2325.js +82 -0
  250. package/.next/server/chunks/2349.js +1 -0
  251. package/.next/server/chunks/2408.js +1 -0
  252. package/.next/server/chunks/2430.js +193 -0
  253. package/.next/server/chunks/2452.js +93 -0
  254. package/.next/server/chunks/2744.js +1 -0
  255. package/.next/server/chunks/2903.js +1 -0
  256. package/.next/server/chunks/295.js +1 -0
  257. package/.next/server/chunks/3012.js +1 -0
  258. package/.next/server/chunks/3186.js +86 -0
  259. package/.next/server/chunks/3379.js +1 -0
  260. package/.next/server/chunks/3383.js +27 -0
  261. package/.next/server/chunks/3569.js +1 -0
  262. package/.next/server/chunks/3618.js +1 -0
  263. package/.next/server/chunks/3869.js +8 -0
  264. package/.next/server/chunks/3894.js +1 -0
  265. package/.next/server/chunks/426.js +14 -0
  266. package/.next/server/chunks/4267.js +1 -0
  267. package/.next/server/chunks/4315.js +1 -0
  268. package/.next/server/chunks/4367.js +1 -0
  269. package/.next/server/chunks/4372.js +1 -0
  270. package/.next/server/chunks/4538.js +24 -0
  271. package/.next/server/chunks/4548.js +1 -0
  272. package/.next/server/chunks/4563.js +38 -0
  273. package/.next/server/chunks/4674.js +1 -0
  274. package/.next/server/chunks/4741.js +165 -0
  275. package/.next/server/chunks/4980.js +1 -0
  276. package/.next/server/chunks/5029.js +1 -0
  277. package/.next/server/chunks/5318.js +1 -0
  278. package/.next/server/chunks/5582.js +8 -0
  279. package/.next/server/chunks/5974.js +77 -0
  280. package/.next/server/chunks/6052.js +141 -0
  281. package/.next/server/chunks/611.js +1 -0
  282. package/.next/server/chunks/6253.js +104 -0
  283. package/.next/server/chunks/6337.js +1 -0
  284. package/.next/server/chunks/6366.js +80 -0
  285. package/.next/server/chunks/6429.js +29 -0
  286. package/.next/server/chunks/673.js +287 -0
  287. package/.next/server/chunks/6759.js +1 -0
  288. package/.next/server/chunks/6916.js +226 -0
  289. package/.next/server/chunks/703.js +1 -0
  290. package/.next/server/chunks/7233.js +1 -0
  291. package/.next/server/chunks/7265.js +215 -0
  292. package/.next/server/chunks/7307.js +1 -0
  293. package/.next/server/chunks/7561.js +1 -0
  294. package/.next/server/chunks/7710.js +1 -0
  295. package/.next/server/chunks/7744.js +64 -0
  296. package/.next/server/chunks/7790.js +1 -0
  297. package/.next/server/chunks/7799.js +34 -0
  298. package/.next/server/chunks/7872.js +1 -0
  299. package/.next/server/chunks/8106.js +1 -0
  300. package/.next/server/chunks/8294.js +1 -0
  301. package/.next/server/chunks/8333.js +79 -0
  302. package/.next/server/chunks/835.js +1 -0
  303. package/.next/server/chunks/8397.js +41 -0
  304. package/.next/server/chunks/8604.js +115 -0
  305. package/.next/server/chunks/8679.js +1 -0
  306. package/.next/server/chunks/8713.js +148 -0
  307. package/.next/server/chunks/8782.js +153 -0
  308. package/.next/server/chunks/8920.js +62 -0
  309. package/.next/server/chunks/922.js +5 -0
  310. package/.next/server/chunks/9280.js +255 -0
  311. package/.next/server/chunks/9486.js +1 -0
  312. package/.next/server/chunks/9509.js +1 -0
  313. package/.next/server/chunks/9510.js +90 -0
  314. package/.next/server/chunks/974.js +1 -0
  315. package/.next/server/functions-config-manifest.json +26 -0
  316. package/.next/server/instrumentation.js +1 -0
  317. package/.next/server/instrumentation.js.nft.json +1 -0
  318. package/.next/server/interception-route-rewrite-manifest.js +1 -0
  319. package/.next/server/middleware-build-manifest.js +1 -0
  320. package/.next/server/middleware-manifest.json +6 -0
  321. package/.next/server/middleware-react-loadable-manifest.js +1 -0
  322. package/.next/server/middleware.js +163 -0
  323. package/.next/server/middleware.js.nft.json +1 -0
  324. package/.next/server/next-font-manifest.js +1 -0
  325. package/.next/server/next-font-manifest.json +1 -0
  326. package/.next/server/pages/404.html +1 -0
  327. package/.next/server/pages/500.html +1 -0
  328. package/.next/server/pages-manifest.json +4 -0
  329. package/.next/server/prefetch-hints.json +53 -0
  330. package/.next/server/server-reference-manifest.js +1 -0
  331. package/.next/server/server-reference-manifest.json +1 -0
  332. package/.next/server/webpack-runtime.js +1 -0
  333. package/.next/static/LkMtlo9B5W74YX7J-8ccI/_buildManifest.js +1 -0
  334. package/.next/static/LkMtlo9B5W74YX7J-8ccI/_ssgManifest.js +1 -0
  335. package/.next/static/chunks/103.23142a67b02246a8.js +215 -0
  336. package/.next/static/chunks/1032.12b382a9096ab2a4.js +1 -0
  337. package/.next/static/chunks/1063.775c442bdbeef08b.js +1 -0
  338. package/.next/static/chunks/1278-b81177f3a674e4e0.js +1 -0
  339. package/.next/static/chunks/1327.09252bb80616cc3a.js +1 -0
  340. package/.next/static/chunks/1708.d029f8776e4578de.js +1 -0
  341. package/.next/static/chunks/1781.866132cea8e77cd0.js +1 -0
  342. package/.next/static/chunks/1ba63609.b2ae90f43319a29e.js +153 -0
  343. package/.next/static/chunks/2081.47b6e9391094055f.js +1 -0
  344. package/.next/static/chunks/2181.ba21239d3ac39f81.js +1 -0
  345. package/.next/static/chunks/2258.4defa30121ef44a5.js +1 -0
  346. package/.next/static/chunks/2325.23caf22075e51aa5.js +1 -0
  347. package/.next/static/chunks/2356.523277bb8c6bf72a.js +23 -0
  348. package/.next/static/chunks/2418.b5d9e177e10a686e.js +1 -0
  349. package/.next/static/chunks/2480.cf27ca02e5b19761.js +24 -0
  350. package/.next/static/chunks/2539.c5a4f2fd8e421c70.js +41 -0
  351. package/.next/static/chunks/2619.9431a3f48da8eef4.js +1 -0
  352. package/.next/static/chunks/268.72794ee2773c2060.js +80 -0
  353. package/.next/static/chunks/2695.6f49435bae1e6f33.js +90 -0
  354. package/.next/static/chunks/2703.495a65ed14b2f094.js +36 -0
  355. package/.next/static/chunks/2821.934bcf60fbdc28c6.js +1 -0
  356. package/.next/static/chunks/3251.0dce7a0a0ff67235.js +1 -0
  357. package/.next/static/chunks/3308.be8762955e7155d1.js +73 -0
  358. package/.next/static/chunks/3336.a76f9485fe7cb762.js +1 -0
  359. package/.next/static/chunks/370.8e8f3cf8eb0e29dd.js +1 -0
  360. package/.next/static/chunks/3716.72bf4c9d7325debd.js +1 -0
  361. package/.next/static/chunks/3794-d29203733ca4633c.js +52 -0
  362. package/.next/static/chunks/398.ffa02af9062a3950.js +77 -0
  363. package/.next/static/chunks/3995.eca0f5bef1fc3ae5.js +38 -0
  364. package/.next/static/chunks/4004.74b9bcf5478b1663.js +160 -0
  365. package/.next/static/chunks/4202.8440832386f023c7.js +226 -0
  366. package/.next/static/chunks/4238.6f102dcbcf2ae339.js +141 -0
  367. package/.next/static/chunks/4405.7a19458960a1058e.js +287 -0
  368. package/.next/static/chunks/4424.fd0c93a807a333e1.js +1 -0
  369. package/.next/static/chunks/4866.d1060b4faf2ae1e2.js +1 -0
  370. package/.next/static/chunks/4970.8a63b4953b0e4946.js +1 -0
  371. package/.next/static/chunks/4bd1b696-8a4ab4fdf0ae305a.js +1 -0
  372. package/.next/static/chunks/5020.9ac8d0dc8390bb6e.js +1 -0
  373. package/.next/static/chunks/5137.f163e94c74a94d01.js +1 -0
  374. package/.next/static/chunks/5242.7b643c6b3394cac1.js +1 -0
  375. package/.next/static/chunks/5361.afc00ab2626bacbf.js +1 -0
  376. package/.next/static/chunks/5521.cfdf2cfc6db31407.js +1 -0
  377. package/.next/static/chunks/5526.ff46471041fdcb79.js +86 -0
  378. package/.next/static/chunks/5681.dd0e66b0de16e54b.js +27 -0
  379. package/.next/static/chunks/5772-ddd18c0d4b7715e5.js +3 -0
  380. package/.next/static/chunks/6121.eb9023b1cbc78ee2.js +1 -0
  381. package/.next/static/chunks/6161.4836cd7d031026bf.js +1 -0
  382. package/.next/static/chunks/6195.1153369f5f8b13a2.js +24 -0
  383. package/.next/static/chunks/6294.24f510c0c3e3714c.js +1 -0
  384. package/.next/static/chunks/6654.16f727522ec47f5a.js +1 -0
  385. package/.next/static/chunks/6794.f746d8fbbf248ecf.js +93 -0
  386. package/.next/static/chunks/7256.e07cf52d87d40252.js +1 -0
  387. package/.next/static/chunks/7268.236544be8e242c16.js +1 -0
  388. package/.next/static/chunks/7331.2add3c4e125a2dba.js +104 -0
  389. package/.next/static/chunks/7543.89f7b805ed0f2901.js +1 -0
  390. package/.next/static/chunks/8200.a36b9f8c983c6b9e.js +5 -0
  391. package/.next/static/chunks/869.7152372b662e31af.js +1 -0
  392. package/.next/static/chunks/8863.fa0320ea586efb3b.js +1 -0
  393. package/.next/static/chunks/8885.cf60cac98bf8b70c.js +79 -0
  394. package/.next/static/chunks/8901.e117d206a917bda0.js +1 -0
  395. package/.next/static/chunks/90542734.ae439f2382f58c51.js +1 -0
  396. package/.next/static/chunks/918.6a9bbe564e4a2d0f.js +115 -0
  397. package/.next/static/chunks/934.9006461bd0548660.js +1 -0
  398. package/.next/static/chunks/9445-fde6feabcb39142c.js +7 -0
  399. package/.next/static/chunks/9522.c7c6e9c330f9ba6b.js +1 -0
  400. package/.next/static/chunks/9614.3221013d7f0af27f.js +64 -0
  401. package/.next/static/chunks/9698.4d09a99b9d99f3e5.js +148 -0
  402. package/.next/static/chunks/9705.40a82b97f214e28b.js +1 -0
  403. package/.next/static/chunks/973.88e865b52eff479a.js +8 -0
  404. package/.next/static/chunks/9764.2669775c6e107a01.js +62 -0
  405. package/.next/static/chunks/9793.4567af813117ad25.js +1 -0
  406. package/.next/static/chunks/993e5495.8797001fcfcf2889.js +62 -0
  407. package/.next/static/chunks/9974.9a0f79beca65e8c4.js +34 -0
  408. package/.next/static/chunks/app/_global-error/page-24ad8f9c794ebb73.js +1 -0
  409. package/.next/static/chunks/app/_not-found/page-d1e0360401438077.js +1 -0
  410. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-24ad8f9c794ebb73.js +1 -0
  411. package/.next/static/chunks/app/api/agent/[id]/events/route-24ad8f9c794ebb73.js +1 -0
  412. package/.next/static/chunks/app/api/agent/[id]/lease/route-24ad8f9c794ebb73.js +1 -0
  413. package/.next/static/chunks/app/api/agent/[id]/route-24ad8f9c794ebb73.js +1 -0
  414. package/.next/static/chunks/app/api/agent/new/route-24ad8f9c794ebb73.js +1 -0
  415. package/.next/static/chunks/app/api/agent/running/route-24ad8f9c794ebb73.js +1 -0
  416. package/.next/static/chunks/app/api/app-update/route-24ad8f9c794ebb73.js +1 -0
  417. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-24ad8f9c794ebb73.js +1 -0
  418. package/.next/static/chunks/app/api/auth/login/[provider]/route-24ad8f9c794ebb73.js +1 -0
  419. package/.next/static/chunks/app/api/auth/logout/[provider]/route-24ad8f9c794ebb73.js +1 -0
  420. package/.next/static/chunks/app/api/auth/providers/route-24ad8f9c794ebb73.js +1 -0
  421. package/.next/static/chunks/app/api/cwd/browse/route-24ad8f9c794ebb73.js +1 -0
  422. package/.next/static/chunks/app/api/cwd/validate/route-24ad8f9c794ebb73.js +1 -0
  423. package/.next/static/chunks/app/api/default-cwd/route-24ad8f9c794ebb73.js +1 -0
  424. package/.next/static/chunks/app/api/file-index/route-24ad8f9c794ebb73.js +1 -0
  425. package/.next/static/chunks/app/api/files/[...path]/route-24ad8f9c794ebb73.js +1 -0
  426. package/.next/static/chunks/app/api/git/diff/route-24ad8f9c794ebb73.js +1 -0
  427. package/.next/static/chunks/app/api/git/status/route-24ad8f9c794ebb73.js +1 -0
  428. package/.next/static/chunks/app/api/home/route-24ad8f9c794ebb73.js +1 -0
  429. package/.next/static/chunks/app/api/image-generation/route-24ad8f9c794ebb73.js +1 -0
  430. package/.next/static/chunks/app/api/image-generation/settings/connections/route-24ad8f9c794ebb73.js +1 -0
  431. package/.next/static/chunks/app/api/image-generation/settings/route-24ad8f9c794ebb73.js +1 -0
  432. package/.next/static/chunks/app/api/models/route-24ad8f9c794ebb73.js +1 -0
  433. package/.next/static/chunks/app/api/models-config/catalog/route-24ad8f9c794ebb73.js +1 -0
  434. package/.next/static/chunks/app/api/models-config/discover/route-24ad8f9c794ebb73.js +1 -0
  435. package/.next/static/chunks/app/api/models-config/picker/route-24ad8f9c794ebb73.js +1 -0
  436. package/.next/static/chunks/app/api/models-config/route-24ad8f9c794ebb73.js +1 -0
  437. package/.next/static/chunks/app/api/models-config/runtime/route-24ad8f9c794ebb73.js +1 -0
  438. package/.next/static/chunks/app/api/models-config/test/route-24ad8f9c794ebb73.js +1 -0
  439. package/.next/static/chunks/app/api/plugins/check/route-24ad8f9c794ebb73.js +1 -0
  440. package/.next/static/chunks/app/api/plugins/route-24ad8f9c794ebb73.js +1 -0
  441. package/.next/static/chunks/app/api/project-trust/route-24ad8f9c794ebb73.js +1 -0
  442. package/.next/static/chunks/app/api/push/config/route-24ad8f9c794ebb73.js +1 -0
  443. package/.next/static/chunks/app/api/push/subscribe/route-24ad8f9c794ebb73.js +1 -0
  444. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-24ad8f9c794ebb73.js +1 -0
  445. package/.next/static/chunks/app/api/sessions/[id]/context/route-24ad8f9c794ebb73.js +1 -0
  446. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-24ad8f9c794ebb73.js +1 -0
  447. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route-24ad8f9c794ebb73.js +1 -0
  448. package/.next/static/chunks/app/api/sessions/[id]/export/route-24ad8f9c794ebb73.js +1 -0
  449. package/.next/static/chunks/app/api/sessions/[id]/outline/route-24ad8f9c794ebb73.js +1 -0
  450. package/.next/static/chunks/app/api/sessions/[id]/route-24ad8f9c794ebb73.js +1 -0
  451. package/.next/static/chunks/app/api/sessions/[id]/state/route-24ad8f9c794ebb73.js +1 -0
  452. package/.next/static/chunks/app/api/sessions/route-24ad8f9c794ebb73.js +1 -0
  453. package/.next/static/chunks/app/api/sessions/search/route-24ad8f9c794ebb73.js +1 -0
  454. package/.next/static/chunks/app/api/skills/check/route-24ad8f9c794ebb73.js +1 -0
  455. package/.next/static/chunks/app/api/skills/install/route-24ad8f9c794ebb73.js +1 -0
  456. package/.next/static/chunks/app/api/skills/route-24ad8f9c794ebb73.js +1 -0
  457. package/.next/static/chunks/app/api/skills/search/route-24ad8f9c794ebb73.js +1 -0
  458. package/.next/static/chunks/app/api/skills/update/route-24ad8f9c794ebb73.js +1 -0
  459. package/.next/static/chunks/app/api/subagents/[id]/route-24ad8f9c794ebb73.js +1 -0
  460. package/.next/static/chunks/app/api/subagents/profiles/route-24ad8f9c794ebb73.js +1 -0
  461. package/.next/static/chunks/app/api/subagents/settings/route-24ad8f9c794ebb73.js +1 -0
  462. package/.next/static/chunks/app/api/terminal/[id]/events/route-24ad8f9c794ebb73.js +1 -0
  463. package/.next/static/chunks/app/api/terminal/[id]/route-24ad8f9c794ebb73.js +1 -0
  464. package/.next/static/chunks/app/api/terminal/route-24ad8f9c794ebb73.js +1 -0
  465. package/.next/static/chunks/app/api/tools/settings/route-24ad8f9c794ebb73.js +1 -0
  466. package/.next/static/chunks/app/api/web-auth/route-24ad8f9c794ebb73.js +1 -0
  467. package/.next/static/chunks/app/api/worktrees/route-24ad8f9c794ebb73.js +1 -0
  468. package/.next/static/chunks/app/layout-f900e4d3794672ad.js +1 -0
  469. package/.next/static/chunks/app/login/page-4d08a41789f24789.js +1 -0
  470. package/.next/static/chunks/app/manifest.webmanifest/route-24ad8f9c794ebb73.js +1 -0
  471. package/.next/static/chunks/app/page-3c64134d63e2eff9.js +232 -0
  472. package/.next/static/chunks/bf2ff291.3a109dffc1fe84af.js +122 -0
  473. package/.next/static/chunks/d3ac728e-7964f816a1ca64e5.js +1 -0
  474. package/.next/static/chunks/da12927c.476aa688a637649c.js +82 -0
  475. package/.next/static/chunks/db9d41be.e72ce090a86a3691.js +1 -0
  476. package/.next/static/chunks/e868780c-1584512c612787d7.js +18 -0
  477. package/.next/static/chunks/framework-b33a8f5d57cd8d87.js +1 -0
  478. package/.next/static/chunks/main-app-5f091d229b1e5a0e.js +1 -0
  479. package/.next/static/chunks/main-dac5ab3797407fcb.js +5 -0
  480. package/.next/static/chunks/next/dist/client/components/builtin/app-error-24ad8f9c794ebb73.js +1 -0
  481. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-24ad8f9c794ebb73.js +1 -0
  482. package/.next/static/chunks/next/dist/client/components/builtin/global-error-ae6c57598b75d8bb.js +1 -0
  483. package/.next/static/chunks/next/dist/client/components/builtin/not-found-24ad8f9c794ebb73.js +1 -0
  484. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-24ad8f9c794ebb73.js +1 -0
  485. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  486. package/.next/static/chunks/webpack-25464d90fe89e601.js +1 -0
  487. package/.next/static/css/2ac0338d70747eca.css +1 -0
  488. package/.next/static/css/2f46e0db0d4a3aed.css +1 -0
  489. package/.next/static/css/444123c292add02f.css +1 -0
  490. package/.next/static/css/58d019c61385df31.css +1 -0
  491. package/.next/static/css/89aae141d5b3edde.css +1 -0
  492. package/.next/static/css/fddca953485158e4.css +1 -0
  493. package/.next/static/media/01bdb1c2bb2f530a-s.woff2 +0 -0
  494. package/.next/static/media/060fd7a2ba6f57dc-s.woff2 +0 -0
  495. package/.next/static/media/06d755a5cd3e2b96-s.woff2 +0 -0
  496. package/.next/static/media/09341845bc7215c3-s.woff2 +0 -0
  497. package/.next/static/media/09d8b46d011a8a55-s.woff2 +0 -0
  498. package/.next/static/media/0ac3ab6b6a54cd96-s.woff2 +0 -0
  499. package/.next/static/media/0cb7a0edc360425e-s.woff2 +0 -0
  500. package/.next/static/media/0de82041d2acf4c3-s.woff2 +0 -0
  501. package/.next/static/media/1249fbbadbb69451-s.woff2 +0 -0
  502. package/.next/static/media/15605e25b523335c-s.woff2 +0 -0
  503. package/.next/static/media/182682366c265526-s.woff2 +0 -0
  504. package/.next/static/media/1a3dce5cfb5f7760-s.woff2 +0 -0
  505. package/.next/static/media/1cdd02902f937a18-s.woff2 +0 -0
  506. package/.next/static/media/246116fa49278f72-s.woff2 +0 -0
  507. package/.next/static/media/2ad4a039dd2c0f35-s.woff2 +0 -0
  508. package/.next/static/media/2cd94acf7f6a8cd1-s.woff2 +0 -0
  509. package/.next/static/media/30af2a5bc088caeb-s.woff2 +0 -0
  510. package/.next/static/media/3117748ae3be552d-s.woff2 +0 -0
  511. package/.next/static/media/373befd5a68230ff-s.woff2 +0 -0
  512. package/.next/static/media/37ae20ae1d329cc2-s.woff2 +0 -0
  513. package/.next/static/media/3832bef2caf4f297-s.woff2 +0 -0
  514. package/.next/static/media/3b6ebd4dd223d8c1-s.woff2 +0 -0
  515. package/.next/static/media/3da25081fc21e3b2-s.woff2 +0 -0
  516. package/.next/static/media/3eb545844a1630b6-s.woff2 +0 -0
  517. package/.next/static/media/41870aeb5505be99-s.woff2 +0 -0
  518. package/.next/static/media/45c8f5377f81d417-s.woff2 +0 -0
  519. package/.next/static/media/48d86e2f8821c61e-s.woff2 +0 -0
  520. package/.next/static/media/4957022da3161c6e-s.woff2 +0 -0
  521. package/.next/static/media/4be71ddc6c749643-s.woff2 +0 -0
  522. package/.next/static/media/4c4b3b30b6bcb2be-s.woff2 +0 -0
  523. package/.next/static/media/4dc4381bbf526d04-s.woff2 +0 -0
  524. package/.next/static/media/4eb0814ea9e22f45-s.woff2 +0 -0
  525. package/.next/static/media/4f86cf50532e0e9b-s.woff2 +0 -0
  526. package/.next/static/media/5022b11bb4a81e48-s.woff2 +0 -0
  527. package/.next/static/media/5080c55e2dccd63d-s.woff2 +0 -0
  528. package/.next/static/media/5348b1e69a651725-s.woff2 +0 -0
  529. package/.next/static/media/54c50561be23e605-s.woff2 +0 -0
  530. package/.next/static/media/567d6f765096ee76-s.woff2 +0 -0
  531. package/.next/static/media/58045d1f8695a418-s.woff2 +0 -0
  532. package/.next/static/media/5a274ddc03d9a5ab-s.woff2 +0 -0
  533. package/.next/static/media/5feee92221bb8605-s.woff2 +0 -0
  534. package/.next/static/media/6067d3f78ecc4535-s.woff2 +0 -0
  535. package/.next/static/media/61a11ca45429493a-s.woff2 +0 -0
  536. package/.next/static/media/63d030730737efae-s.woff2 +0 -0
  537. package/.next/static/media/641a7b8a5800ee0e-s.woff2 +0 -0
  538. package/.next/static/media/6bd056ddce336924-s.woff2 +0 -0
  539. package/.next/static/media/6dc0bae4a5666821-s.woff2 +0 -0
  540. package/.next/static/media/7513cc52807669ca-s.woff2 +0 -0
  541. package/.next/static/media/75ae81fea4aec8c5-s.woff2 +0 -0
  542. package/.next/static/media/77f6534b6a3eb37a-s.woff2 +0 -0
  543. package/.next/static/media/782d4006a26041e7-s.woff2 +0 -0
  544. package/.next/static/media/7d509f4f988023eb-s.woff2 +0 -0
  545. package/.next/static/media/7d58f39a50828c68-s.woff2 +0 -0
  546. package/.next/static/media/7db71cc013812f1c-s.woff2 +0 -0
  547. package/.next/static/media/7deddc85b7ffd1dc-s.p.woff2 +0 -0
  548. package/.next/static/media/7eb3f914ae6dd7a0-s.woff2 +0 -0
  549. package/.next/static/media/8051eb8307aa13c8-s.woff2 +0 -0
  550. package/.next/static/media/829dca987e1e010e-s.woff2 +0 -0
  551. package/.next/static/media/842f675c7a332a48-s.woff2 +0 -0
  552. package/.next/static/media/866e2e7b0cbc2cb4-s.woff2 +0 -0
  553. package/.next/static/media/86b38dc7f713ddda-s.woff2 +0 -0
  554. package/.next/static/media/8a3a66ae6bb27151-s.woff2 +0 -0
  555. package/.next/static/media/8b56b70f6d577d9f-s.woff2 +0 -0
  556. package/.next/static/media/8d93dbb77672da11-s.woff2 +0 -0
  557. package/.next/static/media/8f5c2d0a25b8f50c-s.woff2 +0 -0
  558. package/.next/static/media/966e6d14b6c229fc-s.woff2 +0 -0
  559. package/.next/static/media/9877fefe733dd250-s.woff2 +0 -0
  560. package/.next/static/media/9c57f4420502d43a-s.woff2 +0 -0
  561. package/.next/static/media/9cedd2ad7b0bcf3d-s.woff2 +0 -0
  562. package/.next/static/media/KaTeX_AMS-Regular.1608a09b.woff +0 -0
  563. package/.next/static/media/KaTeX_AMS-Regular.4aafdb68.ttf +0 -0
  564. package/.next/static/media/KaTeX_AMS-Regular.a79f1c31.woff2 +0 -0
  565. package/.next/static/media/KaTeX_Caligraphic-Bold.b6770918.woff +0 -0
  566. package/.next/static/media/KaTeX_Caligraphic-Bold.cce5b8ec.ttf +0 -0
  567. package/.next/static/media/KaTeX_Caligraphic-Bold.ec17d132.woff2 +0 -0
  568. package/.next/static/media/KaTeX_Caligraphic-Regular.07ef19e7.ttf +0 -0
  569. package/.next/static/media/KaTeX_Caligraphic-Regular.55fac258.woff2 +0 -0
  570. package/.next/static/media/KaTeX_Caligraphic-Regular.dad44a7f.woff +0 -0
  571. package/.next/static/media/KaTeX_Fraktur-Bold.9f256b85.woff +0 -0
  572. package/.next/static/media/KaTeX_Fraktur-Bold.b18f59e1.ttf +0 -0
  573. package/.next/static/media/KaTeX_Fraktur-Bold.d42a5579.woff2 +0 -0
  574. package/.next/static/media/KaTeX_Fraktur-Regular.7c187121.woff +0 -0
  575. package/.next/static/media/KaTeX_Fraktur-Regular.d3c882a6.woff2 +0 -0
  576. package/.next/static/media/KaTeX_Fraktur-Regular.ed38e79f.ttf +0 -0
  577. package/.next/static/media/KaTeX_Main-Bold.b74a1a8b.ttf +0 -0
  578. package/.next/static/media/KaTeX_Main-Bold.c3fb5ac2.woff2 +0 -0
  579. package/.next/static/media/KaTeX_Main-Bold.d181c465.woff +0 -0
  580. package/.next/static/media/KaTeX_Main-BoldItalic.6f2bb1df.woff2 +0 -0
  581. package/.next/static/media/KaTeX_Main-BoldItalic.70d8b0a5.ttf +0 -0
  582. package/.next/static/media/KaTeX_Main-BoldItalic.e3f82f9d.woff +0 -0
  583. package/.next/static/media/KaTeX_Main-Italic.47373d1e.ttf +0 -0
  584. package/.next/static/media/KaTeX_Main-Italic.8916142b.woff2 +0 -0
  585. package/.next/static/media/KaTeX_Main-Italic.9024d815.woff +0 -0
  586. package/.next/static/media/KaTeX_Main-Regular.0462f03b.woff2 +0 -0
  587. package/.next/static/media/KaTeX_Main-Regular.7f51fe03.woff +0 -0
  588. package/.next/static/media/KaTeX_Main-Regular.b7f8fe9b.ttf +0 -0
  589. package/.next/static/media/KaTeX_Math-BoldItalic.572d331f.woff2 +0 -0
  590. package/.next/static/media/KaTeX_Math-BoldItalic.a879cf83.ttf +0 -0
  591. package/.next/static/media/KaTeX_Math-BoldItalic.f1035d8d.woff +0 -0
  592. package/.next/static/media/KaTeX_Math-Italic.5295ba48.woff +0 -0
  593. package/.next/static/media/KaTeX_Math-Italic.939bc644.ttf +0 -0
  594. package/.next/static/media/KaTeX_Math-Italic.f28c23ac.woff2 +0 -0
  595. package/.next/static/media/KaTeX_SansSerif-Bold.8c5b5494.woff2 +0 -0
  596. package/.next/static/media/KaTeX_SansSerif-Bold.94e1e8dc.ttf +0 -0
  597. package/.next/static/media/KaTeX_SansSerif-Bold.bf59d231.woff +0 -0
  598. package/.next/static/media/KaTeX_SansSerif-Italic.3b1e59b3.woff2 +0 -0
  599. package/.next/static/media/KaTeX_SansSerif-Italic.7c9bc82b.woff +0 -0
  600. package/.next/static/media/KaTeX_SansSerif-Italic.b4c20c84.ttf +0 -0
  601. package/.next/static/media/KaTeX_SansSerif-Regular.74048478.woff +0 -0
  602. package/.next/static/media/KaTeX_SansSerif-Regular.ba21ed5f.woff2 +0 -0
  603. package/.next/static/media/KaTeX_SansSerif-Regular.d4d7ba48.ttf +0 -0
  604. package/.next/static/media/KaTeX_Script-Regular.03e9641d.woff2 +0 -0
  605. package/.next/static/media/KaTeX_Script-Regular.07505710.woff +0 -0
  606. package/.next/static/media/KaTeX_Script-Regular.fe9cbbe1.ttf +0 -0
  607. package/.next/static/media/KaTeX_Size1-Regular.e1e279cb.woff +0 -0
  608. package/.next/static/media/KaTeX_Size1-Regular.eae34984.woff2 +0 -0
  609. package/.next/static/media/KaTeX_Size1-Regular.fabc004a.ttf +0 -0
  610. package/.next/static/media/KaTeX_Size2-Regular.57727022.woff +0 -0
  611. package/.next/static/media/KaTeX_Size2-Regular.5916a24f.woff2 +0 -0
  612. package/.next/static/media/KaTeX_Size2-Regular.d6b476ec.ttf +0 -0
  613. package/.next/static/media/KaTeX_Size3-Regular.9acaf01c.woff +0 -0
  614. package/.next/static/media/KaTeX_Size3-Regular.a144ef58.ttf +0 -0
  615. package/.next/static/media/KaTeX_Size3-Regular.b4230e7e.woff2 +0 -0
  616. package/.next/static/media/KaTeX_Size4-Regular.10d95fd3.woff2 +0 -0
  617. package/.next/static/media/KaTeX_Size4-Regular.7a996c9d.woff +0 -0
  618. package/.next/static/media/KaTeX_Size4-Regular.fbccdabe.ttf +0 -0
  619. package/.next/static/media/KaTeX_Typewriter-Regular.6258592b.woff +0 -0
  620. package/.next/static/media/KaTeX_Typewriter-Regular.a8709e36.woff2 +0 -0
  621. package/.next/static/media/KaTeX_Typewriter-Regular.d97aaf4a.ttf +0 -0
  622. package/.next/static/media/a00fb5ef1ca68e5d-s.woff2 +0 -0
  623. package/.next/static/media/a171b1d72388367c-s.woff2 +0 -0
  624. package/.next/static/media/a310fb84e6868735-s.woff2 +0 -0
  625. package/.next/static/media/a53504b22c396db6-s.woff2 +0 -0
  626. package/.next/static/media/aabb87babcdda375-s.woff2 +0 -0
  627. package/.next/static/media/afe75c8050c8fd4e-s.woff2 +0 -0
  628. package/.next/static/media/b201193f76404e13-s.woff2 +0 -0
  629. package/.next/static/media/b20daecae68a588f-s.woff2 +0 -0
  630. package/.next/static/media/b2574bc564dca98d-s.woff2 +0 -0
  631. package/.next/static/media/b6a1339c290590d0-s.woff2 +0 -0
  632. package/.next/static/media/b6fe4b2295863fe4-s.woff2 +0 -0
  633. package/.next/static/media/bb8ff9c700288292-s.woff2 +0 -0
  634. package/.next/static/media/bc1ccfae4ae17995-s.woff2 +0 -0
  635. package/.next/static/media/be15c189f996aeb2-s.woff2 +0 -0
  636. package/.next/static/media/c0d1f6928a1dbc31-s.woff2 +0 -0
  637. package/.next/static/media/c36d8bb68a53eb60-s.woff2 +0 -0
  638. package/.next/static/media/c5db947ee2561e06-s.woff2 +0 -0
  639. package/.next/static/media/c77ac7f613b44045-s.woff2 +0 -0
  640. package/.next/static/media/ca73d0c74010e612-s.woff2 +0 -0
  641. package/.next/static/media/cfbad6ceeeca5c58-s.woff2 +0 -0
  642. package/.next/static/media/d24aebb82f01e48d-s.woff2 +0 -0
  643. package/.next/static/media/d2c6107607eb7d44-s.woff2 +0 -0
  644. package/.next/static/media/d2c7d5e8db7ce20a-s.woff2 +0 -0
  645. package/.next/static/media/d51f7558abc55aa6-s.woff2 +0 -0
  646. package/.next/static/media/da718921282f76d0-s.woff2 +0 -0
  647. package/.next/static/media/dae37106d788c7c9-s.woff2 +0 -0
  648. package/.next/static/media/e0d4cd45847004a4-s.woff2 +0 -0
  649. package/.next/static/media/e100c7a7874aebd9-s.woff2 +0 -0
  650. package/.next/static/media/e26dff18031f4a7e-s.woff2 +0 -0
  651. package/.next/static/media/e5b759c1d5c42d99-s.woff2 +0 -0
  652. package/.next/static/media/ea21a07081db26d0-s.woff2 +0 -0
  653. package/.next/static/media/eaee7682c49bd1c2-s.woff2 +0 -0
  654. package/.next/static/media/ec14413c594b3356-s.p.woff2 +0 -0
  655. package/.next/static/media/ec408158b9e08aea-s.woff2 +0 -0
  656. package/.next/static/media/ee5d9aad76ea4c0a-s.woff2 +0 -0
  657. package/.next/static/media/efdbc7cff3271ee9-s.woff2 +0 -0
  658. package/.next/static/media/f128be4e72405705-s.woff2 +0 -0
  659. package/.next/static/media/fb6cfff6119f26e8-s.woff2 +0 -0
  660. package/.next/static/media/fd516adbc3328c82-s.woff2 +0 -0
  661. package/.next/trace +7 -0
  662. package/.next/trace-build +1 -0
  663. package/.next/types/app/api/agent/[id]/bash-output/route.ts +353 -0
  664. package/.next/types/app/api/agent/[id]/events/route.ts +353 -0
  665. package/.next/types/app/api/agent/[id]/lease/route.ts +353 -0
  666. package/.next/types/app/api/agent/[id]/route.ts +353 -0
  667. package/.next/types/app/api/agent/new/route.ts +353 -0
  668. package/.next/types/app/api/agent/running/route.ts +353 -0
  669. package/.next/types/app/api/app-update/route.ts +353 -0
  670. package/.next/types/app/api/auth/api-key/[provider]/route.ts +353 -0
  671. package/.next/types/app/api/auth/login/[provider]/route.ts +353 -0
  672. package/.next/types/app/api/auth/logout/[provider]/route.ts +353 -0
  673. package/.next/types/app/api/auth/providers/route.ts +353 -0
  674. package/.next/types/app/api/cwd/browse/route.ts +353 -0
  675. package/.next/types/app/api/cwd/validate/route.ts +353 -0
  676. package/.next/types/app/api/default-cwd/route.ts +353 -0
  677. package/.next/types/app/api/file-index/route.ts +353 -0
  678. package/.next/types/app/api/files/[...path]/route.ts +353 -0
  679. package/.next/types/app/api/git/diff/route.ts +353 -0
  680. package/.next/types/app/api/git/status/route.ts +353 -0
  681. package/.next/types/app/api/home/route.ts +353 -0
  682. package/.next/types/app/api/image-generation/route.ts +353 -0
  683. package/.next/types/app/api/image-generation/settings/connections/route.ts +353 -0
  684. package/.next/types/app/api/image-generation/settings/route.ts +353 -0
  685. package/.next/types/app/api/models/route.ts +353 -0
  686. package/.next/types/app/api/models-config/catalog/route.ts +353 -0
  687. package/.next/types/app/api/models-config/discover/route.ts +353 -0
  688. package/.next/types/app/api/models-config/picker/route.ts +353 -0
  689. package/.next/types/app/api/models-config/route.ts +353 -0
  690. package/.next/types/app/api/models-config/runtime/route.ts +353 -0
  691. package/.next/types/app/api/models-config/test/route.ts +353 -0
  692. package/.next/types/app/api/plugins/check/route.ts +353 -0
  693. package/.next/types/app/api/plugins/route.ts +353 -0
  694. package/.next/types/app/api/project-trust/route.ts +353 -0
  695. package/.next/types/app/api/push/config/route.ts +353 -0
  696. package/.next/types/app/api/push/subscribe/route.ts +353 -0
  697. package/.next/types/app/api/sessions/[id]/auto-name/route.ts +353 -0
  698. package/.next/types/app/api/sessions/[id]/context/route.ts +353 -0
  699. package/.next/types/app/api/sessions/[id]/entries/[entryId]/thinking/route.ts +353 -0
  700. package/.next/types/app/api/sessions/[id]/entries/[entryId]/tool-result-image/route.ts +353 -0
  701. package/.next/types/app/api/sessions/[id]/export/route.ts +353 -0
  702. package/.next/types/app/api/sessions/[id]/outline/route.ts +353 -0
  703. package/.next/types/app/api/sessions/[id]/route.ts +353 -0
  704. package/.next/types/app/api/sessions/[id]/state/route.ts +353 -0
  705. package/.next/types/app/api/sessions/route.ts +353 -0
  706. package/.next/types/app/api/sessions/search/route.ts +353 -0
  707. package/.next/types/app/api/skills/check/route.ts +353 -0
  708. package/.next/types/app/api/skills/install/route.ts +353 -0
  709. package/.next/types/app/api/skills/route.ts +353 -0
  710. package/.next/types/app/api/skills/search/route.ts +353 -0
  711. package/.next/types/app/api/skills/update/route.ts +353 -0
  712. package/.next/types/app/api/subagents/[id]/route.ts +353 -0
  713. package/.next/types/app/api/subagents/profiles/route.ts +353 -0
  714. package/.next/types/app/api/subagents/settings/route.ts +353 -0
  715. package/.next/types/app/api/terminal/[id]/events/route.ts +353 -0
  716. package/.next/types/app/api/terminal/[id]/route.ts +353 -0
  717. package/.next/types/app/api/terminal/route.ts +353 -0
  718. package/.next/types/app/api/tools/settings/route.ts +353 -0
  719. package/.next/types/app/api/web-auth/route.ts +353 -0
  720. package/.next/types/app/api/worktrees/route.ts +353 -0
  721. package/.next/types/app/layout.ts +89 -0
  722. package/.next/types/app/login/page.ts +89 -0
  723. package/.next/types/app/page.ts +89 -0
  724. package/.next/types/cache-life.d.ts +146 -0
  725. package/.next/types/package.json +1 -0
  726. package/.next/types/root-params.d.ts +3 -0
  727. package/.next/types/routes.d.ts +131 -0
  728. package/.next/types/validator.ts +601 -0
  729. package/LICENSE +22 -0
  730. package/README.md +64 -0
  731. package/bin/node-version.js +24 -0
  732. package/bin/pi-web-options.js +87 -0
  733. package/bin/pi-web.js +132 -0
  734. package/bin/prepare-terminal.js +14 -0
  735. package/bin/process-lifecycle.js +81 -0
  736. package/next.config.ts +73 -0
  737. package/package.json +95 -0
  738. package/public/icons/apple-touch-icon.png +0 -0
  739. package/public/icons/catppuccin/LICENSE +22 -0
  740. package/public/icons/catppuccin/README.md +9 -0
  741. package/public/icons/catppuccin/latte/_file.svg +3 -0
  742. package/public/icons/catppuccin/latte/_folder.svg +3 -0
  743. package/public/icons/catppuccin/latte/_folder_open.svg +3 -0
  744. package/public/icons/catppuccin/latte/bash.svg +7 -0
  745. package/public/icons/catppuccin/latte/bun-lock.svg +8 -0
  746. package/public/icons/catppuccin/latte/config.svg +3 -0
  747. package/public/icons/catppuccin/latte/css.svg +6 -0
  748. package/public/icons/catppuccin/latte/database.svg +3 -0
  749. package/public/icons/catppuccin/latte/docker.svg +3 -0
  750. package/public/icons/catppuccin/latte/env.svg +3 -0
  751. package/public/icons/catppuccin/latte/eslint.svg +6 -0
  752. package/public/icons/catppuccin/latte/git.svg +6 -0
  753. package/public/icons/catppuccin/latte/go.svg +3 -0
  754. package/public/icons/catppuccin/latte/graphql.svg +3 -0
  755. package/public/icons/catppuccin/latte/html.svg +6 -0
  756. package/public/icons/catppuccin/latte/javascript-react.svg +8 -0
  757. package/public/icons/catppuccin/latte/javascript.svg +6 -0
  758. package/public/icons/catppuccin/latte/json.svg +3 -0
  759. package/public/icons/catppuccin/latte/lock.svg +3 -0
  760. package/public/icons/catppuccin/latte/markdown.svg +3 -0
  761. package/public/icons/catppuccin/latte/ms-word.svg +6 -0
  762. package/public/icons/catppuccin/latte/next.svg +6 -0
  763. package/public/icons/catppuccin/latte/npm-lock.svg +7 -0
  764. package/public/icons/catppuccin/latte/pdf.svg +3 -0
  765. package/public/icons/catppuccin/latte/python.svg +8 -0
  766. package/public/icons/catppuccin/latte/rust.svg +6 -0
  767. package/public/icons/catppuccin/latte/sass.svg +3 -0
  768. package/public/icons/catppuccin/latte/terraform.svg +3 -0
  769. package/public/icons/catppuccin/latte/toml.svg +3 -0
  770. package/public/icons/catppuccin/latte/typescript-react.svg +8 -0
  771. package/public/icons/catppuccin/latte/typescript.svg +6 -0
  772. package/public/icons/catppuccin/latte/yaml.svg +3 -0
  773. package/public/icons/icon-192.png +0 -0
  774. package/public/icons/icon-512.png +0 -0
  775. package/public/offline.html +83 -0
  776. package/public/provider-icons.svg +54 -0
  777. package/public/sw.js +145 -0
  778. package/public/sw.test.mjs +141 -0
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#df8e1d" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M4.5 11c0 .828427.6715729 1.5 1.5 1.5.8284271 0 1.5-.671573 1.5-1.5V7.5M12.5 8.75C12.5 8.05964406 11.9627417 7.5 11.3 7.5L10.7 7.5C10.0372583 7.5 9.5 8.05964406 9.5 8.75 9.5 9.44035594 10.0372583 10 10.7 10L11.3 10C11.9627417 10 12.5 10.5596441 12.5 11.25 12.5 11.9403559 11.9627417 12.5 11.3 12.5L10.7 12.5C10.0372583 12.5 9.5 11.9403559 9.5 11.25" />
4
+ <path d="m 4,1.5 h 8 c 1.385,0 2.5,1.115 2.5,2.5 v 8 c 0,1.385 -1.115,2.5 -2.5,2.5 H 4 C 2.615,14.5 1.5,13.385 1.5,12 V 4 C 1.5,2.615 2.615,1.5 4,1.5 Z" />
5
+ </g>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#df8e1d" stroke-linecap="round" stroke-linejoin="round" d="M4.5 2.5H4c-.75 0-1.5.75-1.5 1.5v2c0 1.1-1 2-1.83 2 .83 0 1.83.9 1.83 2v2c0 .75.75 1.5 1.5 1.5h.5m7-11h.5c.75 0 1.5.75 1.5 1.5v2c0 1.1 1 2 1.83 2-.83 0-1.83.9-1.83 2v2c0 .74-.75 1.5-1.5 1.5h-.5m-6.5-3a.5.5 0 100-1 .5.5 0 000 1m3 0a.5.5 0 100-1 .5.5 0 000 1m3 0a.5.5 0 100-1 .5.5 0 000 1" />
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#8c8fa1" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.744" d="m12.36 7.104c0.4817 0 0.8722 0.3903 0.8722 0.8717v5.23c0 0.4814-0.3905 0.8717-0.8722 0.8717h-8.721c-0.4817 0-0.8722-0.3903-0.8722-0.8717v-5.23c0-0.4814 0.3905-0.8717 0.8722-0.8717zm-6.977 0v-2.616c0-1.445 1.172-2.616 2.617-2.616 1.445 0 2.617 1.171 2.617 2.616v2.616" />
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#209fb5" stroke-linecap="round" stroke-linejoin="round" d="m9.25 8.25 2.25 2.25 2.25-2.25M3.5 11V5.5l2.04 3 1.96-3V11m4-.5V5M1.65 2.5h12.7c.59 0 1.15.49 1.15 1v9c0 .51-.56 1-1.15 1H1.65c-.59 0-1.15-.49-1.15-1V3.58c0-.5.56-1.08 1.15-1.08" />
3
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#1e66f5" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M2.5 3.13c0-.77.86-1.63 1.62-1.63h9.76c.76 0 1.62.86 1.62 1.63v9.75c0 .76-.86 1.62-1.62 1.62H4.13c-.77 0-1.63-.86-1.63-1.62" />
4
+ <path d="m.5 5.5 1 5 1-5 1 5 .97-5m3.03 1h4m-4 3h4" />
5
+ </g>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#4c4f69" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M12.33 12.85a6.5 6.5 0 111.55-2.08" />
4
+ <path d="M12.33 12.85 5.5 4.5v7m5-7v3" />
5
+ </g>
6
+ </svg>
@@ -0,0 +1,7 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke-linecap="round" stroke-linejoin="round">
3
+ <path stroke="#8c8fa1" d="M15 11.5c.27 0 .5.22.5.5v3a.5.5 0 01-.5.5h-5a.5.5 0 01-.5-.5v-3c0-.28.22-.5.5-.5zm-4 0V10a1.5 1.5 0 013 0v1.5" />
4
+ <path stroke="#4c4f69" d="M9.5 9V5.5h-2v6h-4v-8h8v3" />
5
+ <path stroke="#d20f39" d="M7.54 13.5H3A1.5 1.5 0 011.5 12V3c0-.83.67-1.5 1.5-1.5h9c.83 0 1.5.67 1.5 1.5v3.5" />
6
+ </g>
7
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#d20f39" stroke-linecap="round" stroke-linejoin="round" d="M2.8 14.34c1.81-1.25 3.02-3.16 3.91-5.5.9-2.33 1.86-4.33 1.44-6.63-.06-.36-.57-.73-.83-.7-1.02.06-.95 1.21-.85 1.9.24 1.71 1.56 3.7 2.84 5.56 1.27 1.87 2.32 2.16 3.78 2.26.5.03 1.25-.14 1.37-.58.77-2.8-9.02-.54-12.28 2.08-.4.33-.86 1-.6 1.46.2.36.87.4 1.23.15h0Z" />
3
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke-linecap="round" stroke-linejoin="round">
3
+ <path stroke="#1e66f5" d="M8.5 5.5h-3m6 0V3c0-.8-.7-1.5-1.5-1.5H7c-.8 0-1.5.7-1.5 1.5v2.5H3c-.8 0-1.5.7-1.5 1.5v2c0 .8.7 1.5 1.48 1.5" />
4
+ <path stroke="#df8e1d" d="M10.5 10.5h-3m-3 0V13c0 .8.7 1.5 1.5 1.5h3c.8 0 1.5-.7 1.5-1.5v-2.5H13c.8 0 1.5-.7 1.5-1.5V7c0-.8-.7-1.5-1.48-1.5H11.5c0 1.5 0 2-1 2h-2" />
5
+ <path stroke="#1e66f5" d="M2.98 10.5H4.5c0-1.5 0-2 1-2h2M7.5 3.5v0" />
6
+ <path stroke="#df8e1d" d="m 8.5,12.5 v 0" />
7
+ </g>
8
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#fe640b" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M15.5 9.5Q8 13.505.5 9.5l1-1-1-2 2-.5V4.5h2l.5-2 1.5 1 1.5-2 1.5 2 1.5-1 .5 2h2V6l2 .5-1 2z" />
4
+ <path d="M6.5 7.5a1 1 0 01-1 1 1 1 0 01-1-1 1 1 0 011-1 1 1 0 011 1m5 0a1 1 0 01-1 1 1 1 0 01-1-1 1 1 0 011-1 1 1 0 011 1M4 11.02c-.67.37-1.5.98-1.5 2.23s1.22 1.22 2 1.25v-2M12 11c.67.37 1.5 1 1.5 2.25s-1.22 1.22-2 1.25v-2" />
5
+ </g>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#ea76cb" stroke-linecap="round" stroke-linejoin="round" d="M6.75 6.38c1.85 1.07 3.35.74 4.83-.2 1.5-.95 2.7-2.78 1.3-4.15-.7-.68-3.25-.8-5.62.19-2.36.99-4.59 3.02-4.74 4.11-.31 2.19 3.15 2.88 3.64 4.23s.28 1.98-.2 2.83c-.5.85-1.96 1.62-2.8.68-.83-.95 1.67-2.75 2.98-3.25 1.3-.5 3.1-.4 3.69.25.58.64-.07 1.79-.03 1.79" />
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#8839ef" stroke-linecap="round" stroke-linejoin="round" d="m1.5 6 8 4.25 4-2.25m-12-2V1.5l8 4.25 4-2.25V8m-4-2.25v8.75M5.53 3.82 5.5 12.5l4 2" />
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#e64553" stroke-linecap="round" stroke-linejoin="round" d="M3.5 1.5h-2v13h2m9-13h2v13h-2m-8-11h7v3h-2v6h-3v-6h-2z" />
3
+ </svg>
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#1e66f5" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M8 11.3c4.14 0 7.5-1.28 7.5-2.86S12.14 5.58 8 5.58.5 6.86.5 8.44s3.36 2.87 7.5 2.87Z" />
4
+ <path d="M5.52 9.87c2.07 3.6 4.86 5.86 6.23 5.07 1.37-.8.8-4.34-1.27-7.93S5.62 1.16 4.25 1.95s-.8 4.34 1.27 7.92" />
5
+ <path d="M5.52 7.01c-2.07 3.59-2.64 7.14-1.27 7.93s4.16-1.48 6.23-5.07c2.07-3.58 2.64-7.13 1.27-7.92-1.37-.8-4.16 1.47-6.23 5.06" />
6
+ <path d="M8.5 8.44a.5.5 0 01-.5.5.5.5 0 01-.5-.5.5.5 0 01.5-.5.5.5 0 01.5.5" />
7
+ </g>
8
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <g fill="none" stroke="#1e66f5" stroke-linecap="round" stroke-linejoin="round">
3
+ <path d="M4 1.5h8A2.5 2.5 0 0114.5 4v8a2.5 2.5 0 01-2.5 2.5H4A2.5 2.5 0 011.5 12V4A2.5 2.5 0 014 1.5" />
4
+ <path d="M12.5 8.75c0-.69-.54-1.25-1.2-1.25h-.6c-.66 0-1.2.56-1.2 1.25S10.04 10 10.7 10h.6c.66 0 1.2.56 1.2 1.25s-.54 1.25-1.2 1.25h-.6c-.66 0-1.2-.56-1.2-1.25m-3-3.75v5M5 7.5h3" />
5
+ </g>
6
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16">
2
+ <path fill="none" stroke="#d20f39" stroke-linecap="round" stroke-linejoin="round" d="M2.5 1.5h3l3 4 3-4h3l-9 13h-3L7 8z" />
3
+ </svg>
Binary file
Binary file
@@ -0,0 +1,83 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
6
+ <meta name="theme-color" content="#1a1a1a" />
7
+ <title>Pi Web is offline</title>
8
+ <style>
9
+ :root {
10
+ color-scheme: dark;
11
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
12
+ background: #1a1a1a;
13
+ color: #e8e8e8;
14
+ }
15
+
16
+ * {
17
+ box-sizing: border-box;
18
+ }
19
+
20
+ body {
21
+ min-height: 100dvh;
22
+ margin: 0;
23
+ display: grid;
24
+ place-items: center;
25
+ padding: 32px;
26
+ }
27
+
28
+ main {
29
+ width: min(100%, 420px);
30
+ text-align: center;
31
+ }
32
+
33
+ img {
34
+ width: 88px;
35
+ height: 88px;
36
+ margin-bottom: 24px;
37
+ }
38
+
39
+ h1 {
40
+ margin: 0 0 10px;
41
+ font-size: 22px;
42
+ font-weight: 650;
43
+ letter-spacing: 0;
44
+ }
45
+
46
+ p {
47
+ margin: 0;
48
+ color: #9ca3af;
49
+ font-size: 14px;
50
+ line-height: 1.6;
51
+ }
52
+
53
+ button {
54
+ margin-top: 24px;
55
+ min-height: 40px;
56
+ padding: 0 18px;
57
+ border: 1px solid #3a3a3a;
58
+ border-radius: 6px;
59
+ background: #242424;
60
+ color: #e8e8e8;
61
+ font: inherit;
62
+ cursor: pointer;
63
+ }
64
+
65
+ button:hover {
66
+ background: #2e2e2e;
67
+ }
68
+
69
+ button:focus-visible {
70
+ outline: 2px solid #60a5fa;
71
+ outline-offset: 3px;
72
+ }
73
+ </style>
74
+ </head>
75
+ <body>
76
+ <main>
77
+ <img src="/icons/icon-192.png" alt="" />
78
+ <h1>Pi Web is offline</h1>
79
+ <p>Reconnect to the local Pi Web server, then try again.</p>
80
+ <button type="button" onclick="location.reload()">Try again</button>
81
+ </main>
82
+ </body>
83
+ </html>
@@ -0,0 +1,54 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg">
2
+ <!--
3
+ Icons derived from @lobehub/icons (https://github.com/lobehub/lobe-icons).
4
+ MIT License. Copyright (c) 2023 LobeHub.
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in
14
+ all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
23
+ -->
24
+ <symbol id="anthropic" viewBox="0 0 24 24"><path d="M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z"></path></symbol>
25
+ <symbol id="openai" viewBox="0 0 24 24"><path d="M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z"></path></symbol>
26
+ <symbol id="google" viewBox="0 0 24 24"><path d="M23 12.245c0-.905-.075-1.565-.236-2.25h-10.54v4.083h6.186c-.124 1.014-.797 2.542-2.294 3.569l-.021.136 3.332 2.53.23.022C21.779 18.417 23 15.593 23 12.245z" fill="#4285F4"></path><path d="M12.225 23c3.03 0 5.574-.978 7.433-2.665l-3.542-2.688c-.948.648-2.22 1.1-3.891 1.1a6.745 6.745 0 01-6.386-4.572l-.132.011-3.465 2.628-.045.124C4.043 20.531 7.835 23 12.225 23z" fill="#34A853"></path><path d="M5.84 14.175A6.65 6.65 0 015.463 12c0-.758.138-1.491.361-2.175l-.006-.147-3.508-2.67-.115.054A10.831 10.831 0 001 12c0 1.772.436 3.447 1.197 4.938l3.642-2.763z" fill="#FBBC05"></path><path d="M12.225 5.253c2.108 0 3.529.892 4.34 1.638l3.167-3.031C17.787 2.088 15.255 1 12.225 1 7.834 1 4.043 3.469 2.197 7.062l3.63 2.763a6.77 6.77 0 016.398-4.572z" fill="#EB4335"></path></symbol>
27
+ <symbol id="deepseek" viewBox="0 0 24 24"><path d="M23.748 4.482c-.254-.124-.364.113-.512.234-.051.039-.094.09-.137.136-.372.397-.806.657-1.373.626-.829-.046-1.537.214-2.163.848-.133-.782-.575-1.248-1.247-1.548-.352-.156-.708-.311-.955-.65-.172-.241-.219-.51-.305-.774-.055-.16-.11-.323-.293-.35-.2-.031-.278.136-.356.276-.313.572-.434 1.202-.422 1.84.027 1.436.633 2.58 1.838 3.393.137.093.172.187.129.323-.082.28-.18.552-.266.833-.055.179-.137.217-.329.14a5.526 5.526 0 01-1.736-1.18c-.857-.828-1.631-1.742-2.597-2.458a11.365 11.365 0 00-.689-.471c-.985-.957.13-1.743.388-1.836.27-.098.093-.432-.779-.428-.872.004-1.67.295-2.687.684a3.055 3.055 0 01-.465.137 9.597 9.597 0 00-2.883-.102c-1.885.21-3.39 1.102-4.497 2.623C.082 8.606-.231 10.684.152 12.85c.403 2.284 1.569 4.175 3.36 5.653 1.858 1.533 3.997 2.284 6.438 2.14 1.482-.085 3.133-.284 4.994-1.86.47.234.962.327 1.78.397.63.059 1.236-.03 1.705-.128.735-.156.684-.837.419-.961-2.155-1.004-1.682-.595-2.113-.926 1.096-1.296 2.746-2.642 3.392-7.003.05-.347.007-.565 0-.845-.004-.17.035-.237.23-.256a4.173 4.173 0 001.545-.475c1.396-.763 1.96-2.015 2.093-3.517.02-.23-.004-.467-.247-.588zM11.581 18c-2.089-1.642-3.102-2.183-3.52-2.16-.392.024-.321.471-.235.763.09.288.207.486.371.739.114.167.192.416-.113.603-.673.416-1.842-.14-1.897-.167-1.361-.802-2.5-1.86-3.301-3.307-.774-1.393-1.224-2.887-1.298-4.482-.02-.386.093-.522.477-.592a4.696 4.696 0 011.529-.039c2.132.312 3.946 1.265 5.468 2.774.868.86 1.525 1.887 2.202 2.891.72 1.066 1.494 2.082 2.48 2.914.348.292.625.514.891.677-.802.09-2.14.11-3.054-.614zm1-6.44a.306.306 0 01.415-.287.302.302 0 01.2.288.306.306 0 01-.31.307.303.303 0 01-.304-.308zm3.11 1.596c-.2.081-.399.151-.59.16a1.245 1.245 0 01-.798-.254c-.274-.23-.47-.358-.552-.758a1.73 1.73 0 01.016-.588c.07-.327-.008-.537-.239-.727-.187-.156-.426-.199-.688-.199a.559.559 0 01-.254-.078c-.11-.054-.2-.19-.114-.358.028-.054.16-.186.192-.21.356-.202.767-.136 1.146.016.352.144.618.408 1.001.782.391.451.462.576.685.914.176.265.336.537.445.848.067.195-.019.354-.25.452z" fill="#4D6BFE"></path></symbol>
28
+ <symbol id="groq" viewBox="0 0 24 24"><path d="M12.036 2c-3.853-.035-7 3-7.036 6.781-.035 3.782 3.055 6.872 6.908 6.907h2.42v-2.566h-2.292c-2.407.028-4.38-1.866-4.408-4.23-.029-2.362 1.901-4.298 4.308-4.326h.1c2.407 0 4.358 1.915 4.365 4.278v6.305c0 2.342-1.944 4.25-4.323 4.279a4.375 4.375 0 01-3.033-1.252l-1.851 1.818A7 7 0 0012.029 22h.092c3.803-.056 6.858-3.083 6.879-6.816v-6.5C18.907 4.963 15.817 2 12.036 2z"></path></symbol>
29
+ <symbol id="mistral" viewBox="0 0 24 24"><path d="M3.428 3.4h3.429v3.428H3.428V3.4zm13.714 0h3.43v3.428h-3.43V3.4z" fill="gold"></path><path d="M3.428 6.828h6.857v3.429H3.429V6.828zm10.286 0h6.857v3.429h-6.857V6.828z" fill="#FFAF00"></path><path d="M3.428 10.258h17.144v3.428H3.428v-3.428z" fill="#FF8205"></path><path d="M3.428 13.686h3.429v3.428H3.428v-3.428zm6.858 0h3.429v3.428h-3.429v-3.428zm6.856 0h3.43v3.428h-3.43v-3.428z" fill="#FA500F"></path><path d="M0 17.114h10.286v3.429H0v-3.429zm13.714 0H24v3.429H13.714v-3.429z" fill="#E10500"></path></symbol>
30
+ <symbol id="moonshot" viewBox="0 0 24 24"><path d="M1.052 16.916l9.539 2.552a21.007 21.007 0 00.06 2.033l5.956 1.593a11.997 11.997 0 01-5.586.865l-.18-.016-.044-.004-.084-.009-.094-.01a11.605 11.605 0 01-.157-.02l-.107-.014-.11-.016a11.962 11.962 0 01-.32-.051l-.042-.008-.075-.013-.107-.02-.07-.015-.093-.019-.075-.016-.095-.02-.097-.023-.094-.022-.068-.017-.088-.022-.09-.024-.095-.025-.082-.023-.109-.03-.062-.02-.084-.025-.093-.028-.105-.034-.058-.019-.08-.026-.09-.031-.066-.024a6.293 6.293 0 01-.044-.015l-.068-.025-.101-.037-.057-.022-.08-.03-.087-.035-.088-.035-.079-.032-.095-.04-.063-.028-.063-.027a5.655 5.655 0 01-.041-.018l-.066-.03-.103-.047-.052-.024-.096-.046-.062-.03-.084-.04-.086-.044-.093-.047-.052-.027-.103-.055-.057-.03-.058-.032a6.49 6.49 0 01-.046-.026l-.094-.053-.06-.034-.051-.03-.072-.041-.082-.05-.093-.056-.052-.032-.084-.053-.061-.039-.079-.05-.07-.047-.053-.035a7.785 7.785 0 01-.054-.036l-.044-.03-.044-.03a6.066 6.066 0 01-.04-.028l-.057-.04-.076-.054-.069-.05-.074-.054-.056-.042-.076-.057-.076-.059-.086-.067-.045-.035-.064-.052-.074-.06-.089-.073-.046-.039-.046-.039a7.516 7.516 0 01-.043-.037l-.045-.04-.061-.053-.07-.062-.068-.06-.062-.058-.067-.062-.053-.05-.088-.084a13.28 13.28 0 01-.099-.097l-.029-.028-.041-.042-.069-.07-.05-.051-.05-.053a6.457 6.457 0 01-.168-.179l-.08-.088-.062-.07-.071-.08-.042-.049-.053-.062-.058-.068-.046-.056a7.175 7.175 0 01-.027-.033l-.045-.055-.066-.082-.041-.052-.05-.064-.02-.025a11.99 11.99 0 01-1.44-2.402zm-1.02-5.794l11.353 3.037a20.468 20.468 0 00-.469 2.011l10.817 2.894a12.076 12.076 0 01-1.845 2.005L.657 15.923l-.016-.046-.035-.104a11.965 11.965 0 01-.05-.153l-.007-.023a11.896 11.896 0 01-.207-.741l-.03-.126-.018-.08-.021-.097-.018-.081-.018-.09-.017-.084-.018-.094c-.026-.141-.05-.283-.071-.426l-.017-.118-.011-.083-.013-.102a12.01 12.01 0 01-.019-.161l-.005-.047a12.12 12.12 0 01-.034-2.145zm1.593-5.15l11.948 3.196c-.368.605-.705 1.231-1.01 1.875l11.295 3.022c-.142.82-.368 1.612-.668 2.365l-11.55-3.09L.124 10.26l.015-.1.008-.049.01-.067.015-.087.018-.098c.026-.148.056-.295.088-.442l.028-.124.02-.085.024-.097c.022-.09.045-.18.07-.268l.028-.102.023-.083.03-.1.025-.082.03-.096.026-.082.031-.095a11.896 11.896 0 011.01-2.232zm4.442-4.4L17.352 4.59a20.77 20.77 0 00-1.688 1.721l7.823 2.093c.267.852.442 1.744.513 2.665L2.106 5.213l.045-.065.027-.04.04-.055.046-.065.055-.076.054-.072.064-.086.05-.065.057-.073.055-.07.06-.074.055-.069.065-.077.054-.066.066-.077.053-.06.072-.082.053-.06.067-.074.054-.058.073-.078.058-.06.063-.067.168-.17.1-.098.059-.056.076-.071a12.084 12.084 0 012.272-1.677zM12.017 0h.097l.082.001.069.001.054.002.068.002.046.001.076.003.047.002.06.003.054.002.087.005.105.007.144.011.088.007.044.004.077.008.082.008.047.005.102.012.05.006.108.014.081.01.042.006.065.01.207.032.07.012.065.011.14.026.092.018.11.022.046.01.075.016.041.01L14.7.3l.042.01.065.015.049.012.071.017.096.024.112.03.113.03.113.032.05.015.07.02.078.024.073.023.05.016.05.016.076.025.099.033.102.036.048.017.064.023.093.034.11.041.116.045.1.04.047.02.06.024.041.018.063.026.04.018.057.025.11.048.1.046.074.035.075.036.06.028.092.046.091.045.102.052.053.028.049.026.046.024.06.033.041.022.052.029.088.05.106.06.087.051.057.034.053.032.096.059.088.055.098.062.036.024.064.041.084.056.04.027.062.042.062.043.023.017c.054.037.108.075.161.114l.083.06.065.048.056.043.086.065.082.064.04.03.05.041.086.069.079.065.085.071c.712.6 1.353 1.283 1.909 2.031L7.222.994l.062-.027.065-.028.081-.034.086-.035c.113-.045.227-.09.341-.131l.096-.035.093-.033.084-.03.096-.031c.087-.03.176-.058.264-.085l.091-.027.086-.025.102-.03.085-.023.1-.026L9.04.37l.09-.023.091-.022.095-.022.09-.02.098-.021.091-.02.095-.018.092-.018.1-.018.091-.016.098-.017.092-.014.097-.015.092-.013.102-.013.091-.012.105-.012.09-.01.105-.01c.093-.01.186-.018.28-.024l.106-.008.09-.005.11-.006.093-.004.1-.004.097-.002.099-.002.197-.002z"></path></symbol>
31
+ <symbol id="minimax" viewBox="0 0 24 24"><defs><linearGradient id="lobe-icons-minimax-" x1="0%" x2="100.182%" y1="50.057%" y2="50.057%"><stop offset="0%" stop-color="#E2167E"></stop><stop offset="100%" stop-color="#FE603C"></stop></linearGradient></defs><path d="M16.278 2c1.156 0 2.093.927 2.093 2.07v12.501a.74.74 0 00.744.709.74.74 0 00.743-.709V9.099a2.06 2.06 0 012.071-2.049A2.06 2.06 0 0124 9.1v6.561a.649.649 0 01-.652.645.649.649 0 01-.653-.645V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v7.472a2.037 2.037 0 01-2.048 2.026 2.037 2.037 0 01-2.048-2.026v-12.5a.785.785 0 00-.788-.753.785.785 0 00-.789.752l-.001 15.904A2.037 2.037 0 0113.441 22a2.037 2.037 0 01-2.048-2.026V18.04c0-.356.292-.645.652-.645.36 0 .652.289.652.645v1.934c0 .263.142.506.372.638.23.131.514.131.744 0a.734.734 0 00.372-.638V4.07c0-1.143.937-2.07 2.093-2.07zm-5.674 0c1.156 0 2.093.927 2.093 2.07v11.523a.648.648 0 01-.652.645.648.648 0 01-.652-.645V4.07a.785.785 0 00-.789-.78.785.785 0 00-.789.78v14.013a2.06 2.06 0 01-2.07 2.048 2.06 2.06 0 01-2.071-2.048V9.1a.762.762 0 00-.766-.758.762.762 0 00-.766.758v3.8a2.06 2.06 0 01-2.071 2.049A2.06 2.06 0 010 12.9v-1.378c0-.357.292-.646.652-.646.36 0 .653.29.653.646V12.9c0 .418.343.757.766.757s.766-.339.766-.757V9.099a2.06 2.06 0 012.07-2.048 2.06 2.06 0 012.071 2.048v8.984c0 .419.343.758.767.758.423 0 .766-.339.766-.758V4.07c0-1.143.937-2.07 2.093-2.07z" fill="url(#lobe-icons-minimax-)" fill-rule="nonzero"></path></symbol>
32
+ <symbol id="fireworks" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M14.8 5l-2.801 6.795L9.195 5H7.397l3.072 7.428a1.64 1.64 0 003.038.002L16.598 5H14.8zm1.196 10.352l5.124-5.244-.699-1.669-5.596 5.739a1.664 1.664 0 00-.343 1.807 1.642 1.642 0 001.516 1.012L16 17l8-.02-.699-1.669-7.303.041h-.002zM2.88 10.104l.699-1.669 5.596 5.739c.468.479.603 1.189.343 1.807a1.643 1.643 0 01-1.516 1.012l-8-.018-.002.002.699-1.669 7.303.042-5.122-5.246z" fill="#5019C5" fill-rule="evenodd"></path></symbol>
33
+ <symbol id="huggingface" viewBox="0 0 24 24"><path d="M2.25 11.535c0-3.407 1.847-6.554 4.844-8.258a9.822 9.822 0 019.687 0c2.997 1.704 4.844 4.851 4.844 8.258 0 5.266-4.337 9.535-9.687 9.535S2.25 16.8 2.25 11.535z" fill="#FF9D0B"></path><path d="M11.938 20.086c4.797 0 8.687-3.829 8.687-8.551 0-4.722-3.89-8.55-8.687-8.55-4.798 0-8.688 3.828-8.688 8.55 0 4.722 3.89 8.55 8.688 8.55z" fill="#FFD21E"></path><path d="M11.875 15.113c2.457 0 3.25-2.156 3.25-3.263 0-.576-.393-.394-1.023-.089-.582.283-1.365.675-2.224.675-1.798 0-3.25-1.693-3.25-.586 0 1.107.79 3.263 3.25 3.263h-.003z" fill="#FF323D"></path><path d="M14.76 9.21c.32.108.445.753.767.585.447-.233.707-.708.659-1.204a1.235 1.235 0 00-.879-1.059 1.262 1.262 0 00-1.33.394c-.322.384-.377.92-.14 1.36.153.283.638-.177.925-.079l-.002.003zm-5.887 0c-.32.108-.448.753-.768.585a1.226 1.226 0 01-.658-1.204c.048-.495.395-.913.878-1.059a1.262 1.262 0 011.33.394c.322.384.377.92.14 1.36-.152.283-.64-.177-.925-.079l.003.003zm1.12 5.34a2.166 2.166 0 011.325-1.106c.07-.02.144.06.219.171l.192.306c.069.1.139.175.209.175.074 0 .15-.074.223-.172l.205-.302c.08-.11.157-.188.234-.165.537.168.986.536 1.25 1.026.932-.724 1.275-1.905 1.275-2.633 0-.508-.306-.426-.81-.19l-.616.296c-.52.24-1.148.48-1.824.48-.676 0-1.302-.24-1.823-.48l-.589-.283c-.52-.248-.838-.342-.838.177 0 .703.32 1.831 1.187 2.56l.18.14z" fill="#3A3B45"></path><path d="M17.812 10.366a.806.806 0 00.813-.8c0-.441-.364-.8-.813-.8a.806.806 0 00-.812.8c0 .442.364.8.812.8zm-11.624 0a.806.806 0 00.812-.8c0-.441-.364-.8-.812-.8a.806.806 0 00-.813.8c0 .442.364.8.813.8zM4.515 13.073c-.405 0-.765.162-1.017.46a1.455 1.455 0 00-.333.925 1.801 1.801 0 00-.485-.074c-.387 0-.737.146-.985.409a1.41 1.41 0 00-.2 1.722 1.302 1.302 0 00-.447.694c-.06.222-.12.69.2 1.166a1.267 1.267 0 00-.093 1.236c.238.533.81.958 1.89 1.405l.24.096c.768.3 1.473.492 1.478.494.89.243 1.808.375 2.732.394 1.465 0 2.513-.443 3.115-1.314.93-1.342.842-2.575-.274-3.763l-.151-.154c-.692-.684-1.155-1.69-1.25-1.912-.195-.655-.71-1.383-1.562-1.383-.46.007-.889.233-1.15.605-.25-.31-.495-.553-.715-.694a1.87 1.87 0 00-.993-.312zm14.97 0c.405 0 .767.162 1.017.46.216.262.333.588.333.925.158-.047.322-.071.487-.074.388 0 .738.146.985.409a1.41 1.41 0 01.2 1.722c.22.178.377.422.445.694.06.222.12.69-.2 1.166.244.37.279.836.093 1.236-.238.533-.81.958-1.889 1.405l-.239.096c-.77.3-1.475.492-1.48.494-.89.243-1.808.375-2.732.394-1.465 0-2.513-.443-3.115-1.314-.93-1.342-.842-2.575.274-3.763l.151-.154c.695-.684 1.157-1.69 1.252-1.912.195-.655.708-1.383 1.56-1.383.46.007.889.233 1.15.605.25-.31.495-.553.718-.694.244-.162.523-.265.814-.3l.176-.012z" fill="#FF9D0B"></path><path d="M9.785 20.132c.688-.994.638-1.74-.305-2.667-.945-.928-1.495-2.288-1.495-2.288s-.205-.788-.672-.714c-.468.074-.81 1.25.17 1.971.977.721-.195 1.21-.573.534-.375-.677-1.405-2.416-1.94-2.751-.532-.332-.907-.148-.782.541.125.687 2.357 2.35 2.14 2.707-.218.362-.983-.42-.983-.42S2.953 14.9 2.43 15.46c-.52.558.398 1.026 1.7 1.803 1.308.778 1.41.985 1.225 1.28-.187.295-3.07-2.1-3.34-1.083-.27 1.011 2.943 1.304 2.745 2.006-.2.7-2.265-1.324-2.685-.537-.425.79 2.913 1.718 2.94 1.725 1.075.276 3.813.859 4.77-.522zm4.432 0c-.687-.994-.64-1.74.305-2.667.943-.928 1.493-2.288 1.493-2.288s.205-.788.675-.714c.465.074.807 1.25-.17 1.971-.98.721.195 1.21.57.534.377-.677 1.407-2.416 1.94-2.751.532-.332.91-.148.782.541-.125.687-2.355 2.35-2.137 2.707.215.362.98-.42.98-.42S21.05 14.9 21.57 15.46c.52.558-.395 1.026-1.7 1.803-1.308.778-1.408.985-1.225 1.28.187.295 3.07-2.1 3.34-1.083.27 1.011-2.94 1.304-2.743 2.006.2.7 2.263-1.324 2.685-.537.423.79-2.912 1.718-2.94 1.725-1.077.276-3.815.859-4.77-.522z" fill="#FFD21E"></path></symbol>
34
+ <symbol id="cerebras" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M14.121 2.701a9.299 9.299 0 000 18.598V22.7c-5.91 0-10.7-4.791-10.7-10.701S8.21 1.299 14.12 1.299V2.7zm4.752 3.677A7.353 7.353 0 109.42 17.643l-.901 1.074a8.754 8.754 0 01-1.08-12.334 8.755 8.755 0 0112.335-1.08l-.901 1.075zm-2.255.844a5.407 5.407 0 00-5.048 9.563l-.656 1.24a6.81 6.81 0 016.358-12.043l-.654 1.24zM14.12 8.539a3.46 3.46 0 100 6.922v1.402a4.863 4.863 0 010-9.726v1.402z" fill="#F15A29" fill-rule="evenodd"></path><path d="M15.407 10.836a2.24 2.24 0 00-.51-.409 1.084 1.084 0 00-.544-.152c-.255 0-.483.047-.684.14a1.58 1.58 0 00-.84.912c-.074.203-.11.416-.11.631 0 .218.036.43.11.631a1.594 1.594 0 00.84.913c.2.093.43.14.684.14.216 0 .417-.046.602-.135.188-.09.35-.225.475-.392l.928 1.006c-.14.14-.3.261-.482.363a3.367 3.367 0 01-1.083.38c-.17.026-.317.04-.44.04a3.315 3.315 0 01-1.182-.21 2.825 2.825 0 01-.961-.597 2.816 2.816 0 01-.644-.929 2.987 2.987 0 01-.238-1.21c0-.444.08-.847.238-1.21.15-.35.368-.666.643-.929.278-.261.605-.464.962-.596a3.315 3.315 0 011.182-.21c.355 0 .712.068 1.072.204.361.138.685.36.944.649l-.962.97z"></path></symbol>
35
+ <symbol id="openrouter" viewBox="0 0 24 24"><path d="M16.804 1.957l7.22 4.105v.087L16.73 10.21l.017-2.117-.821-.03c-1.059-.028-1.611.002-2.268.11-1.064.175-2.038.577-3.147 1.352L8.345 11.03c-.284.195-.495.336-.68.455l-.515.322-.397.234.385.23.53.338c.476.314 1.17.796 2.701 1.866 1.11.775 2.083 1.177 3.147 1.352l.3.045c.694.091 1.375.094 2.825.033l.022-2.159 7.22 4.105v.087L16.589 22l.014-1.862-.635.022c-1.386.042-2.137.002-3.138-.162-1.694-.28-3.26-.926-4.881-2.059l-2.158-1.5a21.997 21.997 0 00-.755-.498l-.467-.28a55.927 55.927 0 00-.76-.43C2.908 14.73.563 14.116 0 14.116V9.888l.14.004c.564-.007 2.91-.622 3.809-1.124l1.016-.58.438-.274c.428-.28 1.072-.726 2.686-1.853 1.621-1.133 3.186-1.78 4.881-2.059 1.152-.19 1.974-.213 3.814-.138l.02-1.907z"></path></symbol>
36
+ <symbol id="xai" viewBox="0 0 24 24"><path d="M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z"></path></symbol>
37
+ <symbol id="cloudflare" viewBox="0 0 24 24"><path d="M16.493 17.4c.135-.52.08-.983-.161-1.338-.215-.328-.592-.519-1.05-.519l-8.663-.109a.148.148 0 01-.135-.082c-.027-.054-.027-.109-.027-.163.027-.082.108-.164.189-.164l8.744-.11c1.05-.054 2.153-.9 2.556-1.937l.511-1.31c.027-.055.027-.11.027-.164C17.92 8.91 15.66 7 12.942 7c-2.503 0-4.628 1.638-5.381 3.903a2.432 2.432 0 00-1.803-.491c-1.21.109-2.153 1.092-2.287 2.32-.027.328 0 .628.054.9C1.56 13.688 0 15.326 0 17.319c0 .19.027.355.027.545 0 .082.08.137.161.137h15.983c.08 0 .188-.055.215-.164l.107-.437" fill="#F38020"></path><path d="M19.238 11.75h-.242c-.054 0-.108.054-.135.109l-.35 1.2c-.134.52-.08.983.162 1.338.215.328.592.518 1.05.518l1.855.11c.054 0 .108.027.135.082.027.054.027.109.027.163-.027.082-.108.164-.188.164l-1.91.11c-1.05.054-2.153.9-2.557 1.937l-.134.355c-.027.055.026.137.107.137h6.592c.081 0 .162-.055.162-.137.107-.41.188-.846.188-1.31-.027-2.62-2.153-4.777-4.762-4.777" fill="#FCAD32"></path></symbol>
38
+ <symbol id="vercel" viewBox="0 0 24 24"><path d="M12 0l12 20.785H0L12 0z"></path></symbol>
39
+ <symbol id="githubcopilot" viewBox="0 0 24 24"><path d="M19.245 5.364c1.322 1.36 1.877 3.216 2.11 5.817.622 0 1.2.135 1.592.654l.73.964c.21.278.323.61.323.955v2.62c0 .339-.173.669-.453.868C20.239 19.602 16.157 21.5 12 21.5c-4.6 0-9.205-2.583-11.547-4.258-.28-.2-.452-.53-.453-.868v-2.62c0-.345.113-.679.321-.956l.73-.963c.392-.517.974-.654 1.593-.654l.029-.297c.25-2.446.81-4.213 2.082-5.52 2.461-2.54 5.71-2.851 7.146-2.864h.198c1.436.013 4.685.323 7.146 2.864zm-7.244 4.328c-.284 0-.613.016-.962.05-.123.447-.305.85-.57 1.108-1.05 1.023-2.316 1.18-2.994 1.18-.638 0-1.306-.13-1.851-.464-.516.165-1.012.403-1.044.996a65.882 65.882 0 00-.063 2.884l-.002.48c-.002.563-.005 1.126-.013 1.69.002.326.204.63.51.765 2.482 1.102 4.83 1.657 6.99 1.657 2.156 0 4.504-.555 6.985-1.657a.854.854 0 00.51-.766c.03-1.682.006-3.372-.076-5.053-.031-.596-.528-.83-1.046-.996-.546.333-1.212.464-1.85.464-.677 0-1.942-.157-2.993-1.18-.266-.258-.447-.661-.57-1.108-.32-.032-.64-.049-.96-.05zm-2.525 4.013c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zm5 0c.539 0 .976.426.976.95v1.753c0 .525-.437.95-.976.95a.964.964 0 01-.976-.95v-1.752c0-.525.437-.951.976-.951zM7.635 5.087c-1.05.102-1.935.438-2.385.906-.975 1.037-.765 3.668-.21 4.224.405.394 1.17.657 1.995.657h.09c.649-.013 1.785-.176 2.73-1.11.435-.41.705-1.433.675-2.47-.03-.834-.27-1.52-.63-1.813-.39-.336-1.275-.482-2.265-.394zm6.465.394c-.36.292-.6.98-.63 1.813-.03 1.037.24 2.06.675 2.47.968.957 2.136 1.104 2.776 1.11h.044c.825 0 1.59-.263 1.995-.657.555-.556.765-3.187-.21-4.224-.45-.468-1.335-.804-2.385-.906-.99-.088-1.875.058-2.265.394zM12 7.615c-.24 0-.525.015-.84.044.03.16.045.336.06.526l-.001.159a2.94 2.94 0 01-.014.25c.225-.022.425-.027.612-.028h.366c.187 0 .387.006.612.028-.015-.146-.015-.277-.015-.409.015-.19.03-.365.06-.526a9.29 9.29 0 00-.84-.044z"></path></symbol>
40
+ <symbol id="aws" viewBox="0 0 24 24"><path d="M6.763 11.212c0 .296.032.535.088.71.064.176.144.368.256.576.04.063.056.127.056.183 0 .08-.048.16-.152.24l-.503.335a.383.383 0 01-.208.072c-.08 0-.16-.04-.239-.112a2.47 2.47 0 01-.287-.375 6.18 6.18 0 01-.248-.471c-.622.734-1.405 1.101-2.347 1.101-.67 0-1.205-.191-1.596-.574-.39-.384-.59-.894-.59-1.533 0-.678.24-1.23.726-1.644.487-.415 1.133-.623 1.955-.623.272 0 .551.024.846.064.296.04.6.104.918.176v-.583c0-.607-.127-1.03-.375-1.277-.255-.248-.686-.367-1.3-.367-.28 0-.568.031-.863.103-.295.072-.583.16-.862.272a2.4 2.4 0 01-.28.104.488.488 0 01-.127.023c-.112 0-.168-.08-.168-.247v-.391c0-.128.016-.224.056-.28a.597.597 0 01.224-.167 4.577 4.577 0 011.005-.36 4.84 4.84 0 011.246-.151c.95 0 1.644.216 2.091.647.44.43.662 1.085.662 1.963v2.586h.016zm-3.24 1.214c.263 0 .534-.048.822-.144a1.78 1.78 0 00.758-.51 1.27 1.27 0 00.272-.512c.047-.191.08-.423.08-.694v-.335a6.66 6.66 0 00-.735-.136 6.02 6.02 0 00-.75-.048c-.535 0-.926.104-1.19.32-.263.215-.39.518-.39.917 0 .375.095.655.295.846.191.2.47.296.838.296zm6.41.862c-.144 0-.24-.024-.304-.08-.064-.048-.12-.16-.168-.311L7.586 6.726a1.398 1.398 0 01-.072-.32c0-.128.064-.2.191-.2h.783c.151 0 .255.025.31.08.065.048.113.16.16.312l1.342 5.284 1.245-5.284c.04-.16.088-.264.151-.312a.549.549 0 01.32-.08h.638c.152 0 .256.025.32.08.063.048.12.16.151.312l1.261 5.348 1.381-5.348c.048-.16.104-.264.16-.312a.52.52 0 01.311-.08h.743c.127 0 .2.065.2.2 0 .04-.009.08-.017.128a1.137 1.137 0 01-.056.2l-1.923 6.17c-.048.16-.104.263-.168.311a.51.51 0 01-.303.08h-.687c-.15 0-.255-.024-.32-.08-.063-.056-.119-.16-.15-.32L12.32 7.747l-1.23 5.14c-.04.16-.087.264-.15.32-.065.056-.177.08-.32.08l-.686.001zm10.256.215c-.415 0-.83-.048-1.229-.143-.399-.096-.71-.2-.918-.32-.128-.071-.215-.151-.247-.223a.563.563 0 01-.048-.224v-.407c0-.167.064-.247.183-.247.048 0 .096.008.144.024.048.016.12.048.2.08.271.12.566.215.878.279.32.064.63.096.95.096.502 0 .894-.088 1.165-.264a.86.86 0 00.415-.758.777.777 0 00-.215-.559c-.144-.151-.416-.287-.807-.415l-1.157-.36c-.583-.183-1.014-.454-1.277-.813a1.902 1.902 0 01-.4-1.158c0-.335.073-.63.216-.886.144-.255.335-.479.575-.654.24-.184.51-.32.83-.415.32-.096.655-.136 1.006-.136.175 0 .36.008.535.032.183.024.35.056.518.088.16.04.312.08.455.127.144.048.256.096.336.144a.69.69 0 01.24.2.43.43 0 01.071.263v.375c0 .168-.064.256-.184.256a.83.83 0 01-.303-.096 3.652 3.652 0 00-1.532-.311c-.455 0-.815.071-1.062.223-.248.152-.375.383-.375.71 0 .224.08.416.24.567.16.152.454.304.877.44l1.134.358c.574.184.99.44 1.237.767.247.327.367.702.367 1.117 0 .343-.072.655-.207.926a2.157 2.157 0 01-.583.703c-.248.2-.543.343-.886.447-.36.111-.734.167-1.142.167z"></path><path d="M.378 15.475c3.384 1.963 7.56 3.153 11.877 3.153 2.914 0 6.114-.607 9.06-1.852.44-.2.814.287.383.607-2.626 1.94-6.442 2.969-9.722 2.969-4.598 0-8.74-1.7-11.87-4.526-.247-.223-.024-.527.272-.351zm23.531-.2c.287.36-.08 2.826-1.485 4.007-.215.184-.423.088-.327-.151l.175-.439c.343-.88.802-2.198.52-2.555-.336-.43-2.22-.207-3.074-.103-.255.032-.295-.192-.063-.36 1.5-1.053 3.967-.75 4.254-.399z" fill="#F90"></path></symbol>
41
+ <symbol id="azure" viewBox="0 0 24 24"><path d="M7.242 1.613A1.11 1.11 0 018.295.857h6.977L8.03 22.316a1.11 1.11 0 01-1.052.755h-5.43a1.11 1.11 0 01-1.053-1.466L7.242 1.613z" fill="url(#lobe-icons-azure-0-)"></path><path d="M18.397 15.296H7.4a.51.51 0 00-.347.882l7.066 6.595c.206.192.477.298.758.298h6.226l-2.706-7.775z" fill="#0078D4"></path><path d="M15.272.857H7.497L0 23.071h7.775l1.596-4.73 5.068 4.73h6.665l-2.707-7.775h-7.998L15.272.857z" fill="url(#lobe-icons-azure-1-)"></path><path d="M17.193 1.613a1.11 1.11 0 00-1.052-.756h-7.81.035c.477 0 .9.304 1.052.756l6.748 19.992a1.11 1.11 0 01-1.052 1.466h-.12 7.895a1.11 1.11 0 001.052-1.466L17.193 1.613z" fill="url(#lobe-icons-azure-2-)"></path><defs><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-azure-0-" x1="8.247" x2="1.002" y1="1.626" y2="23.03"><stop stop-color="#114A8B"></stop><stop offset="1" stop-color="#0669BC"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-azure-1-" x1="14.042" x2="12.324" y1="15.302" y2="15.888"><stop stop-opacity=".3"></stop><stop offset=".071" stop-opacity=".2"></stop><stop offset=".321" stop-opacity=".1"></stop><stop offset=".623" stop-opacity=".05"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><linearGradient gradientUnits="userSpaceOnUse" id="lobe-icons-azure-2-" x1="12.841" x2="20.793" y1="1.626" y2="22.814"><stop stop-color="#3CCBF4"></stop><stop offset="1" stop-color="#2892DF"></stop></linearGradient></defs></symbol>
42
+ <symbol id="kimi" viewBox="0 0 24 24"><path d="M21.846 0a1.923 1.923 0 110 3.846H20.15a.226.226 0 01-.227-.226V1.923C19.923.861 20.784 0 21.846 0z" fill="#1783FF"></path><path d="M11.065 11.199l7.257-7.2c.137-.136.06-.41-.116-.41H14.3a.164.164 0 00-.117.051l-7.82 7.756c-.122.12-.302.013-.302-.179V3.82c0-.127-.083-.23-.185-.23H3.186c-.103 0-.186.103-.186.23V19.77c0 .128.083.23.186.23h2.69c.103 0 .186-.102.186-.23v-3.25c0-.069.025-.135.069-.178l2.424-2.406a.158.158 0 01.205-.023l6.484 4.772a7.677 7.677 0 003.453 1.283c.108.012.2-.095.2-.23v-3.06c0-.117-.07-.212-.164-.227a5.028 5.028 0 01-2.027-.807l-5.613-4.064c-.117-.078-.132-.279-.028-.381z" fill="#fff"></path></symbol>
43
+ <symbol id="qwen" viewBox="0 0 24 24"><path d="M12.604 1.34c.393.69.784 1.382 1.174 2.075a.18.18 0 00.157.091h5.552c.174 0 .322.11.446.327l1.454 2.57c.19.337.24.478.024.837-.26.43-.513.864-.76 1.3l-.367.658c-.106.196-.223.28-.04.512l2.652 4.637c.172.301.111.494-.043.77-.437.785-.882 1.564-1.335 2.34-.159.272-.352.375-.68.37-.777-.016-1.552-.01-2.327.016a.099.099 0 00-.081.05 575.097 575.097 0 01-2.705 4.74c-.169.293-.38.363-.725.364-.997.003-2.002.004-3.017.002a.537.537 0 01-.465-.271l-1.335-2.323a.09.09 0 00-.083-.049H4.982c-.285.03-.553-.001-.805-.092l-1.603-2.77a.543.543 0 01-.002-.54l1.207-2.12a.198.198 0 000-.197 550.951 550.951 0 01-1.875-3.272l-.79-1.395c-.16-.31-.173-.496.095-.965.465-.813.927-1.625 1.387-2.436.132-.234.304-.334.584-.335a338.3 338.3 0 012.589-.001.124.124 0 00.107-.063l2.806-4.895a.488.488 0 01.422-.246c.524-.001 1.053 0 1.583-.006L11.704 1c.341-.003.724.032.9.34zm-3.432.403a.06.06 0 00-.052.03L6.254 6.788a.157.157 0 01-.135.078H3.253c-.056 0-.07.025-.041.074l5.81 10.156c.025.042.013.062-.034.063l-2.795.015a.218.218 0 00-.2.116l-1.32 2.31c-.044.078-.021.118.068.118l5.716.008c.046 0 .08.02.104.061l1.403 2.454c.046.081.092.082.139 0l5.006-8.76.783-1.382a.055.055 0 01.096 0l1.424 2.53a.122.122 0 00.107.062l2.763-.02a.04.04 0 00.035-.02.041.041 0 000-.04l-2.9-5.086a.108.108 0 010-.113l.293-.507 1.12-1.977c.024-.041.012-.062-.035-.062H9.2c-.059 0-.073-.026-.043-.077l1.434-2.505a.107.107 0 000-.114L9.225 1.774a.06.06 0 00-.053-.031zm6.29 8.02c.046 0 .058.02.034.06l-.832 1.465-2.613 4.585a.056.056 0 01-.05.029.058.058 0 01-.05-.029L8.498 9.841c-.02-.034-.01-.052.028-.054l.216-.012 6.722-.012z" fill="url(#lobe-icons-qwen-)" fill-rule="nonzero"></path><defs><linearGradient id="lobe-icons-qwen-" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#6336E7" stop-opacity=".84"></stop><stop offset="100%" stop-color="#6F69F7" stop-opacity=".84"></stop></linearGradient></defs></symbol>
44
+ <symbol id="zhipu" viewBox="0 0 24 24"><path d="M11.991 23.503a.24.24 0 00-.244.248.24.24 0 00.244.249.24.24 0 00.245-.249.24.24 0 00-.22-.247l-.025-.001zM9.671 5.365a1.697 1.697 0 011.099 2.132l-.071.172-.016.04-.018.054c-.07.16-.104.32-.104.498-.035.71.47 1.279 1.186 1.314h.366c1.309.053 2.338 1.173 2.286 2.523-.052 1.332-1.152 2.38-2.478 2.327h-.174c-.715.018-1.274.64-1.239 1.368 0 .124.018.23.053.337.209.373.54.658.96.8.75.23 1.517-.125 1.9-.782l.018-.035c.402-.64 1.17-.96 1.92-.711.854.284 1.378 1.226 1.099 2.167a1.661 1.661 0 01-2.077 1.102 1.711 1.711 0 01-.907-.711l-.017-.035c-.2-.323-.463-.58-.851-.711l-.056-.018a1.646 1.646 0 00-1.954.746 1.66 1.66 0 01-1.065.764 1.677 1.677 0 01-1.989-1.279c-.209-.906.332-1.83 1.257-2.043a1.51 1.51 0 01.296-.035h.018c.68-.071 1.151-.622 1.116-1.333a1.307 1.307 0 00-.227-.693 2.515 2.515 0 01-.366-1.403 2.39 2.39 0 01.366-1.208c.14-.195.21-.444.227-.693.018-.71-.506-1.261-1.186-1.332l-.07-.018a1.43 1.43 0 01-.299-.07l-.05-.019a1.7 1.7 0 01-1.047-2.114 1.68 1.68 0 012.094-1.101zm-5.575 10.11c.26-.264.639-.367.994-.27.355.096.633.379.728.74.095.362-.007.748-.267 1.013-.402.41-1.053.41-1.455 0a1.062 1.062 0 010-1.482zm14.845-.294c.359-.09.738.024.992.297.254.274.344.665.237 1.025-.107.36-.396.634-.756.718-.551.128-1.1-.22-1.23-.781a1.05 1.05 0 01.757-1.26zm-.064-4.39c.314.32.49.753.49 1.206 0 .452-.176.886-.49 1.206-.315.32-.74.5-1.185.5-.444 0-.87-.18-1.184-.5a1.727 1.727 0 010-2.412 1.654 1.654 0 012.369 0zm-11.243.163c.364.484.447 1.128.218 1.691a1.665 1.665 0 01-2.188.923c-.855-.36-1.26-1.358-.907-2.228a1.68 1.68 0 011.33-1.038c.593-.08 1.183.169 1.547.652zm11.545-4.221c.368 0 .708.2.892.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.892.524c-.568 0-1.03-.47-1.03-1.048 0-.579.462-1.048 1.03-1.048zm-14.358 0c.368 0 .707.2.891.524.184.324.184.724 0 1.048a1.026 1.026 0 01-.891.524c-.569 0-1.03-.47-1.03-1.048 0-.579.461-1.048 1.03-1.048zm10.031-1.475c.925 0 1.675.764 1.675 1.706s-.75 1.705-1.675 1.705-1.674-.763-1.674-1.705c0-.942.75-1.706 1.674-1.706zm-2.626-.684c.362-.082.653-.356.761-.718a1.062 1.062 0 00-.238-1.028 1.017 1.017 0 00-.996-.294c-.547.14-.881.7-.752 1.257.13.558.675.907 1.225.783zm0 16.876c.359-.087.644-.36.75-.72a1.062 1.062 0 00-.237-1.019 1.018 1.018 0 00-.985-.301 1.037 1.037 0 00-.762.717c-.108.361-.017.754.239 1.028.245.263.606.377.953.305l.043-.01zM17.19 3.5a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64a.631.631 0 00-.628.64c0 .355.28.64.628.64zm-10.38 0a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64a.631.631 0 00-.628.64c0 .355.279.64.628.64zm-5.182 7.852a.631.631 0 00-.628.64c0 .354.28.639.628.639a.63.63 0 00.627-.606l.001-.034a.62.62 0 00-.628-.64zm5.182 9.13a.631.631 0 00-.628.64c0 .355.279.64.628.64a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm10.38.018a.631.631 0 00-.628.64c0 .355.28.64.628.64a.631.631 0 00.628-.64c0-.355-.279-.64-.628-.64zm5.182-9.148a.631.631 0 00-.628.64c0 .354.279.639.628.639a.631.631 0 00.628-.64c0-.355-.28-.64-.628-.64zm-.384-4.992a.24.24 0 00.244-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249c0 .142.122.249.244.249zM11.991.497a.24.24 0 00.245-.248A.24.24 0 0011.99 0a.24.24 0 00-.244.249c0 .133.108.236.223.247l.021.001zM2.011 6.36a.24.24 0 00.245-.249.24.24 0 00-.244-.249.24.24 0 00-.244.249.24.24 0 00.244.249zm0 11.263a.24.24 0 00-.243.248.24.24 0 00.244.249.24.24 0 00.244-.249.252.252 0 00-.244-.248zm19.995-.018a.24.24 0 00-.245.248.24.24 0 00.245.25.24.24 0 00.244-.25.252.252 0 00-.244-.248z" fill="#3859FF" fill-rule="nonzero"></path></symbol>
45
+ <symbol id="cohere" viewBox="0 0 24 24"><path clip-rule="evenodd" d="M8.128 14.099c.592 0 1.77-.033 3.398-.703 1.897-.781 5.672-2.2 8.395-3.656 1.905-1.018 2.74-2.366 2.74-4.18A4.56 4.56 0 0018.1 1H7.549A6.55 6.55 0 001 7.55c0 3.617 2.745 6.549 7.128 6.549z" fill="#39594D" fill-rule="evenodd"></path><path clip-rule="evenodd" d="M9.912 18.61a4.387 4.387 0 012.705-4.052l3.323-1.38c3.361-1.394 7.06 1.076 7.06 4.715a5.104 5.104 0 01-5.105 5.104l-3.597-.001a4.386 4.386 0 01-4.386-4.387z" fill="#D18EE2" fill-rule="evenodd"></path><path d="M4.776 14.962A3.775 3.775 0 001 18.738v.489a3.776 3.776 0 007.551 0v-.49a3.775 3.775 0 00-3.775-3.775z" fill="#FF7759"></path></symbol>
46
+ <symbol id="perplexity" viewBox="0 0 24 24"><path d="M19.785 0v7.272H22.5V17.62h-2.935V24l-7.037-6.194v6.145h-1.091v-6.152L4.392 24v-6.465H1.5V7.188h2.884V0l7.053 6.494V.19h1.09v6.49L19.786 0zm-7.257 9.044v7.319l5.946 5.234V14.44l-5.946-5.397zm-1.099-.08l-5.946 5.398v7.235l5.946-5.234V8.965zm8.136 7.58h1.844V8.349H13.46l6.105 5.54v2.655zm-8.982-8.28H2.59v8.195h1.8v-2.576l6.192-5.62zM5.475 2.476v4.71h5.115l-5.115-4.71zm13.219 0l-5.115 4.71h5.115v-4.71z" fill="#22B8CD" fill-rule="nonzero"></path></symbol>
47
+ <symbol id="together" viewBox="0 0 24 24"><path d="M23.197 4.503A6 6 0 0015 2.307a5.973 5.973 0 00-2.995 4.933l5.996.008v.515h-5.996c.039.937.298 1.87.8 2.74a6 6 0 1010.39-6z" fill="#EF2CC1"></path><path d="M.805 4.5A6 6 0 003 12.697a5.972 5.972 0 005.77.127L5.779 7.627l.446-.257 2.997 5.192A6 6 0 10.804 4.5z" fill="#CAAEF5"></path><path d="M12 23.894a6 6 0 005.999-6c0-2.13-1.1-3.996-2.775-5.06l-3.005 5.189-.444-.258 2.997-5.192A6 6 0 1012 23.894z" fill="#FC4C02"></path></symbol>
48
+ <symbol id="grok" viewBox="0 0 24 24"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></symbol>
49
+ <symbol id="antgroup" viewBox="0 0 24 24"><path d="M9.797 6.282a.451.451 0 01-.336-.315 1.019 1.019 0 010-.505c.156-.86.3-1.725.501-2.577.14-.7.42-1.367.823-1.96.305-.431.75-.746 1.262-.89.877-.217 1.24.629.937 1.348-.259.593-.877.914-1.334 1.348-.835.795-1.096 2.14-1.336 3.212a.427.427 0 01-.186.277.437.437 0 01-.331.062z" fill="url(#lobe-icons-ant-group-0-)" transform="translate(3)"></path><path d="M6.334 4.672c.33-.121.682.146.946.297.278.145.587.219.901.214.231.01.466 0 .688.018 4.098.176 7.484 3.22 8.05 7.237.565 4.016-1.852 7.859-5.745 9.134-3.894 1.276-8.153-.38-10.126-3.935A8.339 8.339 0 013.133 7.081c.348-.278.716-.53 1.102-.755a8.404 8.404 0 001.318-.79c.28-.243.45-.742.781-.864zm4.406 2.15c-2.841.003-4.898 2.533-4.628 5.642.27 3.109 2.781 5.641 5.613 5.665 2.832.024 4.932-2.512 4.658-5.644-.273-3.133-2.802-5.666-5.643-5.663zm.357.57a4.707 4.707 0 013.304 1.446 5.703 5.703 0 011.643 3.49 4.841 4.841 0 01-1.141 3.705v.015a3.923 3.923 0 01-2.808 1.303 4.664 4.664 0 01-3.367-1.387 5.678 5.678 0 01-1.71-3.518 4.832 4.832 0 011.14-3.753 3.923 3.923 0 012.813-1.3h.126z" fill="url(#lobe-icons-ant-group-1-)" transform="translate(3)"></path><path d="M2.346 2.054a1.26 1.26 0 01.384-.594.842.842 0 011.165.11c.694.82.169 2.078.142 3.02.013.805.208 1.597.57 2.318.084.134.147.279.186.43a.539.539 0 01-.3.577c-.345.17-.568-.19-.709-.446-.324-.6-.617-1.216-.877-1.846a8.698 8.698 0 01-.618-1.987 7.523 7.523 0 01-.051-.37 3.717 3.717 0 01-.024-.34 2.506 2.506 0 01.132-.872z" fill="url(#lobe-icons-ant-group-2-)" transform="translate(3)"></path><defs><linearGradient id="lobe-icons-ant-group-0-" x1="31.373%" x2="61.365%" y1="95.551%" y2="-.348%"><stop offset="0%" stop-color="#06F"></stop><stop offset="20%" stop-color="#1677FF"></stop><stop offset="100%" stop-color="#04A6FF"></stop></linearGradient><linearGradient id="lobe-icons-ant-group-1-" x1="4.366%" x2="94.359%" y1="65.982%" y2="32.918%"><stop offset="0%" stop-color="#06F"></stop><stop offset="20%" stop-color="#1677FF"></stop><stop offset="100%" stop-color="#04A6FF"></stop></linearGradient><linearGradient id="lobe-icons-ant-group-2-" x1="56.255%" x2="45.986%" y1="99.257%" y2="1.384%"><stop offset="0%" stop-color="#06F"></stop><stop offset="20%" stop-color="#1677FF"></stop><stop offset="100%" stop-color="#04A6FF"></stop></linearGradient></defs></symbol>
50
+ <symbol id="nvidia" viewBox="0 0 24 24"><path d="M10.212 8.976V7.62c.127-.01.256-.017.388-.021 3.596-.117 5.957 3.184 5.957 3.184s-2.548 3.647-5.282 3.647a3.227 3.227 0 01-1.063-.175v-4.109c1.4.174 1.681.812 2.523 2.258l1.873-1.627a4.905 4.905 0 00-3.67-1.846 6.594 6.594 0 00-.729.044m0-4.476v2.025c.13-.01.259-.019.388-.024 5.002-.174 8.261 4.226 8.261 4.226s-3.743 4.69-7.643 4.69c-.338 0-.675-.031-1.007-.092v1.25c.278.038.558.057.838.057 3.629 0 6.253-1.91 8.794-4.169.421.347 2.146 1.193 2.501 1.564-2.416 2.083-8.048 3.763-11.24 3.763-.308 0-.603-.02-.894-.048V19.5H24v-15H10.21zm0 9.756v1.068c-3.356-.616-4.287-4.21-4.287-4.21a7.173 7.173 0 014.287-2.138v1.172h-.005a3.182 3.182 0 00-2.502 1.178s.615 2.276 2.507 2.931m-5.961-3.3c1.436-1.935 3.604-3.148 5.961-3.336V6.523C5.81 6.887 2 10.723 2 10.723s2.158 6.427 8.21 7.015v-1.166C5.77 16 4.25 10.958 4.25 10.958h-.002z" fill="#74B71B" fill-rule="nonzero"></path></symbol>
51
+ <symbol id="opencode" viewBox="0 0 24 24"><path d="M16 6H8v12h8V6zm4 16H4V2h16v20z"></path></symbol>
52
+ <symbol id="xiaomimimo" viewBox="0 0 24 24"><path d="M.958 15.936a.459.459 0 01.459.44v2.729a.46.46 0 01-.918 0v-2.729a.459.459 0 01.459-.44zm4.814-2.035a.46.46 0 01.553.45v4.754a.458.458 0 11-.918 0V15.48L3.74 17.202a.462.462 0 01-.655.016.462.462 0 01-.065-.082L.628 14.67a.459.459 0 01.658-.637l2.124 2.187 2.127-2.188a.46.46 0 01.235-.13zm2.068.004a.46.46 0 01.458.445v4.755a.46.46 0 01-.458.458.459.459 0 01-.458-.458V14.35a.459.459 0 01.458-.445zm1.973 2.014a.46.46 0 01.46.457v2.729a.46.46 0 01-.784.324.46.46 0 01-.134-.324v-2.729a.46.46 0 01.458-.458zm.002-2.045a.458.458 0 01.328.157l2.127 2.19 2.125-2.19a.459.459 0 01.784.318v4.756a.46.46 0 01-.455.458.46.46 0 01-.458-.458V15.48l-1.667 1.723a.46.46 0 01-.65.008l-.005-.005c0-.002-.002-.002-.004-.003l-2.455-2.534a.46.46 0 01-.008-.667.461.461 0 01.338-.128zm6.797 1.206a.46.46 0 01.53.651A1.966 1.966 0 0019.81 18.4a.462.462 0 01.623.18.46.46 0 01-.181.624 2.863 2.863 0 01-1.38.353l-.142-.004a2.88 2.88 0 01-2.393-4.263.461.461 0 01.274-.21zm.864-.931a2.884 2.884 0 013.915 3.914.46.46 0 01-.402.24l-.057-.004a.458.458 0 01-.164-.055.46.46 0 01-.182-.622 1.967 1.967 0 00-2.669-2.67.459.459 0 11-.441-.803zM9.59 6.368c1.481 0 1.696 1.202 1.696 1.654v2.648h-.917v-.432c-.26.346-.792.535-1.36.535-.133 0-1.289-.03-1.384-1.136-.082-.932.675-1.61 2.053-1.61h.691c0-.563-.367-.886-.983-.886-.44.013-.864.174-1.2.458l-.36-.664c.484-.379 1.012-.567 1.764-.567zm4.427.1c1.263 0 2.082.97 2.083 2.15 0 1.181-.824 2.154-2.083 2.154-1.26 0-2.084-.972-2.084-2.152 0-1.18.82-2.153 2.084-2.153zm6.801.015c.68 0 1.202.465 1.197 1.548v2.642H21.1V8.29c0-.312-.002-.98-.63-.98s-.628.667-.628.838v2.524h-.89V8.148c0-.17-.001-.838-.63-.838-.628 0-.628.668-.628.98v2.383h-.917v-4.03h.917V7a1.22 1.22 0 01.947-.516c.398 0 .76.193.982.686a1.321 1.321 0 011.195-.686zm-18.093.872l1.457-1.772H5.32L3.311 8.07l2.14 2.602H4.24L2.725 8.796 1.21 10.672H0L2.138 8.07.13 5.583h1.138l1.458 1.772zm4.149 3.317h-.916V6.644h.916v4.028zm16.99 0h-.916V6.644h.916v4.028zM9.925 8.71c-1.055 0-1.359.412-1.326.742.032.329.324.537.757.537a1.013 1.013 0 001.014-.968l.002-.31h-.447zM14.018 7.3c-.663 0-1.184.487-1.184 1.32 0 .832.52 1.32 1.184 1.32.662 0 1.182-.49 1.182-1.32 0-.832-.52-1.32-1.182-1.32zM6.417 5.001a.568.568 0 01.587.582.588.588 0 01-1.175 0A.57.57 0 016.417 5zm16.991 0a.57.57 0 01.592.582.588.588 0 01-1.174 0 .57.57 0 01.357-.542.572.572 0 01.225-.04z"></path></symbol>
53
+ <symbol id="zai" viewBox="0 0 24 24"><path d="M12.105 2L9.927 4.953H.653L2.83 2h9.276zM23.254 19.048L21.078 22h-9.242l2.174-2.952h9.244zM24 2L9.264 22H0L14.736 2H24z"></path></symbol>
54
+ </svg>
package/public/sw.js ADDED
@@ -0,0 +1,145 @@
1
+ const CACHE_PREFIX = "pi-web";
2
+ const CACHE_VERSION = new URL(self.location.href).searchParams.get("v") || "dev";
3
+ const STATIC_CACHE = `${CACHE_PREFIX}-static-${CACHE_VERSION}`;
4
+ const OFFLINE_URL = "/offline.html";
5
+ const PRECACHE_URLS = [
6
+ OFFLINE_URL,
7
+ "/manifest.webmanifest",
8
+ "/icons/icon-192.png",
9
+ "/icons/icon-512.png",
10
+ "/icons/apple-touch-icon.png",
11
+ ];
12
+
13
+ self.addEventListener("install", (event) => {
14
+ event.waitUntil(
15
+ caches
16
+ .open(STATIC_CACHE)
17
+ .then((cache) => cache.addAll(PRECACHE_URLS))
18
+ .then(() => self.skipWaiting()),
19
+ );
20
+ });
21
+
22
+ self.addEventListener("activate", (event) => {
23
+ event.waitUntil(
24
+ caches
25
+ .keys()
26
+ .then((keys) =>
27
+ Promise.all(
28
+ keys
29
+ .filter((key) => key.startsWith(`${CACHE_PREFIX}-`) && key !== STATIC_CACHE)
30
+ .map((key) => caches.delete(key)),
31
+ ),
32
+ )
33
+ .then(() => self.clients.claim()),
34
+ );
35
+ });
36
+
37
+ self.addEventListener("fetch", (event) => {
38
+ const { request } = event;
39
+ if (request.method !== "GET") return;
40
+
41
+ const url = new URL(request.url);
42
+ if (url.origin !== self.location.origin) return;
43
+
44
+ // Session data and live agent traffic must always come from the local server.
45
+ if (url.pathname.startsWith("/api/") || url.pathname === "/sw.js") return;
46
+
47
+ if (request.mode === "navigate") {
48
+ event.respondWith(
49
+ fetch(request).catch(async () => {
50
+ const fallback = await caches.match(OFFLINE_URL);
51
+ return fallback ?? Response.error();
52
+ }),
53
+ );
54
+ return;
55
+ }
56
+
57
+ const isStaticAsset =
58
+ url.pathname.startsWith("/_next/static/") ||
59
+ PRECACHE_URLS.includes(url.pathname);
60
+
61
+ if (isStaticAsset) {
62
+ event.respondWith(cacheFirst(request));
63
+ }
64
+ });
65
+
66
+ self.addEventListener("push", (event) => {
67
+ let payload = {};
68
+ try {
69
+ payload = event.data ? event.data.json() : {};
70
+ } catch {
71
+ // Ignore malformed or missing push payloads.
72
+ }
73
+ const { title, body, url, tag } = payload;
74
+ if (typeof title !== "string" || !title || typeof body !== "string" || !body) return;
75
+
76
+ // Always surface a system notification. iOS revokes the push subscription
77
+ // when a service worker handles a push without showing a notification, so
78
+ // suppressing the notification while a window is visible poisons the
79
+ // subscription in the background-delivery case. Notifications sharing a tag
80
+ // replace each other instead of stacking, so a visible window merely sees
81
+ // the completion notification re-appear.
82
+ event.waitUntil(
83
+ self.registration.showNotification(title, {
84
+ body,
85
+ icon: "/icons/icon-192.png",
86
+ badge: "/icons/icon-192.png",
87
+ data: { url: typeof url === "string" && url ? url : "/" },
88
+ ...(typeof tag === "string" && tag ? { tag, renotify: true } : {}),
89
+ }),
90
+ );
91
+ });
92
+
93
+ self.addEventListener("notificationclick", (event) => {
94
+ event.notification.close();
95
+
96
+ const requestedUrl = typeof event.notification.data?.url === "string"
97
+ ? event.notification.data.url
98
+ : "/";
99
+ let targetUrl = new URL("/", self.location.origin);
100
+ try {
101
+ const candidate = new URL(requestedUrl, self.location.origin);
102
+ if (candidate.origin === self.location.origin) targetUrl = candidate;
103
+ } catch {
104
+ // Keep the root URL when notification data is malformed.
105
+ }
106
+
107
+ event.waitUntil(focusOrOpenWindow(targetUrl.href));
108
+ });
109
+
110
+ async function focusOrOpenWindow(targetUrl) {
111
+ const windowClients = await self.clients.matchAll({
112
+ type: "window",
113
+ includeUncontrolled: true,
114
+ });
115
+ const exactClient = windowClients.find((client) => client.url === targetUrl);
116
+ const candidates = exactClient
117
+ ? [exactClient, ...windowClients.filter((client) => client !== exactClient)]
118
+ : windowClients;
119
+
120
+ for (const client of candidates) {
121
+ try {
122
+ const targetClient = client.url === targetUrl
123
+ ? client
124
+ : (await client.navigate(targetUrl)) ?? client;
125
+ await targetClient.focus();
126
+ return;
127
+ } catch {
128
+ // The window may have closed between matchAll and focus; try the next one.
129
+ }
130
+ }
131
+
132
+ await self.clients.openWindow(targetUrl);
133
+ }
134
+
135
+ async function cacheFirst(request) {
136
+ const cached = await caches.match(request);
137
+ if (cached) return cached;
138
+
139
+ const response = await fetch(request);
140
+ if (response.ok && response.type === "basic") {
141
+ const cache = await caches.open(STATIC_CACHE);
142
+ await cache.put(request, response.clone());
143
+ }
144
+ return response;
145
+ }
@@ -0,0 +1,141 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+
4
+ const listeners = new Map();
5
+ globalThis.self = {
6
+ location: {
7
+ href: "https://pi.test/sw.js?v=test",
8
+ origin: "https://pi.test",
9
+ },
10
+ addEventListener: (type, listener) => listeners.set(type, listener),
11
+ clients: null,
12
+ };
13
+
14
+ await import("./sw.js");
15
+
16
+ function dispatchNotificationClick(data) {
17
+ let pending;
18
+ let closed = false;
19
+ listeners.get("notificationclick")({
20
+ notification: {
21
+ data,
22
+ close: () => { closed = true; },
23
+ },
24
+ waitUntil: (promise) => { pending = promise; },
25
+ });
26
+ return { pending, wasClosed: () => closed };
27
+ }
28
+
29
+ function dispatchPush(payload, clients) {
30
+ let pending;
31
+ const shown = [];
32
+ self.clients = {
33
+ matchAll: async () => clients,
34
+ openWindow: async () => assert.fail("push must not open windows"),
35
+ };
36
+ self.registration = {
37
+ showNotification: async (title, options) => { shown.push({ title, options }); },
38
+ };
39
+ listeners.get("push")({
40
+ data: { json: () => payload },
41
+ waitUntil: (promise) => { pending = promise; },
42
+ });
43
+ return { pending, shown };
44
+ }
45
+
46
+ test("push always shows a notification, even when a window is visible", async () => {
47
+ const event = dispatchPush(
48
+ {
49
+ title: "Session complete",
50
+ body: "Task finished.",
51
+ url: "/?session=session-1",
52
+ tag: "pi-session-complete:session-1",
53
+ },
54
+ [
55
+ { url: "https://pi.test/?session=other", visibilityState: "hidden" },
56
+ { url: "https://pi.test/?session=session-1", visibilityState: "visible" },
57
+ ],
58
+ );
59
+ await event.pending;
60
+
61
+ assert.deepEqual(event.shown, [{
62
+ title: "Session complete",
63
+ options: {
64
+ body: "Task finished.",
65
+ icon: "/icons/icon-192.png",
66
+ badge: "/icons/icon-192.png",
67
+ data: { url: "/?session=session-1" },
68
+ tag: "pi-session-complete:session-1",
69
+ renotify: true,
70
+ },
71
+ }]);
72
+ });
73
+
74
+ test("push ignores malformed payloads", async () => {
75
+ const event = dispatchPush(
76
+ { title: "", body: 42 },
77
+ [],
78
+ );
79
+ await event.pending;
80
+
81
+ assert.deepEqual(event.shown, []);
82
+ });
83
+
84
+ test("notification click focuses an existing client at the session URL", async () => {
85
+ const calls = [];
86
+ const focusedClient = {
87
+ url: "https://pi.test/?session=session-1",
88
+ focus: async () => { calls.push("focus"); },
89
+ navigate: async () => assert.fail("exact client should not navigate"),
90
+ };
91
+ self.clients = {
92
+ matchAll: async () => [focusedClient],
93
+ openWindow: async () => assert.fail("existing client should be reused"),
94
+ };
95
+
96
+ const event = dispatchNotificationClick({ url: "/?session=session-1" });
97
+ await event.pending;
98
+
99
+ assert.equal(event.wasClosed(), true);
100
+ assert.deepEqual(calls, ["focus"]);
101
+ });
102
+
103
+ test("notification click navigates an existing client to the session", async () => {
104
+ const calls = [];
105
+ const navigatedClient = {
106
+ focus: async () => { calls.push("focus"); },
107
+ };
108
+ const existingClient = {
109
+ url: "https://pi.test/?session=other-session",
110
+ navigate: async (url) => {
111
+ calls.push(["navigate", url]);
112
+ return navigatedClient;
113
+ },
114
+ focus: async () => assert.fail("the navigated client should be focused"),
115
+ };
116
+ self.clients = {
117
+ matchAll: async () => [existingClient],
118
+ openWindow: async () => assert.fail("existing client should be reused"),
119
+ };
120
+
121
+ const event = dispatchNotificationClick({ url: "/?session=session-1" });
122
+ await event.pending;
123
+
124
+ assert.deepEqual(calls, [
125
+ ["navigate", "https://pi.test/?session=session-1"],
126
+ "focus",
127
+ ]);
128
+ });
129
+
130
+ test("notification click opens a window and rejects cross-origin targets", async () => {
131
+ const opened = [];
132
+ self.clients = {
133
+ matchAll: async () => [],
134
+ openWindow: async (url) => { opened.push(url); },
135
+ };
136
+
137
+ const event = dispatchNotificationClick({ url: "https://example.com/redirect" });
138
+ await event.pending;
139
+
140
+ assert.deepEqual(opened, ["https://pi.test/"]);
141
+ });