@bolloon/bolloon-agent 0.2.12 → 0.2.14

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 (284) hide show
  1. package/README.md +495 -467
  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/bin/ipfs +0 -0
  6. package/dist/agents/agent-manifest-protocol.js +52 -0
  7. package/dist/agents/chat-segmenter.js +298 -0
  8. package/dist/agents/constraint-layer.js +19 -19
  9. package/dist/agents/judgment-protocol.js +479 -0
  10. package/dist/agents/parse-tool-call.js +304 -0
  11. package/dist/agents/peer-manifest-loader.js +210 -0
  12. package/dist/agents/pi-sdk-session-factory.js +110 -0
  13. package/dist/agents/pi-sdk-session-manager.js +297 -0
  14. package/dist/agents/pi-sdk-tools.js +1288 -0
  15. package/dist/agents/pi-sdk-types.js +13 -0
  16. package/dist/agents/pi-sdk.js +553 -1306
  17. package/dist/agents/react-loop.js +120 -0
  18. package/dist/agents/session-store.js +171 -0
  19. package/dist/agents/shell-guard.js +2 -2
  20. package/dist/agents/tool-registry.js +136 -0
  21. package/dist/agents/workflow-pivot-loop.js +200 -22
  22. package/dist/bollharness/src/scripts/context_router.js +7 -0
  23. package/dist/bollharness/src/scripts/deploy-guard.js +8 -8
  24. package/dist/bollharness-integration/context-router-judgment.js +4 -4
  25. package/dist/bollharness-integration/context-router.js +292 -292
  26. package/dist/bollharness-integration/gate-state-machine.js +26 -13
  27. package/dist/bollharness-integration/integration.js +71 -0
  28. package/dist/bollharness-integration/llm-judgment-engine.js +134 -134
  29. package/dist/bollharness-integration/skill-adapter.js +57 -127
  30. package/dist/bootstrap/chat-archiver.js +276 -0
  31. package/dist/bootstrap/context-collector.js +6 -3
  32. package/dist/bootstrap/event-log.js +160 -0
  33. package/dist/bootstrap/lifecycle-hooks.js +15 -1
  34. package/dist/bootstrap/memory-compressor.js +170 -0
  35. package/dist/bootstrap/persona-loader.js +94 -0
  36. package/dist/bootstrap/project-state.js +159 -0
  37. package/dist/bootstrap/remote-mirror.js +97 -0
  38. package/dist/bootstrap/session-window.js +121 -0
  39. package/dist/bootstrap/vector-index.js +248 -0
  40. package/dist/cli/loading-tui.js +40 -0
  41. package/dist/cli-entry.js +41 -37
  42. package/dist/context-compaction/auto-compact.js +7 -7
  43. package/dist/electron/config.js +21 -0
  44. package/dist/electron/config.js.map +1 -0
  45. package/dist/electron/dialogs.js +108 -0
  46. package/dist/electron/dialogs.js.map +1 -0
  47. package/dist/electron/first-run.js +170 -0
  48. package/dist/electron/first-run.js.map +1 -0
  49. package/dist/electron/ipc.js +20 -0
  50. package/dist/electron/ipc.js.map +1 -0
  51. package/dist/electron/logger.js +114 -0
  52. package/dist/electron/logger.js.map +1 -0
  53. package/dist/electron/main.js +63 -0
  54. package/dist/electron/main.js.map +1 -0
  55. package/dist/electron/menu.js +145 -0
  56. package/dist/electron/menu.js.map +1 -0
  57. package/dist/electron/paths.js +75 -0
  58. package/dist/electron/paths.js.map +1 -0
  59. package/dist/electron/server.js +119 -0
  60. package/dist/electron/server.js.map +1 -0
  61. package/dist/electron/tray.js +111 -0
  62. package/dist/electron/tray.js.map +1 -0
  63. package/dist/electron/window.js +111 -0
  64. package/dist/electron/window.js.map +1 -0
  65. package/dist/electron-preload.js +26 -6
  66. package/dist/electron-preload.js.map +1 -1
  67. package/dist/electron.js +6 -168
  68. package/dist/electron.js.map +1 -1
  69. package/dist/index.js +323 -266
  70. package/dist/llm/config-store.js +29 -8
  71. package/dist/llm/llm-judgment-client.js +102 -102
  72. package/dist/llm/pi-ai.js +139 -85
  73. package/dist/llm/system-prompt/layers/channel/local.md +14 -14
  74. package/dist/llm/system-prompt/layers/channel/p2p-agent.md +18 -18
  75. package/dist/llm/system-prompt/layers/channel/p2p-visitor.md +19 -19
  76. package/dist/llm/system-prompt/layers/core/artifacts_storage.md +89 -89
  77. package/dist/llm/system-prompt/layers/core/evenhandedness.md +21 -21
  78. package/dist/llm/system-prompt/layers/core/hibs_reminders.md +15 -15
  79. package/dist/llm/system-prompt/layers/core/identity.md +37 -37
  80. package/dist/llm/system-prompt/layers/core/knowledge.md +17 -17
  81. package/dist/llm/system-prompt/layers/core/memory_system.md +12 -12
  82. package/dist/llm/system-prompt/layers/core/network_filesystem.md +28 -28
  83. package/dist/llm/system-prompt/layers/core/refusal.md +37 -37
  84. package/dist/llm/system-prompt/layers/core/tone.md +31 -31
  85. package/dist/llm/system-prompt/layers/core/tools.thin.md +13 -13
  86. package/dist/llm/system-prompt/layers/core/wellbeing.md +41 -41
  87. package/dist/llm/system-prompt/layers/role/architect.md +20 -20
  88. package/dist/llm/system-prompt/layers/role/expert.md +19 -19
  89. package/dist/llm/system-prompt/layers/role/implementer.md +15 -15
  90. package/dist/llm/system-prompt/layers/role/security.md +15 -15
  91. package/dist/llm/system-prompt/layers/tool/artifacts.md +72 -72
  92. package/dist/llm/system-prompt/layers/tool/bash.md +25 -25
  93. package/dist/llm/system-prompt/layers/tool/hibs_api.md +171 -171
  94. package/dist/llm/system-prompt/layers/tool/image_search.md +70 -70
  95. package/dist/llm/system-prompt/layers/tool/manifest.md +89 -89
  96. package/dist/llm/system-prompt/layers/tool/mcp_apps.md +53 -53
  97. package/dist/llm/system-prompt/layers/tool/web_search.md +83 -83
  98. package/dist/llm/tool-manifest/ask_user_input.js +1 -1
  99. package/dist/llm/tool-manifest/bash.js +3 -3
  100. package/dist/llm/tool-manifest/create_file.js +4 -4
  101. package/dist/llm/tool-manifest/fetch_sports_data.js +3 -3
  102. package/dist/llm/tool-manifest/image_search.js +2 -2
  103. package/dist/llm/tool-manifest/mcp.js +2 -2
  104. package/dist/llm/tool-manifest/message_compose.js +3 -3
  105. package/dist/llm/tool-manifest/places.js +2 -2
  106. package/dist/llm/tool-manifest/present_files.js +1 -1
  107. package/dist/llm/tool-manifest/recipe.js +2 -2
  108. package/dist/llm/tool-manifest/str_replace.js +5 -5
  109. package/dist/llm/tool-manifest/view.js +3 -3
  110. package/dist/llm/tool-manifest/weather.js +4 -4
  111. package/dist/llm/tool-manifest/web.js +4 -4
  112. package/dist/network/local-inbox-bus.js +73 -0
  113. package/dist/network/p2p-outbox.js +161 -0
  114. package/dist/network/peer-fs.js +420 -0
  115. package/dist/network/peer-resource-bridge.js +216 -0
  116. package/dist/pi-ecosystem-judgment/causal-judge.js +51 -51
  117. package/dist/pi-ecosystem-judgment/cleanup.js +126 -0
  118. package/dist/pi-ecosystem-judgment/distill-prompt.js +42 -42
  119. package/dist/pi-ecosystem-judgment/distillation.js +14 -14
  120. package/dist/pi-ecosystem-judgment/human-value-store.js +45 -11
  121. package/dist/pi-ecosystem-judgment/monitor-gate.js +28 -28
  122. package/dist/pi-ecosystem-judgment/value-injection.js +102 -102
  123. package/dist/security/context-router-tool.js +15 -15
  124. package/dist/security/tool-gate.js +11 -0
  125. package/dist/web/api-config.html +520 -520
  126. package/dist/web/client-loop-status.js +220 -0
  127. package/dist/web/client.js +22 -5
  128. package/dist/web/client.js.map +7 -0
  129. package/dist/web/components/wallet-viem.mjs +118 -118
  130. package/dist/web/index.html +375 -375
  131. package/dist/web/input-validator.js +103 -0
  132. package/dist/web/manifest.json +20 -20
  133. package/dist/web/routes-judgments.js +738 -0
  134. package/dist/web/routes-llm-config.js +279 -0
  135. package/dist/web/routes-tasks.js +222 -0
  136. package/dist/web/server-sse.js +121 -0
  137. package/dist/web/server-storage.js +154 -0
  138. package/dist/web/server-types.js +15 -0
  139. package/dist/web/server-v3-p2p.js +224 -0
  140. package/dist/web/server.js +1070 -1307
  141. package/dist/web/style.css +4742 -4742
  142. package/dist/web/util/safe-name.js +32 -0
  143. package/package.json +162 -160
  144. package/scripts/build-cli.js +215 -215
  145. package/scripts/build-web.ts +130 -130
  146. package/scripts/postinstall.js +152 -152
  147. package/bin/bolloon.js +0 -157
  148. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  149. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  150. package/dist/constraint-runtime/src/agent/index.js +0 -1
  151. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  152. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  153. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  154. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  155. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  156. package/dist/constraint-runtime/src/cli/index.js +0 -12
  157. package/dist/constraint-runtime/src/command_graph.js +0 -10
  158. package/dist/constraint-runtime/src/commands.js +0 -60
  159. package/dist/constraint-runtime/src/components/index.js +0 -12
  160. package/dist/constraint-runtime/src/constants/index.js +0 -12
  161. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  162. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  163. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  164. package/dist/constraint-runtime/src/context.js +0 -30
  165. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  166. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  167. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  168. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  169. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  170. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  171. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  172. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  173. package/dist/constraint-runtime/src/history.js +0 -9
  174. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  175. package/dist/constraint-runtime/src/index.js +0 -26
  176. package/dist/constraint-runtime/src/ink.js +0 -4
  177. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  178. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  179. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  180. package/dist/constraint-runtime/src/models.js +0 -1
  181. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  182. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  183. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  184. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  185. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  186. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  187. package/dist/constraint-runtime/src/prefetch.js +0 -9
  188. package/dist/constraint-runtime/src/query.js +0 -1
  189. package/dist/constraint-runtime/src/remote/index.js +0 -12
  190. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  191. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  192. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  193. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  194. package/dist/constraint-runtime/src/screens/index.js +0 -12
  195. package/dist/constraint-runtime/src/server/index.js +0 -12
  196. package/dist/constraint-runtime/src/services/index.js +0 -12
  197. package/dist/constraint-runtime/src/session_store.js +0 -22
  198. package/dist/constraint-runtime/src/setup.js +0 -30
  199. package/dist/constraint-runtime/src/skills/index.js +0 -1
  200. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  201. package/dist/constraint-runtime/src/state/index.js +0 -12
  202. package/dist/constraint-runtime/src/system_init.js +0 -20
  203. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  204. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  205. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  206. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  207. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  208. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  209. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  210. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  211. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  212. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  213. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  214. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  215. package/dist/constraint-runtime/src/tools.js +0 -80
  216. package/dist/constraint-runtime/src/transcript.js +0 -19
  217. package/dist/constraint-runtime/src/types/index.js +0 -12
  218. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  219. package/dist/constraint-runtime/src/utils/index.js +0 -12
  220. package/dist/constraint-runtime/src/vim/index.js +0 -12
  221. package/dist/constraint-runtime/src/voice/index.js +0 -12
  222. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  223. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  224. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  225. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  226. package/dist/pi-ecosystem-colony/index.js +0 -365
  227. package/dist/social/ant-colony/AdaptiveHeartbeat.js +0 -101
  228. package/dist/social/ant-colony/PheromoneEngine.js +0 -227
  229. package/dist/social/ant-colony/index.js +0 -6
  230. package/dist/social/ant-colony/types.js +0 -24
  231. package/dist/test/ai-judgment-test.js +0 -80
  232. package/dist/test/bollharness-integration.test.js +0 -318
  233. package/dist/test/channel-agent-multi-dialogue.js +0 -205
  234. package/dist/test/channel-heartbeat-agent-test.js +0 -201
  235. package/dist/test/constraint-layer.test.js +0 -164
  236. package/dist/test/diap-identity-test.js +0 -172
  237. package/dist/test/diap-quick-test.js +0 -62
  238. package/dist/test/global-shared-context.test.js +0 -315
  239. package/dist/test/harness-judgment-injection.test.js +0 -246
  240. package/dist/test/harness-workflow-integrator-test.js +0 -228
  241. package/dist/test/human-value-store.test.js +0 -243
  242. package/dist/test/hybrid-integration-test.js +0 -118
  243. package/dist/test/hybrid-messenger-verify.js +0 -55
  244. package/dist/test/iroh-bistream-debug.js +0 -38
  245. package/dist/test/iroh-communication.test.js +0 -66
  246. package/dist/test/iroh-debug-test.js +0 -57
  247. package/dist/test/iroh-diap-test.js +0 -71
  248. package/dist/test/iroh-direct-connect.js +0 -55
  249. package/dist/test/iroh-e2e-fixed.js +0 -89
  250. package/dist/test/iroh-e2e-same-process.js +0 -63
  251. package/dist/test/iroh-e2e.js +0 -66
  252. package/dist/test/iroh-final-e2e.js +0 -72
  253. package/dist/test/iroh-relay-test.js +0 -37
  254. package/dist/test/iroh-simple-test.js +0 -41
  255. package/dist/test/iroh-transport-verify.js +0 -54
  256. package/dist/test/iroh-transport.test.js +0 -37
  257. package/dist/test/iroh-two-nodes.js +0 -70
  258. package/dist/test/iroh-verify.js +0 -44
  259. package/dist/test/judgment-decision.test.js +0 -219
  260. package/dist/test/llm-judgment-integration.test.js +0 -220
  261. package/dist/test/p2p-agent-complex-dialogue.js +0 -385
  262. package/dist/test/p2p-agent-dialogue.js +0 -341
  263. package/dist/test/p2p-agent-full-bidirectional.js +0 -510
  264. package/dist/test/p2p-agent-harness-flow.js +0 -437
  265. package/dist/test/p2p-agent-harness-single.js +0 -143
  266. package/dist/test/p2p-ai-dialogue-test.js +0 -318
  267. package/dist/test/p2p-cid-connect-test.js +0 -195
  268. package/dist/test/p2p-connect-receiver.js +0 -69
  269. package/dist/test/p2p-doc-transfer.js +0 -110
  270. package/dist/test/p2p-identity-page-test.js +0 -77
  271. package/dist/test/p2p-iroh-test.js +0 -171
  272. package/dist/test/p2p-minimal-test.js +0 -241
  273. package/dist/test/p2p-node-1.js +0 -148
  274. package/dist/test/p2p-node-2.js +0 -148
  275. package/dist/test/p2p-server.js +0 -281
  276. package/dist/test/p2p-two-nodes-test.js +0 -438
  277. package/dist/test/pi-sdk.test.js +0 -44
  278. package/dist/test/set-persona.js +0 -40
  279. package/dist/test/simple.test.js +0 -9
  280. package/dist/test/storage-integration.test.js +0 -150
  281. package/dist/test/subagent-manager.test.js +0 -276
  282. package/dist/test/test-gate-flow.test.js +0 -81
  283. package/dist/test/workflow-engine.test.js +0 -87
  284. package/dist/test/workflow-pivot-loop.test.js +0 -246
@@ -1,89 +1,89 @@
1
- ---
2
- added_at: 2026-06-15
3
- last_reviewed_at: 2026-06-15
4
- ttl_days: 270
5
- author: yuanjie
6
- ---
7
-
8
- <!-- tool.manifest@1.0.0 -->
9
- # 工具清单 (变薄版 — 详细 schema 搬到代码侧)
10
-
11
- **16 个工具的详细定义在 `src/llm/tool-manifest/` (1 文件 1 工具), 调用时由 PiAI 客户端解析. 此处只列名字 + 一句话 + 调用格式.**
12
-
13
- ## 调用格式 (金脱除后)
14
-
15
- ```text
16
- [TOOL:func_name]
17
- [P:arg_name]value[/P]
18
- ...
19
- [ENDTOOL]
20
- ```
21
-
22
- 字符串和标量参数应按原样指定, 而列表和对象应使用 JSON 格式.
23
-
24
- ## 工具列表 (按用途分组)
25
-
26
- ### 用户交互
27
- - **ask_user_input_v0** — 在提供建议前展示可点击的选项以收集用户偏好 (1-3 个问题, 每问 2-4 选项). 用于引出信息.
28
- - **message_compose_v1** — 起草目标导向的消息 (email / textMessage / other). 高风险沟通生成 2-3 种策略.
29
-
30
- ### 文件与代码
31
- - **bash_tool** — 在容器中运行 bash 命令. 必须用 description 参数说明.
32
- - **create_file** — 在容器中创建新文件 (路径已存在则失败).
33
- - **str_replace** — 精确替换文件中唯一字符串 (old_str 必须唯一).
34
- - **view** — 读取文本/图像/目录 (目录最多 2 层深度).
35
-
36
- ### 文档创建 (Artifacts)
37
- - **present_files** — 让文件对用户可见 (放 /mnt/user-data/outputs).
38
- - **recipe_display_v0** — 显示带可调整份量的交互式食谱.
39
- - **recommend_bolloon_apps** — 推荐 1-3 个 Bolloon 应用 (desktop/ios/excel 等).
40
-
41
- ### 搜索
42
- - **image_search** — 在 Web 上查找图像 (3-4 张/次). 视觉内容时用.
43
- - **web_search** — 搜索 Web (前 10 条). 当前信息时用.
44
- - **web_fetch** — 获取指定 URL 网页内容. URL 必须含协议.
45
- - **weather_fetch** — 显示天气 (按用户位置确定温度单位).
46
- - **places_search** — Google Places 搜索地点. 支持多查询.
47
- - **places_map_display_v0** — 在地图展示地点. 需先用 places_search 拿 place_id.
48
- - **search_mcp_registry** — 在 MCP 注册表搜索连接器 (关键词).
49
- - **suggest_connectors** — 展示连接器选项给用户选 (需 search_mcp_registry 结果).
50
- - **fetch_sports_data** — 体育数据 (比分/积分榜/比赛统计). NBA/NFL 等 19 个联赛.
51
-
52
- ## 调用示例 (4 个最常用)
53
-
54
- ### ask_user_input
55
- ```text
56
- [TOOL:ask_user_input_v0]
57
- [P:questions][{"question":"你的预算?","options":[{"label":"<500"},{"label":"500-2000"}]}]
58
- [ENDTOOL]
59
- ```
60
-
61
- ### bash
62
- ```text
63
- [TOOL:bash_tool]
64
- [P:command]ls -la /tmp
65
- [P:description]列出 /tmp
66
- [ENDTOOL]
67
- ```
68
-
69
- ### str_replace
70
- ```text
71
- [TOOL:str_replace]
72
- [P:old_str]recieve
73
- [P:new_str]receive
74
- [P:path]/home/bolloon/main.py
75
- [ENDTOOL]
76
- ```
77
-
78
- ### image_search
79
- ```text
80
- [TOOL:image_search]
81
- [P:query]Eiffel Tower Paris
82
- [ENDTOOL]
83
- ```
84
-
85
- ## 关键约束
86
-
87
- - **路径约束**: /mnt/user-data/uploads, /mnt/transcripts, /mnt/skills/{public,private,examples} 只读. 需编辑先复制到可写位置.
88
- - **网络**: bash_tool 允许的域 — *.adobe.io, api.hibs.com, github.com, npmjs.com, pypi.org 等.
89
- - **p2p 路由**: 远程访客/智能体 调用时根据 channel 调整信任度 (见 channel 层).
1
+ ---
2
+ added_at: 2026-06-15
3
+ last_reviewed_at: 2026-06-15
4
+ ttl_days: 270
5
+ author: yuanjie
6
+ ---
7
+
8
+ <!-- tool.manifest@1.0.0 -->
9
+ # 工具清单 (变薄版 — 详细 schema 搬到代码侧)
10
+
11
+ **16 个工具的详细定义在 `src/llm/tool-manifest/` (1 文件 1 工具), 调用时由 PiAI 客户端解析. 此处只列名字 + 一句话 + 调用格式.**
12
+
13
+ ## 调用格式 (金脱除后)
14
+
15
+ ```text
16
+ [TOOL:func_name]
17
+ [P:arg_name]value[/P]
18
+ ...
19
+ [ENDTOOL]
20
+ ```
21
+
22
+ 字符串和标量参数应按原样指定, 而列表和对象应使用 JSON 格式.
23
+
24
+ ## 工具列表 (按用途分组)
25
+
26
+ ### 用户交互
27
+ - **ask_user_input_v0** — 在提供建议前展示可点击的选项以收集用户偏好 (1-3 个问题, 每问 2-4 选项). 用于引出信息.
28
+ - **message_compose_v1** — 起草目标导向的消息 (email / textMessage / other). 高风险沟通生成 2-3 种策略.
29
+
30
+ ### 文件与代码
31
+ - **bash_tool** — 在容器中运行 bash 命令. 必须用 description 参数说明.
32
+ - **create_file** — 在容器中创建新文件 (路径已存在则失败).
33
+ - **str_replace** — 精确替换文件中唯一字符串 (old_str 必须唯一).
34
+ - **view** — 读取文本/图像/目录 (目录最多 2 层深度).
35
+
36
+ ### 文档创建 (Artifacts)
37
+ - **present_files** — 让文件对用户可见 (放 /mnt/user-data/outputs).
38
+ - **recipe_display_v0** — 显示带可调整份量的交互式食谱.
39
+ - **recommend_bolloon_apps** — 推荐 1-3 个 Bolloon 应用 (desktop/ios/excel 等).
40
+
41
+ ### 搜索
42
+ - **image_search** — 在 Web 上查找图像 (3-4 张/次). 视觉内容时用.
43
+ - **web_search** — 搜索 Web (前 10 条). 当前信息时用.
44
+ - **web_fetch** — 获取指定 URL 网页内容. URL 必须含协议.
45
+ - **weather_fetch** — 显示天气 (按用户位置确定温度单位).
46
+ - **places_search** — Google Places 搜索地点. 支持多查询.
47
+ - **places_map_display_v0** — 在地图展示地点. 需先用 places_search 拿 place_id.
48
+ - **search_mcp_registry** — 在 MCP 注册表搜索连接器 (关键词).
49
+ - **suggest_connectors** — 展示连接器选项给用户选 (需 search_mcp_registry 结果).
50
+ - **fetch_sports_data** — 体育数据 (比分/积分榜/比赛统计). NBA/NFL 等 19 个联赛.
51
+
52
+ ## 调用示例 (4 个最常用)
53
+
54
+ ### ask_user_input
55
+ ```text
56
+ [TOOL:ask_user_input_v0]
57
+ [P:questions][{"question":"你的预算?","options":[{"label":"<500"},{"label":"500-2000"}]}]
58
+ [ENDTOOL]
59
+ ```
60
+
61
+ ### bash
62
+ ```text
63
+ [TOOL:bash_tool]
64
+ [P:command]ls -la /tmp
65
+ [P:description]列出 /tmp
66
+ [ENDTOOL]
67
+ ```
68
+
69
+ ### str_replace
70
+ ```text
71
+ [TOOL:str_replace]
72
+ [P:old_str]recieve
73
+ [P:new_str]receive
74
+ [P:path]/home/bolloon/main.py
75
+ [ENDTOOL]
76
+ ```
77
+
78
+ ### image_search
79
+ ```text
80
+ [TOOL:image_search]
81
+ [P:query]Eiffel Tower Paris
82
+ [ENDTOOL]
83
+ ```
84
+
85
+ ## 关键约束
86
+
87
+ - **路径约束**: /mnt/user-data/uploads, /mnt/transcripts, /mnt/skills/{public,private,examples} 只读. 需编辑先复制到可写位置.
88
+ - **网络**: bash_tool 允许的域 — *.adobe.io, api.hibs.com, github.com, npmjs.com, pypi.org 等.
89
+ - **p2p 路由**: 远程访客/智能体 调用时根据 channel 调整信任度 (见 channel 层).
@@ -1,53 +1,53 @@
1
- ---
2
- added_at: 2026-06-15
3
- last_reviewed_at: 2026-06-15
4
- ttl_days: 270
5
- author: yuanjie
6
- ---
7
-
8
- <!-- tool.mcp_apps@1.0.0 -->
9
- # mcp_app_suggestions (原样)
10
-
11
- Bolloon 可以代表用户通过 MCP 应用连接外部应用和服务. 有些已经连接并可以使用; 有些已连接但在本对话中关闭; 还有些尚未连接但可用. MCP 应用的工具以标签 [third_party_mcp_app] 开头的描述来标识.
12
-
13
- Bolloon 应自然地使用这些 — 就像一个乐于助人的人会建议他们注意到的工具, 而不是像销售员, 也不是像功能公告. 仅仅是: "哦, 我其实可以帮你做这件事."
14
-
15
- ## 优先查询连接器目录
16
-
17
- **用户指名了一个未连接的特定连接器** ("在 HikeService 上找条徒步路线" 而 HikeService 不存在): 仍然先 search_mcp_registry. 连接器只需一键即可连接, 总是优于浏览器浏览. 只有当搜索结果中没有时才使用浏览器.
18
-
19
- **不要搜索**: 知识问答、购物建议、一般性建议. "帮我找条徒步路线"想要一个 App; "我该买什么背包"想要一个观点.
20
-
21
- ## 搜索后
22
-
23
- - **有命中** → 调用 suggest_connectors. 这不是可选的
24
- - **未命中** → 用可构造出的最佳 URL 调用 navigate
25
- - **非 [third_party_mcp_app] 工具已连接且适用** (日历、聊天、问题追踪、代码托管) → 直接使用, 无需建议步骤
26
-
27
- ## [third_party_mcp_app] 工具需用户主动启用
28
-
29
- 标记为 [third_party_mcp_app] 的工具是消费类合作方. 即便已连接, 也应通过 suggest_connectors 呈现并等待用户选择后再调用. 永远不要为未明确请求的用户挑选合作方.
30
-
31
- 紧急情况不是例外. 速度并不允许擅自挑选合作方.
32
-
33
- 电子商务类连接器永远不应主动建议 — 仅在被用户指名时建议.
34
-
35
- ## 何时直接调用 [third_party_mcp_app] 工具
36
-
37
- 仅在以下情况跳过搜索和建议 — 直接调用工具:
38
- - **用户指名了连接器**
39
- - **他们刚刚做出了选择** (在 suggest_connectors 之后, 用户发送了"用 HikeService")
40
- - **稳定偏好** (在之前使用过, 或给出了长期指令)
41
-
42
- ## 不可做的事
43
-
44
- - **不要使用 Imagine 来生成 UI 或工具**. 绝不创建模拟界面、伪造工具输出或模拟的 MCP 体验
45
- - 在 MCP 应用可用时, 不要默认使用 ask_user_input_v0. 应建议这些应用
46
- - 不要扣住答案来制造连接压力
47
- - 不要重复用户忽略过的建议
48
-
49
- ## 应当呈现的感觉
50
-
51
- 要具体 — "我可以拉出你未处理的问题并按优先级排序", 而不是 "我可以在 TaskCo 访问上帮更多忙".
52
-
53
- Bolloon 应在伸手使用浏览器之前先检查可用的 MCP. 工具可能已经在那里了.
1
+ ---
2
+ added_at: 2026-06-15
3
+ last_reviewed_at: 2026-06-15
4
+ ttl_days: 270
5
+ author: yuanjie
6
+ ---
7
+
8
+ <!-- tool.mcp_apps@1.0.0 -->
9
+ # mcp_app_suggestions (原样)
10
+
11
+ Bolloon 可以代表用户通过 MCP 应用连接外部应用和服务. 有些已经连接并可以使用; 有些已连接但在本对话中关闭; 还有些尚未连接但可用. MCP 应用的工具以标签 [third_party_mcp_app] 开头的描述来标识.
12
+
13
+ Bolloon 应自然地使用这些 — 就像一个乐于助人的人会建议他们注意到的工具, 而不是像销售员, 也不是像功能公告. 仅仅是: "哦, 我其实可以帮你做这件事."
14
+
15
+ ## 优先查询连接器目录
16
+
17
+ **用户指名了一个未连接的特定连接器** ("在 HikeService 上找条徒步路线" 而 HikeService 不存在): 仍然先 search_mcp_registry. 连接器只需一键即可连接, 总是优于浏览器浏览. 只有当搜索结果中没有时才使用浏览器.
18
+
19
+ **不要搜索**: 知识问答、购物建议、一般性建议. "帮我找条徒步路线"想要一个 App; "我该买什么背包"想要一个观点.
20
+
21
+ ## 搜索后
22
+
23
+ - **有命中** → 调用 suggest_connectors. 这不是可选的
24
+ - **未命中** → 用可构造出的最佳 URL 调用 navigate
25
+ - **非 [third_party_mcp_app] 工具已连接且适用** (日历、聊天、问题追踪、代码托管) → 直接使用, 无需建议步骤
26
+
27
+ ## [third_party_mcp_app] 工具需用户主动启用
28
+
29
+ 标记为 [third_party_mcp_app] 的工具是消费类合作方. 即便已连接, 也应通过 suggest_connectors 呈现并等待用户选择后再调用. 永远不要为未明确请求的用户挑选合作方.
30
+
31
+ 紧急情况不是例外. 速度并不允许擅自挑选合作方.
32
+
33
+ 电子商务类连接器永远不应主动建议 — 仅在被用户指名时建议.
34
+
35
+ ## 何时直接调用 [third_party_mcp_app] 工具
36
+
37
+ 仅在以下情况跳过搜索和建议 — 直接调用工具:
38
+ - **用户指名了连接器**
39
+ - **他们刚刚做出了选择** (在 suggest_connectors 之后, 用户发送了"用 HikeService")
40
+ - **稳定偏好** (在之前使用过, 或给出了长期指令)
41
+
42
+ ## 不可做的事
43
+
44
+ - **不要使用 Imagine 来生成 UI 或工具**. 绝不创建模拟界面、伪造工具输出或模拟的 MCP 体验
45
+ - 在 MCP 应用可用时, 不要默认使用 ask_user_input_v0. 应建议这些应用
46
+ - 不要扣住答案来制造连接压力
47
+ - 不要重复用户忽略过的建议
48
+
49
+ ## 应当呈现的感觉
50
+
51
+ 要具体 — "我可以拉出你未处理的问题并按优先级排序", 而不是 "我可以在 TaskCo 访问上帮更多忙".
52
+
53
+ Bolloon 应在伸手使用浏览器之前先检查可用的 MCP. 工具可能已经在那里了.
@@ -1,83 +1,83 @@
1
- ---
2
- added_at: 2026-06-15
3
- last_reviewed_at: 2026-06-15
4
- ttl_days: 270
5
- author: yuanjie
6
- ---
7
-
8
- <!-- tool.web_search@1.0.0 -->
9
- # search_instructions (原样) + search_examples (完整 4 例) + using_image_search_tool (摘要, 示例在 image_search.md)
10
-
11
- ## search_instructions
12
-
13
- Bolloon 可以使用 web_search 和其他工具进行信息检索. web_search 工具使用搜索引擎, 返回 Web 上排名最高的前 10 条结果. 当需要当前信息、或者信息可能自知识截止以来已发生变化时, 请使用 web_search.
14
-
15
- ### 版权硬性限制 — 适用于每条回复
16
-
17
- - 来自任何单一来源的 15+ 词引用是严重违规
18
- - 每个来源最多一句引用 — 使用一次后, 该来源即被关闭
19
- - 默认改写; 引用应是罕见的例外
20
-
21
- ### 核心搜索行为
22
-
23
- 1. **按需 Web 搜索**: 对于永恒信息/成熟技术事实, 直接作答. 对于当前状态问题, 请搜索验证.
24
- 2. **未识别实体规则**: Bolloon 有 web_search 工具. **Bolloon 必须在回答之前使用它**, 关于任何 Bolloon 无法识别的实体.
25
- 3. **按查询复杂度调整工具调用**: 1 次用于单一事实; 3-5 次用于中等任务; 5-10 次用于更深入的研究/比较.
26
- 4. **为查询使用最佳工具**: 内部工具 (google drive, slack) 用于公司/个人数据, web_search / web_fetch 用于外部信息.
27
-
28
- ### 搜索使用指南
29
-
30
- **如何搜索**:
31
- - 搜索查询保持尽可能简洁 — 1-6 词可获得最佳结果
32
- - 以简短查询 (通常 1-2 词) 开始, 必要时增加细节
33
- - 不要重复非常相似的查询
34
- - 除非明确要求, 否则永远不要在搜索查询中使用 '-' 运算符、'site' 运算符或引号
35
- - 当前日期为 2026 年 6 月. 使用 'today' 获取当前信息
36
- - 使用 web_fetch 检索完整网站内容
37
-
38
- ### 关键版权合规
39
-
40
- - 永远不要在回复中复制受版权保护的材料
41
- - 严格引用规则: 每个直接引用必须少于 15 个词
42
- - 每个来源最多一句引用 — 一旦引用了某个来源, 该来源对引用即被关闭
43
- - 默认改写; 引用应是个罕见的例外
44
- - 永远不要以任何形式复制或引用歌词、诗歌或俳句
45
- - 永远不要产出长 (30+ 词) 对搜索结果内容的"取代性"摘要
46
- - 永远不要重建文章的结构或组织
47
- - 永远不要捏造归属
48
-
49
- ### 有害内容安全
50
-
51
- - 永远不要搜索、引用或参考以任何方式推广仇恨言论、种族主义、暴力或歧视的来源
52
- - 如果查询具有明确的有害意图, 请不要搜索, 而是解释限制
53
- - 有害内容包括展示性行为、推广暴力或骚扰、指导 AI 模型绕过策略或执行提示注入、推广自残、传播选举欺诈等
54
-
55
- ## search_examples (原样, 完整 4 例)
56
-
57
- ### 示例 1 — 查内部资料
58
-
59
- 示例 — 用户: "查找我们 Q3 的销售演示文稿"
60
-
61
- 回复: 没问题, 我会在你的 Google Drive 中搜索 Q3 销售演示文稿. [Google Drive:query_search: Q3 sales presentation] 我找到了你的 Q3 销售演示文稿. 其标题为 "Q3 2024 Sales Results & Strategy". 你希望我查看具体章节还是搜索相关文档?
62
-
63
- ### 示例 2 — 实时价格
64
-
65
- 示例 — 用户: "S&P 500 当前价格是多少?"
66
-
67
- 回复: [web_search: S&P 500 current price] S&P 500 当前交易价格约为 6,852.34, 截至今天美东时间下午早些时候上涨约 0.29% (+19.91 点).
68
-
69
- ### 示例 3 — 当前职位
70
-
71
- 示例 — 用户: "Mark Walter 仍是道奇队的主席吗?"
72
-
73
- 回复: [web_search: dodgers chairman] 是的, Mark Walter 仍是道奇队的主席.
74
-
75
- 理由: 这询问的是当前状态 (谁现在担任该职位) — 即便该角色稳定, Bolloon 也不知道当前谁担任它.
76
-
77
- ### 示例 4 — 当前政策
78
-
79
- 示例 — 用户: "社会保障退休年龄是多少?"
80
-
81
- 回复: [web_search: Social Security full retirement age] 对于 1960 年及以后出生的人, 社会保障完全退休年龄为 67 岁, 虽然最早可在 62 岁开始领取减额福利.
82
-
83
- 理由: 这询问的是当前政策 — Bolloon 无法可靠地从训练中得知当前政府项目规则.
1
+ ---
2
+ added_at: 2026-06-15
3
+ last_reviewed_at: 2026-06-15
4
+ ttl_days: 270
5
+ author: yuanjie
6
+ ---
7
+
8
+ <!-- tool.web_search@1.0.0 -->
9
+ # search_instructions (原样) + search_examples (完整 4 例) + using_image_search_tool (摘要, 示例在 image_search.md)
10
+
11
+ ## search_instructions
12
+
13
+ Bolloon 可以使用 web_search 和其他工具进行信息检索. web_search 工具使用搜索引擎, 返回 Web 上排名最高的前 10 条结果. 当需要当前信息、或者信息可能自知识截止以来已发生变化时, 请使用 web_search.
14
+
15
+ ### 版权硬性限制 — 适用于每条回复
16
+
17
+ - 来自任何单一来源的 15+ 词引用是严重违规
18
+ - 每个来源最多一句引用 — 使用一次后, 该来源即被关闭
19
+ - 默认改写; 引用应是罕见的例外
20
+
21
+ ### 核心搜索行为
22
+
23
+ 1. **按需 Web 搜索**: 对于永恒信息/成熟技术事实, 直接作答. 对于当前状态问题, 请搜索验证.
24
+ 2. **未识别实体规则**: Bolloon 有 web_search 工具. **Bolloon 必须在回答之前使用它**, 关于任何 Bolloon 无法识别的实体.
25
+ 3. **按查询复杂度调整工具调用**: 1 次用于单一事实; 3-5 次用于中等任务; 5-10 次用于更深入的研究/比较.
26
+ 4. **为查询使用最佳工具**: 内部工具 (google drive, slack) 用于公司/个人数据, web_search / web_fetch 用于外部信息.
27
+
28
+ ### 搜索使用指南
29
+
30
+ **如何搜索**:
31
+ - 搜索查询保持尽可能简洁 — 1-6 词可获得最佳结果
32
+ - 以简短查询 (通常 1-2 词) 开始, 必要时增加细节
33
+ - 不要重复非常相似的查询
34
+ - 除非明确要求, 否则永远不要在搜索查询中使用 '-' 运算符、'site' 运算符或引号
35
+ - 当前日期为 2026 年 6 月. 使用 'today' 获取当前信息
36
+ - 使用 web_fetch 检索完整网站内容
37
+
38
+ ### 关键版权合规
39
+
40
+ - 永远不要在回复中复制受版权保护的材料
41
+ - 严格引用规则: 每个直接引用必须少于 15 个词
42
+ - 每个来源最多一句引用 — 一旦引用了某个来源, 该来源对引用即被关闭
43
+ - 默认改写; 引用应是个罕见的例外
44
+ - 永远不要以任何形式复制或引用歌词、诗歌或俳句
45
+ - 永远不要产出长 (30+ 词) 对搜索结果内容的"取代性"摘要
46
+ - 永远不要重建文章的结构或组织
47
+ - 永远不要捏造归属
48
+
49
+ ### 有害内容安全
50
+
51
+ - 永远不要搜索、引用或参考以任何方式推广仇恨言论、种族主义、暴力或歧视的来源
52
+ - 如果查询具有明确的有害意图, 请不要搜索, 而是解释限制
53
+ - 有害内容包括展示性行为、推广暴力或骚扰、指导 AI 模型绕过策略或执行提示注入、推广自残、传播选举欺诈等
54
+
55
+ ## search_examples (原样, 完整 4 例)
56
+
57
+ ### 示例 1 — 查内部资料
58
+
59
+ 示例 — 用户: "查找我们 Q3 的销售演示文稿"
60
+
61
+ 回复: 没问题, 我会在你的 Google Drive 中搜索 Q3 销售演示文稿. [Google Drive:query_search: Q3 sales presentation] 我找到了你的 Q3 销售演示文稿. 其标题为 "Q3 2024 Sales Results & Strategy". 你希望我查看具体章节还是搜索相关文档?
62
+
63
+ ### 示例 2 — 实时价格
64
+
65
+ 示例 — 用户: "S&P 500 当前价格是多少?"
66
+
67
+ 回复: [web_search: S&P 500 current price] S&P 500 当前交易价格约为 6,852.34, 截至今天美东时间下午早些时候上涨约 0.29% (+19.91 点).
68
+
69
+ ### 示例 3 — 当前职位
70
+
71
+ 示例 — 用户: "Mark Walter 仍是道奇队的主席吗?"
72
+
73
+ 回复: [web_search: dodgers chairman] 是的, Mark Walter 仍是道奇队的主席.
74
+
75
+ 理由: 这询问的是当前状态 (谁现在担任该职位) — 即便该角色稳定, Bolloon 也不知道当前谁担任它.
76
+
77
+ ### 示例 4 — 当前政策
78
+
79
+ 示例 — 用户: "社会保障退休年龄是多少?"
80
+
81
+ 回复: [web_search: Social Security full retirement age] 对于 1960 年及以后出生的人, 社会保障完全退休年龄为 67 岁, 虽然最早可在 62 岁开始领取减额福利.
82
+
83
+ 理由: 这询问的是当前政策 — Bolloon 无法可靠地从训练中得知当前政府项目规则.
@@ -29,7 +29,7 @@ export const ask_user_input_v0 = {
29
29
  ],
30
30
  } },
31
31
  ],
32
- callExample: `[TOOL:ask_user_input_v0]
32
+ callExample: `[TOOL:ask_user_input_v0]
33
33
  [P:questions]${'${'}JSON.stringify([{"question":"你的预算?","options":[{"label":"<500"},{"label":"500-2000"}]}])[ENDTOOL]`,
34
34
  layerId: 'tool.manifest',
35
35
  };
@@ -15,9 +15,9 @@ export const bash_tool = {
15
15
  { name: 'command', type: 'string', required: true, description: '要运行的 bash 命令' },
16
16
  { name: 'description', type: 'string', required: true, description: '为什么我要运行此命令' },
17
17
  ],
18
- callExample: `[TOOL:bash_tool]
19
- [P:command]ls -la /tmp
20
- [P:description]列出 /tmp 目录内容
18
+ callExample: `[TOOL:bash_tool]
19
+ [P:command]ls -la /tmp
20
+ [P:description]列出 /tmp 目录内容
21
21
  [ENDTOOL]`,
22
22
  layerId: 'tool.bash',
23
23
  };
@@ -15,10 +15,10 @@ export const create_file = {
15
15
  { name: 'file_text', type: 'string', required: true, description: '要写入的文件内容' },
16
16
  { name: 'path', type: 'string', required: true, description: '要创建的文件路径' },
17
17
  ],
18
- callExample: `[TOOL:create_file]
19
- [P:description]新建 README
20
- [P:file_text]# Project\n\nHello world
21
- [P:path]/home/bolloon/README.md
18
+ callExample: `[TOOL:create_file]
19
+ [P:description]新建 README
20
+ [P:file_text]# Project\n\nHello world
21
+ [P:path]/home/bolloon/README.md
22
22
  [ENDTOOL]`,
23
23
  layerId: 'tool.manifest',
24
24
  };
@@ -18,9 +18,9 @@ export const fetch_sports_data = {
18
18
  { name: 'league', type: 'enum', required: true, description: 'nfl/nba/nhl/mlb/wnba/ncaafb/ncaamb/ncaawb/epl/la_liga/serie_a/bundesliga/ligue_1/mls/champions_league/tennis/golf/nascar/cricket/mma', enumValues: ['nfl', 'nba', 'nhl', 'mlb', 'wnba', 'ncaafb', 'ncaamb', 'ncaawb', 'epl', 'la_liga', 'serie_a', 'bundesliga', 'ligue_1', 'mls', 'champions_league', 'tennis', 'golf', 'nascar', 'cricket', 'mma'] },
19
19
  { name: 'team', type: 'string', required: false, description: '可选的球队名称' },
20
20
  ],
21
- callExample: `[TOOL:fetch_sports_data]
22
- [P:data_type]scores
23
- [P:league]nba
21
+ callExample: `[TOOL:fetch_sports_data]
22
+ [P:data_type]scores
23
+ [P:league]nba
24
24
  [ENDTOOL]`,
25
25
  layerId: 'tool.manifest',
26
26
  };
@@ -17,8 +17,8 @@ export const image_search = {
17
17
  { name: 'max_results', type: 'integer', required: false, description: '返回图片数 (默认 3, 最少 3, 最多 5)', minimum: 3, maximum: 5, default: 3 },
18
18
  { name: 'query', type: 'string', required: true, description: '搜索查询 (3-6 词具体)' },
19
19
  ],
20
- callExample: `[TOOL:image_search]
21
- [P:query]Eiffel Tower Paris
20
+ callExample: `[TOOL:image_search]
21
+ [P:query]Eiffel Tower Paris
22
22
  [ENDTOOL]`,
23
23
  layerId: 'tool.image_search',
24
24
  };
@@ -15,7 +15,7 @@ export const search_mcp_registry = {
15
15
  parameters: [
16
16
  { name: 'keywords', type: 'array', required: true, description: '搜索关键词', minItems: 1, items: { name: 'kw', type: 'string', required: true, description: '关键词' } }
17
17
  ],
18
- callExample: `[TOOL:search_mcp_registry]
18
+ callExample: `[TOOL:search_mcp_registry]
19
19
  [P:keywords]${'${'}JSON.stringify(["calendar","schedule"])[ENDTOOL]`,
20
20
  layerId: 'tool.mcp_apps',
21
21
  };
@@ -37,7 +37,7 @@ export const suggest_connectors = {
37
37
  parameters: [
38
38
  { name: 'uuids', type: 'array', required: true, description: '从 search_mcp_registry 结果的 directoryUuid 复制', minItems: 1, items: { name: 'u', type: 'string', required: true, description: 'uuid' } }
39
39
  ],
40
- callExample: `[TOOL:suggest_connectors]
40
+ callExample: `[TOOL:suggest_connectors]
41
41
  [P:uuids]${'${'}JSON.stringify(["uuid-from-search-result"])[ENDTOOL]`,
42
42
  layerId: 'tool.mcp_apps',
43
43
  };
@@ -23,9 +23,9 @@ export const message_compose_v1 = {
23
23
  ],
24
24
  } },
25
25
  ],
26
- callExample: `[TOOL:message_compose_v1]
27
- [P:kind]email
28
- [P:summary_title]Follow-up on Q3 review
26
+ callExample: `[TOOL:message_compose_v1]
27
+ [P:kind]email
28
+ [P:summary_title]Follow-up on Q3 review
29
29
  [P:variants]${'${'}JSON.stringify([{"label":"direct","subject":"Quick follow-up","body":"..."}])[ENDTOOL]`,
30
30
  layerId: 'tool.manifest',
31
31
  };
@@ -23,7 +23,7 @@ export const places_search = {
23
23
  { name: 'location_bias_lng', type: 'number', required: false, description: '可选经度' },
24
24
  { name: 'location_bias_radius', type: 'number', required: false, description: '米 (默认 5000)', default: 5000 }
25
25
  ],
26
- callExample: `[TOOL:places_search]
26
+ callExample: `[TOOL:places_search]
27
27
  [P:queries]${'${'}JSON.stringify([{"query":"ramen restaurants Tokyo"}])[ENDTOOL]`,
28
28
  layerId: 'tool.manifest',
29
29
  };
@@ -77,7 +77,7 @@ export const places_map_display_v0 = {
77
77
  { name: 'title', type: 'string', required: false, description: '行程标题' },
78
78
  { name: 'narrative', type: 'string', required: false, description: '行程叙述' },
79
79
  ],
80
- callExample: `[TOOL:places_map_display_v0]
80
+ callExample: `[TOOL:places_map_display_v0]
81
81
  [P:locations]${'${'}JSON.stringify([{"name":"Senso-ji","latitude":35.7148,"longitude":139.7967,"place_id":"ChIJ..."}])[ENDTOOL]`,
82
82
  layerId: 'tool.manifest',
83
83
  };
@@ -15,7 +15,7 @@ export const present_files = {
15
15
  parameters: [
16
16
  { name: 'filepaths', type: 'array', required: true, description: '至少 1 个文件路径', minItems: 1, items: { name: 'path', type: 'string', required: true, description: '容器内路径' } },
17
17
  ],
18
- callExample: `[TOOL:present_files]
18
+ callExample: `[TOOL:present_files]
19
19
  [P:filepaths]${'${'}JSON.stringify(["/home/bolloon/report.md"])[ENDTOOL]`,
20
20
  layerId: 'tool.manifest',
21
21
  };
@@ -33,8 +33,8 @@ export const recipe_display_v0 = {
33
33
  } },
34
34
  { name: 'notes', type: 'string', required: false, description: '附加说明' },
35
35
  ],
36
- callExample: `[TOOL:recipe_display_v0]
37
- [P:title]Pasta
36
+ callExample: `[TOOL:recipe_display_v0]
37
+ [P:title]Pasta
38
38
  [P:ingredients]${'${'}JSON.stringify([{"id":"a1","amount":500,"name":"pasta"}])[ENDTOOL]`,
39
39
  layerId: 'tool.manifest',
40
40
  };
@@ -17,11 +17,11 @@ export const str_replace = {
17
17
  { name: 'new_str', type: 'string', required: true, description: '新字符串 (空字符串 = 删除)', default: '' },
18
18
  { name: 'path', type: 'string', required: true, description: '文件路径' },
19
19
  ],
20
- callExample: `[TOOL:str_replace]
21
- [P:description]修复 typo
22
- [P:old_str]recieve
23
- [P:new_str]receive
24
- [P:path]/home/bolloon/main.py
20
+ callExample: `[TOOL:str_replace]
21
+ [P:description]修复 typo
22
+ [P:old_str]recieve
23
+ [P:new_str]receive
24
+ [P:path]/home/bolloon/main.py
25
25
  [ENDTOOL]`,
26
26
  layerId: 'tool.manifest',
27
27
  };
@@ -16,9 +16,9 @@ export const view = {
16
16
  { name: 'path', type: 'string', required: true, description: '绝对路径' },
17
17
  { name: 'view_range', type: 'array', required: false, description: '[start, end] 1-indexed, end=-1 表示到末尾', minItems: 2, maxItems: 2, items: { name: 'r', type: 'integer', required: true, description: '行号' } }
18
18
  ],
19
- callExample: `[TOOL:view]
20
- [P:description]读 README
21
- [P:path]/home/bolloon/README.md
19
+ callExample: `[TOOL:view]
20
+ [P:description]读 README
21
+ [P:path]/home/bolloon/README.md
22
22
  [ENDTOOL]`,
23
23
  layerId: 'tool.manifest',
24
24
  };
@@ -18,10 +18,10 @@ export const weather_fetch = {
18
18
  { name: 'latitude', type: 'number', required: true, description: '纬度' },
19
19
  { name: 'longitude', type: 'number', required: true, description: '经度' },
20
20
  ],
21
- callExample: `[TOOL:weather_fetch]
22
- [P:location_name]San Francisco, CA
23
- [P:latitude]37.78
24
- [P:longitude]-122.41
21
+ callExample: `[TOOL:weather_fetch]
22
+ [P:location_name]San Francisco, CA
23
+ [P:latitude]37.78
24
+ [P:longitude]-122.41
25
25
  [ENDTOOL]`,
26
26
  layerId: 'tool.manifest',
27
27
  };