@bolloon/bolloon-agent 0.1.36 → 0.1.37

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 (530) hide show
  1. package/dist/web/client.js +2861 -3746
  2. package/dist/web/components/p2p/index.js +226 -264
  3. package/dist/web/ui/message-renderer.js +323 -434
  4. package/dist/web/ui/step-timeline.js +255 -351
  5. package/package.json +2 -2
  6. package/.auto-evolve-calls +0 -1
  7. package/.last-auto-evolve-baseline +0 -1
  8. package/.playwright-mcp/page-2026-06-16T07-51-45-706Z.yml +0 -130
  9. package/.playwright-mcp/page-2026-06-16T07-56-44-116Z.yml +0 -131
  10. package/Bolloon.md +0 -144
  11. package/Dive-into/CITATION.cff +0 -17
  12. package/Dive-into/LICENSE +0 -25
  13. package/Dive-into/README.md +0 -598
  14. package/Dive-into/README_zh.md +0 -599
  15. package/Dive-into/assets/context.png +0 -0
  16. package/Dive-into/assets/extensibility.png +0 -0
  17. package/Dive-into/assets/iteration.png +0 -0
  18. package/Dive-into/assets/layered_architecture.png +0 -0
  19. package/Dive-into/assets/main_structure.png +0 -0
  20. package/Dive-into/assets/permission.png +0 -0
  21. package/Dive-into/assets/session_compact.png +0 -0
  22. package/Dive-into/assets/subagent.png +0 -0
  23. package/Dive-into/paper/Dive_into_Claude_Code.pdf +0 -0
  24. package/dist/agents/constraint-layer.js.map +0 -1
  25. package/dist/agents/pi-sdk.js.map +0 -1
  26. package/dist/agents/workflow-engine.js.map +0 -1
  27. package/dist/bollharness/src/index.js +0 -5
  28. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  29. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  30. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  31. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  32. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  33. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  34. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  35. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  36. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  37. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  38. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  39. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  40. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  41. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  42. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  43. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  44. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  45. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  46. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  47. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  48. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  49. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  50. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  51. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  52. package/dist/bollharness/src/scripts/context_router.js +0 -67
  53. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  54. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  55. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  56. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  57. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  58. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  59. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  60. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  61. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  62. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  63. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  64. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  65. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  66. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  67. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  68. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  69. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  70. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  71. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  72. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  73. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  74. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  75. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  76. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  77. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  78. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  79. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  80. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  81. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  82. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  83. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  84. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  85. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  86. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  87. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  88. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  89. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  90. package/dist/bollharness-integration/context-router.js.map +0 -1
  91. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  92. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  93. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  94. package/dist/bollharness-integration/index.js.map +0 -1
  95. package/dist/bollharness-integration/integration.js.map +0 -1
  96. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  97. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  98. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  99. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  100. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  101. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  102. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  103. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  104. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  105. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  106. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  107. package/dist/constraint-runtime/src/agent/index.js +0 -1
  108. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  109. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  110. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  111. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  112. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  113. package/dist/constraint-runtime/src/cli/index.js +0 -12
  114. package/dist/constraint-runtime/src/command_graph.js +0 -10
  115. package/dist/constraint-runtime/src/commands.js +0 -60
  116. package/dist/constraint-runtime/src/components/index.js +0 -12
  117. package/dist/constraint-runtime/src/constants/index.js +0 -12
  118. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  119. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  120. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  121. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  122. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  123. package/dist/constraint-runtime/src/context.js +0 -30
  124. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  125. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  126. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  127. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  128. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  129. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  130. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  131. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  132. package/dist/constraint-runtime/src/history.js +0 -9
  133. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  134. package/dist/constraint-runtime/src/index.js +0 -26
  135. package/dist/constraint-runtime/src/ink.js +0 -4
  136. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  137. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  138. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  139. package/dist/constraint-runtime/src/models.js +0 -1
  140. package/dist/constraint-runtime/src/models.js.map +0 -1
  141. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  142. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  143. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  144. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  145. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  146. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  147. package/dist/constraint-runtime/src/prefetch.js +0 -9
  148. package/dist/constraint-runtime/src/query.js +0 -1
  149. package/dist/constraint-runtime/src/remote/index.js +0 -12
  150. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  151. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  152. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  153. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  154. package/dist/constraint-runtime/src/screens/index.js +0 -12
  155. package/dist/constraint-runtime/src/server/index.js +0 -12
  156. package/dist/constraint-runtime/src/services/index.js +0 -12
  157. package/dist/constraint-runtime/src/session_store.js +0 -22
  158. package/dist/constraint-runtime/src/setup.js +0 -30
  159. package/dist/constraint-runtime/src/skills/index.js +0 -1
  160. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  161. package/dist/constraint-runtime/src/state/index.js +0 -12
  162. package/dist/constraint-runtime/src/system_init.js +0 -20
  163. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  164. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  165. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  166. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  167. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  168. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  169. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  170. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  171. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  172. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  173. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  174. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  175. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  176. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  177. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  178. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  179. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  180. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  181. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  182. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  183. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  184. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  185. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  186. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  187. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  188. package/dist/constraint-runtime/src/tools.js +0 -80
  189. package/dist/constraint-runtime/src/transcript.js +0 -19
  190. package/dist/constraint-runtime/src/types/index.js +0 -12
  191. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  192. package/dist/constraint-runtime/src/utils/index.js +0 -12
  193. package/dist/constraint-runtime/src/vim/index.js +0 -12
  194. package/dist/constraint-runtime/src/voice/index.js +0 -12
  195. package/dist/constraints/index.js.map +0 -1
  196. package/dist/documents/reader.js.map +0 -1
  197. package/dist/llm/config-store.js.map +0 -1
  198. package/dist/llm/pi-ai.js.map +0 -1
  199. package/dist/network/agent-network.js.map +0 -1
  200. package/dist/network/iroh-integration.js.map +0 -1
  201. package/dist/network/iroh-transport.js.map +0 -1
  202. package/dist/network/p2p.js.map +0 -1
  203. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  204. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  205. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  206. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  207. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  208. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  209. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  210. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  211. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  212. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  213. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  214. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  215. package/dist/social/ant-colony/types.js.map +0 -1
  216. package/dist/social/channels/ChannelManager.js.map +0 -1
  217. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  218. package/dist/social/channels/InterestMatcher.js.map +0 -1
  219. package/dist/social/channels/types.js.map +0 -1
  220. package/dist/social/global-shared-context.js.map +0 -1
  221. package/dist/social/heartbeat.js.map +0 -1
  222. package/dist/web/components/p2p/P2PModal.js +0 -188
  223. package/dist/web/components/p2p/p2p-modal.js +0 -657
  224. package/dist/web/components/p2p/p2p-tools.js +0 -248
  225. package/lefthook.yml +0 -33
  226. package/scripts/auto-evolve-loop.ts +0 -481
  227. package/scripts/auto-evolve-oneshot.sh +0 -155
  228. package/scripts/auto-evolve-snapshot.sh +0 -136
  229. package/scripts/build-cli.js +0 -216
  230. package/scripts/build-web.ts +0 -116
  231. package/scripts/detect-schema-changes.sh +0 -48
  232. package/scripts/diff-reviewer.ts +0 -159
  233. package/scripts/postinstall.js +0 -153
  234. package/scripts/validate-system-prompt.ts +0 -142
  235. package/scripts/weekly-report.ts +0 -364
  236. package/src/agents/agent-manifest-protocol.ts +0 -117
  237. package/src/agents/constraint-layer.ts +0 -309
  238. package/src/agents/iroh-secret.ts +0 -32
  239. package/src/agents/p2p-chat-tools.ts +0 -383
  240. package/src/agents/p2p-document-tools.ts +0 -347
  241. package/src/agents/permission-mode.ts +0 -127
  242. package/src/agents/pi-sdk.ts +0 -2895
  243. package/src/agents/pre-tool-validator.ts +0 -213
  244. package/src/agents/protocol.ts +0 -398
  245. package/src/agents/shell-guard.ts +0 -417
  246. package/src/agents/shell-tool.ts +0 -103
  247. package/src/agents/skill-loader.ts +0 -202
  248. package/src/agents/subagent-manager.ts +0 -553
  249. package/src/agents/workflow-engine.ts +0 -332
  250. package/src/agents/workflow-pivot-loop.ts +0 -766
  251. package/src/bollharness/.sanitize-report.json +0 -13
  252. package/src/bollharness/CLAUDE.md +0 -73
  253. package/src/bollharness/LICENSE +0 -21
  254. package/src/bollharness/README.md +0 -143
  255. package/src/bollharness/README.zh-CN.md +0 -131
  256. package/src/bollharness/package.json +0 -20
  257. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  258. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  259. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  260. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  261. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  262. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  263. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  264. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  265. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  266. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  267. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  268. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  269. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  270. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  271. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  272. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  273. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  274. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  275. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  276. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  277. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  278. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  279. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  280. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  281. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  282. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  283. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  284. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  285. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  286. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  287. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  288. package/src/bollharness/src/index.ts +0 -5
  289. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  290. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  291. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  292. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  293. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  294. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  295. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  296. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  297. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  298. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  299. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  300. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  301. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  302. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  303. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  304. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  305. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  306. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  307. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  308. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  309. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  310. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  311. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  312. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  313. package/src/bollharness/src/scripts/context_router.ts +0 -76
  314. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  315. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  316. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  317. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  318. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  319. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  320. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  321. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  322. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  323. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  324. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  325. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  326. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  327. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  328. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  329. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  330. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  331. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  332. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  333. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  334. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  335. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  336. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  337. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  338. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  339. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  340. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  341. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  342. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  343. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  344. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  345. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  346. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  347. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  348. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  349. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  350. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  351. package/src/bollharness/templates/persona/default.json +0 -19
  352. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  353. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  354. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  355. package/src/bollharness-integration/context-chain-router.ts +0 -474
  356. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  357. package/src/bollharness-integration/context-router.ts +0 -583
  358. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  359. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  360. package/src/bollharness-integration/guard-checker.ts +0 -451
  361. package/src/bollharness-integration/index.ts +0 -195
  362. package/src/bollharness-integration/integration.ts +0 -538
  363. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  364. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  365. package/src/bollharness-integration/skill-adapter.ts +0 -646
  366. package/src/bootstrap/bootstrap.ts +0 -135
  367. package/src/bootstrap/context-collector.ts +0 -371
  368. package/src/bootstrap/context-hierarchy.ts +0 -283
  369. package/src/bootstrap/lifecycle-hooks.ts +0 -289
  370. package/src/bootstrap/project-context.ts +0 -171
  371. package/src/cli/interface.ts +0 -211
  372. package/src/cli-entry.ts +0 -304
  373. package/src/constraints/index.ts +0 -6
  374. package/src/context-compaction/auto-compact.ts +0 -153
  375. package/src/context-compaction/budget-gate.ts +0 -32
  376. package/src/context-compaction/budget-reduce.ts +0 -37
  377. package/src/context-compaction/context-collapse.ts +0 -72
  378. package/src/context-compaction/index.ts +0 -24
  379. package/src/context-compaction/microcompact.ts +0 -54
  380. package/src/context-compaction/pipeline.ts +0 -133
  381. package/src/context-compaction/snip.ts +0 -51
  382. package/src/context-compaction/token-estimator.ts +0 -36
  383. package/src/context-compaction/types.ts +0 -99
  384. package/src/documents/reader.ts +0 -85
  385. package/src/documents/store.ts +0 -252
  386. package/src/electron-preload.ts +0 -25
  387. package/src/electron.ts +0 -200
  388. package/src/heartbeat/DaemonManager.ts +0 -283
  389. package/src/heartbeat/HealthMonitor.ts +0 -317
  390. package/src/heartbeat/StartupVerifier.ts +0 -223
  391. package/src/heartbeat/Watchdog.ts +0 -208
  392. package/src/heartbeat/index.ts +0 -109
  393. package/src/heartbeat/self-improve-bus.ts +0 -110
  394. package/src/heartbeat/types.ts +0 -82
  395. package/src/index.ts +0 -1724
  396. package/src/llm/audio-config-store.ts +0 -246
  397. package/src/llm/config-store.ts +0 -400
  398. package/src/llm/llm-judgment-client.ts +0 -471
  399. package/src/llm/pi-ai.ts +0 -653
  400. package/src/llm/system-prompt/health.ts +0 -159
  401. package/src/llm/system-prompt/layers/channel/local.md +0 -14
  402. package/src/llm/system-prompt/layers/channel/p2p-agent.md +0 -18
  403. package/src/llm/system-prompt/layers/channel/p2p-visitor.md +0 -19
  404. package/src/llm/system-prompt/layers/core/artifacts_storage.md +0 -89
  405. package/src/llm/system-prompt/layers/core/evenhandedness.md +0 -21
  406. package/src/llm/system-prompt/layers/core/hibs_reminders.md +0 -15
  407. package/src/llm/system-prompt/layers/core/identity.md +0 -37
  408. package/src/llm/system-prompt/layers/core/knowledge.md +0 -17
  409. package/src/llm/system-prompt/layers/core/memory_system.md +0 -12
  410. package/src/llm/system-prompt/layers/core/network_filesystem.md +0 -28
  411. package/src/llm/system-prompt/layers/core/refusal.md +0 -37
  412. package/src/llm/system-prompt/layers/core/tone.md +0 -31
  413. package/src/llm/system-prompt/layers/core/tools.thin.md +0 -13
  414. package/src/llm/system-prompt/layers/core/wellbeing.md +0 -41
  415. package/src/llm/system-prompt/layers/role/architect.md +0 -20
  416. package/src/llm/system-prompt/layers/role/expert.md +0 -19
  417. package/src/llm/system-prompt/layers/role/implementer.md +0 -15
  418. package/src/llm/system-prompt/layers/role/security.md +0 -15
  419. package/src/llm/system-prompt/layers/tool/artifacts.md +0 -72
  420. package/src/llm/system-prompt/layers/tool/bash.md +0 -25
  421. package/src/llm/system-prompt/layers/tool/hibs_api.md +0 -171
  422. package/src/llm/system-prompt/layers/tool/image_search.md +0 -70
  423. package/src/llm/system-prompt/layers/tool/manifest.md +0 -89
  424. package/src/llm/system-prompt/layers/tool/mcp_apps.md +0 -53
  425. package/src/llm/system-prompt/layers/tool/web_search.md +0 -83
  426. package/src/llm/system-prompt/registry.ts +0 -325
  427. package/src/llm/system-prompt/strip-hibsml.ts +0 -52
  428. package/src/llm/tool-manifest/ask_user_input.ts +0 -37
  429. package/src/llm/tool-manifest/bash.ts +0 -25
  430. package/src/llm/tool-manifest/create_file.ts +0 -26
  431. package/src/llm/tool-manifest/fetch_sports_data.ts +0 -28
  432. package/src/llm/tool-manifest/image_search.ts +0 -26
  433. package/src/llm/tool-manifest/index.ts +0 -88
  434. package/src/llm/tool-manifest/mcp.ts +0 -46
  435. package/src/llm/tool-manifest/message_compose.ts +0 -33
  436. package/src/llm/tool-manifest/places.ts +0 -86
  437. package/src/llm/tool-manifest/present_files.ts +0 -23
  438. package/src/llm/tool-manifest/recipe.ts +0 -42
  439. package/src/llm/tool-manifest/recommend_apps.ts +0 -25
  440. package/src/llm/tool-manifest/str_replace.ts +0 -29
  441. package/src/llm/tool-manifest/types.ts +0 -52
  442. package/src/llm/tool-manifest/view.ts +0 -26
  443. package/src/llm/tool-manifest/weather.ts +0 -29
  444. package/src/llm/tool-manifest/web.ts +0 -54
  445. package/src/llm/video-config-store.ts +0 -257
  446. package/src/network/agent-network.ts +0 -800
  447. package/src/network/hybrid-messenger.ts +0 -199
  448. package/src/network/iroh-bootstrap.ts +0 -57
  449. package/src/network/iroh-discovery.ts +0 -208
  450. package/src/network/iroh-integration.ts +0 -158
  451. package/src/network/iroh-transport.ts +0 -637
  452. package/src/network/known-peers.ts +0 -102
  453. package/src/network/p2p-direct.ts +0 -262
  454. package/src/network/p2p-secret.ts +0 -153
  455. package/src/network/p2p.ts +0 -964
  456. package/src/network/source-intent-broadcaster.ts +0 -242
  457. package/src/network/source-intent.ts +0 -167
  458. package/src/network/storage/adapters/json-adapter.ts +0 -454
  459. package/src/network/storage/index.ts +0 -203
  460. package/src/network/storage/types.ts +0 -166
  461. package/src/security/builtin-guards.ts +0 -162
  462. package/src/security/context-router-tool.ts +0 -122
  463. package/src/security/input-scanner.ts +0 -287
  464. package/src/security/react-harness.ts +0 -177
  465. package/src/security/tool-gate.ts +0 -294
  466. package/src/social/ant-colony/index.js +0 -19
  467. package/src/social/channels/ChannelManager.ts +0 -485
  468. package/src/social/channels/DiapChannelBridge.ts +0 -501
  469. package/src/social/channels/InterestMatcher.ts +0 -189
  470. package/src/social/channels/agent-workflow-config.json +0 -214
  471. package/src/social/channels/agent-workflow-config.yaml +0 -334
  472. package/src/social/channels/channel-agent-session.ts +0 -407
  473. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  474. package/src/social/channels/diap-doc-parser.ts +0 -282
  475. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  476. package/src/social/channels/index.ts +0 -22
  477. package/src/social/channels/types.ts +0 -115
  478. package/src/social/global-shared-context.ts +0 -506
  479. package/src/social/heartbeat.ts +0 -1057
  480. package/src/social/persona/enhanced-persona.ts +0 -359
  481. package/src/types.d.ts +0 -12
  482. package/src/utils/auto-evolve-policy.ts +0 -138
  483. package/src/utils/auto-update.ts +0 -482
  484. package/src/utils/clamp.ts +0 -5
  485. package/src/web/agent-delegate-server.ts +0 -148
  486. package/src/web/api-config.html +0 -520
  487. package/src/web/client.js +0 -2352
  488. package/src/web/client.ts +0 -4326
  489. package/src/web/components/p2p/P2PModal.tsx +0 -416
  490. package/src/web/components/p2p/index.ts +0 -566
  491. package/src/web/components/p2p/index.tsx +0 -297
  492. package/src/web/components/p2p/p2p-connection.ts +0 -338
  493. package/src/web/components/p2p/p2p-identity.ts +0 -92
  494. package/src/web/components/p2p/p2p-manager.ts +0 -147
  495. package/src/web/components/p2p/p2p-messages.ts +0 -219
  496. package/src/web/components/p2p/p2p-modal.ts +0 -685
  497. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  498. package/src/web/components/p2p/p2p-tools.ts +0 -315
  499. package/src/web/components/p2p/types.ts +0 -170
  500. package/src/web/components/wallet-viem.mjs +0 -118
  501. package/src/web/design.md +0 -99
  502. package/src/web/icons/apple-touch-icon.png +0 -0
  503. package/src/web/icons/favicon-16x16.png +0 -0
  504. package/src/web/icons/favicon-192x192.png +0 -0
  505. package/src/web/icons/favicon-32x32.png +0 -0
  506. package/src/web/icons/favicon-48x48.png +0 -0
  507. package/src/web/icons/favicon-512x512.png +0 -0
  508. package/src/web/icons/favicon.icns +0 -0
  509. package/src/web/icons/favicon.ico +0 -0
  510. package/src/web/icons/icon.png +0 -0
  511. package/src/web/icons/image.png +0 -0
  512. package/src/web/index.html +0 -373
  513. package/src/web/iroh-delegate-transport.ts +0 -139
  514. package/src/web/manifest.json +0 -21
  515. package/src/web/server.ts +0 -5731
  516. package/src/web/style.css +0 -4737
  517. package/src/web/ui/message-renderer.ts +0 -540
  518. package/src/web/ui/step-timeline.ts +0 -394
  519. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  520. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  521. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  522. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  523. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  524. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  525. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  526. package/test-results/.last-run.json +0 -6
  527. package/test-results/src-test-web-loop-status-b-5734c-atus-bar-/346/230/276/347/244/272-spinner-/344/270/215/346/230/276/347/244/272/345/276/252/347/216/257/350/256/241/346/225/260/error-context.md +0 -285
  528. package/tsconfig.cli.json +0 -16
  529. package/tsconfig.electron.json +0 -20
  530. package/tsconfig.json +0 -18
@@ -1,102 +0,0 @@
1
- /**
2
- * known-peers.ts — 持久化 P2P 好友列表, 启动自动重连
3
- *
4
- * 文件位置: ~/.bolloon/known_peers.json
5
- * 格式: { version: 1, peers: { [name]: { publicKey, addedAt, lastConnected } } }
6
- *
7
- * 设计原则:
8
- * - publicKey 持久化 (peerId 等同于 P2PDirect publicKey = 32 字节 hex = 64 chars)
9
- * - name 是用户给的好友备注 (不参与 P2P 协议, 仅 UI 显示)
10
- * - 不存 ip/port, hyperswarm DHT 自动重发现
11
- * - 不存 lastConnected 详细信息, 只存时间戳 (供 UI 显示)
12
- */
13
- import * as fs from 'fs/promises';
14
- import * as path from 'path';
15
- import * as os from 'os';
16
-
17
- const SECRET_DIR = process.env.BOLLOON_HOME || path.join(os.homedir(), '.bolloon');
18
- const KNOWN_PEERS_FILE = path.join(SECRET_DIR, 'known_peers.json');
19
-
20
- export interface KnownPeer {
21
- publicKey: string; // 64 char hex
22
- name?: string; // 用户给的备注
23
- addedAt: string; // ISO timestamp
24
- lastConnectedAt?: string; // ISO timestamp, 最近一次 joinPeer 成功
25
- notes?: string; // 用户备注
26
- }
27
-
28
- interface KnownPeersFile {
29
- version: 1;
30
- peers: Record<string, KnownPeer>;
31
- }
32
-
33
- async function ensureDir(): Promise<void> {
34
- await fs.mkdir(SECRET_DIR, { recursive: true });
35
- }
36
-
37
- async function readFile(): Promise<KnownPeersFile> {
38
- try {
39
- const raw = await fs.readFile(KNOWN_PEERS_FILE, 'utf-8');
40
- return JSON.parse(raw);
41
- } catch {
42
- return { version: 1, peers: {} };
43
- }
44
- }
45
-
46
- async function writeFile(data: KnownPeersFile): Promise<void> {
47
- await ensureDir();
48
- await fs.writeFile(KNOWN_PEERS_FILE, JSON.stringify(data, null, 2), 'utf-8');
49
- }
50
-
51
- /** 添加或更新一个 known peer (key 用 name) */
52
- export async function addOrUpdatePeer(name: string | null | undefined, publicKey: string, notes?: string): Promise<void> {
53
- const safeName = (name && name.length > 0) ? name : `peer-${publicKey.substring(0, 8)}`;
54
- const data = await readFile();
55
- const existing = data.peers[safeName];
56
- data.peers[safeName] = {
57
- publicKey,
58
- name: safeName,
59
- addedAt: existing?.addedAt || new Date().toISOString(),
60
- lastConnectedAt: existing?.lastConnectedAt,
61
- notes: notes || existing?.notes
62
- };
63
- await writeFile(data);
64
- console.log(`[known-peers] 添加/更新: ${safeName} = ${publicKey.substring(0, 12)}...`);
65
- }
66
-
67
- /** 删除 known peer */
68
- export async function removePeer(name: string): Promise<void> {
69
- const data = await readFile();
70
- if (data.peers[name]) {
71
- delete data.peers[name];
72
- await writeFile(data);
73
- console.log(`[known-peers] 删除: ${name}`);
74
- }
75
- }
76
-
77
- /** 标记连接成功 (更新 lastConnectedAt) */
78
- export async function markConnected(name: string): Promise<void> {
79
- const data = await readFile();
80
- if (data.peers[name]) {
81
- data.peers[name].lastConnectedAt = new Date().toISOString();
82
- await writeFile(data);
83
- }
84
- }
85
-
86
- /** 列出所有 known peers */
87
- export async function listPeers(): Promise<KnownPeer[]> {
88
- const data = await readFile();
89
- return Object.values(data.peers);
90
- }
91
-
92
- /** 通过 publicKey 找 name (用于自动标记 lastConnectedAt) */
93
- export async function findNameByPublicKey(publicKey: string): Promise<string | null> {
94
- const data = await readFile();
95
- for (const [name, p] of Object.entries(data.peers)) {
96
- if (p.publicKey === publicKey) return name;
97
- }
98
- return null;
99
- }
100
-
101
- /** 完整文件路径 (供 web server 暴露) */
102
- export const KNOWN_PEERS_PATH = KNOWN_PEERS_FILE;
@@ -1,262 +0,0 @@
1
- /**
2
- * p2p-direct.ts — 薄包装 hyperswarm (纯 TS, npm 包, 不改 binding)
3
- *
4
- * 为什么: @diap/sdk 的 HyperswarmCommunicator.sendToConnection 是 stub (只更新 bytesSent 计数器, 不真发).
5
- * 这层薄包装直接用 hyperswarm 库, 真正把数据写到 socket.
6
- *
7
- * 用法:
8
- * const p2p = new P2PDirect({ name: 'bolloon' });
9
- * await p2p.start();
10
- * await p2p.joinTopic(Buffer.from('bolloon-agent-harness'));
11
- * p2p.on('data', (data, fromPublicKey) => { ... });
12
- * p2p.broadcast(Buffer.from('hello'));
13
- * await p2p.stop();
14
- */
15
- // @ts-ignore — hyperswarm 没官方 .d.ts
16
- import Hyperswarm from 'hyperswarm';
17
- import crypto from 'crypto';
18
- import { EventEmitter } from 'events';
19
- // @ts-ignore — b4a 没官方 .d.ts
20
- import b4a from 'b4a';
21
- import { loadOrCreateKeyPair, writebackPublicKey } from './p2p-secret.js';
22
-
23
- export interface P2PDirectOptions {
24
- /** 节点标识 (用于日志) */
25
- name?: string;
26
- /**
27
- * 角色标识 (对应 ~/.bolloon/p2p-direct-secret-{role}.json).
28
- * 留空时, P2PDirect 自动从 IROH_ROLE / BOLLOON_ROLE / 'default' 选.
29
- *
30
- * 同一台机器同一 role → 同一 publicKey (持久化 secretKey)
31
- * 不同 role → 独立身份 (例: nodeA 和 nodeB 同机开发, 不冲突)
32
- */
33
- role?: string;
34
- /**
35
- * 跳过持久化 secret 加载, 完全随机 keyPair.
36
- * (调试 / 测试用, 真实环境应保持默认 false)
37
- */
38
- ephemeral?: boolean;
39
- }
40
-
41
- export interface DataEvent {
42
- data: Buffer;
43
- fromPublicKey: string; // hex
44
- remoteAddress?: string; // 暂时没用到
45
- }
46
-
47
- export class P2PDirect extends EventEmitter {
48
- private swarm: Hyperswarm | null = null;
49
- private name: string;
50
- private role: string;
51
- private joinedTopics: Set<string> = new Set();
52
- // 维护: 远端 publicKey -> conn (用于主动 send)
53
- private conns: Map<string, any> = new Map();
54
- private started: boolean = false;
55
- private ephemeral: boolean;
56
-
57
- constructor(opts: P2PDirectOptions = {}) {
58
- super();
59
- this.name = opts.name || 'p2p-direct';
60
- this.role = opts.role || (process.env.IROH_ROLE || process.env.BOLLOON_ROLE || 'default');
61
- this.ephemeral = !!opts.ephemeral;
62
- }
63
-
64
- async start(): Promise<void> {
65
- if (this.started) return;
66
-
67
- // 1. 加载/生成持久化 keyPair (同一 role 跨重启同一 publicKey)
68
- if (this.ephemeral) {
69
- console.log(`[P2PDirect:${this.name}] ephemeral 模式, 不持久化`);
70
- this.swarm = new Hyperswarm();
71
- } else {
72
- const kp = await loadOrCreateKeyPair(this.role);
73
- // hyperswarm 4.x 支持 `seed` 选项, DHT.keyPair(seed) 内部派生稳定 publicKey
74
- this.swarm = new Hyperswarm({
75
- seed: Buffer.from(kp.secretKey, 'hex'), // 32-byte ed25519/X25519 seed
76
- });
77
- // 验证 / 写回 publicKey (首次启动时文件里是空)
78
- const realPub = b4a.toString(this.swarm.keyPair.publicKey, 'hex');
79
- if (kp.publicKey !== realPub) {
80
- await writebackPublicKey(this.role, kp.secretKey, realPub);
81
- }
82
- }
83
-
84
- this.swarm.on('connection', (conn: any, info: any) => {
85
- const remotePubKeyHex = b4a.toString(info.publicKey, 'hex');
86
- console.log(`[P2PDirect:${this.name}] 新连接: ${remotePubKeyHex.substring(0, 12)}... (inbound=${info.inbound || false}, type=${typeof conn}, hasWrite=${typeof conn?.write})`);
87
-
88
- // 双向记录 (inbound + outbound 都能拿到)
89
- this.conns.set(remotePubKeyHex, conn);
90
-
91
- // 收到数据时 → 触发 'data' 事件
92
- // 注意: data 监听器必须在 emit('connection') 之前注册,
93
- // 否则 server 的 connection handler 发送消息后, 对端回复可能在 data 监听器就绪前到达
94
- conn.on('data', (chunk: Buffer | Uint8Array) => {
95
- const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
96
- console.log(`[P2PDirect:${this.name}] 收到数据 from ${remotePubKeyHex.substring(0,12)}... (${buf.length} bytes)`);
97
- // P-Action 3: untrusted-input scanner (默认 silence-on-fail + log-only)
98
- // 包装层 跨机器 @-mention 代发 (已 WORKING) 不能 block-on-suspicion
99
- try {
100
- // 动态 import 避免循环依赖 + 启动时加载
101
- // (lazy require to keep cold-start fast)
102
- // eslint-disable-next-line @typescript-eslint/no-var-requires
103
- const { scanInput, writeScanAudit, shouldHardBlock } = require('../security/input-scanner.js') as typeof import('../security/input-scanner.js');
104
- const result = scanInput(buf, { source: 'p2p' });
105
- if (shouldHardBlock(result)) {
106
- console.warn(`[P2PDirect:${this.name}] 阻断恶意消息 from ${remotePubKeyHex.substring(0,12)}... (verdict=${result.verdict}, threats=${result.threats.length})`);
107
- writeScanAudit(result, { fromPublicKey: remotePubKeyHex, blocked: true }).catch(() => { /* silent */ });
108
- return; // 不 emit('data'), 跨机中转不传播
109
- }
110
- if (result.verdict !== 'pass') {
111
- // log-only: 仍然 emit('data'), 但写 audit 留痕
112
- writeScanAudit(result, { fromPublicKey: remotePubKeyHex, blocked: false }).catch(() => { /* silent */ });
113
- console.log(`[P2PDirect:${this.name}] 输入扫描 verdict=${result.verdict} (${result.threats.length} threats) from ${remotePubKeyHex.substring(0,12)}... (audit-only)`);
114
- }
115
- } catch (err) {
116
- // scanner 自身挂掉 → 静默, 不阻断
117
- console.warn(`[P2PDirect:${this.name}] input scanner failed (silent, fail-safe):`, err);
118
- }
119
- this.emit('data', {
120
- data: buf,
121
- fromPublicKey: remotePubKeyHex,
122
- } as DataEvent);
123
- });
124
-
125
- conn.on('error', (err: Error) => {
126
- console.error(`[P2PDirect:${this.name}] 连接错误 (${remotePubKeyHex.substring(0,12)}...):`, err.message);
127
- });
128
-
129
- conn.on('close', () => {
130
- this.conns.delete(remotePubKeyHex);
131
- });
132
-
133
- // v3: 触发 'connection' 事件, 上层 (web server) 可以主动给新连接发消息
134
- // 注意: 放在 data/error/close 监听器之后, 确保 server 的 connection handler 不会先于 data 就绪
135
- this.emit('connection', { remotePublicKey: remotePubKeyHex, conn });
136
- });
137
-
138
- await this.swarm.listen(); // server 模式
139
- this.started = true;
140
- console.log(`[P2PDirect:${this.name}] 启动 OK, publicKey: ${b4a.toString(this.swarm.keyPair.publicKey, 'hex').substring(0, 12)}...`);
141
- }
142
-
143
- async joinTopic(topic: Buffer | string): Promise<void> {
144
- if (!this.swarm) throw new Error('P2PDirect not started');
145
- const topicBuf = typeof topic === 'string' ? Buffer.from(topic) : topic;
146
- const topicHex = b4a.toString(topicBuf, 'hex');
147
- if (this.joinedTopics.has(topicHex)) return;
148
- const discovery = this.swarm.join(topicBuf, { server: true, client: true });
149
- await discovery.flushed();
150
- this.joinedTopics.add(topicHex);
151
- console.log(`[P2PDirect:${this.name}] 加入 topic: ${topicHex.substring(0, 16)}...`);
152
- }
153
-
154
- /** 广播数据给所有连接 */
155
- broadcast(data: Buffer | string): void {
156
- if (!this.swarm) return;
157
- const buf = typeof data === 'string' ? Buffer.from(data) : data;
158
- let count = 0;
159
- for (const conn of this.conns.values()) {
160
- try {
161
- if (!conn.destroyed) {
162
- conn.write(buf);
163
- count++;
164
- }
165
- } catch (err) {
166
- // 忽略单条连接错误, 不影响广播
167
- }
168
- }
169
- if (count > 0) {
170
- console.log(`[P2PDirect:${this.name}] broadcast 写到 ${count} 个连接 (${buf.length} bytes)`);
171
- }
172
- }
173
-
174
- /** 主动 send 给单个 peer (已知 publicKey hex) */
175
- sendTo(publicKeyHex: string, data: Buffer | string): boolean {
176
- const conn = this.conns.get(publicKeyHex);
177
- if (!conn || conn.destroyed) return false;
178
- const buf = typeof data === 'string' ? Buffer.from(data) : data;
179
- try {
180
- conn.write(buf);
181
- return true;
182
- } catch {
183
- return false;
184
- }
185
- }
186
-
187
- /**
188
- * 2026-06-10: 真"主动发, 等握手完成"版本 — 修复好友申请 fire-and-forget bug.
189
- *
190
- * 之前的问题: server.ts:2914 `await swarm.joinPeer(...)` 只触发握手, conn 还没 push 进 this.conns,
191
- * 立即调 sendTo 找不到 conn → 静默返回 false → 消息扔进虚空.
192
- *
193
- * 现在: sendToWithWait 监听 'connection' 事件, 等到 targetPublicKey 真正出现在 this.conns,
194
- * 才 write; 超时返回 NO_CONN; 写失败返回 WRITE_FAIL; 成功返回 SENT.
195
- *
196
- * 上层调用: const r = await p2p.sendToWithWait(pk, rpc, 5000);
197
- * if (r !== 'SENT') return 502 给前端.
198
- */
199
- async sendToWithWait(
200
- publicKeyHex: string,
201
- data: Buffer | string,
202
- timeoutMs: number = 5000
203
- ): Promise<'SENT' | 'NO_CONN' | 'WRITE_FAIL'> {
204
- // 2026-06-11: 先主动触发 joinPeer, 否则 DHT 上对面可能没 push conn
205
- if (this.swarm) {
206
- try { await this.swarm.joinPeer(Buffer.from(publicKeyHex, 'hex')); } catch {}
207
- }
208
- // 1) 已有 conn → 立即试
209
- let conn = this.conns.get(publicKeyHex);
210
- if (!conn || conn.destroyed) {
211
- // 2) 等 'connection' 事件 (this.emit('connection', { remotePublicKey, conn }))
212
- const waitResult = await new Promise<'READY' | 'TIMEOUT'>((resolve) => {
213
- const timer = setTimeout(() => {
214
- this.off('connection', onConn);
215
- resolve('TIMEOUT');
216
- }, timeoutMs);
217
- const onConn = (evt: { remotePublicKey: string; conn: any }) => {
218
- if (evt.remotePublicKey === publicKeyHex) {
219
- clearTimeout(timer);
220
- this.off('connection', onConn);
221
- resolve('READY');
222
- }
223
- };
224
- this.on('connection', onConn);
225
- });
226
- if (waitResult === 'TIMEOUT') return 'NO_CONN';
227
- conn = this.conns.get(publicKeyHex);
228
- if (!conn || conn.destroyed) return 'NO_CONN'; // 双保险
229
- }
230
- const buf = typeof data === 'string' ? Buffer.from(data) : data;
231
- try {
232
- conn.write(buf);
233
- return 'SENT';
234
- } catch (err) {
235
- console.error(`[P2PDirect:${this.name}] sendToWithWait 写失败 (${publicKeyHex.substring(0,12)}...):`, (err as Error).message);
236
- return 'WRITE_FAIL';
237
- }
238
- }
239
-
240
- getPublicKey(): string {
241
- if (!this.swarm) return '';
242
- return b4a.toString(this.swarm.keyPair.publicKey, 'hex');
243
- }
244
-
245
- /** 当前 P2PDirect 用的 role (对应 secret 文件名) */
246
- getRole(): string {
247
- return this.role;
248
- }
249
-
250
- getConnectionCount(): number {
251
- return this.conns.size;
252
- }
253
-
254
- async stop(): Promise<void> {
255
- if (!this.swarm) return;
256
- await this.swarm.destroy();
257
- this.swarm = null;
258
- this.conns.clear();
259
- this.started = false;
260
- console.log(`[P2PDirect:${this.name}] 已停止`);
261
- }
262
- }
@@ -1,153 +0,0 @@
1
- /**
2
- * p2p-secret.ts — 持久化 P2PDirect 的 32-byte secretKey
3
- *
4
- * 为什么: hyperswarm 4.x 的 `new Hyperswarm()` 每次启动生成新 keyPair,
5
- * 导致 publicKey 变化, known_peers.json 里的 publicKey 全部失效.
6
- *
7
- * 修法: 把 32-byte secretKey 存到 ~/.bolloon/p2p-direct-secret-{role}.json,
8
- * 下次启动读出来, 用 noise-keypair 风格构造 { publicKey, secretKey } 喂给 Hyperswarm.
9
- * → 同一台机器 + 同一 role = 永远同一 publicKey.
10
- *
11
- * 文件格式: { version: 1, role, secretKey: hex64, publicKey: hex64, createdAt, lastUsedAt }
12
- *
13
- * role 来源: process.env.IROH_ROLE 或 process.env.BOLLOON_ROLE 或 'default'
14
- */
15
- import * as fs from 'fs/promises';
16
- import * as path from 'path';
17
- import * as os from 'os';
18
- import * as crypto from 'crypto';
19
-
20
- const SECRET_DIR = process.env.BOLLOON_HOME || path.join(os.homedir(), '.bolloon');
21
-
22
- export interface P2PSecret {
23
- version: 1;
24
- role: string;
25
- secretKey: string; // 64 char hex (32 bytes) — noise-keypair seed
26
- publicKey: string; // 64 char hex (32 bytes) — 由 hyperswarm 算出后写回
27
- createdAt: string;
28
- lastUsedAt: string;
29
- }
30
-
31
- function resolveRole(): string {
32
- return (
33
- process.env.IROH_ROLE ||
34
- process.env.BOLLOON_ROLE ||
35
- 'default'
36
- );
37
- }
38
-
39
- function fileForRole(role: string): string {
40
- return path.join(SECRET_DIR, `p2p-direct-secret-${role}.json`);
41
- }
42
-
43
- async function ensureDir(): Promise<void> {
44
- await fs.mkdir(SECRET_DIR, { recursive: true });
45
- }
46
-
47
- /**
48
- * 读取/生成 持久化的 keyPair.
49
- *
50
- * 首次启动 → 生成 32 字节随机 secretKey, 存盘 (publicKey 留空, 待 P2PDirect 写回)
51
- * 之后启动 → 读 secretKey, 信任文件里存的 publicKey
52
- *
53
- * @param roleOverride 可显式覆盖 role (不传时读 IROH_ROLE)
54
- * @returns { publicKey, secretKey, role } 全部 hex string
55
- */
56
- export async function loadOrCreateKeyPair(roleOverride?: string): Promise<{
57
- publicKey: string;
58
- secretKey: string;
59
- role: string;
60
- }> {
61
- const role = roleOverride || resolveRole();
62
- const file = fileForRole(role);
63
-
64
- try {
65
- const raw = await fs.readFile(file, 'utf-8');
66
- const existing: P2PSecret = JSON.parse(raw);
67
- if (
68
- existing.version === 1 &&
69
- typeof existing.secretKey === 'string' &&
70
- existing.secretKey.length === 64
71
- ) {
72
- const sk = Buffer.from(existing.secretKey, 'hex');
73
- if (sk.length === 32) {
74
- existing.lastUsedAt = new Date().toISOString();
75
- await ensureDir();
76
- await fs.writeFile(file, JSON.stringify(existing, null, 2), 'utf-8');
77
- return {
78
- publicKey: existing.publicKey || '',
79
- secretKey: existing.secretKey,
80
- role: existing.role,
81
- };
82
- }
83
- }
84
- console.warn(`[p2p-secret] ${file} 格式无效, 重新生成`);
85
- } catch (err: any) {
86
- if (err.code !== 'ENOENT') {
87
- console.warn(`[p2p-secret] 读 ${file} 失败: ${err.message}, 重新生成`);
88
- }
89
- }
90
-
91
- // 首次生成 — publicKey 留空, 等 P2PDirect.start() 拿到真公钥后写回
92
- const secretKeyBuf = crypto.randomBytes(32);
93
- const now = new Date().toISOString();
94
- const fresh: P2PSecret = {
95
- version: 1,
96
- role,
97
- secretKey: secretKeyBuf.toString('hex'),
98
- publicKey: '', // P2PDirect.start() 后由 writebackPublicKey 填
99
- createdAt: now,
100
- lastUsedAt: now,
101
- };
102
- await ensureDir();
103
- await fs.writeFile(file, JSON.stringify(fresh, null, 2), 'utf-8');
104
- console.log(`[p2p-secret] 新生成 keyPair (role=${role}, publicKey 待算), 存到 ${file}`);
105
- return { publicKey: fresh.publicKey, secretKey: fresh.secretKey, role };
106
- }
107
-
108
- /**
109
- * P2PDirect 启动后, 把 hyperswarm 算出的真实 publicKey 写回文件
110
- * (因为我们用 noise-keypair 风格 seed, 真正的公钥只能 Hyperswarm 算).
111
- */
112
- export async function writebackPublicKey(
113
- role: string,
114
- secretKey: string,
115
- realPublicKey: string
116
- ): Promise<void> {
117
- const file = fileForRole(role);
118
- let existing: P2PSecret | null = null;
119
- try {
120
- const raw = await fs.readFile(file, 'utf-8');
121
- existing = JSON.parse(raw);
122
- } catch {}
123
- const data: P2PSecret = existing && existing.version === 1 && existing.secretKey === secretKey
124
- ? { ...existing, publicKey: realPublicKey, lastUsedAt: new Date().toISOString() }
125
- : {
126
- version: 1,
127
- role,
128
- secretKey,
129
- publicKey: realPublicKey,
130
- createdAt: new Date().toISOString(),
131
- lastUsedAt: new Date().toISOString(),
132
- };
133
- await ensureDir();
134
- await fs.writeFile(file, JSON.stringify(data, null, 2), 'utf-8');
135
- console.log(`[p2p-secret] (${role}) publicKey 写回: ${realPublicKey.substring(0, 12)}...`);
136
- }
137
-
138
- /** 删掉 (供调试 / "重置身份" 用) */
139
- export async function resetSecret(roleOverride?: string): Promise<void> {
140
- const role = roleOverride || resolveRole();
141
- const file = fileForRole(role);
142
- try {
143
- await fs.unlink(file);
144
- console.log(`[p2p-secret] 删除 ${file}`);
145
- } catch (err: any) {
146
- if (err.code !== 'ENOENT') throw err;
147
- }
148
- }
149
-
150
- /** 当前 role 对应的 secret 文件路径 (供 server 暴露) */
151
- export function secretPathForRole(roleOverride?: string): string {
152
- return fileForRole(roleOverride || resolveRole());
153
- }