@neurocode-ai/web 1.18.8

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 (702) hide show
  1. package/README.md +54 -0
  2. package/astro.config.mjs +324 -0
  3. package/config.mjs +14 -0
  4. package/package.json +44 -0
  5. package/public/apple-touch-icon-v3.png +1 -0
  6. package/public/apple-touch-icon.png +1 -0
  7. package/public/favicon-96x96-v3.png +1 -0
  8. package/public/favicon-96x96.png +1 -0
  9. package/public/favicon-v3.ico +1 -0
  10. package/public/favicon-v3.svg +1 -0
  11. package/public/favicon.ico +1 -0
  12. package/public/favicon.svg +1 -0
  13. package/public/robots.txt +6 -0
  14. package/public/site.webmanifest +1 -0
  15. package/public/social-share-zen.png +1 -0
  16. package/public/social-share.png +1 -0
  17. package/public/theme.json +183 -0
  18. package/public/web-app-manifest-192x192.png +1 -0
  19. package/public/web-app-manifest-512x512.png +1 -0
  20. package/src/assets/lander/check.svg +2 -0
  21. package/src/assets/lander/copy.svg +2 -0
  22. package/src/assets/lander/screenshot-github.png +0 -0
  23. package/src/assets/lander/screenshot-splash.png +0 -0
  24. package/src/assets/lander/screenshot-vscode.png +0 -0
  25. package/src/assets/lander/screenshot.png +0 -0
  26. package/src/assets/logo-dark.svg +18 -0
  27. package/src/assets/logo-light.svg +18 -0
  28. package/src/assets/logo-ornate-dark.svg +18 -0
  29. package/src/assets/logo-ornate-light.svg +18 -0
  30. package/src/assets/web/web-homepage-active-session.png +0 -0
  31. package/src/assets/web/web-homepage-new-session.png +0 -0
  32. package/src/assets/web/web-homepage-see-servers.png +0 -0
  33. package/src/components/Footer.astro +125 -0
  34. package/src/components/Head.astro +54 -0
  35. package/src/components/Header.astro +136 -0
  36. package/src/components/Hero.astro +11 -0
  37. package/src/components/Lander.astro +721 -0
  38. package/src/components/LanguageSelect.astro +29 -0
  39. package/src/components/Share.tsx +644 -0
  40. package/src/components/SiteTitle.astro +59 -0
  41. package/src/components/icons/custom.tsx +87 -0
  42. package/src/components/icons/index.tsx +4454 -0
  43. package/src/components/share/common.tsx +128 -0
  44. package/src/components/share/content-bash.module.css +85 -0
  45. package/src/components/share/content-bash.tsx +67 -0
  46. package/src/components/share/content-code.module.css +26 -0
  47. package/src/components/share/content-code.tsx +30 -0
  48. package/src/components/share/content-diff.module.css +153 -0
  49. package/src/components/share/content-diff.tsx +240 -0
  50. package/src/components/share/content-error.module.css +64 -0
  51. package/src/components/share/content-error.tsx +25 -0
  52. package/src/components/share/content-markdown.module.css +154 -0
  53. package/src/components/share/content-markdown.tsx +74 -0
  54. package/src/components/share/content-text.module.css +63 -0
  55. package/src/components/share/content-text.tsx +38 -0
  56. package/src/components/share/copy-button.module.css +30 -0
  57. package/src/components/share/copy-button.tsx +36 -0
  58. package/src/components/share/part.module.css +428 -0
  59. package/src/components/share/part.tsx +816 -0
  60. package/src/components/share.module.css +832 -0
  61. package/src/content/docs/acp.mdx +156 -0
  62. package/src/content/docs/agents.mdx +781 -0
  63. package/src/content/docs/ar/acp.mdx +156 -0
  64. package/src/content/docs/ar/agents.mdx +754 -0
  65. package/src/content/docs/ar/cli.mdx +616 -0
  66. package/src/content/docs/ar/commands.mdx +322 -0
  67. package/src/content/docs/ar/config.mdx +685 -0
  68. package/src/content/docs/ar/custom-tools.mdx +196 -0
  69. package/src/content/docs/ar/ecosystem.mdx +78 -0
  70. package/src/content/docs/ar/enterprise.mdx +165 -0
  71. package/src/content/docs/ar/formatters.mdx +131 -0
  72. package/src/content/docs/ar/github.mdx +321 -0
  73. package/src/content/docs/ar/gitlab.mdx +195 -0
  74. package/src/content/docs/ar/go.mdx +224 -0
  75. package/src/content/docs/ar/ide.mdx +48 -0
  76. package/src/content/docs/ar/index.mdx +344 -0
  77. package/src/content/docs/ar/keybinds.mdx +194 -0
  78. package/src/content/docs/ar/lsp.mdx +207 -0
  79. package/src/content/docs/ar/mcp-servers.mdx +511 -0
  80. package/src/content/docs/ar/models.mdx +222 -0
  81. package/src/content/docs/ar/network.mdx +57 -0
  82. package/src/content/docs/ar/permissions.mdx +235 -0
  83. package/src/content/docs/ar/plugins.mdx +385 -0
  84. package/src/content/docs/ar/providers.mdx +1983 -0
  85. package/src/content/docs/ar/rules.mdx +180 -0
  86. package/src/content/docs/ar/sdk.mdx +463 -0
  87. package/src/content/docs/ar/server.mdx +287 -0
  88. package/src/content/docs/ar/share.mdx +127 -0
  89. package/src/content/docs/ar/skills.mdx +222 -0
  90. package/src/content/docs/ar/themes.mdx +369 -0
  91. package/src/content/docs/ar/tools.mdx +341 -0
  92. package/src/content/docs/ar/troubleshooting.mdx +299 -0
  93. package/src/content/docs/ar/tui.mdx +426 -0
  94. package/src/content/docs/ar/web.mdx +142 -0
  95. package/src/content/docs/ar/windows-wsl.mdx +113 -0
  96. package/src/content/docs/ar/zen.mdx +332 -0
  97. package/src/content/docs/bs/acp.mdx +156 -0
  98. package/src/content/docs/bs/agents.mdx +754 -0
  99. package/src/content/docs/bs/cli.mdx +614 -0
  100. package/src/content/docs/bs/commands.mdx +316 -0
  101. package/src/content/docs/bs/config.mdx +685 -0
  102. package/src/content/docs/bs/custom-tools.mdx +195 -0
  103. package/src/content/docs/bs/ecosystem.mdx +78 -0
  104. package/src/content/docs/bs/enterprise.mdx +165 -0
  105. package/src/content/docs/bs/formatters.mdx +124 -0
  106. package/src/content/docs/bs/github.mdx +311 -0
  107. package/src/content/docs/bs/gitlab.mdx +188 -0
  108. package/src/content/docs/bs/go.mdx +238 -0
  109. package/src/content/docs/bs/ide.mdx +47 -0
  110. package/src/content/docs/bs/index.mdx +323 -0
  111. package/src/content/docs/bs/keybinds.mdx +194 -0
  112. package/src/content/docs/bs/lsp.mdx +204 -0
  113. package/src/content/docs/bs/mcp-servers.mdx +482 -0
  114. package/src/content/docs/bs/models.mdx +201 -0
  115. package/src/content/docs/bs/network.mdx +51 -0
  116. package/src/content/docs/bs/permissions.mdx +228 -0
  117. package/src/content/docs/bs/plugins.mdx +371 -0
  118. package/src/content/docs/bs/providers.mdx +1993 -0
  119. package/src/content/docs/bs/rules.mdx +180 -0
  120. package/src/content/docs/bs/sdk.mdx +463 -0
  121. package/src/content/docs/bs/server.mdx +284 -0
  122. package/src/content/docs/bs/share.mdx +127 -0
  123. package/src/content/docs/bs/skills.mdx +222 -0
  124. package/src/content/docs/bs/themes.mdx +369 -0
  125. package/src/content/docs/bs/tools.mdx +341 -0
  126. package/src/content/docs/bs/troubleshooting.mdx +300 -0
  127. package/src/content/docs/bs/tui.mdx +432 -0
  128. package/src/content/docs/bs/web.mdx +142 -0
  129. package/src/content/docs/bs/windows-wsl.mdx +113 -0
  130. package/src/content/docs/bs/zen.mdx +350 -0
  131. package/src/content/docs/cli.mdx +733 -0
  132. package/src/content/docs/commands.mdx +323 -0
  133. package/src/content/docs/config.mdx +941 -0
  134. package/src/content/docs/custom-tools.mdx +196 -0
  135. package/src/content/docs/da/acp.mdx +156 -0
  136. package/src/content/docs/da/agents.mdx +755 -0
  137. package/src/content/docs/da/cli.mdx +617 -0
  138. package/src/content/docs/da/commands.mdx +323 -0
  139. package/src/content/docs/da/config.mdx +688 -0
  140. package/src/content/docs/da/custom-tools.mdx +196 -0
  141. package/src/content/docs/da/ecosystem.mdx +78 -0
  142. package/src/content/docs/da/enterprise.mdx +170 -0
  143. package/src/content/docs/da/formatters.mdx +131 -0
  144. package/src/content/docs/da/github.mdx +321 -0
  145. package/src/content/docs/da/gitlab.mdx +195 -0
  146. package/src/content/docs/da/go.mdx +238 -0
  147. package/src/content/docs/da/ide.mdx +48 -0
  148. package/src/content/docs/da/index.mdx +360 -0
  149. package/src/content/docs/da/keybinds.mdx +194 -0
  150. package/src/content/docs/da/lsp.mdx +208 -0
  151. package/src/content/docs/da/mcp-servers.mdx +511 -0
  152. package/src/content/docs/da/models.mdx +223 -0
  153. package/src/content/docs/da/network.mdx +57 -0
  154. package/src/content/docs/da/permissions.mdx +235 -0
  155. package/src/content/docs/da/plugins.mdx +389 -0
  156. package/src/content/docs/da/providers.mdx +1981 -0
  157. package/src/content/docs/da/rules.mdx +180 -0
  158. package/src/content/docs/da/sdk.mdx +463 -0
  159. package/src/content/docs/da/server.mdx +287 -0
  160. package/src/content/docs/da/share.mdx +128 -0
  161. package/src/content/docs/da/skills.mdx +222 -0
  162. package/src/content/docs/da/themes.mdx +369 -0
  163. package/src/content/docs/da/tools.mdx +341 -0
  164. package/src/content/docs/da/troubleshooting.mdx +300 -0
  165. package/src/content/docs/da/tui.mdx +426 -0
  166. package/src/content/docs/da/web.mdx +142 -0
  167. package/src/content/docs/da/windows-wsl.mdx +113 -0
  168. package/src/content/docs/da/zen.mdx +345 -0
  169. package/src/content/docs/de/acp.mdx +156 -0
  170. package/src/content/docs/de/agents.mdx +741 -0
  171. package/src/content/docs/de/cli.mdx +616 -0
  172. package/src/content/docs/de/commands.mdx +323 -0
  173. package/src/content/docs/de/config.mdx +684 -0
  174. package/src/content/docs/de/custom-tools.mdx +170 -0
  175. package/src/content/docs/de/ecosystem.mdx +78 -0
  176. package/src/content/docs/de/enterprise.mdx +170 -0
  177. package/src/content/docs/de/formatters.mdx +131 -0
  178. package/src/content/docs/de/github.mdx +321 -0
  179. package/src/content/docs/de/gitlab.mdx +195 -0
  180. package/src/content/docs/de/go.mdx +226 -0
  181. package/src/content/docs/de/ide.mdx +48 -0
  182. package/src/content/docs/de/index.mdx +356 -0
  183. package/src/content/docs/de/keybinds.mdx +194 -0
  184. package/src/content/docs/de/lsp.mdx +207 -0
  185. package/src/content/docs/de/mcp-servers.mdx +511 -0
  186. package/src/content/docs/de/models.mdx +223 -0
  187. package/src/content/docs/de/network.mdx +57 -0
  188. package/src/content/docs/de/permissions.mdx +235 -0
  189. package/src/content/docs/de/plugins.mdx +384 -0
  190. package/src/content/docs/de/providers.mdx +1987 -0
  191. package/src/content/docs/de/rules.mdx +190 -0
  192. package/src/content/docs/de/sdk.mdx +465 -0
  193. package/src/content/docs/de/server.mdx +291 -0
  194. package/src/content/docs/de/share.mdx +130 -0
  195. package/src/content/docs/de/skills.mdx +222 -0
  196. package/src/content/docs/de/themes.mdx +372 -0
  197. package/src/content/docs/de/tools.mdx +352 -0
  198. package/src/content/docs/de/troubleshooting.mdx +300 -0
  199. package/src/content/docs/de/tui.mdx +429 -0
  200. package/src/content/docs/de/web.mdx +142 -0
  201. package/src/content/docs/de/windows-wsl.mdx +115 -0
  202. package/src/content/docs/de/zen.mdx +327 -0
  203. package/src/content/docs/ecosystem.mdx +83 -0
  204. package/src/content/docs/enterprise.mdx +169 -0
  205. package/src/content/docs/es/acp.mdx +156 -0
  206. package/src/content/docs/es/agents.mdx +755 -0
  207. package/src/content/docs/es/cli.mdx +616 -0
  208. package/src/content/docs/es/commands.mdx +323 -0
  209. package/src/content/docs/es/config.mdx +685 -0
  210. package/src/content/docs/es/custom-tools.mdx +196 -0
  211. package/src/content/docs/es/ecosystem.mdx +78 -0
  212. package/src/content/docs/es/enterprise.mdx +170 -0
  213. package/src/content/docs/es/formatters.mdx +131 -0
  214. package/src/content/docs/es/github.mdx +321 -0
  215. package/src/content/docs/es/gitlab.mdx +195 -0
  216. package/src/content/docs/es/go.mdx +238 -0
  217. package/src/content/docs/es/ide.mdx +48 -0
  218. package/src/content/docs/es/index.mdx +345 -0
  219. package/src/content/docs/es/keybinds.mdx +194 -0
  220. package/src/content/docs/es/lsp.mdx +208 -0
  221. package/src/content/docs/es/mcp-servers.mdx +511 -0
  222. package/src/content/docs/es/models.mdx +223 -0
  223. package/src/content/docs/es/network.mdx +57 -0
  224. package/src/content/docs/es/permissions.mdx +235 -0
  225. package/src/content/docs/es/plugins.mdx +389 -0
  226. package/src/content/docs/es/providers.mdx +1989 -0
  227. package/src/content/docs/es/rules.mdx +180 -0
  228. package/src/content/docs/es/sdk.mdx +463 -0
  229. package/src/content/docs/es/server.mdx +287 -0
  230. package/src/content/docs/es/share.mdx +128 -0
  231. package/src/content/docs/es/skills.mdx +222 -0
  232. package/src/content/docs/es/themes.mdx +369 -0
  233. package/src/content/docs/es/tools.mdx +341 -0
  234. package/src/content/docs/es/troubleshooting.mdx +300 -0
  235. package/src/content/docs/es/tui.mdx +429 -0
  236. package/src/content/docs/es/web.mdx +142 -0
  237. package/src/content/docs/es/windows-wsl.mdx +113 -0
  238. package/src/content/docs/es/zen.mdx +345 -0
  239. package/src/content/docs/formatters.mdx +143 -0
  240. package/src/content/docs/fr/acp.mdx +156 -0
  241. package/src/content/docs/fr/agents.mdx +755 -0
  242. package/src/content/docs/fr/cli.mdx +617 -0
  243. package/src/content/docs/fr/commands.mdx +322 -0
  244. package/src/content/docs/fr/config.mdx +686 -0
  245. package/src/content/docs/fr/custom-tools.mdx +170 -0
  246. package/src/content/docs/fr/ecosystem.mdx +78 -0
  247. package/src/content/docs/fr/enterprise.mdx +165 -0
  248. package/src/content/docs/fr/formatters.mdx +131 -0
  249. package/src/content/docs/fr/github.mdx +322 -0
  250. package/src/content/docs/fr/gitlab.mdx +195 -0
  251. package/src/content/docs/fr/go.mdx +224 -0
  252. package/src/content/docs/fr/ide.mdx +48 -0
  253. package/src/content/docs/fr/index.mdx +344 -0
  254. package/src/content/docs/fr/keybinds.mdx +194 -0
  255. package/src/content/docs/fr/lsp.mdx +208 -0
  256. package/src/content/docs/fr/mcp-servers.mdx +511 -0
  257. package/src/content/docs/fr/models.mdx +222 -0
  258. package/src/content/docs/fr/network.mdx +57 -0
  259. package/src/content/docs/fr/permissions.mdx +235 -0
  260. package/src/content/docs/fr/plugins.mdx +384 -0
  261. package/src/content/docs/fr/providers.mdx +1996 -0
  262. package/src/content/docs/fr/rules.mdx +180 -0
  263. package/src/content/docs/fr/sdk.mdx +463 -0
  264. package/src/content/docs/fr/server.mdx +287 -0
  265. package/src/content/docs/fr/share.mdx +128 -0
  266. package/src/content/docs/fr/skills.mdx +222 -0
  267. package/src/content/docs/fr/themes.mdx +369 -0
  268. package/src/content/docs/fr/tools.mdx +341 -0
  269. package/src/content/docs/fr/troubleshooting.mdx +300 -0
  270. package/src/content/docs/fr/tui.mdx +429 -0
  271. package/src/content/docs/fr/web.mdx +142 -0
  272. package/src/content/docs/fr/windows-wsl.mdx +113 -0
  273. package/src/content/docs/fr/zen.mdx +327 -0
  274. package/src/content/docs/github.mdx +321 -0
  275. package/src/content/docs/gitlab.mdx +195 -0
  276. package/src/content/docs/go.mdx +238 -0
  277. package/src/content/docs/ide.mdx +48 -0
  278. package/src/content/docs/index.mdx +360 -0
  279. package/src/content/docs/it/acp.mdx +155 -0
  280. package/src/content/docs/it/agents.mdx +753 -0
  281. package/src/content/docs/it/cli.mdx +617 -0
  282. package/src/content/docs/it/commands.mdx +322 -0
  283. package/src/content/docs/it/config.mdx +685 -0
  284. package/src/content/docs/it/custom-tools.mdx +196 -0
  285. package/src/content/docs/it/ecosystem.mdx +78 -0
  286. package/src/content/docs/it/enterprise.mdx +165 -0
  287. package/src/content/docs/it/formatters.mdx +132 -0
  288. package/src/content/docs/it/github.mdx +321 -0
  289. package/src/content/docs/it/gitlab.mdx +195 -0
  290. package/src/content/docs/it/go.mdx +236 -0
  291. package/src/content/docs/it/ide.mdx +48 -0
  292. package/src/content/docs/it/index.mdx +344 -0
  293. package/src/content/docs/it/keybinds.mdx +194 -0
  294. package/src/content/docs/it/lsp.mdx +208 -0
  295. package/src/content/docs/it/mcp-servers.mdx +511 -0
  296. package/src/content/docs/it/models.mdx +222 -0
  297. package/src/content/docs/it/network.mdx +57 -0
  298. package/src/content/docs/it/permissions.mdx +235 -0
  299. package/src/content/docs/it/plugins.mdx +388 -0
  300. package/src/content/docs/it/providers.mdx +1964 -0
  301. package/src/content/docs/it/rules.mdx +180 -0
  302. package/src/content/docs/it/sdk.mdx +463 -0
  303. package/src/content/docs/it/server.mdx +284 -0
  304. package/src/content/docs/it/share.mdx +127 -0
  305. package/src/content/docs/it/skills.mdx +222 -0
  306. package/src/content/docs/it/themes.mdx +369 -0
  307. package/src/content/docs/it/tools.mdx +341 -0
  308. package/src/content/docs/it/troubleshooting.mdx +299 -0
  309. package/src/content/docs/it/tui.mdx +426 -0
  310. package/src/content/docs/it/web.mdx +142 -0
  311. package/src/content/docs/it/windows-wsl.mdx +113 -0
  312. package/src/content/docs/it/zen.mdx +345 -0
  313. package/src/content/docs/ja/acp.mdx +155 -0
  314. package/src/content/docs/ja/agents.mdx +751 -0
  315. package/src/content/docs/ja/cli.mdx +616 -0
  316. package/src/content/docs/ja/commands.mdx +322 -0
  317. package/src/content/docs/ja/config.mdx +684 -0
  318. package/src/content/docs/ja/custom-tools.mdx +196 -0
  319. package/src/content/docs/ja/ecosystem.mdx +78 -0
  320. package/src/content/docs/ja/enterprise.mdx +166 -0
  321. package/src/content/docs/ja/formatters.mdx +132 -0
  322. package/src/content/docs/ja/github.mdx +322 -0
  323. package/src/content/docs/ja/gitlab.mdx +195 -0
  324. package/src/content/docs/ja/go.mdx +224 -0
  325. package/src/content/docs/ja/ide.mdx +48 -0
  326. package/src/content/docs/ja/index.mdx +350 -0
  327. package/src/content/docs/ja/keybinds.mdx +194 -0
  328. package/src/content/docs/ja/lsp.mdx +208 -0
  329. package/src/content/docs/ja/mcp-servers.mdx +511 -0
  330. package/src/content/docs/ja/models.mdx +221 -0
  331. package/src/content/docs/ja/network.mdx +55 -0
  332. package/src/content/docs/ja/permissions.mdx +282 -0
  333. package/src/content/docs/ja/plugins.mdx +461 -0
  334. package/src/content/docs/ja/providers.mdx +1998 -0
  335. package/src/content/docs/ja/rules.mdx +179 -0
  336. package/src/content/docs/ja/sdk.mdx +463 -0
  337. package/src/content/docs/ja/server.mdx +282 -0
  338. package/src/content/docs/ja/share.mdx +128 -0
  339. package/src/content/docs/ja/skills.mdx +222 -0
  340. package/src/content/docs/ja/themes.mdx +667 -0
  341. package/src/content/docs/ja/tools.mdx +341 -0
  342. package/src/content/docs/ja/troubleshooting.mdx +300 -0
  343. package/src/content/docs/ja/tui.mdx +423 -0
  344. package/src/content/docs/ja/web.mdx +143 -0
  345. package/src/content/docs/ja/windows-wsl.mdx +116 -0
  346. package/src/content/docs/ja/zen.mdx +327 -0
  347. package/src/content/docs/keybinds.mdx +299 -0
  348. package/src/content/docs/ko/acp.mdx +156 -0
  349. package/src/content/docs/ko/agents.mdx +754 -0
  350. package/src/content/docs/ko/cli.mdx +616 -0
  351. package/src/content/docs/ko/commands.mdx +323 -0
  352. package/src/content/docs/ko/config.mdx +685 -0
  353. package/src/content/docs/ko/custom-tools.mdx +196 -0
  354. package/src/content/docs/ko/ecosystem.mdx +78 -0
  355. package/src/content/docs/ko/enterprise.mdx +165 -0
  356. package/src/content/docs/ko/formatters.mdx +132 -0
  357. package/src/content/docs/ko/github.mdx +321 -0
  358. package/src/content/docs/ko/gitlab.mdx +195 -0
  359. package/src/content/docs/ko/go.mdx +224 -0
  360. package/src/content/docs/ko/ide.mdx +48 -0
  361. package/src/content/docs/ko/index.mdx +344 -0
  362. package/src/content/docs/ko/keybinds.mdx +194 -0
  363. package/src/content/docs/ko/lsp.mdx +208 -0
  364. package/src/content/docs/ko/mcp-servers.mdx +511 -0
  365. package/src/content/docs/ko/models.mdx +223 -0
  366. package/src/content/docs/ko/network.mdx +57 -0
  367. package/src/content/docs/ko/permissions.mdx +235 -0
  368. package/src/content/docs/ko/plugins.mdx +388 -0
  369. package/src/content/docs/ko/providers.mdx +1984 -0
  370. package/src/content/docs/ko/rules.mdx +179 -0
  371. package/src/content/docs/ko/sdk.mdx +463 -0
  372. package/src/content/docs/ko/server.mdx +287 -0
  373. package/src/content/docs/ko/share.mdx +128 -0
  374. package/src/content/docs/ko/skills.mdx +222 -0
  375. package/src/content/docs/ko/themes.mdx +369 -0
  376. package/src/content/docs/ko/tools.mdx +341 -0
  377. package/src/content/docs/ko/troubleshooting.mdx +303 -0
  378. package/src/content/docs/ko/tui.mdx +425 -0
  379. package/src/content/docs/ko/web.mdx +142 -0
  380. package/src/content/docs/ko/windows-wsl.mdx +119 -0
  381. package/src/content/docs/ko/zen.mdx +327 -0
  382. package/src/content/docs/lsp.mdx +214 -0
  383. package/src/content/docs/mcp-servers.mdx +512 -0
  384. package/src/content/docs/models.mdx +223 -0
  385. package/src/content/docs/nb/acp.mdx +156 -0
  386. package/src/content/docs/nb/agents.mdx +754 -0
  387. package/src/content/docs/nb/cli.mdx +617 -0
  388. package/src/content/docs/nb/commands.mdx +323 -0
  389. package/src/content/docs/nb/config.mdx +688 -0
  390. package/src/content/docs/nb/custom-tools.mdx +196 -0
  391. package/src/content/docs/nb/ecosystem.mdx +78 -0
  392. package/src/content/docs/nb/enterprise.mdx +170 -0
  393. package/src/content/docs/nb/formatters.mdx +131 -0
  394. package/src/content/docs/nb/github.mdx +325 -0
  395. package/src/content/docs/nb/gitlab.mdx +195 -0
  396. package/src/content/docs/nb/go.mdx +238 -0
  397. package/src/content/docs/nb/ide.mdx +48 -0
  398. package/src/content/docs/nb/index.mdx +359 -0
  399. package/src/content/docs/nb/keybinds.mdx +194 -0
  400. package/src/content/docs/nb/lsp.mdx +208 -0
  401. package/src/content/docs/nb/mcp-servers.mdx +624 -0
  402. package/src/content/docs/nb/models.mdx +223 -0
  403. package/src/content/docs/nb/network.mdx +57 -0
  404. package/src/content/docs/nb/permissions.mdx +235 -0
  405. package/src/content/docs/nb/plugins.mdx +389 -0
  406. package/src/content/docs/nb/providers.mdx +1956 -0
  407. package/src/content/docs/nb/rules.mdx +180 -0
  408. package/src/content/docs/nb/sdk.mdx +463 -0
  409. package/src/content/docs/nb/server.mdx +287 -0
  410. package/src/content/docs/nb/share.mdx +128 -0
  411. package/src/content/docs/nb/skills.mdx +222 -0
  412. package/src/content/docs/nb/themes.mdx +369 -0
  413. package/src/content/docs/nb/tools.mdx +341 -0
  414. package/src/content/docs/nb/troubleshooting.mdx +225 -0
  415. package/src/content/docs/nb/tui.mdx +429 -0
  416. package/src/content/docs/nb/web.mdx +105 -0
  417. package/src/content/docs/nb/windows-wsl.mdx +113 -0
  418. package/src/content/docs/nb/zen.mdx +345 -0
  419. package/src/content/docs/network.mdx +57 -0
  420. package/src/content/docs/permissions.mdx +256 -0
  421. package/src/content/docs/pl/acp.mdx +158 -0
  422. package/src/content/docs/pl/agents.mdx +754 -0
  423. package/src/content/docs/pl/cli.mdx +617 -0
  424. package/src/content/docs/pl/commands.mdx +323 -0
  425. package/src/content/docs/pl/config.mdx +680 -0
  426. package/src/content/docs/pl/custom-tools.mdx +196 -0
  427. package/src/content/docs/pl/ecosystem.mdx +78 -0
  428. package/src/content/docs/pl/enterprise.mdx +170 -0
  429. package/src/content/docs/pl/formatters.mdx +131 -0
  430. package/src/content/docs/pl/github.mdx +321 -0
  431. package/src/content/docs/pl/gitlab.mdx +195 -0
  432. package/src/content/docs/pl/go.mdx +230 -0
  433. package/src/content/docs/pl/ide.mdx +48 -0
  434. package/src/content/docs/pl/index.mdx +347 -0
  435. package/src/content/docs/pl/keybinds.mdx +194 -0
  436. package/src/content/docs/pl/lsp.mdx +208 -0
  437. package/src/content/docs/pl/mcp-servers.mdx +511 -0
  438. package/src/content/docs/pl/models.mdx +223 -0
  439. package/src/content/docs/pl/network.mdx +57 -0
  440. package/src/content/docs/pl/permissions.mdx +235 -0
  441. package/src/content/docs/pl/plugins.mdx +385 -0
  442. package/src/content/docs/pl/providers.mdx +1986 -0
  443. package/src/content/docs/pl/rules.mdx +180 -0
  444. package/src/content/docs/pl/sdk.mdx +463 -0
  445. package/src/content/docs/pl/server.mdx +287 -0
  446. package/src/content/docs/pl/share.mdx +128 -0
  447. package/src/content/docs/pl/skills.mdx +222 -0
  448. package/src/content/docs/pl/themes.mdx +369 -0
  449. package/src/content/docs/pl/tools.mdx +341 -0
  450. package/src/content/docs/pl/troubleshooting.mdx +300 -0
  451. package/src/content/docs/pl/tui.mdx +429 -0
  452. package/src/content/docs/pl/web.mdx +142 -0
  453. package/src/content/docs/pl/windows-wsl.mdx +113 -0
  454. package/src/content/docs/pl/zen.mdx +344 -0
  455. package/src/content/docs/plugins.mdx +389 -0
  456. package/src/content/docs/policies.mdx +137 -0
  457. package/src/content/docs/providers.mdx +2501 -0
  458. package/src/content/docs/pt-br/acp.mdx +156 -0
  459. package/src/content/docs/pt-br/agents.mdx +755 -0
  460. package/src/content/docs/pt-br/cli.mdx +616 -0
  461. package/src/content/docs/pt-br/commands.mdx +322 -0
  462. package/src/content/docs/pt-br/config.mdx +687 -0
  463. package/src/content/docs/pt-br/custom-tools.mdx +196 -0
  464. package/src/content/docs/pt-br/ecosystem.mdx +78 -0
  465. package/src/content/docs/pt-br/enterprise.mdx +166 -0
  466. package/src/content/docs/pt-br/formatters.mdx +131 -0
  467. package/src/content/docs/pt-br/github.mdx +321 -0
  468. package/src/content/docs/pt-br/gitlab.mdx +195 -0
  469. package/src/content/docs/pt-br/go.mdx +238 -0
  470. package/src/content/docs/pt-br/ide.mdx +48 -0
  471. package/src/content/docs/pt-br/index.mdx +344 -0
  472. package/src/content/docs/pt-br/keybinds.mdx +194 -0
  473. package/src/content/docs/pt-br/lsp.mdx +208 -0
  474. package/src/content/docs/pt-br/mcp-servers.mdx +511 -0
  475. package/src/content/docs/pt-br/models.mdx +222 -0
  476. package/src/content/docs/pt-br/network.mdx +57 -0
  477. package/src/content/docs/pt-br/permissions.mdx +235 -0
  478. package/src/content/docs/pt-br/plugins.mdx +388 -0
  479. package/src/content/docs/pt-br/providers.mdx +1989 -0
  480. package/src/content/docs/pt-br/rules.mdx +180 -0
  481. package/src/content/docs/pt-br/sdk.mdx +463 -0
  482. package/src/content/docs/pt-br/server.mdx +284 -0
  483. package/src/content/docs/pt-br/share.mdx +127 -0
  484. package/src/content/docs/pt-br/skills.mdx +222 -0
  485. package/src/content/docs/pt-br/themes.mdx +369 -0
  486. package/src/content/docs/pt-br/tools.mdx +341 -0
  487. package/src/content/docs/pt-br/troubleshooting.mdx +299 -0
  488. package/src/content/docs/pt-br/tui.mdx +426 -0
  489. package/src/content/docs/pt-br/web.mdx +142 -0
  490. package/src/content/docs/pt-br/windows-wsl.mdx +113 -0
  491. package/src/content/docs/pt-br/zen.mdx +327 -0
  492. package/src/content/docs/references.mdx +157 -0
  493. package/src/content/docs/ru/acp.mdx +156 -0
  494. package/src/content/docs/ru/agents.mdx +754 -0
  495. package/src/content/docs/ru/cli.mdx +617 -0
  496. package/src/content/docs/ru/commands.mdx +323 -0
  497. package/src/content/docs/ru/config.mdx +685 -0
  498. package/src/content/docs/ru/custom-tools.mdx +170 -0
  499. package/src/content/docs/ru/ecosystem.mdx +78 -0
  500. package/src/content/docs/ru/enterprise.mdx +168 -0
  501. package/src/content/docs/ru/formatters.mdx +119 -0
  502. package/src/content/docs/ru/github.mdx +321 -0
  503. package/src/content/docs/ru/gitlab.mdx +195 -0
  504. package/src/content/docs/ru/go.mdx +238 -0
  505. package/src/content/docs/ru/ide.mdx +48 -0
  506. package/src/content/docs/ru/index.mdx +356 -0
  507. package/src/content/docs/ru/keybinds.mdx +194 -0
  508. package/src/content/docs/ru/lsp.mdx +207 -0
  509. package/src/content/docs/ru/mcp-servers.mdx +511 -0
  510. package/src/content/docs/ru/models.mdx +223 -0
  511. package/src/content/docs/ru/network.mdx +57 -0
  512. package/src/content/docs/ru/permissions.mdx +235 -0
  513. package/src/content/docs/ru/plugins.mdx +385 -0
  514. package/src/content/docs/ru/providers.mdx +1987 -0
  515. package/src/content/docs/ru/rules.mdx +180 -0
  516. package/src/content/docs/ru/sdk.mdx +463 -0
  517. package/src/content/docs/ru/server.mdx +287 -0
  518. package/src/content/docs/ru/share.mdx +128 -0
  519. package/src/content/docs/ru/skills.mdx +222 -0
  520. package/src/content/docs/ru/themes.mdx +369 -0
  521. package/src/content/docs/ru/tools.mdx +341 -0
  522. package/src/content/docs/ru/troubleshooting.mdx +300 -0
  523. package/src/content/docs/ru/tui.mdx +429 -0
  524. package/src/content/docs/ru/web.mdx +142 -0
  525. package/src/content/docs/ru/windows-wsl.mdx +113 -0
  526. package/src/content/docs/ru/zen.mdx +345 -0
  527. package/src/content/docs/rules.mdx +188 -0
  528. package/src/content/docs/sdk.mdx +463 -0
  529. package/src/content/docs/server.mdx +287 -0
  530. package/src/content/docs/share.mdx +128 -0
  531. package/src/content/docs/skills.mdx +222 -0
  532. package/src/content/docs/th/acp.mdx +156 -0
  533. package/src/content/docs/th/agents.mdx +744 -0
  534. package/src/content/docs/th/cli.mdx +618 -0
  535. package/src/content/docs/th/commands.mdx +320 -0
  536. package/src/content/docs/th/config.mdx +690 -0
  537. package/src/content/docs/th/custom-tools.mdx +196 -0
  538. package/src/content/docs/th/ecosystem.mdx +78 -0
  539. package/src/content/docs/th/enterprise.mdx +170 -0
  540. package/src/content/docs/th/formatters.mdx +131 -0
  541. package/src/content/docs/th/github.mdx +321 -0
  542. package/src/content/docs/th/gitlab.mdx +195 -0
  543. package/src/content/docs/th/go.mdx +224 -0
  544. package/src/content/docs/th/ide.mdx +48 -0
  545. package/src/content/docs/th/index.mdx +360 -0
  546. package/src/content/docs/th/keybinds.mdx +194 -0
  547. package/src/content/docs/th/lsp.mdx +208 -0
  548. package/src/content/docs/th/mcp-servers.mdx +511 -0
  549. package/src/content/docs/th/models.mdx +223 -0
  550. package/src/content/docs/th/network.mdx +57 -0
  551. package/src/content/docs/th/permissions.mdx +235 -0
  552. package/src/content/docs/th/plugins.mdx +389 -0
  553. package/src/content/docs/th/providers.mdx +2532 -0
  554. package/src/content/docs/th/rules.mdx +180 -0
  555. package/src/content/docs/th/sdk.mdx +463 -0
  556. package/src/content/docs/th/server.mdx +287 -0
  557. package/src/content/docs/th/share.mdx +128 -0
  558. package/src/content/docs/th/skills.mdx +222 -0
  559. package/src/content/docs/th/themes.mdx +369 -0
  560. package/src/content/docs/th/tools.mdx +341 -0
  561. package/src/content/docs/th/troubleshooting.mdx +300 -0
  562. package/src/content/docs/th/tui.mdx +429 -0
  563. package/src/content/docs/th/web.mdx +142 -0
  564. package/src/content/docs/th/windows-wsl.mdx +113 -0
  565. package/src/content/docs/th/zen.mdx +329 -0
  566. package/src/content/docs/themes.mdx +369 -0
  567. package/src/content/docs/tools.mdx +345 -0
  568. package/src/content/docs/tr/acp.mdx +156 -0
  569. package/src/content/docs/tr/agents.mdx +754 -0
  570. package/src/content/docs/tr/cli.mdx +617 -0
  571. package/src/content/docs/tr/commands.mdx +323 -0
  572. package/src/content/docs/tr/config.mdx +687 -0
  573. package/src/content/docs/tr/custom-tools.mdx +196 -0
  574. package/src/content/docs/tr/ecosystem.mdx +78 -0
  575. package/src/content/docs/tr/enterprise.mdx +170 -0
  576. package/src/content/docs/tr/formatters.mdx +131 -0
  577. package/src/content/docs/tr/github.mdx +321 -0
  578. package/src/content/docs/tr/gitlab.mdx +195 -0
  579. package/src/content/docs/tr/go.mdx +224 -0
  580. package/src/content/docs/tr/ide.mdx +48 -0
  581. package/src/content/docs/tr/index.mdx +347 -0
  582. package/src/content/docs/tr/keybinds.mdx +194 -0
  583. package/src/content/docs/tr/lsp.mdx +208 -0
  584. package/src/content/docs/tr/mcp-servers.mdx +511 -0
  585. package/src/content/docs/tr/models.mdx +223 -0
  586. package/src/content/docs/tr/network.mdx +57 -0
  587. package/src/content/docs/tr/permissions.mdx +235 -0
  588. package/src/content/docs/tr/plugins.mdx +388 -0
  589. package/src/content/docs/tr/providers.mdx +1988 -0
  590. package/src/content/docs/tr/rules.mdx +180 -0
  591. package/src/content/docs/tr/sdk.mdx +463 -0
  592. package/src/content/docs/tr/server.mdx +285 -0
  593. package/src/content/docs/tr/share.mdx +127 -0
  594. package/src/content/docs/tr/skills.mdx +222 -0
  595. package/src/content/docs/tr/themes.mdx +369 -0
  596. package/src/content/docs/tr/tools.mdx +341 -0
  597. package/src/content/docs/tr/troubleshooting.mdx +299 -0
  598. package/src/content/docs/tr/tui.mdx +427 -0
  599. package/src/content/docs/tr/web.mdx +142 -0
  600. package/src/content/docs/tr/windows-wsl.mdx +113 -0
  601. package/src/content/docs/tr/zen.mdx +327 -0
  602. package/src/content/docs/troubleshooting.mdx +314 -0
  603. package/src/content/docs/tui.mdx +427 -0
  604. package/src/content/docs/web.mdx +142 -0
  605. package/src/content/docs/windows-wsl.mdx +112 -0
  606. package/src/content/docs/zen.mdx +345 -0
  607. package/src/content/docs/zh-cn/acp.mdx +156 -0
  608. package/src/content/docs/zh-cn/agents.mdx +754 -0
  609. package/src/content/docs/zh-cn/cli.mdx +617 -0
  610. package/src/content/docs/zh-cn/commands.mdx +322 -0
  611. package/src/content/docs/zh-cn/config.mdx +683 -0
  612. package/src/content/docs/zh-cn/custom-tools.mdx +196 -0
  613. package/src/content/docs/zh-cn/ecosystem.mdx +78 -0
  614. package/src/content/docs/zh-cn/enterprise.mdx +165 -0
  615. package/src/content/docs/zh-cn/formatters.mdx +132 -0
  616. package/src/content/docs/zh-cn/github.mdx +321 -0
  617. package/src/content/docs/zh-cn/gitlab.mdx +194 -0
  618. package/src/content/docs/zh-cn/go.mdx +224 -0
  619. package/src/content/docs/zh-cn/ide.mdx +48 -0
  620. package/src/content/docs/zh-cn/index.mdx +343 -0
  621. package/src/content/docs/zh-cn/keybinds.mdx +194 -0
  622. package/src/content/docs/zh-cn/lsp.mdx +208 -0
  623. package/src/content/docs/zh-cn/mcp-servers.mdx +511 -0
  624. package/src/content/docs/zh-cn/models.mdx +222 -0
  625. package/src/content/docs/zh-cn/network.mdx +57 -0
  626. package/src/content/docs/zh-cn/permissions.mdx +235 -0
  627. package/src/content/docs/zh-cn/plugins.mdx +388 -0
  628. package/src/content/docs/zh-cn/providers.mdx +1949 -0
  629. package/src/content/docs/zh-cn/rules.mdx +180 -0
  630. package/src/content/docs/zh-cn/sdk.mdx +463 -0
  631. package/src/content/docs/zh-cn/server.mdx +284 -0
  632. package/src/content/docs/zh-cn/share.mdx +127 -0
  633. package/src/content/docs/zh-cn/skills.mdx +222 -0
  634. package/src/content/docs/zh-cn/themes.mdx +369 -0
  635. package/src/content/docs/zh-cn/tools.mdx +341 -0
  636. package/src/content/docs/zh-cn/troubleshooting.mdx +299 -0
  637. package/src/content/docs/zh-cn/tui.mdx +426 -0
  638. package/src/content/docs/zh-cn/web.mdx +142 -0
  639. package/src/content/docs/zh-cn/windows-wsl.mdx +112 -0
  640. package/src/content/docs/zh-cn/zen.mdx +327 -0
  641. package/src/content/docs/zh-tw/acp.mdx +156 -0
  642. package/src/content/docs/zh-tw/agents.mdx +754 -0
  643. package/src/content/docs/zh-tw/cli.mdx +617 -0
  644. package/src/content/docs/zh-tw/commands.mdx +322 -0
  645. package/src/content/docs/zh-tw/config.mdx +687 -0
  646. package/src/content/docs/zh-tw/custom-tools.mdx +196 -0
  647. package/src/content/docs/zh-tw/ecosystem.mdx +78 -0
  648. package/src/content/docs/zh-tw/enterprise.mdx +165 -0
  649. package/src/content/docs/zh-tw/formatters.mdx +132 -0
  650. package/src/content/docs/zh-tw/github.mdx +321 -0
  651. package/src/content/docs/zh-tw/gitlab.mdx +194 -0
  652. package/src/content/docs/zh-tw/go.mdx +224 -0
  653. package/src/content/docs/zh-tw/ide.mdx +48 -0
  654. package/src/content/docs/zh-tw/index.mdx +343 -0
  655. package/src/content/docs/zh-tw/keybinds.mdx +194 -0
  656. package/src/content/docs/zh-tw/lsp.mdx +208 -0
  657. package/src/content/docs/zh-tw/mcp-servers.mdx +511 -0
  658. package/src/content/docs/zh-tw/models.mdx +222 -0
  659. package/src/content/docs/zh-tw/network.mdx +57 -0
  660. package/src/content/docs/zh-tw/permissions.mdx +235 -0
  661. package/src/content/docs/zh-tw/plugins.mdx +388 -0
  662. package/src/content/docs/zh-tw/providers.mdx +1970 -0
  663. package/src/content/docs/zh-tw/rules.mdx +180 -0
  664. package/src/content/docs/zh-tw/sdk.mdx +463 -0
  665. package/src/content/docs/zh-tw/server.mdx +284 -0
  666. package/src/content/docs/zh-tw/share.mdx +127 -0
  667. package/src/content/docs/zh-tw/skills.mdx +222 -0
  668. package/src/content/docs/zh-tw/themes.mdx +369 -0
  669. package/src/content/docs/zh-tw/tools.mdx +341 -0
  670. package/src/content/docs/zh-tw/troubleshooting.mdx +299 -0
  671. package/src/content/docs/zh-tw/tui.mdx +426 -0
  672. package/src/content/docs/zh-tw/web.mdx +142 -0
  673. package/src/content/docs/zh-tw/windows-wsl.mdx +112 -0
  674. package/src/content/docs/zh-tw/zen.mdx +333 -0
  675. package/src/content/i18n/ar.json +75 -0
  676. package/src/content/i18n/bs.json +75 -0
  677. package/src/content/i18n/da.json +75 -0
  678. package/src/content/i18n/de.json +75 -0
  679. package/src/content/i18n/en.json +75 -0
  680. package/src/content/i18n/es.json +75 -0
  681. package/src/content/i18n/fr.json +75 -0
  682. package/src/content/i18n/it.json +75 -0
  683. package/src/content/i18n/ja.json +75 -0
  684. package/src/content/i18n/ko.json +75 -0
  685. package/src/content/i18n/nb.json +75 -0
  686. package/src/content/i18n/pl.json +75 -0
  687. package/src/content/i18n/pt-BR.json +75 -0
  688. package/src/content/i18n/ru.json +75 -0
  689. package/src/content/i18n/th.json +75 -0
  690. package/src/content/i18n/tr.json +75 -0
  691. package/src/content/i18n/zh-CN.json +75 -0
  692. package/src/content/i18n/zh-TW.json +75 -0
  693. package/src/content.config.ts +16 -0
  694. package/src/i18n/locales.ts +117 -0
  695. package/src/middleware.ts +94 -0
  696. package/src/pages/[...slug].md.ts +34 -0
  697. package/src/pages/s/[id].astro +164 -0
  698. package/src/styles/custom.css +405 -0
  699. package/src/types/lang-map.d.ts +27 -0
  700. package/src/types/starlight-virtual.d.ts +14 -0
  701. package/sst-env.d.ts +10 -0
  702. package/tsconfig.json +9 -0
@@ -0,0 +1,29 @@
1
+ ---
2
+ import config from "virtual:starlight/user-config"
3
+ import StarlightLanguageSelect from "@astrojs/starlight/components/LanguageSelect.astro"
4
+
5
+ const locales = Object.keys(config.locales ?? {})
6
+ ---
7
+
8
+ <opencode-language-select data-locales={JSON.stringify(locales)}>
9
+ <StarlightLanguageSelect />
10
+ </opencode-language-select>
11
+
12
+ <script>
13
+ document.addEventListener("change", (event) => {
14
+ if (!(event.target instanceof HTMLSelectElement)) return
15
+ const wrapper = event.target.closest("opencode-language-select")
16
+ if (!(wrapper instanceof HTMLElement)) return
17
+
18
+ const locales = JSON.parse(wrapper.dataset.locales ?? "[]") as string[]
19
+ const locale = locales[event.target.selectedIndex]
20
+ if (!locale) return
21
+ document.cookie = `oc_locale=${encodeURIComponent(locale === "root" ? "en" : locale)}; Path=/; Max-Age=31536000; SameSite=Lax`
22
+ })
23
+ </script>
24
+
25
+ <style>
26
+ opencode-language-select {
27
+ display: contents;
28
+ }
29
+ </style>
@@ -0,0 +1,644 @@
1
+ import { For, Show, onMount, Suspense, onCleanup, createMemo, createSignal, SuspenseList } from "solid-js"
2
+ import { DateTime } from "luxon"
3
+ import { createStore, reconcile } from "solid-js/store"
4
+ import { IconArrowDown } from "./icons"
5
+ import { IconOpencode } from "./icons/custom"
6
+ import { ShareI18nProvider, formatCurrency, formatNumber, normalizeLocale } from "./share/common"
7
+ import styles from "./share.module.css"
8
+ import type { MessageV2 } from "opencode/session/message-v2"
9
+ import type { Message } from "opencode/session/message"
10
+ import type { Session } from "opencode/session/index"
11
+ import { Part, ProviderIcon } from "./share/part"
12
+
13
+ type MessageWithParts = MessageV2.Info & { parts: MessageV2.Part[] }
14
+
15
+ type Status = "disconnected" | "connecting" | "connected" | "error" | "reconnecting"
16
+
17
+ function scrollToAnchor(id: string) {
18
+ const el = document.getElementById(id)
19
+ if (!el) return
20
+
21
+ el.scrollIntoView({ behavior: "smooth" })
22
+ }
23
+
24
+ function getStatusText(status: [Status, string?], messages: Record<string, string>): string {
25
+ switch (status[0]) {
26
+ case "connected":
27
+ return messages.status_connected_waiting
28
+ case "connecting":
29
+ return messages.status_connecting
30
+ case "disconnected":
31
+ return messages.status_disconnected
32
+ case "reconnecting":
33
+ return messages.status_reconnecting
34
+ case "error":
35
+ return status[1] || messages.status_error
36
+ default:
37
+ return messages.status_unknown
38
+ }
39
+ }
40
+
41
+ export default function Share(props: {
42
+ id: string
43
+ api: string
44
+ info: Session.Info
45
+ messages: { locale: string } & Record<string, string>
46
+ }) {
47
+ let lastScrollY = 0
48
+ let hasScrolledToAnchor = false
49
+ let scrollTimeout: number | undefined
50
+ let scrollSentinel: HTMLElement | undefined
51
+ let scrollObserver: IntersectionObserver | undefined
52
+
53
+ const params = new URLSearchParams(window.location.search)
54
+ const debug = params.get("debug") === "true"
55
+
56
+ const [showScrollButton, setShowScrollButton] = createSignal(false)
57
+ const [isButtonHovered, setIsButtonHovered] = createSignal(false)
58
+ const [isNearBottom, setIsNearBottom] = createSignal(false)
59
+
60
+ const [store, setStore] = createStore<{
61
+ info?: Session.Info
62
+ messages: Record<string, MessageWithParts>
63
+ }>({
64
+ info: {
65
+ id: props.id,
66
+ slug: props.info.slug,
67
+ projectID: props.info.projectID,
68
+ directory: props.info.directory,
69
+ title: props.info.title,
70
+ version: props.info.version,
71
+ time: {
72
+ created: props.info.time.created,
73
+ updated: props.info.time.updated,
74
+ },
75
+ },
76
+ messages: {},
77
+ })
78
+ const messages = createMemo(() => Object.values(store.messages).toSorted((a, b) => a.id?.localeCompare(b.id)))
79
+ const [connectionStatus, setConnectionStatus] = createSignal<[Status, string?]>(["disconnected"])
80
+
81
+ onMount(() => {
82
+ const apiUrl = props.api
83
+
84
+ if (!props.id) {
85
+ setConnectionStatus(["error", props.messages.error_id_not_found])
86
+ return
87
+ }
88
+
89
+ if (!apiUrl) {
90
+ console.error("API URL not found in environment variables")
91
+ setConnectionStatus(["error", props.messages.error_api_url_not_found])
92
+ return
93
+ }
94
+
95
+ let reconnectTimer: number | undefined
96
+ let socket: WebSocket | null = null
97
+
98
+ // Function to create and set up WebSocket with auto-reconnect
99
+ const setupWebSocket = () => {
100
+ // Close any existing connection
101
+ if (socket) {
102
+ socket.close()
103
+ }
104
+
105
+ setConnectionStatus(["connecting"])
106
+
107
+ // Always use secure WebSocket protocol (wss)
108
+ const wsBaseUrl = apiUrl.replace(/^https?:\/\//, "wss://")
109
+ const wsUrl = `${wsBaseUrl}/share_poll?id=${props.id}`
110
+ // Create WebSocket connection
111
+ socket = new WebSocket(wsUrl)
112
+
113
+ // Handle connection opening
114
+ socket.onopen = () => {
115
+ setConnectionStatus(["connected"])
116
+ }
117
+
118
+ // Handle incoming messages
119
+ socket.onmessage = (event) => {
120
+ try {
121
+ const d = JSON.parse(event.data)
122
+ const [root, type, ...splits] = d.key.split("/")
123
+ if (root !== "session") return
124
+ if (type === "info") {
125
+ setStore("info", reconcile(d.content))
126
+ return
127
+ }
128
+ if (type === "message") {
129
+ const [, messageID] = splits
130
+ if ("metadata" in d.content) {
131
+ d.content = fromV1(d.content)
132
+ }
133
+ d.content.parts = d.content.parts ?? store.messages[messageID]?.parts ?? []
134
+ setStore("messages", messageID, reconcile(d.content))
135
+ }
136
+ if (type === "part") {
137
+ setStore("messages", d.content.messageID, "parts", (arr) => {
138
+ const index = arr.findIndex((x) => x.id === d.content.id)
139
+ if (index === -1) arr.push(d.content)
140
+ if (index > -1) arr[index] = d.content
141
+ return [...arr]
142
+ })
143
+ }
144
+ } catch (error) {
145
+ console.error("Error parsing WebSocket message:", error)
146
+ }
147
+ }
148
+
149
+ // Handle errors
150
+ socket.onerror = (error) => {
151
+ console.error("WebSocket error:", error)
152
+ setConnectionStatus(["error", props.messages.error_connection_failed])
153
+ }
154
+
155
+ // Handle connection close and reconnection
156
+ socket.onclose = () => {
157
+ setConnectionStatus(["reconnecting"])
158
+
159
+ // Try to reconnect after 2 seconds
160
+ clearTimeout(reconnectTimer)
161
+ reconnectTimer = window.setTimeout(setupWebSocket, 2000) as unknown as number
162
+ }
163
+ }
164
+
165
+ // Initial connection
166
+ setupWebSocket()
167
+
168
+ // Clean up on component unmount
169
+ onCleanup(() => {
170
+ if (socket) {
171
+ socket.close()
172
+ }
173
+ clearTimeout(reconnectTimer)
174
+ })
175
+ })
176
+
177
+ function checkScrollNeed() {
178
+ const currentScrollY = window.scrollY
179
+ const isScrollingDown = currentScrollY > lastScrollY
180
+ const scrolled = currentScrollY > 200 // Show after scrolling 200px
181
+
182
+ // Only show when scrolling down, scrolled enough, and not near bottom
183
+ const shouldShow = isScrollingDown && scrolled && !isNearBottom()
184
+
185
+ // Update last scroll position
186
+ lastScrollY = currentScrollY
187
+
188
+ if (shouldShow) {
189
+ setShowScrollButton(true)
190
+ // Clear existing timeout
191
+ if (scrollTimeout) {
192
+ clearTimeout(scrollTimeout)
193
+ }
194
+ // Hide button after 3 seconds of no scrolling (unless hovered)
195
+ scrollTimeout = window.setTimeout(() => {
196
+ if (!isButtonHovered()) {
197
+ setShowScrollButton(false)
198
+ }
199
+ }, 1500)
200
+ } else if (!isButtonHovered()) {
201
+ // Only hide if not hovered (to prevent disappearing while user is about to click)
202
+ setShowScrollButton(false)
203
+ if (scrollTimeout) {
204
+ clearTimeout(scrollTimeout)
205
+ }
206
+ }
207
+ }
208
+
209
+ onMount(() => {
210
+ lastScrollY = window.scrollY // Initialize scroll position
211
+
212
+ // Create sentinel element
213
+ const sentinel = document.createElement("div")
214
+ sentinel.style.height = "1px"
215
+ sentinel.style.position = "absolute"
216
+ sentinel.style.bottom = "100px"
217
+ sentinel.style.width = "100%"
218
+ sentinel.style.pointerEvents = "none"
219
+ document.body.appendChild(sentinel)
220
+
221
+ // Create intersection observer
222
+ const observer = new IntersectionObserver((entries) => {
223
+ setIsNearBottom(entries[0].isIntersecting)
224
+ })
225
+ observer.observe(sentinel)
226
+
227
+ // Store references for cleanup
228
+ scrollSentinel = sentinel
229
+ scrollObserver = observer
230
+
231
+ checkScrollNeed()
232
+ window.addEventListener("scroll", checkScrollNeed)
233
+ window.addEventListener("resize", checkScrollNeed)
234
+ })
235
+
236
+ onCleanup(() => {
237
+ window.removeEventListener("scroll", checkScrollNeed)
238
+ window.removeEventListener("resize", checkScrollNeed)
239
+
240
+ // Clean up observer and sentinel
241
+ if (scrollObserver) {
242
+ scrollObserver.disconnect()
243
+ }
244
+ if (scrollSentinel) {
245
+ document.body.removeChild(scrollSentinel)
246
+ }
247
+
248
+ if (scrollTimeout) {
249
+ clearTimeout(scrollTimeout)
250
+ }
251
+ })
252
+
253
+ const data = createMemo(() => {
254
+ const result = {
255
+ rootDir: undefined as string | undefined,
256
+ created: undefined as number | undefined,
257
+ completed: undefined as number | undefined,
258
+ messages: [] as MessageWithParts[],
259
+ models: {} as Record<string, string[]>,
260
+ cost: 0,
261
+ tokens: {
262
+ input: 0,
263
+ output: 0,
264
+ reasoning: 0,
265
+ },
266
+ }
267
+
268
+ if (!store.info) return result
269
+
270
+ result.created = store.info.time.created
271
+
272
+ const msgs = messages()
273
+ for (let i = 0; i < msgs.length; i++) {
274
+ const msg = msgs[i]
275
+
276
+ result.messages.push(msg)
277
+
278
+ if (msg.role === "assistant") {
279
+ result.cost += msg.cost
280
+ result.tokens.input += msg.tokens.input
281
+ result.tokens.output += msg.tokens.output
282
+ result.tokens.reasoning += msg.tokens.reasoning
283
+
284
+ result.models[`${msg.providerID} ${msg.modelID}`] = [msg.providerID, msg.modelID]
285
+
286
+ if (msg.path.root) {
287
+ result.rootDir = msg.path.root
288
+ }
289
+
290
+ if (msg.time.completed) {
291
+ result.completed = msg.time.completed
292
+ }
293
+ }
294
+ }
295
+ return result
296
+ })
297
+
298
+ return (
299
+ <Show when={store.info}>
300
+ <ShareI18nProvider messages={props.messages}>
301
+ <main classList={{ [styles.root]: true, "not-content": true }}>
302
+ <div data-component="header">
303
+ <h1 data-component="header-title">{store.info?.title}</h1>
304
+ <div data-component="header-details">
305
+ <ul data-component="header-stats">
306
+ <li title={props.messages.opencode_version} data-slot="item">
307
+ <div data-slot="icon" title={props.messages.opencode_name}>
308
+ <IconOpencode width={16} height={16} />
309
+ </div>
310
+ <Show when={store.info?.version} fallback="v0.0.1">
311
+ <span>v{store.info?.version}</span>
312
+ </Show>
313
+ </li>
314
+ {Object.values(data().models).length > 0 ? (
315
+ <For each={Object.values(data().models)}>
316
+ {([provider, model]) => (
317
+ <li data-slot="item">
318
+ <div data-slot="icon" title={provider}>
319
+ <ProviderIcon model={model} />
320
+ </div>
321
+ <span data-slot="model">{model}</span>
322
+ </li>
323
+ )}
324
+ </For>
325
+ ) : (
326
+ <li>
327
+ <span data-element-label>{props.messages.models}</span>
328
+ <span data-placeholder>&mdash;</span>
329
+ </li>
330
+ )}
331
+ </ul>
332
+ <div
333
+ data-component="header-time"
334
+ title={DateTime.fromMillis(data().created || 0)
335
+ .setLocale(normalizeLocale(props.messages.locale))
336
+ .toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)}
337
+ >
338
+ {DateTime.fromMillis(data().created || 0)
339
+ .setLocale(normalizeLocale(props.messages.locale))
340
+ .toLocaleString(DateTime.DATETIME_MED)}
341
+ </div>
342
+ </div>
343
+ </div>
344
+
345
+ <div>
346
+ <Show when={data().messages.length > 0} fallback={<p>{props.messages.waiting_for_messages}</p>}>
347
+ <div class={styles.parts}>
348
+ <SuspenseList revealOrder="forwards">
349
+ <For each={data().messages}>
350
+ {(msg, msgIndex) => {
351
+ const filteredParts = createMemo(() =>
352
+ msg.parts.filter((x, index) => {
353
+ if (x.type === "step-start" && index > 0) return false
354
+ if (x.type === "snapshot") return false
355
+ if (x.type === "patch") return false
356
+ if (x.type === "step-finish") return false
357
+ if (x.type === "text" && x.synthetic === true) return false
358
+ if (x.type === "text" && !x.text) return false
359
+ if (x.type === "tool" && (x.state.status === "pending" || x.state.status === "running"))
360
+ return false
361
+ return true
362
+ }),
363
+ )
364
+
365
+ return (
366
+ <Suspense>
367
+ <For each={filteredParts()}>
368
+ {(part, partIndex) => {
369
+ const last = () =>
370
+ data().messages.length === msgIndex() + 1 && filteredParts().length === partIndex() + 1
371
+
372
+ onMount(() => {
373
+ const hash = window.location.hash.slice(1)
374
+ // Wait till all parts are loaded
375
+ if (hash !== "" && !hasScrolledToAnchor && last()) {
376
+ hasScrolledToAnchor = true
377
+ scrollToAnchor(hash)
378
+ }
379
+ })
380
+
381
+ return <Part last={last()} part={part} index={partIndex()} message={msg} />
382
+ }}
383
+ </For>
384
+ </Suspense>
385
+ )
386
+ }}
387
+ </For>
388
+ </SuspenseList>
389
+ <div data-section="part" data-part-type="summary">
390
+ <div data-section="decoration">
391
+ <span data-status={connectionStatus()[0]}></span>
392
+ </div>
393
+ <div data-section="content">
394
+ <p data-section="copy">{getStatusText(connectionStatus(), props.messages)}</p>
395
+ <ul data-section="stats">
396
+ <li>
397
+ <span data-element-label>{props.messages.cost}</span>
398
+ {data().cost !== undefined ? (
399
+ <span>{formatCurrency(data().cost, props.messages.locale)}</span>
400
+ ) : (
401
+ <span data-placeholder>&mdash;</span>
402
+ )}
403
+ </li>
404
+ <li>
405
+ <span data-element-label>{props.messages.input_tokens}</span>
406
+ {data().tokens.input ? (
407
+ <span>{formatNumber(data().tokens.input, props.messages.locale)}</span>
408
+ ) : (
409
+ <span data-placeholder>&mdash;</span>
410
+ )}
411
+ </li>
412
+ <li>
413
+ <span data-element-label>{props.messages.output_tokens}</span>
414
+ {data().tokens.output ? (
415
+ <span>{formatNumber(data().tokens.output, props.messages.locale)}</span>
416
+ ) : (
417
+ <span data-placeholder>&mdash;</span>
418
+ )}
419
+ </li>
420
+ <li>
421
+ <span data-element-label>{props.messages.reasoning_tokens}</span>
422
+ {data().tokens.reasoning ? (
423
+ <span>{formatNumber(data().tokens.reasoning, props.messages.locale)}</span>
424
+ ) : (
425
+ <span data-placeholder>&mdash;</span>
426
+ )}
427
+ </li>
428
+ </ul>
429
+ </div>
430
+ </div>
431
+ </div>
432
+ </Show>
433
+ </div>
434
+
435
+ <Show when={debug}>
436
+ <div style={{ margin: "2rem 0" }}>
437
+ <div
438
+ style={{
439
+ border: "1px solid #ccc",
440
+ padding: "1rem",
441
+ "overflow-y": "auto",
442
+ }}
443
+ >
444
+ <Show when={data().messages.length > 0} fallback={<p>{props.messages.waiting_for_messages}</p>}>
445
+ <ul style={{ "list-style-type": "none", padding: 0 }}>
446
+ <For each={data().messages}>
447
+ {(msg) => (
448
+ <li
449
+ style={{
450
+ padding: "0.75rem",
451
+ margin: "0.75rem 0",
452
+ "box-shadow": "0 1px 3px rgba(0,0,0,0.1)",
453
+ }}
454
+ >
455
+ <div>
456
+ <strong>{props.messages.debug_key}:</strong> {msg.id}
457
+ </div>
458
+ <pre>{JSON.stringify(msg, null, 2)}</pre>
459
+ </li>
460
+ )}
461
+ </For>
462
+ </ul>
463
+ </Show>
464
+ </div>
465
+ </div>
466
+ </Show>
467
+
468
+ <Show when={showScrollButton()}>
469
+ <button
470
+ type="button"
471
+ class={styles["scroll-button"]}
472
+ onClick={() => document.body.scrollIntoView({ behavior: "smooth", block: "end" })}
473
+ onMouseEnter={() => {
474
+ setIsButtonHovered(true)
475
+ if (scrollTimeout) {
476
+ clearTimeout(scrollTimeout)
477
+ }
478
+ }}
479
+ onMouseLeave={() => {
480
+ setIsButtonHovered(false)
481
+ if (showScrollButton()) {
482
+ scrollTimeout = window.setTimeout(() => {
483
+ if (!isButtonHovered()) {
484
+ setShowScrollButton(false)
485
+ }
486
+ }, 3000)
487
+ }
488
+ }}
489
+ title={props.messages.scroll_to_bottom}
490
+ aria-label={props.messages.scroll_to_bottom}
491
+ >
492
+ <IconArrowDown width={20} height={20} />
493
+ </button>
494
+ </Show>
495
+ </main>
496
+ </ShareI18nProvider>
497
+ </Show>
498
+ )
499
+ }
500
+
501
+ export function fromV1(v1: Message.Info): MessageWithParts {
502
+ if (v1.role === "assistant") {
503
+ return {
504
+ id: v1.id,
505
+ sessionID: v1.metadata.sessionID,
506
+ role: "assistant",
507
+ parentID: "",
508
+ agent: "build",
509
+ time: {
510
+ created: v1.metadata.time.created,
511
+ completed: v1.metadata.time.completed,
512
+ },
513
+ cost: v1.metadata.assistant!.cost,
514
+ path: v1.metadata.assistant!.path,
515
+ summary: v1.metadata.assistant!.summary,
516
+ tokens: v1.metadata.assistant!.tokens ?? {
517
+ input: 0,
518
+ output: 0,
519
+ cache: {
520
+ read: 0,
521
+ write: 0,
522
+ },
523
+ reasoning: 0,
524
+ },
525
+ modelID: v1.metadata.assistant!.modelID,
526
+ providerID: v1.metadata.assistant!.providerID,
527
+ mode: "build",
528
+ error: v1.metadata.error,
529
+ parts: v1.parts.flatMap((part, index): MessageV2.Part[] => {
530
+ const base = {
531
+ id: index.toString(),
532
+ messageID: v1.id,
533
+ sessionID: v1.metadata.sessionID,
534
+ }
535
+ if (part.type === "text") {
536
+ return [
537
+ {
538
+ ...base,
539
+ type: "text",
540
+ text: part.text,
541
+ },
542
+ ]
543
+ }
544
+ if (part.type === "step-start") {
545
+ return [
546
+ {
547
+ ...base,
548
+ type: "step-start",
549
+ },
550
+ ]
551
+ }
552
+ if (part.type === "tool-invocation") {
553
+ return [
554
+ {
555
+ ...base,
556
+ type: "tool",
557
+ callID: part.toolInvocation.toolCallId,
558
+ tool: part.toolInvocation.toolName,
559
+ state: (() => {
560
+ if (part.toolInvocation.state === "partial-call") {
561
+ return {
562
+ status: "pending",
563
+ input: {},
564
+ raw: "",
565
+ }
566
+ }
567
+
568
+ const { title, time, ...metadata } = v1.metadata.tool[part.toolInvocation.toolCallId]
569
+ if (part.toolInvocation.state === "call") {
570
+ return {
571
+ status: "running",
572
+ input: part.toolInvocation.args,
573
+ time: {
574
+ start: time.start,
575
+ },
576
+ }
577
+ }
578
+
579
+ if (part.toolInvocation.state === "result") {
580
+ return {
581
+ status: "completed",
582
+ input: part.toolInvocation.args,
583
+ output: part.toolInvocation.result,
584
+ title,
585
+ time,
586
+ metadata,
587
+ }
588
+ }
589
+ throw new Error("unknown tool invocation state")
590
+ })(),
591
+ },
592
+ ]
593
+ }
594
+ return []
595
+ }),
596
+ }
597
+ }
598
+
599
+ if (v1.role === "user") {
600
+ return {
601
+ id: v1.id,
602
+ sessionID: v1.metadata.sessionID,
603
+ role: "user",
604
+ agent: "user",
605
+ model: {
606
+ providerID: "",
607
+ modelID: "",
608
+ },
609
+ time: {
610
+ created: v1.metadata.time.created,
611
+ },
612
+ parts: v1.parts.flatMap((part, index): MessageV2.Part[] => {
613
+ const base = {
614
+ id: index.toString(),
615
+ messageID: v1.id,
616
+ sessionID: v1.metadata.sessionID,
617
+ }
618
+ if (part.type === "text") {
619
+ return [
620
+ {
621
+ ...base,
622
+ type: "text",
623
+ text: part.text,
624
+ },
625
+ ]
626
+ }
627
+ if (part.type === "file") {
628
+ return [
629
+ {
630
+ ...base,
631
+ type: "file",
632
+ mime: part.mediaType,
633
+ filename: part.filename,
634
+ url: part.url,
635
+ },
636
+ ]
637
+ }
638
+ return []
639
+ }),
640
+ }
641
+ }
642
+
643
+ throw new Error("unknown message type")
644
+ }