@bolloon/bolloon-agent 0.1.36 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/dist/web/client.js +2861 -3746
  2. package/dist/web/components/p2p/index.js +226 -264
  3. package/dist/web/ui/message-renderer.js +323 -434
  4. package/dist/web/ui/step-timeline.js +255 -351
  5. package/package.json +2 -2
  6. package/.auto-evolve-calls +0 -1
  7. package/.last-auto-evolve-baseline +0 -1
  8. package/.playwright-mcp/page-2026-06-16T07-51-45-706Z.yml +0 -130
  9. package/.playwright-mcp/page-2026-06-16T07-56-44-116Z.yml +0 -131
  10. package/Bolloon.md +0 -144
  11. package/Dive-into/CITATION.cff +0 -17
  12. package/Dive-into/LICENSE +0 -25
  13. package/Dive-into/README.md +0 -598
  14. package/Dive-into/README_zh.md +0 -599
  15. package/Dive-into/assets/context.png +0 -0
  16. package/Dive-into/assets/extensibility.png +0 -0
  17. package/Dive-into/assets/iteration.png +0 -0
  18. package/Dive-into/assets/layered_architecture.png +0 -0
  19. package/Dive-into/assets/main_structure.png +0 -0
  20. package/Dive-into/assets/permission.png +0 -0
  21. package/Dive-into/assets/session_compact.png +0 -0
  22. package/Dive-into/assets/subagent.png +0 -0
  23. package/Dive-into/paper/Dive_into_Claude_Code.pdf +0 -0
  24. package/dist/agents/constraint-layer.js.map +0 -1
  25. package/dist/agents/pi-sdk.js.map +0 -1
  26. package/dist/agents/workflow-engine.js.map +0 -1
  27. package/dist/bollharness/src/index.js +0 -5
  28. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  29. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  30. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  31. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  32. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  33. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  34. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  35. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  36. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  37. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  38. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  39. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  40. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  41. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  42. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  43. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  44. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  45. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  46. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  47. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  48. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  49. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  50. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  51. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  52. package/dist/bollharness/src/scripts/context_router.js +0 -67
  53. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  54. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  55. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  56. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  57. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  58. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  59. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  60. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  61. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  62. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  63. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  64. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  65. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  66. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  67. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  68. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  69. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  70. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  71. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  72. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  73. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  74. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  75. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  76. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  77. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  78. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  79. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  80. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  81. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  82. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  83. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  84. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  85. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  86. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  87. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  88. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  89. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  90. package/dist/bollharness-integration/context-router.js.map +0 -1
  91. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  92. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  93. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  94. package/dist/bollharness-integration/index.js.map +0 -1
  95. package/dist/bollharness-integration/integration.js.map +0 -1
  96. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  97. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  98. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  99. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  100. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  101. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  102. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  103. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  104. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  105. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  106. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  107. package/dist/constraint-runtime/src/agent/index.js +0 -1
  108. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  109. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  110. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  111. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  112. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  113. package/dist/constraint-runtime/src/cli/index.js +0 -12
  114. package/dist/constraint-runtime/src/command_graph.js +0 -10
  115. package/dist/constraint-runtime/src/commands.js +0 -60
  116. package/dist/constraint-runtime/src/components/index.js +0 -12
  117. package/dist/constraint-runtime/src/constants/index.js +0 -12
  118. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  119. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  120. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  121. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  122. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  123. package/dist/constraint-runtime/src/context.js +0 -30
  124. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  125. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  126. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  127. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  128. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  129. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  130. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  131. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  132. package/dist/constraint-runtime/src/history.js +0 -9
  133. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  134. package/dist/constraint-runtime/src/index.js +0 -26
  135. package/dist/constraint-runtime/src/ink.js +0 -4
  136. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  137. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  138. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  139. package/dist/constraint-runtime/src/models.js +0 -1
  140. package/dist/constraint-runtime/src/models.js.map +0 -1
  141. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  142. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  143. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  144. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  145. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  146. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  147. package/dist/constraint-runtime/src/prefetch.js +0 -9
  148. package/dist/constraint-runtime/src/query.js +0 -1
  149. package/dist/constraint-runtime/src/remote/index.js +0 -12
  150. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  151. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  152. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  153. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  154. package/dist/constraint-runtime/src/screens/index.js +0 -12
  155. package/dist/constraint-runtime/src/server/index.js +0 -12
  156. package/dist/constraint-runtime/src/services/index.js +0 -12
  157. package/dist/constraint-runtime/src/session_store.js +0 -22
  158. package/dist/constraint-runtime/src/setup.js +0 -30
  159. package/dist/constraint-runtime/src/skills/index.js +0 -1
  160. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  161. package/dist/constraint-runtime/src/state/index.js +0 -12
  162. package/dist/constraint-runtime/src/system_init.js +0 -20
  163. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  164. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  165. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  166. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  167. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  168. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  169. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  170. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  171. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  172. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  173. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  174. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  175. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  176. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  177. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  178. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  179. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  180. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  181. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  182. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  183. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  184. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  185. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  186. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  187. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  188. package/dist/constraint-runtime/src/tools.js +0 -80
  189. package/dist/constraint-runtime/src/transcript.js +0 -19
  190. package/dist/constraint-runtime/src/types/index.js +0 -12
  191. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  192. package/dist/constraint-runtime/src/utils/index.js +0 -12
  193. package/dist/constraint-runtime/src/vim/index.js +0 -12
  194. package/dist/constraint-runtime/src/voice/index.js +0 -12
  195. package/dist/constraints/index.js.map +0 -1
  196. package/dist/documents/reader.js.map +0 -1
  197. package/dist/llm/config-store.js.map +0 -1
  198. package/dist/llm/pi-ai.js.map +0 -1
  199. package/dist/network/agent-network.js.map +0 -1
  200. package/dist/network/iroh-integration.js.map +0 -1
  201. package/dist/network/iroh-transport.js.map +0 -1
  202. package/dist/network/p2p.js.map +0 -1
  203. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  204. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  205. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  206. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  207. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  208. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  209. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  210. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  211. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  212. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  213. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  214. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  215. package/dist/social/ant-colony/types.js.map +0 -1
  216. package/dist/social/channels/ChannelManager.js.map +0 -1
  217. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  218. package/dist/social/channels/InterestMatcher.js.map +0 -1
  219. package/dist/social/channels/types.js.map +0 -1
  220. package/dist/social/global-shared-context.js.map +0 -1
  221. package/dist/social/heartbeat.js.map +0 -1
  222. package/dist/web/components/p2p/P2PModal.js +0 -188
  223. package/dist/web/components/p2p/p2p-modal.js +0 -657
  224. package/dist/web/components/p2p/p2p-tools.js +0 -248
  225. package/lefthook.yml +0 -33
  226. package/scripts/auto-evolve-loop.ts +0 -481
  227. package/scripts/auto-evolve-oneshot.sh +0 -155
  228. package/scripts/auto-evolve-snapshot.sh +0 -136
  229. package/scripts/build-cli.js +0 -216
  230. package/scripts/build-web.ts +0 -116
  231. package/scripts/detect-schema-changes.sh +0 -48
  232. package/scripts/diff-reviewer.ts +0 -159
  233. package/scripts/postinstall.js +0 -153
  234. package/scripts/validate-system-prompt.ts +0 -142
  235. package/scripts/weekly-report.ts +0 -364
  236. package/src/agents/agent-manifest-protocol.ts +0 -117
  237. package/src/agents/constraint-layer.ts +0 -309
  238. package/src/agents/iroh-secret.ts +0 -32
  239. package/src/agents/p2p-chat-tools.ts +0 -383
  240. package/src/agents/p2p-document-tools.ts +0 -347
  241. package/src/agents/permission-mode.ts +0 -127
  242. package/src/agents/pi-sdk.ts +0 -2895
  243. package/src/agents/pre-tool-validator.ts +0 -213
  244. package/src/agents/protocol.ts +0 -398
  245. package/src/agents/shell-guard.ts +0 -417
  246. package/src/agents/shell-tool.ts +0 -103
  247. package/src/agents/skill-loader.ts +0 -202
  248. package/src/agents/subagent-manager.ts +0 -553
  249. package/src/agents/workflow-engine.ts +0 -332
  250. package/src/agents/workflow-pivot-loop.ts +0 -766
  251. package/src/bollharness/.sanitize-report.json +0 -13
  252. package/src/bollharness/CLAUDE.md +0 -73
  253. package/src/bollharness/LICENSE +0 -21
  254. package/src/bollharness/README.md +0 -143
  255. package/src/bollharness/README.zh-CN.md +0 -131
  256. package/src/bollharness/package.json +0 -20
  257. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  258. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  259. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  260. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  261. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  262. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  263. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  264. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  265. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  266. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  267. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  268. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  269. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  270. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  271. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  272. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  273. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  274. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  275. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  276. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  277. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  278. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  279. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  280. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  281. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  282. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  283. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  284. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  285. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  286. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  287. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  288. package/src/bollharness/src/index.ts +0 -5
  289. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  290. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  291. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  292. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  293. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  294. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  295. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  296. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  297. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  298. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  299. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  300. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  301. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  302. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  303. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  304. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  305. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  306. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  307. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  308. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  309. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  310. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  311. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  312. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  313. package/src/bollharness/src/scripts/context_router.ts +0 -76
  314. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  315. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  316. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  317. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  318. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  319. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  320. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  321. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  322. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  323. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  324. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  325. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  326. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  327. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  328. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  329. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  330. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  331. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  332. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  333. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  334. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  335. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  336. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  337. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  338. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  339. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  340. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  341. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  342. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  343. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  344. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  345. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  346. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  347. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  348. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  349. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  350. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  351. package/src/bollharness/templates/persona/default.json +0 -19
  352. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  353. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  354. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  355. package/src/bollharness-integration/context-chain-router.ts +0 -474
  356. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  357. package/src/bollharness-integration/context-router.ts +0 -583
  358. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  359. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  360. package/src/bollharness-integration/guard-checker.ts +0 -451
  361. package/src/bollharness-integration/index.ts +0 -195
  362. package/src/bollharness-integration/integration.ts +0 -538
  363. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  364. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  365. package/src/bollharness-integration/skill-adapter.ts +0 -646
  366. package/src/bootstrap/bootstrap.ts +0 -135
  367. package/src/bootstrap/context-collector.ts +0 -371
  368. package/src/bootstrap/context-hierarchy.ts +0 -283
  369. package/src/bootstrap/lifecycle-hooks.ts +0 -289
  370. package/src/bootstrap/project-context.ts +0 -171
  371. package/src/cli/interface.ts +0 -211
  372. package/src/cli-entry.ts +0 -304
  373. package/src/constraints/index.ts +0 -6
  374. package/src/context-compaction/auto-compact.ts +0 -153
  375. package/src/context-compaction/budget-gate.ts +0 -32
  376. package/src/context-compaction/budget-reduce.ts +0 -37
  377. package/src/context-compaction/context-collapse.ts +0 -72
  378. package/src/context-compaction/index.ts +0 -24
  379. package/src/context-compaction/microcompact.ts +0 -54
  380. package/src/context-compaction/pipeline.ts +0 -133
  381. package/src/context-compaction/snip.ts +0 -51
  382. package/src/context-compaction/token-estimator.ts +0 -36
  383. package/src/context-compaction/types.ts +0 -99
  384. package/src/documents/reader.ts +0 -85
  385. package/src/documents/store.ts +0 -252
  386. package/src/electron-preload.ts +0 -25
  387. package/src/electron.ts +0 -200
  388. package/src/heartbeat/DaemonManager.ts +0 -283
  389. package/src/heartbeat/HealthMonitor.ts +0 -317
  390. package/src/heartbeat/StartupVerifier.ts +0 -223
  391. package/src/heartbeat/Watchdog.ts +0 -208
  392. package/src/heartbeat/index.ts +0 -109
  393. package/src/heartbeat/self-improve-bus.ts +0 -110
  394. package/src/heartbeat/types.ts +0 -82
  395. package/src/index.ts +0 -1724
  396. package/src/llm/audio-config-store.ts +0 -246
  397. package/src/llm/config-store.ts +0 -400
  398. package/src/llm/llm-judgment-client.ts +0 -471
  399. package/src/llm/pi-ai.ts +0 -653
  400. package/src/llm/system-prompt/health.ts +0 -159
  401. package/src/llm/system-prompt/layers/channel/local.md +0 -14
  402. package/src/llm/system-prompt/layers/channel/p2p-agent.md +0 -18
  403. package/src/llm/system-prompt/layers/channel/p2p-visitor.md +0 -19
  404. package/src/llm/system-prompt/layers/core/artifacts_storage.md +0 -89
  405. package/src/llm/system-prompt/layers/core/evenhandedness.md +0 -21
  406. package/src/llm/system-prompt/layers/core/hibs_reminders.md +0 -15
  407. package/src/llm/system-prompt/layers/core/identity.md +0 -37
  408. package/src/llm/system-prompt/layers/core/knowledge.md +0 -17
  409. package/src/llm/system-prompt/layers/core/memory_system.md +0 -12
  410. package/src/llm/system-prompt/layers/core/network_filesystem.md +0 -28
  411. package/src/llm/system-prompt/layers/core/refusal.md +0 -37
  412. package/src/llm/system-prompt/layers/core/tone.md +0 -31
  413. package/src/llm/system-prompt/layers/core/tools.thin.md +0 -13
  414. package/src/llm/system-prompt/layers/core/wellbeing.md +0 -41
  415. package/src/llm/system-prompt/layers/role/architect.md +0 -20
  416. package/src/llm/system-prompt/layers/role/expert.md +0 -19
  417. package/src/llm/system-prompt/layers/role/implementer.md +0 -15
  418. package/src/llm/system-prompt/layers/role/security.md +0 -15
  419. package/src/llm/system-prompt/layers/tool/artifacts.md +0 -72
  420. package/src/llm/system-prompt/layers/tool/bash.md +0 -25
  421. package/src/llm/system-prompt/layers/tool/hibs_api.md +0 -171
  422. package/src/llm/system-prompt/layers/tool/image_search.md +0 -70
  423. package/src/llm/system-prompt/layers/tool/manifest.md +0 -89
  424. package/src/llm/system-prompt/layers/tool/mcp_apps.md +0 -53
  425. package/src/llm/system-prompt/layers/tool/web_search.md +0 -83
  426. package/src/llm/system-prompt/registry.ts +0 -325
  427. package/src/llm/system-prompt/strip-hibsml.ts +0 -52
  428. package/src/llm/tool-manifest/ask_user_input.ts +0 -37
  429. package/src/llm/tool-manifest/bash.ts +0 -25
  430. package/src/llm/tool-manifest/create_file.ts +0 -26
  431. package/src/llm/tool-manifest/fetch_sports_data.ts +0 -28
  432. package/src/llm/tool-manifest/image_search.ts +0 -26
  433. package/src/llm/tool-manifest/index.ts +0 -88
  434. package/src/llm/tool-manifest/mcp.ts +0 -46
  435. package/src/llm/tool-manifest/message_compose.ts +0 -33
  436. package/src/llm/tool-manifest/places.ts +0 -86
  437. package/src/llm/tool-manifest/present_files.ts +0 -23
  438. package/src/llm/tool-manifest/recipe.ts +0 -42
  439. package/src/llm/tool-manifest/recommend_apps.ts +0 -25
  440. package/src/llm/tool-manifest/str_replace.ts +0 -29
  441. package/src/llm/tool-manifest/types.ts +0 -52
  442. package/src/llm/tool-manifest/view.ts +0 -26
  443. package/src/llm/tool-manifest/weather.ts +0 -29
  444. package/src/llm/tool-manifest/web.ts +0 -54
  445. package/src/llm/video-config-store.ts +0 -257
  446. package/src/network/agent-network.ts +0 -800
  447. package/src/network/hybrid-messenger.ts +0 -199
  448. package/src/network/iroh-bootstrap.ts +0 -57
  449. package/src/network/iroh-discovery.ts +0 -208
  450. package/src/network/iroh-integration.ts +0 -158
  451. package/src/network/iroh-transport.ts +0 -637
  452. package/src/network/known-peers.ts +0 -102
  453. package/src/network/p2p-direct.ts +0 -262
  454. package/src/network/p2p-secret.ts +0 -153
  455. package/src/network/p2p.ts +0 -964
  456. package/src/network/source-intent-broadcaster.ts +0 -242
  457. package/src/network/source-intent.ts +0 -167
  458. package/src/network/storage/adapters/json-adapter.ts +0 -454
  459. package/src/network/storage/index.ts +0 -203
  460. package/src/network/storage/types.ts +0 -166
  461. package/src/security/builtin-guards.ts +0 -162
  462. package/src/security/context-router-tool.ts +0 -122
  463. package/src/security/input-scanner.ts +0 -287
  464. package/src/security/react-harness.ts +0 -177
  465. package/src/security/tool-gate.ts +0 -294
  466. package/src/social/ant-colony/index.js +0 -19
  467. package/src/social/channels/ChannelManager.ts +0 -485
  468. package/src/social/channels/DiapChannelBridge.ts +0 -501
  469. package/src/social/channels/InterestMatcher.ts +0 -189
  470. package/src/social/channels/agent-workflow-config.json +0 -214
  471. package/src/social/channels/agent-workflow-config.yaml +0 -334
  472. package/src/social/channels/channel-agent-session.ts +0 -407
  473. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  474. package/src/social/channels/diap-doc-parser.ts +0 -282
  475. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  476. package/src/social/channels/index.ts +0 -22
  477. package/src/social/channels/types.ts +0 -115
  478. package/src/social/global-shared-context.ts +0 -506
  479. package/src/social/heartbeat.ts +0 -1057
  480. package/src/social/persona/enhanced-persona.ts +0 -359
  481. package/src/types.d.ts +0 -12
  482. package/src/utils/auto-evolve-policy.ts +0 -138
  483. package/src/utils/auto-update.ts +0 -482
  484. package/src/utils/clamp.ts +0 -5
  485. package/src/web/agent-delegate-server.ts +0 -148
  486. package/src/web/api-config.html +0 -520
  487. package/src/web/client.js +0 -2352
  488. package/src/web/client.ts +0 -4326
  489. package/src/web/components/p2p/P2PModal.tsx +0 -416
  490. package/src/web/components/p2p/index.ts +0 -566
  491. package/src/web/components/p2p/index.tsx +0 -297
  492. package/src/web/components/p2p/p2p-connection.ts +0 -338
  493. package/src/web/components/p2p/p2p-identity.ts +0 -92
  494. package/src/web/components/p2p/p2p-manager.ts +0 -147
  495. package/src/web/components/p2p/p2p-messages.ts +0 -219
  496. package/src/web/components/p2p/p2p-modal.ts +0 -685
  497. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  498. package/src/web/components/p2p/p2p-tools.ts +0 -315
  499. package/src/web/components/p2p/types.ts +0 -170
  500. package/src/web/components/wallet-viem.mjs +0 -118
  501. package/src/web/design.md +0 -99
  502. package/src/web/icons/apple-touch-icon.png +0 -0
  503. package/src/web/icons/favicon-16x16.png +0 -0
  504. package/src/web/icons/favicon-192x192.png +0 -0
  505. package/src/web/icons/favicon-32x32.png +0 -0
  506. package/src/web/icons/favicon-48x48.png +0 -0
  507. package/src/web/icons/favicon-512x512.png +0 -0
  508. package/src/web/icons/favicon.icns +0 -0
  509. package/src/web/icons/favicon.ico +0 -0
  510. package/src/web/icons/icon.png +0 -0
  511. package/src/web/icons/image.png +0 -0
  512. package/src/web/index.html +0 -373
  513. package/src/web/iroh-delegate-transport.ts +0 -139
  514. package/src/web/manifest.json +0 -21
  515. package/src/web/server.ts +0 -5731
  516. package/src/web/style.css +0 -4737
  517. package/src/web/ui/message-renderer.ts +0 -540
  518. package/src/web/ui/step-timeline.ts +0 -394
  519. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  520. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  521. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  522. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  523. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  524. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  525. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  526. package/test-results/.last-run.json +0 -6
  527. package/test-results/src-test-web-loop-status-b-5734c-atus-bar-/346/230/276/347/244/272-spinner-/344/270/215/346/230/276/347/244/272/345/276/252/347/216/257/350/256/241/346/225/260/error-context.md +0 -285
  528. package/tsconfig.cli.json +0 -16
  529. package/tsconfig.electron.json +0 -20
  530. package/tsconfig.json +0 -18
@@ -1,481 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * auto-evolve-loop.ts — 阶段 D 主循环 (重写版)
4
- *
5
- * 流程 (per iteration):
6
- * 1. 跑 vitest, 拿 fail 信息
7
- * 2. 把 fail + 当前 src/test 源码喂给 LLM (走 PiAIModel / MiniMax)
8
- * 3. 写 diff 到 staging/auto-evolve/iter-<N>/
9
- * 4. 跑 detect-schema-changes + diff-reviewer
10
- * 5a. reviewer PASS → git apply --recount --whitespace=fix + commit
11
- * 5b. reviewer FAIL → log, 累计连续失败
12
- * 6. 连续 3 次 FAIL → 自动回滚 baseline + 通知
13
- *
14
- * 退出条件 (任一即停):
15
- * - 全部测试 PASS (loop 成功)
16
- * - 连续 3 次 FAIL (loop 认输)
17
- * - max-iter 达到 (默认 10)
18
- * - 人类 SIGINT (Ctrl-C)
19
- *
20
- * 用法:
21
- * tsx scripts/auto-evolve-loop.ts
22
- * tsx scripts/auto-evolve-loop.ts --max-iter 5
23
- * tsx scripts/auto-evolve-loop.ts --target src/utils/foo.ts
24
- */
25
-
26
- import { execFile } from 'child_process';
27
- import * as fs from 'fs/promises';
28
- import { promisify } from 'util';
29
- import * as path from 'path';
30
-
31
- const pExec = promisify(execFile);
32
- const REPO = process.cwd();
33
-
34
- /**
35
- * P2P 协作 broadcaster (行级 reserve + commit-intent 广播)
36
- * 走现有 P2PDirect + 'bolloon-agent-harness' topic, 不开新端口.
37
- * 失败 → 整个 loop 仍能跑 (broadcaster = null 时跳过), 不阻塞自迭代.
38
- */
39
- let broadcaster: any = null;
40
- async function initBroadcaster(): Promise<void> {
41
- try {
42
- const { P2PDirect } = await import('../src/network/p2p-direct.js');
43
- const { SourceIntentBroadcaster } = await import('../src/network/source-intent-broadcaster.js');
44
- const hostname = await pExec('hostname', []).then(r => r.stdout.trim()).catch(() => 'unknown');
45
- const p2p = new P2PDirect({ name: 'auto-evolve', role: 'auto-evolve-agent' });
46
- await p2p.start();
47
- const sb = new SourceIntentBroadcaster(p2p, {
48
- agent: `agent-${hostname}`,
49
- topic: 'bolloon-agent-harness',
50
- });
51
- await sb.start();
52
-
53
- // P2P Hook 4: 监听远端事件, 打印到日志 (聊天框能看)
54
- sb.on('remoteReserve', (m: any) => {
55
- console.log(`[p2p] 远端 ${m.agent} reserve ${m.file} 行 ${m.lines[0]}-${m.lines[1]} (task=${m.taskId})`);
56
- });
57
- sb.on('remoteConflict', (c: any) => {
58
- console.log(`[p2p] 冲突: 远端 ${c.agent} 也想改 ${JSON.stringify(c.lines)} — 我方让步 / 改方向`);
59
- });
60
- sb.on('remoteRelease', (m: any) => {
61
- console.log(`[p2p] 远端 ${m.agent} release ${m.file} 行 ${m.lines[0]}-${m.lines[1]}`);
62
- });
63
- sb.on('remoteCommit', (m: any) => {
64
- console.log(`[p2p] 远端 ${m.agent} commit ${m.file} sha=${m.sha} diffHash=${m.diffHash}`);
65
- });
66
-
67
- // 把 live reserves 注入到 LLM 系统 prompt (pi-ai Hook)
68
- try {
69
- const pi = await import('../src/llm/pi-ai.js');
70
- pi.setSystemPrependProvider(() => {
71
- const live = sb.liveReserves();
72
- if (live.length === 0) return null;
73
- return [
74
- '【行级 P2P 协调】其他智能体正在改的代码行:',
75
- ...live.map(r => ` - ${r.file} 行 ${r.lines[0]}-${r.lines[1]} (${r.agent}, task=${r.taskId})`),
76
- '你即将改的代码行如果重叠, 请让出或改别的行.',
77
- ].join('\n');
78
- });
79
- console.log('[p2p] systemPrependProvider 已注册');
80
- } catch (err: any) {
81
- console.warn(`[p2p] systemPrependProvider 注册失败: ${err.message?.slice(0, 100)}`);
82
- }
83
-
84
- broadcaster = sb;
85
- console.log('[p2p] broadcaster 已启动');
86
- } catch (err: any) {
87
- console.warn(`[p2p] broadcaster 启动失败 (loop 继续): ${err.message?.slice(0, 200)}`);
88
- broadcaster = null;
89
- }
90
- }
91
-
92
- interface VitestResult {
93
- failed: number;
94
- passed: number;
95
- totalFiles: string[];
96
- failingTests: { file: string; name: string; message: string }[];
97
- }
98
-
99
- /**
100
- * 跑全量 vitest, 在 parseVitestJson 里 filter
101
- * (vitest 不接受 positional path filter, 会被忽略)
102
- */
103
- async function runVitest(targetFile?: string): Promise<VitestResult> {
104
- const args = ['vitest', 'run', '--reporter=json', '--no-color'];
105
- try {
106
- const { stdout } = await pExec('npx', args, { cwd: REPO, maxBuffer: 50 * 1024 * 1024 });
107
- const json = JSON.parse(stdout);
108
- return parseVitestJson(json, targetFile);
109
- } catch (err: any) {
110
- if (err.stdout) {
111
- try {
112
- const json = JSON.parse(err.stdout);
113
- return parseVitestJson(json, targetFile);
114
- } catch {
115
- // 解析失败
116
- }
117
- }
118
- return { failed: 1, passed: 0, totalFiles: [], failingTests: [{ file: 'unknown', name: 'vitest crashed', message: err.message?.slice(0, 500) || '' }] };
119
- }
120
- }
121
-
122
- function parseVitestJson(j: any, targetFile?: string): VitestResult {
123
- const failingTests: VitestResult['failingTests'] = [];
124
- const totalFiles: string[] = [];
125
- let failed = 0;
126
- let passed = 0;
127
- for (const f of j.testResults || []) {
128
- // targetFile 过滤: 只看匹配的文件
129
- if (targetFile && !f.name?.includes(targetFile.split('/').pop() || '')) {
130
- continue;
131
- }
132
- totalFiles.push(f.name || '');
133
- failed += f.assertionResults?.filter((a: any) => a.status === 'failed').length || 0;
134
- passed += f.assertionResults?.filter((a: any) => a.status === 'passed').length || 0;
135
- for (const a of f.assertionResults || []) {
136
- if (a.status === 'failed') {
137
- failingTests.push({
138
- file: f.name,
139
- name: a.fullName || a.title,
140
- message: (a.failureMessages || []).join('\n').slice(0, 1500),
141
- });
142
- }
143
- }
144
- }
145
- return { failed, passed, totalFiles, failingTests };
146
- }
147
-
148
- /**
149
- * 调 LLM — 走 bolloon 自带 PiAIModel (MiniMax, 读 .env 的 MINIMAX_API_KEY)
150
- * 无 key 或 SDK 不可用都返回空字符串 (loop 认作 "无 diff" 重试)
151
- */
152
- async function callLLM(prompt: string): Promise<string> {
153
- try {
154
- const pi = await import('../src/llm/pi-ai.js' as any).catch(() => import('../src/llm/pi-ai.js'));
155
- const client = pi.initMinimax();
156
- const text = await client.generateText({
157
- messages: [{ role: 'user', content: prompt }],
158
- maxTokens: 4096,
159
- temperature: 0.2,
160
- });
161
- await bumpCallCount();
162
- return text || '';
163
- } catch (e: any) {
164
- console.warn(`[loop] PiAIModel 不可用: ${e.message?.slice(0, 100)}`);
165
- return '';
166
- }
167
- }
168
-
169
- async function bumpCallCount(): Promise<void> {
170
- const f = path.join(REPO, '.auto-evolve-calls');
171
- const today = new Date().toISOString().slice(0, 10);
172
- let count = 0;
173
- try {
174
- const lines = (await fs.readFile(f, 'utf-8')).trim().split('\n').filter(Boolean);
175
- const lastLine = lines[lines.length - 1];
176
- if (lastLine?.startsWith(today)) count = parseInt(lastLine.split(':')[1] || '0', 10);
177
- } catch { /* no file yet */ }
178
- await fs.writeFile(f, `${today}:${count + 1}\n`, 'utf-8');
179
- }
180
-
181
- const FIX_PROMPT = `你是一个谨慎的代码修复助手. 你的工作是修复失败的测试, **不**做无关改动.
182
-
183
- 约束 (违反任一即重做):
184
- 1. 改动最小: 只动让测试通过必需的部分
185
- 2. 不改测试本身 (除非 test 自身有 bug)
186
- 3. 不引入新依赖
187
- 4. 不删注释 / 不改注释
188
- 5. 不动 schema (interface/type) 除非 fail 信息明确要求
189
- 6. 不用 any / unknown / @ts-ignore 偷懒
190
- 7. 不动 package.json / tsconfig.json
191
-
192
- 输出格式 (严格):
193
- - 第一个字符必须是 \`\`\`diff
194
- - 中间是 unified diff (git format-patch 风格, --- a/path +++ b/path)
195
- - 最后一个字符必须是 \`\`\`
196
- - 不要在 diff 块外输出任何文字
197
- - 不要使用 thinking 块 (下游会丢失)
198
- - **改动必须严格匹配当前源码 (行数, 缩进)**
199
-
200
- FAIL 信息:
201
- {{FAIL}}
202
-
203
- 相关源码 (请严格匹配行数和缩进):
204
- {{SOURCE}}
205
-
206
- 请**只**输出 diff 块:`;
207
-
208
- async function getSourceContext(file: string): Promise<string> {
209
- try {
210
- const content = await fs.readFile(file, 'utf-8');
211
- return content.slice(0, 8000);
212
- } catch {
213
- return '';
214
- }
215
- }
216
-
217
- /**
218
- * 从 test 文件的 import 语句里提取 src 路径, 读出来
219
- * 关键: 让 LLM 看到真实源文件, 否则它只能猜行数, diff apply 会失败
220
- */
221
- async function getImportedSource(testFile: string): Promise<string> {
222
- try {
223
- const testContent = await fs.readFile(testFile, 'utf-8');
224
- const dir = path.dirname(testFile);
225
- const imports = [...testContent.matchAll(/from\s+['"]([^'"]+)['"]/g)].map((m) => m[1]);
226
- const out: string[] = [];
227
- for (const imp of imports) {
228
- if (!imp.startsWith('.')) continue;
229
- let resolved = path.resolve(dir, imp);
230
- if (resolved.endsWith('.js')) {
231
- // 试 .ts 替换
232
- const tsTry = resolved.replace(/\.js$/, '.ts');
233
- if (await fs.access(tsTry).then(() => true).catch(() => false)) {
234
- resolved = tsTry;
235
- }
236
- } else if (!resolved.endsWith('.ts')) {
237
- if (await fs.access(resolved + '.ts').then(() => true).catch(() => false)) {
238
- resolved += '.ts';
239
- }
240
- }
241
- try {
242
- const content = await fs.readFile(resolved, 'utf-8');
243
- out.push(`--- ${resolved} ---\n${content.slice(0, 4000)}`);
244
- } catch { /* skip */ }
245
- }
246
- return out.join('\n\n');
247
- } catch {
248
- return '';
249
- }
250
- }
251
-
252
- function extractDiff(llmOutput: string): string | null {
253
- // 找 ```diff ... ``` 块
254
- const m = /```diff\s*([\s\S]*?)```/.exec(llmOutput);
255
- if (m) return m[1].trim();
256
- return null;
257
- }
258
-
259
- async function writePatch(iter: number, patchContent: string): Promise<string> {
260
- const id = `iter-${String(iter).padStart(3, '0')}`;
261
- const dir = path.join(REPO, 'staging', 'auto-evolve', id);
262
- await fs.mkdir(dir, { recursive: true });
263
- await fs.writeFile(path.join(dir, `${id}.patch`), patchContent, 'utf-8');
264
- await fs.writeFile(path.join(dir, '.patch-id'), id, 'utf-8');
265
- return id;
266
- }
267
-
268
- async function runReviewer(patchId: string): Promise<{ verdict: 'PASS' | 'FAIL'; concerns: string[] }> {
269
- try {
270
- await pExec('bash', [path.join(REPO, 'scripts/detect-schema-changes.sh'), patchId], { cwd: REPO });
271
- await pExec('npx', ['tsx', 'scripts/diff-reviewer.ts', patchId, '--model', 'claude-sonnet-4-6'], { cwd: REPO });
272
- const verdictFile = path.join(REPO, 'staging', 'auto-evolve', patchId, '.review-verdict');
273
- const json = JSON.parse(await fs.readFile(verdictFile, 'utf-8'));
274
- return { verdict: json.verdict, concerns: json.concerns || [] };
275
- } catch (err: any) {
276
- return { verdict: 'FAIL', concerns: [err.message?.slice(0, 200) || 'reviewer crashed'] };
277
- }
278
- }
279
-
280
- async function commitPatch(patchId: string): Promise<boolean> {
281
- try {
282
- const patchFile = path.join(REPO, 'staging', 'auto-evolve', patchId, `${patchId}.patch`);
283
-
284
- // patch 末尾补 newline (LLM 输出可能无)
285
- let patchContent = await fs.readFile(patchFile, 'utf-8');
286
- if (!patchContent.endsWith('\n')) patchContent += '\n';
287
- await fs.writeFile(patchFile, patchContent, 'utf-8');
288
-
289
- // --whitespace=fix 容错, --recount 重算行号
290
- await pExec('git', ['apply', '--recount', '--whitespace=fix', patchFile], { cwd: REPO });
291
- const { stdout } = await pExec('git', ['status', '--porcelain'], { cwd: REPO });
292
- const files = stdout.trim().split('\n').filter(Boolean).map((l) => l.split(/\s+/).slice(1).join(' '));
293
- for (const f of files) {
294
- try {
295
- await pExec('git', ['add', f], { cwd: REPO });
296
- } catch { /* binary or removed */ }
297
- }
298
- await pExec('git', ['commit', '-m', `auto-evolve: ${patchId} (LLM 修复)`], { cwd: REPO });
299
-
300
- // P2P Hook 2: 广播 commit-intent (供对方智能体做轻量审计 / 触发 push)
301
- if (broadcaster) {
302
- try {
303
- const { stdout: shaOut } = await pExec('git', ['rev-parse', '--short', 'HEAD'], { cwd: REPO });
304
- const sha = shaOut.trim();
305
- for (const f of files) {
306
- // 简化: 整文件视为 [1, 99999], diffHash 用 patchId
307
- await broadcaster.broadcastCommitIntent({
308
- taskId: patchId,
309
- file: f,
310
- lines: [1, 99999],
311
- sha,
312
- diffHash: patchId.slice(0, 16),
313
- });
314
- }
315
- console.log(`[p2p] commit-intent 广播: ${files.length} 个文件, sha=${sha}`);
316
- } catch (err: any) {
317
- console.warn(`[p2p] commit-intent 广播失败: ${err.message?.slice(0, 100)}`);
318
- }
319
- }
320
-
321
- return true;
322
- } catch (err: any) {
323
- console.error(`[loop] commit 失败: ${err.message?.slice(0, 200)}`);
324
- return false;
325
- }
326
- }
327
-
328
- async function rollback(baseline: string): Promise<void> {
329
- console.log(`[loop] ⚠️ 自动回滚到 ${baseline}`);
330
- await pExec('git', ['reset', '--hard', baseline], { cwd: REPO });
331
- }
332
-
333
- async function notify(msg: string): Promise<void> {
334
- const f = path.join(REPO, '.auto-evolve-notify');
335
- const line = `[${new Date().toISOString()}] ${msg}\n`;
336
- await fs.appendFile(f, line, 'utf-8');
337
- console.log(`[notify] ${msg}`);
338
- }
339
-
340
- async function main() {
341
- const args = process.argv.slice(2);
342
- let maxIter = 10;
343
- let targetFile: string | undefined;
344
- for (let i = 0; i < args.length; i++) {
345
- if (args[i] === '--max-iter' && args[i + 1]) maxIter = parseInt(args[++i], 10);
346
- if (args[i] === '--target' && args[i + 1]) targetFile = args[++i];
347
- }
348
-
349
- // P2P Hook 1: 启动 broadcaster (失败不阻塞 loop)
350
- await initBroadcaster();
351
-
352
- // 必须先有 baseline
353
- if (!(await fs.stat('.last-auto-evolve-baseline').catch(() => null))) {
354
- console.log('[loop] 没 baseline, 先打一个');
355
- await pExec('bash', ['scripts/auto-evolve-snapshot.sh', 'snapshot'], { cwd: REPO });
356
- }
357
- const baseline = (await fs.readFile('.last-auto-evolve-baseline', 'utf-8')).trim();
358
- console.log(`[loop] baseline: ${baseline}, max-iter: ${maxIter}`);
359
-
360
- let consecutiveFails = 0;
361
- for (let iter = 1; iter <= maxIter; iter++) {
362
- console.log(`\n========== iter ${iter}/${maxIter} ==========`);
363
-
364
- // 1. 跑 vitest
365
- const result = await runVitest(targetFile);
366
- console.log(`[vitest] passed=${result.passed} failed=${result.failed}`);
367
-
368
- if (result.failed === 0) {
369
- console.log('[loop] ✅ 全部测试通过, 退出');
370
- return;
371
- }
372
-
373
- // 2. 让 LLM 修
374
- const failSummary = result.failingTests
375
- .slice(0, 3)
376
- .map((f) => `FILE: ${f.file}\nTEST: ${f.name}\nERROR: ${f.message}`)
377
- .join('\n---\n');
378
- const firstTest = result.failingTests[0]?.file || '';
379
- const testCtx = await getSourceContext(firstTest);
380
- const srcCtx = await getImportedSource(firstTest);
381
- const sourceCtx = `=== TEST FILE ===\n${testCtx}\n\n=== SRC FILE (imported) ===\n${srcCtx}`;
382
- const prompt = FIX_PROMPT
383
- .replace('{{FAIL}}', failSummary)
384
- .replace('{{SOURCE}}', sourceCtx);
385
-
386
- console.log('[loop] 调 LLM 修...');
387
-
388
- // P2P Hook 3: best-effort reserve 我方即将改的文件 (行级粒度, 整文件 [1, 99999])
389
- // 失败/冲突 → 仅 log, 不阻塞 loop (LLM 已经能从 systemPrepend 看到 liveReserves)
390
- if (broadcaster) {
391
- const filesToReserve = [firstTest, ...(srcCtx.match(/^=== SRC FILE \(imported\) ===\s*\n([^\n]+)$/m)?.[1] ? [srcCtx.match(/^=== SRC FILE \(imported\) ===\s*\n([^\n]+)$/m)![1]] : [])]
392
- .map(p => p.replace(REPO + '/', ''))
393
- .filter((p, i, a) => p && a.indexOf(p) === i);
394
- for (const f of filesToReserve) {
395
- if (!f || f === 'unknown') continue;
396
- try {
397
- const r = await broadcaster.reserve({ taskId: patchId || `iter-${iter}`, file: f, lines: [1, 99999] });
398
- if (r.ok) {
399
- console.log(`[p2p] reserve OK: ${f}`);
400
- } else {
401
- console.log(`[p2p] reserve 冲突: ${f} 已被 ${r.existing.agent} 占用, LLM 会避开`);
402
- }
403
- } catch (err: any) {
404
- console.warn(`[p2p] reserve 失败 (继续): ${err.message?.slice(0, 80)}`);
405
- }
406
- }
407
- }
408
-
409
- const llmOut = await callLLM(prompt);
410
- const diff = extractDiff(llmOut);
411
- if (!diff) {
412
- console.log('[loop] LLM 没返回有效 diff');
413
- console.log('--- LLM 原始输出 (前 800) ---');
414
- console.log(llmOut.slice(0, 800));
415
- console.log('---');
416
- consecutiveFails++;
417
- if (consecutiveFails >= 3) {
418
- await notify(`连续 3 次 LLM 无 diff, 自动回滚 ${baseline}`);
419
- await rollback(baseline);
420
- return;
421
- }
422
- continue;
423
- }
424
-
425
- // 3. 写 staging
426
- const patchId = await writePatch(iter, diff);
427
- console.log(`[loop] 写到 ${patchId}`);
428
-
429
- // 4. 跑 reviewer
430
- const review = await runReviewer(patchId);
431
- console.log(`[reviewer] verdict=${review.verdict} concerns=${review.concerns.length}`);
432
- if (review.concerns.length > 0) {
433
- for (const c of review.concerns) console.log(` - ${c}`);
434
- }
435
-
436
- if (review.verdict === 'FAIL') {
437
- consecutiveFails++;
438
- if (consecutiveFails >= 3) {
439
- await notify(`连续 3 次 reviewer FAIL, 自动回滚 ${baseline}`);
440
- await rollback(baseline);
441
- return;
442
- }
443
- continue;
444
- }
445
-
446
- // 5. 提交
447
- const committed = await commitPatch(patchId);
448
- if (!committed) {
449
- console.log('[loop] commit 失败 (apply 或 lefthook 拦), 算 fail');
450
- consecutiveFails++;
451
- // commit 失败时只清 staged + 回滚 working tree (tracked), 不删 untracked 新文件
452
- try {
453
- await pExec('git', ['reset'], { cwd: REPO });
454
- await pExec('git', ['checkout', '--', '.'], { cwd: REPO });
455
- } catch { /* 忽略 */ }
456
- continue;
457
- }
458
-
459
- // 6. 跑 vitest 看 commit 后是否真过
460
- const after = await runVitest(targetFile);
461
- console.log(`[vitest after] passed=${after.passed} failed=${after.failed}`);
462
- if (after.failed < result.failed) {
463
- console.log(`[loop] 进步: ${result.failed} → ${after.failed} fail`);
464
- consecutiveFails = 0;
465
- } else {
466
- console.log(`[loop] 没进步, revert 这次 commit`);
467
- await pExec('git', ['reset', '--hard', 'HEAD~1'], { cwd: REPO });
468
- consecutiveFails++;
469
- }
470
-
471
- if (consecutiveFails >= 3) {
472
- await notify(`连续 3 次无进步, 自动回滚 ${baseline}`);
473
- await rollback(baseline);
474
- return;
475
- }
476
- }
477
-
478
- console.log(`[loop] 达到 max-iter=${maxIter}, 退出`);
479
- }
480
-
481
- main().catch((e) => { console.error('[loop] fatal:', e); process.exit(1); });
@@ -1,155 +0,0 @@
1
- #!/bin/bash
2
- # auto-evolve-oneshot.sh — 阶段 D 单次修复 (shell 版)
3
- #
4
- # 流程 (全本地, 用 MINIMAX_API_KEY 调 LLM):
5
- # 1. 跑 vitest, 抓 fail
6
- # 2. 让 LLM 修
7
- # 3. 解析 LLM 输出的 diff, 写到 staging
8
- # 4. 跑 reviewer (护栏 4)
9
- # 5. PASS → git apply + commit (护栏 1 拦)
10
-
11
- set -uo pipefail # 不加 -e: vitest 失败要继续
12
-
13
- REPO="$(cd "$(dirname "$0")/.." && pwd)"
14
- cd "$REPO"
15
-
16
- echo "[oneshot] REPO=$REPO"
17
-
18
- # 1. 跑 vitest
19
- npx vitest run --reporter=json --no-color 2>/dev/null > /tmp/vt-out.json
20
- TOTAL_FAIL=$(python3 -c "
21
- import json
22
- d = json.load(open('/tmp/vt-out.json'))
23
- print(sum(1 for f in d.get('testResults',[]) for a in f.get('assertionResults',[]) if a.get('status')=='failed'))
24
- ")
25
- echo "[oneshot] vitest failed=$TOTAL_FAIL"
26
-
27
- if [ "$TOTAL_FAIL" = "0" ]; then
28
- echo "[oneshot] ✅ 全部通过, 不需要修"
29
- exit 0
30
- fi
31
-
32
- # 2. 抽 fail 信息
33
- FAIL_SUMMARY=$(python3 -c "
34
- import json
35
- d = json.load(open('/tmp/vt-out.json'))
36
- for f in d.get('testResults', []):
37
- for a in f.get('assertionResults', []):
38
- if a.get('status') == 'failed':
39
- print('FILE:', f.get('name'))
40
- print('TEST:', a.get('fullName') or a.get('title'))
41
- print('ERROR:')
42
- for m in a.get('failureMessages', [])[:2]:
43
- print(m[:600])
44
- print('---')
45
- " | head -60)
46
- echo "[oneshot] 2. 调 LLM 修..."
47
-
48
- # 3. 用 LLM 生成修复
49
- # prompt: 要 LLM 输出 ```diff ... ``` 块
50
- # 3. 写 prompt 到文件 (避免 shell 反引号冲突)
51
- PROMPT_FILE="/tmp/oneshot-prompt.txt"
52
- cat > "$PROMPT_FILE" <<PROMPT_EOF
53
- 你是一个谨慎的代码修复助手. 你的工作是修复失败的测试.
54
-
55
- 约束: 改动最小, 不改测试, 不引入 any/unknown/@ts-ignore.
56
-
57
- 输出格式: 严格只输出一个 \`\`\`diff ... \`\`\` 块, 第一个字符 \`\`\`diff, 最后一个字符 \`\`\`. 中间是 unified diff (--- a/path +++ b/path 风格). 不要在 diff 块外输出任何文字.
58
-
59
- FAIL 信息:
60
- $(cat /tmp/vt-out.json | python3 -c "
61
- import json
62
- d = json.load(open('/tmp/vt-out.json'))
63
- for f in d.get('testResults', []):
64
- for a in f.get('assertionResults', []):
65
- if a.get('status') == 'failed':
66
- print('FILE:', f.get('name'))
67
- print('TEST:', a.get('fullName') or a.get('title'))
68
- print('ERROR:')
69
- for m in a.get('failureMessages', [])[:2]:
70
- print(m[:600])
71
- print('---')
72
- " | head -60)
73
-
74
- 请**只**输出 diff 块:
75
- PROMPT_EOF
76
-
77
- LLM_OUTPUT=$(npx tsx -r dotenv/config -e "
78
- import { initMinimax } from './src/llm/pi-ai.js';
79
- import * as fs from 'fs';
80
- const prompt = fs.readFileSync('$PROMPT_FILE', 'utf-8');
81
- const client = initMinimax();
82
- const text = await client.generateText({ messages: [{ role: 'user', content: prompt }], maxTokens: 4096, temperature: 0.2 });
83
- process.stdout.write(text || '');
84
- " 2>/tmp/llm-err.log)
85
-
86
- if [ -z "$LLM_OUTPUT" ]; then
87
- echo "[oneshot] ❌ LLM 没返回"
88
- exit 2
89
- fi
90
-
91
- # 4. 解析 diff
92
- DIFF=$(echo "$LLM_OUTPUT" | python3 -c "
93
- import sys, re
94
- text = sys.stdin.read()
95
- m = re.search(r'\`\`\`diff\s*([\s\S]*?)\`\`\`', text)
96
- if m:
97
- diff = m.group(1).strip()
98
- if not diff.endswith('\n'):
99
- diff += '\n'
100
- print(diff)
101
- else:
102
- sys.exit(1)
103
- " 2>/dev/null) || {
104
- echo "[oneshot] ❌ LLM 输出没 diff 块"
105
- echo "--- LLM 原始输出 (前 800) ---"
106
- echo "$LLM_OUTPUT" | head -c 800
107
- echo ""
108
- exit 3
109
- }
110
-
111
- echo "[oneshot] 拿到 diff: $(echo "$DIFF" | wc -l) lines"
112
-
113
- # 5. 写 staging
114
- ID="oneshot-$(date +%s)"
115
- mkdir -p "staging/auto-evolve/$ID"
116
- echo "$DIFF" > "staging/auto-evolve/$ID/$ID.patch"
117
- echo "$ID" > "staging/auto-evolve/$ID/.patch-id"
118
- echo "[oneshot] patch 写到 staging/auto-evolve/$ID/"
119
-
120
- # 6. 跑 reviewer
121
- echo "[oneshot] 3. 跑 reviewer..."
122
- npx tsx -r dotenv/config scripts/diff-reviewer.ts "$ID" > /tmp/reviewer.log 2>&1 || true
123
- VERDICT=$(python3 -c "
124
- import json
125
- try:
126
- print(json.load(open('staging/auto-evolve/$ID/.review-verdict')).get('verdict','UNKNOWN'))
127
- except:
128
- print('UNKNOWN')
129
- ")
130
- echo "[oneshot] reviewer verdict: $VERDICT"
131
-
132
- # 7. apply + commit
133
- if [ "$VERDICT" = "PASS" ]; then
134
- echo "[oneshot] 4. apply + commit"
135
- if git apply --recount --whitespace=fix "staging/auto-evolve/$ID/$ID.patch" 2>/tmp/apply.err; then
136
- git add -A
137
- git commit -m "auto-evolve: $ID (LLM 修复)"
138
- echo "[oneshot] ✅ 提交成功"
139
- # 验证
140
- npx vitest run --reporter=json --no-color 2>/dev/null > /tmp/vt-after.json
141
- AFTER_FAIL=$(python3 -c "
142
- import json
143
- print(sum(1 for f in json.load(open('/tmp/vt-after.json')).get('testResults',[]) for a in f.get('assertionResults',[]) if a.get('status')=='failed'))
144
- ")
145
- echo "[oneshot] 修复后 fail: $AFTER_FAIL (之前 $TOTAL_FAIL)"
146
- else
147
- echo "[oneshot] ❌ git apply 失败:"
148
- cat /tmp/apply.err
149
- exit 4
150
- fi
151
- else
152
- echo "[oneshot] ❌ reviewer verdict=$VERDICT, 不 apply"
153
- cat /tmp/reviewer.log | head -10
154
- exit 5
155
- fi