@bolloon/bolloon-agent 0.4.27 → 0.4.29

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 (443) hide show
  1. package/bin/bolloon.cjs +18 -148
  2. package/bin/bolloon.cmd +6 -3
  3. package/dist/agents/execution-supervisor.js +21 -0
  4. package/dist/agents/pi-sdk-tools.js +3 -1
  5. package/dist/agents/pi-sdk.js +4 -1
  6. package/dist/agents/task/local-seller.js +149 -0
  7. package/dist/agents/task/report-card.js +146 -0
  8. package/dist/agents/task/resource-advisor.js +182 -0
  9. package/dist/agents/task/task-budget.js +103 -0
  10. package/dist/agents/task/task-runner.js +618 -0
  11. package/dist/agents/x402/goal-run-bridge.js +10 -6
  12. package/dist/agents/x402/resource-contract.js +12 -1
  13. package/dist/cli/update-commands.js +349 -0
  14. package/dist/cli-entry.js +133 -53
  15. package/dist/electron-build/agents/agent-gateway.js +169 -0
  16. package/dist/electron-build/agents/agent-gateway.js.map +1 -0
  17. package/dist/electron-build/agents/agent-identity-store.js +212 -0
  18. package/dist/electron-build/agents/agent-identity-store.js.map +1 -0
  19. package/dist/electron-build/agents/agent-identity.js +196 -0
  20. package/dist/electron-build/agents/agent-identity.js.map +1 -0
  21. package/dist/electron-build/agents/agent-manifest-protocol.js +151 -0
  22. package/dist/electron-build/agents/agent-manifest-protocol.js.map +1 -0
  23. package/dist/electron-build/agents/agent-registry.js +217 -0
  24. package/dist/electron-build/agents/agent-registry.js.map +1 -0
  25. package/dist/electron-build/agents/agent-reputation.js +60 -0
  26. package/dist/electron-build/agents/agent-reputation.js.map +1 -0
  27. package/dist/electron-build/agents/agent-service-client.js +186 -0
  28. package/dist/electron-build/agents/agent-service-client.js.map +1 -0
  29. package/dist/electron-build/agents/browser-cdp.js +765 -0
  30. package/dist/electron-build/agents/browser-cdp.js.map +1 -0
  31. package/dist/electron-build/agents/computer-use.js +341 -0
  32. package/dist/electron-build/agents/computer-use.js.map +1 -0
  33. package/dist/electron-build/agents/constraint-layer.js +210 -0
  34. package/dist/electron-build/agents/constraint-layer.js.map +1 -0
  35. package/dist/electron-build/agents/decision-store.js +292 -0
  36. package/dist/electron-build/agents/decision-store.js.map +1 -0
  37. package/dist/electron-build/agents/deny-pipeline.js +125 -0
  38. package/dist/electron-build/agents/deny-pipeline.js.map +1 -0
  39. package/dist/electron-build/agents/economic-policy.js +172 -0
  40. package/dist/electron-build/agents/economic-policy.js.map +1 -0
  41. package/dist/electron-build/agents/error-classifier.js +125 -0
  42. package/dist/electron-build/agents/error-classifier.js.map +1 -0
  43. package/dist/electron-build/agents/execution-supervisor.js +539 -0
  44. package/dist/electron-build/agents/execution-supervisor.js.map +1 -0
  45. package/dist/electron-build/agents/external-events.js +171 -0
  46. package/dist/electron-build/agents/external-events.js.map +1 -0
  47. package/dist/electron-build/agents/gateway-join.js +315 -0
  48. package/dist/electron-build/agents/gateway-join.js.map +1 -0
  49. package/dist/electron-build/agents/gateway-network.js +505 -0
  50. package/dist/electron-build/agents/gateway-network.js.map +1 -0
  51. package/dist/electron-build/agents/goal-criteria.js +133 -0
  52. package/dist/electron-build/agents/goal-criteria.js.map +1 -0
  53. package/dist/electron-build/agents/goal-resume.js +364 -0
  54. package/dist/electron-build/agents/goal-resume.js.map +1 -0
  55. package/dist/electron-build/agents/goal-store.js +587 -0
  56. package/dist/electron-build/agents/goal-store.js.map +1 -0
  57. package/dist/electron-build/agents/intent-classifier.js +104 -0
  58. package/dist/electron-build/agents/intent-classifier.js.map +1 -0
  59. package/dist/electron-build/agents/iroh-secret.js +70 -0
  60. package/dist/electron-build/agents/iroh-secret.js.map +1 -0
  61. package/dist/electron-build/agents/loop-review.js +101 -0
  62. package/dist/electron-build/agents/loop-review.js.map +1 -0
  63. package/dist/electron-build/agents/memory-recall.js +154 -0
  64. package/dist/electron-build/agents/memory-recall.js.map +1 -0
  65. package/dist/electron-build/agents/p2p-document-tools.js +328 -0
  66. package/dist/electron-build/agents/p2p-document-tools.js.map +1 -0
  67. package/dist/electron-build/agents/parse-tool-call.js +564 -0
  68. package/dist/electron-build/agents/parse-tool-call.js.map +1 -0
  69. package/dist/electron-build/agents/patch-tool.js +205 -0
  70. package/dist/electron-build/agents/patch-tool.js.map +1 -0
  71. package/dist/electron-build/agents/payment-approval.js +183 -0
  72. package/dist/electron-build/agents/payment-approval.js.map +1 -0
  73. package/dist/electron-build/agents/payment-gate.js +139 -0
  74. package/dist/electron-build/agents/payment-gate.js.map +1 -0
  75. package/dist/electron-build/agents/permission-mode.js +124 -0
  76. package/dist/electron-build/agents/permission-mode.js.map +1 -0
  77. package/dist/electron-build/agents/pi-harness.js +268 -0
  78. package/dist/electron-build/agents/pi-harness.js.map +1 -0
  79. package/dist/electron-build/agents/pi-sdk-session-factory.js +117 -0
  80. package/dist/electron-build/agents/pi-sdk-session-factory.js.map +1 -0
  81. package/dist/electron-build/agents/pi-sdk-session-manager.js +335 -0
  82. package/dist/electron-build/agents/pi-sdk-session-manager.js.map +1 -0
  83. package/dist/electron-build/agents/pi-sdk-tools.js +4042 -0
  84. package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -0
  85. package/dist/electron-build/agents/pi-sdk-types.js +17 -0
  86. package/dist/electron-build/agents/pi-sdk-types.js.map +1 -0
  87. package/dist/electron-build/agents/pi-sdk.js +3325 -0
  88. package/dist/electron-build/agents/pi-sdk.js.map +1 -0
  89. package/dist/electron-build/agents/plan-store.js +212 -0
  90. package/dist/electron-build/agents/plan-store.js.map +1 -0
  91. package/dist/electron-build/agents/pre-tool-validator.js +200 -0
  92. package/dist/electron-build/agents/pre-tool-validator.js.map +1 -0
  93. package/dist/electron-build/agents/process-runner.js +148 -0
  94. package/dist/electron-build/agents/process-runner.js.map +1 -0
  95. package/dist/electron-build/agents/react-loop.js +131 -0
  96. package/dist/electron-build/agents/react-loop.js.map +1 -0
  97. package/dist/electron-build/agents/resource-store.js +180 -0
  98. package/dist/electron-build/agents/resource-store.js.map +1 -0
  99. package/dist/electron-build/agents/resource-token.js +118 -0
  100. package/dist/electron-build/agents/resource-token.js.map +1 -0
  101. package/dist/electron-build/agents/resource-wallet.js +84 -0
  102. package/dist/electron-build/agents/resource-wallet.js.map +1 -0
  103. package/dist/electron-build/agents/run-store.js +854 -0
  104. package/dist/electron-build/agents/run-store.js.map +1 -0
  105. package/dist/electron-build/agents/runner-resolver.js +267 -0
  106. package/dist/electron-build/agents/runner-resolver.js.map +1 -0
  107. package/dist/electron-build/agents/session-store.js +294 -0
  108. package/dist/electron-build/agents/session-store.js.map +1 -0
  109. package/dist/electron-build/agents/shell-guard.js +465 -0
  110. package/dist/electron-build/agents/shell-guard.js.map +1 -0
  111. package/dist/electron-build/agents/shell-tool.js +102 -0
  112. package/dist/electron-build/agents/shell-tool.js.map +1 -0
  113. package/dist/electron-build/agents/skill-loader.js +216 -0
  114. package/dist/electron-build/agents/skill-loader.js.map +1 -0
  115. package/dist/electron-build/agents/skill-readiness.js +174 -0
  116. package/dist/electron-build/agents/skill-readiness.js.map +1 -0
  117. package/dist/electron-build/agents/skill-share.js +394 -0
  118. package/dist/electron-build/agents/skill-share.js.map +1 -0
  119. package/dist/electron-build/agents/skill-supervisor-link.js +75 -0
  120. package/dist/electron-build/agents/skill-supervisor-link.js.map +1 -0
  121. package/dist/electron-build/agents/skill-writer.js +347 -0
  122. package/dist/electron-build/agents/skill-writer.js.map +1 -0
  123. package/dist/electron-build/agents/skills-manager.js +763 -0
  124. package/dist/electron-build/agents/skills-manager.js.map +1 -0
  125. package/dist/electron-build/agents/supervisor-host.js +294 -0
  126. package/dist/electron-build/agents/supervisor-host.js.map +1 -0
  127. package/dist/electron-build/agents/task/local-seller.js +188 -0
  128. package/dist/electron-build/agents/task/local-seller.js.map +1 -0
  129. package/dist/electron-build/agents/task/report-card.js +152 -0
  130. package/dist/electron-build/agents/task/report-card.js.map +1 -0
  131. package/dist/electron-build/agents/task/resource-advisor.js +222 -0
  132. package/dist/electron-build/agents/task/resource-advisor.js.map +1 -0
  133. package/dist/electron-build/agents/task/task-budget.js +111 -0
  134. package/dist/electron-build/agents/task/task-budget.js.map +1 -0
  135. package/dist/electron-build/agents/task/task-runner.js +670 -0
  136. package/dist/electron-build/agents/task/task-runner.js.map +1 -0
  137. package/dist/electron-build/agents/task-state.js +266 -0
  138. package/dist/electron-build/agents/task-state.js.map +1 -0
  139. package/dist/electron-build/agents/tool-registry.js +141 -0
  140. package/dist/electron-build/agents/tool-registry.js.map +1 -0
  141. package/dist/electron-build/agents/treasury-bridge.js +165 -0
  142. package/dist/electron-build/agents/treasury-bridge.js.map +1 -0
  143. package/dist/electron-build/agents/user-questions.js +223 -0
  144. package/dist/electron-build/agents/user-questions.js.map +1 -0
  145. package/dist/electron-build/agents/verify-recipe.js +90 -0
  146. package/dist/electron-build/agents/verify-recipe.js.map +1 -0
  147. package/dist/electron-build/agents/workflow-engine.js +222 -0
  148. package/dist/electron-build/agents/workflow-engine.js.map +1 -0
  149. package/dist/electron-build/agents/workflow-pivot-loop.js +988 -0
  150. package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -0
  151. package/dist/electron-build/agents/write-staging.js +133 -0
  152. package/dist/electron-build/agents/write-staging.js.map +1 -0
  153. package/dist/electron-build/agents/x402/goal-run-bridge.js +115 -0
  154. package/dist/electron-build/agents/x402/goal-run-bridge.js.map +1 -0
  155. package/dist/electron-build/agents/x402/milestone-settlement.js +163 -0
  156. package/dist/electron-build/agents/x402/milestone-settlement.js.map +1 -0
  157. package/dist/electron-build/agents/x402/paid-info-protocol.js +274 -0
  158. package/dist/electron-build/agents/x402/paid-info-protocol.js.map +1 -0
  159. package/dist/electron-build/agents/x402/paid-info-store.js +409 -0
  160. package/dist/electron-build/agents/x402/paid-info-store.js.map +1 -0
  161. package/dist/electron-build/agents/x402/paid-info-tools.js +346 -0
  162. package/dist/electron-build/agents/x402/paid-info-tools.js.map +1 -0
  163. package/dist/electron-build/agents/x402/payment-recovery.js +330 -0
  164. package/dist/electron-build/agents/x402/payment-recovery.js.map +1 -0
  165. package/dist/electron-build/agents/x402/resource-contract.js +533 -0
  166. package/dist/electron-build/agents/x402/resource-contract.js.map +1 -0
  167. package/dist/electron-build/agents/x402/settlement-state.js +432 -0
  168. package/dist/electron-build/agents/x402/settlement-state.js.map +1 -0
  169. package/dist/electron-build/agents/x402/trade.js +294 -0
  170. package/dist/electron-build/agents/x402/trade.js.map +1 -0
  171. package/dist/electron-build/agents/x402/transaction-protocol.js +109 -0
  172. package/dist/electron-build/agents/x402/transaction-protocol.js.map +1 -0
  173. package/dist/electron-build/agents/x402/transaction-store.js +404 -0
  174. package/dist/electron-build/agents/x402/transaction-store.js.map +1 -0
  175. package/dist/electron-build/agents/x402/x402Pay.js +377 -0
  176. package/dist/electron-build/agents/x402/x402Pay.js.map +1 -0
  177. package/dist/electron-build/bollharness-integration/context-router-judgment.js +269 -0
  178. package/dist/electron-build/bollharness-integration/context-router-judgment.js.map +1 -0
  179. package/dist/electron-build/bollharness-integration/context-router.js +584 -0
  180. package/dist/electron-build/bollharness-integration/context-router.js.map +1 -0
  181. package/dist/electron-build/bollharness-integration/gate-state-machine.js +362 -0
  182. package/dist/electron-build/bollharness-integration/gate-state-machine.js.map +1 -0
  183. package/dist/electron-build/bollharness-integration/gate-transition-hooks.js +136 -0
  184. package/dist/electron-build/bollharness-integration/gate-transition-hooks.js.map +1 -0
  185. package/dist/electron-build/bollharness-integration/guard-checker.js +400 -0
  186. package/dist/electron-build/bollharness-integration/guard-checker.js.map +1 -0
  187. package/dist/electron-build/bollharness-integration/index.js +123 -0
  188. package/dist/electron-build/bollharness-integration/index.js.map +1 -0
  189. package/dist/electron-build/bollharness-integration/integration.js +531 -0
  190. package/dist/electron-build/bollharness-integration/integration.js.map +1 -0
  191. package/dist/electron-build/bollharness-integration/skill-adapter.js +608 -0
  192. package/dist/electron-build/bollharness-integration/skill-adapter.js.map +1 -0
  193. package/dist/electron-build/bootstrap/bootstrap.js +173 -0
  194. package/dist/electron-build/bootstrap/bootstrap.js.map +1 -0
  195. package/dist/electron-build/bootstrap/context-collector.js +358 -0
  196. package/dist/electron-build/bootstrap/context-collector.js.map +1 -0
  197. package/dist/electron-build/bootstrap/context-hierarchy.js +262 -0
  198. package/dist/electron-build/bootstrap/context-hierarchy.js.map +1 -0
  199. package/dist/electron-build/bootstrap/context-manager.js +211 -0
  200. package/dist/electron-build/bootstrap/context-manager.js.map +1 -0
  201. package/dist/electron-build/bootstrap/context-os.js +277 -0
  202. package/dist/electron-build/bootstrap/context-os.js.map +1 -0
  203. package/dist/electron-build/bootstrap/event-log.js +203 -0
  204. package/dist/electron-build/bootstrap/event-log.js.map +1 -0
  205. package/dist/electron-build/bootstrap/exhaust-scrubber.js +277 -0
  206. package/dist/electron-build/bootstrap/exhaust-scrubber.js.map +1 -0
  207. package/dist/electron-build/bootstrap/lifecycle-hooks.js +282 -0
  208. package/dist/electron-build/bootstrap/lifecycle-hooks.js.map +1 -0
  209. package/dist/electron-build/bootstrap/memory-compressor.js +377 -0
  210. package/dist/electron-build/bootstrap/memory-compressor.js.map +1 -0
  211. package/dist/electron-build/bootstrap/persona-loader.js +219 -0
  212. package/dist/electron-build/bootstrap/persona-loader.js.map +1 -0
  213. package/dist/electron-build/bootstrap/project-context.js +162 -0
  214. package/dist/electron-build/bootstrap/project-context.js.map +1 -0
  215. package/dist/electron-build/bootstrap/project-state.js +205 -0
  216. package/dist/electron-build/bootstrap/project-state.js.map +1 -0
  217. package/dist/electron-build/bootstrap/session-window.js +162 -0
  218. package/dist/electron-build/bootstrap/session-window.js.map +1 -0
  219. package/dist/electron-build/bootstrap/vector-index.js +291 -0
  220. package/dist/electron-build/bootstrap/vector-index.js.map +1 -0
  221. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +22 -0
  222. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js.map +1 -0
  223. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/clobShared.js +86 -0
  224. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/clobShared.js.map +1 -0
  225. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +37 -0
  226. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/createOrder.js.map +1 -0
  227. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +20 -0
  228. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getMarket.js.map +1 -0
  229. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +29 -0
  230. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getOrders.js.map +1 -0
  231. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +28 -0
  232. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js.map +1 -0
  233. package/dist/electron-build/constraint-runtime/src/tools/SafeSDK/deploySafe.js +10 -0
  234. package/dist/electron-build/constraint-runtime/src/tools/SafeSDK/deploySafe.js.map +1 -0
  235. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/autoPay.js +68 -0
  236. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/autoPay.js.map +1 -0
  237. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/createWallet.js +14 -0
  238. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/createWallet.js.map +1 -0
  239. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/getBalance.js +17 -0
  240. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/getBalance.js.map +1 -0
  241. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/importWallet.js +59 -0
  242. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/importWallet.js.map +1 -0
  243. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/sendTransaction.js +29 -0
  244. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/sendTransaction.js.map +1 -0
  245. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/signMessage.js +14 -0
  246. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/signMessage.js.map +1 -0
  247. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/transferToken.js +29 -0
  248. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/transferToken.js.map +1 -0
  249. package/dist/electron-build/constraints/index.js +11 -0
  250. package/dist/electron-build/constraints/index.js.map +1 -0
  251. package/dist/electron-build/context-compaction/auto-compact.js +182 -0
  252. package/dist/electron-build/context-compaction/auto-compact.js.map +1 -0
  253. package/dist/electron-build/context-compaction/budget-gate.js +32 -0
  254. package/dist/electron-build/context-compaction/budget-gate.js.map +1 -0
  255. package/dist/electron-build/context-compaction/budget-reduce.js +39 -0
  256. package/dist/electron-build/context-compaction/budget-reduce.js.map +1 -0
  257. package/dist/electron-build/context-compaction/context-collapse.js +71 -0
  258. package/dist/electron-build/context-compaction/context-collapse.js.map +1 -0
  259. package/dist/electron-build/context-compaction/index.js +38 -0
  260. package/dist/electron-build/context-compaction/index.js.map +1 -0
  261. package/dist/electron-build/context-compaction/microcompact.js +55 -0
  262. package/dist/electron-build/context-compaction/microcompact.js.map +1 -0
  263. package/dist/electron-build/context-compaction/pipeline.js +128 -0
  264. package/dist/electron-build/context-compaction/pipeline.js.map +1 -0
  265. package/dist/electron-build/context-compaction/snip.js +50 -0
  266. package/dist/electron-build/context-compaction/snip.js.map +1 -0
  267. package/dist/electron-build/context-compaction/token-estimator.js +40 -0
  268. package/dist/electron-build/context-compaction/token-estimator.js.map +1 -0
  269. package/dist/electron-build/context-compaction/types.js +21 -0
  270. package/dist/electron-build/context-compaction/types.js.map +1 -0
  271. package/dist/electron-build/cron/tick-lock.js +247 -0
  272. package/dist/electron-build/cron/tick-lock.js.map +1 -0
  273. package/dist/electron-build/documents/reader.js +131 -0
  274. package/dist/electron-build/documents/reader.js.map +1 -0
  275. package/dist/electron-build/documents/store.js +220 -0
  276. package/dist/electron-build/documents/store.js.map +1 -0
  277. package/dist/electron-build/external-engines/delegate-handle.js +76 -0
  278. package/dist/electron-build/external-engines/delegate-handle.js.map +1 -0
  279. package/dist/electron-build/external-engines/delegate.js +225 -0
  280. package/dist/electron-build/external-engines/delegate.js.map +1 -0
  281. package/dist/electron-build/external-engines/discovery.js +448 -0
  282. package/dist/electron-build/external-engines/discovery.js.map +1 -0
  283. package/dist/electron-build/external-engines/types.js +13 -0
  284. package/dist/electron-build/external-engines/types.js.map +1 -0
  285. package/dist/electron-build/hooks/hooks-engine.js +367 -0
  286. package/dist/electron-build/hooks/hooks-engine.js.map +1 -0
  287. package/dist/electron-build/judgeness/reflect.js +100 -0
  288. package/dist/electron-build/judgeness/reflect.js.map +1 -0
  289. package/dist/electron-build/judgeness/store.js +536 -0
  290. package/dist/electron-build/judgeness/store.js.map +1 -0
  291. package/dist/electron-build/judgeness/types.js +21 -0
  292. package/dist/electron-build/judgeness/types.js.map +1 -0
  293. package/dist/electron-build/llm/config-store.js +551 -0
  294. package/dist/electron-build/llm/config-store.js.map +1 -0
  295. package/dist/electron-build/llm/error-lessons.js +76 -0
  296. package/dist/electron-build/llm/error-lessons.js.map +1 -0
  297. package/dist/electron-build/llm/pi-ai.js +830 -0
  298. package/dist/electron-build/llm/pi-ai.js.map +1 -0
  299. package/dist/electron-build/llm/system-prompt/registry.js +318 -0
  300. package/dist/electron-build/llm/system-prompt/registry.js.map +1 -0
  301. package/dist/electron-build/llm/system-prompt/strip-hibsml.js +55 -0
  302. package/dist/electron-build/llm/system-prompt/strip-hibsml.js.map +1 -0
  303. package/dist/electron-build/locales/en.js +32 -0
  304. package/dist/electron-build/locales/en.js.map +1 -0
  305. package/dist/electron-build/locales/zh.js +30 -0
  306. package/dist/electron-build/locales/zh.js.map +1 -0
  307. package/dist/electron-build/lsp/lsp-manager.js +327 -0
  308. package/dist/electron-build/lsp/lsp-manager.js.map +1 -0
  309. package/dist/electron-build/lsp/lsp-tools.js +226 -0
  310. package/dist/electron-build/lsp/lsp-tools.js.map +1 -0
  311. package/dist/electron-build/migration/external-agent-migrator.js +451 -0
  312. package/dist/electron-build/migration/external-agent-migrator.js.map +1 -0
  313. package/dist/electron-build/network/agent-network.js +775 -0
  314. package/dist/electron-build/network/agent-network.js.map +1 -0
  315. package/dist/electron-build/network/goal-event-bridge.js +62 -0
  316. package/dist/electron-build/network/goal-event-bridge.js.map +1 -0
  317. package/dist/electron-build/network/iroh-integration.js +117 -0
  318. package/dist/electron-build/network/iroh-integration.js.map +1 -0
  319. package/dist/electron-build/network/iroh-transport.js +550 -0
  320. package/dist/electron-build/network/iroh-transport.js.map +1 -0
  321. package/dist/electron-build/network/p2p.js +1103 -0
  322. package/dist/electron-build/network/p2p.js.map +1 -0
  323. package/dist/electron-build/network/storage/adapters/json-adapter.js +416 -0
  324. package/dist/electron-build/network/storage/adapters/json-adapter.js.map +1 -0
  325. package/dist/electron-build/network/storage/types.js +18 -0
  326. package/dist/electron-build/network/storage/types.js.map +1 -0
  327. package/dist/electron-build/orbitdb/agent-tools.js +402 -0
  328. package/dist/electron-build/orbitdb/agent-tools.js.map +1 -0
  329. package/dist/electron-build/orbitdb/cid-database.js +284 -0
  330. package/dist/electron-build/orbitdb/cid-database.js.map +1 -0
  331. package/dist/electron-build/orbitdb/context-store.js +99 -0
  332. package/dist/electron-build/orbitdb/context-store.js.map +1 -0
  333. package/dist/electron-build/orbitdb/ipfs-node.js +120 -0
  334. package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -0
  335. package/dist/electron-build/orbitdb/kanban-store.js +299 -0
  336. package/dist/electron-build/orbitdb/kanban-store.js.map +1 -0
  337. package/dist/electron-build/orbitdb/task-store.js +155 -0
  338. package/dist/electron-build/orbitdb/task-store.js.map +1 -0
  339. package/dist/electron-build/orbitdb/trajectory-store.js +194 -0
  340. package/dist/electron-build/orbitdb/trajectory-store.js.map +1 -0
  341. package/dist/electron-build/orbitdb/ui-cid.js +77 -0
  342. package/dist/electron-build/orbitdb/ui-cid.js.map +1 -0
  343. package/dist/electron-build/pi-ecosystem-a2ui/index.js +89 -0
  344. package/dist/electron-build/pi-ecosystem-a2ui/index.js.map +1 -0
  345. package/dist/electron-build/pi-ecosystem-goals/index.js +512 -0
  346. package/dist/electron-build/pi-ecosystem-goals/index.js.map +1 -0
  347. package/dist/electron-build/pi-ecosystem-judgment/adaptive-scan.js +325 -0
  348. package/dist/electron-build/pi-ecosystem-judgment/adaptive-scan.js.map +1 -0
  349. package/dist/electron-build/pi-ecosystem-judgment/causal-judge.js +492 -0
  350. package/dist/electron-build/pi-ecosystem-judgment/causal-judge.js.map +1 -0
  351. package/dist/electron-build/pi-ecosystem-judgment/cleanup.js +167 -0
  352. package/dist/electron-build/pi-ecosystem-judgment/cleanup.js.map +1 -0
  353. package/dist/electron-build/pi-ecosystem-judgment/decision.js +321 -0
  354. package/dist/electron-build/pi-ecosystem-judgment/decision.js.map +1 -0
  355. package/dist/electron-build/pi-ecosystem-judgment/detect-hook.js +175 -0
  356. package/dist/electron-build/pi-ecosystem-judgment/detect-hook.js.map +1 -0
  357. package/dist/electron-build/pi-ecosystem-judgment/distill-prompt.js +232 -0
  358. package/dist/electron-build/pi-ecosystem-judgment/distill-prompt.js.map +1 -0
  359. package/dist/electron-build/pi-ecosystem-judgment/distillation.js +304 -0
  360. package/dist/electron-build/pi-ecosystem-judgment/distillation.js.map +1 -0
  361. package/dist/electron-build/pi-ecosystem-judgment/evolve-judgment.js +176 -0
  362. package/dist/electron-build/pi-ecosystem-judgment/evolve-judgment.js.map +1 -0
  363. package/dist/electron-build/pi-ecosystem-judgment/human-value-pipeline.js +65 -0
  364. package/dist/electron-build/pi-ecosystem-judgment/human-value-pipeline.js.map +1 -0
  365. package/dist/electron-build/pi-ecosystem-judgment/human-value-store.js +808 -0
  366. package/dist/electron-build/pi-ecosystem-judgment/human-value-store.js.map +1 -0
  367. package/dist/electron-build/pi-ecosystem-judgment/index.js +508 -0
  368. package/dist/electron-build/pi-ecosystem-judgment/index.js.map +1 -0
  369. package/dist/electron-build/pi-ecosystem-judgment/injection-gate.js +334 -0
  370. package/dist/electron-build/pi-ecosystem-judgment/injection-gate.js.map +1 -0
  371. package/dist/electron-build/pi-ecosystem-judgment/monitor-gate.js +228 -0
  372. package/dist/electron-build/pi-ecosystem-judgment/monitor-gate.js.map +1 -0
  373. package/dist/electron-build/pi-ecosystem-judgment/value-injection.js +598 -0
  374. package/dist/electron-build/pi-ecosystem-judgment/value-injection.js.map +1 -0
  375. package/dist/electron-build/pi-ecosystem-mcp/index.js +643 -0
  376. package/dist/electron-build/pi-ecosystem-mcp/index.js.map +1 -0
  377. package/dist/electron-build/pi-ecosystem-mcp/ui-tools.js +116 -0
  378. package/dist/electron-build/pi-ecosystem-mcp/ui-tools.js.map +1 -0
  379. package/dist/electron-build/pi-ecosystem-subagents/index.js +352 -0
  380. package/dist/electron-build/pi-ecosystem-subagents/index.js.map +1 -0
  381. package/dist/electron-build/security/builtin-guards.js +133 -0
  382. package/dist/electron-build/security/builtin-guards.js.map +1 -0
  383. package/dist/electron-build/security/context-router-tool.js +111 -0
  384. package/dist/electron-build/security/context-router-tool.js.map +1 -0
  385. package/dist/electron-build/security/input-scanner.js +263 -0
  386. package/dist/electron-build/security/input-scanner.js.map +1 -0
  387. package/dist/electron-build/security/react-harness.js +148 -0
  388. package/dist/electron-build/security/react-harness.js.map +1 -0
  389. package/dist/electron-build/security/tool-gate.js +287 -0
  390. package/dist/electron-build/security/tool-gate.js.map +1 -0
  391. package/dist/electron-build/setup/setup-store.js +648 -0
  392. package/dist/electron-build/setup/setup-store.js.map +1 -0
  393. package/dist/electron-build/social/channels/ChannelManager.js +444 -0
  394. package/dist/electron-build/social/channels/ChannelManager.js.map +1 -0
  395. package/dist/electron-build/social/channels/DiapChannelBridge.js +451 -0
  396. package/dist/electron-build/social/channels/DiapChannelBridge.js.map +1 -0
  397. package/dist/electron-build/social/channels/InterestMatcher.js +135 -0
  398. package/dist/electron-build/social/channels/InterestMatcher.js.map +1 -0
  399. package/dist/electron-build/social/channels/types.js +21 -0
  400. package/dist/electron-build/social/channels/types.js.map +1 -0
  401. package/dist/electron-build/social/global-shared-context.js +368 -0
  402. package/dist/electron-build/social/global-shared-context.js.map +1 -0
  403. package/dist/electron-build/social/heartbeat.js +882 -0
  404. package/dist/electron-build/social/heartbeat.js.map +1 -0
  405. package/dist/electron-build/storage/did-catalog-bridge.js +314 -0
  406. package/dist/electron-build/storage/did-catalog-bridge.js.map +1 -0
  407. package/dist/electron-build/storage/did-catalog.js +272 -0
  408. package/dist/electron-build/storage/did-catalog.js.map +1 -0
  409. package/dist/electron-build/utils/auto-update.js +140 -558
  410. package/dist/electron-build/utils/auto-update.js.map +1 -1
  411. package/dist/electron-build/utils/module-context.js +98 -0
  412. package/dist/electron-build/utils/module-context.js.map +1 -0
  413. package/dist/electron-build/utils/runtime-bootstrap.js +745 -0
  414. package/dist/electron-build/utils/runtime-bootstrap.js.map +1 -0
  415. package/dist/electron-build/utils/update-manager.js +770 -0
  416. package/dist/electron-build/utils/update-manager.js.map +1 -0
  417. package/dist/electron-build/utils/update-state.js +406 -0
  418. package/dist/electron-build/utils/update-state.js.map +1 -0
  419. package/dist/electron-build/utils/version-info.js +562 -0
  420. package/dist/electron-build/utils/version-info.js.map +1 -0
  421. package/dist/electron-build/web/i18n.js +146 -0
  422. package/dist/electron-build/web/i18n.js.map +1 -0
  423. package/dist/electron-build/web/routes-x402-info.js +232 -0
  424. package/dist/electron-build/web/routes-x402-info.js.map +1 -0
  425. package/dist/electron-build/web/server-storage.js +390 -0
  426. package/dist/electron-build/web/server-storage.js.map +1 -0
  427. package/dist/electron-build/web/server-types.js +52 -0
  428. package/dist/electron-build/web/server-types.js.map +1 -0
  429. package/dist/electron-build/web/task-deps.js +41 -0
  430. package/dist/electron-build/web/task-deps.js.map +1 -0
  431. package/dist/index.js +28 -27
  432. package/dist/llm/system-prompt/registry.js +6 -3
  433. package/dist/utils/auto-update.js +138 -525
  434. package/dist/utils/module-context.js +59 -0
  435. package/dist/utils/runtime-bootstrap.js +682 -0
  436. package/dist/utils/update-cli.js +82 -0
  437. package/dist/utils/update-health.js +401 -0
  438. package/dist/utils/update-manager.js +716 -0
  439. package/dist/utils/update-state.js +353 -0
  440. package/dist/utils/version-info.js +510 -0
  441. package/package.json +1 -1
  442. package/scripts/build-cli.js +32 -151
  443. package/scripts/postinstall.js +153 -76
@@ -0,0 +1,808 @@
1
+ "use strict";
2
+ /**
3
+ * Human Value Store - 存储人类判断价值观的机制
4
+ *
5
+ * 核心概念:
6
+ * - 人类判断不是规则,而是价值观表达
7
+ * - 价值观通过具体决策体现,而非抽象陈述
8
+ * - 存储结构化的人类决策,用于价值注入
9
+ *
10
+ * 存储格式:
11
+ * - decision: 具体决策内容
12
+ * - reason: 决策理由(价值观体现)
13
+ * - context: 决策场景
14
+ * - outcome: 决策结果
15
+ * - values: 提取的价值观标签
16
+ */
17
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ var desc = Object.getOwnPropertyDescriptor(m, k);
20
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
21
+ desc = { enumerable: true, get: function() { return m[k]; } };
22
+ }
23
+ Object.defineProperty(o, k2, desc);
24
+ }) : (function(o, m, k, k2) {
25
+ if (k2 === undefined) k2 = k;
26
+ o[k2] = m[k];
27
+ }));
28
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
29
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
30
+ }) : function(o, v) {
31
+ o["default"] = v;
32
+ });
33
+ var __importStar = (this && this.__importStar) || (function () {
34
+ var ownKeys = function(o) {
35
+ ownKeys = Object.getOwnPropertyNames || function (o) {
36
+ var ar = [];
37
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
38
+ return ar;
39
+ };
40
+ return ownKeys(o);
41
+ };
42
+ return function (mod) {
43
+ if (mod && mod.__esModule) return mod;
44
+ var result = {};
45
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
46
+ __setModuleDefault(result, mod);
47
+ return result;
48
+ };
49
+ })();
50
+ Object.defineProperty(exports, "__esModule", { value: true });
51
+ exports.DEFAULT_TTL_DAYS = void 0;
52
+ exports.initializeValueStore = initializeValueStore;
53
+ exports.migrateJudgmentInPlace = migrateJudgmentInPlace;
54
+ exports.migrateJudgmentImmutable = migrateJudgmentImmutable;
55
+ exports.storeHumanJudgment = storeHumanJudgment;
56
+ exports.learnFromTrajectory = learnFromTrajectory;
57
+ exports.learnFromFeedback = learnFromFeedback;
58
+ exports.learnFromCorrection = learnFromCorrection;
59
+ exports.updateJudgment = updateJudgment;
60
+ exports.listJudgmentsByStatus = listJudgmentsByStatus;
61
+ exports.hashDecision = hashDecision;
62
+ exports.findRecentSimilarDecisions = findRecentSimilarDecisions;
63
+ exports.batchUpdateJudgments = batchUpdateJudgments;
64
+ exports.updateJudgmentStatus = updateJudgmentStatus;
65
+ exports.deleteJudgment = deleteJudgment;
66
+ exports.loadAllJudgments = loadAllJudgments;
67
+ exports.getRelevantValues = getRelevantValues;
68
+ exports.getValueProfile = getValueProfile;
69
+ exports.getPriorityRules = getPriorityRules;
70
+ exports.getValueStats = getValueStats;
71
+ exports.clearCache = clearCache;
72
+ const fs = __importStar(require("fs/promises"));
73
+ const os = __importStar(require("os"));
74
+ const path = __importStar(require("path"));
75
+ const crypto_1 = require("crypto");
76
+ // 2026-07-06: 模块级 const 改成 getter 函数 — vitest 会预设 process.env.HOME 为真实 home,
77
+ // 在测试 beforeAll 修改 HOME 前已经捕获路径, 之前所有 test fixture 都污染 ~/.bolloon.
78
+ // 改成运行时 getter 才能正确响应 test override, 不再污染真实数据.
79
+ function getValueStoreDir() {
80
+ return path.join(process.env.HOME || os.homedir() || '/tmp', '.bolloon', 'human-values');
81
+ }
82
+ function getJudgmentsFile() {
83
+ return path.join(getValueStoreDir(), 'judgments.json');
84
+ }
85
+ function getProfileFile() {
86
+ return path.join(getValueStoreDir(), 'profile.json');
87
+ }
88
+ function getPatternsFile() {
89
+ return path.join(getValueStoreDir(), 'patterns.json');
90
+ }
91
+ function getCounterfactualFile() {
92
+ return path.join(getValueStoreDir(), 'counterfactual-audit.jsonl');
93
+ }
94
+ // In-memory cache
95
+ let judgmentCache = [];
96
+ let valueProfileCache = new Map();
97
+ let initialized = false;
98
+ function generateId() {
99
+ return `hv-${Date.now()}-${Math.random().toString(36).substring(2, 8)}`;
100
+ }
101
+ // ============================================================
102
+ // 存储操作
103
+ // ============================================================
104
+ /**
105
+ * 初始化存储(创建目录和空文件)
106
+ */
107
+ async function initializeValueStore() {
108
+ if (initialized)
109
+ return;
110
+ try {
111
+ await fs.mkdir(getValueStoreDir(), { recursive: true });
112
+ try {
113
+ await fs.access(getJudgmentsFile());
114
+ }
115
+ catch {
116
+ await fs.writeFile(getJudgmentsFile(), JSON.stringify([], null, 2), 'utf-8');
117
+ }
118
+ initialized = true;
119
+ console.log('[HumanValueStore] Initialized at', getValueStoreDir());
120
+ }
121
+ catch (error) {
122
+ console.error('[HumanValueStore] Initialization failed:', error);
123
+ throw error;
124
+ }
125
+ }
126
+ // ============================================================
127
+ // 阶段 2: Causal-judge 4 字段 migration
128
+ // ============================================================
129
+ /** TTL 默认 90 天 (用户可在 createUI 显式覆盖) */
130
+ exports.DEFAULT_TTL_DAYS = 90;
131
+ /** 已 migration 标记 (避免每次 loadAllJudgments 都重写盘) */
132
+ let migratedOnce = false;
133
+ /**
134
+ * 给老数据补 4 字段默认值 (in-place).
135
+ * - expiresAt: createdAt + 90 天
136
+ * - appliesTo: undefined (适用所有)
137
+ * - conflictWith: []
138
+ * - causalChain: undefined
139
+ *
140
+ * 返回 true 表示这次实际有 migration (写盘时持久化), false 表示无变化
141
+ */
142
+ function migrateJudgmentInPlace(j) {
143
+ let changed = false;
144
+ if (j.expiresAt === undefined) {
145
+ const base = new Date(j.timestamp || Date.now());
146
+ base.setDate(base.getDate() + exports.DEFAULT_TTL_DAYS);
147
+ j.expiresAt = base.toISOString();
148
+ changed = true;
149
+ }
150
+ if (j.conflictWith === undefined) {
151
+ j.conflictWith = [];
152
+ changed = true;
153
+ }
154
+ // appliesTo / causalChain 留空不补 (语义性, 由 causal-judge 自动填)
155
+ return changed;
156
+ }
157
+ /**
158
+ * 不可变版本: 返回新对象, 不 mutate 原 j. 供测试/谨慎场景用.
159
+ */
160
+ function migrateJudgmentImmutable(j) {
161
+ const next = { ...j };
162
+ migrateJudgmentInPlace(next);
163
+ return next;
164
+ }
165
+ /**
166
+ * 存储人类判断
167
+ */
168
+ async function storeHumanJudgment(judgment) {
169
+ const now = new Date().toISOString();
170
+ // 阶段 2: 4 字段默认值补全 (新 judgment)
171
+ if (!judgment.expiresAt) {
172
+ const expireDate = new Date();
173
+ expireDate.setDate(expireDate.getDate() + exports.DEFAULT_TTL_DAYS);
174
+ judgment.expiresAt = expireDate.toISOString();
175
+ }
176
+ if (!Array.isArray(judgment.conflictWith)) {
177
+ judgment.conflictWith = [];
178
+ }
179
+ // 留空: appliesTo / causalChain 由后续 causal-judge 自动填
180
+ // 2026-07-06: 写入时质量门 — 检测到测试灌水数据, 默认 status='rejected' 静默丢弃
181
+ // 启发式集见 ./cleanup.ts. 既不抛错(避免 D-hook 阻塞), 也不污染 active set.
182
+ // 注意: 只在 isJunkJudgment 命中时显式设 status; 其余情况下让 migration layer 填默认 'active'
183
+ // 这样老 schema migration 测试 (验 j.status === undefined) 不会被破坏.
184
+ let initialStatus = undefined;
185
+ try {
186
+ const { isJunkJudgment } = await Promise.resolve().then(() => __importStar(require('./cleanup.js')));
187
+ if (isJunkJudgment({ ...judgment, id: '', timestamp: '' })) {
188
+ console.warn(`[HumanValueStore] junk detected, marking rejected: "${String(judgment.decision).substring(0, 40)}..."`);
189
+ initialStatus = 'rejected';
190
+ }
191
+ }
192
+ catch { /* cleanup module load failed - allow store */ }
193
+ const fullJudgment = {
194
+ ...judgment,
195
+ id: generateId(),
196
+ timestamp: now,
197
+ ...(initialStatus ? { status: initialStatus } : {}),
198
+ };
199
+ // 加载现有判断
200
+ const judgments = await loadAllJudgments();
201
+ judgments.push(fullJudgment);
202
+ // 保存
203
+ await saveJudgments(judgments);
204
+ // 更新价值画像
205
+ await updateValueProfile(fullJudgment);
206
+ console.log(`[HumanValueStore] Stored judgment ${fullJudgment.id}: ${fullJudgment.decision.substring(0, 50)}...`);
207
+ return fullJudgment;
208
+ }
209
+ /**
210
+ * 从决策结果学习(轨迹学习)
211
+ */
212
+ async function learnFromTrajectory(trajectory) {
213
+ // 提取价值观
214
+ const values = extractValuesFromTrajectory(trajectory);
215
+ return storeHumanJudgment({
216
+ decision: trajectory.chosen_action,
217
+ decision_type: trajectory.approved ? 'approve' : 'reject',
218
+ reasons: [trajectory.outcome],
219
+ values_derived: values,
220
+ context: inferContext(trajectory.situation),
221
+ outcome: {
222
+ approved: trajectory.approved,
223
+ feedback: trajectory.outcome
224
+ },
225
+ metadata: {
226
+ source: 'trajectory',
227
+ confidence: trajectory.approved ? 0.9 : 0.7,
228
+ revisable: true
229
+ }
230
+ });
231
+ }
232
+ /**
233
+ * 从批准/拒绝学习
234
+ */
235
+ async function learnFromFeedback(action, approved, reason) {
236
+ return storeHumanJudgment({
237
+ decision: action,
238
+ decision_type: approved ? 'approve' : 'reject',
239
+ reasons: reason ? [reason] : [],
240
+ values_derived: approved ? inferPositiveValues(action) : inferNegativeValues(action),
241
+ context: inferContext(action),
242
+ outcome: { approved },
243
+ metadata: {
244
+ source: 'explicit',
245
+ confidence: 0.8,
246
+ revisable: true
247
+ }
248
+ });
249
+ }
250
+ /**
251
+ * 从建议修正学习
252
+ */
253
+ async function learnFromCorrection(original, corrected, reason) {
254
+ return storeHumanJudgment({
255
+ decision: corrected,
256
+ decision_type: 'modify',
257
+ reasons: [reason],
258
+ values_derived: extractValuesFromCorrection(original, corrected),
259
+ context: inferContext(original),
260
+ outcome: { approved: true, revised: true },
261
+ metadata: {
262
+ source: 'trajectory',
263
+ confidence: 0.85,
264
+ revisable: false
265
+ }
266
+ });
267
+ }
268
+ // ============================================================
269
+ // 读取操作
270
+ // ============================================================
271
+ /**
272
+ * 修改一个判断 (手动编辑). 允许改: decision, reasons, context, values_derived, decision_type, confidence.
273
+ * 不能改 id, timestamp (id 不暴露, 靠 id 查).
274
+ */
275
+ async function updateJudgment(id, patch) {
276
+ const judgments = await loadAllJudgments();
277
+ const idx = judgments.findIndex((j) => j.id === id);
278
+ if (idx < 0)
279
+ return null;
280
+ const cur = judgments[idx];
281
+ const next = {
282
+ ...cur,
283
+ ...(patch.decision !== undefined ? { decision: patch.decision } : {}),
284
+ ...(patch.decision_type !== undefined ? { decision_type: patch.decision_type } : {}),
285
+ ...(patch.reasons !== undefined ? { reasons: patch.reasons } : {}),
286
+ ...(patch.values_derived !== undefined ? { values_derived: patch.values_derived } : {}),
287
+ ...(patch.context !== undefined ? { context: { ...cur.context, ...patch.context } } : {}),
288
+ ...(patch.outcome !== undefined ? { outcome: { ...cur.outcome, ...patch.outcome } } : {}),
289
+ ...(patch.status !== undefined ? { status: patch.status } : {}),
290
+ ...(patch.supersededBy !== undefined ? { supersededBy: patch.supersededBy } : {}),
291
+ ...(patch.evolutionReason !== undefined ? { evolutionReason: patch.evolutionReason } : {}),
292
+ ...(patch.evolvedAt !== undefined ? { evolvedAt: patch.evolvedAt } : {}),
293
+ };
294
+ judgments[idx] = next;
295
+ await saveJudgments(judgments);
296
+ // 价值画像缓存失效 (内容变了画像也得重算)
297
+ valueProfileCache.clear();
298
+ return next;
299
+ }
300
+ /**
301
+ * 按 status 过滤查询 (用于判断力库的 active/superseded tab)
302
+ * status='all' 或不传 → 返回所有
303
+ */
304
+ async function listJudgmentsByStatus(status) {
305
+ const judgments = await loadAllJudgments();
306
+ if (!status || status === 'all')
307
+ return judgments;
308
+ return judgments.filter((j) => (j.status ?? 'active') === status);
309
+ }
310
+ /**
311
+ * 内容 hash 用于去重窗口 (24h 滑窗内撞 hash 视为重复)
312
+ * 归一化: 去标点 + 折叠空白 + lowercase
313
+ * 64-bit 截断: 1 万条库碰撞率 < 1e-13, 够用
314
+ */
315
+ function hashDecision(decision) {
316
+ const normalized = decision
317
+ .toLowerCase()
318
+ .replace(/[\s,.,。、!?!?""''()()::;;\-—_]/g, '')
319
+ .trim();
320
+ return (0, crypto_1.createHash)('sha256').update(normalized).digest('hex').slice(0, 16);
321
+ }
322
+ /**
323
+ * 在 withinMs 时间内查找与 decision hash 相同的判断力
324
+ * - 默认扫全库 (100 条库 < 1ms, 不建索引)
325
+ * - 可按 channelId 隔离 (判断力的 context.domain 是 'channel:xxx' 格式)
326
+ * - 当前实现只做精确 hash 匹配, 不做相似度评分; 撞 hash 即视为重复
327
+ */
328
+ async function findRecentSimilarDecisions(decision, withinMs, options) {
329
+ const judgments = await loadAllJudgments();
330
+ const targetHash = hashDecision(decision);
331
+ const cutoff = Date.now() - withinMs;
332
+ const statusFilter = options?.status ?? 'all';
333
+ const wantChannel = options?.channelId ? `channel:${options.channelId}` : null;
334
+ const out = [];
335
+ for (const j of judgments) {
336
+ if (statusFilter !== 'all' && (j.status ?? 'active') !== statusFilter)
337
+ continue;
338
+ if (new Date(j.timestamp).getTime() <= cutoff)
339
+ continue;
340
+ if (wantChannel) {
341
+ const jChannel = j.context?.domain;
342
+ if (jChannel !== wantChannel)
343
+ continue;
344
+ }
345
+ if (hashDecision(j.decision) === targetHash) {
346
+ out.push({ id: j.id, decision: j.decision, timestamp: j.timestamp, similarity: 1.0 });
347
+ }
348
+ }
349
+ return out;
350
+ }
351
+ /**
352
+ * 批量更新 (用于演化对齐后批量标 superseded)
353
+ * 写完文件 + 清缓存
354
+ * 返回成功更新的条数
355
+ */
356
+ async function batchUpdateJudgments(updates) {
357
+ const judgments = await loadAllJudgments();
358
+ const notFound = [];
359
+ let updated = 0;
360
+ const next = judgments.map((cur) => {
361
+ const u = updates.find((x) => x.id === cur.id);
362
+ if (!u)
363
+ return cur;
364
+ updated++;
365
+ return { ...cur, ...u.patch };
366
+ });
367
+ for (const u of updates) {
368
+ if (!judgments.some((j) => j.id === u.id))
369
+ notFound.push(u.id);
370
+ }
371
+ if (updated > 0) {
372
+ await saveJudgments(next);
373
+ valueProfileCache.clear();
374
+ }
375
+ return { updated, notFound };
376
+ }
377
+ /**
378
+ * 更新单条 judgment (给"标记 rejected"等用)
379
+ * id 不变; 不能改 id, timestamp
380
+ * 允许改的字段: decision, decision_type, reasons, values_derived, context, outcome, status, supersededBy, evolutionReason, evolvedAt
381
+ */
382
+ async function updateJudgmentStatus(id, status, extra) {
383
+ return updateJudgment(id, {
384
+ status,
385
+ ...(extra?.supersededBy !== undefined ? { supersededBy: extra.supersededBy } : {}),
386
+ ...(extra?.evolutionReason !== undefined ? { evolutionReason: extra.evolutionReason } : {}),
387
+ ...(extra ? { evolvedAt: new Date().toISOString() } : {}),
388
+ });
389
+ }
390
+ /**
391
+ * 删除一个判断.
392
+ */
393
+ async function deleteJudgment(id) {
394
+ const judgments = await loadAllJudgments();
395
+ const idx = judgments.findIndex((j) => j.id === id);
396
+ if (idx < 0)
397
+ return false;
398
+ judgments.splice(idx, 1);
399
+ await saveJudgments(judgments);
400
+ valueProfileCache.clear();
401
+ return true;
402
+ }
403
+ /**
404
+ * 加载所有人类判断
405
+ */
406
+ async function loadAllJudgments() {
407
+ if (!initialized) {
408
+ await initializeValueStore();
409
+ }
410
+ if (judgmentCache.length > 0) {
411
+ // 早返回路径也要确保每条都有 status (防御性, 防止 saveJudgments 路径异常)
412
+ const needs = judgmentCache.some((j) => j.status === undefined);
413
+ if (needs) {
414
+ judgmentCache = judgmentCache.map((j) => j.status === undefined ? { ...j, status: 'active' } : j);
415
+ }
416
+ // 阶段 2: 4 字段 migration (in-place, 仅一次)
417
+ if (!migratedOnce) {
418
+ let anyChanged = false;
419
+ judgmentCache.forEach((j) => {
420
+ if (migrateJudgmentInPlace(j))
421
+ anyChanged = true;
422
+ });
423
+ if (anyChanged) {
424
+ await saveJudgments(judgmentCache).catch(() => { });
425
+ }
426
+ migratedOnce = true;
427
+ }
428
+ return [...judgmentCache];
429
+ }
430
+ try {
431
+ const content = await fs.readFile(getJudgmentsFile(), 'utf-8');
432
+ const parsed = JSON.parse(content);
433
+ judgmentCache = parsed.map((j) => (j.status === undefined ? { ...j, status: 'active' } : j));
434
+ // 阶段 2: 4 字段 migration (in-place, 仅一次)
435
+ if (!migratedOnce) {
436
+ let anyChanged = false;
437
+ judgmentCache.forEach((j) => {
438
+ if (migrateJudgmentInPlace(j))
439
+ anyChanged = true;
440
+ });
441
+ if (anyChanged) {
442
+ await saveJudgments(judgmentCache).catch(() => { });
443
+ }
444
+ migratedOnce = true;
445
+ }
446
+ return [...judgmentCache];
447
+ }
448
+ catch {
449
+ judgmentCache = [];
450
+ return [];
451
+ }
452
+ }
453
+ /**
454
+ * 获取相关价值观
455
+ * 两路召回 (P2 升级):
456
+ * 1. 关键词匹配 (精确, 高权重)
457
+ * 2. bigram 软相似度 (措辞改写也能命中, 低权重)
458
+ * - 关键词完全匹配 → weight 不衰减
459
+ * - 软相似 > 0.4 → weight * 0.7 (留作辅助, 不冲掉精确命中)
460
+ */
461
+ async function getRelevantValues(context, domain, currentTool) {
462
+ const allJudgments = await loadAllJudgments();
463
+ // 2026-07-06: 过滤 active — 之前 superseded/rejected 也会进检索, 污染上下文
464
+ // 配合 storeHumanJudgment 写入时设 status='rejected' 拦截 junk data (见 cleanup.ts)
465
+ const judgments = allJudgments.filter((j) => (j.status ?? 'active') === 'active');
466
+ const keywords = context.split(/[\s,,、]+/).filter(k => k.length >= 2);
467
+ const contextLower = context.toLowerCase();
468
+ const relevant = [];
469
+ for (const j of judgments) {
470
+ if (domain && j.context.domain !== domain)
471
+ continue;
472
+ // 阶段 2: appliesTo 路由 — 不匹配当前 tool 类别的 judgment 直接跳过
473
+ // appliesTo 为空 / undefined = 适用所有 (默认)
474
+ if (currentTool && Array.isArray(j.appliesTo) && j.appliesTo.length > 0) {
475
+ if (!j.appliesTo.includes(currentTool))
476
+ continue;
477
+ }
478
+ let matched = false;
479
+ let soft = 0;
480
+ if (keywords.length === 0) {
481
+ if (j.decision.toLowerCase().includes(contextLower) ||
482
+ j.reasons.some(r => r.toLowerCase().includes(contextLower)) ||
483
+ j.values_derived.some(v => v.value.toLowerCase().includes(contextLower))) {
484
+ matched = true;
485
+ }
486
+ }
487
+ else {
488
+ const decisionLower = j.decision.toLowerCase();
489
+ const reasonsLower = j.reasons.map(r => r.toLowerCase());
490
+ // values_derived[i].value 也是索引一部分 (如 'security-first', 'privacy-first')
491
+ const valueTokens = j.values_derived.map(v => v.value.toLowerCase());
492
+ for (const kw of keywords) {
493
+ const kwLower = kw.toLowerCase();
494
+ if (decisionLower.includes(kwLower) ||
495
+ reasonsLower.some(r => r.includes(kwLower)) ||
496
+ valueTokens.some(vt => vt.includes(kwLower))) {
497
+ matched = true;
498
+ }
499
+ else {
500
+ // P2: 软相似度召回 — 关键词没命中, 但 bigram 相似度阈值
501
+ // - 长句 (>8 字符): 阈值 0.4 (合理召回, 不易误触)
502
+ // - 短句 (≤8 字符): 阈值 0.15 (bigram 模式天然偏低, 放宽避免漏召)
503
+ const threshold = kw.length > 8 ? 0.4 : 0.15;
504
+ const simA = softBigramSimilarity(kw, j.decision);
505
+ const simReason = Math.max(0, ...j.reasons.map(r => softBigramSimilarity(kw, r)));
506
+ const simValue = Math.max(0, ...valueTokens.map(vt => softBigramSimilarity(kw, vt)));
507
+ const best = Math.max(simA, simReason, simValue);
508
+ if (best > threshold)
509
+ soft = Math.max(soft, best);
510
+ }
511
+ }
512
+ }
513
+ if (matched)
514
+ relevant.push({ j, softWeight: 1.0 });
515
+ else if (soft > 0)
516
+ relevant.push({ j, softWeight: soft });
517
+ }
518
+ const valueMap = new Map();
519
+ for (const { j, softWeight } of relevant) {
520
+ for (const v of j.values_derived) {
521
+ const key = `${v.category}:${v.value}`;
522
+ const existing = valueMap.get(key);
523
+ if (existing) {
524
+ existing.count++;
525
+ existing.tag.weight = Math.min(1, existing.tag.weight + 0.1);
526
+ existing.softFactor = Math.max(existing.softFactor, softWeight);
527
+ }
528
+ else {
529
+ valueMap.set(key, {
530
+ tag: { ...v },
531
+ count: 1,
532
+ softFactor: softWeight,
533
+ });
534
+ }
535
+ }
536
+ }
537
+ return Array.from(valueMap.values())
538
+ .map(({ tag, count, softFactor }) => ({
539
+ ...tag,
540
+ // 软命中: 额外乘 0.7 衰减, 避免冲掉精确命中的排序
541
+ weight: tag.weight * Math.min(1, count / 3) * (softFactor >= 0.999 ? 1.0 : 0.7),
542
+ }))
543
+ .sort((a, b) => b.weight - a.weight)
544
+ .slice(0, 10);
545
+ }
546
+ /**
547
+ * P2 软相似度: 用于"关键词未命中但措辞相近"的兜底召回
548
+ * - 与 evolve-judgment.ts 的 jaccardSimilarity 算法一致 (避免循环依赖, inline 一份)
549
+ * - 短句 (<8 字符) 走 bigram, 长句走单字 set
550
+ */
551
+ function softBigramSimilarity(a, b) {
552
+ if (!a || !b)
553
+ return 0;
554
+ const normalize = (s) => s.toLowerCase().replace(/[\s,.,。、!?!?""''()()::;;\-—_]/g, '').trim();
555
+ const textA = normalize(a);
556
+ const textB = normalize(b);
557
+ if (textA.length === 0 || textB.length === 0)
558
+ return 0;
559
+ const grams = (s) => {
560
+ if (s.length < 8) {
561
+ const out = new Set();
562
+ for (let i = 0; i < s.length - 1; i++)
563
+ out.add(s.slice(i, i + 2));
564
+ for (const c of s)
565
+ out.add(c);
566
+ return out;
567
+ }
568
+ return new Set(s);
569
+ };
570
+ const setA = grams(textA);
571
+ const setB = grams(textB);
572
+ let inter = 0;
573
+ for (const c of setA)
574
+ if (setB.has(c))
575
+ inter++;
576
+ const union = setA.size + setB.size - inter;
577
+ return union === 0 ? 0 : inter / union;
578
+ }
579
+ /**
580
+ * 获取价值画像
581
+ */
582
+ async function getValueProfile(agentId) {
583
+ if (valueProfileCache.has(agentId)) {
584
+ return valueProfileCache.get(agentId);
585
+ }
586
+ const judgments = await loadAllJudgments();
587
+ const agentJudgments = judgments.filter(j => j.metadata.source !== 'trajectory' || j.id.includes(agentId));
588
+ const profile = buildValueProfile(agentId, agentJudgments);
589
+ valueProfileCache.set(agentId, profile);
590
+ return profile;
591
+ }
592
+ /**
593
+ * 获取优先级规则
594
+ */
595
+ async function getPriorityRules() {
596
+ const judgments = await loadAllJudgments();
597
+ const seen = new Set();
598
+ return judgments
599
+ .filter(j => {
600
+ if (j.metadata.confidence <= 0.7)
601
+ return false;
602
+ const key = `${j.context.domain}:${j.decision}`;
603
+ if (seen.has(key))
604
+ return false;
605
+ seen.add(key);
606
+ return true;
607
+ })
608
+ .map(j => ({
609
+ when: j.context.domain,
610
+ prefer: j.decision,
611
+ reason: j.reasons[0] || 'No reason provided',
612
+ weight: j.metadata.confidence
613
+ }))
614
+ .slice(0, 20);
615
+ }
616
+ // ============================================================
617
+ // 私有函数
618
+ // ============================================================
619
+ async function saveJudgments(judgments) {
620
+ await fs.mkdir(getValueStoreDir(), { recursive: true });
621
+ await fs.writeFile(getJudgmentsFile(), JSON.stringify(judgments, null, 2), 'utf-8');
622
+ // 让 loadAllJudgments 下次重新读盘, 避免缓存与磁盘脱节
623
+ // 同时在写盘时也补 status 默认值, 防止 loadAllJudgments 走早返回路径时绕过迁移
624
+ // 关键: 用浅拷贝 + spread 避免 mutate 入参 (storeHumanJudgment 返回的 fullJudgment 也会被改)
625
+ judgmentCache = judgments.map((j) => {
626
+ const next = { ...j };
627
+ if (next.status === undefined)
628
+ next.status = 'active';
629
+ migrateJudgmentInPlace(next);
630
+ return next;
631
+ });
632
+ }
633
+ function buildValueProfile(agentId, judgments) {
634
+ const profile = {
635
+ agent_id: agentId,
636
+ decision_count: judgments.length,
637
+ quality_focus: 0.5,
638
+ efficiency_focus: 0.5,
639
+ safety_focus: 0.5,
640
+ collaboration_focus: 0.5,
641
+ learning_focus: 0.5,
642
+ priority_rules: [],
643
+ decision_patterns: [],
644
+ preferences: [],
645
+ last_updated: new Date().toISOString()
646
+ };
647
+ // 计算各维度权重
648
+ const dimensionCounts = {};
649
+ for (const j of judgments) {
650
+ for (const v of j.values_derived) {
651
+ dimensionCounts[`${v.category}_${v.value}`] =
652
+ (dimensionCounts[`${v.category}_${v.value}`] || 0) + v.weight;
653
+ }
654
+ }
655
+ // 更新各维度分数
656
+ for (const [key, weight] of Object.entries(dimensionCounts)) {
657
+ const [category] = key.split('_');
658
+ const dimensionKey = `${category}_focus`;
659
+ if (dimensionKey in profile) {
660
+ profile[dimensionKey] = Math.min(1, weight / judgments.length);
661
+ }
662
+ }
663
+ // 提取决策模式
664
+ const patternMap = new Map();
665
+ for (const j of judgments) {
666
+ const pattern = j.decision_type;
667
+ patternMap.set(pattern, (patternMap.get(pattern) || 0) + 1);
668
+ }
669
+ for (const [pattern, count] of patternMap) {
670
+ profile.decision_patterns.push({
671
+ pattern,
672
+ description: `Tendency to ${pattern}`,
673
+ frequency: count,
674
+ success_rate: judgments.filter(j => j.decision_type === pattern && j.outcome?.approved).length / count
675
+ });
676
+ }
677
+ // 提取优先级规则
678
+ profile.priority_rules = judgments
679
+ .filter(j => j.metadata.confidence > 0.8)
680
+ .map(j => ({
681
+ when: j.context.domain,
682
+ prefer: j.decision,
683
+ reason: j.reasons[0] || '',
684
+ weight: j.metadata.confidence
685
+ }));
686
+ return profile;
687
+ }
688
+ async function updateValueProfile(judgment) {
689
+ // 简单更新:标记缓存需要刷新
690
+ valueProfileCache.clear();
691
+ }
692
+ function extractValuesFromTrajectory(trajectory) {
693
+ const values = [];
694
+ const action = trajectory.chosen_action.toLowerCase();
695
+ const outcome = trajectory.outcome.toLowerCase();
696
+ // 从行动推断价值观
697
+ if (action.includes('review') || action.includes('检查') || action.includes('验证')) {
698
+ values.push({ category: 'quality', value: 'code-review', weight: 0.8 });
699
+ }
700
+ if (action.includes('test') || action.includes('测试')) {
701
+ values.push({ category: 'quality', value: 'testing', weight: 0.8 });
702
+ }
703
+ if (action.includes('security') || action.includes('安全')) {
704
+ values.push({ category: 'safety', value: 'security-first', weight: 0.9 });
705
+ }
706
+ if (action.includes('refactor') || action.includes('重构')) {
707
+ values.push({ category: 'quality', value: 'maintainability', weight: 0.7 });
708
+ }
709
+ if (action.includes('simple') || action.includes('简单')) {
710
+ values.push({ category: 'efficiency', value: 'simplicity', weight: 0.8 });
711
+ }
712
+ // 从结果推断价值观
713
+ if (outcome.includes('success') || outcome.includes('成功')) {
714
+ values.push({ category: 'learning', value: 'success-validation', weight: 0.6 });
715
+ }
716
+ if (outcome.includes('fail') || outcome.includes('失败')) {
717
+ values.push({ category: 'learning', value: 'failure-learning', weight: 0.7 });
718
+ }
719
+ return values.length > 0 ? values : [{ category: 'quality', value: 'general', weight: 0.5 }];
720
+ }
721
+ function inferContext(action) {
722
+ const actionLower = action.toLowerCase();
723
+ let domain = 'general';
724
+ if (actionLower.includes('code') || actionLower.includes('代码'))
725
+ domain = 'code';
726
+ else if (actionLower.includes('arch') || actionLower.includes('架构'))
727
+ domain = 'architecture';
728
+ else if (actionLower.includes('security') || actionLower.includes('安全'))
729
+ domain = 'security';
730
+ else if (actionLower.includes('test') || actionLower.includes('测试'))
731
+ domain = 'testing';
732
+ let complexity = 'moderate';
733
+ if (actionLower.includes('simple') || action.length < 50)
734
+ complexity = 'simple';
735
+ if (actionLower.includes('complex') || action.length > 200)
736
+ complexity = 'complex';
737
+ return {
738
+ domain,
739
+ complexity,
740
+ stakes: 'medium',
741
+ time_pressure: 'low'
742
+ };
743
+ }
744
+ function inferPositiveValues(action) {
745
+ return extractValuesFromTrajectory({
746
+ situation: action,
747
+ chosen_action: action,
748
+ outcome: 'approved',
749
+ approved: true
750
+ });
751
+ }
752
+ function inferNegativeValues(action) {
753
+ return extractValuesFromTrajectory({
754
+ situation: action,
755
+ chosen_action: action,
756
+ outcome: 'rejected',
757
+ approved: false
758
+ }).map(v => ({ ...v, weight: v.weight * 0.5 }));
759
+ }
760
+ function extractValuesFromCorrection(original, corrected) {
761
+ const values = [];
762
+ // 检测修正类型
763
+ if (corrected.includes('security') || corrected.includes('安全')) {
764
+ values.push({ category: 'safety', value: 'security-fix', weight: 0.9 });
765
+ }
766
+ if (corrected.includes('test') && !original.includes('test')) {
767
+ values.push({ category: 'quality', value: 'add-testing', weight: 0.8 });
768
+ }
769
+ if (corrected.length < original.length) {
770
+ values.push({ category: 'efficiency', value: 'simplification', weight: 0.7 });
771
+ }
772
+ return values.length > 0 ? values : [{ category: 'quality', value: 'general-fix', weight: 0.6 }];
773
+ }
774
+ // ============================================================
775
+ // 统计
776
+ // ============================================================
777
+ async function getValueStats() {
778
+ const judgments = await loadAllJudgments();
779
+ const byType = {};
780
+ const bySource = {};
781
+ const valueCounts = new Map();
782
+ for (const j of judgments) {
783
+ byType[j.decision_type] = (byType[j.decision_type] || 0) + 1;
784
+ bySource[j.metadata.source] = (bySource[j.metadata.source] || 0) + 1;
785
+ for (const v of j.values_derived) {
786
+ const key = `${v.category}:${v.value}`;
787
+ valueCounts.set(key, (valueCounts.get(key) || 0) + 1);
788
+ }
789
+ }
790
+ const topValues = Array.from(valueCounts.entries())
791
+ .map(([key, count]) => {
792
+ const [category, value] = key.split(':');
793
+ return { category: category, value, weight: count };
794
+ })
795
+ .sort((a, b) => b.weight - a.weight)
796
+ .slice(0, 10);
797
+ return {
798
+ total_judgments: judgments.length,
799
+ by_type: byType,
800
+ by_source: bySource,
801
+ top_values: topValues
802
+ };
803
+ }
804
+ function clearCache() {
805
+ judgmentCache = [];
806
+ valueProfileCache.clear();
807
+ }
808
+ //# sourceMappingURL=human-value-store.js.map