@bolloon/bolloon-agent 0.4.13 → 0.4.15

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 (221) hide show
  1. package/README.md +127 -127
  2. package/bin/bolloon-cli.cjs +183 -183
  3. package/bin/bolloon-daemon.sh +207 -0
  4. package/bin/bolloon.cjs +0 -0
  5. package/dist/agents/agent-gateway.js +130 -0
  6. package/dist/agents/constraint-layer.js +19 -19
  7. package/dist/agents/gateway-group.js +261 -0
  8. package/dist/agents/gateway-network.js +278 -0
  9. package/dist/agents/judgment-protocol.js +14 -14
  10. package/dist/agents/pi-sdk-tools.js +117 -0
  11. package/dist/agents/pi-sdk-types.js +12 -12
  12. package/dist/agents/pi-sdk.js +101 -101
  13. package/dist/agents/skill-organizer.js +19 -19
  14. package/dist/agents/workflow-pivot-loop.js +2 -2
  15. package/dist/agents/x402/x402Pay.js +4 -0
  16. package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
  17. package/dist/bollharness-integration/context-router-judgment.js +4 -4
  18. package/dist/bollharness-integration/context-router.js +292 -292
  19. package/dist/bollharness-integration/gate-state-machine.js +13 -13
  20. package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
  21. package/dist/bollharness-integration/skill-adapter.js +21 -21
  22. package/dist/bootstrap/chat-archiver.js +14 -14
  23. package/dist/bootstrap/context-os.js +24 -24
  24. package/dist/bootstrap/memory-compressor.js +13 -13
  25. package/dist/cli-entry.js +36 -36
  26. package/dist/constraint-runtime/reference_data/archive_surface_snapshot.json +63 -0
  27. package/dist/constraint-runtime/reference_data/commands_snapshot.json +1037 -0
  28. package/dist/constraint-runtime/reference_data/subsystems/assistant.json +8 -0
  29. package/dist/constraint-runtime/reference_data/subsystems/bootstrap.json +8 -0
  30. package/dist/constraint-runtime/reference_data/subsystems/bridge.json +32 -0
  31. package/dist/constraint-runtime/reference_data/subsystems/buddy.json +13 -0
  32. package/dist/constraint-runtime/reference_data/subsystems/cli.json +26 -0
  33. package/dist/constraint-runtime/reference_data/subsystems/components.json +32 -0
  34. package/dist/constraint-runtime/reference_data/subsystems/constants.json +28 -0
  35. package/dist/constraint-runtime/reference_data/subsystems/coordinator.json +8 -0
  36. package/dist/constraint-runtime/reference_data/subsystems/entrypoints.json +15 -0
  37. package/dist/constraint-runtime/reference_data/subsystems/hooks.json +32 -0
  38. package/dist/constraint-runtime/reference_data/subsystems/keybindings.json +21 -0
  39. package/dist/constraint-runtime/reference_data/subsystems/memdir.json +15 -0
  40. package/dist/constraint-runtime/reference_data/subsystems/migrations.json +18 -0
  41. package/dist/constraint-runtime/reference_data/subsystems/moreright.json +8 -0
  42. package/dist/constraint-runtime/reference_data/subsystems/native_ts.json +11 -0
  43. package/dist/constraint-runtime/reference_data/subsystems/outputStyles.json +8 -0
  44. package/dist/constraint-runtime/reference_data/subsystems/plugins.json +9 -0
  45. package/dist/constraint-runtime/reference_data/subsystems/remote.json +11 -0
  46. package/dist/constraint-runtime/reference_data/subsystems/schemas.json +8 -0
  47. package/dist/constraint-runtime/reference_data/subsystems/screens.json +10 -0
  48. package/dist/constraint-runtime/reference_data/subsystems/server.json +10 -0
  49. package/dist/constraint-runtime/reference_data/subsystems/services.json +32 -0
  50. package/dist/constraint-runtime/reference_data/subsystems/skills.json +27 -0
  51. package/dist/constraint-runtime/reference_data/subsystems/state.json +13 -0
  52. package/dist/constraint-runtime/reference_data/subsystems/types.json +18 -0
  53. package/dist/constraint-runtime/reference_data/subsystems/upstreamproxy.json +9 -0
  54. package/dist/constraint-runtime/reference_data/subsystems/utils.json +32 -0
  55. package/dist/constraint-runtime/reference_data/subsystems/vim.json +12 -0
  56. package/dist/constraint-runtime/reference_data/subsystems/voice.json +8 -0
  57. package/dist/constraint-runtime/reference_data/tools_snapshot.json +922 -0
  58. package/dist/constraint-runtime/tools/PolymarketSDK/econ-integration.d.ts +55 -0
  59. package/dist/constraint-runtime/tools/PolymarketSDK/econ-integration.js +59 -0
  60. package/dist/context-compaction/auto-compact.js +7 -7
  61. package/dist/electron/config.js.map +1 -0
  62. package/dist/electron/dialogs.js.map +1 -0
  63. package/dist/electron/first-run.js +54 -54
  64. package/dist/electron/first-run.js.map +1 -0
  65. package/dist/electron/ipc.js.map +1 -0
  66. package/dist/electron/logger.js.map +1 -0
  67. package/dist/electron/main.js.map +1 -0
  68. package/dist/electron/menu.js.map +1 -0
  69. package/dist/electron/paths.js.map +1 -0
  70. package/dist/electron/server.js.map +1 -0
  71. package/dist/electron/tray.js.map +1 -0
  72. package/dist/electron/window.js.map +1 -0
  73. package/dist/electron-build/electron/first-run.js +54 -54
  74. package/dist/electron-preload.js.map +1 -1
  75. package/dist/electron.js.map +1 -1
  76. package/dist/index.js +112 -112
  77. package/dist/llm/llm-judgment-client.js +102 -102
  78. package/dist/llm/pi-ai.js +48 -48
  79. package/dist/llm/system-prompt/layers/channel/human-async.md +41 -41
  80. package/dist/llm/system-prompt/layers/channel/local.md +14 -14
  81. package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
  82. package/dist/llm/system-prompt/layers/channel/p2p-peer-sync.md +51 -51
  83. package/dist/llm/system-prompt/layers/channel/p2p-proactive.md +43 -43
  84. package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
  85. package/dist/llm/system-prompt/layers/channel/session-handoff.md +61 -61
  86. package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
  87. package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
  88. package/dist/llm/system-prompt/layers/core/external-engagement.md +73 -73
  89. package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
  90. package/dist/llm/system-prompt/layers/core/identity.md +48 -48
  91. package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
  92. package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
  93. package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
  94. package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
  95. package/dist/llm/system-prompt/layers/core/tone.md +31 -31
  96. package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
  97. package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
  98. package/dist/llm/system-prompt/layers/role/architect.md +20 -20
  99. package/dist/llm/system-prompt/layers/role/expert.md +19 -19
  100. package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
  101. package/dist/llm/system-prompt/layers/role/security.md +15 -15
  102. package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
  103. package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
  104. package/dist/llm/system-prompt/layers/tool/goal_handoff.md +77 -77
  105. package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
  106. package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
  107. package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
  108. package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
  109. package/dist/llm/system-prompt/layers/tool/p2p_request.md +61 -61
  110. package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
  111. package/dist/llm/tool-manifest/ask_user_input.js +1 -1
  112. package/dist/llm/tool-manifest/bash.js +3 -3
  113. package/dist/llm/tool-manifest/create_file.js +4 -4
  114. package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
  115. package/dist/llm/tool-manifest/image_search.js +2 -2
  116. package/dist/llm/tool-manifest/index.js +59 -0
  117. package/dist/llm/tool-manifest/mcp.js +2 -2
  118. package/dist/llm/tool-manifest/message_compose.js +3 -3
  119. package/dist/llm/tool-manifest/places.js +2 -2
  120. package/dist/llm/tool-manifest/present_files.js +1 -1
  121. package/dist/llm/tool-manifest/recipe.js +2 -2
  122. package/dist/llm/tool-manifest/str_replace.js +5 -5
  123. package/dist/llm/tool-manifest/view.js +3 -3
  124. package/dist/llm/tool-manifest/weather.js +4 -4
  125. package/dist/llm/tool-manifest/web.js +4 -4
  126. package/dist/network/p2p.js +78 -4
  127. package/dist/orbitdb/cid-database.js +39 -10
  128. package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
  129. package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
  130. package/dist/pi-ecosystem-judgment/distillation.js +14 -14
  131. package/dist/pi-ecosystem-judgment/index.js +1 -1
  132. package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
  133. package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
  134. package/dist/security/context-router-tool.js +15 -15
  135. package/dist/utils/auto-update.js.map +1 -0
  136. package/dist/web/a2ui-client.js +1594 -223
  137. package/dist/web/api-config.html +779 -779
  138. package/dist/web/client-hearth.js +10 -10
  139. package/dist/web/client.js +273 -0
  140. package/dist/web/client.js.map +7 -0
  141. package/dist/web/components/wallet-viem.mjs +118 -118
  142. package/dist/web/index.html +502 -485
  143. package/dist/web/manifest.json +20 -20
  144. package/dist/web/mobile-agent.js +397 -0
  145. package/dist/web/mobile-core.js +86235 -0
  146. package/dist/web/mobile-data.js +346 -0
  147. package/dist/web/mobile-http-api.js +71 -0
  148. package/dist/web/mobile-p2p.js +250 -0
  149. package/dist/web/mobile-payments.js +80 -0
  150. package/dist/web/mobile-wallet.js +226 -0
  151. package/dist/web/mobile.css +483 -6
  152. package/dist/web/mobile.html +99 -50
  153. package/dist/web/mobile.js +1040 -187
  154. package/dist/web/server.js +196 -13
  155. package/dist/web/style.css +5062 -4946
  156. package/package.json +201 -198
  157. package/scripts/build-cli.js +215 -215
  158. package/scripts/build-web.ts +162 -149
  159. package/scripts/postinstall.js +152 -152
  160. package/bin/bolloon.js +0 -157
  161. package/dist/agents/python-exec.js +0 -115
  162. package/dist/pi-ecosystem-colony/index.js +0 -365
  163. package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
  164. package/dist/social/ant-colony/PheromoneEngine.js +0 -227
  165. package/dist/social/ant-colony/index.js +0 -6
  166. package/dist/social/ant-colony/types.js +0 -24
  167. package/dist/storage/trajectory.js +0 -101
  168. package/dist/test/ai-judgment-test.js +0 -80
  169. package/dist/test/bollharness-integration.test.js +0 -318
  170. package/dist/test/channel-agent-multi-dialogue.js +0 -205
  171. package/dist/test/channel-heartbeat-agent-test.js +0 -201
  172. package/dist/test/constraint-layer.test.js +0 -164
  173. package/dist/test/diap-identity-test.js +0 -172
  174. package/dist/test/diap-quick-test.js +0 -62
  175. package/dist/test/global-shared-context.test.js +0 -315
  176. package/dist/test/harness-judgment-injection.test.js +0 -246
  177. package/dist/test/harness-workflow-integrator-test.js +0 -228
  178. package/dist/test/human-value-store.test.js +0 -243
  179. package/dist/test/hybrid-integration-test.js +0 -118
  180. package/dist/test/hybrid-messenger-verify.js +0 -55
  181. package/dist/test/iroh-bistream-debug.js +0 -38
  182. package/dist/test/iroh-communication.test.js +0 -66
  183. package/dist/test/iroh-debug-test.js +0 -57
  184. package/dist/test/iroh-diap-test.js +0 -71
  185. package/dist/test/iroh-direct-connect.js +0 -55
  186. package/dist/test/iroh-e2e-fixed.js +0 -89
  187. package/dist/test/iroh-e2e-same-process.js +0 -63
  188. package/dist/test/iroh-e2e.js +0 -66
  189. package/dist/test/iroh-final-e2e.js +0 -72
  190. package/dist/test/iroh-relay-test.js +0 -37
  191. package/dist/test/iroh-simple-test.js +0 -41
  192. package/dist/test/iroh-transport-verify.js +0 -54
  193. package/dist/test/iroh-transport.test.js +0 -37
  194. package/dist/test/iroh-two-nodes.js +0 -70
  195. package/dist/test/iroh-verify.js +0 -44
  196. package/dist/test/judgment-decision.test.js +0 -219
  197. package/dist/test/llm-judgment-integration.test.js +0 -220
  198. package/dist/test/p2p-agent-complex-dialogue.js +0 -385
  199. package/dist/test/p2p-agent-dialogue.js +0 -341
  200. package/dist/test/p2p-agent-full-bidirectional.js +0 -510
  201. package/dist/test/p2p-agent-harness-flow.js +0 -437
  202. package/dist/test/p2p-agent-harness-single.js +0 -143
  203. package/dist/test/p2p-ai-dialogue-test.js +0 -318
  204. package/dist/test/p2p-cid-connect-test.js +0 -195
  205. package/dist/test/p2p-connect-receiver.js +0 -69
  206. package/dist/test/p2p-doc-transfer.js +0 -110
  207. package/dist/test/p2p-identity-page-test.js +0 -77
  208. package/dist/test/p2p-iroh-test.js +0 -171
  209. package/dist/test/p2p-minimal-test.js +0 -241
  210. package/dist/test/p2p-node-1.js +0 -148
  211. package/dist/test/p2p-node-2.js +0 -148
  212. package/dist/test/p2p-server.js +0 -281
  213. package/dist/test/p2p-two-nodes-test.js +0 -438
  214. package/dist/test/pi-sdk.test.js +0 -44
  215. package/dist/test/set-persona.js +0 -40
  216. package/dist/test/simple.test.js +0 -9
  217. package/dist/test/storage-integration.test.js +0 -150
  218. package/dist/test/subagent-manager.test.js +0 -276
  219. package/dist/test/test-gate-flow.test.js +0 -81
  220. package/dist/test/workflow-engine.test.js +0 -87
  221. package/dist/test/workflow-pivot-loop.test.js +0 -246
@@ -4,73 +4,122 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
6
6
  <title>Bolloon 手机端</title>
7
+ <script>
8
+ /* 启动页即时主题: 内部已选主题 > 系统主题 > 默认暗色. 在 CSS/JS 加载前先渲染, 避免白闪 */
9
+ (function () {
10
+ var saved = null; try { saved = localStorage.getItem('bolloon_theme'); } catch (e) {}
11
+ var sysLight = false; try { sysLight = window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches; } catch (e) {}
12
+ var light = saved ? saved === 'light' : sysLight; // 内部优先级
13
+ var root = document.documentElement;
14
+ var t = light
15
+ ? { '--bg': '#f5f5f0', '--bg-card': '#ffffff', '--bg-hover': '#eeeeea', '--text': '#1a1a18', '--text-secondary': '#606058', '--text-muted': '#909088', '--accent': '#8a9430', '--border': '#d0d0c8', 'bg': '#f5f5f0', 'fg': '#1a1a18' }
16
+ : { '--bg': '#1a1a18', '--bg-card': '#222220', '--bg-hover': '#2a2a26', '--text': '#d8d8c8', '--text-secondary': '#909088', '--text-muted': '#606058', '--accent': '#c4d640', '--border': '#3a3a36', 'bg': '#1a1a18', 'fg': '#d8d8c8' };
17
+ Object.keys(t).forEach(function (k) { if (k === 'bg') root.style.background = t[k]; else if (k === 'fg') root.style.color = t[k]; else root.style.setProperty(k, t[k]); });
18
+ })();
19
+ </script>
7
20
  <link rel="stylesheet" href="./mobile.css">
8
21
  </head>
9
22
  <body>
10
23
  <div id="app" class="app">
11
24
  <!-- 顶部导航 -->
12
25
  <header class="topbar">
13
- <div class="topbar-title" id="topbar-title">微信</div>
26
+ <div class="topbar-title" id="topbar-title">首页</div>
14
27
  <div class="topbar-actions">
15
- <button class="icon-btn" id="btn-add" title="添加好友">+</button>
28
+ <button class="icon-btn" id="btn-refresh" title="刷新">⟳</button>
29
+ <button class="icon-btn" id="btn-add" title="添加会话">+</button>
16
30
  </div>
17
31
  </header>
18
32
 
19
- <!-- 页面容器 (切换 4 个 tab) -->
20
- <main class="page-container">
21
- <!-- 微信 tab: 会话列表 -->
22
- <section class="page" id="page-wechat" data-tab="wechat">
23
- <div class="list" id="conversation-list"></div>
24
- </section>
33
+ <!-- 主页面: 双频滑动卡片 -->
34
+ <main class="page-container" id="page-main" data-tab="main">
35
+ <!-- 水平滑动卡片轨道 -->
36
+ <div class="card-carousel" id="card-carousel">
37
+ <div class="card-track" id="card-track">
38
+ <!-- 卡片由 JS 动态加载 -->
39
+ </div>
40
+ </div>
41
+ <!-- 卡片指示器 -->
42
+ <div class="card-indicator" id="card-indicator"></div>
43
+ <!-- 卡片详情浮层 (垂直展开) -->
44
+ <div class="card-detail" id="card-detail" hidden>
45
+ <div class="detail-header">
46
+ <button class="icon-btn" id="detail-back">←</button>
47
+ <h2 id="detail-name"></h2>
48
+ </div>
49
+ <div class="detail-body" id="detail-body"></div>
50
+ </div>
51
+ </main>
25
52
 
26
- <!-- 通讯录 tab -->
27
- <section class="page" id="page-contacts" data-tab="contacts" hidden>
28
- <div class="list" id="contacts-list"></div>
29
- </section>
53
+ <!-- 网络 tab -->
54
+ <section class="page" id="page-network" data-tab="network" hidden>
55
+ <div class="list">
56
+ <div class="list-item" id="item-p2p"><span class="list-icon">🌐</span><span>P2P 好友</span></div>
57
+ <div class="list-item" id="item-p2p-id"><span class="list-icon">🪪</span><span>我的 P2P ID</span></div>
58
+ </div>
59
+ <div class="section-label">P2P 好友列表</div>
60
+ <div class="list" id="contacts-list"></div>
61
+ <div class="section-label">MCP 工具 (触控调用)</div>
62
+ <div class="list" id="mcp-tools"></div>
63
+ <div class="section-label">待人工审批支付</div>
64
+ <div class="list" id="approval-list"></div>
65
+ <div class="section-label">A2UI 动态面板 (智能体生成)</div>
66
+ <div id="a2ui-root"></div>
67
+ </section>
30
68
 
31
- <!-- 发现 tab -->
32
- <section class="page" id="page-discover" data-tab="discover" hidden>
33
- <div class="list">
34
- <div class="list-item" id="item-p2p"><span class="list-icon">🌐</span><span>P2P 好友</span></div>
35
- <div class="list-item" id="item-p2p-id"><span class="list-icon">🪪</span><span>我的 P2P ID</span></div>
69
+ <!-- tab -->
70
+ <section class="page" id="page-me" data-tab="me" hidden>
71
+ <div class="profile-card" id="profile-card">
72
+ <div class="avatar" id="me-avatar" title="点击修改头像">?</div>
73
+ <div class="profile-info" id="profile-info">
74
+ <div class="profile-name" id="me-name">未登录</div>
75
+ <div class="profile-did" id="me-did"></div>
76
+ <div class="profile-p2p" id="me-p2p"></div>
36
77
  </div>
37
- <div class="section-label">MCP 工具 (触控调用)</div>
38
- <div class="list" id="mcp-tools"></div>
39
- <div class="section-label">待人工审批支付</div>
40
- <div class="list" id="approval-list"></div>
41
- <div class="section-label">A2UI 动态面板 (智能体生成)</div>
42
- <div id="a2ui-root"></div>
43
- </section>
78
+ <span class="profile-chevron">›</span>
79
+ </div>
80
+ <!-- 相册选图 + 裁剪 -->
81
+ <input type="file" id="avatar-input" accept="image/*" hidden>
82
+ <div class="list">
83
+ <div class="list-item" id="item-settings"><span class="list-icon">⚙️</span><span>设置</span><span class="list-arrow">›</span></div>
84
+ <div class="list-item" id="item-wallet"><span class="list-icon">👛</span><span>钱包</span><span class="list-arrow">›</span></div>
85
+ <div class="list-item" id="item-judgments"><span class="list-icon">🧠</span><span>判断力 API</span><span class="list-arrow">›</span></div>
86
+ <div class="list-item" id="item-login"><span class="list-icon">🔐</span><span id="login-label">登录</span><span class="list-arrow">›</span></div>
87
+ <div class="list-item" id="item-logout"><span class="list-icon">🚪</span><span>注销</span></div>
88
+ </div>
89
+ </section>
90
+ </main>
44
91
 
45
- <!-- tab -->
46
- <section class="page" id="page-me" data-tab="me" hidden>
47
- <div class="profile-card" id="profile-card">
48
- <div class="avatar" id="me-avatar">?</div>
49
- <div class="profile-info">
50
- <div class="profile-name" id="me-name">未登录</div>
51
- <div class="profile-did" id="me-did"></div>
52
- </div>
53
- </div>
54
- <div class="list">
55
- <div class="list-item" id="item-settings"><span class="list-icon">⚙️</span><span>设置</span><span class="list-arrow">›</span></div>
56
- <div class="list-item" id="item-wallet"><span class="list-icon">👛</span><span>钱包</span><span class="list-arrow">›</span></div>
57
- <div class="list-item" id="item-judgments"><span class="list-icon">🧠</span><span>判断力 API</span><span class="list-arrow">›</span></div>
58
- <div class="list-item" id="item-did"><span class="list-icon">🪪</span><span>DID 身份</span><span class="list-arrow">›</span></div>
59
- <div class="list-item" id="item-login"><span class="list-icon">🔐</span><span id="login-label">登录</span><span class="list-arrow">›</span></div>
60
- <div class="list-item" id="item-logout"><span class="list-icon">🚪</span><span>注销</span></div>
61
- </div>
62
- </section>
63
- </main>
92
+ <!-- 底部 tab -->
93
+ <nav class="tabbar" id="tabbar">
94
+ <button class="tab active" data-tab="main"><span class="tab-icon">⊞</span><span>首页</span></button>
95
+ <button class="tab" data-tab="network"><span class="tab-icon">📡</span><span>网络</span></button>
96
+ <button class="tab" data-tab="me"><span class="tab-icon">🙂</span><span>我</span></button>
97
+ </nav>
98
+
99
+ <!-- 首页: 创建新会话栏 (底部中央, tab 上方) -->
100
+ <button class="create-session-btn" id="btn-create-session" hidden>+ 创建新会话</button>
64
101
 
65
- <!-- 底部 tab -->
66
- <nav class="tabbar">
67
- <button class="tab active" data-tab="wechat"><span class="tab-icon">💬</span><span>微信</span></button>
68
- <button class="tab" data-tab="contacts"><span class="tab-icon">📇</span><span>通讯录</span></button>
69
- <button class="tab" data-tab="discover"><span class="tab-icon">🧭</span><span>发现</span></button>
70
- <button class="tab" data-tab="me"><span class="tab-icon">🙂</span><span>我</span></button>
71
- </nav>
102
+ <!-- 创建智能体: 底部滑入加载 sheet -->
103
+ <div class="sheet" id="create-sheet" hidden>
104
+ <div class="sheet-inner">
105
+ <div class="spinner"></div>
106
+ <div class="sheet-text">正在创建智能体...</div>
107
+ </div>
108
+ </div>
109
+
110
+ <!-- 添加好友: 底部滑出选择 sheet -->
111
+ <div class="sheet" id="addfriend-sheet" hidden>
112
+ <div class="sheet-inner sheet-inner-choices">
113
+ <div class="sheet-title">添加 P2P 好友</div>
114
+ <button class="sheet-choice" id="choice-scan">📷 扫码添加</button>
115
+ <button class="sheet-choice" id="choice-manual">🔗 手动输入地址</button>
116
+ <button class="sheet-choice sheet-cancel" id="choice-cancel">取消</button>
117
+ </div>
118
+ </div>
72
119
  </div>
73
120
 
121
+ <!-- 2026-08-14: 手机端内化内核 (IndexedDB 数据 + 本地身份 + 支付审批 + Agent). 必须最先加载 -->
122
+ <script src="./mobile-core.js"></script>
74
123
  <script src="./mobile.js"></script>
75
124
  <!-- 2026-08-12: A2UI 渲染器 (智能体生成动态 UI, 挂载 #a2ui-root) -->
76
125
  <script src="./a2ui-client.js"></script>