@bolloon/bolloon-agent 0.1.0 → 0.1.2

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 (581) hide show
  1. package/bin/bolloon-cli.cjs +157 -0
  2. package/bin/bolloon-daemon.sh +207 -0
  3. package/bin/bolloon.cmd +11 -0
  4. package/dist/agents/constraint-layer.js +10 -15
  5. package/dist/agents/pi-sdk.js +433 -106
  6. package/dist/agents/protocol.js +82 -1
  7. package/dist/agents/subagent-manager.js +2 -2
  8. package/dist/agents/workflow-engine.js +15 -20
  9. package/dist/agents/workflow-pivot-loop.js +541 -0
  10. package/dist/bollharness/src/index.js +5 -0
  11. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +6 -0
  12. package/dist/bollharness/src/scripts/checks/check_api_types.js +45 -0
  13. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +146 -0
  14. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +6 -0
  15. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +6 -0
  16. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +6 -0
  17. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +6 -0
  18. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +135 -0
  19. package/dist/bollharness/src/scripts/checks/check_doc_links.js +31 -0
  20. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +6 -0
  21. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +34 -0
  22. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +63 -0
  23. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +41 -0
  24. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +6 -0
  25. package/dist/bollharness/src/scripts/checks/check_security.js +48 -0
  26. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +6 -0
  27. package/dist/bollharness/src/scripts/checks/check_versions.js +6 -0
  28. package/dist/bollharness/src/scripts/checks/finding.js +13 -0
  29. package/dist/bollharness/src/scripts/checks/next_decision_number.js +20 -0
  30. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +6 -0
  31. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +8 -0
  32. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +8 -0
  33. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +8 -0
  34. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +8 -0
  35. package/dist/bollharness/src/scripts/context_router.js +67 -0
  36. package/dist/bollharness/src/scripts/deploy-guard.js +157 -0
  37. package/dist/bollharness/src/scripts/guard-feedback.js +192 -0
  38. package/dist/bollharness/src/scripts/guard_router.js +158 -0
  39. package/dist/bollharness/src/scripts/hooks/_hook_output.js +6 -0
  40. package/dist/bollharness/src/scripts/hooks/auto-python3.js +6 -0
  41. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +6 -0
  42. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +6 -0
  43. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +92 -0
  44. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +63 -0
  45. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +6 -0
  46. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +6 -0
  47. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +6 -0
  48. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +6 -0
  49. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +6 -0
  50. package/dist/bollharness/src/scripts/hooks/loop-detection.js +73 -0
  51. package/dist/bollharness/src/scripts/hooks/owner-guard.js +6 -0
  52. package/dist/bollharness/src/scripts/hooks/precompact.js +6 -0
  53. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +6 -0
  54. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +108 -0
  55. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +6 -0
  56. package/dist/bollharness/src/scripts/hooks/session-reflection.js +7 -0
  57. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +7 -0
  58. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +7 -0
  59. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +7 -0
  60. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +157 -0
  61. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +6 -0
  62. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +10 -0
  63. package/dist/bollharness/src/scripts/install/install-trust-token.js +7 -0
  64. package/dist/bollharness/src/scripts/install/multi_project_registry.js +9 -0
  65. package/dist/bollharness/src/scripts/install/phase2_auto.js +21 -0
  66. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +6 -0
  67. package/dist/bollharness/src/scripts/install/tier_selector.js +7 -0
  68. package/dist/bollharness/src/scripts/install/transcript_miner.js +7 -0
  69. package/dist/bollharness/src/scripts/lib/claim_patterns.js +10 -0
  70. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +12 -0
  71. package/dist/bollharness/src/scripts/sanitize.js +6 -0
  72. package/dist/bollharness-integration/channel-judgment-engine.js +530 -0
  73. package/dist/bollharness-integration/context-chain-router.js +383 -0
  74. package/dist/bollharness-integration/context-router-judgment.js +13 -21
  75. package/dist/bollharness-integration/context-router.js +22 -64
  76. package/dist/bollharness-integration/gate-state-machine.js +14 -19
  77. package/dist/bollharness-integration/gate-transition-hooks.js +16 -61
  78. package/dist/bollharness-integration/guard-checker.js +21 -68
  79. package/dist/bollharness-integration/index.js +14 -124
  80. package/dist/bollharness-integration/integration.js +13 -20
  81. package/dist/bollharness-integration/llm-judgment-engine.js +569 -0
  82. package/dist/bollharness-integration/skill-adapter.js +18 -64
  83. package/dist/cli-entry.js +261 -0
  84. package/dist/constraint-runtime/src/commands.js +17 -7
  85. package/dist/constraint-runtime/src/constraint/budget.js +1 -6
  86. package/dist/constraint-runtime/src/constraint/permission.js +1 -6
  87. package/dist/constraint-runtime/src/models.js +1 -3
  88. package/dist/constraint-runtime/src/tools.js +17 -7
  89. package/dist/constraints/index.js +1 -7
  90. package/dist/documents/reader.js +8 -49
  91. package/dist/heartbeat/DaemonManager.js +242 -0
  92. package/dist/heartbeat/HealthMonitor.js +285 -0
  93. package/dist/heartbeat/StartupVerifier.js +205 -0
  94. package/dist/heartbeat/Watchdog.js +168 -0
  95. package/dist/heartbeat/index.js +84 -0
  96. package/dist/heartbeat/types.js +5 -0
  97. package/dist/index.js +381 -28
  98. package/dist/llm/config-store.js +31 -57
  99. package/dist/llm/llm-judgment-client.js +389 -0
  100. package/dist/llm/pi-ai.js +9 -52
  101. package/dist/network/agent-network.js +46 -90
  102. package/dist/network/hybrid-messenger.js +125 -0
  103. package/dist/network/iroh-bootstrap.js +38 -0
  104. package/dist/network/iroh-discovery.js +145 -0
  105. package/dist/network/iroh-integration.js +9 -16
  106. package/dist/network/iroh-transport.js +10 -48
  107. package/dist/network/p2p.js +23 -62
  108. package/dist/network/storage/adapters/json-adapter.js +4 -42
  109. package/dist/network/storage/index.js +147 -0
  110. package/dist/network/storage/types.js +14 -0
  111. package/dist/pi-ecosystem/index.js +233 -0
  112. package/dist/pi-ecosystem-colony/index.js +29 -90
  113. package/dist/pi-ecosystem-goals/index.js +20 -74
  114. package/dist/pi-ecosystem-judgment/decision.js +29 -47
  115. package/dist/pi-ecosystem-judgment/distillation.js +16 -29
  116. package/dist/pi-ecosystem-judgment/human-value-store.js +13 -60
  117. package/dist/pi-ecosystem-judgment/index.js +21 -74
  118. package/dist/pi-ecosystem-judgment/value-injection.js +26 -72
  119. package/dist/pi-ecosystem-mcp/index.js +24 -78
  120. package/dist/pi-ecosystem-subagents/index.js +20 -69
  121. package/dist/social/ant-colony/AdaptiveHeartbeat.js +3 -8
  122. package/dist/social/ant-colony/PheromoneEngine.js +11 -49
  123. package/dist/social/ant-colony/index.js +6 -0
  124. package/dist/social/ant-colony/types.js +4 -8
  125. package/dist/social/channels/ChannelManager.js +8 -46
  126. package/dist/social/channels/DiapChannelBridge.js +9 -47
  127. package/dist/social/channels/InterestMatcher.js +2 -7
  128. package/dist/social/channels/channel-agent-session.js +309 -0
  129. package/dist/social/channels/channel-heartbeat-agent.js +494 -0
  130. package/dist/social/channels/diap-doc-parser.js +204 -0
  131. package/dist/social/channels/harness-workflow-integrator.js +446 -0
  132. package/dist/social/channels/index.js +9 -0
  133. package/dist/social/channels/types.js +3 -7
  134. package/dist/social/global-shared-context.js +6 -47
  135. package/dist/social/heartbeat.js +29 -72
  136. package/dist/social/persona/enhanced-persona.js +299 -0
  137. package/dist/web/client.js +302 -136
  138. package/dist/web/components/p2p/index.js +159 -9
  139. package/dist/web/components/p2p/p2p-connection.js +136 -0
  140. package/dist/web/components/p2p/p2p-manager.js +24 -0
  141. package/dist/web/components/p2p/p2p-store-memory.js +1 -1
  142. package/dist/web/components/p2p/types.js +7 -0
  143. package/dist/web/index.html +5 -0
  144. package/dist/web/style.css +118 -0
  145. package/package.json +12 -6
  146. package/scripts/build-cli.js +206 -0
  147. package/scripts/postinstall.js +153 -0
  148. package/src/agents/pi-sdk.ts +347 -28
  149. package/src/agents/protocol.ts +95 -1
  150. package/src/agents/workflow-pivot-loop.ts +674 -0
  151. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +34 -0
  152. package/src/cli-entry.ts +304 -0
  153. package/src/heartbeat/DaemonManager.ts +283 -0
  154. package/src/heartbeat/HealthMonitor.ts +316 -0
  155. package/src/heartbeat/StartupVerifier.ts +223 -0
  156. package/src/heartbeat/Watchdog.ts +198 -0
  157. package/src/heartbeat/index.ts +108 -0
  158. package/src/heartbeat/types.ts +82 -0
  159. package/src/llm/config-store.ts +23 -5
  160. package/src/network/iroh-transport.ts +3 -3
  161. package/src/web/client.js +302 -136
  162. package/src/web/components/p2p/P2PModal.tsx +91 -3
  163. package/src/web/components/p2p/index.ts +171 -9
  164. package/src/web/components/p2p/p2p-connection.ts +153 -1
  165. package/src/web/components/p2p/p2p-manager.ts +39 -1
  166. package/src/web/components/p2p/p2p-store-memory.ts +1 -1
  167. package/src/web/components/p2p/p2p-tools.ts +315 -0
  168. package/src/web/components/p2p/types.ts +58 -0
  169. package/src/web/index.html +5 -0
  170. package/src/web/server.ts +353 -36
  171. package/src/web/style.css +118 -0
  172. package/tsconfig.cli.json +16 -0
  173. package/tsconfig.electron.json +1 -1
  174. package/tsconfig.json +1 -2
  175. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  176. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  177. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  178. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  179. package/dist/electron-preload.js +0 -15
  180. package/dist/electron-preload.js.map +0 -1
  181. package/dist/electron.js +0 -206
  182. package/dist/electron.js.map +0 -1
  183. package/dist/test/constraint-layer.test.js +0 -164
  184. package/dist/test/global-shared-context.test.js +0 -315
  185. package/dist/test/pi-sdk.test.js +0 -47
  186. package/dist/test/set-persona.test.js +0 -38
  187. package/dist/test/subagent-manager.test.js +0 -276
  188. package/dist/test/workflow-engine.test.js +0 -87
  189. package/dist/web/server.js +0 -1647
  190. package/dist/web/server.js.map +0 -1
  191. package/dist/workflows/collaboration.js +0 -374
  192. package/dist/workflows/index.js +0 -54
  193. package/docs/agent-communication.md +0 -333
  194. package/docs/plans/2026-05-15-document-agent-design.md +0 -479
  195. package/docs/plans/2026-05-15-document-agent-implementation-plan.md +0 -792
  196. package/docs/plans/2026-05-16-chat-ui-design.md +0 -86
  197. package/docs/plans/2026-05-16-constraint-runtime-design.md +0 -106
  198. package/docs/plans/2026-05-16-constraint-runtime-implementation.md +0 -441
  199. package/docs//346/225/260/345/255/246/350/276/205/345/212/251/346/231/272/350/203/275/344/275/223-/346/240/270/345/277/203/346/225/210/346/236/234/345/256/232/344/271/211.md +0 -287
  200. package/src/bollharness/.boll/CLAUDE.md.template +0 -34
  201. package/src/bollharness/.boll/MANIFEST.yaml +0 -213
  202. package/src/bollharness/.boll/active-review-agents/.gitkeep +0 -0
  203. package/src/bollharness/.boll/agents/review-base.yaml +0 -108
  204. package/src/bollharness/.boll/deploy-allowlist.yaml +0 -38
  205. package/src/bollharness/.boll/inbox/schema/message-v1.json +0 -99
  206. package/src/bollharness/.boll/install-staging/.gitkeep +0 -0
  207. package/src/bollharness/.boll/issue-adapter.yaml +0 -31
  208. package/src/bollharness/.boll/plugins/boll-mode-toolkit/contracts/mode-contract.md +0 -85
  209. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  210. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  211. package/src/bollharness/.boll/rules/backend-routes.md +0 -31
  212. package/src/bollharness/.boll/rules/closure-semantics.md +0 -30
  213. package/src/bollharness/.boll/rules/env-vars.md +0 -32
  214. package/src/bollharness/.boll/rules/hanis-protocol.md +0 -145
  215. package/src/bollharness/.boll/rules/repo-structure.md +0 -42
  216. package/src/bollharness/.boll/rules/review-agent-isolation.md +0 -73
  217. package/src/bollharness/.boll/rules/source-of-truth.md +0 -33
  218. package/src/bollharness/.boll/settings.json +0 -180
  219. package/src/bollharness/.boll/settings.json.template +0 -31
  220. package/src/bollharness/.boll/skills/arch/SKILL.md +0 -372
  221. package/src/bollharness/.boll/skills/bug-pipeline/SKILL.md +0 -168
  222. package/src/bollharness/.boll/skills/bug-triage/SKILL.md +0 -161
  223. package/src/bollharness/.boll/skills/context-chains/SKILL.md +0 -250
  224. package/src/bollharness/.boll/skills/context-chains/context-chain-index.md +0 -48
  225. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/code_change_extractor.ts +0 -142
  226. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/debugging_extractor.ts +0 -126
  227. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/design_extractor.ts +0 -148
  228. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/planning_extractor.ts +0 -162
  229. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/question_extractor.ts +0 -116
  230. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/review_extractor.ts +0 -136
  231. package/src/bollharness/.boll/skills/crystal-learn/SKILL.md +0 -93
  232. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-0.md +0 -34
  233. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-1.md +0 -34
  234. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-2.md +0 -35
  235. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-3.md +0 -34
  236. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-4.md +0 -43
  237. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-5.md +0 -34
  238. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-6.md +0 -37
  239. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-7.md +0 -46
  240. package/src/bollharness/.boll/skills/guardian-fixer/PROMPT.md +0 -415
  241. package/src/bollharness/.boll/skills/guardian-fixer/SKILL.md +0 -320
  242. package/src/bollharness/.boll/skills/harness-dev/SKILL.md +0 -93
  243. package/src/bollharness/.boll/skills/harness-dev/examples/README.md +0 -227
  244. package/src/bollharness/.boll/skills/harness-dev-handoff/SKILL.md +0 -165
  245. package/src/bollharness/.boll/skills/harness-eng/SKILL.md +0 -110
  246. package/src/bollharness/.boll/skills/harness-eng-test/SKILL.md +0 -79
  247. package/src/bollharness/.boll/skills/harness-lab/SKILL.md +0 -170
  248. package/src/bollharness/.boll/skills/harness-ops/SKILL.md +0 -57
  249. package/src/bollharness/.boll/skills/harness-voice/SKILL.md +0 -183
  250. package/src/bollharness/.boll/skills/judgment/SKILL.md +0 -115
  251. package/src/bollharness/.boll/skills/lead/SKILL.md +0 -245
  252. package/src/bollharness/.boll/skills/lead/install-wow-harness.md +0 -77
  253. package/src/bollharness/.boll/skills/lead/ref-review-sop.md +0 -91
  254. package/src/bollharness/.boll/skills/lead/ref-stages.md +0 -129
  255. package/src/bollharness/.boll/skills/skill-discovery/SKILL.md +0 -169
  256. package/src/bollharness/.boll/skills/task-arch/SKILL.md +0 -106
  257. package/src/bollharness/.boll/skills/toolkit/SKILL.md +0 -57
  258. package/src/bollharness/.boll/tasks/.gitkeep +0 -0
  259. package/src/bollharness/.boll/toolkit-index.yaml +0 -112
  260. package/src/bollharness/.claude/agents/review-base.yaml +0 -108
  261. package/src/bollharness/.claude/plugins/boll-mode-toolkit/.claude-plugin/plugin.json +0 -44
  262. package/src/bollharness/.claude/plugins/boll-review-toolkit/.claude-plugin/plugin.json +0 -24
  263. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  264. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  265. package/src/bollharness/.claude/settings.json +0 -157
  266. package/src/bollharness/.claude/skills/arch/SKILL.md +0 -64
  267. package/src/bollharness/.claude/skills/crystal-learn/SKILL.md +0 -93
  268. package/src/bollharness/.claude/skills/guardian-fixer/PROMPT.md +0 -44
  269. package/src/bollharness/.claude/skills/guardian-fixer/SKILL.md +0 -324
  270. package/src/bollharness/.claude/skills/harness-dev/SKILL.md +0 -93
  271. package/src/bollharness/.claude/skills/harness-dev/examples/README.md +0 -17
  272. package/src/bollharness/.claude/skills/harness-dev-handoff/SKILL.md +0 -165
  273. package/src/bollharness/.claude/skills/harness-eng/SKILL.md +0 -183
  274. package/src/bollharness/.claude/skills/harness-eng-test/SKILL.md +0 -57
  275. package/src/bollharness/.claude/skills/harness-ops/SKILL.md +0 -57
  276. package/src/bollharness/.claude/skills/harness-voice/SKILL.md +0 -84
  277. package/src/bollharness/.claude/skills/lead/INDEX.md +0 -28
  278. package/src/bollharness/.claude/skills/lead/SKILL.md +0 -24
  279. package/src/bollharness/.claude/skills/lead/install-wow-harness.md +0 -77
  280. package/src/bollharness/.claude/skills/lead/ref-review-sop.md +0 -48
  281. package/src/bollharness/.claude/skills/lead/ref-stages.md +0 -58
  282. package/src/bollharness/.claude/skills/plan-lock/SKILL.md +0 -74
  283. package/src/bollharness/.claude/skills/skill-discovery/SKILL.md +0 -120
  284. package/src/bollharness/.claude/skills/task-arch/SKILL.md +0 -106
  285. package/src/bollharness/.claude/skills/toolkit/SKILL.md +0 -57
  286. package/src/bollharness/.claude/skills/toolkit/list.sh +0 -92
  287. package/src/bollharness/.githooks/pre-commit +0 -21
  288. package/src/bollharness/.github/workflows/ci.yml +0 -88
  289. package/src/bollharness/docs/decisions/ADR-030-guard-signal-protocol-and-governance-reload.md +0 -1076
  290. package/src/bollharness/docs/decisions/ADR-038-harness-optimization-strategy.md +0 -2039
  291. package/src/bollharness/docs/decisions/ADR-041-codex-claude-code-division-of-labor.md +0 -128
  292. package/src/bollharness/docs/decisions/ADR-H1-crystal-learn-revival.md +0 -188
  293. package/src/bollharness/docs/decisions/ADR-H2-identity-isolation.md +0 -183
  294. package/src/bollharness/docs/decisions/ADR-H3-memory-scope.md +0 -133
  295. package/src/bollharness/docs/decisions/ADR-H4-prompt-governance.md +0 -146
  296. package/src/bollharness/docs/decisions/ADR-H5-gate-quantization.md +0 -212
  297. package/src/bollharness/docs/decisions/ADR-H6-state-file-health.md +0 -211
  298. package/src/bollharness/docs/decisions/ADR-H8-issue-and-doc-compliance.md +0 -202
  299. package/src/bollharness/docs/decisions/ADR-H9-mailbox.md +0 -231
  300. package/src/bollharness/docs/decisions/PLAN-H1-crystal-learn-revival.md +0 -270
  301. package/src/bollharness/docs/decisions/PLAN-H2-identity-isolation.md +0 -291
  302. package/src/bollharness/docs/decisions/PLAN-H3-memory-scope.md +0 -228
  303. package/src/bollharness/docs/decisions/PLAN-H4-prompt-governance.md +0 -227
  304. package/src/bollharness/docs/decisions/PLAN-H5-gate-quantization.md +0 -239
  305. package/src/bollharness/docs/decisions/PLAN-H6-state-file-health.md +0 -325
  306. package/src/bollharness/docs/decisions/PLAN-H8-issue-and-doc-compliance.md +0 -242
  307. package/src/bollharness/docs/decisions/PLAN-H9-mailbox.md +0 -378
  308. package/src/bollharness/docs/launch-article-en.md +0 -276
  309. package/src/bollharness/docs/launch-article-zh.md +0 -305
  310. package/src/bollharness/docs/practice.html +0 -356
  311. package/src/bollharness/docs/practice.md +0 -82
  312. package/src/bollharness/docs/research/round-1/README.md +0 -11
  313. package/src/bollharness/docs/research/round-2/README.md +0 -11
  314. package/src/bollharness/docs/research/round-3/README.md +0 -11
  315. package/src/bollharness/docs/research/round-4/README.md +0 -11
  316. package/src/bollharness/docs/research/round-5/README.md +0 -11
  317. package/src/bollharness/docs/research/round-6/README.md +0 -11
  318. package/src/bollharness/package-lock.json +0 -48
  319. package/src/bollharness/reference/boll-reference/.claude/rules/backend-routes.md +0 -268
  320. package/src/bollharness/reference/boll-reference/.claude/rules/bridge.md +0 -20
  321. package/src/bollharness/reference/boll-reference/.claude/rules/closure-semantics.md +0 -30
  322. package/src/bollharness/reference/boll-reference/.claude/rules/coaching.md +0 -13
  323. package/src/bollharness/reference/boll-reference/.claude/rules/env-vars.md +0 -50
  324. package/src/bollharness/reference/boll-reference/.claude/rules/hackathon.md +0 -12
  325. package/src/bollharness/reference/boll-reference/.claude/rules/repo-structure.md +0 -184
  326. package/src/bollharness/reference/boll-reference/.claude/rules/review-agent-isolation.md +0 -112
  327. package/src/bollharness/reference/boll-reference/.claude/rules/scenes.md +0 -12
  328. package/src/bollharness/reference/boll-reference/.claude/skills/arch/SKILL.md +0 -551
  329. package/src/bollharness/reference/boll-reference/.claude/skills/boll-animation/SKILL.md +0 -26
  330. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/SKILL.md +0 -227
  331. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/agents/openai.yaml +0 -4
  332. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-failure-taxonomy.md +0 -142
  333. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-validation-ladder.md +0 -107
  334. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal/SKILL.md +0 -893
  335. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal-learn/SKILL.md +0 -89
  336. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/SKILL.md +0 -93
  337. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/examples/README.md +0 -209
  338. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev-handoff/SKILL.md +0 -165
  339. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng/SKILL.md +0 -110
  340. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-frontend/SKILL.md +0 -203
  341. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-hdc/SKILL.md +0 -27
  342. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-orchestrator/SKILL.md +0 -28
  343. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-prompt/SKILL.md +0 -27
  344. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-test/SKILL.md +0 -79
  345. package/src/bollharness/reference/boll-reference/.claude/skills/boll-lab/SKILL.md +0 -372
  346. package/src/bollharness/reference/boll-reference/.claude/skills/boll-run/SKILL.md +0 -437
  347. package/src/bollharness/reference/boll-reference/.claude/skills/boll-ux-appstore/SKILL.md +0 -27
  348. package/src/bollharness/reference/boll-reference/.claude/skills/boll-voice/SKILL.md +0 -442
  349. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/PROMPT.md +0 -421
  350. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/SKILL.md +0 -326
  351. package/src/bollharness/reference/boll-reference/.claude/skills/lead/SKILL.md +0 -155
  352. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-review-sop.md +0 -91
  353. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-stages.md +0 -129
  354. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-preview.png +0 -0
  355. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v2.png +0 -0
  356. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v3.png +0 -0
  357. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v4.png +0 -0
  358. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/SKILL.md +0 -425
  359. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-three-checks.md +0 -62
  360. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-wp-templates.md +0 -78
  361. package/src/bollharness/reference/boll-reference/.claude/skills/task-arch/SKILL.md +0 -76
  362. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/SKILL.md +0 -57
  363. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/beads-graph.sh +0 -153
  364. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/SKILL.md +0 -52
  365. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/beads-auto-link.sh +0 -76
  366. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/SKILL.md +0 -50
  367. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/beads-sync-proj.sh +0 -108
  368. package/src/bollharness/reference/boll-reference/docs/architecture/AGENT-PROFILE.md +0 -151
  369. package/src/bollharness/reference/boll-reference/docs/architecture/COST-STRUCTURE.md +0 -56
  370. package/src/bollharness/reference/boll-reference/docs/architecture/INDEX.md +0 -76
  371. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE1-INTENT-FIELD.md +0 -116
  372. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE2-CRYSTALLIZATION.md +0 -200
  373. package/src/bollharness/reference/boll-reference/docs/architecture/PRINCIPLES.md +0 -84
  374. package/src/bollharness/reference/boll-reference/docs/architecture/PROTOCOL-CORE.md +0 -209
  375. package/src/bollharness/reference/boll-reference/docs/architecture/VISION.md +0 -181
  376. package/src/bollharness/reference/boll-reference/docs/architecture/discussions/D-01-MARKET-SCENE-PROTOCOL.md +0 -754
  377. package/src/bollharness/templates/scaffold/.boll/guard/.gitkeep +0 -0
  378. package/src/bollharness/templates/scaffold/.boll/metrics/.gitkeep +0 -0
  379. package/src/bollharness/templates/scaffold/.boll/state/.gitkeep +0 -0
  380. package/src/bollharness/templates/scaffold/docs/INDEX.md +0 -3
  381. package/src/bollharness/templates/scaffold/docs/decisions/ADR_TEMPLATE.md +0 -38
  382. package/src/bollharness/templates/scaffold/docs/decisions/PLAN_TEMPLATE.md +0 -45
  383. package/src/bollharness/templates/scaffold/docs/decisions/tasks/.gitkeep +0 -2
  384. package/src/bollharness/templates/scaffold/docs/issues/.gitkeep +0 -0
  385. package/src/bollharness/templates/scaffold/docs/issues/GUARD_ISSUE_TEMPLATE.md +0 -35
  386. package/src/bollharness/templates/scaffold/docs/issues/ISSUE_TEMPLATE.md +0 -51
  387. package/src/bollharness/tsconfig.json +0 -26
  388. package/src/constraint-runtime/package-lock.json +0 -48
  389. package/src/constraint-runtime/package.json +0 -34
  390. package/src/constraint-runtime/src/_archive_helper.ts +0 -16
  391. package/src/constraint-runtime/src/agent/coordinator.ts +0 -71
  392. package/src/constraint-runtime/src/agent/index.ts +0 -1
  393. package/src/constraint-runtime/src/assistant/index.ts +0 -15
  394. package/src/constraint-runtime/src/bootstrap/index.ts +0 -15
  395. package/src/constraint-runtime/src/bootstrap_graph.ts +0 -17
  396. package/src/constraint-runtime/src/bridge/index.ts +0 -15
  397. package/src/constraint-runtime/src/buddy/index.ts +0 -15
  398. package/src/constraint-runtime/src/cli/index.ts +0 -15
  399. package/src/constraint-runtime/src/command_graph.ts +0 -20
  400. package/src/constraint-runtime/src/commands.ts +0 -83
  401. package/src/constraint-runtime/src/components/index.ts +0 -15
  402. package/src/constraint-runtime/src/constants/index.ts +0 -15
  403. package/src/constraint-runtime/src/constraint/budget.ts +0 -25
  404. package/src/constraint-runtime/src/constraint/index.ts +0 -3
  405. package/src/constraint-runtime/src/constraint/permission.ts +0 -28
  406. package/src/constraint-runtime/src/context.ts +0 -45
  407. package/src/constraint-runtime/src/coordinator/index.ts +0 -15
  408. package/src/constraint-runtime/src/cost_hook.ts +0 -6
  409. package/src/constraint-runtime/src/cost_tracker.ts +0 -9
  410. package/src/constraint-runtime/src/deferred_init.ts +0 -18
  411. package/src/constraint-runtime/src/direct_modes.ts +0 -13
  412. package/src/constraint-runtime/src/dynamic-tool-loader.ts +0 -115
  413. package/src/constraint-runtime/src/entrypoints/index.ts +0 -15
  414. package/src/constraint-runtime/src/execution_registry.ts +0 -41
  415. package/src/constraint-runtime/src/history.ts +0 -16
  416. package/src/constraint-runtime/src/hooks/index.ts +0 -15
  417. package/src/constraint-runtime/src/index.ts +0 -28
  418. package/src/constraint-runtime/src/ink.ts +0 -4
  419. package/src/constraint-runtime/src/keybindings/index.ts +0 -15
  420. package/src/constraint-runtime/src/memdir/index.ts +0 -15
  421. package/src/constraint-runtime/src/migrations/index.ts +0 -15
  422. package/src/constraint-runtime/src/models.ts +0 -49
  423. package/src/constraint-runtime/src/moreright/index.ts +0 -15
  424. package/src/constraint-runtime/src/native_ts/index.ts +0 -15
  425. package/src/constraint-runtime/src/output_styles/index.ts +0 -15
  426. package/src/constraint-runtime/src/parity_audit.ts +0 -23
  427. package/src/constraint-runtime/src/plugins/index.ts +0 -15
  428. package/src/constraint-runtime/src/port_manifest.ts +0 -20
  429. package/src/constraint-runtime/src/prefetch.ts +0 -17
  430. package/src/constraint-runtime/src/query.ts +0 -7
  431. package/src/constraint-runtime/src/reference_data/archive_surface_snapshot.json +0 -63
  432. package/src/constraint-runtime/src/reference_data/commands_snapshot.json +0 -1037
  433. package/src/constraint-runtime/src/reference_data/subsystems/OpenCLI.json +0 -10
  434. package/src/constraint-runtime/src/reference_data/subsystems/PolymarketSDK.json +0 -12
  435. package/src/constraint-runtime/src/reference_data/subsystems/SafeSDK.json +0 -14
  436. package/src/constraint-runtime/src/reference_data/subsystems/assistant.json +0 -8
  437. package/src/constraint-runtime/src/reference_data/subsystems/bootstrap.json +0 -8
  438. package/src/constraint-runtime/src/reference_data/subsystems/bridge.json +0 -32
  439. package/src/constraint-runtime/src/reference_data/subsystems/buddy.json +0 -13
  440. package/src/constraint-runtime/src/reference_data/subsystems/cli.json +0 -26
  441. package/src/constraint-runtime/src/reference_data/subsystems/components.json +0 -32
  442. package/src/constraint-runtime/src/reference_data/subsystems/constants.json +0 -28
  443. package/src/constraint-runtime/src/reference_data/subsystems/coordinator.json +0 -8
  444. package/src/constraint-runtime/src/reference_data/subsystems/entrypoints.json +0 -15
  445. package/src/constraint-runtime/src/reference_data/subsystems/hooks.json +0 -32
  446. package/src/constraint-runtime/src/reference_data/subsystems/keybindings.json +0 -21
  447. package/src/constraint-runtime/src/reference_data/subsystems/memdir.json +0 -15
  448. package/src/constraint-runtime/src/reference_data/subsystems/migrations.json +0 -18
  449. package/src/constraint-runtime/src/reference_data/subsystems/moreright.json +0 -8
  450. package/src/constraint-runtime/src/reference_data/subsystems/native_ts.json +0 -11
  451. package/src/constraint-runtime/src/reference_data/subsystems/outputStyles.json +0 -8
  452. package/src/constraint-runtime/src/reference_data/subsystems/plugins.json +0 -9
  453. package/src/constraint-runtime/src/reference_data/subsystems/remote.json +0 -11
  454. package/src/constraint-runtime/src/reference_data/subsystems/schemas.json +0 -8
  455. package/src/constraint-runtime/src/reference_data/subsystems/screens.json +0 -10
  456. package/src/constraint-runtime/src/reference_data/subsystems/server.json +0 -10
  457. package/src/constraint-runtime/src/reference_data/subsystems/services.json +0 -32
  458. package/src/constraint-runtime/src/reference_data/subsystems/skills.json +0 -27
  459. package/src/constraint-runtime/src/reference_data/subsystems/state.json +0 -13
  460. package/src/constraint-runtime/src/reference_data/subsystems/types.json +0 -18
  461. package/src/constraint-runtime/src/reference_data/subsystems/upstreamproxy.json +0 -9
  462. package/src/constraint-runtime/src/reference_data/subsystems/utils.json +0 -32
  463. package/src/constraint-runtime/src/reference_data/subsystems/vim.json +0 -12
  464. package/src/constraint-runtime/src/reference_data/subsystems/voice.json +0 -8
  465. package/src/constraint-runtime/src/reference_data/tools_snapshot.json +0 -1042
  466. package/src/constraint-runtime/src/remote/index.ts +0 -15
  467. package/src/constraint-runtime/src/remote_runtime.ts +0 -17
  468. package/src/constraint-runtime/src/runtime/index.ts +0 -1
  469. package/src/constraint-runtime/src/runtime/session.ts +0 -42
  470. package/src/constraint-runtime/src/schemas/index.ts +0 -15
  471. package/src/constraint-runtime/src/screens/index.ts +0 -15
  472. package/src/constraint-runtime/src/server/index.ts +0 -15
  473. package/src/constraint-runtime/src/services/index.ts +0 -15
  474. package/src/constraint-runtime/src/session_store.ts +0 -32
  475. package/src/constraint-runtime/src/setup.ts +0 -50
  476. package/src/constraint-runtime/src/skills/index.ts +0 -1
  477. package/src/constraint-runtime/src/skills/skill-registry.ts +0 -40
  478. package/src/constraint-runtime/src/state/index.ts +0 -15
  479. package/src/constraint-runtime/src/system_init.ts +0 -21
  480. package/src/constraint-runtime/src/thinking/engine.ts +0 -61
  481. package/src/constraint-runtime/src/thinking/index.ts +0 -1
  482. package/src/constraint-runtime/src/tool_pool.ts +0 -20
  483. package/src/constraint-runtime/src/tools/OpenCLI/execAdapter.ts +0 -12
  484. package/src/constraint-runtime/src/tools/OpenCLI/listAdapters.ts +0 -12
  485. package/src/constraint-runtime/src/tools/OpenCLI/runCommand.ts +0 -13
  486. package/src/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.ts +0 -10
  487. package/src/constraint-runtime/src/tools/PolymarketSDK/createOrder.ts +0 -13
  488. package/src/constraint-runtime/src/tools/PolymarketSDK/getMarket.ts +0 -14
  489. package/src/constraint-runtime/src/tools/PolymarketSDK/getOrders.ts +0 -10
  490. package/src/constraint-runtime/src/tools/PolymarketSDK/listMarkets.ts +0 -24
  491. package/src/constraint-runtime/src/tools/SafeSDK/confirmTransaction.ts +0 -13
  492. package/src/constraint-runtime/src/tools/SafeSDK/createTransaction.ts +0 -23
  493. package/src/constraint-runtime/src/tools/SafeSDK/deploySafe.ts +0 -12
  494. package/src/constraint-runtime/src/tools/SafeSDK/executeTransaction.ts +0 -12
  495. package/src/constraint-runtime/src/tools/SafeSDK/getBalance.ts +0 -10
  496. package/src/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.ts +0 -10
  497. package/src/constraint-runtime/src/tools/SafeSDK/proposeTransaction.ts +0 -14
  498. package/src/constraint-runtime/src/tools/WalletTools/autoPay.ts +0 -58
  499. package/src/constraint-runtime/src/tools/WalletTools/createWallet.ts +0 -19
  500. package/src/constraint-runtime/src/tools/WalletTools/getBalance.ts +0 -28
  501. package/src/constraint-runtime/src/tools/WalletTools/importWallet.ts +0 -34
  502. package/src/constraint-runtime/src/tools/WalletTools/sendTransaction.ts +0 -50
  503. package/src/constraint-runtime/src/tools/WalletTools/signMessage.ts +0 -23
  504. package/src/constraint-runtime/src/tools/WalletTools/transferToken.ts +0 -49
  505. package/src/constraint-runtime/src/tools.ts +0 -100
  506. package/src/constraint-runtime/src/transcript.ts +0 -23
  507. package/src/constraint-runtime/src/types/index.ts +0 -15
  508. package/src/constraint-runtime/src/upstream_proxy/index.ts +0 -15
  509. package/src/constraint-runtime/src/utils/index.ts +0 -15
  510. package/src/constraint-runtime/src/vim/index.ts +0 -15
  511. package/src/constraint-runtime/src/voice/index.ts +0 -15
  512. package/src/constraint-runtime/tests/agent.test.ts +0 -20
  513. package/src/constraint-runtime/tests/constraint.test.ts +0 -47
  514. package/src/constraint-runtime/tests/skill.test.ts +0 -23
  515. package/src/constraint-runtime/tests/thinking.test.ts +0 -28
  516. package/src/constraint-runtime/tsconfig.json +0 -13
  517. package/src/pi-ecosystem/index.ts +0 -453
  518. package/src/pi-ecosystem-colony/index.ts +0 -482
  519. package/src/pi-ecosystem-goals/index.ts +0 -585
  520. package/src/pi-ecosystem-judgment/decision.ts +0 -431
  521. package/src/pi-ecosystem-judgment/distillation.ts +0 -398
  522. package/src/pi-ecosystem-judgment/human-value-store.ts +0 -580
  523. package/src/pi-ecosystem-judgment/index.ts +0 -678
  524. package/src/pi-ecosystem-judgment/value-injection.ts +0 -744
  525. package/src/pi-ecosystem-mcp/index.ts +0 -427
  526. package/src/pi-ecosystem-subagents/index.ts +0 -408
  527. package/src/test/ai-judgment-test.ts +0 -92
  528. package/src/test/bollharness-integration.test.ts +0 -398
  529. package/src/test/channel-agent-multi-dialogue.ts +0 -265
  530. package/src/test/channel-heartbeat-agent-test.ts +0 -244
  531. package/src/test/constraint-layer.test.ts +0 -191
  532. package/src/test/diap-identity-test.ts +0 -222
  533. package/src/test/diap-quick-test.ts +0 -73
  534. package/src/test/global-shared-context.test.ts +0 -393
  535. package/src/test/harness-judgment-injection.test.ts +0 -353
  536. package/src/test/harness-workflow-integrator-test.ts +0 -285
  537. package/src/test/human-value-store.test.ts +0 -316
  538. package/src/test/hybrid-integration-test.ts +0 -126
  539. package/src/test/hybrid-messenger-verify.ts +0 -68
  540. package/src/test/iroh-bistream-debug.ts +0 -50
  541. package/src/test/iroh-communication.test.ts +0 -81
  542. package/src/test/iroh-debug-test.ts +0 -69
  543. package/src/test/iroh-diap-test.ts +0 -90
  544. package/src/test/iroh-direct-connect.ts +0 -65
  545. package/src/test/iroh-e2e-fixed.ts +0 -106
  546. package/src/test/iroh-e2e-same-process.ts +0 -83
  547. package/src/test/iroh-e2e.ts +0 -83
  548. package/src/test/iroh-final-e2e.ts +0 -84
  549. package/src/test/iroh-relay-test.ts +0 -46
  550. package/src/test/iroh-simple-test.ts +0 -49
  551. package/src/test/iroh-transport-verify.ts +0 -60
  552. package/src/test/iroh-transport.test.ts +0 -47
  553. package/src/test/iroh-two-nodes.ts +0 -87
  554. package/src/test/iroh-verify.ts +0 -55
  555. package/src/test/judgment-decision.test.ts +0 -373
  556. package/src/test/llm-judgment-integration.test.ts +0 -257
  557. package/src/test/p2p-agent-complex-dialogue.ts +0 -490
  558. package/src/test/p2p-agent-dialogue.ts +0 -423
  559. package/src/test/p2p-agent-full-bidirectional.ts +0 -686
  560. package/src/test/p2p-agent-harness-flow.ts +0 -562
  561. package/src/test/p2p-agent-harness-single.ts +0 -175
  562. package/src/test/p2p-ai-dialogue-test.ts +0 -374
  563. package/src/test/p2p-cid-connect-test.ts +0 -245
  564. package/src/test/p2p-connect-receiver.ts +0 -85
  565. package/src/test/p2p-iroh-test.ts +0 -214
  566. package/src/test/p2p-minimal-test.ts +0 -264
  567. package/src/test/p2p-node-1.ts +0 -172
  568. package/src/test/p2p-node-2.ts +0 -172
  569. package/src/test/p2p-server.ts +0 -335
  570. package/src/test/p2p-two-nodes-test.ts +0 -542
  571. package/src/test/pi-sdk.test.ts +0 -47
  572. package/src/test/set-persona.ts +0 -56
  573. package/src/test/simple.test.ts +0 -11
  574. package/src/test/storage-integration.test.ts +0 -191
  575. package/src/test/subagent-manager.test.ts +0 -392
  576. package/src/test/test-gate-flow.test.ts +0 -92
  577. package/src/test/workflow-engine.test.ts +0 -101
  578. package/src/workflows/collaboration.ts +0 -455
  579. package/src/workflows/index.ts +0 -64
  580. package/vitest.config.ts +0 -12
  581. package//346/203/263/346/263/225.md +0 -79
@@ -1,6 +1,7 @@
1
1
  class P2PModalUI {
2
2
  modal = null;
3
3
  overlay = null;
4
+ connectedPeers = /* @__PURE__ */ new Map();
4
5
  constructor() {
5
6
  this.createModal();
6
7
  }
@@ -38,22 +39,49 @@ class P2PModalUI {
38
39
  }
39
40
  async render() {
40
41
  if (!this.modal) return;
42
+ await this.loadConnectionHistory();
41
43
  let identityHtml = '<div class="p2p-loading">\u52A0\u8F7D\u4E2D...</div>';
44
+ let identityData = { name: "\u672A\u77E5", did: "\u672A\u77E5", cid: "\u672A\u77E5" };
42
45
  try {
43
- const resp = await fetch("/api/identity");
44
- const data = await resp.json();
46
+ const irohResp = await fetch("/api/iroh/init", { method: "POST" });
47
+ const irohData = await irohResp.json();
48
+ if (irohData.cid) {
49
+ identityData = {
50
+ name: irohData.name || irohData.name?.split("-").slice(-1)[0] || "Bolloon",
51
+ did: irohData.did || "\u672A\u77E5",
52
+ cid: irohData.cid || "\u672A\u77E5",
53
+ nodeId: irohData.irohNodeId ? irohData.irohNodeId.substring(0, 20) + "..." : "\u672A\u77E5"
54
+ };
55
+ } else {
56
+ const resp = await fetch("/api/identity");
57
+ identityData = await resp.json();
58
+ identityData.cid = identityData.cid || "\u672A\u521D\u59CB\u5316";
59
+ identityData.nodeId = identityData.nodeId || "\u672A\u77E5";
60
+ }
45
61
  identityHtml = `
46
62
  <div class="p2p-section">
47
63
  <h3>\u8EAB\u4EFD\u4FE1\u606F</h3>
48
64
  <div class="p2p-info-row">
49
65
  <span class="label">\u540D\u79F0:</span>
50
- <span class="value">${this.escapeHtml(data.name || "\u672A\u77E5")}</span>
66
+ <span class="value">${this.escapeHtml(identityData.name || "\u672A\u77E5")}</span>
67
+ </div>
68
+ <div class="p2p-info-row">
69
+ <span class="label">CID:</span>
70
+ <span class="value mono">${this.escapeHtml(identityData.cid || "\u672A\u77E5")}</span>
51
71
  </div>
52
72
  <div class="p2p-info-row">
53
73
  <span class="label">DID:</span>
54
- <span class="value mono">${this.escapeHtml(data.did || "\u672A\u77E5")}</span>
74
+ <span class="value mono">${this.escapeHtml(identityData.did || "\u672A\u77E5")}</span>
75
+ </div>
76
+ <div class="p2p-info-row">
77
+ <span class="label">Node ID:</span>
78
+ <span class="value mono">${this.escapeHtml(identityData.nodeId || "\u672A\u77E5")}</span>
79
+ </div>
80
+ <div class="p2p-actions">
81
+ <button class="p2p-btn-secondary" id="p2p-copy-cid-btn">\u590D\u5236 CID</button>
82
+ <button class="p2p-btn-secondary" id="p2p-copy-did-btn">\u590D\u5236 DID</button>
83
+ <button class="p2p-btn-secondary" id="p2p-copy-nodeid-btn">\u590D\u5236 Node ID</button>
55
84
  </div>
56
- <button class="p2p-btn-primary" id="p2p-copy-btn">\u590D\u5236 DID</button>
57
85
  </div>
58
86
  `;
59
87
  } catch {
@@ -82,6 +110,12 @@ class P2PModalUI {
82
110
  </div>
83
111
  <div id="p2p-connect-result" class="p2p-result"></div>
84
112
  </div>
113
+ <div class="p2p-section">
114
+ <h3>\u5DF2\u8FDE\u63A5\u7684\u8282\u70B9</h3>
115
+ <div id="p2p-connected-peers" class="p2p-connected-peers">
116
+ \u6682\u65E0\u8FDE\u63A5
117
+ </div>
118
+ </div>
85
119
  </div>
86
120
  <div class="p2p-tab-content" data-tab="messages">
87
121
  <div class="p2p-section">
@@ -106,11 +140,24 @@ class P2PModalUI {
106
140
  if (tabName) this.switchTab(tabName);
107
141
  });
108
142
  });
109
- const copyBtn = this.modal.querySelector("#p2p-copy-btn");
110
- copyBtn?.addEventListener("click", async () => {
143
+ const copyCidBtn = this.modal.querySelector("#p2p-copy-cid-btn");
144
+ copyCidBtn?.addEventListener("click", async () => {
111
145
  try {
112
- const resp = await fetch("/api/identity");
113
- const data = await resp.json();
146
+ const irohResp = await fetch("/api/iroh/init", { method: "POST" });
147
+ const data = await irohResp.json();
148
+ if (data.cid) {
149
+ await navigator.clipboard.writeText(data.cid);
150
+ this.showToast("CID \u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F");
151
+ }
152
+ } catch (e) {
153
+ console.error("\u590D\u5236\u5931\u8D25:", e);
154
+ }
155
+ });
156
+ const copyDidBtn = this.modal.querySelector("#p2p-copy-did-btn");
157
+ copyDidBtn?.addEventListener("click", async () => {
158
+ try {
159
+ const irohResp = await fetch("/api/iroh/init", { method: "POST" });
160
+ const data = await irohResp.json();
114
161
  if (data.did) {
115
162
  await navigator.clipboard.writeText(data.did);
116
163
  this.showToast("DID \u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F");
@@ -119,6 +166,19 @@ class P2PModalUI {
119
166
  console.error("\u590D\u5236\u5931\u8D25:", e);
120
167
  }
121
168
  });
169
+ const copyNodeIdBtn = this.modal.querySelector("#p2p-copy-nodeid-btn");
170
+ copyNodeIdBtn?.addEventListener("click", async () => {
171
+ try {
172
+ const irohResp = await fetch("/api/iroh/init", { method: "POST" });
173
+ const data = await irohResp.json();
174
+ if (data.irohNodeId) {
175
+ await navigator.clipboard.writeText(data.irohNodeId);
176
+ this.showToast("Node ID \u5DF2\u590D\u5236\u5230\u526A\u8D34\u677F");
177
+ }
178
+ } catch (e) {
179
+ console.error("\u590D\u5236\u5931\u8D25:", e);
180
+ }
181
+ });
122
182
  const connectBtn = this.modal.querySelector("#p2p-connect-btn");
123
183
  connectBtn?.addEventListener("click", () => this.handleConnect());
124
184
  }
@@ -149,6 +209,23 @@ class P2PModalUI {
149
209
  if (data.ok) {
150
210
  result.innerHTML = `<div class="p2p-success">\u8FDE\u63A5\u6210\u529F\uFF01\u8282\u70B9: ${this.escapeHtml(data.nodeName || cid.substring(0, 16))}...</div>`;
151
211
  result.className = "p2p-result success";
212
+ input.value = "";
213
+ try {
214
+ await fetch("/api/p2p/history", {
215
+ method: "POST",
216
+ headers: { "Content-Type": "application/json" },
217
+ body: JSON.stringify({
218
+ cid,
219
+ // 输入的 CID 或 Node ID
220
+ irohNodeId: data.targetNodeId,
221
+ did: data.targetNodeId,
222
+ // 用 Node ID 作为 DID
223
+ name: data.nodeName || cid.substring(0, 16)
224
+ })
225
+ });
226
+ } catch (e) {
227
+ console.error("\u4FDD\u5B58\u8FDE\u63A5\u5931\u8D25:", e);
228
+ }
152
229
  } else {
153
230
  result.innerHTML = `<div class="p2p-error">${this.escapeHtml(data.error || "\u8FDE\u63A5\u5931\u8D25")}</div>`;
154
231
  result.className = "p2p-result error";
@@ -159,6 +236,44 @@ class P2PModalUI {
159
236
  result.className = "p2p-result error";
160
237
  }
161
238
  }
239
+ async loadConnectionHistory() {
240
+ try {
241
+ const resp = await fetch("/api/p2p/history");
242
+ const history = await resp.json();
243
+ this.connectedPeers.clear();
244
+ for (const entry of history) {
245
+ this.connectedPeers.set(entry.irohNodeId || entry.did, {
246
+ nodeId: entry.irohNodeId || entry.did,
247
+ name: entry.name || "Unknown",
248
+ time: entry.lastConnectedAt || Date.now()
249
+ });
250
+ }
251
+ this.updateConnectedPeersDisplay();
252
+ } catch (e) {
253
+ console.error("\u52A0\u8F7D\u8FDE\u63A5\u5386\u53F2\u5931\u8D25:", e);
254
+ }
255
+ }
256
+ updateConnectedPeersDisplay() {
257
+ const container = document.getElementById("p2p-connected-peers");
258
+ if (!container) return;
259
+ if (this.connectedPeers.size === 0) {
260
+ container.innerHTML = '<div class="p2p-empty">\u6682\u65E0\u8FDE\u63A5</div>';
261
+ return;
262
+ }
263
+ let html = "";
264
+ for (const [nodeId, info] of this.connectedPeers) {
265
+ const shortId = nodeId.substring(0, 16) + "...";
266
+ const time = new Date(info.time).toLocaleTimeString();
267
+ html += `
268
+ <div class="p2p-peer-item">
269
+ <span class="p2p-peer-name">${this.escapeHtml(info.name || shortId)}</span>
270
+ <span class="p2p-peer-id">${shortId}</span>
271
+ <span class="p2p-peer-time">${time}</span>
272
+ </div>
273
+ `;
274
+ }
275
+ container.innerHTML = html;
276
+ }
162
277
  escapeHtml(str) {
163
278
  const div = document.createElement("div");
164
279
  div.textContent = str;
@@ -348,6 +463,41 @@ style.textContent = `
348
463
  color: var(--text-muted, #606058);
349
464
  }
350
465
  .p2p-error { color: var(--error, #ef4444); }
466
+ .p2p-connected-peers {
467
+ background: var(--bg, #1a1a18);
468
+ border: 1px solid var(--border, #3a3a36);
469
+ border-radius: 8px;
470
+ overflow: hidden;
471
+ }
472
+ .p2p-connected-peers .p2p-empty {
473
+ padding: 16px;
474
+ text-align: center;
475
+ color: var(--text-muted, #606058);
476
+ font-size: 14px;
477
+ }
478
+ .p2p-peer-item {
479
+ display: flex;
480
+ align-items: center;
481
+ gap: 8px;
482
+ padding: 12px 16px;
483
+ border-bottom: 1px solid var(--border, #3a3a36);
484
+ }
485
+ .p2p-peer-item:last-child { border-bottom: none; }
486
+ .p2p-peer-name {
487
+ font-size: 14px;
488
+ color: var(--text, #d8d8c8);
489
+ min-width: 80px;
490
+ }
491
+ .p2p-peer-id {
492
+ flex: 1;
493
+ font-family: 'JetBrains Mono', monospace;
494
+ font-size: 12px;
495
+ color: var(--text-secondary, #909088);
496
+ }
497
+ .p2p-peer-time {
498
+ font-size: 12px;
499
+ color: var(--text-muted, #606058);
500
+ }
351
501
  `;
352
502
  document.head.appendChild(style);
353
503
  const p2pModal = new P2PModalUI();
@@ -157,5 +157,141 @@ export class P2PConnectionManager {
157
157
  this.reconnectTimers.clear();
158
158
  this.peers.clear();
159
159
  }
160
+ // 从 CID 解析身份
161
+ async resolveFromCID(cid) {
162
+ try {
163
+ const res = await fetch('/api/p2p/resolve-cid', {
164
+ method: 'POST',
165
+ headers: { 'Content-Type': 'application/json' },
166
+ body: JSON.stringify({ cid })
167
+ });
168
+ if (res.ok) {
169
+ const data = await res.json();
170
+ return {
171
+ success: true,
172
+ did: data.doc?.id || data.doc?.did,
173
+ cid: cid,
174
+ name: data.doc?.name,
175
+ peerId: data.doc?.peerId
176
+ };
177
+ }
178
+ else {
179
+ return { success: false, error: 'CID 解析失败' };
180
+ }
181
+ }
182
+ catch (e) {
183
+ return { success: false, error: e.message };
184
+ }
185
+ }
186
+ // 获取所有持久连接
187
+ async getPersistentConnections() {
188
+ try {
189
+ const res = await fetch('/api/p2p/persistent-connections');
190
+ if (res.ok) {
191
+ return await res.json();
192
+ }
193
+ return [];
194
+ }
195
+ catch {
196
+ return [];
197
+ }
198
+ }
199
+ // 切换连接状态
200
+ async toggleConnection(connection, enable) {
201
+ try {
202
+ if (enable) {
203
+ // 建立连接
204
+ const result = await this.connect(connection.cid);
205
+ if (result.success) {
206
+ await fetch('/api/p2p/connection-status', {
207
+ method: 'POST',
208
+ headers: { 'Content-Type': 'application/json' },
209
+ body: JSON.stringify({
210
+ id: connection.id,
211
+ status: 'connected',
212
+ channelId: connection.channelId
213
+ })
214
+ });
215
+ return true;
216
+ }
217
+ return false;
218
+ }
219
+ else {
220
+ // 断开连接
221
+ if (connection.peerId) {
222
+ await this.disconnect(connection.peerId);
223
+ }
224
+ await fetch('/api/p2p/connection-status', {
225
+ method: 'POST',
226
+ headers: { 'Content-Type': 'application/json' },
227
+ body: JSON.stringify({
228
+ id: connection.id,
229
+ status: 'disconnected'
230
+ })
231
+ });
232
+ return true;
233
+ }
234
+ }
235
+ catch {
236
+ return false;
237
+ }
238
+ }
239
+ // 连接并创建对话通道
240
+ async connectAndCreateChannel(input, onProgress) {
241
+ const parsed = this.parseInput(input);
242
+ if (parsed.type === 'invalid') {
243
+ return { success: false, error: parsed.error };
244
+ }
245
+ onProgress?.({ stage: 'validating', percent: 10, message: '验证输入格式...' });
246
+ let cid = '';
247
+ let did = '';
248
+ const value = parsed.value;
249
+ if (parsed.type === 'link' && typeof value !== 'string') {
250
+ cid = value.cid || '';
251
+ did = value.did || '';
252
+ }
253
+ else if (parsed.type === 'cid' && typeof value === 'string') {
254
+ cid = value;
255
+ }
256
+ else if (parsed.type === 'diapDoc' && typeof value !== 'string') {
257
+ cid = value.cid || '';
258
+ did = value.id || value.did || '';
259
+ }
260
+ if (!cid) {
261
+ return { success: false, error: '未找到 CID' };
262
+ }
263
+ // 如果没有 DID,从 CID 解析
264
+ if (!did) {
265
+ onProgress?.({ stage: 'resolving', percent: 30, message: '从 IPFS 解析身份...' });
266
+ const resolveResult = await this.resolveFromCID(cid);
267
+ if (resolveResult.success) {
268
+ did = resolveResult.did || '';
269
+ onProgress?.({ stage: 'identity_resolved', percent: 50, message: `身份解析完成: ${resolveResult.name}` });
270
+ }
271
+ }
272
+ // 创建对话通道
273
+ onProgress?.({ stage: 'creating_channel', percent: 60, message: '创建对话通道...' });
274
+ try {
275
+ const channelRes = await fetch('/api/p2p/create-channel', {
276
+ method: 'POST',
277
+ headers: { 'Content-Type': 'application/json' },
278
+ body: JSON.stringify({
279
+ peerDid: did,
280
+ peerName: did.substring(0, 16),
281
+ cid: cid,
282
+ peerId: ''
283
+ })
284
+ });
285
+ if (!channelRes.ok) {
286
+ return { success: false, error: '创建对话通道失败' };
287
+ }
288
+ }
289
+ catch (e) {
290
+ return { success: false, error: e.message };
291
+ }
292
+ // 执行连接
293
+ onProgress?.({ stage: 'connecting', percent: 80, message: '建立 P2P 连接...' });
294
+ return this.connect(input, onProgress);
295
+ }
160
296
  }
161
297
  export const p2pConnection = new P2PConnectionManager();
@@ -72,6 +72,30 @@ export class P2PManager {
72
72
  this.connection.destroy();
73
73
  this.messages.destroy();
74
74
  }
75
+ // 获取持久连接列表
76
+ async getPersistentConnections() {
77
+ return this.connection.getPersistentConnections();
78
+ }
79
+ // 更新连接状态
80
+ async updateConnectionStatus(id, status, channelId) {
81
+ await fetch('/api/p2p/connection-status', {
82
+ method: 'POST',
83
+ headers: { 'Content-Type': 'application/json' },
84
+ body: JSON.stringify({ id, status, channelId })
85
+ });
86
+ }
87
+ // 切换连接状态
88
+ async toggleConnection(connection, enable) {
89
+ return this.connection.toggleConnection(connection, enable);
90
+ }
91
+ // CID 解析
92
+ async resolveFromCID(cid) {
93
+ return this.connection.resolveFromCID(cid);
94
+ }
95
+ // 连接并创建对话通道
96
+ async connectAndCreateChannel(input, onProgress) {
97
+ return this.connection.connectAndCreateChannel(input, onProgress);
98
+ }
75
99
  }
76
100
  // 全局单例
77
101
  export const p2pManager = new P2PManager();
@@ -17,7 +17,7 @@ export class P2PStoreMemory {
17
17
  };
18
18
  // ==================== 连接历史 ====================
19
19
  async addToHistory(entry) {
20
- const existingIndex = this.history.findIndex(h => h.did === entry.did);
20
+ const existingIndex = this.history.findIndex(h => h.cid === entry.cid);
21
21
  if (existingIndex >= 0) {
22
22
  this.history[existingIndex] = {
23
23
  ...this.history[existingIndex],
@@ -21,3 +21,10 @@ export var MessageStatus;
21
21
  MessageStatus["FAILED"] = "failed";
22
22
  MessageStatus["QUEUED"] = "queued";
23
23
  })(MessageStatus || (MessageStatus = {}));
24
+ // 持久连接状态
25
+ export var PersistentConnectionStatus;
26
+ (function (PersistentConnectionStatus) {
27
+ PersistentConnectionStatus["CONNECTED"] = "connected";
28
+ PersistentConnectionStatus["DISCONNECTED"] = "disconnected";
29
+ PersistentConnectionStatus["RECONNECTING"] = "reconnecting";
30
+ })(PersistentConnectionStatus || (PersistentConnectionStatus = {}));
@@ -61,6 +61,11 @@
61
61
  <h1 id="channel-name">Bolloon Agent</h1>
62
62
  </div>
63
63
  <div class="header-right">
64
+ <button id="new-session-btn" class="header-action" title="新会话">
65
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
66
+ <path d="M12 5v14M5 12h14"></path>
67
+ </svg>
68
+ </button>
64
69
  <button id="theme-toggle" class="theme-toggle" title="切换主题">
65
70
  <svg class="sun-icon" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
66
71
  <circle cx="12" cy="12" r="5"></circle>
@@ -594,6 +594,21 @@ body {
594
594
  border-radius: 3px;
595
595
  }
596
596
 
597
+ /* Channel messages container */
598
+ .channel-messages {
599
+ display: none;
600
+ flex: 1;
601
+ overflow-y: auto;
602
+ padding: 24px;
603
+ flex-direction: column;
604
+ gap: 20px;
605
+ }
606
+
607
+ .channel-messages.active,
608
+ .channel-messages:not([style*="display: none"]) {
609
+ display: flex;
610
+ }
611
+
597
612
  .message {
598
613
  display: flex;
599
614
  flex-direction: column;
@@ -3231,6 +3246,109 @@ body {
3231
3246
  cursor: pointer;
3232
3247
  }
3233
3248
 
3249
+ /* Persistent Peers Section */
3250
+ .persistent-peers-section {
3251
+ margin: 16px 0;
3252
+ padding: 12px;
3253
+ background: var(--bg-secondary);
3254
+ border: 1px solid var(--border);
3255
+ border-radius: var(--radius);
3256
+ }
3257
+
3258
+ .persistent-peers-section h4 {
3259
+ margin-bottom: 12px;
3260
+ font-size: 14px;
3261
+ color: var(--text);
3262
+ }
3263
+
3264
+ .persistent-peer-item {
3265
+ display: flex;
3266
+ align-items: center;
3267
+ gap: 12px;
3268
+ padding: 12px;
3269
+ border: 1px solid var(--border);
3270
+ border-radius: 8px;
3271
+ margin-bottom: 8px;
3272
+ background: var(--bg-primary);
3273
+ transition: var(--transition);
3274
+ }
3275
+
3276
+ .persistent-peer-item:last-child {
3277
+ margin-bottom: 0;
3278
+ }
3279
+
3280
+ .persistent-peer-item.connected {
3281
+ border-color: var(--success);
3282
+ background: rgba(76, 175, 80, 0.05);
3283
+ }
3284
+
3285
+ .persistent-peer-item.disconnected {
3286
+ opacity: 0.8;
3287
+ }
3288
+
3289
+ .persistent-peer-item.reconnecting {
3290
+ border-color: var(--warning);
3291
+ animation: pulse 2s infinite;
3292
+ }
3293
+
3294
+ @keyframes pulse {
3295
+ 0%, 100% { opacity: 1; }
3296
+ 50% { opacity: 0.6; }
3297
+ }
3298
+
3299
+ .peer-status-indicator {
3300
+ flex-shrink: 0;
3301
+ }
3302
+
3303
+ .peer-status-indicator .dot {
3304
+ display: block;
3305
+ width: 10px;
3306
+ height: 10px;
3307
+ border-radius: 50%;
3308
+ }
3309
+
3310
+ .peer-status-indicator .dot.online {
3311
+ background: var(--success);
3312
+ box-shadow: 0 0 6px var(--success);
3313
+ }
3314
+
3315
+ .peer-status-indicator .dot.offline {
3316
+ background: var(--text-muted);
3317
+ }
3318
+
3319
+ .auto-badge {
3320
+ display: inline-block;
3321
+ padding: 2px 6px;
3322
+ font-size: 10px;
3323
+ background: var(--accent);
3324
+ color: var(--bg-primary);
3325
+ border-radius: 4px;
3326
+ margin-left: 6px;
3327
+ }
3328
+
3329
+ .peer-info .peer-name {
3330
+ display: flex;
3331
+ align-items: center;
3332
+ font-weight: 500;
3333
+ }
3334
+
3335
+ .peer-info .peer-meta {
3336
+ font-size: 12px;
3337
+ color: var(--text-secondary);
3338
+ display: flex;
3339
+ gap: 12px;
3340
+ margin-top: 4px;
3341
+ }
3342
+
3343
+ .btn-danger {
3344
+ background: var(--error);
3345
+ color: white;
3346
+ }
3347
+
3348
+ .btn-danger:hover {
3349
+ background: #c62828;
3350
+ }
3351
+
3234
3352
  /* Modal Small */
3235
3353
  .modal-sm {
3236
3354
  max-width: 300px !important;
package/package.json CHANGED
@@ -1,15 +1,20 @@
1
1
  {
2
2
  "name": "@bolloon/bolloon-agent",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
- "description": "P2P AI Document Agent with libp2p",
6
- "main": "dist/index.js",
5
+ "description": "P2P AI Document Agent - 全局安装后执行 `bolloon` 启动产品",
6
+ "main": "dist/cli.js",
7
7
  "author": "Bolloon Team",
8
+ "bin": {
9
+ "bolloon": "./bin/bolloon-cli.cjs"
10
+ },
8
11
  "scripts": {
9
12
  "build": "npm run build --workspaces --if-present",
10
13
  "build:main": "tsc",
14
+ "build:cli": "node scripts/build-cli.js",
11
15
  "build:web": "npx tsx scripts/build-web.ts",
12
16
  "build:electron": "tsc -p tsconfig.electron.json",
17
+ "build:all": "npm run build:main && npm run build:web && npm run build:electron && npm run build:cli",
13
18
  "start": "node dist/index.js",
14
19
  "dev": "tsx -r dotenv/config src/index.ts",
15
20
  "dev:web": "npm run build:web && npm run dev",
@@ -20,7 +25,8 @@
20
25
  "electron:pack": "electron-builder --dir",
21
26
  "test": "vitest run",
22
27
  "test:watch": "vitest",
23
- "test:pi-sdk": "tsx src/test/pi-sdk.test.ts"
28
+ "test:pi-sdk": "tsx src/test/pi-sdk.test.ts",
29
+ "postinstall": "node scripts/postinstall.js"
24
30
  },
25
31
  "workspaces": [
26
32
  "src/constraint-runtime"
@@ -73,11 +79,11 @@
73
79
  },
74
80
  "files": [
75
81
  "dist/**/*",
76
- "src/electron-main.js",
82
+ "bin/**/*",
77
83
  "package.json"
78
84
  ],
79
85
  "extraMetadata": {
80
- "main": "src/electron-main.js",
86
+ "main": "dist/electron.js",
81
87
  "type": "commonjs"
82
88
  },
83
89
  "win": {