@bolloon/bolloon-agent 0.1.35 → 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 (502) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/p2p-chat-tools.js +6 -6
  3. package/dist/agents/permission-mode.js +115 -0
  4. package/dist/agents/pi-sdk.js +435 -25
  5. package/dist/agents/pre-tool-validator.js +194 -0
  6. package/dist/agents/workflow-pivot-loop.js +113 -12
  7. package/dist/bollharness-integration/context-router.js +2 -2
  8. package/dist/bollharness-integration/guard-checker.js +1 -1
  9. package/dist/bootstrap/bootstrap.js +3 -0
  10. package/dist/bootstrap/context-collector.js +17 -1
  11. package/dist/bootstrap/context-hierarchy.js +218 -0
  12. package/dist/bootstrap/lifecycle-hooks.js +86 -24
  13. package/dist/bootstrap/project-context.js +10 -3
  14. package/dist/context-compaction/auto-compact.js +144 -0
  15. package/dist/context-compaction/budget-gate.js +28 -0
  16. package/dist/context-compaction/budget-reduce.js +35 -0
  17. package/dist/context-compaction/context-collapse.js +66 -0
  18. package/dist/context-compaction/index.js +21 -0
  19. package/dist/context-compaction/microcompact.js +51 -0
  20. package/dist/context-compaction/pipeline.js +123 -0
  21. package/dist/context-compaction/snip.js +45 -0
  22. package/dist/context-compaction/token-estimator.js +35 -0
  23. package/dist/context-compaction/types.js +19 -0
  24. package/dist/heartbeat/HealthMonitor.js +3 -2
  25. package/dist/index.js +38 -2
  26. package/dist/llm/llm-judgment-client.js +32 -30
  27. package/dist/llm/pi-ai.js +103 -16
  28. package/dist/llm/system-prompt/health.js +129 -0
  29. package/dist/llm/system-prompt/registry.js +246 -0
  30. package/dist/llm/system-prompt/strip-hibsml.js +51 -0
  31. package/dist/llm/tool-manifest/ask_user_input.js +35 -0
  32. package/dist/llm/tool-manifest/bash.js +23 -0
  33. package/dist/llm/tool-manifest/create_file.js +24 -0
  34. package/dist/llm/tool-manifest/fetch_sports_data.js +26 -0
  35. package/dist/llm/tool-manifest/image_search.js +24 -0
  36. package/dist/llm/tool-manifest/index.js +69 -0
  37. package/dist/llm/tool-manifest/mcp.js +43 -0
  38. package/dist/llm/tool-manifest/message_compose.js +31 -0
  39. package/dist/llm/tool-manifest/places.js +83 -0
  40. package/dist/llm/tool-manifest/present_files.js +21 -0
  41. package/dist/llm/tool-manifest/recipe.js +40 -0
  42. package/dist/llm/tool-manifest/recommend_apps.js +23 -0
  43. package/dist/llm/tool-manifest/str_replace.js +27 -0
  44. package/dist/llm/tool-manifest/types.js +7 -0
  45. package/dist/llm/tool-manifest/view.js +24 -0
  46. package/dist/llm/tool-manifest/weather.js +27 -0
  47. package/dist/llm/tool-manifest/web.js +51 -0
  48. package/dist/network/p2p-direct.js +23 -0
  49. package/dist/network/source-intent-broadcaster.js +203 -0
  50. package/dist/network/source-intent.js +100 -0
  51. package/dist/pi-ecosystem-judgment/adaptive-scan.js +48 -0
  52. package/dist/pi-ecosystem-judgment/injection-gate.js +54 -12
  53. package/dist/pi-ecosystem-judgment/value-injection.js +8 -2
  54. package/dist/security/context-router-tool.js +1 -1
  55. package/dist/security/input-scanner.js +223 -0
  56. package/dist/web/client.js +3089 -4458
  57. package/dist/web/index.html +58 -67
  58. package/dist/web/server.js +299 -117
  59. package/dist/web/style.css +531 -249
  60. package/dist/web/ui/message-renderer.js +352 -0
  61. package/dist/web/ui/step-timeline.js +279 -0
  62. package/package.json +2 -2
  63. package/.auto-evolve-calls +0 -1
  64. package/.last-auto-evolve-baseline +0 -1
  65. package/Bolloon.md +0 -103
  66. package/dist/agents/constraint-layer.js.map +0 -1
  67. package/dist/agents/pi-sdk.js.map +0 -1
  68. package/dist/agents/workflow-engine.js.map +0 -1
  69. package/dist/bollharness/src/index.js +0 -5
  70. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  71. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  72. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  73. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  74. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  75. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  76. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  77. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  78. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  79. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  80. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  81. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  82. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  83. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  84. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  85. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  86. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  87. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  88. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  89. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  90. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  91. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  92. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  93. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  94. package/dist/bollharness/src/scripts/context_router.js +0 -67
  95. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  96. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  97. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  98. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  99. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  100. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  101. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  102. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  103. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  104. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  105. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  106. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  107. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  108. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  109. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  110. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  111. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  112. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  113. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  114. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  115. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  116. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  117. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  118. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  119. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  120. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  121. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  122. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  123. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  124. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  125. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  126. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  127. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  128. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  129. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  130. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  131. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  132. package/dist/bollharness-integration/context-router.js.map +0 -1
  133. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  134. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  135. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  136. package/dist/bollharness-integration/index.js.map +0 -1
  137. package/dist/bollharness-integration/integration.js.map +0 -1
  138. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  139. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  140. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  141. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  142. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  143. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  144. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  145. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  146. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  147. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  148. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  149. package/dist/constraint-runtime/src/agent/index.js +0 -1
  150. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  151. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  152. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  153. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  154. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  155. package/dist/constraint-runtime/src/cli/index.js +0 -12
  156. package/dist/constraint-runtime/src/command_graph.js +0 -10
  157. package/dist/constraint-runtime/src/commands.js +0 -60
  158. package/dist/constraint-runtime/src/components/index.js +0 -12
  159. package/dist/constraint-runtime/src/constants/index.js +0 -12
  160. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  161. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  162. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  163. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  164. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  165. package/dist/constraint-runtime/src/context.js +0 -30
  166. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  167. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  168. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  169. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  170. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  171. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  172. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  173. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  174. package/dist/constraint-runtime/src/history.js +0 -9
  175. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  176. package/dist/constraint-runtime/src/index.js +0 -26
  177. package/dist/constraint-runtime/src/ink.js +0 -4
  178. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  179. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  180. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  181. package/dist/constraint-runtime/src/models.js +0 -1
  182. package/dist/constraint-runtime/src/models.js.map +0 -1
  183. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  184. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  185. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  186. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  187. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  188. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  189. package/dist/constraint-runtime/src/prefetch.js +0 -9
  190. package/dist/constraint-runtime/src/query.js +0 -1
  191. package/dist/constraint-runtime/src/remote/index.js +0 -12
  192. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  193. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  194. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  195. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  196. package/dist/constraint-runtime/src/screens/index.js +0 -12
  197. package/dist/constraint-runtime/src/server/index.js +0 -12
  198. package/dist/constraint-runtime/src/services/index.js +0 -12
  199. package/dist/constraint-runtime/src/session_store.js +0 -22
  200. package/dist/constraint-runtime/src/setup.js +0 -30
  201. package/dist/constraint-runtime/src/skills/index.js +0 -1
  202. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  203. package/dist/constraint-runtime/src/state/index.js +0 -12
  204. package/dist/constraint-runtime/src/system_init.js +0 -20
  205. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  206. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  207. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  208. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  209. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  210. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  211. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  212. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  213. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  214. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  215. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  216. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  217. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  218. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  219. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  220. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  221. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  222. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  223. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  224. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  225. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  226. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  227. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  228. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  229. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  230. package/dist/constraint-runtime/src/tools.js +0 -80
  231. package/dist/constraint-runtime/src/transcript.js +0 -19
  232. package/dist/constraint-runtime/src/types/index.js +0 -12
  233. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  234. package/dist/constraint-runtime/src/utils/index.js +0 -12
  235. package/dist/constraint-runtime/src/vim/index.js +0 -12
  236. package/dist/constraint-runtime/src/voice/index.js +0 -12
  237. package/dist/constraints/index.js.map +0 -1
  238. package/dist/documents/reader.js.map +0 -1
  239. package/dist/llm/config-store.js.map +0 -1
  240. package/dist/llm/pi-ai.js.map +0 -1
  241. package/dist/network/agent-network.js.map +0 -1
  242. package/dist/network/iroh-integration.js.map +0 -1
  243. package/dist/network/iroh-transport.js.map +0 -1
  244. package/dist/network/p2p.js.map +0 -1
  245. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  246. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  247. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  248. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  249. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  250. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  251. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  252. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  253. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  254. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  255. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  256. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  257. package/dist/social/ant-colony/types.js.map +0 -1
  258. package/dist/social/channels/ChannelManager.js.map +0 -1
  259. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  260. package/dist/social/channels/InterestMatcher.js.map +0 -1
  261. package/dist/social/channels/types.js.map +0 -1
  262. package/dist/social/global-shared-context.js.map +0 -1
  263. package/dist/social/heartbeat.js.map +0 -1
  264. package/lefthook.yml +0 -29
  265. package/scripts/auto-evolve-loop.ts +0 -376
  266. package/scripts/auto-evolve-oneshot.sh +0 -155
  267. package/scripts/auto-evolve-snapshot.sh +0 -136
  268. package/scripts/build-cli.js +0 -216
  269. package/scripts/build-web.ts +0 -82
  270. package/scripts/detect-schema-changes.sh +0 -48
  271. package/scripts/diff-reviewer.ts +0 -159
  272. package/scripts/postinstall.js +0 -153
  273. package/scripts/weekly-report.ts +0 -364
  274. package/src/agents/agent-manifest-protocol.ts +0 -117
  275. package/src/agents/constraint-layer.ts +0 -309
  276. package/src/agents/iroh-secret.ts +0 -32
  277. package/src/agents/p2p-chat-tools.ts +0 -383
  278. package/src/agents/p2p-document-tools.ts +0 -347
  279. package/src/agents/pi-sdk.ts +0 -2462
  280. package/src/agents/protocol.ts +0 -398
  281. package/src/agents/shell-guard.ts +0 -417
  282. package/src/agents/shell-tool.ts +0 -103
  283. package/src/agents/skill-loader.ts +0 -202
  284. package/src/agents/subagent-manager.ts +0 -553
  285. package/src/agents/workflow-engine.ts +0 -332
  286. package/src/agents/workflow-pivot-loop.ts +0 -675
  287. package/src/bollharness/.sanitize-report.json +0 -13
  288. package/src/bollharness/CLAUDE.md +0 -73
  289. package/src/bollharness/LICENSE +0 -21
  290. package/src/bollharness/README.md +0 -143
  291. package/src/bollharness/README.zh-CN.md +0 -131
  292. package/src/bollharness/package.json +0 -20
  293. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  294. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  295. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  296. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  297. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  298. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  299. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  300. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  301. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  302. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  303. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  304. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  305. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  306. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  307. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  308. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  309. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  310. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  311. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  312. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  313. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  314. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  315. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  316. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  317. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  318. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  319. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  320. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  321. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  322. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  323. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  324. package/src/bollharness/src/index.ts +0 -5
  325. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  326. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  327. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  328. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  329. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  330. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  331. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  332. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  333. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  334. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  335. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  336. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  337. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  338. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  339. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  340. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  341. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  342. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  343. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  344. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  345. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  346. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  347. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  348. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  349. package/src/bollharness/src/scripts/context_router.ts +0 -76
  350. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  351. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  352. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  353. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  354. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  355. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  356. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  357. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  358. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  359. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  360. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  361. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  362. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  363. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  364. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  365. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  366. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  367. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  368. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  369. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  370. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  371. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  372. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  373. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  374. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  375. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  376. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  377. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  378. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  379. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  380. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  381. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  382. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  383. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  384. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  385. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  386. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  387. package/src/bollharness/templates/persona/default.json +0 -19
  388. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  389. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  390. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  391. package/src/bollharness-integration/context-chain-router.ts +0 -474
  392. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  393. package/src/bollharness-integration/context-router.ts +0 -583
  394. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  395. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  396. package/src/bollharness-integration/guard-checker.ts +0 -451
  397. package/src/bollharness-integration/index.ts +0 -195
  398. package/src/bollharness-integration/integration.ts +0 -538
  399. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  400. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  401. package/src/bollharness-integration/skill-adapter.ts +0 -646
  402. package/src/bootstrap/bootstrap.ts +0 -132
  403. package/src/bootstrap/context-collector.ts +0 -342
  404. package/src/bootstrap/lifecycle-hooks.ts +0 -176
  405. package/src/bootstrap/project-context.ts +0 -163
  406. package/src/cli/interface.ts +0 -211
  407. package/src/cli-entry.ts +0 -304
  408. package/src/constraints/index.ts +0 -6
  409. package/src/documents/reader.ts +0 -85
  410. package/src/documents/store.ts +0 -252
  411. package/src/electron-preload.ts +0 -25
  412. package/src/electron.ts +0 -200
  413. package/src/heartbeat/DaemonManager.ts +0 -283
  414. package/src/heartbeat/HealthMonitor.ts +0 -316
  415. package/src/heartbeat/StartupVerifier.ts +0 -223
  416. package/src/heartbeat/Watchdog.ts +0 -208
  417. package/src/heartbeat/index.ts +0 -109
  418. package/src/heartbeat/self-improve-bus.ts +0 -110
  419. package/src/heartbeat/types.ts +0 -82
  420. package/src/index.ts +0 -1690
  421. package/src/llm/audio-config-store.ts +0 -246
  422. package/src/llm/config-store.ts +0 -400
  423. package/src/llm/llm-judgment-client.ts +0 -470
  424. package/src/llm/pi-ai.ts +0 -558
  425. package/src/llm/video-config-store.ts +0 -257
  426. package/src/network/agent-network.ts +0 -800
  427. package/src/network/hybrid-messenger.ts +0 -199
  428. package/src/network/iroh-bootstrap.ts +0 -57
  429. package/src/network/iroh-discovery.ts +0 -208
  430. package/src/network/iroh-integration.ts +0 -158
  431. package/src/network/iroh-transport.ts +0 -637
  432. package/src/network/known-peers.ts +0 -102
  433. package/src/network/p2p-direct.ts +0 -240
  434. package/src/network/p2p-secret.ts +0 -153
  435. package/src/network/p2p.ts +0 -964
  436. package/src/network/storage/adapters/json-adapter.ts +0 -454
  437. package/src/network/storage/index.ts +0 -203
  438. package/src/network/storage/types.ts +0 -166
  439. package/src/security/builtin-guards.ts +0 -162
  440. package/src/security/context-router-tool.ts +0 -122
  441. package/src/security/react-harness.ts +0 -177
  442. package/src/security/tool-gate.ts +0 -294
  443. package/src/social/ant-colony/index.js +0 -19
  444. package/src/social/channels/ChannelManager.ts +0 -485
  445. package/src/social/channels/DiapChannelBridge.ts +0 -501
  446. package/src/social/channels/InterestMatcher.ts +0 -189
  447. package/src/social/channels/agent-workflow-config.json +0 -214
  448. package/src/social/channels/agent-workflow-config.yaml +0 -334
  449. package/src/social/channels/channel-agent-session.ts +0 -407
  450. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  451. package/src/social/channels/diap-doc-parser.ts +0 -282
  452. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  453. package/src/social/channels/index.ts +0 -22
  454. package/src/social/channels/types.ts +0 -115
  455. package/src/social/global-shared-context.ts +0 -506
  456. package/src/social/heartbeat.ts +0 -1057
  457. package/src/social/persona/enhanced-persona.ts +0 -359
  458. package/src/types.d.ts +0 -12
  459. package/src/utils/auto-evolve-policy.ts +0 -138
  460. package/src/utils/auto-update.ts +0 -482
  461. package/src/utils/clamp.ts +0 -5
  462. package/src/web/agent-delegate-server.ts +0 -148
  463. package/src/web/api-config.html +0 -520
  464. package/src/web/client.js +0 -4898
  465. package/src/web/components/p2p/P2PModal.tsx +0 -416
  466. package/src/web/components/p2p/index.ts +0 -566
  467. package/src/web/components/p2p/index.tsx +0 -297
  468. package/src/web/components/p2p/p2p-connection.ts +0 -338
  469. package/src/web/components/p2p/p2p-identity.ts +0 -92
  470. package/src/web/components/p2p/p2p-manager.ts +0 -147
  471. package/src/web/components/p2p/p2p-messages.ts +0 -219
  472. package/src/web/components/p2p/p2p-modal.ts +0 -685
  473. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  474. package/src/web/components/p2p/p2p-tools.ts +0 -315
  475. package/src/web/components/p2p/types.ts +0 -170
  476. package/src/web/components/wallet-viem.mjs +0 -118
  477. package/src/web/design.md +0 -99
  478. package/src/web/icons/apple-touch-icon.png +0 -0
  479. package/src/web/icons/favicon-16x16.png +0 -0
  480. package/src/web/icons/favicon-192x192.png +0 -0
  481. package/src/web/icons/favicon-32x32.png +0 -0
  482. package/src/web/icons/favicon-48x48.png +0 -0
  483. package/src/web/icons/favicon-512x512.png +0 -0
  484. package/src/web/icons/favicon.icns +0 -0
  485. package/src/web/icons/favicon.ico +0 -0
  486. package/src/web/icons/icon.png +0 -0
  487. package/src/web/icons/image.png +0 -0
  488. package/src/web/index.html +0 -382
  489. package/src/web/iroh-delegate-transport.ts +0 -139
  490. package/src/web/manifest.json +0 -21
  491. package/src/web/server.ts +0 -5571
  492. package/src/web/style.css +0 -4455
  493. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  494. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  495. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  496. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  497. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  498. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  499. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  500. package/tsconfig.cli.json +0 -16
  501. package/tsconfig.electron.json +0 -20
  502. package/tsconfig.json +0 -18
@@ -0,0 +1,352 @@
1
+ import {
2
+ mountStepTimeline,
3
+ pushStepToTimeline,
4
+ migrateStepTimeline,
5
+ getStepTimeline
6
+ } from "./step-timeline.js";
7
+ let streamingMessageEl = null;
8
+ let streamingTextNode = null;
9
+ let streamingText = "";
10
+ let lastUserCommand = "";
11
+ let lastAiContent = "";
12
+ let scrollToBottomTimer = null;
13
+ function scheduleScrollToBottom(container) {
14
+ if (!container) return;
15
+ if (scrollToBottomTimer) return;
16
+ scrollToBottomTimer = setTimeout(() => {
17
+ container.scrollTop = container.scrollHeight;
18
+ scrollToBottomTimer = null;
19
+ }, 60);
20
+ }
21
+ function getMessagesContainerForCurrent(currentChannelId, messagesContainers, messagesEl) {
22
+ if (currentChannelId && messagesContainers.get(currentChannelId)) {
23
+ return messagesContainers.get(currentChannelId) || null;
24
+ }
25
+ return messagesEl;
26
+ }
27
+ function escapeHtml(s) {
28
+ return String(s ?? "").replace(/[&<>"']/g, (c) => ({
29
+ "&": "&amp;",
30
+ "<": "&lt;",
31
+ ">": "&gt;",
32
+ '"': "&quot;",
33
+ "'": "&#39;"
34
+ })[c]);
35
+ }
36
+ function addMessage(content, type, save = true, container, usedJudgmentIds = [], ctx = { messagesEl: null, messagesContainers: /* @__PURE__ */ new Map(), currentChannelId: null }) {
37
+ const messagesEl = ctx.messagesEl || (typeof document !== "undefined" ? document.getElementById("messages") : null);
38
+ const messagesContainers = ctx.messagesContainers || /* @__PURE__ */ new Map();
39
+ const currentChannelId = ctx.currentChannelId;
40
+ const msgContainer = container || getMessagesContainerForCurrent(currentChannelId, messagesContainers, messagesEl);
41
+ if (!save && msgContainer && msgContainer.children.length > 200) {
42
+ const toRemove = msgContainer.children.length - 200;
43
+ for (let i = 0; i < toRemove; i++) {
44
+ const first = msgContainer.firstElementChild;
45
+ if (first) msgContainer.removeChild(first);
46
+ }
47
+ }
48
+ if (save) {
49
+ const lastContent = type === "user" ? lastUserCommand : lastAiContent;
50
+ if (lastContent && content === lastContent) {
51
+ console.log(`[addMessage] \u8DF3\u8FC7\u91CD\u590D\u7684 ${type} \u6D88\u606F`);
52
+ return;
53
+ }
54
+ if (type === "user") lastUserCommand = content;
55
+ else lastAiContent = content;
56
+ }
57
+ const div = document.createElement("div");
58
+ div.className = `message message-${type}`;
59
+ let cleanContent = content.replace(/\[TOOL_CALL\][\s\S]*?\[\/TOOL_CALL\]/g, "").replace(/TOOL_CALL[\s\S]*?\/TOOL_CALL/g, "").replace(/<tool_call>[\s\S]*?<\/tool_call>/gi, "").replace(/\{\s*"tool":[\s\S]*?\}/g, "").replace(/\{\s*tool\s*=>\s*["'][^"']+["']\s*(?:,\s*args\s*=>\s*\{[\s\S]*?\})?\s*\}/g, "").replace(/\[Function[^\]]*\]\s*/g, "").trim();
60
+ const thinkMatch = cleanContent.match(/<think>([\s\S]*?)<\/think>/);
61
+ let mainContent = cleanContent;
62
+ let thinkContainer = null;
63
+ if (thinkMatch) {
64
+ const thinkContent = thinkMatch[1].trim();
65
+ mainContent = cleanContent.replace(/<think>[\s\S]*?<\/think>/, "").trim();
66
+ thinkContainer = buildThinkContainer(thinkContent);
67
+ }
68
+ const envMatch = mainContent.match(/^(.+?)\n<environment_details>([\s\S]*?)<\/environment_details>\n([\s\S]*)$/);
69
+ if (envMatch) {
70
+ const identity = envMatch[1].trim();
71
+ const envDetails = envMatch[2].trim();
72
+ const messageBody = envMatch[3].trim();
73
+ const header = document.createElement("div");
74
+ header.className = "message-header";
75
+ header.textContent = identity;
76
+ div.appendChild(header);
77
+ div.appendChild(buildEnvContainer(envDetails));
78
+ if (thinkContainer) div.appendChild(thinkContainer);
79
+ if (messageBody) div.appendChild(buildBubble(messageBody, type));
80
+ } else if (cleanContent) {
81
+ if (thinkContainer) div.appendChild(thinkContainer);
82
+ div.appendChild(buildBubble(cleanContent, type));
83
+ } else {
84
+ return;
85
+ }
86
+ const rawContent = cleanContent.replace(/<[^>]+>/g, "").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&").replace(/&nbsp;/g, " ");
87
+ const time = document.createElement("div");
88
+ time.className = "time";
89
+ time.textContent = (/* @__PURE__ */ new Date()).toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" });
90
+ if (type === "ai") {
91
+ div.appendChild(buildMessageActions(div, rawContent, ctx));
92
+ }
93
+ if (type === "ai" && Array.isArray(usedJudgmentIds) && usedJudgmentIds.length > 0) {
94
+ const link = document.createElement("a");
95
+ link.className = "used-judgments-link";
96
+ link.textContent = `\u{1F4CE} \u53C2\u8003 ${usedJudgmentIds.length} \u6761\u539F\u5219`;
97
+ link.onclick = (e) => {
98
+ e.preventDefault();
99
+ if (typeof ctx.openJudgmentsModalWithFilter === "function") {
100
+ ctx.openJudgmentsModalWithFilter(usedJudgmentIds);
101
+ }
102
+ };
103
+ div.appendChild(link);
104
+ }
105
+ if (type === "ai" && msgContainer) {
106
+ mountStepTimeline(div, currentChannelId);
107
+ }
108
+ div.appendChild(time);
109
+ if (msgContainer) {
110
+ msgContainer.appendChild(div);
111
+ scheduleScrollToBottom(msgContainer);
112
+ }
113
+ }
114
+ function buildThinkContainer(thinkContent) {
115
+ const container = document.createElement("div");
116
+ container.className = "think-container";
117
+ const toggle = document.createElement("div");
118
+ toggle.className = "think-toggle";
119
+ toggle.innerHTML = '\u{1F4AD} \u601D\u8003\u8FC7\u7A0B <span class="think-arrow">\u25B8</span>';
120
+ toggle.onclick = function() {
121
+ const details = container.querySelector(".think-content");
122
+ const arrow = toggle.querySelector(".think-arrow");
123
+ if (!details || !arrow) return;
124
+ if (details.style.display === "none") {
125
+ details.style.display = "block";
126
+ arrow.textContent = "\u25BE";
127
+ } else {
128
+ details.style.display = "none";
129
+ arrow.textContent = "\u25B8";
130
+ }
131
+ };
132
+ const content = document.createElement("div");
133
+ content.className = "think-content";
134
+ content.style.display = "none";
135
+ content.innerHTML = `<pre>${escapeHtml(thinkContent)}</pre>`;
136
+ container.appendChild(toggle);
137
+ container.appendChild(content);
138
+ return container;
139
+ }
140
+ function buildEnvContainer(envDetails) {
141
+ const container = document.createElement("div");
142
+ container.className = "env-container";
143
+ const toggle = document.createElement("div");
144
+ toggle.className = "env-toggle";
145
+ toggle.innerHTML = '\u2699\uFE0F \u73AF\u5883\u4FE1\u606F <span class="env-arrow">\u25B8</span>';
146
+ toggle.onclick = function() {
147
+ const details = container.querySelector(".environment-details");
148
+ const arrow = toggle.querySelector(".env-arrow");
149
+ if (!details || !arrow) return;
150
+ if (details.style.display === "none") {
151
+ details.style.display = "block";
152
+ arrow.textContent = "\u25BE";
153
+ } else {
154
+ details.style.display = "none";
155
+ arrow.textContent = "\u25B8";
156
+ }
157
+ };
158
+ const content = document.createElement("div");
159
+ content.className = "environment-details";
160
+ content.style.display = "none";
161
+ content.innerHTML = `<pre>${escapeHtml(envDetails)}</pre>`;
162
+ container.appendChild(toggle);
163
+ container.appendChild(content);
164
+ return container;
165
+ }
166
+ function buildBubble(text, type) {
167
+ const bubble = document.createElement("div");
168
+ bubble.className = `bubble bubble-${type}`;
169
+ const marked = window.marked;
170
+ bubble.innerHTML = marked ? marked.parse(text) : escapeHtml(text);
171
+ return bubble;
172
+ }
173
+ function buildMessageActions(div, rawContent, ctx) {
174
+ const actions = document.createElement("div");
175
+ actions.className = "message-actions";
176
+ const copyBtn = document.createElement("button");
177
+ copyBtn.className = "action-btn copy-btn";
178
+ copyBtn.innerHTML = copyIcon() + " \u590D\u5236";
179
+ copyBtn.title = "\u590D\u5236\u6D88\u606F";
180
+ copyBtn.onclick = () => {
181
+ navigator.clipboard.writeText(rawContent).then(() => {
182
+ copyBtn.innerHTML = checkIcon() + " \u5DF2\u590D\u5236";
183
+ setTimeout(() => {
184
+ copyBtn.innerHTML = copyIcon() + " \u590D\u5236";
185
+ }, 2e3);
186
+ });
187
+ };
188
+ actions.appendChild(copyBtn);
189
+ const saveJudgmentBtn = document.createElement("button");
190
+ saveJudgmentBtn.className = "action-btn save-as-judgment";
191
+ saveJudgmentBtn.title = "AI \u84B8\u998F\u4E3A 30-80 \u5B57\u5224\u65AD\u529B + \u81EA\u52A8\u6F14\u5316\u5BF9\u9F50";
192
+ saveJudgmentBtn.setAttribute("data-decision", rawContent.substring(0, 800));
193
+ if (ctx.currentChannelId) saveJudgmentBtn.setAttribute("data-channel-id", ctx.currentChannelId);
194
+ saveJudgmentBtn.innerHTML = shieldIcon() + " \u84B8\u998F\u4E3A\u5224\u65AD";
195
+ actions.appendChild(saveJudgmentBtn);
196
+ const regenBtn = document.createElement("button");
197
+ regenBtn.className = "action-btn regenerate-btn";
198
+ regenBtn.innerHTML = refreshIcon(false) + " \u91CD\u65B0\u56DE\u7B54";
199
+ regenBtn.title = "\u91CD\u65B0\u751F\u6210\u56DE\u590D";
200
+ regenBtn.onclick = () => {
201
+ regenBtn.innerHTML = refreshIcon(true) + " \u751F\u6210\u4E2D...";
202
+ regenBtn.disabled = true;
203
+ const messages = div.parentElement?.querySelectorAll(".message") || [];
204
+ let lastUserMsg = "";
205
+ for (let i = messages.length - 1; i >= 0; i--) {
206
+ const msg = messages[i];
207
+ if (msg.classList.contains("message-user")) {
208
+ const bubble = msg.querySelector(".bubble");
209
+ if (bubble) {
210
+ lastUserMsg = bubble.textContent || bubble.innerText || "";
211
+ break;
212
+ }
213
+ }
214
+ }
215
+ fetch("/regenerate", {
216
+ method: "POST",
217
+ headers: { "Content-Type": "application/json" },
218
+ body: JSON.stringify({ channelId: ctx.currentChannelId, userMessage: lastUserMsg })
219
+ }).then((res) => {
220
+ if (!res.ok) throw new Error("regenerate failed");
221
+ }).catch((err) => {
222
+ console.error("\u91CD\u65B0\u751F\u6210\u5931\u8D25:", err);
223
+ regenBtn.innerHTML = refreshIcon(false) + " \u5931\u8D25";
224
+ setTimeout(() => {
225
+ regenBtn.innerHTML = refreshIcon(false) + " \u91CD\u65B0\u56DE\u7B54";
226
+ regenBtn.disabled = false;
227
+ }, 2e3);
228
+ });
229
+ };
230
+ actions.appendChild(regenBtn);
231
+ return actions;
232
+ }
233
+ function copyIcon() {
234
+ return '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>';
235
+ }
236
+ function checkIcon() {
237
+ return '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg>';
238
+ }
239
+ function shieldIcon() {
240
+ return '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L4 6v6c0 5 3.5 9.5 8 10 4.5-.5 8-5 8-10V6l-8-4z"></path><path d="M9 12l2 2 4-4"></path></svg>';
241
+ }
242
+ function refreshIcon(spin = false) {
243
+ const cls = spin ? ' class="spin"' : "";
244
+ return `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"${cls}><path d="M21 2v6h-6M3 12a9 9 0 0 1 15-6.7L21 8M3 22v-6h6M21 12a9 9 0 0 1-15 6.7L3 16"></path></svg>`;
245
+ }
246
+ function handleStreamTokenEvent(data, ctx = { messagesEl: null, messagesContainers: /* @__PURE__ */ new Map(), currentChannelId: null }) {
247
+ const messagesEl = ctx.messagesEl || (typeof document !== "undefined" ? document.getElementById("messages") : null);
248
+ const messagesContainers = ctx.messagesContainers || /* @__PURE__ */ new Map();
249
+ const currentChannelId = ctx.currentChannelId;
250
+ const container = getMessagesContainerForCurrent(currentChannelId, messagesContainers, messagesEl);
251
+ if (!container) return;
252
+ const delta = data.content || "";
253
+ if (!delta) return;
254
+ if (!streamingMessageEl || !streamingMessageEl.isConnected) {
255
+ streamingMessageEl = document.createElement("div");
256
+ streamingMessageEl.className = "message message-ai message-streaming";
257
+ streamingTextNode = document.createTextNode("");
258
+ streamingMessageEl.appendChild(streamingTextNode);
259
+ streamingText = "";
260
+ mountStepTimeline(streamingMessageEl, currentChannelId);
261
+ container.appendChild(streamingMessageEl);
262
+ if (typeof ctx.setTimelineState === "function") {
263
+ ctx.setTimelineState("streaming");
264
+ }
265
+ scheduleScrollToBottom(container);
266
+ }
267
+ if (streamingTextNode) streamingTextNode.appendData(delta);
268
+ streamingText += delta;
269
+ scheduleScrollToBottom(container);
270
+ }
271
+ function finalizeTimelineAsMessage(ctx = { messagesEl: null, messagesContainers: /* @__PURE__ */ new Map(), currentChannelId: null }) {
272
+ const messagesEl = ctx.messagesEl || (typeof document !== "undefined" ? document.getElementById("messages") : null);
273
+ const messagesContainers = ctx.messagesContainers || /* @__PURE__ */ new Map();
274
+ const currentChannelId = ctx.currentChannelId;
275
+ const container = getMessagesContainerForCurrent(currentChannelId, messagesContainers, messagesEl);
276
+ if (streamingText.trim().length > 0) {
277
+ const oldStreamingEl = streamingMessageEl;
278
+ if (oldStreamingEl && oldStreamingEl.parentNode) {
279
+ oldStreamingEl.parentNode.removeChild(oldStreamingEl);
280
+ }
281
+ addMessage(streamingText, "ai", true, container, ctx.lastUsedJudgmentIds || [], ctx);
282
+ if (oldStreamingEl && container) {
283
+ const newAiMsg = container.querySelector(".message-ai:last-of-type");
284
+ if (newAiMsg && newAiMsg !== oldStreamingEl) {
285
+ migrateStepTimeline(oldStreamingEl, newAiMsg);
286
+ }
287
+ }
288
+ }
289
+ streamingMessageEl = null;
290
+ streamingTextNode = null;
291
+ streamingText = "";
292
+ if (typeof ctx.setTimelineState === "function") {
293
+ ctx.setTimelineState("done");
294
+ }
295
+ }
296
+ function handleStepEvent(data, ctx = { messagesEl: null, messagesContainers: /* @__PURE__ */ new Map(), currentChannelId: null }) {
297
+ const messagesEl = ctx.messagesEl || (typeof document !== "undefined" ? document.getElementById("messages") : null);
298
+ const messagesContainers = ctx.messagesContainers || /* @__PURE__ */ new Map();
299
+ const currentChannelId = ctx.currentChannelId;
300
+ const container = getMessagesContainerForCurrent(currentChannelId, messagesContainers, messagesEl);
301
+ if (!container) return;
302
+ if (!data || !data.type) return;
303
+ let target = streamingMessageEl && streamingMessageEl.isConnected ? streamingMessageEl : null;
304
+ if (!target) {
305
+ const aiMsgs = container.querySelectorAll(".message-ai");
306
+ if (aiMsgs.length === 0) return;
307
+ target = aiMsgs[aiMsgs.length - 1];
308
+ }
309
+ if (!target) return;
310
+ const timeline = getStepTimeline(target);
311
+ if (!timeline) return;
312
+ pushStepToTimeline(timeline, data.type, {
313
+ tool: data.tool || "unknown",
314
+ args: data.args,
315
+ success: data.success,
316
+ output: data.output,
317
+ error: data.error
318
+ });
319
+ }
320
+ function resetRendererState() {
321
+ streamingMessageEl = null;
322
+ streamingTextNode = null;
323
+ streamingText = "";
324
+ lastUserCommand = "";
325
+ lastAiContent = "";
326
+ if (scrollToBottomTimer) {
327
+ clearTimeout(scrollToBottomTimer);
328
+ scrollToBottomTimer = null;
329
+ }
330
+ }
331
+ const MessageRenderer = {
332
+ addMessage,
333
+ handleStreamTokenEvent,
334
+ finalizeTimelineAsMessage,
335
+ handleStepEvent,
336
+ escapeHtml,
337
+ getMessagesContainerForCurrent,
338
+ resetRendererState
339
+ };
340
+ if (typeof window !== "undefined") {
341
+ window.MR = MessageRenderer;
342
+ }
343
+ export {
344
+ MessageRenderer,
345
+ addMessage,
346
+ escapeHtml,
347
+ finalizeTimelineAsMessage,
348
+ getMessagesContainerForCurrent,
349
+ handleStepEvent,
350
+ handleStreamTokenEvent,
351
+ resetRendererState
352
+ };
@@ -0,0 +1,279 @@
1
+ const MAX_VISIBLE_NODES = 8;
2
+ const STORAGE_PREFIX = "bolloon.stepTimeline.expanded.";
3
+ const stateMap = /* @__PURE__ */ new WeakMap();
4
+ function readExpanded(channelId) {
5
+ if (!channelId) return false;
6
+ try {
7
+ return localStorage.getItem(STORAGE_PREFIX + channelId) === "1";
8
+ } catch {
9
+ return false;
10
+ }
11
+ }
12
+ function writeExpanded(channelId, expanded) {
13
+ if (!channelId) return;
14
+ try {
15
+ localStorage.setItem(STORAGE_PREFIX + channelId, expanded ? "1" : "0");
16
+ } catch {
17
+ }
18
+ }
19
+ function computeTitle(steps) {
20
+ if (steps.length === 0) return "\u6267\u884C\u6B65\u9AA4";
21
+ const activeIdx = steps.findIndex((s) => s.status === "active");
22
+ if (activeIdx >= 0) return `\u25CF \u6267\u884C\u4E2D \xB7 ${steps[activeIdx].name}`;
23
+ const lastErrorIdx = (() => {
24
+ for (let i = steps.length - 1; i >= 0; i--) {
25
+ if (steps[i].status === "error") return i;
26
+ }
27
+ return -1;
28
+ })();
29
+ if (lastErrorIdx >= 0) return `\u2717 \u5931\u8D25 \xB7 ${steps[lastErrorIdx].name}`;
30
+ return `\u2713 \u5DF2\u5B8C\u6210 \xB7 ${steps.length} \u6B65`;
31
+ }
32
+ function render(timelineEl) {
33
+ const state = stateMap.get(timelineEl);
34
+ if (!state) return;
35
+ const { steps, expanded, showAll } = state;
36
+ const titleEl = timelineEl.querySelector("[data-current-tool]");
37
+ if (titleEl) titleEl.textContent = computeTitle(steps);
38
+ const dotsEl = timelineEl.querySelector("[data-dots]");
39
+ if (dotsEl) {
40
+ const existing = Array.from(dotsEl.children);
41
+ for (let i = 0; i < steps.length; i++) {
42
+ const step = steps[i];
43
+ let dot = existing[i];
44
+ if (!dot) {
45
+ dot = document.createElement("span");
46
+ dot.className = "step-dot";
47
+ dot.setAttribute("data-index", String(i));
48
+ dotsEl.appendChild(dot);
49
+ }
50
+ dot.setAttribute("data-status", step.status);
51
+ dot.setAttribute("title", `${step.name} \xB7 ${step.status}`);
52
+ }
53
+ while (dotsEl.children.length > steps.length) {
54
+ dotsEl.removeChild(dotsEl.lastChild);
55
+ }
56
+ }
57
+ const listEl = timelineEl.querySelector("[data-list]");
58
+ if (listEl) {
59
+ const hiddenCount = Math.max(0, steps.length - MAX_VISIBLE_NODES);
60
+ const visibleSteps = showAll ? steps : steps.slice(-MAX_VISIBLE_NODES);
61
+ const existing = Array.from(listEl.children);
62
+ let htmlIdx = 0;
63
+ if (!showAll && hiddenCount > 0) {
64
+ let moreBtn = existing[htmlIdx];
65
+ if (!moreBtn || !moreBtn.classList.contains("step-timeline-more")) {
66
+ moreBtn = document.createElement("li");
67
+ moreBtn.className = "step-timeline-more";
68
+ moreBtn.setAttribute("role", "button");
69
+ moreBtn.textContent = `+ ${hiddenCount} \u66F4\u591A`;
70
+ moreBtn.onclick = () => {
71
+ state.showAll = true;
72
+ render(timelineEl);
73
+ };
74
+ if (existing[htmlIdx] && existing[htmlIdx] !== moreBtn) {
75
+ listEl.replaceChild(moreBtn, existing[htmlIdx]);
76
+ } else {
77
+ listEl.appendChild(moreBtn);
78
+ }
79
+ } else {
80
+ moreBtn.textContent = `+ ${hiddenCount} \u66F4\u591A`;
81
+ }
82
+ htmlIdx++;
83
+ }
84
+ for (let i = 0; i < visibleSteps.length; i++) {
85
+ const step = visibleSteps[i];
86
+ const realIndex = showAll ? i : steps.length - visibleSteps.length + i;
87
+ let node = existing[htmlIdx];
88
+ if (!node || !node.classList.contains("step-timeline-node")) {
89
+ node = document.createElement("li");
90
+ node.className = "step-timeline-node";
91
+ node.setAttribute("data-index", String(realIndex));
92
+ const marker = document.createElement("span");
93
+ marker.className = "step-timeline-marker";
94
+ const label2 = document.createElement("span");
95
+ label2.className = "step-timeline-label";
96
+ const args = document.createElement("span");
97
+ args.className = "step-timeline-args";
98
+ node.appendChild(marker);
99
+ node.appendChild(label2);
100
+ node.appendChild(args);
101
+ if (existing[htmlIdx] && existing[htmlIdx] !== node) {
102
+ listEl.replaceChild(node, existing[htmlIdx]);
103
+ } else {
104
+ listEl.appendChild(node);
105
+ }
106
+ } else {
107
+ node.setAttribute("data-index", String(realIndex));
108
+ }
109
+ node.setAttribute("data-status", step.status);
110
+ const label = node.querySelector(".step-timeline-label");
111
+ if (label) label.textContent = step.name;
112
+ const argsEl = node.querySelector(".step-timeline-args");
113
+ if (argsEl) {
114
+ const argStr = step.args && Object.keys(step.args).length > 0 ? JSON.stringify(step.args).slice(0, 60) : "";
115
+ argsEl.textContent = argStr;
116
+ argsEl.style.display = argStr ? "" : "none";
117
+ }
118
+ htmlIdx++;
119
+ }
120
+ while (listEl.children.length > htmlIdx) {
121
+ listEl.removeChild(listEl.lastChild);
122
+ }
123
+ }
124
+ if (steps.length === 0) {
125
+ timelineEl.setAttribute("data-empty", "true");
126
+ } else {
127
+ timelineEl.removeAttribute("data-empty");
128
+ }
129
+ const body = timelineEl.querySelector("[data-body]");
130
+ if (body) {
131
+ if (expanded) {
132
+ body.style.maxHeight = body.scrollHeight + "px";
133
+ setTimeout(() => {
134
+ if (state.expanded) body.style.maxHeight = "";
135
+ }, 300);
136
+ } else {
137
+ body.style.maxHeight = "0";
138
+ }
139
+ }
140
+ const arrow = timelineEl.querySelector(".step-timeline-arrow");
141
+ if (arrow) arrow.style.transform = expanded ? "rotate(180deg)" : "rotate(0deg)";
142
+ if (expanded && listEl) {
143
+ listEl.scrollTop = listEl.scrollHeight;
144
+ }
145
+ }
146
+ function createEmptyStepTimeline(channelId = null) {
147
+ const root = document.createElement("div");
148
+ root.className = "step-timeline";
149
+ root.setAttribute("data-step-timeline", "");
150
+ root.setAttribute("data-empty", "true");
151
+ const summary = document.createElement("div");
152
+ summary.className = "step-timeline-summary";
153
+ summary.setAttribute("data-summary", "");
154
+ const titleSpan = document.createElement("span");
155
+ titleSpan.className = "step-timeline-title";
156
+ const titleContent = document.createElement("span");
157
+ titleContent.setAttribute("data-current-tool", "");
158
+ titleContent.textContent = "\u6267\u884C\u6B65\u9AA4";
159
+ titleSpan.appendChild(titleContent);
160
+ const dots = document.createElement("div");
161
+ dots.className = "step-timeline-dots";
162
+ dots.setAttribute("data-dots", "");
163
+ const arrow = document.createElement("span");
164
+ arrow.className = "step-timeline-arrow";
165
+ arrow.textContent = "\u25BE";
166
+ summary.appendChild(titleSpan);
167
+ summary.appendChild(dots);
168
+ summary.appendChild(arrow);
169
+ summary.onclick = () => {
170
+ const state = stateMap.get(root);
171
+ if (!state) return;
172
+ state.expanded = !state.expanded;
173
+ writeExpanded(state.channelId, state.expanded);
174
+ render(root);
175
+ };
176
+ const body = document.createElement("div");
177
+ body.className = "step-timeline-body";
178
+ body.setAttribute("data-body", "");
179
+ const list = document.createElement("ul");
180
+ list.className = "step-timeline-list";
181
+ list.setAttribute("data-list", "");
182
+ body.appendChild(list);
183
+ root.appendChild(summary);
184
+ root.appendChild(body);
185
+ const initialExpanded = readExpanded(channelId);
186
+ stateMap.set(root, {
187
+ steps: [],
188
+ currentIndex: -1,
189
+ expanded: initialExpanded,
190
+ channelId: channelId || null,
191
+ showAll: false
192
+ });
193
+ render(root);
194
+ return root;
195
+ }
196
+ function mountStepTimeline(messageEl, channelId) {
197
+ const existing = messageEl.querySelector("[data-step-timeline]");
198
+ if (existing) {
199
+ const state = stateMap.get(existing);
200
+ if (state && channelId && !state.channelId) state.channelId = channelId;
201
+ return existing;
202
+ }
203
+ const bubble = messageEl.querySelector(".bubble");
204
+ const actions = messageEl.querySelector(".message-actions");
205
+ const timeline = createEmptyStepTimeline(channelId);
206
+ if (actions && actions.parentNode === messageEl) {
207
+ messageEl.insertBefore(timeline, actions);
208
+ } else if (bubble && bubble.parentNode === messageEl) {
209
+ bubble.parentNode.insertBefore(timeline, bubble.nextSibling);
210
+ } else {
211
+ messageEl.appendChild(timeline);
212
+ }
213
+ return timeline;
214
+ }
215
+ function pushStepToTimeline(timelineEl, eventType, data) {
216
+ const state = stateMap.get(timelineEl);
217
+ if (!state) return;
218
+ const { steps } = state;
219
+ if (eventType === "step_start") {
220
+ state.currentIndex = steps.length;
221
+ steps.push({
222
+ name: data.tool,
223
+ status: "active",
224
+ args: data.args,
225
+ eventType
226
+ });
227
+ } else {
228
+ let targetIdx = state.currentIndex;
229
+ if (targetIdx < 0 || !steps[targetIdx] || steps[targetIdx].name !== data.tool) {
230
+ for (let i = steps.length - 1; i >= 0; i--) {
231
+ if (steps[i].name === data.tool && steps[i].status === "active") {
232
+ targetIdx = i;
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ if (targetIdx < 0) {
238
+ targetIdx = steps.length;
239
+ steps.push({ name: data.tool, status: "error", eventType });
240
+ }
241
+ if (eventType === "step_done") {
242
+ steps[targetIdx].status = data.success === false ? "error" : "done";
243
+ if (data.output) steps[targetIdx].output = data.output;
244
+ if (data.error) steps[targetIdx].error = data.error;
245
+ } else {
246
+ steps[targetIdx].status = "error";
247
+ if (data.error) steps[targetIdx].error = data.error;
248
+ }
249
+ steps[targetIdx].eventType = eventType;
250
+ state.currentIndex = -1;
251
+ }
252
+ render(timelineEl);
253
+ }
254
+ function migrateStepTimeline(fromEl, toEl) {
255
+ const fromTimeline = fromEl.querySelector("[data-step-timeline]");
256
+ const toTimeline = toEl.querySelector("[data-step-timeline]");
257
+ if (!fromTimeline) return;
258
+ if (toTimeline && toTimeline !== fromTimeline) {
259
+ toTimeline.remove();
260
+ }
261
+ if (toTimeline !== fromTimeline) {
262
+ toEl.appendChild(fromTimeline);
263
+ }
264
+ const state = stateMap.get(fromTimeline);
265
+ if (state) {
266
+ render(fromTimeline);
267
+ }
268
+ }
269
+ function getStepTimeline(messageEl) {
270
+ if (!messageEl) return null;
271
+ return messageEl.querySelector("[data-step-timeline]");
272
+ }
273
+ export {
274
+ createEmptyStepTimeline,
275
+ getStepTimeline,
276
+ migrateStepTimeline,
277
+ mountStepTimeline,
278
+ pushStepToTimeline
279
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bolloon/bolloon-agent",
3
- "version": "0.1.35",
3
+ "version": "0.1.37",
4
4
  "type": "module",
5
5
  "description": "P2P AI Document Agent - 全局安装后执行 `bolloon` 启动产品",
6
6
  "main": "dist/cli.js",
@@ -32,7 +32,7 @@
32
32
  "src/constraint-runtime"
33
33
  ],
34
34
  "dependencies": {
35
- "@bolloon/bolloon-agent": "^0.1.35",
35
+ "@bolloon/bolloon-agent": "^0.1.36",
36
36
  "@bolloon/constraint-runtime": "0.1.0",
37
37
  "@chainsafe/libp2p-noise": "^17.0.0",
38
38
  "@chainsafe/libp2p-yamux": "^8.0.1",
@@ -1 +0,0 @@
1
- 2026-06-14:6
@@ -1 +0,0 @@
1
- auto-evolve-baseline-20260614T110128Z