@bolloon/bolloon-agent 0.1.36 → 0.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (518) hide show
  1. package/package.json +2 -2
  2. package/.auto-evolve-calls +0 -1
  3. package/.last-auto-evolve-baseline +0 -1
  4. package/.playwright-mcp/page-2026-06-16T07-51-45-706Z.yml +0 -130
  5. package/.playwright-mcp/page-2026-06-16T07-56-44-116Z.yml +0 -131
  6. package/Bolloon.md +0 -144
  7. package/Dive-into/CITATION.cff +0 -17
  8. package/Dive-into/LICENSE +0 -25
  9. package/Dive-into/README.md +0 -598
  10. package/Dive-into/README_zh.md +0 -599
  11. package/Dive-into/assets/context.png +0 -0
  12. package/Dive-into/assets/extensibility.png +0 -0
  13. package/Dive-into/assets/iteration.png +0 -0
  14. package/Dive-into/assets/layered_architecture.png +0 -0
  15. package/Dive-into/assets/main_structure.png +0 -0
  16. package/Dive-into/assets/permission.png +0 -0
  17. package/Dive-into/assets/session_compact.png +0 -0
  18. package/Dive-into/assets/subagent.png +0 -0
  19. package/Dive-into/paper/Dive_into_Claude_Code.pdf +0 -0
  20. package/dist/agents/constraint-layer.js.map +0 -1
  21. package/dist/agents/pi-sdk.js.map +0 -1
  22. package/dist/agents/workflow-engine.js.map +0 -1
  23. package/dist/bollharness/src/index.js +0 -5
  24. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  25. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  26. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  27. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  28. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  29. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  30. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  31. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  32. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  33. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  34. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  35. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  36. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  37. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  38. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  39. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  40. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  41. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  42. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  43. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  44. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  45. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  46. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  47. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  48. package/dist/bollharness/src/scripts/context_router.js +0 -67
  49. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  50. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  51. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  52. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  53. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  54. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  55. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  56. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  57. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  58. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  59. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  60. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  61. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  62. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  63. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  64. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  65. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  66. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  67. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  68. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  69. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  70. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  71. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  72. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  73. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  74. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  75. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  76. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  77. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  78. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  79. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  80. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  81. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  82. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  83. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  84. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  85. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  86. package/dist/bollharness-integration/context-router.js.map +0 -1
  87. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  88. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  89. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  90. package/dist/bollharness-integration/index.js.map +0 -1
  91. package/dist/bollharness-integration/integration.js.map +0 -1
  92. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  93. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  94. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  95. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  96. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  97. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  98. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  99. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  100. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  101. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  102. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  103. package/dist/constraint-runtime/src/agent/index.js +0 -1
  104. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  105. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  106. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  107. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  108. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  109. package/dist/constraint-runtime/src/cli/index.js +0 -12
  110. package/dist/constraint-runtime/src/command_graph.js +0 -10
  111. package/dist/constraint-runtime/src/commands.js +0 -60
  112. package/dist/constraint-runtime/src/components/index.js +0 -12
  113. package/dist/constraint-runtime/src/constants/index.js +0 -12
  114. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  115. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  116. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  117. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  118. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  119. package/dist/constraint-runtime/src/context.js +0 -30
  120. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  121. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  122. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  123. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  124. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  125. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  126. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  127. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  128. package/dist/constraint-runtime/src/history.js +0 -9
  129. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  130. package/dist/constraint-runtime/src/index.js +0 -26
  131. package/dist/constraint-runtime/src/ink.js +0 -4
  132. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  133. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  134. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  135. package/dist/constraint-runtime/src/models.js +0 -1
  136. package/dist/constraint-runtime/src/models.js.map +0 -1
  137. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  138. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  139. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  140. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  141. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  142. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  143. package/dist/constraint-runtime/src/prefetch.js +0 -9
  144. package/dist/constraint-runtime/src/query.js +0 -1
  145. package/dist/constraint-runtime/src/remote/index.js +0 -12
  146. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  147. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  148. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  149. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  150. package/dist/constraint-runtime/src/screens/index.js +0 -12
  151. package/dist/constraint-runtime/src/server/index.js +0 -12
  152. package/dist/constraint-runtime/src/services/index.js +0 -12
  153. package/dist/constraint-runtime/src/session_store.js +0 -22
  154. package/dist/constraint-runtime/src/setup.js +0 -30
  155. package/dist/constraint-runtime/src/skills/index.js +0 -1
  156. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  157. package/dist/constraint-runtime/src/state/index.js +0 -12
  158. package/dist/constraint-runtime/src/system_init.js +0 -20
  159. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  160. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  161. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  162. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  163. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  164. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  165. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  166. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  167. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  168. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  169. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  170. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  171. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  172. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  173. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  174. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  175. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  176. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  177. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  178. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  179. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  180. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  181. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  182. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  183. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  184. package/dist/constraint-runtime/src/tools.js +0 -80
  185. package/dist/constraint-runtime/src/transcript.js +0 -19
  186. package/dist/constraint-runtime/src/types/index.js +0 -12
  187. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  188. package/dist/constraint-runtime/src/utils/index.js +0 -12
  189. package/dist/constraint-runtime/src/vim/index.js +0 -12
  190. package/dist/constraint-runtime/src/voice/index.js +0 -12
  191. package/dist/constraints/index.js.map +0 -1
  192. package/dist/documents/reader.js.map +0 -1
  193. package/dist/llm/config-store.js.map +0 -1
  194. package/dist/llm/pi-ai.js.map +0 -1
  195. package/dist/network/agent-network.js.map +0 -1
  196. package/dist/network/iroh-integration.js.map +0 -1
  197. package/dist/network/iroh-transport.js.map +0 -1
  198. package/dist/network/p2p.js.map +0 -1
  199. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  200. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  201. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  202. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  203. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  204. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  205. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  206. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  207. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  208. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  209. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  210. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  211. package/dist/social/ant-colony/types.js.map +0 -1
  212. package/dist/social/channels/ChannelManager.js.map +0 -1
  213. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  214. package/dist/social/channels/InterestMatcher.js.map +0 -1
  215. package/dist/social/channels/types.js.map +0 -1
  216. package/dist/social/global-shared-context.js.map +0 -1
  217. package/dist/social/heartbeat.js.map +0 -1
  218. package/lefthook.yml +0 -33
  219. package/scripts/auto-evolve-loop.ts +0 -481
  220. package/scripts/build-web.ts +0 -116
  221. package/scripts/diff-reviewer.ts +0 -159
  222. package/scripts/validate-system-prompt.ts +0 -142
  223. package/scripts/weekly-report.ts +0 -364
  224. package/src/agents/agent-manifest-protocol.ts +0 -117
  225. package/src/agents/constraint-layer.ts +0 -309
  226. package/src/agents/iroh-secret.ts +0 -32
  227. package/src/agents/p2p-chat-tools.ts +0 -383
  228. package/src/agents/p2p-document-tools.ts +0 -347
  229. package/src/agents/permission-mode.ts +0 -127
  230. package/src/agents/pi-sdk.ts +0 -2895
  231. package/src/agents/pre-tool-validator.ts +0 -213
  232. package/src/agents/protocol.ts +0 -398
  233. package/src/agents/shell-guard.ts +0 -417
  234. package/src/agents/shell-tool.ts +0 -103
  235. package/src/agents/skill-loader.ts +0 -202
  236. package/src/agents/subagent-manager.ts +0 -553
  237. package/src/agents/workflow-engine.ts +0 -332
  238. package/src/agents/workflow-pivot-loop.ts +0 -766
  239. package/src/bollharness/.sanitize-report.json +0 -13
  240. package/src/bollharness/CLAUDE.md +0 -73
  241. package/src/bollharness/LICENSE +0 -21
  242. package/src/bollharness/README.md +0 -143
  243. package/src/bollharness/README.zh-CN.md +0 -131
  244. package/src/bollharness/package.json +0 -20
  245. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  246. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  247. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  248. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  249. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  250. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  251. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  252. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  253. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  254. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  255. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  256. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  257. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  258. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  259. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  260. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  261. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  262. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  263. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  264. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  265. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  266. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  267. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  268. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  269. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  270. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  271. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  272. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  273. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  274. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  275. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  276. package/src/bollharness/src/index.ts +0 -5
  277. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  278. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  279. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  280. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  281. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  282. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  283. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  284. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  285. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  286. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  287. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  288. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  289. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  290. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  291. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  292. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  293. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  294. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  295. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  296. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  297. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  298. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  299. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  300. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  301. package/src/bollharness/src/scripts/context_router.ts +0 -76
  302. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  303. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  304. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  305. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  306. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  307. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  308. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  309. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  310. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  311. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  312. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  313. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  314. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  315. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  316. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  317. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  318. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  319. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  320. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  321. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  322. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  323. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  324. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  325. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  326. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  327. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  328. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  329. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  330. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  331. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  332. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  333. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  334. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  335. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  336. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  337. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  338. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  339. package/src/bollharness/templates/persona/default.json +0 -19
  340. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  341. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  342. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  343. package/src/bollharness-integration/context-chain-router.ts +0 -474
  344. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  345. package/src/bollharness-integration/context-router.ts +0 -583
  346. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  347. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  348. package/src/bollharness-integration/guard-checker.ts +0 -451
  349. package/src/bollharness-integration/index.ts +0 -195
  350. package/src/bollharness-integration/integration.ts +0 -538
  351. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  352. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  353. package/src/bollharness-integration/skill-adapter.ts +0 -646
  354. package/src/bootstrap/bootstrap.ts +0 -135
  355. package/src/bootstrap/context-collector.ts +0 -371
  356. package/src/bootstrap/context-hierarchy.ts +0 -283
  357. package/src/bootstrap/lifecycle-hooks.ts +0 -289
  358. package/src/bootstrap/project-context.ts +0 -171
  359. package/src/cli/interface.ts +0 -211
  360. package/src/cli-entry.ts +0 -304
  361. package/src/constraints/index.ts +0 -6
  362. package/src/context-compaction/auto-compact.ts +0 -153
  363. package/src/context-compaction/budget-gate.ts +0 -32
  364. package/src/context-compaction/budget-reduce.ts +0 -37
  365. package/src/context-compaction/context-collapse.ts +0 -72
  366. package/src/context-compaction/index.ts +0 -24
  367. package/src/context-compaction/microcompact.ts +0 -54
  368. package/src/context-compaction/pipeline.ts +0 -133
  369. package/src/context-compaction/snip.ts +0 -51
  370. package/src/context-compaction/token-estimator.ts +0 -36
  371. package/src/context-compaction/types.ts +0 -99
  372. package/src/documents/reader.ts +0 -85
  373. package/src/documents/store.ts +0 -252
  374. package/src/electron-preload.ts +0 -25
  375. package/src/electron.ts +0 -200
  376. package/src/heartbeat/DaemonManager.ts +0 -283
  377. package/src/heartbeat/HealthMonitor.ts +0 -317
  378. package/src/heartbeat/StartupVerifier.ts +0 -223
  379. package/src/heartbeat/Watchdog.ts +0 -208
  380. package/src/heartbeat/index.ts +0 -109
  381. package/src/heartbeat/self-improve-bus.ts +0 -110
  382. package/src/heartbeat/types.ts +0 -82
  383. package/src/index.ts +0 -1724
  384. package/src/llm/audio-config-store.ts +0 -246
  385. package/src/llm/config-store.ts +0 -400
  386. package/src/llm/llm-judgment-client.ts +0 -471
  387. package/src/llm/pi-ai.ts +0 -653
  388. package/src/llm/system-prompt/health.ts +0 -159
  389. package/src/llm/system-prompt/layers/channel/local.md +0 -14
  390. package/src/llm/system-prompt/layers/channel/p2p-agent.md +0 -18
  391. package/src/llm/system-prompt/layers/channel/p2p-visitor.md +0 -19
  392. package/src/llm/system-prompt/layers/core/artifacts_storage.md +0 -89
  393. package/src/llm/system-prompt/layers/core/evenhandedness.md +0 -21
  394. package/src/llm/system-prompt/layers/core/hibs_reminders.md +0 -15
  395. package/src/llm/system-prompt/layers/core/identity.md +0 -37
  396. package/src/llm/system-prompt/layers/core/knowledge.md +0 -17
  397. package/src/llm/system-prompt/layers/core/memory_system.md +0 -12
  398. package/src/llm/system-prompt/layers/core/network_filesystem.md +0 -28
  399. package/src/llm/system-prompt/layers/core/refusal.md +0 -37
  400. package/src/llm/system-prompt/layers/core/tone.md +0 -31
  401. package/src/llm/system-prompt/layers/core/tools.thin.md +0 -13
  402. package/src/llm/system-prompt/layers/core/wellbeing.md +0 -41
  403. package/src/llm/system-prompt/layers/role/architect.md +0 -20
  404. package/src/llm/system-prompt/layers/role/expert.md +0 -19
  405. package/src/llm/system-prompt/layers/role/implementer.md +0 -15
  406. package/src/llm/system-prompt/layers/role/security.md +0 -15
  407. package/src/llm/system-prompt/layers/tool/artifacts.md +0 -72
  408. package/src/llm/system-prompt/layers/tool/bash.md +0 -25
  409. package/src/llm/system-prompt/layers/tool/hibs_api.md +0 -171
  410. package/src/llm/system-prompt/layers/tool/image_search.md +0 -70
  411. package/src/llm/system-prompt/layers/tool/manifest.md +0 -89
  412. package/src/llm/system-prompt/layers/tool/mcp_apps.md +0 -53
  413. package/src/llm/system-prompt/layers/tool/web_search.md +0 -83
  414. package/src/llm/system-prompt/registry.ts +0 -325
  415. package/src/llm/system-prompt/strip-hibsml.ts +0 -52
  416. package/src/llm/tool-manifest/ask_user_input.ts +0 -37
  417. package/src/llm/tool-manifest/bash.ts +0 -25
  418. package/src/llm/tool-manifest/create_file.ts +0 -26
  419. package/src/llm/tool-manifest/fetch_sports_data.ts +0 -28
  420. package/src/llm/tool-manifest/image_search.ts +0 -26
  421. package/src/llm/tool-manifest/index.ts +0 -88
  422. package/src/llm/tool-manifest/mcp.ts +0 -46
  423. package/src/llm/tool-manifest/message_compose.ts +0 -33
  424. package/src/llm/tool-manifest/places.ts +0 -86
  425. package/src/llm/tool-manifest/present_files.ts +0 -23
  426. package/src/llm/tool-manifest/recipe.ts +0 -42
  427. package/src/llm/tool-manifest/recommend_apps.ts +0 -25
  428. package/src/llm/tool-manifest/str_replace.ts +0 -29
  429. package/src/llm/tool-manifest/types.ts +0 -52
  430. package/src/llm/tool-manifest/view.ts +0 -26
  431. package/src/llm/tool-manifest/weather.ts +0 -29
  432. package/src/llm/tool-manifest/web.ts +0 -54
  433. package/src/llm/video-config-store.ts +0 -257
  434. package/src/network/agent-network.ts +0 -800
  435. package/src/network/hybrid-messenger.ts +0 -199
  436. package/src/network/iroh-bootstrap.ts +0 -57
  437. package/src/network/iroh-discovery.ts +0 -208
  438. package/src/network/iroh-integration.ts +0 -158
  439. package/src/network/iroh-transport.ts +0 -637
  440. package/src/network/known-peers.ts +0 -102
  441. package/src/network/p2p-direct.ts +0 -262
  442. package/src/network/p2p-secret.ts +0 -153
  443. package/src/network/p2p.ts +0 -964
  444. package/src/network/source-intent-broadcaster.ts +0 -242
  445. package/src/network/source-intent.ts +0 -167
  446. package/src/network/storage/adapters/json-adapter.ts +0 -454
  447. package/src/network/storage/index.ts +0 -203
  448. package/src/network/storage/types.ts +0 -166
  449. package/src/security/builtin-guards.ts +0 -162
  450. package/src/security/context-router-tool.ts +0 -122
  451. package/src/security/input-scanner.ts +0 -287
  452. package/src/security/react-harness.ts +0 -177
  453. package/src/security/tool-gate.ts +0 -294
  454. package/src/social/ant-colony/index.js +0 -19
  455. package/src/social/channels/ChannelManager.ts +0 -485
  456. package/src/social/channels/DiapChannelBridge.ts +0 -501
  457. package/src/social/channels/InterestMatcher.ts +0 -189
  458. package/src/social/channels/agent-workflow-config.json +0 -214
  459. package/src/social/channels/agent-workflow-config.yaml +0 -334
  460. package/src/social/channels/channel-agent-session.ts +0 -407
  461. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  462. package/src/social/channels/diap-doc-parser.ts +0 -282
  463. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  464. package/src/social/channels/index.ts +0 -22
  465. package/src/social/channels/types.ts +0 -115
  466. package/src/social/global-shared-context.ts +0 -506
  467. package/src/social/heartbeat.ts +0 -1057
  468. package/src/social/persona/enhanced-persona.ts +0 -359
  469. package/src/types.d.ts +0 -12
  470. package/src/utils/auto-evolve-policy.ts +0 -138
  471. package/src/utils/auto-update.ts +0 -482
  472. package/src/utils/clamp.ts +0 -5
  473. package/src/web/agent-delegate-server.ts +0 -148
  474. package/src/web/api-config.html +0 -520
  475. package/src/web/client.js +0 -2352
  476. package/src/web/client.ts +0 -4326
  477. package/src/web/components/p2p/P2PModal.tsx +0 -416
  478. package/src/web/components/p2p/index.ts +0 -566
  479. package/src/web/components/p2p/index.tsx +0 -297
  480. package/src/web/components/p2p/p2p-connection.ts +0 -338
  481. package/src/web/components/p2p/p2p-identity.ts +0 -92
  482. package/src/web/components/p2p/p2p-manager.ts +0 -147
  483. package/src/web/components/p2p/p2p-messages.ts +0 -219
  484. package/src/web/components/p2p/p2p-modal.ts +0 -685
  485. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  486. package/src/web/components/p2p/p2p-tools.ts +0 -315
  487. package/src/web/components/p2p/types.ts +0 -170
  488. package/src/web/components/wallet-viem.mjs +0 -118
  489. package/src/web/design.md +0 -99
  490. package/src/web/icons/apple-touch-icon.png +0 -0
  491. package/src/web/icons/favicon-16x16.png +0 -0
  492. package/src/web/icons/favicon-192x192.png +0 -0
  493. package/src/web/icons/favicon-32x32.png +0 -0
  494. package/src/web/icons/favicon-48x48.png +0 -0
  495. package/src/web/icons/favicon-512x512.png +0 -0
  496. package/src/web/icons/favicon.icns +0 -0
  497. package/src/web/icons/favicon.ico +0 -0
  498. package/src/web/icons/icon.png +0 -0
  499. package/src/web/icons/image.png +0 -0
  500. package/src/web/index.html +0 -373
  501. package/src/web/iroh-delegate-transport.ts +0 -139
  502. package/src/web/manifest.json +0 -21
  503. package/src/web/server.ts +0 -5731
  504. package/src/web/style.css +0 -4737
  505. package/src/web/ui/message-renderer.ts +0 -540
  506. package/src/web/ui/step-timeline.ts +0 -394
  507. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  508. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  509. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  510. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  511. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  512. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  513. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  514. package/test-results/.last-run.json +0 -6
  515. package/test-results/src-test-web-loop-status-b-5734c-atus-bar-/346/230/276/347/244/272-spinner-/344/270/215/346/230/276/347/244/272/345/276/252/347/216/257/350/256/241/346/225/260/error-context.md +0 -285
  516. package/tsconfig.cli.json +0 -16
  517. package/tsconfig.electron.json +0 -20
  518. package/tsconfig.json +0 -18
package/src/llm/pi-ai.ts DELETED
@@ -1,653 +0,0 @@
1
- import * as path from 'path';
2
- import * as fs from 'fs';
3
-
4
- export type ModelProvider = 'openai' | 'anthropic' | 'ollama' | 'openrouter' | 'gemini' | 'minimax' | 'deepseek' | 'kimi' | 'glm' | 'qwen' | 'local';
5
-
6
- export interface ModelConfig {
7
- provider: ModelProvider;
8
- apiKey?: string;
9
- baseUrl?: string;
10
- model: string;
11
- }
12
-
13
- export interface ChatMessage {
14
- role: 'system' | 'user' | 'assistant';
15
- content: string;
16
- }
17
-
18
- export interface ChatResult {
19
- reply: string;
20
- }
21
-
22
- export interface SummarizeResult {
23
- summary: string;
24
- qualityScore: number;
25
- }
26
-
27
- export interface GenerateOptions {
28
- messages: ChatMessage[];
29
- temperature?: number;
30
- maxTokens?: number;
31
- signal?: AbortSignal;
32
- /** 工具 id 列表 — 代码侧 (src/llm/tool-manifest/) 查 schema, prompt 里只嵌 oneLine + callExample */
33
- tools?: string[];
34
- }
35
-
36
- /**
37
- * 外部 system 注入钩子.
38
- * 调用方 (e.g. auto-evolve-loop) 用 setSystemPrependProvider() 注册一个返回字符串的函数,
39
- * generateText 在拼 finalMessages 时, 把返回的字符串作为最前一个 system message.
40
- *
41
- * 用途: P2P 协作时把"行级 reserve 状态"实时塞给 LLM,
42
- * 让 LLM 主动避开对方正在改的代码行.
43
- *
44
- * 返回 '' / null / undefined → 不注入.
45
- */
46
- let _prependProvider: (() => string | null | undefined | Promise<string | null | undefined>) | null = null;
47
- export function setSystemPrependProvider(
48
- p: (() => string | null | undefined | Promise<string | null | undefined>) | null
49
- ): void {
50
- _prependProvider = p;
51
- }
52
- export function getSystemPrependProvider(): typeof _prependProvider {
53
- return _prependProvider;
54
- }
55
-
56
- export class PiAIModel {
57
- private config: ModelConfig;
58
- private provider: ModelProvider;
59
-
60
- constructor(config: ModelConfig) {
61
- this.config = config;
62
- this.provider = config.provider;
63
- }
64
-
65
- async chat(message: string, context?: string, signal?: AbortSignal): Promise<ChatResult> {
66
- const systemPrompt = await this.buildSystemPromptAsync(context);
67
- const messages: ChatMessage[] = [
68
- { role: 'system', content: systemPrompt },
69
- { role: 'user', content: message }
70
- ];
71
-
72
- try {
73
- const response = await this.generateText({
74
- messages,
75
- temperature: 0.8,
76
- maxTokens: 8192, // 2026-06-15: 提到 8192, 避免长回答 (含表格/代码块) 被截断
77
- signal,
78
- });
79
- return { reply: response };
80
- } catch (error: any) {
81
- // abort 不当作错误, 透传一个 sentinel 让上层能识别
82
- if (signal?.aborted || error?.name === 'AbortError') {
83
- throw error; // 上层 try/catch 处理
84
- }
85
- console.error('PiAI chat error:', error);
86
- // 2026-06-15: 真实 error 信息 + 明确告诉 LLM "这是 API 错, 不要 retry"
87
- // 旧版: "抱歉,AI服务暂时不可用。" → LLM 看到 isTooShort=false(< 50 但 > 0),
88
- // needsMoreWork 不会触发, 但 hasError 模式 (含 "error" / "失败") 会判定要继续修
89
- // 新版: 让 LLM 立即停止循环, 直接展示给用户
90
- const errMsg = (error?.message || '').slice(0, 300);
91
- return {
92
- reply: `[AI 服务调用失败] ${errMsg}\n\n这是一个**底层 API 错误**(401 / 鉴权失败 / 网络中断 / 配额耗尽等),不是你的任务有问题。**请直接把这个错误消息回复给用户,不要再循环尝试。**`,
93
- };
94
- }
95
- }
96
-
97
- async summarize(text: string, context?: string): Promise<SummarizeResult> {
98
- const prompt = this.buildSummarizePrompt(text, context);
99
-
100
- try {
101
- const response = await this.generateText({
102
- messages: [
103
- { role: 'system', content: 'You are a professional document summarizer.' },
104
- { role: 'user', content: prompt }
105
- ],
106
- temperature: 0.7
107
- });
108
-
109
- const qualityScore = this.estimateQuality(text, response);
110
- return { summary: response, qualityScore };
111
- } catch (error) {
112
- console.error('PiAI summarize error:', error);
113
- return {
114
- summary: text.substring(0, 500) + '...',
115
- qualityScore: 0.5
116
- };
117
- }
118
- }
119
-
120
- async improveContent(content: string, requirements: string, context?: string): Promise<string> {
121
- const prompt = this.buildImprovePrompt(content, requirements, context);
122
-
123
- try {
124
- const response = await this.generateText({
125
- messages: [
126
- { role: 'system', content: 'You are a professional document editor and improver.' },
127
- { role: 'user', content: prompt }
128
- ],
129
- temperature: 0.8
130
- });
131
- return response;
132
- } catch (error) {
133
- console.error('PiAI improve error:', error);
134
- return content;
135
- }
136
- }
137
-
138
- private async generateText(options: GenerateOptions): Promise<string> {
139
- const { messages, temperature = 0.7, maxTokens = 4096, signal, tools } = options;
140
-
141
- // 工具清单: 代码侧 schema → 进 system prompt (作为额外 system message)
142
- let finalMessages = messages;
143
-
144
- // 1) 外部 prepend (e.g. P2P 行级 reserve 状态), 拼到最前
145
- if (_prependProvider) {
146
- try {
147
- const pre = await _prependProvider();
148
- if (pre && typeof pre === 'string' && pre.trim()) {
149
- finalMessages = [{ role: 'system', content: pre }, ...finalMessages];
150
- }
151
- } catch (err: any) {
152
- console.warn('[pi-ai] systemPrepend 失败:', err?.message?.slice(0, 100));
153
- }
154
- }
155
-
156
- if (tools && tools.length > 0) {
157
- try {
158
- const { getToolManifest, formatForPrompt } = await import('./tool-manifest/index.js');
159
- const manifests = tools
160
- .map((id) => getToolManifest(id))
161
- .filter((m): m is NonNullable<typeof m> => m !== undefined);
162
- if (manifests.length > 0) {
163
- const toolPrompt = formatForPrompt(manifests);
164
- finalMessages = [
165
- { role: 'system', content: toolPrompt },
166
- ...messages,
167
- ];
168
- }
169
- } catch (err: any) {
170
- console.warn('[pi-ai] tool-manifest 加载失败:', err.message?.slice(0, 100));
171
- }
172
- }
173
-
174
- switch (this.provider) {
175
- case 'openai':
176
- case 'minimax':
177
- case 'deepseek':
178
- case 'kimi':
179
- case 'glm':
180
- case 'qwen':
181
- return this.callOpenAI(finalMessages, temperature, maxTokens, signal);
182
- case 'anthropic':
183
- return this.callAnthropic(finalMessages, temperature, maxTokens, signal);
184
- case 'ollama':
185
- return this.callOllama(finalMessages, temperature, signal);
186
- case 'openrouter':
187
- return this.callOpenRouter(finalMessages, temperature, maxTokens, signal);
188
- case 'gemini':
189
- return this.callGemini(finalMessages, temperature, maxTokens, signal);
190
- case 'local':
191
- return this.callLocal(finalMessages, temperature, signal);
192
- default:
193
- throw new Error(`Unsupported provider: ${this.provider}`);
194
- }
195
- }
196
-
197
- private getApiKey(): string {
198
- return this.config.apiKey || this.getEnvApiKey();
199
- }
200
-
201
- private getEnvApiKey(): string {
202
- const envVars: Record<ModelProvider, string> = {
203
- openai: process.env.OPENAI_API_KEY || '',
204
- anthropic: process.env.ANTHROPIC_API_KEY || '',
205
- ollama: '',
206
- openrouter: process.env.OPENROUTER_API_KEY || '',
207
- gemini: process.env.GEMINI_API_KEY || '',
208
- minimax: process.env.MINIMAX_API_KEY || '',
209
- deepseek: process.env.DEEPSEEK_API_KEY || '',
210
- kimi: process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY || '',
211
- glm: process.env.GLM_API_KEY || process.env.ZHIPU_API_KEY || '',
212
- qwen: process.env.QWEN_API_KEY || process.env.DASHSCOPE_API_KEY || '',
213
- local: ''
214
- };
215
- return envVars[this.provider] || '';
216
- }
217
-
218
- private getBaseUrl(): string {
219
- if (this.config.baseUrl) {
220
- return this.config.baseUrl;
221
- }
222
-
223
- // 允许通过 OPENAI_BASE_URL 等环境变量覆盖默认 base URL
224
- const baseUrls: Record<ModelProvider, string> = {
225
- openai: process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1',
226
- anthropic: 'https://api.anthropic.com/v1',
227
- ollama: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
228
- openrouter: process.env.OPENROUTER_BASE_URL || 'https://openrouter.ai/api/v1',
229
- gemini: 'https://generativelanguage.googleapis.com/v1beta',
230
- minimax: process.env.MINIMAX_BASE_URL || 'https://api.minimaxi.com/v1',
231
- deepseek: process.env.DEEPSEEK_BASE_URL || 'https://api.deepseek.com/v1',
232
- kimi: process.env.KIMI_BASE_URL || process.env.MOONSHOT_BASE_URL || 'https://api.moonshot.cn/v1',
233
- glm: process.env.GLM_BASE_URL || process.env.ZHIPU_BASE_URL || 'https://open.bigmodel.cn/api/paas/v4',
234
- qwen: process.env.QWEN_BASE_URL || process.env.DASHSCOPE_BASE_URL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
235
- local: 'http://localhost:11434'
236
- };
237
-
238
- return baseUrls[this.provider];
239
- }
240
-
241
- private mapModel(): string {
242
- const modelMap: Record<ModelProvider, string> = {
243
- openai: this.config.model || process.env.OPENAI_MODEL || 'gpt-4',
244
- anthropic: this.config.model || 'claude-3-5-sonnet-20241022',
245
- ollama: this.config.model || 'llama3.2',
246
- openrouter: this.config.model || 'anthropic/claude-3.5-sonnet',
247
- gemini: this.config.model || 'gemini-2.0-flash',
248
- minimax: this.config.model || process.env.MINIMAX_MODEL || 'MiniMax-M3',
249
- deepseek: this.config.model || process.env.DEEPSEEK_MODEL || 'deepseek-chat',
250
- kimi: this.config.model || process.env.KIMI_MODEL || process.env.MOONSHOT_MODEL || 'moonshot-v1-8k',
251
- glm: this.config.model || process.env.GLM_MODEL || process.env.ZHIPU_MODEL || 'glm-4-flash',
252
- qwen: this.config.model || process.env.QWEN_MODEL || process.env.DASHSCOPE_MODEL || 'qwen-plus',
253
- local: this.config.model || 'llama3.2'
254
- };
255
- return modelMap[this.provider];
256
- }
257
-
258
- private async callOpenAI(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
259
- const apiKey = this.getApiKey();
260
- if (!apiKey) {
261
- throw new Error('OPENAI_API_KEY not set');
262
- }
263
-
264
- const requestBody = {
265
- model: this.mapModel(),
266
- messages,
267
- temperature,
268
- max_tokens: maxTokens
269
- };
270
- const response = await fetch(`${this.getBaseUrl()}/chat/completions`, {
271
- method: 'POST',
272
- headers: {
273
- 'Content-Type': 'application/json',
274
- 'Authorization': `Bearer ${apiKey}`
275
- },
276
- body: JSON.stringify(requestBody),
277
- // 2026-06-15: signal 字段防御 — Node 22+ undici 强类型 AbortSignal, 非 AbortSignal 实例
278
- // (e.g. 误传的 { maxTokens: 1 } 对象) 会 throw "Expected signal to be AbortSignal".
279
- // 若不是 AbortSignal, 退到无 signal 调用, fetch 自然支持 timeout 由外层控制.
280
- signal: signal instanceof AbortSignal ? signal : undefined,
281
- });
282
-
283
- if (!response.ok) {
284
- throw new Error(`OpenAI API error: ${response.status}`);
285
- }
286
-
287
- const data = await response.json() as { choices?: { message?: { content?: string } }[] };
288
- return data.choices?.[0]?.message?.content || '';
289
- }
290
-
291
- private async callAnthropic(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
292
- const apiKey = this.getApiKey();
293
- if (!apiKey) {
294
- throw new Error('ANTHROPIC_API_KEY not set');
295
- }
296
-
297
- const systemMessage = messages.find(m => m.role === 'system')?.content || '';
298
- const userMessages = messages.filter(m => m.role !== 'system');
299
-
300
- const response = await fetch(`${this.getBaseUrl()}/messages`, {
301
- method: 'POST',
302
- headers: {
303
- 'Content-Type': 'application/json',
304
- 'x-api-key': apiKey,
305
- 'anthropic-version': '2023-06-01',
306
- 'anthropic-dangerous-direct-browser-access': 'true'
307
- },
308
- body: JSON.stringify({
309
- model: this.mapModel(),
310
- messages: userMessages,
311
- system: systemMessage,
312
- temperature,
313
- max_tokens: maxTokens
314
- }),
315
- signal,
316
- });
317
-
318
- if (!response.ok) {
319
- throw new Error(`Anthropic API error: ${response.status}`);
320
- }
321
-
322
- const data = await response.json() as { content?: { text?: string }[] };
323
- return data.content?.[0]?.text || '';
324
- }
325
-
326
- private async callOllama(messages: ChatMessage[], temperature: number, signal?: AbortSignal): Promise<string> {
327
- const response = await fetch(`${this.getBaseUrl()}/api/chat`, {
328
- method: 'POST',
329
- headers: {
330
- 'Content-Type': 'application/json'
331
- },
332
- body: JSON.stringify({
333
- model: this.mapModel(),
334
- messages,
335
- temperature,
336
- stream: false
337
- }),
338
- signal,
339
- });
340
-
341
- if (!response.ok) {
342
- throw new Error(`Ollama API error: ${response.status}`);
343
- }
344
-
345
- const data = await response.json() as { message?: { content?: string } };
346
- return data.message?.content || '';
347
- }
348
-
349
- private async callOpenRouter(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
350
- const apiKey = this.getApiKey();
351
- if (!apiKey) {
352
- throw new Error('OPENROUTER_API_KEY not set');
353
- }
354
-
355
- const response = await fetch(`${this.getBaseUrl()}/chat/completions`, {
356
- method: 'POST',
357
- headers: {
358
- 'Content-Type': 'application/json',
359
- 'Authorization': `Bearer ${apiKey}`,
360
- 'HTTP-Referer': 'https://openclaw.ai',
361
- 'X-Title': 'OpenClaw'
362
- },
363
- body: JSON.stringify({
364
- model: this.mapModel(),
365
- messages,
366
- temperature,
367
- max_tokens: maxTokens
368
- }),
369
- signal,
370
- });
371
-
372
- if (!response.ok) {
373
- throw new Error(`OpenRouter API error: ${response.status}`);
374
- }
375
-
376
- const data = await response.json() as { choices?: { message?: { content?: string } }[] };
377
- return data.choices?.[0]?.message?.content || '';
378
- }
379
-
380
- private async callGemini(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
381
- const apiKey = this.getApiKey();
382
- if (!apiKey) {
383
- throw new Error('GEMINI_API_KEY not set');
384
- }
385
-
386
- const contents = messages
387
- .filter(m => m.role !== 'system')
388
- .map(m => ({
389
- role: m.role === 'assistant' ? 'model' : 'user',
390
- parts: [{ text: m.content }]
391
- }));
392
-
393
- const systemInstruction = messages.find(m => m.role === 'system')?.content;
394
-
395
- const response = await fetch(
396
- `${this.getBaseUrl()}/models/${this.mapModel()}:generateContent?key=${apiKey}`,
397
- {
398
- method: 'POST',
399
- headers: {
400
- 'Content-Type': 'application/json'
401
- },
402
- body: JSON.stringify({
403
- contents,
404
- systemInstruction: systemInstruction ? { parts: [{ text: systemInstruction }] } : undefined,
405
- generationConfig: {
406
- temperature,
407
- maxOutputTokens: maxTokens
408
- }
409
- }),
410
- signal,
411
- }
412
- );
413
-
414
- if (!response.ok) {
415
- throw new Error(`Gemini API error: ${response.status}`);
416
- }
417
-
418
- const data = await response.json() as { candidates?: { content?: { parts?: { text?: string }[] } }[] };
419
- return data.candidates?.[0]?.content?.parts?.[0]?.text || '';
420
- }
421
-
422
- private async callLocal(messages: ChatMessage[], temperature: number, signal?: AbortSignal): Promise<string> {
423
- return this.callOllama(messages, temperature, signal);
424
- }
425
- // 注: callLocal 直接代理 ollama. 工具清单由 generateText 在外层拼到 messages, 这里 messages 已是 finalMessages.
426
-
427
- private async buildSystemPromptAsync(context?: string): Promise<string> {
428
- // 走 layer registry: 装配所有相关 layer (身份/行为/工具/角色/渠道)
429
- try {
430
- const { assembleSystemPrompt, SYSTEM_PROMPT_VERSION } = await import(
431
- './system-prompt/registry.js' as any
432
- ).catch(() => import('./system-prompt/registry.js'));
433
- // channel = 本机 (PI SDK 直接调就是 local)
434
- // role = 由 prompt context 决定 (默认 expert)
435
- const ctx = context ? { channel: 'local' as const, role: 'expert' as const } : { channel: 'local' as const, role: 'expert' as const };
436
- const result = await assembleSystemPrompt(ctx);
437
- return `${result.text}\n\n## User Working Directory\n${context || process.cwd()}\n\n## bolloon-runtime\n${SYSTEM_PROMPT_VERSION} · layers: ${result.layerIds.join(',')}`;
438
- } catch (err: any) {
439
- // 降级: 旧硬编码 (layer registry 不可用时不挂)
440
- console.warn('[pi-ai] layer registry 不可用, 降级:', err.message?.slice(0, 100));
441
- const envDetails = this.getEnvironmentDetails();
442
- return `You are a friendly AI assistant in a P2P document collaboration network.
443
-
444
- ## User Working Directory
445
- ${context || process.cwd()}
446
-
447
- ## Environment
448
- ${envDetails}`;
449
- }
450
- }
451
-
452
- // 同步版: 旧调用点 (buildSystemPrompt 是同步)
453
- // 保留但内部用 sync fallback; 后续可改成 async
454
- private buildSystemPrompt(context?: string): string {
455
- const envDetails = this.getEnvironmentDetails();
456
- return `You are a friendly AI assistant in a P2P document collaboration network.
457
-
458
- ## User Working Directory
459
- ${context || process.cwd()}
460
-
461
- ## Environment
462
- ${envDetails}`;
463
- }
464
-
465
- private getEnvironmentDetails(): string {
466
- return `
467
- ## Available Workflows
468
- - read - Read documents
469
- - summarize - Summarize documents
470
- - improve - Improve documents
471
- - collaborate - Multi-agent collaboration
472
- - query - Query status
473
- - report - Generate reports
474
-
475
- ## System Capabilities
476
- - Document processing (Markdown, Text, PDF, DOCX)
477
- - Multi-agent collaboration (P2P network)
478
- - Workflow engine (constraint layer)
479
- - Quality assessment and auto-send
480
-
481
- ## Current Time
482
- ${new Date().toISOString()}`;
483
- }
484
-
485
- private buildSummarizePrompt(text: string, context?: string): string {
486
- const maxLength = 8000;
487
- const truncatedText = text.length > maxLength ? text.substring(0, maxLength) + '...' : text;
488
-
489
- let prompt = `Please generate a concise and accurate summary for the following document:
490
-
491
- ${truncatedText}
492
-
493
- Please output in the following format:
494
- ## Summary
495
- [Write summary here]
496
-
497
- ## Quality Self-Assessment
498
- [Score 1-10, with reasoning]`;
499
-
500
- if (context) {
501
- prompt = `Context: ${context}
502
-
503
- ${prompt}`;
504
- }
505
-
506
- return prompt;
507
- }
508
-
509
- private buildImprovePrompt(content: string, requirements: string, context?: string): string {
510
- const maxLength = 8000;
511
- const truncatedContent = content.length > maxLength ? content.substring(0, maxLength) + '...' : content;
512
-
513
- let prompt = `Please improve the document according to the following requirements:
514
-
515
- Requirements: ${requirements}
516
-
517
- Original Document:
518
- ${truncatedContent}
519
-
520
- Please output only the improved document without additional explanation.`;
521
-
522
- if (context) {
523
- prompt = `Context: ${context}
524
-
525
- ${prompt}`;
526
- }
527
-
528
- return prompt;
529
- }
530
-
531
- estimateQuality(original: string, summary: string): number {
532
- const coverageRatio = summary.length / Math.max(original.length, 1);
533
- const hasKeyPoints = /\d+\s*[.。]/.test(summary);
534
- const decentLength = summary.length > 100 && summary.length < original.length * 0.5;
535
-
536
- let score = 0.5;
537
- if (coverageRatio > 0.1 && coverageRatio < 0.5) score += 0.2;
538
- if (hasKeyPoints) score += 0.15;
539
- if (decentLength) score += 0.15;
540
-
541
- return Math.min(1, score);
542
- }
543
-
544
- async shouldAutoSend(qualityScore: number, threshold: number = 0.7): Promise<boolean> {
545
- return qualityScore >= threshold;
546
- }
547
- }
548
-
549
- let modelInstance: PiAIModel | null = null;
550
-
551
- export interface PiAIConfig {
552
- provider?: ModelProvider;
553
- apiKey?: string;
554
- baseUrl?: string;
555
- model?: string;
556
- }
557
-
558
- function detectProvider(): ModelProvider {
559
- // 首先检查配置文件(优先级最高)
560
- try {
561
- const configPath = path.join(process.env.HOME || '/tmp', '.bolloon', 'llm-config.json');
562
- const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
563
- if (configData.activeProvider && configData.providers[configData.activeProvider]) {
564
- console.log('[PiAIModel] Detected provider from config:', configData.activeProvider);
565
- return configData.activeProvider;
566
- }
567
- } catch {}
568
-
569
- // 然后检查环境变量
570
- if (process.env.OPENAI_API_KEY) return 'openai';
571
- if (process.env.ANTHROPIC_API_KEY) return 'anthropic';
572
- if (process.env.OPENROUTER_API_KEY) return 'openrouter';
573
- if (process.env.GEMINI_API_KEY) return 'gemini';
574
- if (process.env.OLLAMA_BASE_URL) return 'ollama';
575
- if (process.env.MINIMAX_API_KEY) return 'minimax';
576
- if (process.env.DEEPSEEK_API_KEY) return 'deepseek';
577
- if (process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY) return 'kimi';
578
- if (process.env.GLM_API_KEY || process.env.ZHIPU_API_KEY) return 'glm';
579
- if (process.env.QWEN_API_KEY || process.env.DASHSCOPE_API_KEY) return 'qwen';
580
-
581
- return 'openai';
582
- }
583
-
584
- function detectModel(provider: ModelProvider): string {
585
- const defaults: Record<ModelProvider, string> = {
586
- openai: 'gpt-4',
587
- anthropic: 'claude-3-5-sonnet-20241022',
588
- ollama: 'llama3.2',
589
- openrouter: 'anthropic/claude-3.5-sonnet',
590
- gemini: 'gemini-2.0-flash',
591
- minimax: 'MiniMax-M3',
592
- deepseek: 'deepseek-chat',
593
- kimi: 'moonshot-v1-8k',
594
- glm: 'glm-4-flash',
595
- qwen: 'qwen-plus',
596
- local: 'llama3.2'
597
- };
598
- return defaults[provider];
599
- }
600
-
601
- export function initPiAI(config: PiAIConfig = {}): PiAIModel {
602
- const provider = config.provider || detectProvider();
603
- const model = config.model || detectModel(provider);
604
-
605
- console.log('[PiAIModel] Initializing with provider:', provider, 'model:', model);
606
-
607
- // 如果没有提供 apiKey,从配置文件读取
608
- let apiKey = config.apiKey;
609
- if (!apiKey) {
610
- try {
611
- const configPath = path.join(process.env.HOME || '/tmp', '.bolloon', 'llm-config.json');
612
- const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
613
- const providerConfig = configData.providers[provider];
614
- if (providerConfig?.apiKey) {
615
- apiKey = providerConfig.apiKey;
616
- console.log('[PiAIModel] Loaded apiKey from config for', provider);
617
- }
618
- } catch (e) {
619
- console.log('[PiAIModel] Error reading apiKey from config:', e);
620
- }
621
- }
622
-
623
- modelInstance = new PiAIModel({
624
- provider,
625
- apiKey,
626
- baseUrl: config.baseUrl,
627
- model
628
- });
629
-
630
- console.log('[PiAIModel] Model instance created, provider:', provider);
631
- return modelInstance;
632
- }
633
-
634
- export function getModel(): PiAIModel {
635
- if (!modelInstance) {
636
- throw new Error('PiAI not initialized. Call initPiAI first.');
637
- }
638
- return modelInstance;
639
- }
640
-
641
- export function isModelAvailable(): boolean {
642
- return modelInstance !== null;
643
- }
644
-
645
- export function getMinimax(): PiAIModel {
646
- return getModel();
647
- }
648
-
649
- export function initMinimax(config: PiAIConfig = {}): PiAIModel {
650
- return initPiAI(config);
651
- }
652
-
653
- export { PiAIModel as MinimaxLLM };