most-box 0.3.7 → 0.3.9

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 (99) hide show
  1. package/README.md +12 -12
  2. package/electron/main.js +1 -1
  3. package/out/about/index.html +6 -5
  4. package/out/admin/index.html +0 -0
  5. package/out/app/index.html +0 -0
  6. package/out/assets/AccountMenu-BpUGPUSa.js +1 -0
  7. package/out/assets/{AppShell-CKP_dglR.js → AppShell-kfQyRhZy.js} +1 -1
  8. package/out/assets/{AppTop-C03PsDr_.js → AppTop-DydClKUv.js} +1 -1
  9. package/out/assets/{CopyButton-ClwBN6Iy.js → CopyButton-BN_vYKM8.js} +1 -1
  10. package/out/assets/{MarketingHeader-ChTIIzXG.js → MarketingHeader-B0jpxRYu.js} +1 -1
  11. package/out/assets/MarketingLayout-D42kTRyf.js +1 -0
  12. package/out/assets/{MilkdownEditor-X9MUH_0q.js → MilkdownEditor-B9vfoUP9.js} +1 -1
  13. package/out/assets/{OpenSidebarButton-CXBAjjCE.js → OpenSidebarButton-BxKh_O5b.js} +1 -1
  14. package/out/assets/arrow-right-DcTPIyLV.js +1 -0
  15. package/out/assets/{arrow-up-down-DvLSz6Ma.js → arrow-up-down-gcWLrYup.js} +1 -1
  16. package/out/assets/{channelApi-C5eHetoJ.js → channelApi-DA2GY-k4.js} +1 -1
  17. package/out/assets/{chatJoinInvite-7tuD-STm.js → chatJoinInvite-Cwot1ykh.js} +1 -1
  18. package/out/assets/{circle-alert-DXVkx8p8.js → circle-alert-Dg9cBJgj.js} +1 -1
  19. package/out/assets/{copy-OwXDsstV.js → copy-BofKiKH_.js} +1 -1
  20. package/out/assets/{download-Cy2BlfKM.js → download-nQ9X-v0q.js} +1 -1
  21. package/out/assets/{downloadValidation-Dd43i9_9.js → downloadValidation-C0PecvKC.js} +1 -1
  22. package/out/assets/{external-link-D_AQSgxW.js → external-link-LcGMVTLE.js} +1 -1
  23. package/out/assets/{file-text-zvTER2mN.js → file-text-f1ij7Al1.js} +1 -1
  24. package/out/assets/{fingerprint-pattern-BT73ASEB.js → fingerprint-pattern-Z6NfIcxC.js} +1 -1
  25. package/out/assets/{folder-6pYYnS2-.js → folder-DGTODlX0.js} +1 -1
  26. package/out/assets/{folder-open-DOJ4bB58.js → folder-open-BKTeAP5z.js} +1 -1
  27. package/out/assets/{gamepad-2-BYqNgCQr.js → gamepad-2-q3ssU_CE.js} +1 -1
  28. package/out/assets/{hard-drive-DL1KJHmG.js → hard-drive-CMNAmPI5.js} +1 -1
  29. package/out/assets/i18n-BPfshhQc.js +1 -0
  30. package/out/assets/{index-DJzLHA0V.js → index-AZPpawN1.js} +7 -6
  31. package/out/assets/index-BP12tZtg.css +1 -0
  32. package/out/assets/{index.lazy-DA98XQ0Q.js → index.lazy-1oSrUtEc.js} +1 -1
  33. package/out/assets/index.lazy-B3eWk7i-.js +1 -0
  34. package/out/assets/{index.lazy-Cgrv1NmQ.js → index.lazy-BszFGhgk.js} +1 -1
  35. package/out/assets/{index.lazy-CTLlLPjy.js → index.lazy-CBPOnT1S.js} +1 -1
  36. package/out/assets/index.lazy-CJVtmxt4.js +1 -0
  37. package/out/assets/index.lazy-CJlJl0xA.js +1 -0
  38. package/out/assets/index.lazy-CUZLrlgS.js +2 -0
  39. package/out/assets/{index.lazy-BEDWJZPP.js → index.lazy-CV52vPw7.js} +1 -1
  40. package/out/assets/{index.lazy-C0L9TDqK.js → index.lazy-CfmDMCbY.js} +1 -1
  41. package/out/assets/{index.lazy-B8ud1tpC.js → index.lazy-ClcVulXE.js} +1 -1
  42. package/out/assets/index.lazy-DRAWcYlR.js +1 -0
  43. package/out/assets/index.lazy-Duk6GK1e.js +1 -0
  44. package/out/assets/{index.lazy-C8luNCxY.js → index.lazy-DxIMDfLH.js} +1 -1
  45. package/out/assets/{index.lazy-CT5TGyGl.js → index.lazy-e02LZDAI.js} +1 -1
  46. package/out/assets/{index.lazy-psYKmxdW.js → index.lazy-qvhZXEAD.js} +1 -1
  47. package/out/assets/{loader-C4pED_QP.js → loader-DAMqAKH7.js} +1 -1
  48. package/out/assets/{lock-yG7M7GkB.js → lock-Cigqt_VP.js} +1 -1
  49. package/out/assets/messages-square-Dr9v7Ilv.js +1 -0
  50. package/out/assets/{mp-cEQteKUC.js → mp-CFhRibX9.js} +1 -1
  51. package/out/assets/{music-Br2x8TKX.js → music-U7NZcQ6S.js} +1 -1
  52. package/out/assets/{notebook-pen-Bcd3MrtD.js → notebook-pen-CMRWy6ni.js} +1 -1
  53. package/out/assets/play-B6IGTGxm.js +1 -0
  54. package/out/assets/plus-C7wBmZvh.js +1 -0
  55. package/out/assets/{refresh-cw-CfkUlTK9.js → refresh-cw-Bxmcm8cn.js} +1 -1
  56. package/out/assets/{save-CfYzXcxH.js → save-CQyJvrmI.js} +1 -1
  57. package/out/assets/{saveLocalFile-DTgdBgO9.js → saveLocalFile-Dsoo9PmH.js} +1 -1
  58. package/out/assets/search-CURHlVZZ.js +1 -0
  59. package/out/assets/{send-Bie9hgHI.js → send-yxXCy-t8.js} +1 -1
  60. package/out/assets/{shield-check-2-h_eEXp.js → shield-check-Cq1PKT30.js} +1 -1
  61. package/out/assets/{smartphone-CrsocYJo.js → smartphone-D9j5h2Pg.js} +1 -1
  62. package/out/assets/{trash-2-B9gno5q6.js → trash-2-DQI0V0Rl.js} +1 -1
  63. package/out/assets/{triangle-alert-BhNtjKm2.js → triangle-alert-D8P4Ikwc.js} +1 -1
  64. package/out/assets/{upload-BmufnMFu.js → upload-PpzkqJnf.js} +1 -1
  65. package/out/assets/{useAppStore-DNhyhD20.js → useAppStore-Pjif7nCR.js} +1 -1
  66. package/out/assets/{useChannelMessages-BrqZa2SG.js → useChannelMessages-ncgJxjR8.js} +1 -1
  67. package/out/assets/{useGameRoom-B3wvUICl.js → useGameRoom-BHZNzWJt.js} +1 -1
  68. package/out/assets/{wallet-D6HZocla.js → wallet-Ts6jdQzi.js} +1 -1
  69. package/out/assets/{wifi-CILQyKk0.js → wifi-B1v_i_dr.js} +1 -1
  70. package/out/chat/index.html +0 -0
  71. package/out/chat/join/demo/index.html +0 -0
  72. package/out/chat/join/index.html +0 -0
  73. package/out/download/index.html +6 -5
  74. package/out/game/gandengyan/index.html +0 -0
  75. package/out/game/index.html +0 -0
  76. package/out/game/zhajinhua/index.html +0 -0
  77. package/out/index.html +6 -5
  78. package/out/note/index.html +0 -0
  79. package/out/ping/index.html +6 -5
  80. package/out/profile/index.html +0 -0
  81. package/out/web3/index.html +0 -0
  82. package/package.json +2 -1
  83. package/server/src/core/cid.js +1 -1
  84. package/server/src/core/zhajinhua.js +0 -88
  85. package/out/assets/AccountMenu-D_rcXDZr.js +0 -1
  86. package/out/assets/MarketingLayout-hkPAtieL.js +0 -1
  87. package/out/assets/arrow-right-BsHzC0ZL.js +0 -1
  88. package/out/assets/chatNoteDraft-DTy6In5R.js +0 -1
  89. package/out/assets/i18n-DKsg67mH.js +0 -1
  90. package/out/assets/index-FEwag7ej.css +0 -1
  91. package/out/assets/index.lazy-BQ_Dyw5C.js +0 -1
  92. package/out/assets/index.lazy-CnpeKB4C.js +0 -1
  93. package/out/assets/index.lazy-CwAN1t6l.js +0 -2
  94. package/out/assets/index.lazy-Cy249kq1.js +0 -1
  95. package/out/assets/index.lazy-DYhpVW5B.js +0 -3
  96. package/out/assets/index.lazy-b811JgFg.js +0 -1
  97. package/out/assets/message-square-CfApq8Ou.js +0 -1
  98. package/out/assets/play-DSHtNcOe.js +0 -1
  99. package/out/assets/search-DLBOUfny.js +0 -1
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
- # MostBox:聊天优先的 P2P 工具箱
1
+ # MostBox:平权入口的 P2P 工具箱
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/most-box)](https://npmjs.com/package/most-box)
4
4
  [![Node.js version](https://img.shields.io/badge/node-%3E%3D22.12-brightgreen)](https://nodejs.org)
5
5
  [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
6
 
7
7
  > 用户之间直接连接的 P2P 工具箱。
8
- > 从聊天开始,直连传文件,把重要内容整理成知识库。
8
+ > 文件、聊天、知识库、游戏和 Web3 是同等入口。
9
9
  >
10
- > Channel 承载消息、文件附件和知识库入口。文件分享仍使用 `most://` 链接、CID 校验和下载后做种;游戏和 Web3 工具箱保留独立能力,但暂不进入聊天详情主流程。
10
+ > 文件分享使用 `most://` 链接、CID 校验和下载后做种;聊天、知识库、游戏和 Web3 保持独立工具属性,不互相充当前置条件。
11
11
  >
12
12
  > CID 是 MostBox 的文件身份:发布、做种、发现、下载和校验都围绕 CID 进行。文件名和目录只用于展示与本地保存路径,不作为内容是否存在或是否可信的依据。
13
13
 
@@ -15,11 +15,11 @@
15
15
 
16
16
  | 入口 | 用户理解 | 协议边界 |
17
17
  | ---- | -------- | -------- |
18
- | 聊天 | 先创建聊天或房间,分享房间 ID 给朋友 | Channel + WebSocket + Corestore/Hypercore |
19
- | 附件 | 在聊天里直接传文件 | `most://` + CID 校验 + 下载后做种 |
20
- | 知识库 | 把重要消息和想法沉淀成 Markdown | `/note/` 保留现有本地笔记库能力 |
21
- | 游戏 | 独立游戏页面保留 | `game.*` channel 事件,不新增独立后端协议 |
22
- | Web3 | 密钥、钱包和地址工具 | 独立工具箱,不是聊天或文件分享前置条件 |
18
+ | 文件 | 发布文件、复制 `most://` 链接、下载校验并持续做种 | `most://` + CID 校验 + 下载后做种 |
19
+ | 聊天 | 创建聊天或房间,分享房间 ID 给朋友 | Channel + WebSocket + Corestore/Hypercore |
20
+ | 知识库 | 记录想法、整理 Markdown 内容和本地资料 | `/note/` 保留现有本地笔记库能力 |
21
+ | 游戏 | 独立游戏页面和房间 | `game.*` channel 事件,不新增独立后端协议 |
22
+ | Web3 | 密钥、钱包和地址工具 | 独立工具箱,不是聊天、文件、知识库或游戏前置条件 |
23
23
 
24
24
  ## 演示
25
25
 
@@ -31,11 +31,11 @@
31
31
 
32
32
  ### 方式一:桌面客户端(推荐)与 Android Alpha
33
33
 
34
- 前往 [MostBox 下载页](https://Most.Box/download) 下载客户端,支持 Windows、macOS、Linux 和 Android Alpha。桌面端内置本地 MostBox 节点,提供完整 P2P 文件分享、下载校验和持续做种能力,无需单独安装 Node.js;Android Alpha APK 支持前台聊天附件、下载校验和做种。
34
+ 前往 [MostBox 下载页](https://Most.Box/download) 下载客户端,支持 Windows、macOS、Linux 和 Android Alpha。桌面端内置本地 MostBox 节点,提供完整 P2P 文件分享、下载校验和持续做种能力,无需单独安装 Node.js;Android Alpha APK 目前聚焦前台 P2P 能力:收发消息、用 `most://` 附件传文件、下载校验并继续做种。
35
35
 
36
36
  ### Android Alpha
37
37
 
38
- 移动端优先按 Android 聊天优先完整种子 MVP 推进,参考 Keet/Pear 的“P2P 核心端 + 平台 UI 壳”分层:手机端先验证自己能加入聊天、收发消息、用 `most://` 附件传文件、下载校验并在前台继续做种,再扩展后台能力、iOS 和商店分发。当前内测验收范围见 [docs/mobile-android-alpha.md](docs/mobile-android-alpha.md)。
38
+ 移动端优先按 Android 前台完整种子 Alpha 推进,参考 Keet/Pear 的“P2P 核心端 + 平台 UI 壳”分层:手机端先验证自己能加入聊天、收发消息、用 `most://` 附件传文件、下载校验并在前台继续做种,再扩展后台能力、iOS 和商店分发。当前内测验收范围见 [docs/mobile-android-alpha.md](docs/mobile-android-alpha.md)。
39
39
 
40
40
  Android 工程入口以 `mobile/android/` 子包为准,仓库根目录不提供 `android:start`、`android:test` 或 `android:build` 包装脚本。本地开发、测试和打包命令统一在子包目录执行:
41
41
 
@@ -88,7 +88,7 @@ node server/index.js
88
88
  - `src/hooks/`、`src/lib/`、`src/stores/`、`src/styles/`:共享 hooks、工具、状态和样式。
89
89
  - `src/lib/i18n/messages/*.ts`:按域拆分的中英文文案 catalog,由 `src/lib/i18n/messages.ts` 聚合。
90
90
  - `server/`:daemon、HTTP API、P2P 引擎和协议测试。
91
- - `mobile/android/`:聊天优先 Android Alpha 应用和 Bare Worklet P2P 核心。
91
+ - `mobile/android/`:Android Alpha 应用和 Bare Worklet P2P 核心。
92
92
 
93
93
  ## 测试
94
94
 
@@ -130,7 +130,7 @@ npm test # 运行 Android 子包协议、Channel 和 IPC 测试
130
130
  ```yaml
131
131
  services:
132
132
  mostbox:
133
- image: ghcr.io/most-people/most-box:0.3.7
133
+ image: ghcr.io/most-people/most-box:0.3.9
134
134
  container_name: mostbox
135
135
  network_mode: host
136
136
  restart: unless-stopped
package/electron/main.js CHANGED
@@ -85,7 +85,7 @@ function getLocalAppUrl(routePath = '/') {
85
85
  }
86
86
 
87
87
  function getInitialWindowUrl() {
88
- const initialUrl = pendingDeepLinkUrl || getLocalAppUrl('/chat/')
88
+ const initialUrl = pendingDeepLinkUrl || getLocalAppUrl('/')
89
89
  pendingDeepLinkUrl = ''
90
90
  return initialUrl
91
91
  }
@@ -1,9 +1,10 @@
1
- <!DOCTYPE html><html lang="zh-CN" data-scroll-behavior="smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="stylesheet" href="/assets/index-FEwag7ej.css" data-precedence="default"/><title>关于 MOST PEOPLE</title><meta name="theme-color" content="#5e6ad2"/><meta name="description" content="MOST PEOPLE 是完全开源、以聊天为基础的 P2P 工具箱,包含文件分享、知识库、多人语音、游戏房间和可复用账户系统。"/><link rel="modulepreload" href="/assets/index-DJzLHA0V.js"/><link rel="modulepreload" href="/assets/jsx-runtime-Bt-cYkS5.js"/><link rel="modulepreload" href="/assets/useAppStore-DNhyhD20.js"/><link rel="modulepreload" href="/assets/useNavigate-DWlBD_-b.js"/><link rel="modulepreload" href="/assets/i18n-DKsg67mH.js"/><link rel="icon" href="/logo.svg" type="image/svg+xml"/><script>
1
+ <!DOCTYPE html><html lang="zh-CN" data-scroll-behavior="smooth"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><link rel="stylesheet" href="/assets/index-BP12tZtg.css" data-precedence="default"/><title>关于 MOST PEOPLE</title><meta name="theme-color" content="#5e6ad2"/><meta name="description" content="MOST PEOPLE 是完全开源的 P2P 工具箱,包含文件分享、聊天、知识库、游戏房间和可复用账户系统。"/><link rel="modulepreload" href="/assets/index-AZPpawN1.js"/><link rel="modulepreload" href="/assets/jsx-runtime-Bt-cYkS5.js"/><link rel="modulepreload" href="/assets/useAppStore-Pjif7nCR.js"/><link rel="modulepreload" href="/assets/useNavigate-DWlBD_-b.js"/><link rel="modulepreload" href="/assets/i18n-BPfshhQc.js"/><link rel="icon" href="/logo.svg" type="image/svg+xml"/><script>
2
2
  (function() {
3
3
  var theme = localStorage.getItem('theme');
4
- if (theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
5
- document.documentElement.setAttribute('data-theme', 'dark');
6
- }
4
+ var resolvedTheme = theme === 'dark' || (!theme && window.matchMedia('(prefers-color-scheme: dark)').matches)
5
+ ? 'dark'
6
+ : 'light';
7
+ document.documentElement.setAttribute('data-theme', resolvedTheme);
7
8
  var locale = localStorage.getItem('mostbox.locale');
8
9
  var supportedLocales = ['zh-CN', 'zh-TW', 'en'];
9
10
  var normalizedLocale = supportedLocales.indexOf(locale) >= 0 ? locale : 'zh-CN';
@@ -17,4 +18,4 @@
17
18
  window.onunhandledrejection = function(event) {
18
19
  console.error('[Unhandled Promise Rejection]', event.reason);
19
20
  };
20
- </script><!--$--><div class="mkt-layout"><header class="about-app-header"><div class="mkt-container"><a aria-label="MOST PEOPLE" title="MOST PEOPLE" href="/" class="sidebar-header sidebar-header-link"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg><h1>MOST PEOPLE</h1></a></div></header><main class="mkt-layout-main"><div class="about-page"><section class="about-hero"><div class="mkt-container"><p class="about-kicker">去中心化 P2P 工具箱</p><h1 class="about-title">关于 MOST PEOPLE</h1><p class="about-lede">MOST PEOPLE 以聊天为基础展开:邀请大家在房间里发消息、开多人语音、分享 most:// 文件、沉淀知识库和进入游戏。</p><code class="about-link-example" translate="no">most://&lt;cid&gt;?filename=...</code><ul class="about-summary"><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>CID 类似磁力链接/BT 种子的内容指纹:链接指向内容,下载后再校验是不是同一份文件。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>发布者和下载者都能做种,只要仍有人在线,文件就能继续传播。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>聊天是主入口,文件、知识库、游戏和工具箱都从对话里展开。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>MOST PEOPLE 完全开源,账户系统也欢迎其他项目接入。</span></li></ul></div></section><section class="about-section-band"><div class="mkt-container"><div class="about-section-grid"><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-fingerprint-pattern" aria-hidden="true"><path d="M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"></path><path d="M14 13.12c0 2.38 0 6.38-1 8.88"></path><path d="M17.29 21.02c.12-.6.43-2.3.5-3.02"></path><path d="M2 12a10 10 0 0 1 18-6"></path><path d="M2 16h.01"></path><path d="M21.8 16c.2-2 .131-5.354 0-6"></path><path d="M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"></path><path d="M8.65 22c.21-.66.45-1.32.57-2"></path><path d="M9 6.8a6 6 0 0 1 9 5.2v2"></path></svg></div><h2>CID 是内容指纹</h2><p>可以把 most:// 理解成 MOST PEOPLE 的 P2P 分享链接,思路接近磁力链接和 BT 种子:先按内容找文件,再从在线种子下载并校验。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>文件名只负责展示,不能代替 CID。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>CID 校验通过后才保存为可信文件。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>判断本地已有时必须能按 CID 读到内容。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network" aria-hidden="true"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg></div><h2>在线的人共同传播</h2><p>文件不是上传到一个中心服务器,而是在当前在线的完整副本之间传播。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>下载完成后默认成为新的种子。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>应用或 daemon 重启后会恢复做种记录。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>本机能看到正在做种的 CID、大小和 join 状态。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud-off" aria-hidden="true"><path d="M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057"></path><path d="M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78"></path><path d="m2 2 20 20"></path></svg></div><h2>不是云盘,也不是存储市场</h2><p>MOST PEOPLE 不承诺永久保存或离线可用;文件能不能下载,取决于是否还有在线种子。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>重要数据仍需自己保存。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>没有上链存储、订单、支付或质押流程。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>可用性来自当前在线的人,而不是云端托管。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square" aria-hidden="true"><path d="M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z"></path></svg></div><h2>以聊天为基础</h2><p>业务重点放在聊天:先建房间把人连起来,再从对话里展开文件、知识库、游戏和协作。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>房间适合私域聊天和小团队沟通。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持多人语音通话。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>文件附件会自然接入 most:// 分享流程。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-notebook-pen" aria-hidden="true"><path d="M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4"></path><path d="M2 6h4"></path><path d="M2 10h4"></path><path d="M2 14h4"></path><path d="M2 18h4"></path><path d="M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z"></path></svg></div><h2>知识库</h2><p>把聊天里的重要信息、想法和附件线索整理成 Markdown 笔记,减少信息散落。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持 Markdown 块编辑。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>聊天内容可以保存成笔记草稿。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>按需备份和恢复,不把它当成永久云盘。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gamepad2 lucide-gamepad-2" aria-hidden="true"><line x1="6" x2="10" y1="11" y2="11"></line><line x1="8" x2="8" y1="9" y2="13"></line><line x1="15" x2="15.01" y1="12" y2="12"></line><line x1="18" x2="18.01" y1="10" y2="10"></line><path d="M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"></path></svg></div><h2>游戏房间</h2><p>游戏复用同一套房间和频道系统,不需要单独理解另一套连接方式。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>游戏事件通过公共 Channel 同步。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>房间链接可以发给朋友一起加入。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>适合朋友间快速开局和测试玩法。</span></li></ul></article><article class="about-topic featured"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wallet" aria-hidden="true"><path d="M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1"></path><path d="M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4"></path></svg></div><h2>开源账户系统</h2><p>MOST PEOPLE 账户使用这套本地身份系统:完全开源,可复用,也方便其他项目接入。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>聊天、知识库和游戏身份共用这一套。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>其他项目可用它做本地登录、签名和数据隔离。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持密钥、地址和助记词导出。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>它不参与文件下载、校验或做种主流程。</span></li></ul></article></div><div class="about-actions"><a href="/chat/" class="btn btn-primary">进入聊天<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/download/" class="btn btn-secondary"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>下载客户端</a></div></div></section></div></main><footer class="mkt-footer"><div class="mkt-container"><div class="mkt-footer-inner"><div class="mkt-footer-links"><a class="active" href="/about/" data-status="active" aria-current="page">关于</a><a href="/ping/">网络</a><a href="https://github.com/most-people/most" target="_blank" rel="noopener noreferrer">GitHub</a></div><span class="mkt-footer-copy">© <!-- -->2026<!-- --> MOST PEOPLE · MIT License</span><span class="mkt-footer-build" translate="no">v<!-- -->0.3.7</span></div></div></footer></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-DJzLHA0V.js","/assets/jsx-runtime-Bt-cYkS5.js","/assets/useAppStore-DNhyhD20.js","/assets/useNavigate-DWlBD_-b.js","/assets/i18n-DKsg67mH.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-DJzLHA0V.js"}}],css:$R[8]=["/assets/index-FEwag7ej.css"]}}},matches:$R[9]=[$R[10]={i:"__root__",u:1783075449088,s:"success",ssr:!0},$R[11]={i:"aboutabout",u:1783075449091,s:"success",ssr:!0}],lastMatchId:"aboutabout"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-DJzLHA0V.js"></script></body></html>
21
+ </script><!--$--><div class="mkt-layout"><header class="about-app-header"><div class="mkt-container"><a aria-label="MOST PEOPLE" title="MOST PEOPLE" href="/" class="sidebar-header sidebar-header-link"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg><h1>MOST PEOPLE</h1></a></div></header><main class="mkt-layout-main"><div class="about-page"><section class="about-hero"><div class="mkt-container"><p class="about-kicker">去中心化 P2P 工具箱</p><h1 class="about-title">关于 MOST PEOPLE</h1><p class="about-lede">MOST PEOPLE 把文件、聊天、知识库、游戏和 Web3 放在同一层:邀请大家直接选择需要的工具,用 most:// 分享文件,用频道同步消息和游戏事件。</p><code class="about-link-example" translate="no">most://&lt;cid&gt;?filename=...</code><ul class="about-summary"><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>CID 类似磁力链接/BT 种子的内容指纹:链接指向内容,下载后再校验是不是同一份文件。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>发布者和下载者都能做种,只要仍有人在线,文件就能继续传播。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>文件、聊天、知识库、游戏和 Web3 是同等入口,彼此不作为前置条件。</span></li><li class="about-summary-item"><span class="about-summary-icon"><svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg></span><span>MOST PEOPLE 完全开源,账户系统也欢迎其他项目接入。</span></li></ul></div></section><section class="about-section-band"><div class="mkt-container"><div class="about-section-grid"><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-fingerprint-pattern" aria-hidden="true"><path d="M12 10a2 2 0 0 0-2 2c0 1.02-.1 2.51-.26 4"></path><path d="M14 13.12c0 2.38 0 6.38-1 8.88"></path><path d="M17.29 21.02c.12-.6.43-2.3.5-3.02"></path><path d="M2 12a10 10 0 0 1 18-6"></path><path d="M2 16h.01"></path><path d="M21.8 16c.2-2 .131-5.354 0-6"></path><path d="M5 19.5C5.5 18 6 15 6 12a6 6 0 0 1 .34-2"></path><path d="M8.65 22c.21-.66.45-1.32.57-2"></path><path d="M9 6.8a6 6 0 0 1 9 5.2v2"></path></svg></div><h2>CID 是内容指纹</h2><p>可以把 most:// 理解成 MOST PEOPLE 的 P2P 分享链接,思路接近磁力链接和 BT 种子:先按内容找文件,再从在线种子下载并校验。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>文件名只负责展示,不能代替 CID。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>CID 校验通过后才保存为可信文件。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>判断本地已有时必须能按 CID 读到内容。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-network" aria-hidden="true"><rect x="16" y="16" width="6" height="6" rx="1"></rect><rect x="2" y="16" width="6" height="6" rx="1"></rect><rect x="9" y="2" width="6" height="6" rx="1"></rect><path d="M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3"></path><path d="M12 12V8"></path></svg></div><h2>在线的人共同传播</h2><p>文件不是上传到一个中心服务器,而是在当前在线的完整副本之间传播。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>下载完成后默认成为新的种子。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>应用或 daemon 重启后会恢复做种记录。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>本机能看到正在做种的 CID、大小和 join 状态。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cloud-off" aria-hidden="true"><path d="M10.94 5.274A7 7 0 0 1 15.71 10h1.79a4.5 4.5 0 0 1 4.222 6.057"></path><path d="M18.796 18.81A4.5 4.5 0 0 1 17.5 19H9A7 7 0 0 1 5.79 5.78"></path><path d="m2 2 20 20"></path></svg></div><h2>不是云盘,也不是存储市场</h2><p>MOST PEOPLE 不承诺永久保存或离线可用;文件能不能下载,取决于是否还有在线种子。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>重要数据仍需自己保存。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>没有上链存储、订单、支付或质押流程。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>可用性来自当前在线的人,而不是云端托管。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-messages-square" aria-hidden="true"><path d="M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z"></path><path d="M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1"></path></svg></div><h2>聊天房间</h2><p>聊天是独立入口:先建房间把人连起来,适合私域消息、多人语音和文件附件。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>房间适合私域聊天和小团队沟通。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持多人语音通话。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>文件附件会自然接入 most:// 分享流程。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-notebook-pen" aria-hidden="true"><path d="M13.4 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-7.4"></path><path d="M2 6h4"></path><path d="M2 10h4"></path><path d="M2 14h4"></path><path d="M2 18h4"></path><path d="M21.378 5.626a1 1 0 1 0-3.004-3.004l-5.01 5.012a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506z"></path></svg></div><h2>知识库</h2><p>用 Markdown 笔记整理想法、资料和本地知识,减少信息散落。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持 Markdown 块编辑。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>笔记可以直接新建、编辑和整理。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>按需备份和恢复,不把它当成永久云盘。</span></li></ul></article><article class="about-topic"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-gamepad2 lucide-gamepad-2" aria-hidden="true"><line x1="6" x2="10" y1="11" y2="11"></line><line x1="8" x2="8" y1="9" y2="13"></line><line x1="15" x2="15.01" y1="12" y2="12"></line><line x1="18" x2="18.01" y1="10" y2="10"></line><path d="M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z"></path></svg></div><h2>游戏房间</h2><p>游戏是独立入口,继续复用公共 Channel 系统同步事件。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>游戏事件通过公共 Channel 同步。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>房间链接可以发给朋友一起加入。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>适合朋友间快速开局和测试玩法。</span></li></ul></article><article class="about-topic featured"><div class="about-topic-icon"><svg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-wallet" aria-hidden="true"><path d="M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1"></path><path d="M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4"></path></svg></div><h2>开源账户系统</h2><p>MOST PEOPLE 账户使用这套本地身份系统:完全开源,可复用,也方便其他项目接入。</p><ul><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>聊天、知识库、游戏和工具身份共用这一套。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>其他项目可用它做本地登录、签名和数据隔离。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>支持密钥、地址和助记词导出。</span></li><li><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg><span>它不参与文件下载、校验或做种主流程。</span></li></ul></article></div><div class="about-actions"><a href="/chat/" class="btn btn-primary">进入聊天<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a href="/download/" class="btn btn-secondary"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-download" aria-hidden="true"><path d="M12 15V3"></path><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><path d="m7 10 5 5 5-5"></path></svg>下载客户端</a></div></div></section></div></main><footer class="mkt-footer"><div class="mkt-container"><div class="mkt-footer-inner"><div class="mkt-footer-links"><a class="active" href="/about/" data-status="active" aria-current="page">关于</a><a href="/ping/">网络</a><a href="https://github.com/most-people/most" target="_blank" rel="noopener noreferrer">GitHub</a></div><span class="mkt-footer-copy">© <!-- -->2026<!-- --> MOST PEOPLE · MIT License</span><span class="mkt-footer-build" translate="no">v<!-- -->0.3.9</span></div></div></footer></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--><script class="$tsr" id="$tsr-stream-barrier">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-AZPpawN1.js","/assets/jsx-runtime-Bt-cYkS5.js","/assets/useAppStore-Pjif7nCR.js","/assets/useNavigate-DWlBD_-b.js","/assets/i18n-BPfshhQc.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-AZPpawN1.js"}}],css:$R[8]=["/assets/index-BP12tZtg.css"]}}},matches:$R[9]=[$R[10]={i:"__root__",u:1783416011622,s:"success",ssr:!0},$R[11]={i:"aboutabout",u:1783416011625,s:"success",ssr:!0}],lastMatchId:"aboutabout"})($R["tsr"]);$_TSR.e();document.currentScript.remove()</script><script type="module" async="" src="/assets/index-AZPpawN1.js"></script></body></html>
Binary file
Binary file
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{B as t,E as n,W as r,t as i}from"./useAppStore-Pjif7nCR.js";import{a,c as o,o as s}from"./i18n-BPfshhQc.js";import{S as c,g as l}from"./index-AZPpawN1.js";var u=t(`earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),d=t(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),f=t(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),p=t(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),m=t(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),h=t(`user`,[[`path`,{d:`M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2`,key:`975kel`}],[`circle`,{cx:`12`,cy:`7`,r:`4`,key:`17ys0d`}]]),g=e();function _(){let{t:e}=a(),t=i(e=>e.isDarkMode),n=i(e=>e.setIsDarkMode),r=e(`common.appearance.toggle`);return(0,g.jsx)(`button`,{type:`button`,className:`btn btn-icon`,title:r,"aria-label":r,"aria-pressed":t,onClick:()=>n(!t),children:t?(0,g.jsx)(m,{size:16}):(0,g.jsx)(p,{size:16})})}function v(e){return e===`sparkbit`?s.filter(e=>e!==`zh-CN`):[...s]}function y({theme:e}){let{locale:t,setLocale:n,t:r}=a(),i=r(`common.locale.choose`);return(0,g.jsx)(c,{ariaLabel:i,className:`language-toggle`,items:v(e).map(e=>({key:e,label:o[e],icon:e===t?(0,g.jsx)(d,{size:16}):(0,g.jsx)(`span`,{className:`language-toggle-placeholder`,"aria-hidden":`true`}),onSelect:()=>{e!==t&&n(e)}})),renderTrigger:t=>(0,g.jsx)(`button`,{...t,className:`btn btn-icon`,title:i,"aria-label":i,children:e===`sparkbit`?(0,g.jsx)(u,{size:16}):(0,g.jsx)(f,{size:16})})})}function b(){let{t:e}=a(),t=n(e=>e.identity),i=l(t?.address,t?.avatar),o=e(`nav.profile`);return(0,g.jsx)(r,{to:`/profile/`,className:`account-profile-link`,title:o,"aria-label":o,children:t?(0,g.jsx)(`img`,{className:`account-profile-link-avatar`,src:i,alt:``,"aria-hidden":`true`}):(0,g.jsx)(h,{size:18})})}export{d as a,h as i,y as n,_ as r,b as t};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r}from"./useAppStore-DNhyhD20.js";import{a as i}from"./i18n-DKsg67mH.js";import{n as a,r as o,t as s}from"./AccountMenu-D_rcXDZr.js";import"./index-DJzLHA0V.js";var c=r(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),l=t(e(),1);function u(e,t){return typeof t==`boolean`?t:typeof window<`u`&&`matchMedia`in window?window.matchMedia(e).matches:!1}function d(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){let[r,i]=(0,l.useState)(n?t:u(e));return(0,l.useEffect)(()=>{try{if(`matchMedia`in window){let t=window.matchMedia(e);i(t.matches);let n=e=>i(e.matches);return t.addEventListener(`change`,n),()=>{t.removeEventListener(`change`,n)}}}catch{return}},[e]),r||!1}function f(e=!1,t={}){let[n,r]=(0,l.useState)(e),i=(0,l.useCallback)(()=>{r(e=>e||(t.onOpen?.(),!0))},[t.onOpen]),a=(0,l.useCallback)(()=>{r(e=>e&&(t.onClose?.(),!1))},[t.onClose]);return[n,{open:i,close:a,toggle:(0,l.useCallback)(()=>{n?a():i()},[a,i,n]),set:r}]}var p=n(),m=(0,l.createContext)(null);function h(){let e=(0,l.useContext)(m);if(!e)throw Error(`useAppShell must be used within AppShell`);return e}function g({sidebar:e,className:t=``,headerTitle:n,headerRight:r,sidebarToggleReplacement:u,languageTheme:h,defaultHide:g=!1,hideAccountMenu:_=!1,children:v}){let[y,b]=f(!1),[x,S]=(0,l.useState)(g),C=(0,l.useRef)(g),w=d(`(max-width: 768px)`),{t:T}=i(),E=(0,l.useCallback)((e={})=>{b.close(),e.collapse&&S(!0)},[b]);(0,l.useEffect)(()=>{g!==C.current&&(g?E({collapse:!0}):S(!1),C.current=g)},[g,E]);let D=()=>{w?b.toggle():S(!x)},O=()=>{w?b.open():S(!1)},k=w?y:!x;return(0,p.jsx)(m.Provider,{value:{closeSidebar:E,openSidebar:O,isSidebarVisible:k},children:(0,p.jsxs)(`div`,{className:[`app-layout`,t].filter(Boolean).join(` `),children:[(0,p.jsx)(`div`,{className:`sidebar-overlay ${y?`visible`:``}`,onClick:()=>E()}),(0,p.jsx)(`div`,{className:`sidebar ${y?`open`:``} ${x?`collapsed`:``}`,children:e({closeSidebar:E,openSidebar:O})}),(0,p.jsxs)(`div`,{className:`main-content`,children:[(0,p.jsxs)(`header`,{className:`app-header`,children:[(0,p.jsxs)(`div`,{className:`header-left`,children:[u??(0,p.jsx)(`button`,{onClick:D,className:`btn btn-icon sidebar-toggle-btn`,"aria-label":T(w?`appShell.openMenu`:x?`appShell.expandSidebar`:`appShell.collapseSidebar`),children:(0,p.jsx)(c,{size:16})}),n]}),(0,p.jsxs)(`div`,{className:`header-right`,children:[r,(0,p.jsx)(o,{}),(0,p.jsx)(a,{theme:h}),!_&&(0,p.jsx)(s,{})]})]}),v]})]})})}export{h as n,f as r,g as t};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r}from"./useAppStore-Pjif7nCR.js";import{a as i}from"./i18n-BPfshhQc.js";import{n as a,r as o,t as s}from"./AccountMenu-BpUGPUSa.js";import"./index-AZPpawN1.js";var c=r(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),l=t(e(),1);function u(e,t){return typeof t==`boolean`?t:typeof window<`u`&&`matchMedia`in window?window.matchMedia(e).matches:!1}function d(e,t,{getInitialValueInEffect:n}={getInitialValueInEffect:!0}){let[r,i]=(0,l.useState)(n?t:u(e));return(0,l.useEffect)(()=>{try{if(`matchMedia`in window){let t=window.matchMedia(e);i(t.matches);let n=e=>i(e.matches);return t.addEventListener(`change`,n),()=>{t.removeEventListener(`change`,n)}}}catch{return}},[e]),r||!1}function f(e=!1,t={}){let[n,r]=(0,l.useState)(e),i=(0,l.useCallback)(()=>{r(e=>e||(t.onOpen?.(),!0))},[t.onOpen]),a=(0,l.useCallback)(()=>{r(e=>e&&(t.onClose?.(),!1))},[t.onClose]);return[n,{open:i,close:a,toggle:(0,l.useCallback)(()=>{n?a():i()},[a,i,n]),set:r}]}var p=n(),m=(0,l.createContext)(null);function h(){let e=(0,l.useContext)(m);if(!e)throw Error(`useAppShell must be used within AppShell`);return e}function g({sidebar:e,className:t=``,headerTitle:n,headerRight:r,sidebarToggleReplacement:u,languageTheme:h,defaultHide:g=!1,hideAccountMenu:_=!1,children:v}){let[y,b]=f(!1),[x,S]=(0,l.useState)(g),C=(0,l.useRef)(g),w=d(`(max-width: 768px)`),{t:T}=i(),E=(0,l.useCallback)((e={})=>{b.close(),e.collapse&&S(!0)},[b]);(0,l.useEffect)(()=>{g!==C.current&&(g?E({collapse:!0}):S(!1),C.current=g)},[g,E]);let D=()=>{w?b.toggle():S(!x)},O=()=>{w?b.open():S(!1)},k=w?y:!x;return(0,p.jsx)(m.Provider,{value:{closeSidebar:E,openSidebar:O,isSidebarVisible:k},children:(0,p.jsxs)(`div`,{className:[`app-layout`,t].filter(Boolean).join(` `),children:[(0,p.jsx)(`div`,{className:`sidebar-overlay ${y?`visible`:``}`,onClick:()=>E()}),(0,p.jsx)(`div`,{className:`sidebar ${y?`open`:``} ${x?`collapsed`:``}`,children:e({closeSidebar:E,openSidebar:O})}),(0,p.jsxs)(`div`,{className:`main-content`,children:[(0,p.jsxs)(`header`,{className:`app-header`,children:[(0,p.jsxs)(`div`,{className:`header-left`,children:[u??(0,p.jsx)(`button`,{onClick:D,className:`btn btn-icon sidebar-toggle-btn`,"aria-label":T(w?`appShell.openMenu`:x?`appShell.expandSidebar`:`appShell.collapseSidebar`),children:(0,p.jsx)(c,{size:16})}),n]}),(0,p.jsxs)(`div`,{className:`header-right`,children:[r,(0,p.jsx)(o,{}),(0,p.jsx)(a,{theme:h}),!_&&(0,p.jsx)(s,{})]})]}),v]})]})})}export{h as n,f as r,g as t};
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{W as t}from"./useAppStore-DNhyhD20.js";import{a as n}from"./i18n-DKsg67mH.js";import{F as r}from"./index-DJzLHA0V.js";var i=e();function a({onNavigate:e}){let{t:a}=n(),o=a(`common.brand`);return(0,i.jsxs)(t,{to:`/`,className:`sidebar-header sidebar-header-link`,onClick:e,"aria-label":o,title:o,children:[(0,i.jsx)(r,{size:18}),(0,i.jsx)(`h1`,{children:o})]})}export{a as t};
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{W as t}from"./useAppStore-Pjif7nCR.js";import{a as n}from"./i18n-BPfshhQc.js";import{F as r}from"./index-AZPpawN1.js";var i=e();function a({onNavigate:e}){let{t:a}=n(),o=a(`common.brand`);return(0,i.jsxs)(t,{to:`/`,className:`sidebar-header sidebar-header-link`,onClick:e,"aria-label":o,title:o,children:[(0,i.jsx)(r,{size:18}),(0,i.jsx)(`h1`,{children:o})]})}export{a as t};
@@ -1 +1 @@
1
- import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r}from"./useAppStore-DNhyhD20.js";import{a as i}from"./i18n-DKsg67mH.js";import{a}from"./AccountMenu-D_rcXDZr.js";import{t as o}from"./copy-OwXDsstV.js";var s=r(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),c=t(e(),1),l=n();function u({text:e,label:t,copiedLabel:n,className:r=`btn btn-icon`,iconSize:s=14}){let{t:u}=i(),[d,f]=(0,c.useState)(!1),p=n||u(`common.copied`),m=t||u(`common.copy`);async function h(){try{await navigator.clipboard.writeText(e),f(!0),setTimeout(()=>f(!1),1500)}catch{}}return(0,l.jsxs)(`button`,{type:`button`,className:r,onClick:h,title:d?p:m,children:[d?(0,l.jsx)(a,{size:s}):(0,l.jsx)(o,{size:s}),t?d?p:t:null]})}export{s as n,u as t};
1
+ import{n as e,o as t,t as n}from"./jsx-runtime-Bt-cYkS5.js";import{B as r}from"./useAppStore-Pjif7nCR.js";import{a as i}from"./i18n-BPfshhQc.js";import{a}from"./AccountMenu-BpUGPUSa.js";import{t as o}from"./copy-BofKiKH_.js";var s=r(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),c=t(e(),1),l=n();function u({text:e,label:t,copiedLabel:n,className:r=`btn btn-icon`,iconSize:s=14}){let{t:u}=i(),[d,f]=(0,c.useState)(!1),p=n||u(`common.copied`),m=t||u(`common.copy`);async function h(){try{await navigator.clipboard.writeText(e),f(!0),setTimeout(()=>f(!1),1500)}catch{}}return(0,l.jsxs)(`button`,{type:`button`,className:r,onClick:h,title:d?p:m,children:[d?(0,l.jsx)(a,{size:s}):(0,l.jsx)(o,{size:s}),t?d?p:t:null]})}export{s as n,u as t};
@@ -1 +1 @@
1
- import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{n as t,r as n,t as r}from"./AccountMenu-D_rcXDZr.js";import{D as i,F as a}from"./index-DJzLHA0V.js";var o=e();function s(){return(0,o.jsx)(`nav`,{className:`mkt-nav`,children:(0,o.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,o.jsxs)(`button`,{type:`button`,className:`mkt-nav-logo`,onClick:i(),children:[(0,o.jsx)(a,{size:18}),(0,o.jsx)(`span`,{children:`MOST PEOPLE`})]}),(0,o.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,o.jsx)(n,{}),(0,o.jsx)(t,{}),(0,o.jsx)(r,{})]})]})})}export{s as t};
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{n as t,r as n,t as r}from"./AccountMenu-BpUGPUSa.js";import{D as i,F as a}from"./index-AZPpawN1.js";var o=e();function s(){return(0,o.jsx)(`nav`,{className:`mkt-nav`,children:(0,o.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,o.jsxs)(`button`,{type:`button`,className:`mkt-nav-logo`,onClick:i(),children:[(0,o.jsx)(a,{size:18}),(0,o.jsx)(`span`,{children:`MOST PEOPLE`})]}),(0,o.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,o.jsx)(n,{}),(0,o.jsx)(t,{}),(0,o.jsx)(r,{})]})]})})}export{s as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-Bt-cYkS5.js";import{W as t}from"./useAppStore-Pjif7nCR.js";import{a as n}from"./i18n-BPfshhQc.js";import{n as r,r as i,t as a}from"./AccountMenu-BpUGPUSa.js";import{t as o}from"./download-nQ9X-v0q.js";import{E as s}from"./index-AZPpawN1.js";import{t as c}from"./LogoIcon-B2fFe0l1.js";var l={name:`most-box`,version:`0.3.9`,description:`MostBox - chat-first P2P toolbox for files, notes, and game rooms`,type:`module`,main:`electron/main.js`,bin:{"most-box":`server/cli.js`},files:[`out`,`public`,`electron`,`server/src`,`server/index.js`,`server/cli.js`],scripts:{start:`vite`,server:`node --watch server/index.js`,desktop:`npm run electron:dev`,build:`vite build && node scripts/prepare-start-static.mjs`,preview:`vite preview`,serve:`npm run build && node server/index.js`,test:`node --test server/tests/**/*.test.js`,"test:unit":`node --test server/tests/unit/*.test.js`,"test:desktop":`node --test electron/*.test.js`,"test:frontend":`node --test src/tests/*.test.js`,"test:protocol":`node --test --test-name-pattern "extracts CID and filename|matches golden CID samples|publishes a file from Buffer|lists published files|pulls through local seed nodes" server/tests/unit/cid.test.js server/tests/integration/cid.test.js server/tests/integration/engine.test.js`,typecheck:`tsc -p tsconfig.typecheck.json`,"typecheck:strict-router":`tsc -p tsconfig.strict-router.json`,"check:static-output":`node scripts/check-static-output.mjs`,format:`prettier --write .`,dev:`vite`,lint:`eslint .`,"r2:cors":`node scripts/configure-r2-cors.mjs`,"electron:dev":`concurrently "npm run build" "wait-on out/index.html && electron ."`,"electron:rebuild":`electron-rebuild -f -w sodium-native`,"electron:build":`npm run build && npm run electron:rebuild && electron-builder`,"electron:build:win":`npm run build && npm run electron:rebuild && electron-builder --win`,"electron:build:win:x64":`npm run electron:build:win -- --x64`,"electron:build:win:arm64":`npm run electron:build:win -- --arm64`,"electron:build:mac":`npm run build && npm run electron:rebuild && electron-builder --mac`,"electron:build:linux":`npm run build && npm run electron:rebuild && electron-builder --linux`},keywords:[`p2p`,`chat`,`file-sharing`,`file-transfer`,`hyperswarm`,`hypercore`,`hyperdrive`],license:`MIT`,dependencies:{"@dicebear/core":`^10.3.0`,"@dicebear/styles":`^10.2.0`,"@hono/node-server":`^2.0.6`,"@tanstack/react-router":`^1.170.16`,"@tanstack/react-start":`^1.168.26`,"@tanstack/react-table":`^8.21.3`,b4a:`^1.8.1`,busboy:`^1.6.0`,corestore:`^7.11.0`,dayjs:`^1.11.21`,ethers:`^6.17.0`,eventemitter3:`^5.0.4`,hono:`^4.12.27`,hypercore:`^11.33.2`,hyperdrive:`^13.3.2`,hyperswarm:`^4.17.0`,"ipfs-unixfs-importer":`^17.0.1`,multiformats:`^14.0.2`,tweetnacl:`^1.0.3`,ws:`^8.21.0`},devDependencies:{"@electron/rebuild":`^4.0.4`,"@eslint/js":`^10.0.1`,"@iconify/react":`^6.0.2`,"@mantine/hooks":`^9.4.0`,"@milkdown/crepe":`^7.21.2`,"@milkdown/utils":`^7.21.2`,"@types/react":`^19.2.17`,"@vitejs/plugin-react":`^6.0.3`,concurrently:`^10.0.3`,electron:`^42.5.0`,"electron-builder":`^26.15.3`,esbuild:`^0.28.1`,eslint:`^10.5.0`,globals:`^17.7.0`,ky:`^2.0.2`,"lucide-react":`^1.21.0`,prettier:`^3.8.4`,"qrcode.react":`^4.2.0`,react:`^19.2.7`,"react-dom":`^19.2.7`,typescript:`6.0.3`,"typescript-eslint":`^8.62.0`,vite:`^8.1.0`,"wait-on":`^9.0.10`,zustand:`^5.0.14`},overrides:{"brace-expansion":`5.0.6`,postcss:`8.5.15`,ws:`$ws`},build:{appId:`com.mostbox.app`,productName:`MostBox`,publish:[{provider:`github`,releaseType:`release`}],directories:{output:`dist`},afterPack:`electron/afterPack.cjs`,files:[`out/**/*`,`electron/**/*`,`server/src/**/*`,`server/index.js`,`server/cli.js`,`package.json`,`!**/*.map`,`!electron/**/*.test.js`,`!server/tests/**/*`],asarUnpack:[`**/*.node`,`**/sodium-native/**`],protocols:[{name:`MostBox Link`,schemes:[`most`]}],win:{target:[`nsis`],artifactName:"${productName}-${version}-win-${arch}-setup.${ext}",icon:`public/logo.ico`},nsis:{oneClick:!1,allowToChangeInstallationDirectory:!0,createDesktopShortcut:!0,createStartMenuShortcut:!0,shortcutName:`MostBox`},mac:{artifactName:"${productName}-${version}-mac-${arch}.${ext}",target:[{target:`dmg`,arch:[`x64`,`arm64`]}],icon:`public/logo-512.png`,category:`public.app-category.utilities`},dmg:{contents:[{x:130,y:220},{x:410,y:220,type:`link`,path:`/Applications`}]},linux:{artifactName:"${productName}-${version}-linux-${arch}.${ext}",target:[{target:`AppImage`,arch:[`x64`,`arm64`]}],icon:`public/logo-512.png`,category:`Utility`}}},u=e(),d=[{to:`/about/`,labelKey:`footer.about`},{to:`/ping/`,labelKey:`footer.network`},{href:`https://github.com/most-people/most`,labelKey:null,label:`GitHub`,external:!0}],f=l.version;function p(){let{t:e}=n();return(0,u.jsx)(`footer`,{className:`mkt-footer`,children:(0,u.jsx)(`div`,{className:`mkt-container`,children:(0,u.jsxs)(`div`,{className:`mkt-footer-inner`,children:[(0,u.jsx)(`div`,{className:`mkt-footer-links`,children:d.map(n=>`external`in n?(0,u.jsx)(`a`,{href:n.href,target:`_blank`,rel:`noopener noreferrer`,children:n.label},n.href):(0,u.jsx)(t,{to:n.to,children:e(n.labelKey)},n.to))}),(0,u.jsxs)(`span`,{className:`mkt-footer-copy`,children:[`© `,new Date().getFullYear(),` MOST PEOPLE · MIT License`]}),(0,u.jsxs)(`span`,{className:`mkt-footer-build`,translate:`no`,children:[`v`,f]})]})})})}function m({children:e,header:t}){return(0,u.jsxs)(`div`,{className:`mkt-layout`,children:[t??(0,u.jsx)(h,{}),(0,u.jsx)(`main`,{className:`mkt-layout-main`,children:e}),(0,u.jsx)(p,{})]})}function h(){let{t:e}=n(),l=s();return(0,u.jsx)(`nav`,{className:`mkt-nav`,children:(0,u.jsxs)(`div`,{className:`mkt-nav-inner`,children:[(0,u.jsxs)(t,{to:`/`,className:`mkt-nav-logo`,children:[(0,u.jsx)(c,{}),`MOST PEOPLE`]}),(0,u.jsxs)(`div`,{className:`mkt-nav-cta`,children:[(0,u.jsx)(i,{}),(0,u.jsx)(r,{}),!l&&(0,u.jsxs)(t,{to:`/download/`,className:`btn btn-primary mkt-nav-preview`,children:[(0,u.jsx)(o,{size:16}),e(`nav.downloadClient`)]}),(0,u.jsx)(a,{})]})]})})}export{m as t};