@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.
- package/README.md +54 -0
- package/astro.config.mjs +324 -0
- package/config.mjs +14 -0
- package/package.json +44 -0
- package/public/apple-touch-icon-v3.png +1 -0
- package/public/apple-touch-icon.png +1 -0
- package/public/favicon-96x96-v3.png +1 -0
- package/public/favicon-96x96.png +1 -0
- package/public/favicon-v3.ico +1 -0
- package/public/favicon-v3.svg +1 -0
- package/public/favicon.ico +1 -0
- package/public/favicon.svg +1 -0
- package/public/robots.txt +6 -0
- package/public/site.webmanifest +1 -0
- package/public/social-share-zen.png +1 -0
- package/public/social-share.png +1 -0
- package/public/theme.json +183 -0
- package/public/web-app-manifest-192x192.png +1 -0
- package/public/web-app-manifest-512x512.png +1 -0
- package/src/assets/lander/check.svg +2 -0
- package/src/assets/lander/copy.svg +2 -0
- package/src/assets/lander/screenshot-github.png +0 -0
- package/src/assets/lander/screenshot-splash.png +0 -0
- package/src/assets/lander/screenshot-vscode.png +0 -0
- package/src/assets/lander/screenshot.png +0 -0
- package/src/assets/logo-dark.svg +18 -0
- package/src/assets/logo-light.svg +18 -0
- package/src/assets/logo-ornate-dark.svg +18 -0
- package/src/assets/logo-ornate-light.svg +18 -0
- package/src/assets/web/web-homepage-active-session.png +0 -0
- package/src/assets/web/web-homepage-new-session.png +0 -0
- package/src/assets/web/web-homepage-see-servers.png +0 -0
- package/src/components/Footer.astro +125 -0
- package/src/components/Head.astro +54 -0
- package/src/components/Header.astro +136 -0
- package/src/components/Hero.astro +11 -0
- package/src/components/Lander.astro +721 -0
- package/src/components/LanguageSelect.astro +29 -0
- package/src/components/Share.tsx +644 -0
- package/src/components/SiteTitle.astro +59 -0
- package/src/components/icons/custom.tsx +87 -0
- package/src/components/icons/index.tsx +4454 -0
- package/src/components/share/common.tsx +128 -0
- package/src/components/share/content-bash.module.css +85 -0
- package/src/components/share/content-bash.tsx +67 -0
- package/src/components/share/content-code.module.css +26 -0
- package/src/components/share/content-code.tsx +30 -0
- package/src/components/share/content-diff.module.css +153 -0
- package/src/components/share/content-diff.tsx +240 -0
- package/src/components/share/content-error.module.css +64 -0
- package/src/components/share/content-error.tsx +25 -0
- package/src/components/share/content-markdown.module.css +154 -0
- package/src/components/share/content-markdown.tsx +74 -0
- package/src/components/share/content-text.module.css +63 -0
- package/src/components/share/content-text.tsx +38 -0
- package/src/components/share/copy-button.module.css +30 -0
- package/src/components/share/copy-button.tsx +36 -0
- package/src/components/share/part.module.css +428 -0
- package/src/components/share/part.tsx +816 -0
- package/src/components/share.module.css +832 -0
- package/src/content/docs/acp.mdx +156 -0
- package/src/content/docs/agents.mdx +781 -0
- package/src/content/docs/ar/acp.mdx +156 -0
- package/src/content/docs/ar/agents.mdx +754 -0
- package/src/content/docs/ar/cli.mdx +616 -0
- package/src/content/docs/ar/commands.mdx +322 -0
- package/src/content/docs/ar/config.mdx +685 -0
- package/src/content/docs/ar/custom-tools.mdx +196 -0
- package/src/content/docs/ar/ecosystem.mdx +78 -0
- package/src/content/docs/ar/enterprise.mdx +165 -0
- package/src/content/docs/ar/formatters.mdx +131 -0
- package/src/content/docs/ar/github.mdx +321 -0
- package/src/content/docs/ar/gitlab.mdx +195 -0
- package/src/content/docs/ar/go.mdx +224 -0
- package/src/content/docs/ar/ide.mdx +48 -0
- package/src/content/docs/ar/index.mdx +344 -0
- package/src/content/docs/ar/keybinds.mdx +194 -0
- package/src/content/docs/ar/lsp.mdx +207 -0
- package/src/content/docs/ar/mcp-servers.mdx +511 -0
- package/src/content/docs/ar/models.mdx +222 -0
- package/src/content/docs/ar/network.mdx +57 -0
- package/src/content/docs/ar/permissions.mdx +235 -0
- package/src/content/docs/ar/plugins.mdx +385 -0
- package/src/content/docs/ar/providers.mdx +1983 -0
- package/src/content/docs/ar/rules.mdx +180 -0
- package/src/content/docs/ar/sdk.mdx +463 -0
- package/src/content/docs/ar/server.mdx +287 -0
- package/src/content/docs/ar/share.mdx +127 -0
- package/src/content/docs/ar/skills.mdx +222 -0
- package/src/content/docs/ar/themes.mdx +369 -0
- package/src/content/docs/ar/tools.mdx +341 -0
- package/src/content/docs/ar/troubleshooting.mdx +299 -0
- package/src/content/docs/ar/tui.mdx +426 -0
- package/src/content/docs/ar/web.mdx +142 -0
- package/src/content/docs/ar/windows-wsl.mdx +113 -0
- package/src/content/docs/ar/zen.mdx +332 -0
- package/src/content/docs/bs/acp.mdx +156 -0
- package/src/content/docs/bs/agents.mdx +754 -0
- package/src/content/docs/bs/cli.mdx +614 -0
- package/src/content/docs/bs/commands.mdx +316 -0
- package/src/content/docs/bs/config.mdx +685 -0
- package/src/content/docs/bs/custom-tools.mdx +195 -0
- package/src/content/docs/bs/ecosystem.mdx +78 -0
- package/src/content/docs/bs/enterprise.mdx +165 -0
- package/src/content/docs/bs/formatters.mdx +124 -0
- package/src/content/docs/bs/github.mdx +311 -0
- package/src/content/docs/bs/gitlab.mdx +188 -0
- package/src/content/docs/bs/go.mdx +238 -0
- package/src/content/docs/bs/ide.mdx +47 -0
- package/src/content/docs/bs/index.mdx +323 -0
- package/src/content/docs/bs/keybinds.mdx +194 -0
- package/src/content/docs/bs/lsp.mdx +204 -0
- package/src/content/docs/bs/mcp-servers.mdx +482 -0
- package/src/content/docs/bs/models.mdx +201 -0
- package/src/content/docs/bs/network.mdx +51 -0
- package/src/content/docs/bs/permissions.mdx +228 -0
- package/src/content/docs/bs/plugins.mdx +371 -0
- package/src/content/docs/bs/providers.mdx +1993 -0
- package/src/content/docs/bs/rules.mdx +180 -0
- package/src/content/docs/bs/sdk.mdx +463 -0
- package/src/content/docs/bs/server.mdx +284 -0
- package/src/content/docs/bs/share.mdx +127 -0
- package/src/content/docs/bs/skills.mdx +222 -0
- package/src/content/docs/bs/themes.mdx +369 -0
- package/src/content/docs/bs/tools.mdx +341 -0
- package/src/content/docs/bs/troubleshooting.mdx +300 -0
- package/src/content/docs/bs/tui.mdx +432 -0
- package/src/content/docs/bs/web.mdx +142 -0
- package/src/content/docs/bs/windows-wsl.mdx +113 -0
- package/src/content/docs/bs/zen.mdx +350 -0
- package/src/content/docs/cli.mdx +733 -0
- package/src/content/docs/commands.mdx +323 -0
- package/src/content/docs/config.mdx +941 -0
- package/src/content/docs/custom-tools.mdx +196 -0
- package/src/content/docs/da/acp.mdx +156 -0
- package/src/content/docs/da/agents.mdx +755 -0
- package/src/content/docs/da/cli.mdx +617 -0
- package/src/content/docs/da/commands.mdx +323 -0
- package/src/content/docs/da/config.mdx +688 -0
- package/src/content/docs/da/custom-tools.mdx +196 -0
- package/src/content/docs/da/ecosystem.mdx +78 -0
- package/src/content/docs/da/enterprise.mdx +170 -0
- package/src/content/docs/da/formatters.mdx +131 -0
- package/src/content/docs/da/github.mdx +321 -0
- package/src/content/docs/da/gitlab.mdx +195 -0
- package/src/content/docs/da/go.mdx +238 -0
- package/src/content/docs/da/ide.mdx +48 -0
- package/src/content/docs/da/index.mdx +360 -0
- package/src/content/docs/da/keybinds.mdx +194 -0
- package/src/content/docs/da/lsp.mdx +208 -0
- package/src/content/docs/da/mcp-servers.mdx +511 -0
- package/src/content/docs/da/models.mdx +223 -0
- package/src/content/docs/da/network.mdx +57 -0
- package/src/content/docs/da/permissions.mdx +235 -0
- package/src/content/docs/da/plugins.mdx +389 -0
- package/src/content/docs/da/providers.mdx +1981 -0
- package/src/content/docs/da/rules.mdx +180 -0
- package/src/content/docs/da/sdk.mdx +463 -0
- package/src/content/docs/da/server.mdx +287 -0
- package/src/content/docs/da/share.mdx +128 -0
- package/src/content/docs/da/skills.mdx +222 -0
- package/src/content/docs/da/themes.mdx +369 -0
- package/src/content/docs/da/tools.mdx +341 -0
- package/src/content/docs/da/troubleshooting.mdx +300 -0
- package/src/content/docs/da/tui.mdx +426 -0
- package/src/content/docs/da/web.mdx +142 -0
- package/src/content/docs/da/windows-wsl.mdx +113 -0
- package/src/content/docs/da/zen.mdx +345 -0
- package/src/content/docs/de/acp.mdx +156 -0
- package/src/content/docs/de/agents.mdx +741 -0
- package/src/content/docs/de/cli.mdx +616 -0
- package/src/content/docs/de/commands.mdx +323 -0
- package/src/content/docs/de/config.mdx +684 -0
- package/src/content/docs/de/custom-tools.mdx +170 -0
- package/src/content/docs/de/ecosystem.mdx +78 -0
- package/src/content/docs/de/enterprise.mdx +170 -0
- package/src/content/docs/de/formatters.mdx +131 -0
- package/src/content/docs/de/github.mdx +321 -0
- package/src/content/docs/de/gitlab.mdx +195 -0
- package/src/content/docs/de/go.mdx +226 -0
- package/src/content/docs/de/ide.mdx +48 -0
- package/src/content/docs/de/index.mdx +356 -0
- package/src/content/docs/de/keybinds.mdx +194 -0
- package/src/content/docs/de/lsp.mdx +207 -0
- package/src/content/docs/de/mcp-servers.mdx +511 -0
- package/src/content/docs/de/models.mdx +223 -0
- package/src/content/docs/de/network.mdx +57 -0
- package/src/content/docs/de/permissions.mdx +235 -0
- package/src/content/docs/de/plugins.mdx +384 -0
- package/src/content/docs/de/providers.mdx +1987 -0
- package/src/content/docs/de/rules.mdx +190 -0
- package/src/content/docs/de/sdk.mdx +465 -0
- package/src/content/docs/de/server.mdx +291 -0
- package/src/content/docs/de/share.mdx +130 -0
- package/src/content/docs/de/skills.mdx +222 -0
- package/src/content/docs/de/themes.mdx +372 -0
- package/src/content/docs/de/tools.mdx +352 -0
- package/src/content/docs/de/troubleshooting.mdx +300 -0
- package/src/content/docs/de/tui.mdx +429 -0
- package/src/content/docs/de/web.mdx +142 -0
- package/src/content/docs/de/windows-wsl.mdx +115 -0
- package/src/content/docs/de/zen.mdx +327 -0
- package/src/content/docs/ecosystem.mdx +83 -0
- package/src/content/docs/enterprise.mdx +169 -0
- package/src/content/docs/es/acp.mdx +156 -0
- package/src/content/docs/es/agents.mdx +755 -0
- package/src/content/docs/es/cli.mdx +616 -0
- package/src/content/docs/es/commands.mdx +323 -0
- package/src/content/docs/es/config.mdx +685 -0
- package/src/content/docs/es/custom-tools.mdx +196 -0
- package/src/content/docs/es/ecosystem.mdx +78 -0
- package/src/content/docs/es/enterprise.mdx +170 -0
- package/src/content/docs/es/formatters.mdx +131 -0
- package/src/content/docs/es/github.mdx +321 -0
- package/src/content/docs/es/gitlab.mdx +195 -0
- package/src/content/docs/es/go.mdx +238 -0
- package/src/content/docs/es/ide.mdx +48 -0
- package/src/content/docs/es/index.mdx +345 -0
- package/src/content/docs/es/keybinds.mdx +194 -0
- package/src/content/docs/es/lsp.mdx +208 -0
- package/src/content/docs/es/mcp-servers.mdx +511 -0
- package/src/content/docs/es/models.mdx +223 -0
- package/src/content/docs/es/network.mdx +57 -0
- package/src/content/docs/es/permissions.mdx +235 -0
- package/src/content/docs/es/plugins.mdx +389 -0
- package/src/content/docs/es/providers.mdx +1989 -0
- package/src/content/docs/es/rules.mdx +180 -0
- package/src/content/docs/es/sdk.mdx +463 -0
- package/src/content/docs/es/server.mdx +287 -0
- package/src/content/docs/es/share.mdx +128 -0
- package/src/content/docs/es/skills.mdx +222 -0
- package/src/content/docs/es/themes.mdx +369 -0
- package/src/content/docs/es/tools.mdx +341 -0
- package/src/content/docs/es/troubleshooting.mdx +300 -0
- package/src/content/docs/es/tui.mdx +429 -0
- package/src/content/docs/es/web.mdx +142 -0
- package/src/content/docs/es/windows-wsl.mdx +113 -0
- package/src/content/docs/es/zen.mdx +345 -0
- package/src/content/docs/formatters.mdx +143 -0
- package/src/content/docs/fr/acp.mdx +156 -0
- package/src/content/docs/fr/agents.mdx +755 -0
- package/src/content/docs/fr/cli.mdx +617 -0
- package/src/content/docs/fr/commands.mdx +322 -0
- package/src/content/docs/fr/config.mdx +686 -0
- package/src/content/docs/fr/custom-tools.mdx +170 -0
- package/src/content/docs/fr/ecosystem.mdx +78 -0
- package/src/content/docs/fr/enterprise.mdx +165 -0
- package/src/content/docs/fr/formatters.mdx +131 -0
- package/src/content/docs/fr/github.mdx +322 -0
- package/src/content/docs/fr/gitlab.mdx +195 -0
- package/src/content/docs/fr/go.mdx +224 -0
- package/src/content/docs/fr/ide.mdx +48 -0
- package/src/content/docs/fr/index.mdx +344 -0
- package/src/content/docs/fr/keybinds.mdx +194 -0
- package/src/content/docs/fr/lsp.mdx +208 -0
- package/src/content/docs/fr/mcp-servers.mdx +511 -0
- package/src/content/docs/fr/models.mdx +222 -0
- package/src/content/docs/fr/network.mdx +57 -0
- package/src/content/docs/fr/permissions.mdx +235 -0
- package/src/content/docs/fr/plugins.mdx +384 -0
- package/src/content/docs/fr/providers.mdx +1996 -0
- package/src/content/docs/fr/rules.mdx +180 -0
- package/src/content/docs/fr/sdk.mdx +463 -0
- package/src/content/docs/fr/server.mdx +287 -0
- package/src/content/docs/fr/share.mdx +128 -0
- package/src/content/docs/fr/skills.mdx +222 -0
- package/src/content/docs/fr/themes.mdx +369 -0
- package/src/content/docs/fr/tools.mdx +341 -0
- package/src/content/docs/fr/troubleshooting.mdx +300 -0
- package/src/content/docs/fr/tui.mdx +429 -0
- package/src/content/docs/fr/web.mdx +142 -0
- package/src/content/docs/fr/windows-wsl.mdx +113 -0
- package/src/content/docs/fr/zen.mdx +327 -0
- package/src/content/docs/github.mdx +321 -0
- package/src/content/docs/gitlab.mdx +195 -0
- package/src/content/docs/go.mdx +238 -0
- package/src/content/docs/ide.mdx +48 -0
- package/src/content/docs/index.mdx +360 -0
- package/src/content/docs/it/acp.mdx +155 -0
- package/src/content/docs/it/agents.mdx +753 -0
- package/src/content/docs/it/cli.mdx +617 -0
- package/src/content/docs/it/commands.mdx +322 -0
- package/src/content/docs/it/config.mdx +685 -0
- package/src/content/docs/it/custom-tools.mdx +196 -0
- package/src/content/docs/it/ecosystem.mdx +78 -0
- package/src/content/docs/it/enterprise.mdx +165 -0
- package/src/content/docs/it/formatters.mdx +132 -0
- package/src/content/docs/it/github.mdx +321 -0
- package/src/content/docs/it/gitlab.mdx +195 -0
- package/src/content/docs/it/go.mdx +236 -0
- package/src/content/docs/it/ide.mdx +48 -0
- package/src/content/docs/it/index.mdx +344 -0
- package/src/content/docs/it/keybinds.mdx +194 -0
- package/src/content/docs/it/lsp.mdx +208 -0
- package/src/content/docs/it/mcp-servers.mdx +511 -0
- package/src/content/docs/it/models.mdx +222 -0
- package/src/content/docs/it/network.mdx +57 -0
- package/src/content/docs/it/permissions.mdx +235 -0
- package/src/content/docs/it/plugins.mdx +388 -0
- package/src/content/docs/it/providers.mdx +1964 -0
- package/src/content/docs/it/rules.mdx +180 -0
- package/src/content/docs/it/sdk.mdx +463 -0
- package/src/content/docs/it/server.mdx +284 -0
- package/src/content/docs/it/share.mdx +127 -0
- package/src/content/docs/it/skills.mdx +222 -0
- package/src/content/docs/it/themes.mdx +369 -0
- package/src/content/docs/it/tools.mdx +341 -0
- package/src/content/docs/it/troubleshooting.mdx +299 -0
- package/src/content/docs/it/tui.mdx +426 -0
- package/src/content/docs/it/web.mdx +142 -0
- package/src/content/docs/it/windows-wsl.mdx +113 -0
- package/src/content/docs/it/zen.mdx +345 -0
- package/src/content/docs/ja/acp.mdx +155 -0
- package/src/content/docs/ja/agents.mdx +751 -0
- package/src/content/docs/ja/cli.mdx +616 -0
- package/src/content/docs/ja/commands.mdx +322 -0
- package/src/content/docs/ja/config.mdx +684 -0
- package/src/content/docs/ja/custom-tools.mdx +196 -0
- package/src/content/docs/ja/ecosystem.mdx +78 -0
- package/src/content/docs/ja/enterprise.mdx +166 -0
- package/src/content/docs/ja/formatters.mdx +132 -0
- package/src/content/docs/ja/github.mdx +322 -0
- package/src/content/docs/ja/gitlab.mdx +195 -0
- package/src/content/docs/ja/go.mdx +224 -0
- package/src/content/docs/ja/ide.mdx +48 -0
- package/src/content/docs/ja/index.mdx +350 -0
- package/src/content/docs/ja/keybinds.mdx +194 -0
- package/src/content/docs/ja/lsp.mdx +208 -0
- package/src/content/docs/ja/mcp-servers.mdx +511 -0
- package/src/content/docs/ja/models.mdx +221 -0
- package/src/content/docs/ja/network.mdx +55 -0
- package/src/content/docs/ja/permissions.mdx +282 -0
- package/src/content/docs/ja/plugins.mdx +461 -0
- package/src/content/docs/ja/providers.mdx +1998 -0
- package/src/content/docs/ja/rules.mdx +179 -0
- package/src/content/docs/ja/sdk.mdx +463 -0
- package/src/content/docs/ja/server.mdx +282 -0
- package/src/content/docs/ja/share.mdx +128 -0
- package/src/content/docs/ja/skills.mdx +222 -0
- package/src/content/docs/ja/themes.mdx +667 -0
- package/src/content/docs/ja/tools.mdx +341 -0
- package/src/content/docs/ja/troubleshooting.mdx +300 -0
- package/src/content/docs/ja/tui.mdx +423 -0
- package/src/content/docs/ja/web.mdx +143 -0
- package/src/content/docs/ja/windows-wsl.mdx +116 -0
- package/src/content/docs/ja/zen.mdx +327 -0
- package/src/content/docs/keybinds.mdx +299 -0
- package/src/content/docs/ko/acp.mdx +156 -0
- package/src/content/docs/ko/agents.mdx +754 -0
- package/src/content/docs/ko/cli.mdx +616 -0
- package/src/content/docs/ko/commands.mdx +323 -0
- package/src/content/docs/ko/config.mdx +685 -0
- package/src/content/docs/ko/custom-tools.mdx +196 -0
- package/src/content/docs/ko/ecosystem.mdx +78 -0
- package/src/content/docs/ko/enterprise.mdx +165 -0
- package/src/content/docs/ko/formatters.mdx +132 -0
- package/src/content/docs/ko/github.mdx +321 -0
- package/src/content/docs/ko/gitlab.mdx +195 -0
- package/src/content/docs/ko/go.mdx +224 -0
- package/src/content/docs/ko/ide.mdx +48 -0
- package/src/content/docs/ko/index.mdx +344 -0
- package/src/content/docs/ko/keybinds.mdx +194 -0
- package/src/content/docs/ko/lsp.mdx +208 -0
- package/src/content/docs/ko/mcp-servers.mdx +511 -0
- package/src/content/docs/ko/models.mdx +223 -0
- package/src/content/docs/ko/network.mdx +57 -0
- package/src/content/docs/ko/permissions.mdx +235 -0
- package/src/content/docs/ko/plugins.mdx +388 -0
- package/src/content/docs/ko/providers.mdx +1984 -0
- package/src/content/docs/ko/rules.mdx +179 -0
- package/src/content/docs/ko/sdk.mdx +463 -0
- package/src/content/docs/ko/server.mdx +287 -0
- package/src/content/docs/ko/share.mdx +128 -0
- package/src/content/docs/ko/skills.mdx +222 -0
- package/src/content/docs/ko/themes.mdx +369 -0
- package/src/content/docs/ko/tools.mdx +341 -0
- package/src/content/docs/ko/troubleshooting.mdx +303 -0
- package/src/content/docs/ko/tui.mdx +425 -0
- package/src/content/docs/ko/web.mdx +142 -0
- package/src/content/docs/ko/windows-wsl.mdx +119 -0
- package/src/content/docs/ko/zen.mdx +327 -0
- package/src/content/docs/lsp.mdx +214 -0
- package/src/content/docs/mcp-servers.mdx +512 -0
- package/src/content/docs/models.mdx +223 -0
- package/src/content/docs/nb/acp.mdx +156 -0
- package/src/content/docs/nb/agents.mdx +754 -0
- package/src/content/docs/nb/cli.mdx +617 -0
- package/src/content/docs/nb/commands.mdx +323 -0
- package/src/content/docs/nb/config.mdx +688 -0
- package/src/content/docs/nb/custom-tools.mdx +196 -0
- package/src/content/docs/nb/ecosystem.mdx +78 -0
- package/src/content/docs/nb/enterprise.mdx +170 -0
- package/src/content/docs/nb/formatters.mdx +131 -0
- package/src/content/docs/nb/github.mdx +325 -0
- package/src/content/docs/nb/gitlab.mdx +195 -0
- package/src/content/docs/nb/go.mdx +238 -0
- package/src/content/docs/nb/ide.mdx +48 -0
- package/src/content/docs/nb/index.mdx +359 -0
- package/src/content/docs/nb/keybinds.mdx +194 -0
- package/src/content/docs/nb/lsp.mdx +208 -0
- package/src/content/docs/nb/mcp-servers.mdx +624 -0
- package/src/content/docs/nb/models.mdx +223 -0
- package/src/content/docs/nb/network.mdx +57 -0
- package/src/content/docs/nb/permissions.mdx +235 -0
- package/src/content/docs/nb/plugins.mdx +389 -0
- package/src/content/docs/nb/providers.mdx +1956 -0
- package/src/content/docs/nb/rules.mdx +180 -0
- package/src/content/docs/nb/sdk.mdx +463 -0
- package/src/content/docs/nb/server.mdx +287 -0
- package/src/content/docs/nb/share.mdx +128 -0
- package/src/content/docs/nb/skills.mdx +222 -0
- package/src/content/docs/nb/themes.mdx +369 -0
- package/src/content/docs/nb/tools.mdx +341 -0
- package/src/content/docs/nb/troubleshooting.mdx +225 -0
- package/src/content/docs/nb/tui.mdx +429 -0
- package/src/content/docs/nb/web.mdx +105 -0
- package/src/content/docs/nb/windows-wsl.mdx +113 -0
- package/src/content/docs/nb/zen.mdx +345 -0
- package/src/content/docs/network.mdx +57 -0
- package/src/content/docs/permissions.mdx +256 -0
- package/src/content/docs/pl/acp.mdx +158 -0
- package/src/content/docs/pl/agents.mdx +754 -0
- package/src/content/docs/pl/cli.mdx +617 -0
- package/src/content/docs/pl/commands.mdx +323 -0
- package/src/content/docs/pl/config.mdx +680 -0
- package/src/content/docs/pl/custom-tools.mdx +196 -0
- package/src/content/docs/pl/ecosystem.mdx +78 -0
- package/src/content/docs/pl/enterprise.mdx +170 -0
- package/src/content/docs/pl/formatters.mdx +131 -0
- package/src/content/docs/pl/github.mdx +321 -0
- package/src/content/docs/pl/gitlab.mdx +195 -0
- package/src/content/docs/pl/go.mdx +230 -0
- package/src/content/docs/pl/ide.mdx +48 -0
- package/src/content/docs/pl/index.mdx +347 -0
- package/src/content/docs/pl/keybinds.mdx +194 -0
- package/src/content/docs/pl/lsp.mdx +208 -0
- package/src/content/docs/pl/mcp-servers.mdx +511 -0
- package/src/content/docs/pl/models.mdx +223 -0
- package/src/content/docs/pl/network.mdx +57 -0
- package/src/content/docs/pl/permissions.mdx +235 -0
- package/src/content/docs/pl/plugins.mdx +385 -0
- package/src/content/docs/pl/providers.mdx +1986 -0
- package/src/content/docs/pl/rules.mdx +180 -0
- package/src/content/docs/pl/sdk.mdx +463 -0
- package/src/content/docs/pl/server.mdx +287 -0
- package/src/content/docs/pl/share.mdx +128 -0
- package/src/content/docs/pl/skills.mdx +222 -0
- package/src/content/docs/pl/themes.mdx +369 -0
- package/src/content/docs/pl/tools.mdx +341 -0
- package/src/content/docs/pl/troubleshooting.mdx +300 -0
- package/src/content/docs/pl/tui.mdx +429 -0
- package/src/content/docs/pl/web.mdx +142 -0
- package/src/content/docs/pl/windows-wsl.mdx +113 -0
- package/src/content/docs/pl/zen.mdx +344 -0
- package/src/content/docs/plugins.mdx +389 -0
- package/src/content/docs/policies.mdx +137 -0
- package/src/content/docs/providers.mdx +2501 -0
- package/src/content/docs/pt-br/acp.mdx +156 -0
- package/src/content/docs/pt-br/agents.mdx +755 -0
- package/src/content/docs/pt-br/cli.mdx +616 -0
- package/src/content/docs/pt-br/commands.mdx +322 -0
- package/src/content/docs/pt-br/config.mdx +687 -0
- package/src/content/docs/pt-br/custom-tools.mdx +196 -0
- package/src/content/docs/pt-br/ecosystem.mdx +78 -0
- package/src/content/docs/pt-br/enterprise.mdx +166 -0
- package/src/content/docs/pt-br/formatters.mdx +131 -0
- package/src/content/docs/pt-br/github.mdx +321 -0
- package/src/content/docs/pt-br/gitlab.mdx +195 -0
- package/src/content/docs/pt-br/go.mdx +238 -0
- package/src/content/docs/pt-br/ide.mdx +48 -0
- package/src/content/docs/pt-br/index.mdx +344 -0
- package/src/content/docs/pt-br/keybinds.mdx +194 -0
- package/src/content/docs/pt-br/lsp.mdx +208 -0
- package/src/content/docs/pt-br/mcp-servers.mdx +511 -0
- package/src/content/docs/pt-br/models.mdx +222 -0
- package/src/content/docs/pt-br/network.mdx +57 -0
- package/src/content/docs/pt-br/permissions.mdx +235 -0
- package/src/content/docs/pt-br/plugins.mdx +388 -0
- package/src/content/docs/pt-br/providers.mdx +1989 -0
- package/src/content/docs/pt-br/rules.mdx +180 -0
- package/src/content/docs/pt-br/sdk.mdx +463 -0
- package/src/content/docs/pt-br/server.mdx +284 -0
- package/src/content/docs/pt-br/share.mdx +127 -0
- package/src/content/docs/pt-br/skills.mdx +222 -0
- package/src/content/docs/pt-br/themes.mdx +369 -0
- package/src/content/docs/pt-br/tools.mdx +341 -0
- package/src/content/docs/pt-br/troubleshooting.mdx +299 -0
- package/src/content/docs/pt-br/tui.mdx +426 -0
- package/src/content/docs/pt-br/web.mdx +142 -0
- package/src/content/docs/pt-br/windows-wsl.mdx +113 -0
- package/src/content/docs/pt-br/zen.mdx +327 -0
- package/src/content/docs/references.mdx +157 -0
- package/src/content/docs/ru/acp.mdx +156 -0
- package/src/content/docs/ru/agents.mdx +754 -0
- package/src/content/docs/ru/cli.mdx +617 -0
- package/src/content/docs/ru/commands.mdx +323 -0
- package/src/content/docs/ru/config.mdx +685 -0
- package/src/content/docs/ru/custom-tools.mdx +170 -0
- package/src/content/docs/ru/ecosystem.mdx +78 -0
- package/src/content/docs/ru/enterprise.mdx +168 -0
- package/src/content/docs/ru/formatters.mdx +119 -0
- package/src/content/docs/ru/github.mdx +321 -0
- package/src/content/docs/ru/gitlab.mdx +195 -0
- package/src/content/docs/ru/go.mdx +238 -0
- package/src/content/docs/ru/ide.mdx +48 -0
- package/src/content/docs/ru/index.mdx +356 -0
- package/src/content/docs/ru/keybinds.mdx +194 -0
- package/src/content/docs/ru/lsp.mdx +207 -0
- package/src/content/docs/ru/mcp-servers.mdx +511 -0
- package/src/content/docs/ru/models.mdx +223 -0
- package/src/content/docs/ru/network.mdx +57 -0
- package/src/content/docs/ru/permissions.mdx +235 -0
- package/src/content/docs/ru/plugins.mdx +385 -0
- package/src/content/docs/ru/providers.mdx +1987 -0
- package/src/content/docs/ru/rules.mdx +180 -0
- package/src/content/docs/ru/sdk.mdx +463 -0
- package/src/content/docs/ru/server.mdx +287 -0
- package/src/content/docs/ru/share.mdx +128 -0
- package/src/content/docs/ru/skills.mdx +222 -0
- package/src/content/docs/ru/themes.mdx +369 -0
- package/src/content/docs/ru/tools.mdx +341 -0
- package/src/content/docs/ru/troubleshooting.mdx +300 -0
- package/src/content/docs/ru/tui.mdx +429 -0
- package/src/content/docs/ru/web.mdx +142 -0
- package/src/content/docs/ru/windows-wsl.mdx +113 -0
- package/src/content/docs/ru/zen.mdx +345 -0
- package/src/content/docs/rules.mdx +188 -0
- package/src/content/docs/sdk.mdx +463 -0
- package/src/content/docs/server.mdx +287 -0
- package/src/content/docs/share.mdx +128 -0
- package/src/content/docs/skills.mdx +222 -0
- package/src/content/docs/th/acp.mdx +156 -0
- package/src/content/docs/th/agents.mdx +744 -0
- package/src/content/docs/th/cli.mdx +618 -0
- package/src/content/docs/th/commands.mdx +320 -0
- package/src/content/docs/th/config.mdx +690 -0
- package/src/content/docs/th/custom-tools.mdx +196 -0
- package/src/content/docs/th/ecosystem.mdx +78 -0
- package/src/content/docs/th/enterprise.mdx +170 -0
- package/src/content/docs/th/formatters.mdx +131 -0
- package/src/content/docs/th/github.mdx +321 -0
- package/src/content/docs/th/gitlab.mdx +195 -0
- package/src/content/docs/th/go.mdx +224 -0
- package/src/content/docs/th/ide.mdx +48 -0
- package/src/content/docs/th/index.mdx +360 -0
- package/src/content/docs/th/keybinds.mdx +194 -0
- package/src/content/docs/th/lsp.mdx +208 -0
- package/src/content/docs/th/mcp-servers.mdx +511 -0
- package/src/content/docs/th/models.mdx +223 -0
- package/src/content/docs/th/network.mdx +57 -0
- package/src/content/docs/th/permissions.mdx +235 -0
- package/src/content/docs/th/plugins.mdx +389 -0
- package/src/content/docs/th/providers.mdx +2532 -0
- package/src/content/docs/th/rules.mdx +180 -0
- package/src/content/docs/th/sdk.mdx +463 -0
- package/src/content/docs/th/server.mdx +287 -0
- package/src/content/docs/th/share.mdx +128 -0
- package/src/content/docs/th/skills.mdx +222 -0
- package/src/content/docs/th/themes.mdx +369 -0
- package/src/content/docs/th/tools.mdx +341 -0
- package/src/content/docs/th/troubleshooting.mdx +300 -0
- package/src/content/docs/th/tui.mdx +429 -0
- package/src/content/docs/th/web.mdx +142 -0
- package/src/content/docs/th/windows-wsl.mdx +113 -0
- package/src/content/docs/th/zen.mdx +329 -0
- package/src/content/docs/themes.mdx +369 -0
- package/src/content/docs/tools.mdx +345 -0
- package/src/content/docs/tr/acp.mdx +156 -0
- package/src/content/docs/tr/agents.mdx +754 -0
- package/src/content/docs/tr/cli.mdx +617 -0
- package/src/content/docs/tr/commands.mdx +323 -0
- package/src/content/docs/tr/config.mdx +687 -0
- package/src/content/docs/tr/custom-tools.mdx +196 -0
- package/src/content/docs/tr/ecosystem.mdx +78 -0
- package/src/content/docs/tr/enterprise.mdx +170 -0
- package/src/content/docs/tr/formatters.mdx +131 -0
- package/src/content/docs/tr/github.mdx +321 -0
- package/src/content/docs/tr/gitlab.mdx +195 -0
- package/src/content/docs/tr/go.mdx +224 -0
- package/src/content/docs/tr/ide.mdx +48 -0
- package/src/content/docs/tr/index.mdx +347 -0
- package/src/content/docs/tr/keybinds.mdx +194 -0
- package/src/content/docs/tr/lsp.mdx +208 -0
- package/src/content/docs/tr/mcp-servers.mdx +511 -0
- package/src/content/docs/tr/models.mdx +223 -0
- package/src/content/docs/tr/network.mdx +57 -0
- package/src/content/docs/tr/permissions.mdx +235 -0
- package/src/content/docs/tr/plugins.mdx +388 -0
- package/src/content/docs/tr/providers.mdx +1988 -0
- package/src/content/docs/tr/rules.mdx +180 -0
- package/src/content/docs/tr/sdk.mdx +463 -0
- package/src/content/docs/tr/server.mdx +285 -0
- package/src/content/docs/tr/share.mdx +127 -0
- package/src/content/docs/tr/skills.mdx +222 -0
- package/src/content/docs/tr/themes.mdx +369 -0
- package/src/content/docs/tr/tools.mdx +341 -0
- package/src/content/docs/tr/troubleshooting.mdx +299 -0
- package/src/content/docs/tr/tui.mdx +427 -0
- package/src/content/docs/tr/web.mdx +142 -0
- package/src/content/docs/tr/windows-wsl.mdx +113 -0
- package/src/content/docs/tr/zen.mdx +327 -0
- package/src/content/docs/troubleshooting.mdx +314 -0
- package/src/content/docs/tui.mdx +427 -0
- package/src/content/docs/web.mdx +142 -0
- package/src/content/docs/windows-wsl.mdx +112 -0
- package/src/content/docs/zen.mdx +345 -0
- package/src/content/docs/zh-cn/acp.mdx +156 -0
- package/src/content/docs/zh-cn/agents.mdx +754 -0
- package/src/content/docs/zh-cn/cli.mdx +617 -0
- package/src/content/docs/zh-cn/commands.mdx +322 -0
- package/src/content/docs/zh-cn/config.mdx +683 -0
- package/src/content/docs/zh-cn/custom-tools.mdx +196 -0
- package/src/content/docs/zh-cn/ecosystem.mdx +78 -0
- package/src/content/docs/zh-cn/enterprise.mdx +165 -0
- package/src/content/docs/zh-cn/formatters.mdx +132 -0
- package/src/content/docs/zh-cn/github.mdx +321 -0
- package/src/content/docs/zh-cn/gitlab.mdx +194 -0
- package/src/content/docs/zh-cn/go.mdx +224 -0
- package/src/content/docs/zh-cn/ide.mdx +48 -0
- package/src/content/docs/zh-cn/index.mdx +343 -0
- package/src/content/docs/zh-cn/keybinds.mdx +194 -0
- package/src/content/docs/zh-cn/lsp.mdx +208 -0
- package/src/content/docs/zh-cn/mcp-servers.mdx +511 -0
- package/src/content/docs/zh-cn/models.mdx +222 -0
- package/src/content/docs/zh-cn/network.mdx +57 -0
- package/src/content/docs/zh-cn/permissions.mdx +235 -0
- package/src/content/docs/zh-cn/plugins.mdx +388 -0
- package/src/content/docs/zh-cn/providers.mdx +1949 -0
- package/src/content/docs/zh-cn/rules.mdx +180 -0
- package/src/content/docs/zh-cn/sdk.mdx +463 -0
- package/src/content/docs/zh-cn/server.mdx +284 -0
- package/src/content/docs/zh-cn/share.mdx +127 -0
- package/src/content/docs/zh-cn/skills.mdx +222 -0
- package/src/content/docs/zh-cn/themes.mdx +369 -0
- package/src/content/docs/zh-cn/tools.mdx +341 -0
- package/src/content/docs/zh-cn/troubleshooting.mdx +299 -0
- package/src/content/docs/zh-cn/tui.mdx +426 -0
- package/src/content/docs/zh-cn/web.mdx +142 -0
- package/src/content/docs/zh-cn/windows-wsl.mdx +112 -0
- package/src/content/docs/zh-cn/zen.mdx +327 -0
- package/src/content/docs/zh-tw/acp.mdx +156 -0
- package/src/content/docs/zh-tw/agents.mdx +754 -0
- package/src/content/docs/zh-tw/cli.mdx +617 -0
- package/src/content/docs/zh-tw/commands.mdx +322 -0
- package/src/content/docs/zh-tw/config.mdx +687 -0
- package/src/content/docs/zh-tw/custom-tools.mdx +196 -0
- package/src/content/docs/zh-tw/ecosystem.mdx +78 -0
- package/src/content/docs/zh-tw/enterprise.mdx +165 -0
- package/src/content/docs/zh-tw/formatters.mdx +132 -0
- package/src/content/docs/zh-tw/github.mdx +321 -0
- package/src/content/docs/zh-tw/gitlab.mdx +194 -0
- package/src/content/docs/zh-tw/go.mdx +224 -0
- package/src/content/docs/zh-tw/ide.mdx +48 -0
- package/src/content/docs/zh-tw/index.mdx +343 -0
- package/src/content/docs/zh-tw/keybinds.mdx +194 -0
- package/src/content/docs/zh-tw/lsp.mdx +208 -0
- package/src/content/docs/zh-tw/mcp-servers.mdx +511 -0
- package/src/content/docs/zh-tw/models.mdx +222 -0
- package/src/content/docs/zh-tw/network.mdx +57 -0
- package/src/content/docs/zh-tw/permissions.mdx +235 -0
- package/src/content/docs/zh-tw/plugins.mdx +388 -0
- package/src/content/docs/zh-tw/providers.mdx +1970 -0
- package/src/content/docs/zh-tw/rules.mdx +180 -0
- package/src/content/docs/zh-tw/sdk.mdx +463 -0
- package/src/content/docs/zh-tw/server.mdx +284 -0
- package/src/content/docs/zh-tw/share.mdx +127 -0
- package/src/content/docs/zh-tw/skills.mdx +222 -0
- package/src/content/docs/zh-tw/themes.mdx +369 -0
- package/src/content/docs/zh-tw/tools.mdx +341 -0
- package/src/content/docs/zh-tw/troubleshooting.mdx +299 -0
- package/src/content/docs/zh-tw/tui.mdx +426 -0
- package/src/content/docs/zh-tw/web.mdx +142 -0
- package/src/content/docs/zh-tw/windows-wsl.mdx +112 -0
- package/src/content/docs/zh-tw/zen.mdx +333 -0
- package/src/content/i18n/ar.json +75 -0
- package/src/content/i18n/bs.json +75 -0
- package/src/content/i18n/da.json +75 -0
- package/src/content/i18n/de.json +75 -0
- package/src/content/i18n/en.json +75 -0
- package/src/content/i18n/es.json +75 -0
- package/src/content/i18n/fr.json +75 -0
- package/src/content/i18n/it.json +75 -0
- package/src/content/i18n/ja.json +75 -0
- package/src/content/i18n/ko.json +75 -0
- package/src/content/i18n/nb.json +75 -0
- package/src/content/i18n/pl.json +75 -0
- package/src/content/i18n/pt-BR.json +75 -0
- package/src/content/i18n/ru.json +75 -0
- package/src/content/i18n/th.json +75 -0
- package/src/content/i18n/tr.json +75 -0
- package/src/content/i18n/zh-CN.json +75 -0
- package/src/content/i18n/zh-TW.json +75 -0
- package/src/content.config.ts +16 -0
- package/src/i18n/locales.ts +117 -0
- package/src/middleware.ts +94 -0
- package/src/pages/[...slug].md.ts +34 -0
- package/src/pages/s/[id].astro +164 -0
- package/src/styles/custom.css +405 -0
- package/src/types/lang-map.d.ts +27 -0
- package/src/types/starlight-virtual.d.ts +14 -0
- package/sst-env.d.ts +10 -0
- 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>—</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>—</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>—</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>—</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>—</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
|
+
}
|