@bolloon/bolloon-agent 0.1.35 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/p2p-chat-tools.js +6 -6
  3. package/dist/agents/permission-mode.js +115 -0
  4. package/dist/agents/pi-sdk.js +435 -25
  5. package/dist/agents/pre-tool-validator.js +194 -0
  6. package/dist/agents/workflow-pivot-loop.js +113 -12
  7. package/dist/bollharness-integration/context-router.js +2 -2
  8. package/dist/bollharness-integration/guard-checker.js +1 -1
  9. package/dist/bootstrap/bootstrap.js +3 -0
  10. package/dist/bootstrap/context-collector.js +17 -1
  11. package/dist/bootstrap/context-hierarchy.js +218 -0
  12. package/dist/bootstrap/lifecycle-hooks.js +86 -24
  13. package/dist/bootstrap/project-context.js +10 -3
  14. package/dist/context-compaction/auto-compact.js +144 -0
  15. package/dist/context-compaction/budget-gate.js +28 -0
  16. package/dist/context-compaction/budget-reduce.js +35 -0
  17. package/dist/context-compaction/context-collapse.js +66 -0
  18. package/dist/context-compaction/index.js +21 -0
  19. package/dist/context-compaction/microcompact.js +51 -0
  20. package/dist/context-compaction/pipeline.js +123 -0
  21. package/dist/context-compaction/snip.js +45 -0
  22. package/dist/context-compaction/token-estimator.js +35 -0
  23. package/dist/context-compaction/types.js +19 -0
  24. package/dist/heartbeat/HealthMonitor.js +3 -2
  25. package/dist/index.js +38 -2
  26. package/dist/llm/llm-judgment-client.js +32 -30
  27. package/dist/llm/pi-ai.js +103 -16
  28. package/dist/llm/system-prompt/health.js +129 -0
  29. package/dist/llm/system-prompt/registry.js +246 -0
  30. package/dist/llm/system-prompt/strip-hibsml.js +51 -0
  31. package/dist/llm/tool-manifest/ask_user_input.js +35 -0
  32. package/dist/llm/tool-manifest/bash.js +23 -0
  33. package/dist/llm/tool-manifest/create_file.js +24 -0
  34. package/dist/llm/tool-manifest/fetch_sports_data.js +26 -0
  35. package/dist/llm/tool-manifest/image_search.js +24 -0
  36. package/dist/llm/tool-manifest/index.js +69 -0
  37. package/dist/llm/tool-manifest/mcp.js +43 -0
  38. package/dist/llm/tool-manifest/message_compose.js +31 -0
  39. package/dist/llm/tool-manifest/places.js +83 -0
  40. package/dist/llm/tool-manifest/present_files.js +21 -0
  41. package/dist/llm/tool-manifest/recipe.js +40 -0
  42. package/dist/llm/tool-manifest/recommend_apps.js +23 -0
  43. package/dist/llm/tool-manifest/str_replace.js +27 -0
  44. package/dist/llm/tool-manifest/types.js +7 -0
  45. package/dist/llm/tool-manifest/view.js +24 -0
  46. package/dist/llm/tool-manifest/weather.js +27 -0
  47. package/dist/llm/tool-manifest/web.js +51 -0
  48. package/dist/network/p2p-direct.js +23 -0
  49. package/dist/network/source-intent-broadcaster.js +203 -0
  50. package/dist/network/source-intent.js +100 -0
  51. package/dist/pi-ecosystem-judgment/adaptive-scan.js +48 -0
  52. package/dist/pi-ecosystem-judgment/injection-gate.js +54 -12
  53. package/dist/pi-ecosystem-judgment/value-injection.js +8 -2
  54. package/dist/security/context-router-tool.js +1 -1
  55. package/dist/security/input-scanner.js +223 -0
  56. package/dist/web/client.js +3089 -4458
  57. package/dist/web/index.html +58 -67
  58. package/dist/web/server.js +299 -117
  59. package/dist/web/style.css +531 -249
  60. package/dist/web/ui/message-renderer.js +352 -0
  61. package/dist/web/ui/step-timeline.js +279 -0
  62. package/package.json +2 -2
  63. package/.auto-evolve-calls +0 -1
  64. package/.last-auto-evolve-baseline +0 -1
  65. package/Bolloon.md +0 -103
  66. package/dist/agents/constraint-layer.js.map +0 -1
  67. package/dist/agents/pi-sdk.js.map +0 -1
  68. package/dist/agents/workflow-engine.js.map +0 -1
  69. package/dist/bollharness/src/index.js +0 -5
  70. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  71. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  72. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  73. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  74. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  75. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  76. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  77. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  78. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  79. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  80. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  81. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  82. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  83. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  84. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  85. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  86. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  87. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  88. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  89. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  90. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  91. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  92. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  93. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  94. package/dist/bollharness/src/scripts/context_router.js +0 -67
  95. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  96. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  97. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  98. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  99. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  100. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  101. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  102. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  103. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  104. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  105. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  106. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  107. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  108. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  109. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  110. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  111. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  112. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  113. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  114. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  115. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  116. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  117. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  118. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  119. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  120. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  121. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  122. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  123. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  124. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  125. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  126. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  127. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  128. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  129. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  130. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  131. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  132. package/dist/bollharness-integration/context-router.js.map +0 -1
  133. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  134. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  135. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  136. package/dist/bollharness-integration/index.js.map +0 -1
  137. package/dist/bollharness-integration/integration.js.map +0 -1
  138. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  139. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  140. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  141. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  142. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  143. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  144. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  145. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  146. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  147. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  148. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  149. package/dist/constraint-runtime/src/agent/index.js +0 -1
  150. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  151. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  152. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  153. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  154. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  155. package/dist/constraint-runtime/src/cli/index.js +0 -12
  156. package/dist/constraint-runtime/src/command_graph.js +0 -10
  157. package/dist/constraint-runtime/src/commands.js +0 -60
  158. package/dist/constraint-runtime/src/components/index.js +0 -12
  159. package/dist/constraint-runtime/src/constants/index.js +0 -12
  160. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  161. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  162. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  163. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  164. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  165. package/dist/constraint-runtime/src/context.js +0 -30
  166. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  167. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  168. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  169. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  170. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  171. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  172. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  173. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  174. package/dist/constraint-runtime/src/history.js +0 -9
  175. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  176. package/dist/constraint-runtime/src/index.js +0 -26
  177. package/dist/constraint-runtime/src/ink.js +0 -4
  178. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  179. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  180. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  181. package/dist/constraint-runtime/src/models.js +0 -1
  182. package/dist/constraint-runtime/src/models.js.map +0 -1
  183. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  184. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  185. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  186. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  187. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  188. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  189. package/dist/constraint-runtime/src/prefetch.js +0 -9
  190. package/dist/constraint-runtime/src/query.js +0 -1
  191. package/dist/constraint-runtime/src/remote/index.js +0 -12
  192. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  193. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  194. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  195. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  196. package/dist/constraint-runtime/src/screens/index.js +0 -12
  197. package/dist/constraint-runtime/src/server/index.js +0 -12
  198. package/dist/constraint-runtime/src/services/index.js +0 -12
  199. package/dist/constraint-runtime/src/session_store.js +0 -22
  200. package/dist/constraint-runtime/src/setup.js +0 -30
  201. package/dist/constraint-runtime/src/skills/index.js +0 -1
  202. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  203. package/dist/constraint-runtime/src/state/index.js +0 -12
  204. package/dist/constraint-runtime/src/system_init.js +0 -20
  205. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  206. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  207. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  208. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  209. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  210. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  211. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  212. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  213. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  214. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  215. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  216. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  217. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  218. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  219. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  220. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  221. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  222. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  223. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  224. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  225. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  226. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  227. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  228. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  229. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  230. package/dist/constraint-runtime/src/tools.js +0 -80
  231. package/dist/constraint-runtime/src/transcript.js +0 -19
  232. package/dist/constraint-runtime/src/types/index.js +0 -12
  233. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  234. package/dist/constraint-runtime/src/utils/index.js +0 -12
  235. package/dist/constraint-runtime/src/vim/index.js +0 -12
  236. package/dist/constraint-runtime/src/voice/index.js +0 -12
  237. package/dist/constraints/index.js.map +0 -1
  238. package/dist/documents/reader.js.map +0 -1
  239. package/dist/llm/config-store.js.map +0 -1
  240. package/dist/llm/pi-ai.js.map +0 -1
  241. package/dist/network/agent-network.js.map +0 -1
  242. package/dist/network/iroh-integration.js.map +0 -1
  243. package/dist/network/iroh-transport.js.map +0 -1
  244. package/dist/network/p2p.js.map +0 -1
  245. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  246. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  247. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  248. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  249. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  250. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  251. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  252. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  253. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  254. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  255. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  256. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  257. package/dist/social/ant-colony/types.js.map +0 -1
  258. package/dist/social/channels/ChannelManager.js.map +0 -1
  259. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  260. package/dist/social/channels/InterestMatcher.js.map +0 -1
  261. package/dist/social/channels/types.js.map +0 -1
  262. package/dist/social/global-shared-context.js.map +0 -1
  263. package/dist/social/heartbeat.js.map +0 -1
  264. package/lefthook.yml +0 -29
  265. package/scripts/auto-evolve-loop.ts +0 -376
  266. package/scripts/auto-evolve-oneshot.sh +0 -155
  267. package/scripts/auto-evolve-snapshot.sh +0 -136
  268. package/scripts/build-cli.js +0 -216
  269. package/scripts/build-web.ts +0 -82
  270. package/scripts/detect-schema-changes.sh +0 -48
  271. package/scripts/diff-reviewer.ts +0 -159
  272. package/scripts/postinstall.js +0 -153
  273. package/scripts/weekly-report.ts +0 -364
  274. package/src/agents/agent-manifest-protocol.ts +0 -117
  275. package/src/agents/constraint-layer.ts +0 -309
  276. package/src/agents/iroh-secret.ts +0 -32
  277. package/src/agents/p2p-chat-tools.ts +0 -383
  278. package/src/agents/p2p-document-tools.ts +0 -347
  279. package/src/agents/pi-sdk.ts +0 -2462
  280. package/src/agents/protocol.ts +0 -398
  281. package/src/agents/shell-guard.ts +0 -417
  282. package/src/agents/shell-tool.ts +0 -103
  283. package/src/agents/skill-loader.ts +0 -202
  284. package/src/agents/subagent-manager.ts +0 -553
  285. package/src/agents/workflow-engine.ts +0 -332
  286. package/src/agents/workflow-pivot-loop.ts +0 -675
  287. package/src/bollharness/.sanitize-report.json +0 -13
  288. package/src/bollharness/CLAUDE.md +0 -73
  289. package/src/bollharness/LICENSE +0 -21
  290. package/src/bollharness/README.md +0 -143
  291. package/src/bollharness/README.zh-CN.md +0 -131
  292. package/src/bollharness/package.json +0 -20
  293. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  294. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  295. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  296. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  297. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  298. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  299. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  300. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  301. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  302. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  303. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  304. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  305. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  306. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  307. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  308. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  309. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  310. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  311. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  312. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  313. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  314. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  315. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  316. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  317. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  318. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  319. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  320. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  321. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  322. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  323. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  324. package/src/bollharness/src/index.ts +0 -5
  325. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  326. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  327. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  328. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  329. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  330. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  331. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  332. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  333. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  334. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  335. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  336. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  337. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  338. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  339. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  340. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  341. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  342. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  343. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  344. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  345. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  346. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  347. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  348. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  349. package/src/bollharness/src/scripts/context_router.ts +0 -76
  350. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  351. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  352. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  353. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  354. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  355. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  356. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  357. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  358. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  359. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  360. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  361. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  362. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  363. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  364. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  365. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  366. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  367. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  368. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  369. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  370. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  371. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  372. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  373. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  374. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  375. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  376. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  377. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  378. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  379. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  380. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  381. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  382. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  383. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  384. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  385. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  386. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  387. package/src/bollharness/templates/persona/default.json +0 -19
  388. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  389. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  390. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  391. package/src/bollharness-integration/context-chain-router.ts +0 -474
  392. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  393. package/src/bollharness-integration/context-router.ts +0 -583
  394. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  395. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  396. package/src/bollharness-integration/guard-checker.ts +0 -451
  397. package/src/bollharness-integration/index.ts +0 -195
  398. package/src/bollharness-integration/integration.ts +0 -538
  399. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  400. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  401. package/src/bollharness-integration/skill-adapter.ts +0 -646
  402. package/src/bootstrap/bootstrap.ts +0 -132
  403. package/src/bootstrap/context-collector.ts +0 -342
  404. package/src/bootstrap/lifecycle-hooks.ts +0 -176
  405. package/src/bootstrap/project-context.ts +0 -163
  406. package/src/cli/interface.ts +0 -211
  407. package/src/cli-entry.ts +0 -304
  408. package/src/constraints/index.ts +0 -6
  409. package/src/documents/reader.ts +0 -85
  410. package/src/documents/store.ts +0 -252
  411. package/src/electron-preload.ts +0 -25
  412. package/src/electron.ts +0 -200
  413. package/src/heartbeat/DaemonManager.ts +0 -283
  414. package/src/heartbeat/HealthMonitor.ts +0 -316
  415. package/src/heartbeat/StartupVerifier.ts +0 -223
  416. package/src/heartbeat/Watchdog.ts +0 -208
  417. package/src/heartbeat/index.ts +0 -109
  418. package/src/heartbeat/self-improve-bus.ts +0 -110
  419. package/src/heartbeat/types.ts +0 -82
  420. package/src/index.ts +0 -1690
  421. package/src/llm/audio-config-store.ts +0 -246
  422. package/src/llm/config-store.ts +0 -400
  423. package/src/llm/llm-judgment-client.ts +0 -470
  424. package/src/llm/pi-ai.ts +0 -558
  425. package/src/llm/video-config-store.ts +0 -257
  426. package/src/network/agent-network.ts +0 -800
  427. package/src/network/hybrid-messenger.ts +0 -199
  428. package/src/network/iroh-bootstrap.ts +0 -57
  429. package/src/network/iroh-discovery.ts +0 -208
  430. package/src/network/iroh-integration.ts +0 -158
  431. package/src/network/iroh-transport.ts +0 -637
  432. package/src/network/known-peers.ts +0 -102
  433. package/src/network/p2p-direct.ts +0 -240
  434. package/src/network/p2p-secret.ts +0 -153
  435. package/src/network/p2p.ts +0 -964
  436. package/src/network/storage/adapters/json-adapter.ts +0 -454
  437. package/src/network/storage/index.ts +0 -203
  438. package/src/network/storage/types.ts +0 -166
  439. package/src/security/builtin-guards.ts +0 -162
  440. package/src/security/context-router-tool.ts +0 -122
  441. package/src/security/react-harness.ts +0 -177
  442. package/src/security/tool-gate.ts +0 -294
  443. package/src/social/ant-colony/index.js +0 -19
  444. package/src/social/channels/ChannelManager.ts +0 -485
  445. package/src/social/channels/DiapChannelBridge.ts +0 -501
  446. package/src/social/channels/InterestMatcher.ts +0 -189
  447. package/src/social/channels/agent-workflow-config.json +0 -214
  448. package/src/social/channels/agent-workflow-config.yaml +0 -334
  449. package/src/social/channels/channel-agent-session.ts +0 -407
  450. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  451. package/src/social/channels/diap-doc-parser.ts +0 -282
  452. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  453. package/src/social/channels/index.ts +0 -22
  454. package/src/social/channels/types.ts +0 -115
  455. package/src/social/global-shared-context.ts +0 -506
  456. package/src/social/heartbeat.ts +0 -1057
  457. package/src/social/persona/enhanced-persona.ts +0 -359
  458. package/src/types.d.ts +0 -12
  459. package/src/utils/auto-evolve-policy.ts +0 -138
  460. package/src/utils/auto-update.ts +0 -482
  461. package/src/utils/clamp.ts +0 -5
  462. package/src/web/agent-delegate-server.ts +0 -148
  463. package/src/web/api-config.html +0 -520
  464. package/src/web/client.js +0 -4898
  465. package/src/web/components/p2p/P2PModal.tsx +0 -416
  466. package/src/web/components/p2p/index.ts +0 -566
  467. package/src/web/components/p2p/index.tsx +0 -297
  468. package/src/web/components/p2p/p2p-connection.ts +0 -338
  469. package/src/web/components/p2p/p2p-identity.ts +0 -92
  470. package/src/web/components/p2p/p2p-manager.ts +0 -147
  471. package/src/web/components/p2p/p2p-messages.ts +0 -219
  472. package/src/web/components/p2p/p2p-modal.ts +0 -685
  473. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  474. package/src/web/components/p2p/p2p-tools.ts +0 -315
  475. package/src/web/components/p2p/types.ts +0 -170
  476. package/src/web/components/wallet-viem.mjs +0 -118
  477. package/src/web/design.md +0 -99
  478. package/src/web/icons/apple-touch-icon.png +0 -0
  479. package/src/web/icons/favicon-16x16.png +0 -0
  480. package/src/web/icons/favicon-192x192.png +0 -0
  481. package/src/web/icons/favicon-32x32.png +0 -0
  482. package/src/web/icons/favicon-48x48.png +0 -0
  483. package/src/web/icons/favicon-512x512.png +0 -0
  484. package/src/web/icons/favicon.icns +0 -0
  485. package/src/web/icons/favicon.ico +0 -0
  486. package/src/web/icons/icon.png +0 -0
  487. package/src/web/icons/image.png +0 -0
  488. package/src/web/index.html +0 -382
  489. package/src/web/iroh-delegate-transport.ts +0 -139
  490. package/src/web/manifest.json +0 -21
  491. package/src/web/server.ts +0 -5571
  492. package/src/web/style.css +0 -4455
  493. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  494. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  495. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  496. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  497. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  498. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  499. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  500. package/tsconfig.cli.json +0 -16
  501. package/tsconfig.electron.json +0 -20
  502. package/tsconfig.json +0 -18
package/src/llm/pi-ai.ts DELETED
@@ -1,558 +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
- }
33
-
34
- export class PiAIModel {
35
- private config: ModelConfig;
36
- private provider: ModelProvider;
37
-
38
- constructor(config: ModelConfig) {
39
- this.config = config;
40
- this.provider = config.provider;
41
- }
42
-
43
- async chat(message: string, context?: string, signal?: AbortSignal): Promise<ChatResult> {
44
- const systemPrompt = this.buildSystemPrompt(context);
45
- const messages: ChatMessage[] = [
46
- { role: 'system', content: systemPrompt },
47
- { role: 'user', content: message }
48
- ];
49
-
50
- try {
51
- const response = await this.generateText({
52
- messages,
53
- temperature: 0.8,
54
- signal,
55
- });
56
- return { reply: response };
57
- } catch (error: any) {
58
- // abort 不当作错误, 透传一个 sentinel 让上层能识别
59
- if (signal?.aborted || error?.name === 'AbortError') {
60
- throw error; // 上层 try/catch 处理
61
- }
62
- console.error('PiAI chat error:', error);
63
- return { reply: '抱歉,AI服务暂时不可用。' };
64
- }
65
- }
66
-
67
- async summarize(text: string, context?: string): Promise<SummarizeResult> {
68
- const prompt = this.buildSummarizePrompt(text, context);
69
-
70
- try {
71
- const response = await this.generateText({
72
- messages: [
73
- { role: 'system', content: 'You are a professional document summarizer.' },
74
- { role: 'user', content: prompt }
75
- ],
76
- temperature: 0.7
77
- });
78
-
79
- const qualityScore = this.estimateQuality(text, response);
80
- return { summary: response, qualityScore };
81
- } catch (error) {
82
- console.error('PiAI summarize error:', error);
83
- return {
84
- summary: text.substring(0, 500) + '...',
85
- qualityScore: 0.5
86
- };
87
- }
88
- }
89
-
90
- async improveContent(content: string, requirements: string, context?: string): Promise<string> {
91
- const prompt = this.buildImprovePrompt(content, requirements, context);
92
-
93
- try {
94
- const response = await this.generateText({
95
- messages: [
96
- { role: 'system', content: 'You are a professional document editor and improver.' },
97
- { role: 'user', content: prompt }
98
- ],
99
- temperature: 0.8
100
- });
101
- return response;
102
- } catch (error) {
103
- console.error('PiAI improve error:', error);
104
- return content;
105
- }
106
- }
107
-
108
- private async generateText(options: GenerateOptions): Promise<string> {
109
- const { messages, temperature = 0.7, maxTokens = 4096, signal } = options;
110
-
111
- switch (this.provider) {
112
- case 'openai':
113
- case 'minimax':
114
- case 'deepseek':
115
- case 'kimi':
116
- case 'glm':
117
- case 'qwen':
118
- return this.callOpenAI(messages, temperature, maxTokens, signal);
119
- case 'anthropic':
120
- return this.callAnthropic(messages, temperature, maxTokens, signal);
121
- case 'ollama':
122
- return this.callOllama(messages, temperature, signal);
123
- case 'openrouter':
124
- return this.callOpenRouter(messages, temperature, maxTokens, signal);
125
- case 'gemini':
126
- return this.callGemini(messages, temperature, maxTokens, signal);
127
- case 'local':
128
- return this.callLocal(messages, temperature, signal);
129
- default:
130
- throw new Error(`Unsupported provider: ${this.provider}`);
131
- }
132
- }
133
-
134
- private getApiKey(): string {
135
- return this.config.apiKey || this.getEnvApiKey();
136
- }
137
-
138
- private getEnvApiKey(): string {
139
- const envVars: Record<ModelProvider, string> = {
140
- openai: process.env.OPENAI_API_KEY || '',
141
- anthropic: process.env.ANTHROPIC_API_KEY || '',
142
- ollama: '',
143
- openrouter: process.env.OPENROUTER_API_KEY || '',
144
- gemini: process.env.GEMINI_API_KEY || '',
145
- minimax: process.env.MINIMAX_API_KEY || '',
146
- deepseek: process.env.DEEPSEEK_API_KEY || '',
147
- kimi: process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY || '',
148
- glm: process.env.GLM_API_KEY || process.env.ZHIPU_API_KEY || '',
149
- qwen: process.env.QWEN_API_KEY || process.env.DASHSCOPE_API_KEY || '',
150
- local: ''
151
- };
152
- return envVars[this.provider] || '';
153
- }
154
-
155
- private getBaseUrl(): string {
156
- if (this.config.baseUrl) {
157
- return this.config.baseUrl;
158
- }
159
-
160
- // 允许通过 OPENAI_BASE_URL 等环境变量覆盖默认 base URL
161
- const baseUrls: Record<ModelProvider, string> = {
162
- openai: process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1',
163
- anthropic: 'https://api.anthropic.com/v1',
164
- ollama: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
165
- openrouter: process.env.OPENROUTER_BASE_URL || 'https://openrouter.ai/api/v1',
166
- gemini: 'https://generativelanguage.googleapis.com/v1beta',
167
- minimax: process.env.MINIMAX_BASE_URL || 'https://api.minimaxi.com/v1',
168
- deepseek: process.env.DEEPSEEK_BASE_URL || 'https://api.deepseek.com/v1',
169
- kimi: process.env.KIMI_BASE_URL || process.env.MOONSHOT_BASE_URL || 'https://api.moonshot.cn/v1',
170
- glm: process.env.GLM_BASE_URL || process.env.ZHIPU_BASE_URL || 'https://open.bigmodel.cn/api/paas/v4',
171
- qwen: process.env.QWEN_BASE_URL || process.env.DASHSCOPE_BASE_URL || 'https://dashscope.aliyuncs.com/compatible-mode/v1',
172
- local: 'http://localhost:11434'
173
- };
174
-
175
- return baseUrls[this.provider];
176
- }
177
-
178
- private mapModel(): string {
179
- const modelMap: Record<ModelProvider, string> = {
180
- openai: this.config.model || process.env.OPENAI_MODEL || 'gpt-4',
181
- anthropic: this.config.model || 'claude-3-5-sonnet-20241022',
182
- ollama: this.config.model || 'llama3.2',
183
- openrouter: this.config.model || 'anthropic/claude-3.5-sonnet',
184
- gemini: this.config.model || 'gemini-2.0-flash',
185
- minimax: this.config.model || process.env.MINIMAX_MODEL || 'MiniMax-M3',
186
- deepseek: this.config.model || process.env.DEEPSEEK_MODEL || 'deepseek-chat',
187
- kimi: this.config.model || process.env.KIMI_MODEL || process.env.MOONSHOT_MODEL || 'moonshot-v1-8k',
188
- glm: this.config.model || process.env.GLM_MODEL || process.env.ZHIPU_MODEL || 'glm-4-flash',
189
- qwen: this.config.model || process.env.QWEN_MODEL || process.env.DASHSCOPE_MODEL || 'qwen-plus',
190
- local: this.config.model || 'llama3.2'
191
- };
192
- return modelMap[this.provider];
193
- }
194
-
195
- private async callOpenAI(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
196
- const apiKey = this.getApiKey();
197
- if (!apiKey) {
198
- throw new Error('OPENAI_API_KEY not set');
199
- }
200
-
201
- const response = await fetch(`${this.getBaseUrl()}/chat/completions`, {
202
- method: 'POST',
203
- headers: {
204
- 'Content-Type': 'application/json',
205
- 'Authorization': `Bearer ${apiKey}`
206
- },
207
- body: JSON.stringify({
208
- model: this.mapModel(),
209
- messages,
210
- temperature,
211
- max_tokens: maxTokens
212
- }),
213
- signal,
214
- });
215
-
216
- if (!response.ok) {
217
- throw new Error(`OpenAI API error: ${response.status}`);
218
- }
219
-
220
- const data = await response.json() as { choices?: { message?: { content?: string } }[] };
221
- return data.choices?.[0]?.message?.content || '';
222
- }
223
-
224
- private async callAnthropic(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
225
- const apiKey = this.getApiKey();
226
- if (!apiKey) {
227
- throw new Error('ANTHROPIC_API_KEY not set');
228
- }
229
-
230
- const systemMessage = messages.find(m => m.role === 'system')?.content || '';
231
- const userMessages = messages.filter(m => m.role !== 'system');
232
-
233
- const response = await fetch(`${this.getBaseUrl()}/messages`, {
234
- method: 'POST',
235
- headers: {
236
- 'Content-Type': 'application/json',
237
- 'x-api-key': apiKey,
238
- 'anthropic-version': '2023-06-01',
239
- 'anthropic-dangerous-direct-browser-access': 'true'
240
- },
241
- body: JSON.stringify({
242
- model: this.mapModel(),
243
- messages: userMessages,
244
- system: systemMessage,
245
- temperature,
246
- max_tokens: maxTokens
247
- }),
248
- signal,
249
- });
250
-
251
- if (!response.ok) {
252
- throw new Error(`Anthropic API error: ${response.status}`);
253
- }
254
-
255
- const data = await response.json() as { content?: { text?: string }[] };
256
- return data.content?.[0]?.text || '';
257
- }
258
-
259
- private async callOllama(messages: ChatMessage[], temperature: number, signal?: AbortSignal): Promise<string> {
260
- const response = await fetch(`${this.getBaseUrl()}/api/chat`, {
261
- method: 'POST',
262
- headers: {
263
- 'Content-Type': 'application/json'
264
- },
265
- body: JSON.stringify({
266
- model: this.mapModel(),
267
- messages,
268
- temperature,
269
- stream: false
270
- }),
271
- signal,
272
- });
273
-
274
- if (!response.ok) {
275
- throw new Error(`Ollama API error: ${response.status}`);
276
- }
277
-
278
- const data = await response.json() as { message?: { content?: string } };
279
- return data.message?.content || '';
280
- }
281
-
282
- private async callOpenRouter(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
283
- const apiKey = this.getApiKey();
284
- if (!apiKey) {
285
- throw new Error('OPENROUTER_API_KEY not set');
286
- }
287
-
288
- const response = await fetch(`${this.getBaseUrl()}/chat/completions`, {
289
- method: 'POST',
290
- headers: {
291
- 'Content-Type': 'application/json',
292
- 'Authorization': `Bearer ${apiKey}`,
293
- 'HTTP-Referer': 'https://openclaw.ai',
294
- 'X-Title': 'OpenClaw'
295
- },
296
- body: JSON.stringify({
297
- model: this.mapModel(),
298
- messages,
299
- temperature,
300
- max_tokens: maxTokens
301
- }),
302
- signal,
303
- });
304
-
305
- if (!response.ok) {
306
- throw new Error(`OpenRouter API error: ${response.status}`);
307
- }
308
-
309
- const data = await response.json() as { choices?: { message?: { content?: string } }[] };
310
- return data.choices?.[0]?.message?.content || '';
311
- }
312
-
313
- private async callGemini(messages: ChatMessage[], temperature: number, maxTokens: number, signal?: AbortSignal): Promise<string> {
314
- const apiKey = this.getApiKey();
315
- if (!apiKey) {
316
- throw new Error('GEMINI_API_KEY not set');
317
- }
318
-
319
- const contents = messages
320
- .filter(m => m.role !== 'system')
321
- .map(m => ({
322
- role: m.role === 'assistant' ? 'model' : 'user',
323
- parts: [{ text: m.content }]
324
- }));
325
-
326
- const systemInstruction = messages.find(m => m.role === 'system')?.content;
327
-
328
- const response = await fetch(
329
- `${this.getBaseUrl()}/models/${this.mapModel()}:generateContent?key=${apiKey}`,
330
- {
331
- method: 'POST',
332
- headers: {
333
- 'Content-Type': 'application/json'
334
- },
335
- body: JSON.stringify({
336
- contents,
337
- systemInstruction: systemInstruction ? { parts: [{ text: systemInstruction }] } : undefined,
338
- generationConfig: {
339
- temperature,
340
- maxOutputTokens: maxTokens
341
- }
342
- }),
343
- signal,
344
- }
345
- );
346
-
347
- if (!response.ok) {
348
- throw new Error(`Gemini API error: ${response.status}`);
349
- }
350
-
351
- const data = await response.json() as { candidates?: { content?: { parts?: { text?: string }[] } }[] };
352
- return data.candidates?.[0]?.content?.parts?.[0]?.text || '';
353
- }
354
-
355
- private async callLocal(messages: ChatMessage[], temperature: number, signal?: AbortSignal): Promise<string> {
356
- return this.callOllama(messages, temperature, signal);
357
- }
358
-
359
- private buildSystemPrompt(context?: string): string {
360
- const envDetails = this.getEnvironmentDetails();
361
- return `You are a friendly AI assistant in a P2P document collaboration network.
362
-
363
- ## User Working Directory
364
- ${context || process.cwd()}
365
-
366
- ## Environment
367
- ${envDetails}`;
368
- }
369
-
370
- private getEnvironmentDetails(): string {
371
- return `
372
- ## Available Workflows
373
- - read - Read documents
374
- - summarize - Summarize documents
375
- - improve - Improve documents
376
- - collaborate - Multi-agent collaboration
377
- - query - Query status
378
- - report - Generate reports
379
-
380
- ## System Capabilities
381
- - Document processing (Markdown, Text, PDF, DOCX)
382
- - Multi-agent collaboration (P2P network)
383
- - Workflow engine (constraint layer)
384
- - Quality assessment and auto-send
385
-
386
- ## Current Time
387
- ${new Date().toISOString()}`;
388
- }
389
-
390
- private buildSummarizePrompt(text: string, context?: string): string {
391
- const maxLength = 8000;
392
- const truncatedText = text.length > maxLength ? text.substring(0, maxLength) + '...' : text;
393
-
394
- let prompt = `Please generate a concise and accurate summary for the following document:
395
-
396
- ${truncatedText}
397
-
398
- Please output in the following format:
399
- ## Summary
400
- [Write summary here]
401
-
402
- ## Quality Self-Assessment
403
- [Score 1-10, with reasoning]`;
404
-
405
- if (context) {
406
- prompt = `Context: ${context}
407
-
408
- ${prompt}`;
409
- }
410
-
411
- return prompt;
412
- }
413
-
414
- private buildImprovePrompt(content: string, requirements: string, context?: string): string {
415
- const maxLength = 8000;
416
- const truncatedContent = content.length > maxLength ? content.substring(0, maxLength) + '...' : content;
417
-
418
- let prompt = `Please improve the document according to the following requirements:
419
-
420
- Requirements: ${requirements}
421
-
422
- Original Document:
423
- ${truncatedContent}
424
-
425
- Please output only the improved document without additional explanation.`;
426
-
427
- if (context) {
428
- prompt = `Context: ${context}
429
-
430
- ${prompt}`;
431
- }
432
-
433
- return prompt;
434
- }
435
-
436
- estimateQuality(original: string, summary: string): number {
437
- const coverageRatio = summary.length / Math.max(original.length, 1);
438
- const hasKeyPoints = /\d+\s*[.。]/.test(summary);
439
- const decentLength = summary.length > 100 && summary.length < original.length * 0.5;
440
-
441
- let score = 0.5;
442
- if (coverageRatio > 0.1 && coverageRatio < 0.5) score += 0.2;
443
- if (hasKeyPoints) score += 0.15;
444
- if (decentLength) score += 0.15;
445
-
446
- return Math.min(1, score);
447
- }
448
-
449
- async shouldAutoSend(qualityScore: number, threshold: number = 0.7): Promise<boolean> {
450
- return qualityScore >= threshold;
451
- }
452
- }
453
-
454
- let modelInstance: PiAIModel | null = null;
455
-
456
- export interface PiAIConfig {
457
- provider?: ModelProvider;
458
- apiKey?: string;
459
- baseUrl?: string;
460
- model?: string;
461
- }
462
-
463
- function detectProvider(): ModelProvider {
464
- // 首先检查配置文件(优先级最高)
465
- try {
466
- const configPath = path.join(process.env.HOME || '/tmp', '.bolloon', 'llm-config.json');
467
- const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
468
- if (configData.activeProvider && configData.providers[configData.activeProvider]) {
469
- console.log('[PiAIModel] Detected provider from config:', configData.activeProvider);
470
- return configData.activeProvider;
471
- }
472
- } catch {}
473
-
474
- // 然后检查环境变量
475
- if (process.env.OPENAI_API_KEY) return 'openai';
476
- if (process.env.ANTHROPIC_API_KEY) return 'anthropic';
477
- if (process.env.OPENROUTER_API_KEY) return 'openrouter';
478
- if (process.env.GEMINI_API_KEY) return 'gemini';
479
- if (process.env.OLLAMA_BASE_URL) return 'ollama';
480
- if (process.env.MINIMAX_API_KEY) return 'minimax';
481
- if (process.env.DEEPSEEK_API_KEY) return 'deepseek';
482
- if (process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY) return 'kimi';
483
- if (process.env.GLM_API_KEY || process.env.ZHIPU_API_KEY) return 'glm';
484
- if (process.env.QWEN_API_KEY || process.env.DASHSCOPE_API_KEY) return 'qwen';
485
-
486
- return 'openai';
487
- }
488
-
489
- function detectModel(provider: ModelProvider): string {
490
- const defaults: Record<ModelProvider, string> = {
491
- openai: 'gpt-4',
492
- anthropic: 'claude-3-5-sonnet-20241022',
493
- ollama: 'llama3.2',
494
- openrouter: 'anthropic/claude-3.5-sonnet',
495
- gemini: 'gemini-2.0-flash',
496
- minimax: 'MiniMax-M3',
497
- deepseek: 'deepseek-chat',
498
- kimi: 'moonshot-v1-8k',
499
- glm: 'glm-4-flash',
500
- qwen: 'qwen-plus',
501
- local: 'llama3.2'
502
- };
503
- return defaults[provider];
504
- }
505
-
506
- export function initPiAI(config: PiAIConfig = {}): PiAIModel {
507
- const provider = config.provider || detectProvider();
508
- const model = config.model || detectModel(provider);
509
-
510
- console.log('[PiAIModel] Initializing with provider:', provider, 'model:', model);
511
-
512
- // 如果没有提供 apiKey,从配置文件读取
513
- let apiKey = config.apiKey;
514
- if (!apiKey) {
515
- try {
516
- const configPath = path.join(process.env.HOME || '/tmp', '.bolloon', 'llm-config.json');
517
- const configData = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
518
- const providerConfig = configData.providers[provider];
519
- if (providerConfig?.apiKey) {
520
- apiKey = providerConfig.apiKey;
521
- console.log('[PiAIModel] Loaded apiKey from config for', provider);
522
- }
523
- } catch (e) {
524
- console.log('[PiAIModel] Error reading apiKey from config:', e);
525
- }
526
- }
527
-
528
- modelInstance = new PiAIModel({
529
- provider,
530
- apiKey,
531
- baseUrl: config.baseUrl,
532
- model
533
- });
534
-
535
- console.log('[PiAIModel] Model instance created, provider:', provider);
536
- return modelInstance;
537
- }
538
-
539
- export function getModel(): PiAIModel {
540
- if (!modelInstance) {
541
- throw new Error('PiAI not initialized. Call initPiAI first.');
542
- }
543
- return modelInstance;
544
- }
545
-
546
- export function isModelAvailable(): boolean {
547
- return modelInstance !== null;
548
- }
549
-
550
- export function getMinimax(): PiAIModel {
551
- return getModel();
552
- }
553
-
554
- export function initMinimax(config: PiAIConfig = {}): PiAIModel {
555
- return initPiAI(config);
556
- }
557
-
558
- export { PiAIModel as MinimaxLLM };