@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,800 +0,0 @@
1
- import * as fs from 'fs/promises';
2
- import * as path from 'path';
3
- import { multiaddr as createMultiaddr } from '@multiformats/multiaddr';
4
- import { KeyManager } from '@diap/sdk';
5
- import { p2pNetwork, type PersistentPeerInfo } from './p2p.js';
6
-
7
- const AGENT_REGISTRY_PATH = path.join(process.env.HOME || '/tmp', '.bolloon', 'agent-registry.json');
8
- const KEY_PAIR_PATH = path.join(process.env.HOME || '/tmp', '.bolloon', 'keypair.json');
9
-
10
- export interface KeyPair {
11
- privateKey: Uint8Array;
12
- publicKey: Uint8Array;
13
- did: string;
14
- }
15
-
16
- export interface AgentEndpoint {
17
- did: string;
18
- name: string;
19
- peerId: string;
20
- multiaddrs: string[];
21
- lastSeen?: number;
22
- publicKey?: string;
23
- signature?: string;
24
- }
25
-
26
- export interface AgentRegistryEntry {
27
- did: string;
28
- name: string;
29
- peerId: string;
30
- multiaddrs: string[];
31
- registeredAt: number;
32
- lastSeen: number;
33
- lastBroadcast: number;
34
- publicKey: string;
35
- relayAddr?: string;
36
- canRelay?: boolean;
37
- }
38
-
39
- export interface SignedMessage {
40
- type: string;
41
- from: string;
42
- name: string;
43
- payload: string;
44
- timestamp: number;
45
- signature: string;
46
- }
47
-
48
- export interface AddressBroadcast {
49
- type: 'address_broadcast';
50
- from: string;
51
- name: string;
52
- peerId: string;
53
- multiaddrs: string[];
54
- relayAddr?: string;
55
- canRelay?: boolean;
56
- timestamp: number;
57
- signature: string;
58
- }
59
-
60
- export interface DiscoveryMessage {
61
- type: 'discovery';
62
- from: string;
63
- name: string;
64
- capability: string[];
65
- timestamp: number;
66
- signature: string;
67
- }
68
-
69
- const ADDRESS_BROADCAST_INTERVAL = 5 * 60 * 1000;
70
- const RELAY_RETRY_INTERVAL = 30000;
71
- const MAX_RELAY_HOPS = 3;
72
- const MESSAGE_TIMESTAMP_TOLERANCE = 24 * 60 * 60 * 1000;
73
- const SIGNED_MESSAGE_TYPES = ['task', 'response', 'discovery', 'address_broadcast'] as const;
74
-
75
- export class AgentRegistry {
76
- private agents: Map<string, AgentRegistryEntry> = new Map();
77
- private registryPath: string;
78
- private ownEndpoint: AgentEndpoint | null = null;
79
- private keyPair: KeyPair | null = null;
80
- private keyPairPath: string;
81
- private relayMode: boolean = false;
82
- private pendingRelayMessages: Map<string, { data: Uint8Array; hops: number }[]> = new Map();
83
-
84
- constructor() {
85
- this.registryPath = AGENT_REGISTRY_PATH;
86
- this.keyPairPath = KEY_PAIR_PATH;
87
- }
88
-
89
- async initialize(): Promise<void> {
90
- await fs.mkdir(path.dirname(this.registryPath), { recursive: true });
91
- await this.loadRegistry();
92
- await this.loadOrCreateKeyPair();
93
- }
94
-
95
- private async loadOrCreateKeyPair(): Promise<void> {
96
- try {
97
- const data = await fs.readFile(this.keyPairPath, 'utf-8');
98
- const keyFile = JSON.parse(data);
99
- this.keyPair = {
100
- privateKey: Buffer.from(keyFile.privateKey, 'hex'),
101
- publicKey: Buffer.from(keyFile.publicKey, 'hex'),
102
- did: keyFile.did
103
- };
104
- console.log(`[Registry] Loaded keypair: ${this.keyPair.did.substring(0, 20)}...`);
105
- } catch {
106
- console.log(`[Registry] Generating new keypair...`);
107
- const kp = KeyManager.generate();
108
- this.keyPair = {
109
- privateKey: kp.privateKey,
110
- publicKey: kp.publicKey,
111
- did: kp.did
112
- };
113
- await this.saveKeyPair();
114
- console.log(`[Registry] New keypair created: ${this.keyPair.did.substring(0, 20)}...`);
115
- }
116
- }
117
-
118
- private async saveKeyPair(): Promise<void> {
119
- if (!this.keyPair) return;
120
- const keyFile = {
121
- privateKey: Buffer.from(this.keyPair.privateKey).toString('hex'),
122
- publicKey: Buffer.from(this.keyPair.publicKey).toString('hex'),
123
- did: this.keyPair.did,
124
- createdAt: new Date().toISOString()
125
- };
126
- await fs.writeFile(this.keyPairPath, JSON.stringify(keyFile, null, 2));
127
- }
128
-
129
- getKeyPair(): KeyPair | null {
130
- return this.keyPair;
131
- }
132
-
133
- async loadRegistry(): Promise<void> {
134
- try {
135
- const data = await fs.readFile(this.registryPath, 'utf-8');
136
- const entries: AgentRegistryEntry[] = JSON.parse(data);
137
- for (const entry of entries) {
138
- this.agents.set(entry.did, entry);
139
- }
140
- console.log(`[Registry] Loaded ${entries.length} known agents`);
141
- } catch {
142
- console.log(`[Registry] No existing registry found`);
143
- }
144
- }
145
-
146
- private async saveRegistry(): Promise<void> {
147
- try {
148
- const entries = Array.from(this.agents.values());
149
- await fs.writeFile(this.registryPath, JSON.stringify(entries, null, 2));
150
- } catch (e) {
151
- console.warn(`[Registry] Failed to save:`, e);
152
- }
153
- }
154
-
155
- setOwnEndpoint(endpoint: AgentEndpoint): void {
156
- this.ownEndpoint = endpoint;
157
- if (this.keyPair) {
158
- endpoint.did = this.keyPair.did;
159
- endpoint.publicKey = Buffer.from(this.keyPair.publicKey).toString('hex');
160
- }
161
- this.registerAgent(endpoint);
162
- }
163
-
164
- getOwnEndpoint(): AgentEndpoint | null {
165
- return this.ownEndpoint;
166
- }
167
-
168
- async signMessage(data: string): Promise<Uint8Array | null> {
169
- if (!this.keyPair) {
170
- console.warn(`[Registry] No keypair available for signing`);
171
- return null;
172
- }
173
- try {
174
- const signature = await KeyManager.sign(this.keyPair, new TextEncoder().encode(data));
175
- return signature;
176
- } catch (e) {
177
- console.warn(`[Registry] Signing failed:`, e);
178
- return null;
179
- }
180
- }
181
-
182
- async verifySignature(did: string, data: string, signature: Uint8Array): Promise<boolean> {
183
- try {
184
- const agent = this.agents.get(did);
185
- if (!agent || !agent.publicKey) {
186
- console.warn(`[Registry] Unknown agent or missing public key: ${did.substring(0, 20)}`);
187
- return false;
188
- }
189
-
190
- const publicKey = Buffer.from(agent.publicKey, 'hex');
191
- const keyPair = { privateKey: new Uint8Array(32), publicKey, did };
192
- const isValid = await KeyManager.verify(keyPair, new TextEncoder().encode(data), signature);
193
-
194
- if (!isValid) {
195
- console.warn(`[Registry] Invalid signature from ${did.substring(0, 20)}`);
196
- }
197
-
198
- return isValid;
199
- } catch (e) {
200
- console.warn(`[Registry] Verification failed:`, e);
201
- return false;
202
- }
203
- }
204
-
205
- registerAgent(endpoint: AgentEndpoint): void {
206
- const entry: AgentRegistryEntry = {
207
- did: endpoint.did,
208
- name: endpoint.name,
209
- peerId: endpoint.peerId,
210
- multiaddrs: endpoint.multiaddrs,
211
- registeredAt: Date.now(),
212
- lastSeen: Date.now(),
213
- lastBroadcast: 0,
214
- publicKey: endpoint.publicKey || ''
215
- };
216
-
217
- const existing = this.agents.get(endpoint.did);
218
- if (existing) {
219
- entry.registeredAt = existing.registeredAt;
220
- entry.lastBroadcast = existing.lastBroadcast;
221
- if (endpoint.publicKey && !existing.publicKey) {
222
- entry.publicKey = endpoint.publicKey;
223
- }
224
- }
225
-
226
- this.agents.set(endpoint.did, entry);
227
- this.saveRegistry();
228
- console.log(`[Registry] Registered agent: ${endpoint.name} (${endpoint.did.substring(0, 20)}...)`);
229
- }
230
-
231
- getAgent(did: string): AgentRegistryEntry | undefined {
232
- return this.agents.get(did);
233
- }
234
-
235
- getAgentByPeerId(peerId: string): AgentRegistryEntry | undefined {
236
- for (const agent of this.agents.values()) {
237
- if (agent.peerId === peerId) {
238
- return agent;
239
- }
240
- }
241
- return undefined;
242
- }
243
-
244
- getAllAgents(): AgentRegistryEntry[] {
245
- return Array.from(this.agents.values());
246
- }
247
-
248
- getOnlineAgents(timeoutMs: number = 10 * 60 * 1000): AgentRegistryEntry[] {
249
- const now = Date.now();
250
- return Array.from(this.agents.values()).filter(
251
- a => now - a.lastSeen < timeoutMs
252
- );
253
- }
254
-
255
- updateLastSeen(did: string): void {
256
- const agent = this.agents.get(did);
257
- if (agent) {
258
- agent.lastSeen = Date.now();
259
- this.saveRegistry();
260
- }
261
- }
262
-
263
- removeAgent(did: string): void {
264
- this.agents.delete(did);
265
- this.saveRegistry();
266
- }
267
-
268
- async createSignedBroadcast(): Promise<AddressBroadcast | null> {
269
- if (!this.ownEndpoint || !this.keyPair) return null;
270
-
271
- const now = Date.now();
272
- const entry = this.agents.get(this.ownEndpoint.did);
273
- if (entry && now - entry.lastBroadcast < ADDRESS_BROADCAST_INTERVAL) {
274
- return null;
275
- }
276
-
277
- const relayAddr = (p2pNetwork as any).getRelayAddress?.() || null;
278
-
279
- const broadcastData = JSON.stringify({
280
- type: 'address_broadcast',
281
- from: this.keyPair.did,
282
- name: this.ownEndpoint.name,
283
- peerId: this.ownEndpoint.peerId,
284
- multiaddrs: this.ownEndpoint.multiaddrs,
285
- relayAddr: relayAddr || undefined,
286
- canRelay: relayAddr ? true : false,
287
- timestamp: now
288
- });
289
-
290
- const signature = await this.signMessage(broadcastData);
291
- if (!signature) return null;
292
-
293
- const broadcast: AddressBroadcast = {
294
- type: 'address_broadcast',
295
- from: this.keyPair.did,
296
- name: this.ownEndpoint.name,
297
- peerId: this.ownEndpoint.peerId,
298
- multiaddrs: this.ownEndpoint.multiaddrs,
299
- relayAddr: relayAddr || undefined,
300
- canRelay: relayAddr ? true : false,
301
- timestamp: now,
302
- signature: Buffer.from(signature).toString('hex')
303
- };
304
-
305
- if (entry) {
306
- entry.lastBroadcast = now;
307
- }
308
-
309
- return broadcast;
310
- }
311
-
312
- async handleAddressBroadcast(broadcast: AddressBroadcast): Promise<boolean> {
313
- if (!this.keyPair || broadcast.from === this.keyPair.did) {
314
- return false;
315
- }
316
-
317
- if (Math.abs(broadcast.timestamp - Date.now()) > MESSAGE_TIMESTAMP_TOLERANCE) {
318
- console.log(`[Registry] Stale broadcast from ${broadcast.from.substring(0, 20)}`);
319
- return false;
320
- }
321
-
322
- const broadcastData = JSON.stringify({
323
- type: 'address_broadcast',
324
- from: broadcast.from,
325
- name: broadcast.name,
326
- peerId: broadcast.peerId,
327
- multiaddrs: broadcast.multiaddrs,
328
- relayAddr: broadcast.relayAddr,
329
- canRelay: broadcast.canRelay,
330
- timestamp: broadcast.timestamp
331
- });
332
-
333
- const signature = Buffer.from(broadcast.signature, 'hex');
334
- const isValid = await this.verifySignature(broadcast.from, broadcastData, signature);
335
- if (!isValid) {
336
- console.warn(`[Registry] Invalid broadcast signature from ${broadcast.from.substring(0, 20)}`);
337
- return false;
338
- }
339
-
340
- const entry: AgentRegistryEntry = {
341
- did: broadcast.from,
342
- name: broadcast.name,
343
- peerId: broadcast.peerId,
344
- multiaddrs: broadcast.multiaddrs,
345
- registeredAt: Date.now(),
346
- lastSeen: broadcast.timestamp,
347
- lastBroadcast: 0,
348
- publicKey: Buffer.from(this.keyPair.publicKey).toString('hex'),
349
- relayAddr: broadcast.relayAddr,
350
- canRelay: broadcast.canRelay
351
- };
352
-
353
- const existing = this.agents.get(broadcast.from);
354
- if (existing) {
355
- entry.registeredAt = existing.registeredAt;
356
- entry.lastBroadcast = existing.lastBroadcast;
357
- if (!existing.publicKey) {
358
- existing.publicKey = entry.publicKey;
359
- }
360
- }
361
-
362
- this.agents.set(broadcast.from, entry);
363
- this.saveRegistry();
364
-
365
- console.log(`[Registry] Verified broadcast from: ${broadcast.name} (${broadcast.from.substring(0, 20)}...) ${broadcast.canRelay ? '[Relay Capable]' : ''}`);
366
- return true;
367
- }
368
-
369
- async createSignedMessage(type: string, payload: string): Promise<SignedMessage | null> {
370
- if (!this.keyPair || !this.ownEndpoint) return null;
371
-
372
- const messageData = JSON.stringify({
373
- type,
374
- from: this.keyPair.did,
375
- name: this.ownEndpoint.name,
376
- payload,
377
- timestamp: Date.now()
378
- });
379
-
380
- const signature = await this.signMessage(messageData);
381
- if (!signature) return null;
382
-
383
- return {
384
- type,
385
- from: this.keyPair.did,
386
- name: this.ownEndpoint.name,
387
- payload,
388
- timestamp: Date.now(),
389
- signature: Buffer.from(signature).toString('hex')
390
- };
391
- }
392
-
393
- async verifySignedMessage(msg: SignedMessage): Promise<boolean> {
394
- if (!this.keyPair || msg.from === this.keyPair.did) {
395
- return false;
396
- }
397
-
398
- if (Math.abs(msg.timestamp - Date.now()) > MESSAGE_TIMESTAMP_TOLERANCE) {
399
- console.log(`[Registry] Stale message from ${msg.from.substring(0, 20)}`);
400
- return false;
401
- }
402
-
403
- const messageData = JSON.stringify({
404
- type: msg.type,
405
- from: msg.from,
406
- name: msg.name,
407
- payload: msg.payload,
408
- timestamp: msg.timestamp
409
- });
410
-
411
- const signature = Buffer.from(msg.signature, 'hex');
412
- return this.verifySignature(msg.from, messageData, signature);
413
- }
414
-
415
- async connectToAgent(did: string): Promise<boolean> {
416
- const agent = this.agents.get(did);
417
- if (!agent) {
418
- console.log(`[Registry] Unknown agent: ${did}`);
419
- return false;
420
- }
421
-
422
- if (!agent.multiaddrs || agent.multiaddrs.length === 0) {
423
- console.log(`[Registry] No addresses for agent: ${agent.name}`);
424
- if (!agent.relayAddr) {
425
- return false;
426
- }
427
- console.log(`[Registry] Agent has relay address, will try relay connection`);
428
- }
429
-
430
- let connected = false;
431
-
432
- if (agent.multiaddrs && agent.multiaddrs.length > 0) {
433
- for (const addr of agent.multiaddrs) {
434
- try {
435
- const ma = createMultiaddr(addr);
436
- const node = (p2pNetwork as any).node;
437
- if (node) {
438
- await node.dial(ma);
439
- connected = true;
440
- console.log(`[Registry] Direct connection to ${agent.name} at ${addr}`);
441
- break;
442
- }
443
- } catch (e) {
444
- console.warn(`[Registry] Failed to connect directly to ${addr}:`, e);
445
- }
446
- }
447
- }
448
-
449
- if (!connected && agent.relayAddr) {
450
- console.log(`[Registry] Trying relay connection to ${agent.name} via ${agent.relayAddr}`);
451
- try {
452
- const node = (p2pNetwork as any).node;
453
- if (node) {
454
- const ma = createMultiaddr(`${agent.relayAddr}/p2p/${agent.peerId}`);
455
- await node.dial(ma);
456
- connected = true;
457
- console.log(`[Registry] Relay connection to ${agent.name} established`);
458
- }
459
- } catch (e) {
460
- console.warn(`[Registry] Failed to connect via relay:`, e);
461
- }
462
- }
463
-
464
- if (!connected && agent.canRelay) {
465
- const relayPeers = this.findRelayPeers();
466
- for (const relay of relayPeers) {
467
- if (relay.peerId === agent.peerId) continue;
468
- try {
469
- console.log(`[Registry] Trying to relay via ${relay.name} (${relay.peerId.substring(0, 12)}...)`);
470
- const relayAddr = relay.relayAddr || relay.multiaddrs?.[0];
471
- if (relayAddr) {
472
- const node = (p2pNetwork as any).node;
473
- if (node) {
474
- const ma = createMultiaddr(`${relayAddr}/p2p/${agent.peerId}`);
475
- await node.dial(ma);
476
- connected = true;
477
- console.log(`[Registry] Connection to ${agent.name} via relay ${relay.name}`);
478
- break;
479
- }
480
- }
481
- } catch (e) {
482
- console.warn(`[Registry] Failed to relay via ${relay.name}:`, e);
483
- }
484
- }
485
- }
486
-
487
- if (connected) {
488
- this.updateLastSeen(did);
489
- p2pNetwork.addPersistentPeer({
490
- peerId: agent.peerId,
491
- multiaddrs: agent.multiaddrs,
492
- did: agent.did,
493
- name: agent.name,
494
- relayAddr: agent.relayAddr,
495
- canRelay: agent.canRelay
496
- });
497
- }
498
-
499
- return connected;
500
- }
501
-
502
- private findRelayPeers(): AgentRegistryEntry[] {
503
- const now = Date.now();
504
- return Array.from(this.agents.values()).filter(
505
- a => a.canRelay && a.relayAddr && now - a.lastSeen < 30 * 60 * 1000
506
- );
507
- }
508
-
509
- async relayMessage(toDid: string, data: Uint8Array, fromDid: string, hops = 0): Promise<boolean> {
510
- if (hops >= MAX_RELAY_HOPS) {
511
- console.log(`[Registry] Max relay hops reached for ${toDid}`);
512
- return false;
513
- }
514
-
515
- const targetAgent = this.agents.get(toDid);
516
- if (!targetAgent) {
517
- console.log(`[Registry] Unknown relay target: ${toDid}`);
518
- return false;
519
- }
520
-
521
- try {
522
- const peerId = targetAgent.peerId;
523
- const relayMsg = new TextEncoder().encode(
524
- `RELAY:${fromDid}|${hops + 1}|${new TextDecoder().decode(data)}`
525
- );
526
- await p2pNetwork.sendMessage(peerId, 'relay', new TextDecoder().decode(relayMsg));
527
- return true;
528
- } catch (e) {
529
- console.warn(`[Registry] Relay failed to ${toDid}:`, e);
530
- return false;
531
- }
532
- }
533
-
534
- getConnectionInfo(): { did: string; name: string; peerId: string; multiaddrs: string[] } | null {
535
- if (!this.ownEndpoint) return null;
536
- return {
537
- did: this.ownEndpoint.did,
538
- name: this.ownEndpoint.name,
539
- peerId: this.ownEndpoint.peerId,
540
- multiaddrs: this.ownEndpoint.multiaddrs
541
- };
542
- }
543
- }
544
-
545
- export const agentRegistry = new AgentRegistry();
546
-
547
- export class AgentMessaging {
548
- private registry: AgentRegistry;
549
- private messageHandlers: Map<string, (msg: Uint8Array, from: string, did?: string) => void> = new Map();
550
-
551
- constructor(registry: AgentRegistry) {
552
- this.registry = registry;
553
- }
554
-
555
- registerHandler(type: string, handler: (msg: Uint8Array, from: string, did?: string) => void): void {
556
- this.messageHandlers.set(type, handler);
557
- }
558
-
559
- async sendSignedToAgent(did: string, type: string, payload: string): Promise<boolean> {
560
- const agent = this.registry.getAgent(did);
561
- if (!agent) {
562
- console.log(`[Messaging] Unknown agent: ${did}`);
563
- return false;
564
- }
565
-
566
- const signedMsg = await this.registry.createSignedMessage(type, payload);
567
- if (!signedMsg) {
568
- console.warn(`[Messaging] Failed to create signed message`);
569
- return false;
570
- }
571
-
572
- try {
573
- const messageStr = JSON.stringify(signedMsg);
574
- await p2pNetwork.sendMessage(agent.peerId, 'signed', messageStr);
575
- return true;
576
- } catch (e) {
577
- console.warn(`[Messaging] Failed to send to ${did}:`, e);
578
- return false;
579
- }
580
- }
581
-
582
- async sendToAgent(did: string, type: string, payload: string): Promise<boolean> {
583
- const agent = this.registry.getAgent(did);
584
- if (!agent) {
585
- console.log(`[Messaging] Unknown agent: ${did}`);
586
- return false;
587
- }
588
-
589
- const message = `${type}:${payload}`;
590
-
591
- try {
592
- await p2pNetwork.sendMessage(agent.peerId, type, payload);
593
- return true;
594
- } catch (e) {
595
- console.warn(`[Messaging] Failed to send to ${did}:`, e);
596
- return false;
597
- }
598
- }
599
-
600
- async broadcastToAll(type: string, payload: string): Promise<void> {
601
- const agents = this.registry.getOnlineAgents();
602
- const ownEndpoint = this.registry.getOwnEndpoint();
603
-
604
- for (const agent of agents) {
605
- if (agent.did === ownEndpoint?.did) continue;
606
-
607
- try {
608
- await p2pNetwork.sendMessage(agent.peerId, type, payload);
609
- } catch (e) {
610
- console.warn(`[Messaging] Broadcast failed to ${agent.name}:`, e);
611
- }
612
- }
613
- }
614
-
615
- parseMessage(data: Uint8Array): { type: string; payload: string; did?: string; isRelay?: boolean; relayHops?: number } | null {
616
- const messageStr = new TextDecoder().decode(data);
617
-
618
- if (messageStr.startsWith('RELAY:')) {
619
- const parts = messageStr.substring(6).split('|');
620
- if (parts.length >= 3) {
621
- const fromDid = parts[0];
622
- const hops = parseInt(parts[1], 10);
623
- const innerMessage = parts.slice(2).join('|');
624
- return this.parseInnerMessage(innerMessage, fromDid, true, hops);
625
- }
626
- }
627
-
628
- return this.parseInnerMessage(messageStr, undefined, false);
629
- }
630
-
631
- private parseInnerMessage(messageStr: string, relayFrom?: string, isRelay = false, relayHops = 0): { type: string; payload: string; did?: string; isRelay?: boolean; relayHops?: number } | null {
632
- if (messageStr.startsWith('DID:')) {
633
- const didEndIdx = messageStr.indexOf('|');
634
- if (didEndIdx > 0) {
635
- const did = messageStr.substring(4, didEndIdx);
636
- const afterDid = messageStr.substring(didEndIdx + 1);
637
- const colonIdx = afterDid.indexOf(':');
638
- if (colonIdx > 0) {
639
- return {
640
- type: afterDid.substring(0, colonIdx),
641
- payload: afterDid.substring(colonIdx + 1),
642
- did: relayFrom || did,
643
- isRelay,
644
- relayHops
645
- };
646
- }
647
- return { type: afterDid, payload: '', did: relayFrom || did, isRelay, relayHops };
648
- }
649
- }
650
-
651
- const colonIdx = messageStr.indexOf(':');
652
- if (colonIdx > 0) {
653
- return {
654
- type: messageStr.substring(0, colonIdx),
655
- payload: messageStr.substring(colonIdx + 1),
656
- did: relayFrom,
657
- isRelay,
658
- relayHops
659
- };
660
- }
661
- return { type: messageStr, payload: '', did: relayFrom, isRelay, relayHops };
662
- }
663
-
664
- async dispatchSignedMessage(data: Uint8Array, fromPeerId: string): Promise<boolean> {
665
- try {
666
- const messageStr = new TextDecoder().decode(data);
667
- const signedMsg: SignedMessage = JSON.parse(messageStr);
668
-
669
- if (!signedMsg.type || !signedMsg.from || !signedMsg.signature) {
670
- console.warn(`[Messaging] Invalid signed message format`);
671
- return false;
672
- }
673
-
674
- const isValid = await this.registry.verifySignedMessage(signedMsg);
675
- if (!isValid) {
676
- console.warn(`[Messaging] Signature verification failed for ${signedMsg.from.substring(0, 20)}`);
677
- return false;
678
- }
679
-
680
- const handler = this.messageHandlers.get(signedMsg.type);
681
- if (handler) {
682
- handler(data, fromPeerId, signedMsg.from);
683
- }
684
-
685
- return true;
686
- } catch (e) {
687
- console.warn(`[Messaging] Failed to dispatch signed message:`, e);
688
- return false;
689
- }
690
- }
691
-
692
- dispatchMessage(data: Uint8Array, fromPeerId: string): void {
693
- const parsed = this.parseMessage(data);
694
- if (!parsed) return;
695
-
696
- const handler = this.messageHandlers.get(parsed.type);
697
- if (handler) {
698
- handler(data, fromPeerId, parsed.did);
699
- }
700
- }
701
- }
702
-
703
- export const agentMessaging = new AgentMessaging(agentRegistry);
704
-
705
- export async function initializeAgentNetwork(
706
- ownDid: string,
707
- ownName: string,
708
- peerId: string,
709
- multiaddrs: string[]
710
- ): Promise<void> {
711
- await agentRegistry.initialize();
712
-
713
- const keyPair = agentRegistry.getKeyPair();
714
- const publicKeyHex = keyPair ? Buffer.from(keyPair.publicKey).toString('hex') : undefined;
715
-
716
- agentRegistry.setOwnEndpoint({
717
- did: keyPair?.did || ownDid,
718
- name: ownName,
719
- peerId,
720
- multiaddrs,
721
- publicKey: publicKeyHex
722
- });
723
-
724
- p2pNetwork.setOwnDid(keyPair?.did || ownDid);
725
-
726
- p2pNetwork.onMessage('signed', async (data, from, did) => {
727
- await agentMessaging.dispatchSignedMessage(data, from);
728
- });
729
-
730
- p2pNetwork.onMessage('address_broadcast', async (data, from, did) => {
731
- try {
732
- const messageStr = new TextDecoder().decode(data);
733
- const broadcast: AddressBroadcast = JSON.parse(messageStr);
734
- if (broadcast.type === 'address_broadcast') {
735
- await agentRegistry.handleAddressBroadcast(broadcast);
736
- }
737
- } catch (e) {
738
- console.warn(`[AgentNetwork] Failed to handle address broadcast:`, e);
739
- }
740
- });
741
-
742
- p2pNetwork.onMessage('relay', (data, from, did) => {
743
- try {
744
- const relayMsg = new TextDecoder().decode(data);
745
- const relayMatch = relayMsg.match(/^RELAY:(.+?)\|(\d+)\|(.+)$/);
746
- if (relayMatch) {
747
- const [, targetDid, hopsStr, innerData] = relayMatch;
748
- const hops = parseInt(hopsStr, 10);
749
-
750
- if (hops < MAX_RELAY_HOPS) {
751
- agentRegistry.relayMessage(targetDid, new TextEncoder().encode(innerData), did || from, hops);
752
- }
753
- }
754
- } catch (e) {
755
- console.warn(`[AgentNetwork] Failed to handle relay:`, e);
756
- }
757
- });
758
-
759
- p2pNetwork.onMessage('discovery', async (data, from, did) => {
760
- try {
761
- const messageStr = new TextDecoder().decode(data);
762
- const discovery: DiscoveryMessage = JSON.parse(messageStr);
763
- if (discovery.type === 'discovery') {
764
- const isValid = await agentRegistry.verifySignature(
765
- discovery.from,
766
- JSON.stringify({ ...discovery, signature: undefined }),
767
- Buffer.from(discovery.signature, 'hex')
768
- );
769
- if (isValid) {
770
- console.log(`[AgentNetwork] Verified discovery from: ${discovery.name}`);
771
- }
772
- }
773
- } catch (e) {
774
- console.warn(`[AgentNetwork] Failed to handle discovery:`, e);
775
- }
776
- });
777
-
778
- console.log(`[AgentNetwork] Initialized with DID: ${keyPair?.did.substring(0, 20) || ownDid.substring(0, 20)}...`);
779
- }
780
-
781
- export async function broadcastOwnAddress(): Promise<void> {
782
- const broadcast = await agentRegistry.createSignedBroadcast();
783
- if (broadcast) {
784
- const data = JSON.stringify(broadcast);
785
- await p2pNetwork.broadcast('address_broadcast', data);
786
- console.log(`[AgentNetwork] Broadcast signed address to network`);
787
- }
788
- }
789
-
790
- export async function findAndConnectToAgent(did: string): Promise<boolean> {
791
- return agentRegistry.connectToAgent(did);
792
- }
793
-
794
- export async function sendMessageToAgent(did: string, type: string, payload: string): Promise<boolean> {
795
- return agentMessaging.sendSignedToAgent(did, type, payload);
796
- }
797
-
798
- export async function sendUnverifiedMessageToAgent(did: string, type: string, payload: string): Promise<boolean> {
799
- return agentMessaging.sendToAgent(did, type, payload);
800
- }