@bolloon/bolloon-agent 0.1.36 → 0.1.38

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 (518) hide show
  1. package/package.json +2 -2
  2. package/.auto-evolve-calls +0 -1
  3. package/.last-auto-evolve-baseline +0 -1
  4. package/.playwright-mcp/page-2026-06-16T07-51-45-706Z.yml +0 -130
  5. package/.playwright-mcp/page-2026-06-16T07-56-44-116Z.yml +0 -131
  6. package/Bolloon.md +0 -144
  7. package/Dive-into/CITATION.cff +0 -17
  8. package/Dive-into/LICENSE +0 -25
  9. package/Dive-into/README.md +0 -598
  10. package/Dive-into/README_zh.md +0 -599
  11. package/Dive-into/assets/context.png +0 -0
  12. package/Dive-into/assets/extensibility.png +0 -0
  13. package/Dive-into/assets/iteration.png +0 -0
  14. package/Dive-into/assets/layered_architecture.png +0 -0
  15. package/Dive-into/assets/main_structure.png +0 -0
  16. package/Dive-into/assets/permission.png +0 -0
  17. package/Dive-into/assets/session_compact.png +0 -0
  18. package/Dive-into/assets/subagent.png +0 -0
  19. package/Dive-into/paper/Dive_into_Claude_Code.pdf +0 -0
  20. package/dist/agents/constraint-layer.js.map +0 -1
  21. package/dist/agents/pi-sdk.js.map +0 -1
  22. package/dist/agents/workflow-engine.js.map +0 -1
  23. package/dist/bollharness/src/index.js +0 -5
  24. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  25. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  26. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  27. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  28. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  29. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  30. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  31. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  32. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  33. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  34. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  35. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  36. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  37. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  38. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  39. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  40. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  41. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  42. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  43. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  44. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  45. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  46. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  47. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  48. package/dist/bollharness/src/scripts/context_router.js +0 -67
  49. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  50. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  51. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  52. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  53. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  54. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  55. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  56. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  57. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  58. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  59. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  60. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  61. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  62. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  63. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  64. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  65. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  66. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  67. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  68. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  69. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  70. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  71. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  72. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  73. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  74. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  75. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  76. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  77. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  78. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  79. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  80. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  81. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  82. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  83. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  84. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  85. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  86. package/dist/bollharness-integration/context-router.js.map +0 -1
  87. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  88. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  89. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  90. package/dist/bollharness-integration/index.js.map +0 -1
  91. package/dist/bollharness-integration/integration.js.map +0 -1
  92. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  93. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  94. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  95. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  96. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  97. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  98. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  99. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  100. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  101. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  102. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  103. package/dist/constraint-runtime/src/agent/index.js +0 -1
  104. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  105. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  106. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  107. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  108. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  109. package/dist/constraint-runtime/src/cli/index.js +0 -12
  110. package/dist/constraint-runtime/src/command_graph.js +0 -10
  111. package/dist/constraint-runtime/src/commands.js +0 -60
  112. package/dist/constraint-runtime/src/components/index.js +0 -12
  113. package/dist/constraint-runtime/src/constants/index.js +0 -12
  114. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  115. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  116. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  117. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  118. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  119. package/dist/constraint-runtime/src/context.js +0 -30
  120. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  121. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  122. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  123. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  124. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  125. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  126. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  127. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  128. package/dist/constraint-runtime/src/history.js +0 -9
  129. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  130. package/dist/constraint-runtime/src/index.js +0 -26
  131. package/dist/constraint-runtime/src/ink.js +0 -4
  132. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  133. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  134. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  135. package/dist/constraint-runtime/src/models.js +0 -1
  136. package/dist/constraint-runtime/src/models.js.map +0 -1
  137. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  138. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  139. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  140. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  141. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  142. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  143. package/dist/constraint-runtime/src/prefetch.js +0 -9
  144. package/dist/constraint-runtime/src/query.js +0 -1
  145. package/dist/constraint-runtime/src/remote/index.js +0 -12
  146. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  147. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  148. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  149. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  150. package/dist/constraint-runtime/src/screens/index.js +0 -12
  151. package/dist/constraint-runtime/src/server/index.js +0 -12
  152. package/dist/constraint-runtime/src/services/index.js +0 -12
  153. package/dist/constraint-runtime/src/session_store.js +0 -22
  154. package/dist/constraint-runtime/src/setup.js +0 -30
  155. package/dist/constraint-runtime/src/skills/index.js +0 -1
  156. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  157. package/dist/constraint-runtime/src/state/index.js +0 -12
  158. package/dist/constraint-runtime/src/system_init.js +0 -20
  159. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  160. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  161. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  162. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  163. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  164. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  165. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  166. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  167. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  168. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  169. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  170. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  171. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  172. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  173. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  174. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  175. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  176. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  177. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  178. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  179. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  180. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  181. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  182. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  183. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  184. package/dist/constraint-runtime/src/tools.js +0 -80
  185. package/dist/constraint-runtime/src/transcript.js +0 -19
  186. package/dist/constraint-runtime/src/types/index.js +0 -12
  187. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  188. package/dist/constraint-runtime/src/utils/index.js +0 -12
  189. package/dist/constraint-runtime/src/vim/index.js +0 -12
  190. package/dist/constraint-runtime/src/voice/index.js +0 -12
  191. package/dist/constraints/index.js.map +0 -1
  192. package/dist/documents/reader.js.map +0 -1
  193. package/dist/llm/config-store.js.map +0 -1
  194. package/dist/llm/pi-ai.js.map +0 -1
  195. package/dist/network/agent-network.js.map +0 -1
  196. package/dist/network/iroh-integration.js.map +0 -1
  197. package/dist/network/iroh-transport.js.map +0 -1
  198. package/dist/network/p2p.js.map +0 -1
  199. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  200. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  201. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  202. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  203. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  204. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  205. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  206. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  207. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  208. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  209. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  210. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  211. package/dist/social/ant-colony/types.js.map +0 -1
  212. package/dist/social/channels/ChannelManager.js.map +0 -1
  213. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  214. package/dist/social/channels/InterestMatcher.js.map +0 -1
  215. package/dist/social/channels/types.js.map +0 -1
  216. package/dist/social/global-shared-context.js.map +0 -1
  217. package/dist/social/heartbeat.js.map +0 -1
  218. package/lefthook.yml +0 -33
  219. package/scripts/auto-evolve-loop.ts +0 -481
  220. package/scripts/build-web.ts +0 -116
  221. package/scripts/diff-reviewer.ts +0 -159
  222. package/scripts/validate-system-prompt.ts +0 -142
  223. package/scripts/weekly-report.ts +0 -364
  224. package/src/agents/agent-manifest-protocol.ts +0 -117
  225. package/src/agents/constraint-layer.ts +0 -309
  226. package/src/agents/iroh-secret.ts +0 -32
  227. package/src/agents/p2p-chat-tools.ts +0 -383
  228. package/src/agents/p2p-document-tools.ts +0 -347
  229. package/src/agents/permission-mode.ts +0 -127
  230. package/src/agents/pi-sdk.ts +0 -2895
  231. package/src/agents/pre-tool-validator.ts +0 -213
  232. package/src/agents/protocol.ts +0 -398
  233. package/src/agents/shell-guard.ts +0 -417
  234. package/src/agents/shell-tool.ts +0 -103
  235. package/src/agents/skill-loader.ts +0 -202
  236. package/src/agents/subagent-manager.ts +0 -553
  237. package/src/agents/workflow-engine.ts +0 -332
  238. package/src/agents/workflow-pivot-loop.ts +0 -766
  239. package/src/bollharness/.sanitize-report.json +0 -13
  240. package/src/bollharness/CLAUDE.md +0 -73
  241. package/src/bollharness/LICENSE +0 -21
  242. package/src/bollharness/README.md +0 -143
  243. package/src/bollharness/README.zh-CN.md +0 -131
  244. package/src/bollharness/package.json +0 -20
  245. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  246. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  247. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  248. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  249. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  250. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  251. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  252. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  253. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  254. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  255. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  256. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  257. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  258. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  259. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  260. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  261. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  262. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  263. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  264. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  265. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  266. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  267. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  268. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  269. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  270. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  271. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  272. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  273. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  274. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  275. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  276. package/src/bollharness/src/index.ts +0 -5
  277. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  278. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  279. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  280. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  281. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  282. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  283. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  284. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  285. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  286. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  287. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  288. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  289. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  290. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  291. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  292. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  293. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  294. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  295. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  296. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  297. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  298. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  299. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  300. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  301. package/src/bollharness/src/scripts/context_router.ts +0 -76
  302. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  303. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  304. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  305. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  306. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  307. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  308. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  309. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  310. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  311. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  312. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  313. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  314. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  315. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  316. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  317. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  318. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  319. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  320. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  321. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  322. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  323. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  324. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  325. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  326. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  327. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  328. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  329. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  330. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  331. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  332. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  333. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  334. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  335. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  336. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  337. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  338. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  339. package/src/bollharness/templates/persona/default.json +0 -19
  340. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  341. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  342. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  343. package/src/bollharness-integration/context-chain-router.ts +0 -474
  344. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  345. package/src/bollharness-integration/context-router.ts +0 -583
  346. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  347. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  348. package/src/bollharness-integration/guard-checker.ts +0 -451
  349. package/src/bollharness-integration/index.ts +0 -195
  350. package/src/bollharness-integration/integration.ts +0 -538
  351. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  352. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  353. package/src/bollharness-integration/skill-adapter.ts +0 -646
  354. package/src/bootstrap/bootstrap.ts +0 -135
  355. package/src/bootstrap/context-collector.ts +0 -371
  356. package/src/bootstrap/context-hierarchy.ts +0 -283
  357. package/src/bootstrap/lifecycle-hooks.ts +0 -289
  358. package/src/bootstrap/project-context.ts +0 -171
  359. package/src/cli/interface.ts +0 -211
  360. package/src/cli-entry.ts +0 -304
  361. package/src/constraints/index.ts +0 -6
  362. package/src/context-compaction/auto-compact.ts +0 -153
  363. package/src/context-compaction/budget-gate.ts +0 -32
  364. package/src/context-compaction/budget-reduce.ts +0 -37
  365. package/src/context-compaction/context-collapse.ts +0 -72
  366. package/src/context-compaction/index.ts +0 -24
  367. package/src/context-compaction/microcompact.ts +0 -54
  368. package/src/context-compaction/pipeline.ts +0 -133
  369. package/src/context-compaction/snip.ts +0 -51
  370. package/src/context-compaction/token-estimator.ts +0 -36
  371. package/src/context-compaction/types.ts +0 -99
  372. package/src/documents/reader.ts +0 -85
  373. package/src/documents/store.ts +0 -252
  374. package/src/electron-preload.ts +0 -25
  375. package/src/electron.ts +0 -200
  376. package/src/heartbeat/DaemonManager.ts +0 -283
  377. package/src/heartbeat/HealthMonitor.ts +0 -317
  378. package/src/heartbeat/StartupVerifier.ts +0 -223
  379. package/src/heartbeat/Watchdog.ts +0 -208
  380. package/src/heartbeat/index.ts +0 -109
  381. package/src/heartbeat/self-improve-bus.ts +0 -110
  382. package/src/heartbeat/types.ts +0 -82
  383. package/src/index.ts +0 -1724
  384. package/src/llm/audio-config-store.ts +0 -246
  385. package/src/llm/config-store.ts +0 -400
  386. package/src/llm/llm-judgment-client.ts +0 -471
  387. package/src/llm/pi-ai.ts +0 -653
  388. package/src/llm/system-prompt/health.ts +0 -159
  389. package/src/llm/system-prompt/layers/channel/local.md +0 -14
  390. package/src/llm/system-prompt/layers/channel/p2p-agent.md +0 -18
  391. package/src/llm/system-prompt/layers/channel/p2p-visitor.md +0 -19
  392. package/src/llm/system-prompt/layers/core/artifacts_storage.md +0 -89
  393. package/src/llm/system-prompt/layers/core/evenhandedness.md +0 -21
  394. package/src/llm/system-prompt/layers/core/hibs_reminders.md +0 -15
  395. package/src/llm/system-prompt/layers/core/identity.md +0 -37
  396. package/src/llm/system-prompt/layers/core/knowledge.md +0 -17
  397. package/src/llm/system-prompt/layers/core/memory_system.md +0 -12
  398. package/src/llm/system-prompt/layers/core/network_filesystem.md +0 -28
  399. package/src/llm/system-prompt/layers/core/refusal.md +0 -37
  400. package/src/llm/system-prompt/layers/core/tone.md +0 -31
  401. package/src/llm/system-prompt/layers/core/tools.thin.md +0 -13
  402. package/src/llm/system-prompt/layers/core/wellbeing.md +0 -41
  403. package/src/llm/system-prompt/layers/role/architect.md +0 -20
  404. package/src/llm/system-prompt/layers/role/expert.md +0 -19
  405. package/src/llm/system-prompt/layers/role/implementer.md +0 -15
  406. package/src/llm/system-prompt/layers/role/security.md +0 -15
  407. package/src/llm/system-prompt/layers/tool/artifacts.md +0 -72
  408. package/src/llm/system-prompt/layers/tool/bash.md +0 -25
  409. package/src/llm/system-prompt/layers/tool/hibs_api.md +0 -171
  410. package/src/llm/system-prompt/layers/tool/image_search.md +0 -70
  411. package/src/llm/system-prompt/layers/tool/manifest.md +0 -89
  412. package/src/llm/system-prompt/layers/tool/mcp_apps.md +0 -53
  413. package/src/llm/system-prompt/layers/tool/web_search.md +0 -83
  414. package/src/llm/system-prompt/registry.ts +0 -325
  415. package/src/llm/system-prompt/strip-hibsml.ts +0 -52
  416. package/src/llm/tool-manifest/ask_user_input.ts +0 -37
  417. package/src/llm/tool-manifest/bash.ts +0 -25
  418. package/src/llm/tool-manifest/create_file.ts +0 -26
  419. package/src/llm/tool-manifest/fetch_sports_data.ts +0 -28
  420. package/src/llm/tool-manifest/image_search.ts +0 -26
  421. package/src/llm/tool-manifest/index.ts +0 -88
  422. package/src/llm/tool-manifest/mcp.ts +0 -46
  423. package/src/llm/tool-manifest/message_compose.ts +0 -33
  424. package/src/llm/tool-manifest/places.ts +0 -86
  425. package/src/llm/tool-manifest/present_files.ts +0 -23
  426. package/src/llm/tool-manifest/recipe.ts +0 -42
  427. package/src/llm/tool-manifest/recommend_apps.ts +0 -25
  428. package/src/llm/tool-manifest/str_replace.ts +0 -29
  429. package/src/llm/tool-manifest/types.ts +0 -52
  430. package/src/llm/tool-manifest/view.ts +0 -26
  431. package/src/llm/tool-manifest/weather.ts +0 -29
  432. package/src/llm/tool-manifest/web.ts +0 -54
  433. package/src/llm/video-config-store.ts +0 -257
  434. package/src/network/agent-network.ts +0 -800
  435. package/src/network/hybrid-messenger.ts +0 -199
  436. package/src/network/iroh-bootstrap.ts +0 -57
  437. package/src/network/iroh-discovery.ts +0 -208
  438. package/src/network/iroh-integration.ts +0 -158
  439. package/src/network/iroh-transport.ts +0 -637
  440. package/src/network/known-peers.ts +0 -102
  441. package/src/network/p2p-direct.ts +0 -262
  442. package/src/network/p2p-secret.ts +0 -153
  443. package/src/network/p2p.ts +0 -964
  444. package/src/network/source-intent-broadcaster.ts +0 -242
  445. package/src/network/source-intent.ts +0 -167
  446. package/src/network/storage/adapters/json-adapter.ts +0 -454
  447. package/src/network/storage/index.ts +0 -203
  448. package/src/network/storage/types.ts +0 -166
  449. package/src/security/builtin-guards.ts +0 -162
  450. package/src/security/context-router-tool.ts +0 -122
  451. package/src/security/input-scanner.ts +0 -287
  452. package/src/security/react-harness.ts +0 -177
  453. package/src/security/tool-gate.ts +0 -294
  454. package/src/social/ant-colony/index.js +0 -19
  455. package/src/social/channels/ChannelManager.ts +0 -485
  456. package/src/social/channels/DiapChannelBridge.ts +0 -501
  457. package/src/social/channels/InterestMatcher.ts +0 -189
  458. package/src/social/channels/agent-workflow-config.json +0 -214
  459. package/src/social/channels/agent-workflow-config.yaml +0 -334
  460. package/src/social/channels/channel-agent-session.ts +0 -407
  461. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  462. package/src/social/channels/diap-doc-parser.ts +0 -282
  463. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  464. package/src/social/channels/index.ts +0 -22
  465. package/src/social/channels/types.ts +0 -115
  466. package/src/social/global-shared-context.ts +0 -506
  467. package/src/social/heartbeat.ts +0 -1057
  468. package/src/social/persona/enhanced-persona.ts +0 -359
  469. package/src/types.d.ts +0 -12
  470. package/src/utils/auto-evolve-policy.ts +0 -138
  471. package/src/utils/auto-update.ts +0 -482
  472. package/src/utils/clamp.ts +0 -5
  473. package/src/web/agent-delegate-server.ts +0 -148
  474. package/src/web/api-config.html +0 -520
  475. package/src/web/client.js +0 -2352
  476. package/src/web/client.ts +0 -4326
  477. package/src/web/components/p2p/P2PModal.tsx +0 -416
  478. package/src/web/components/p2p/index.ts +0 -566
  479. package/src/web/components/p2p/index.tsx +0 -297
  480. package/src/web/components/p2p/p2p-connection.ts +0 -338
  481. package/src/web/components/p2p/p2p-identity.ts +0 -92
  482. package/src/web/components/p2p/p2p-manager.ts +0 -147
  483. package/src/web/components/p2p/p2p-messages.ts +0 -219
  484. package/src/web/components/p2p/p2p-modal.ts +0 -685
  485. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  486. package/src/web/components/p2p/p2p-tools.ts +0 -315
  487. package/src/web/components/p2p/types.ts +0 -170
  488. package/src/web/components/wallet-viem.mjs +0 -118
  489. package/src/web/design.md +0 -99
  490. package/src/web/icons/apple-touch-icon.png +0 -0
  491. package/src/web/icons/favicon-16x16.png +0 -0
  492. package/src/web/icons/favicon-192x192.png +0 -0
  493. package/src/web/icons/favicon-32x32.png +0 -0
  494. package/src/web/icons/favicon-48x48.png +0 -0
  495. package/src/web/icons/favicon-512x512.png +0 -0
  496. package/src/web/icons/favicon.icns +0 -0
  497. package/src/web/icons/favicon.ico +0 -0
  498. package/src/web/icons/icon.png +0 -0
  499. package/src/web/icons/image.png +0 -0
  500. package/src/web/index.html +0 -373
  501. package/src/web/iroh-delegate-transport.ts +0 -139
  502. package/src/web/manifest.json +0 -21
  503. package/src/web/server.ts +0 -5731
  504. package/src/web/style.css +0 -4737
  505. package/src/web/ui/message-renderer.ts +0 -540
  506. package/src/web/ui/step-timeline.ts +0 -394
  507. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  508. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  509. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  510. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  511. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  512. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  513. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  514. package/test-results/.last-run.json +0 -6
  515. 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
  516. package/tsconfig.cli.json +0 -16
  517. package/tsconfig.electron.json +0 -20
  518. 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
- }