@bolloon/bolloon-agent 0.4.28 → 0.4.30

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 (473) hide show
  1. package/bin/bolloon.cjs +18 -148
  2. package/bin/bolloon.cmd +6 -3
  3. package/dist/agents/contacts/chain.js +579 -0
  4. package/dist/agents/contacts/cli.js +158 -0
  5. package/dist/agents/contacts/consent.js +124 -0
  6. package/dist/agents/contacts/grant-payload.js +45 -0
  7. package/dist/agents/contacts/grants.js +451 -0
  8. package/dist/agents/contacts/policy.js +264 -0
  9. package/dist/agents/contacts/preview-types.js +6 -0
  10. package/dist/agents/contacts/providers.js +341 -0
  11. package/dist/agents/contacts/store.js +326 -0
  12. package/dist/agents/contacts/tools.js +154 -0
  13. package/dist/agents/contacts/types.js +148 -0
  14. package/dist/agents/pi-sdk-tools.js +3 -1
  15. package/dist/agents/pi-sdk.js +14 -1
  16. package/dist/cli/update-commands.js +349 -0
  17. package/dist/cli-entry.js +41 -55
  18. package/dist/electron-build/agents/agent-gateway.js +169 -0
  19. package/dist/electron-build/agents/agent-gateway.js.map +1 -0
  20. package/dist/electron-build/agents/agent-identity-store.js +212 -0
  21. package/dist/electron-build/agents/agent-identity-store.js.map +1 -0
  22. package/dist/electron-build/agents/agent-identity.js +196 -0
  23. package/dist/electron-build/agents/agent-identity.js.map +1 -0
  24. package/dist/electron-build/agents/agent-manifest-protocol.js +151 -0
  25. package/dist/electron-build/agents/agent-manifest-protocol.js.map +1 -0
  26. package/dist/electron-build/agents/agent-registry.js +217 -0
  27. package/dist/electron-build/agents/agent-registry.js.map +1 -0
  28. package/dist/electron-build/agents/agent-reputation.js +60 -0
  29. package/dist/electron-build/agents/agent-reputation.js.map +1 -0
  30. package/dist/electron-build/agents/agent-service-client.js +186 -0
  31. package/dist/electron-build/agents/agent-service-client.js.map +1 -0
  32. package/dist/electron-build/agents/browser-cdp.js +765 -0
  33. package/dist/electron-build/agents/browser-cdp.js.map +1 -0
  34. package/dist/electron-build/agents/computer-use.js +341 -0
  35. package/dist/electron-build/agents/computer-use.js.map +1 -0
  36. package/dist/electron-build/agents/constraint-layer.js +210 -0
  37. package/dist/electron-build/agents/constraint-layer.js.map +1 -0
  38. package/dist/electron-build/agents/contacts/chain.js +619 -0
  39. package/dist/electron-build/agents/contacts/chain.js.map +1 -0
  40. package/dist/electron-build/agents/contacts/consent.js +163 -0
  41. package/dist/electron-build/agents/contacts/consent.js.map +1 -0
  42. package/dist/electron-build/agents/contacts/grant-payload.js +52 -0
  43. package/dist/electron-build/agents/contacts/grant-payload.js.map +1 -0
  44. package/dist/electron-build/agents/contacts/grants.js +500 -0
  45. package/dist/electron-build/agents/contacts/grants.js.map +1 -0
  46. package/dist/electron-build/agents/contacts/policy.js +271 -0
  47. package/dist/electron-build/agents/contacts/policy.js.map +1 -0
  48. package/dist/electron-build/agents/contacts/preview-types.js +8 -0
  49. package/dist/electron-build/agents/contacts/preview-types.js.map +1 -0
  50. package/dist/electron-build/agents/contacts/providers.js +384 -0
  51. package/dist/electron-build/agents/contacts/providers.js.map +1 -0
  52. package/dist/electron-build/agents/contacts/store.js +370 -0
  53. package/dist/electron-build/agents/contacts/store.js.map +1 -0
  54. package/dist/electron-build/agents/contacts/tools.js +159 -0
  55. package/dist/electron-build/agents/contacts/tools.js.map +1 -0
  56. package/dist/electron-build/agents/contacts/types.js +166 -0
  57. package/dist/electron-build/agents/contacts/types.js.map +1 -0
  58. package/dist/electron-build/agents/decision-store.js +292 -0
  59. package/dist/electron-build/agents/decision-store.js.map +1 -0
  60. package/dist/electron-build/agents/deny-pipeline.js +125 -0
  61. package/dist/electron-build/agents/deny-pipeline.js.map +1 -0
  62. package/dist/electron-build/agents/economic-policy.js +172 -0
  63. package/dist/electron-build/agents/economic-policy.js.map +1 -0
  64. package/dist/electron-build/agents/error-classifier.js +125 -0
  65. package/dist/electron-build/agents/error-classifier.js.map +1 -0
  66. package/dist/electron-build/agents/execution-supervisor.js +539 -0
  67. package/dist/electron-build/agents/execution-supervisor.js.map +1 -0
  68. package/dist/electron-build/agents/external-events.js +171 -0
  69. package/dist/electron-build/agents/external-events.js.map +1 -0
  70. package/dist/electron-build/agents/gateway-join.js +315 -0
  71. package/dist/electron-build/agents/gateway-join.js.map +1 -0
  72. package/dist/electron-build/agents/gateway-network.js +505 -0
  73. package/dist/electron-build/agents/gateway-network.js.map +1 -0
  74. package/dist/electron-build/agents/goal-criteria.js +133 -0
  75. package/dist/electron-build/agents/goal-criteria.js.map +1 -0
  76. package/dist/electron-build/agents/goal-resume.js +364 -0
  77. package/dist/electron-build/agents/goal-resume.js.map +1 -0
  78. package/dist/electron-build/agents/goal-store.js +587 -0
  79. package/dist/electron-build/agents/goal-store.js.map +1 -0
  80. package/dist/electron-build/agents/intent-classifier.js +104 -0
  81. package/dist/electron-build/agents/intent-classifier.js.map +1 -0
  82. package/dist/electron-build/agents/iroh-secret.js +70 -0
  83. package/dist/electron-build/agents/iroh-secret.js.map +1 -0
  84. package/dist/electron-build/agents/loop-review.js +101 -0
  85. package/dist/electron-build/agents/loop-review.js.map +1 -0
  86. package/dist/electron-build/agents/memory-recall.js +154 -0
  87. package/dist/electron-build/agents/memory-recall.js.map +1 -0
  88. package/dist/electron-build/agents/p2p-document-tools.js +328 -0
  89. package/dist/electron-build/agents/p2p-document-tools.js.map +1 -0
  90. package/dist/electron-build/agents/parse-tool-call.js +564 -0
  91. package/dist/electron-build/agents/parse-tool-call.js.map +1 -0
  92. package/dist/electron-build/agents/patch-tool.js +205 -0
  93. package/dist/electron-build/agents/patch-tool.js.map +1 -0
  94. package/dist/electron-build/agents/payment-approval.js +183 -0
  95. package/dist/electron-build/agents/payment-approval.js.map +1 -0
  96. package/dist/electron-build/agents/payment-gate.js +139 -0
  97. package/dist/electron-build/agents/payment-gate.js.map +1 -0
  98. package/dist/electron-build/agents/permission-mode.js +124 -0
  99. package/dist/electron-build/agents/permission-mode.js.map +1 -0
  100. package/dist/electron-build/agents/pi-harness.js +268 -0
  101. package/dist/electron-build/agents/pi-harness.js.map +1 -0
  102. package/dist/electron-build/agents/pi-sdk-session-factory.js +117 -0
  103. package/dist/electron-build/agents/pi-sdk-session-factory.js.map +1 -0
  104. package/dist/electron-build/agents/pi-sdk-session-manager.js +335 -0
  105. package/dist/electron-build/agents/pi-sdk-session-manager.js.map +1 -0
  106. package/dist/electron-build/agents/pi-sdk-tools.js +4042 -0
  107. package/dist/electron-build/agents/pi-sdk-tools.js.map +1 -0
  108. package/dist/electron-build/agents/pi-sdk-types.js +17 -0
  109. package/dist/electron-build/agents/pi-sdk-types.js.map +1 -0
  110. package/dist/electron-build/agents/pi-sdk.js +3335 -0
  111. package/dist/electron-build/agents/pi-sdk.js.map +1 -0
  112. package/dist/electron-build/agents/plan-store.js +212 -0
  113. package/dist/electron-build/agents/plan-store.js.map +1 -0
  114. package/dist/electron-build/agents/pre-tool-validator.js +200 -0
  115. package/dist/electron-build/agents/pre-tool-validator.js.map +1 -0
  116. package/dist/electron-build/agents/process-runner.js +148 -0
  117. package/dist/electron-build/agents/process-runner.js.map +1 -0
  118. package/dist/electron-build/agents/react-loop.js +131 -0
  119. package/dist/electron-build/agents/react-loop.js.map +1 -0
  120. package/dist/electron-build/agents/resource-store.js +180 -0
  121. package/dist/electron-build/agents/resource-store.js.map +1 -0
  122. package/dist/electron-build/agents/resource-token.js +118 -0
  123. package/dist/electron-build/agents/resource-token.js.map +1 -0
  124. package/dist/electron-build/agents/resource-wallet.js +84 -0
  125. package/dist/electron-build/agents/resource-wallet.js.map +1 -0
  126. package/dist/electron-build/agents/run-store.js +854 -0
  127. package/dist/electron-build/agents/run-store.js.map +1 -0
  128. package/dist/electron-build/agents/runner-resolver.js +267 -0
  129. package/dist/electron-build/agents/runner-resolver.js.map +1 -0
  130. package/dist/electron-build/agents/session-store.js +294 -0
  131. package/dist/electron-build/agents/session-store.js.map +1 -0
  132. package/dist/electron-build/agents/shell-guard.js +465 -0
  133. package/dist/electron-build/agents/shell-guard.js.map +1 -0
  134. package/dist/electron-build/agents/shell-tool.js +102 -0
  135. package/dist/electron-build/agents/shell-tool.js.map +1 -0
  136. package/dist/electron-build/agents/skill-loader.js +216 -0
  137. package/dist/electron-build/agents/skill-loader.js.map +1 -0
  138. package/dist/electron-build/agents/skill-readiness.js +174 -0
  139. package/dist/electron-build/agents/skill-readiness.js.map +1 -0
  140. package/dist/electron-build/agents/skill-share.js +394 -0
  141. package/dist/electron-build/agents/skill-share.js.map +1 -0
  142. package/dist/electron-build/agents/skill-supervisor-link.js +75 -0
  143. package/dist/electron-build/agents/skill-supervisor-link.js.map +1 -0
  144. package/dist/electron-build/agents/skill-writer.js +347 -0
  145. package/dist/electron-build/agents/skill-writer.js.map +1 -0
  146. package/dist/electron-build/agents/skills-manager.js +763 -0
  147. package/dist/electron-build/agents/skills-manager.js.map +1 -0
  148. package/dist/electron-build/agents/supervisor-host.js +294 -0
  149. package/dist/electron-build/agents/supervisor-host.js.map +1 -0
  150. package/dist/electron-build/agents/task/local-seller.js +188 -0
  151. package/dist/electron-build/agents/task/local-seller.js.map +1 -0
  152. package/dist/electron-build/agents/task/report-card.js +152 -0
  153. package/dist/electron-build/agents/task/report-card.js.map +1 -0
  154. package/dist/electron-build/agents/task/resource-advisor.js +222 -0
  155. package/dist/electron-build/agents/task/resource-advisor.js.map +1 -0
  156. package/dist/electron-build/agents/task/task-budget.js +111 -0
  157. package/dist/electron-build/agents/task/task-budget.js.map +1 -0
  158. package/dist/electron-build/agents/task/task-runner.js +670 -0
  159. package/dist/electron-build/agents/task/task-runner.js.map +1 -0
  160. package/dist/electron-build/agents/task-state.js +266 -0
  161. package/dist/electron-build/agents/task-state.js.map +1 -0
  162. package/dist/electron-build/agents/tool-registry.js +141 -0
  163. package/dist/electron-build/agents/tool-registry.js.map +1 -0
  164. package/dist/electron-build/agents/treasury-bridge.js +165 -0
  165. package/dist/electron-build/agents/treasury-bridge.js.map +1 -0
  166. package/dist/electron-build/agents/user-questions.js +223 -0
  167. package/dist/electron-build/agents/user-questions.js.map +1 -0
  168. package/dist/electron-build/agents/verify-recipe.js +90 -0
  169. package/dist/electron-build/agents/verify-recipe.js.map +1 -0
  170. package/dist/electron-build/agents/workflow-engine.js +222 -0
  171. package/dist/electron-build/agents/workflow-engine.js.map +1 -0
  172. package/dist/electron-build/agents/workflow-pivot-loop.js +988 -0
  173. package/dist/electron-build/agents/workflow-pivot-loop.js.map +1 -0
  174. package/dist/electron-build/agents/write-staging.js +133 -0
  175. package/dist/electron-build/agents/write-staging.js.map +1 -0
  176. package/dist/electron-build/agents/x402/goal-run-bridge.js +115 -0
  177. package/dist/electron-build/agents/x402/goal-run-bridge.js.map +1 -0
  178. package/dist/electron-build/agents/x402/milestone-settlement.js +163 -0
  179. package/dist/electron-build/agents/x402/milestone-settlement.js.map +1 -0
  180. package/dist/electron-build/agents/x402/paid-info-protocol.js +274 -0
  181. package/dist/electron-build/agents/x402/paid-info-protocol.js.map +1 -0
  182. package/dist/electron-build/agents/x402/paid-info-store.js +409 -0
  183. package/dist/electron-build/agents/x402/paid-info-store.js.map +1 -0
  184. package/dist/electron-build/agents/x402/paid-info-tools.js +346 -0
  185. package/dist/electron-build/agents/x402/paid-info-tools.js.map +1 -0
  186. package/dist/electron-build/agents/x402/payment-recovery.js +330 -0
  187. package/dist/electron-build/agents/x402/payment-recovery.js.map +1 -0
  188. package/dist/electron-build/agents/x402/resource-contract.js +533 -0
  189. package/dist/electron-build/agents/x402/resource-contract.js.map +1 -0
  190. package/dist/electron-build/agents/x402/settlement-state.js +432 -0
  191. package/dist/electron-build/agents/x402/settlement-state.js.map +1 -0
  192. package/dist/electron-build/agents/x402/trade.js +294 -0
  193. package/dist/electron-build/agents/x402/trade.js.map +1 -0
  194. package/dist/electron-build/agents/x402/transaction-protocol.js +109 -0
  195. package/dist/electron-build/agents/x402/transaction-protocol.js.map +1 -0
  196. package/dist/electron-build/agents/x402/transaction-store.js +404 -0
  197. package/dist/electron-build/agents/x402/transaction-store.js.map +1 -0
  198. package/dist/electron-build/agents/x402/x402Pay.js +377 -0
  199. package/dist/electron-build/agents/x402/x402Pay.js.map +1 -0
  200. package/dist/electron-build/bollharness-integration/context-router-judgment.js +269 -0
  201. package/dist/electron-build/bollharness-integration/context-router-judgment.js.map +1 -0
  202. package/dist/electron-build/bollharness-integration/context-router.js +584 -0
  203. package/dist/electron-build/bollharness-integration/context-router.js.map +1 -0
  204. package/dist/electron-build/bollharness-integration/gate-state-machine.js +362 -0
  205. package/dist/electron-build/bollharness-integration/gate-state-machine.js.map +1 -0
  206. package/dist/electron-build/bollharness-integration/gate-transition-hooks.js +136 -0
  207. package/dist/electron-build/bollharness-integration/gate-transition-hooks.js.map +1 -0
  208. package/dist/electron-build/bollharness-integration/guard-checker.js +400 -0
  209. package/dist/electron-build/bollharness-integration/guard-checker.js.map +1 -0
  210. package/dist/electron-build/bollharness-integration/index.js +123 -0
  211. package/dist/electron-build/bollharness-integration/index.js.map +1 -0
  212. package/dist/electron-build/bollharness-integration/integration.js +531 -0
  213. package/dist/electron-build/bollharness-integration/integration.js.map +1 -0
  214. package/dist/electron-build/bollharness-integration/skill-adapter.js +608 -0
  215. package/dist/electron-build/bollharness-integration/skill-adapter.js.map +1 -0
  216. package/dist/electron-build/bootstrap/bootstrap.js +173 -0
  217. package/dist/electron-build/bootstrap/bootstrap.js.map +1 -0
  218. package/dist/electron-build/bootstrap/context-collector.js +358 -0
  219. package/dist/electron-build/bootstrap/context-collector.js.map +1 -0
  220. package/dist/electron-build/bootstrap/context-hierarchy.js +262 -0
  221. package/dist/electron-build/bootstrap/context-hierarchy.js.map +1 -0
  222. package/dist/electron-build/bootstrap/context-manager.js +211 -0
  223. package/dist/electron-build/bootstrap/context-manager.js.map +1 -0
  224. package/dist/electron-build/bootstrap/context-os.js +277 -0
  225. package/dist/electron-build/bootstrap/context-os.js.map +1 -0
  226. package/dist/electron-build/bootstrap/event-log.js +203 -0
  227. package/dist/electron-build/bootstrap/event-log.js.map +1 -0
  228. package/dist/electron-build/bootstrap/exhaust-scrubber.js +277 -0
  229. package/dist/electron-build/bootstrap/exhaust-scrubber.js.map +1 -0
  230. package/dist/electron-build/bootstrap/lifecycle-hooks.js +282 -0
  231. package/dist/electron-build/bootstrap/lifecycle-hooks.js.map +1 -0
  232. package/dist/electron-build/bootstrap/memory-compressor.js +377 -0
  233. package/dist/electron-build/bootstrap/memory-compressor.js.map +1 -0
  234. package/dist/electron-build/bootstrap/persona-loader.js +219 -0
  235. package/dist/electron-build/bootstrap/persona-loader.js.map +1 -0
  236. package/dist/electron-build/bootstrap/project-context.js +162 -0
  237. package/dist/electron-build/bootstrap/project-context.js.map +1 -0
  238. package/dist/electron-build/bootstrap/project-state.js +205 -0
  239. package/dist/electron-build/bootstrap/project-state.js.map +1 -0
  240. package/dist/electron-build/bootstrap/session-window.js +162 -0
  241. package/dist/electron-build/bootstrap/session-window.js.map +1 -0
  242. package/dist/electron-build/bootstrap/vector-index.js +291 -0
  243. package/dist/electron-build/bootstrap/vector-index.js.map +1 -0
  244. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +22 -0
  245. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js.map +1 -0
  246. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/clobShared.js +86 -0
  247. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/clobShared.js.map +1 -0
  248. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +37 -0
  249. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/createOrder.js.map +1 -0
  250. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +20 -0
  251. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getMarket.js.map +1 -0
  252. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +29 -0
  253. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/getOrders.js.map +1 -0
  254. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +28 -0
  255. package/dist/electron-build/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js.map +1 -0
  256. package/dist/electron-build/constraint-runtime/src/tools/SafeSDK/deploySafe.js +10 -0
  257. package/dist/electron-build/constraint-runtime/src/tools/SafeSDK/deploySafe.js.map +1 -0
  258. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/autoPay.js +68 -0
  259. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/autoPay.js.map +1 -0
  260. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/createWallet.js +14 -0
  261. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/createWallet.js.map +1 -0
  262. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/getBalance.js +17 -0
  263. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/getBalance.js.map +1 -0
  264. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/importWallet.js +59 -0
  265. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/importWallet.js.map +1 -0
  266. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/sendTransaction.js +29 -0
  267. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/sendTransaction.js.map +1 -0
  268. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/signMessage.js +14 -0
  269. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/signMessage.js.map +1 -0
  270. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/transferToken.js +29 -0
  271. package/dist/electron-build/constraint-runtime/src/tools/WalletTools/transferToken.js.map +1 -0
  272. package/dist/electron-build/constraints/index.js +11 -0
  273. package/dist/electron-build/constraints/index.js.map +1 -0
  274. package/dist/electron-build/context-compaction/auto-compact.js +182 -0
  275. package/dist/electron-build/context-compaction/auto-compact.js.map +1 -0
  276. package/dist/electron-build/context-compaction/budget-gate.js +32 -0
  277. package/dist/electron-build/context-compaction/budget-gate.js.map +1 -0
  278. package/dist/electron-build/context-compaction/budget-reduce.js +39 -0
  279. package/dist/electron-build/context-compaction/budget-reduce.js.map +1 -0
  280. package/dist/electron-build/context-compaction/context-collapse.js +71 -0
  281. package/dist/electron-build/context-compaction/context-collapse.js.map +1 -0
  282. package/dist/electron-build/context-compaction/index.js +38 -0
  283. package/dist/electron-build/context-compaction/index.js.map +1 -0
  284. package/dist/electron-build/context-compaction/microcompact.js +55 -0
  285. package/dist/electron-build/context-compaction/microcompact.js.map +1 -0
  286. package/dist/electron-build/context-compaction/pipeline.js +128 -0
  287. package/dist/electron-build/context-compaction/pipeline.js.map +1 -0
  288. package/dist/electron-build/context-compaction/snip.js +50 -0
  289. package/dist/electron-build/context-compaction/snip.js.map +1 -0
  290. package/dist/electron-build/context-compaction/token-estimator.js +40 -0
  291. package/dist/electron-build/context-compaction/token-estimator.js.map +1 -0
  292. package/dist/electron-build/context-compaction/types.js +21 -0
  293. package/dist/electron-build/context-compaction/types.js.map +1 -0
  294. package/dist/electron-build/cron/tick-lock.js +247 -0
  295. package/dist/electron-build/cron/tick-lock.js.map +1 -0
  296. package/dist/electron-build/documents/reader.js +131 -0
  297. package/dist/electron-build/documents/reader.js.map +1 -0
  298. package/dist/electron-build/documents/store.js +220 -0
  299. package/dist/electron-build/documents/store.js.map +1 -0
  300. package/dist/electron-build/external-engines/delegate-handle.js +76 -0
  301. package/dist/electron-build/external-engines/delegate-handle.js.map +1 -0
  302. package/dist/electron-build/external-engines/delegate.js +225 -0
  303. package/dist/electron-build/external-engines/delegate.js.map +1 -0
  304. package/dist/electron-build/external-engines/discovery.js +448 -0
  305. package/dist/electron-build/external-engines/discovery.js.map +1 -0
  306. package/dist/electron-build/external-engines/types.js +13 -0
  307. package/dist/electron-build/external-engines/types.js.map +1 -0
  308. package/dist/electron-build/hooks/hooks-engine.js +367 -0
  309. package/dist/electron-build/hooks/hooks-engine.js.map +1 -0
  310. package/dist/electron-build/judgeness/reflect.js +100 -0
  311. package/dist/electron-build/judgeness/reflect.js.map +1 -0
  312. package/dist/electron-build/judgeness/store.js +536 -0
  313. package/dist/electron-build/judgeness/store.js.map +1 -0
  314. package/dist/electron-build/judgeness/types.js +21 -0
  315. package/dist/electron-build/judgeness/types.js.map +1 -0
  316. package/dist/electron-build/llm/config-store.js +551 -0
  317. package/dist/electron-build/llm/config-store.js.map +1 -0
  318. package/dist/electron-build/llm/error-lessons.js +76 -0
  319. package/dist/electron-build/llm/error-lessons.js.map +1 -0
  320. package/dist/electron-build/llm/pi-ai.js +830 -0
  321. package/dist/electron-build/llm/pi-ai.js.map +1 -0
  322. package/dist/electron-build/llm/system-prompt/registry.js +318 -0
  323. package/dist/electron-build/llm/system-prompt/registry.js.map +1 -0
  324. package/dist/electron-build/llm/system-prompt/strip-hibsml.js +55 -0
  325. package/dist/electron-build/llm/system-prompt/strip-hibsml.js.map +1 -0
  326. package/dist/electron-build/locales/en.js +32 -0
  327. package/dist/electron-build/locales/en.js.map +1 -0
  328. package/dist/electron-build/locales/zh.js +30 -0
  329. package/dist/electron-build/locales/zh.js.map +1 -0
  330. package/dist/electron-build/lsp/lsp-manager.js +327 -0
  331. package/dist/electron-build/lsp/lsp-manager.js.map +1 -0
  332. package/dist/electron-build/lsp/lsp-tools.js +226 -0
  333. package/dist/electron-build/lsp/lsp-tools.js.map +1 -0
  334. package/dist/electron-build/migration/external-agent-migrator.js +451 -0
  335. package/dist/electron-build/migration/external-agent-migrator.js.map +1 -0
  336. package/dist/electron-build/network/agent-network.js +775 -0
  337. package/dist/electron-build/network/agent-network.js.map +1 -0
  338. package/dist/electron-build/network/goal-event-bridge.js +62 -0
  339. package/dist/electron-build/network/goal-event-bridge.js.map +1 -0
  340. package/dist/electron-build/network/iroh-integration.js +117 -0
  341. package/dist/electron-build/network/iroh-integration.js.map +1 -0
  342. package/dist/electron-build/network/iroh-transport.js +550 -0
  343. package/dist/electron-build/network/iroh-transport.js.map +1 -0
  344. package/dist/electron-build/network/p2p.js +1103 -0
  345. package/dist/electron-build/network/p2p.js.map +1 -0
  346. package/dist/electron-build/network/storage/adapters/json-adapter.js +416 -0
  347. package/dist/electron-build/network/storage/adapters/json-adapter.js.map +1 -0
  348. package/dist/electron-build/network/storage/types.js +18 -0
  349. package/dist/electron-build/network/storage/types.js.map +1 -0
  350. package/dist/electron-build/orbitdb/agent-tools.js +402 -0
  351. package/dist/electron-build/orbitdb/agent-tools.js.map +1 -0
  352. package/dist/electron-build/orbitdb/cid-database.js +284 -0
  353. package/dist/electron-build/orbitdb/cid-database.js.map +1 -0
  354. package/dist/electron-build/orbitdb/context-store.js +99 -0
  355. package/dist/electron-build/orbitdb/context-store.js.map +1 -0
  356. package/dist/electron-build/orbitdb/ipfs-node.js +120 -0
  357. package/dist/electron-build/orbitdb/ipfs-node.js.map +1 -0
  358. package/dist/electron-build/orbitdb/kanban-store.js +299 -0
  359. package/dist/electron-build/orbitdb/kanban-store.js.map +1 -0
  360. package/dist/electron-build/orbitdb/task-store.js +155 -0
  361. package/dist/electron-build/orbitdb/task-store.js.map +1 -0
  362. package/dist/electron-build/orbitdb/trajectory-store.js +194 -0
  363. package/dist/electron-build/orbitdb/trajectory-store.js.map +1 -0
  364. package/dist/electron-build/orbitdb/ui-cid.js +77 -0
  365. package/dist/electron-build/orbitdb/ui-cid.js.map +1 -0
  366. package/dist/electron-build/pi-ecosystem-a2ui/index.js +89 -0
  367. package/dist/electron-build/pi-ecosystem-a2ui/index.js.map +1 -0
  368. package/dist/electron-build/pi-ecosystem-goals/index.js +512 -0
  369. package/dist/electron-build/pi-ecosystem-goals/index.js.map +1 -0
  370. package/dist/electron-build/pi-ecosystem-judgment/adaptive-scan.js +325 -0
  371. package/dist/electron-build/pi-ecosystem-judgment/adaptive-scan.js.map +1 -0
  372. package/dist/electron-build/pi-ecosystem-judgment/causal-judge.js +492 -0
  373. package/dist/electron-build/pi-ecosystem-judgment/causal-judge.js.map +1 -0
  374. package/dist/electron-build/pi-ecosystem-judgment/cleanup.js +167 -0
  375. package/dist/electron-build/pi-ecosystem-judgment/cleanup.js.map +1 -0
  376. package/dist/electron-build/pi-ecosystem-judgment/decision.js +321 -0
  377. package/dist/electron-build/pi-ecosystem-judgment/decision.js.map +1 -0
  378. package/dist/electron-build/pi-ecosystem-judgment/detect-hook.js +175 -0
  379. package/dist/electron-build/pi-ecosystem-judgment/detect-hook.js.map +1 -0
  380. package/dist/electron-build/pi-ecosystem-judgment/distill-prompt.js +232 -0
  381. package/dist/electron-build/pi-ecosystem-judgment/distill-prompt.js.map +1 -0
  382. package/dist/electron-build/pi-ecosystem-judgment/distillation.js +304 -0
  383. package/dist/electron-build/pi-ecosystem-judgment/distillation.js.map +1 -0
  384. package/dist/electron-build/pi-ecosystem-judgment/evolve-judgment.js +176 -0
  385. package/dist/electron-build/pi-ecosystem-judgment/evolve-judgment.js.map +1 -0
  386. package/dist/electron-build/pi-ecosystem-judgment/human-value-pipeline.js +65 -0
  387. package/dist/electron-build/pi-ecosystem-judgment/human-value-pipeline.js.map +1 -0
  388. package/dist/electron-build/pi-ecosystem-judgment/human-value-store.js +808 -0
  389. package/dist/electron-build/pi-ecosystem-judgment/human-value-store.js.map +1 -0
  390. package/dist/electron-build/pi-ecosystem-judgment/index.js +508 -0
  391. package/dist/electron-build/pi-ecosystem-judgment/index.js.map +1 -0
  392. package/dist/electron-build/pi-ecosystem-judgment/injection-gate.js +334 -0
  393. package/dist/electron-build/pi-ecosystem-judgment/injection-gate.js.map +1 -0
  394. package/dist/electron-build/pi-ecosystem-judgment/monitor-gate.js +228 -0
  395. package/dist/electron-build/pi-ecosystem-judgment/monitor-gate.js.map +1 -0
  396. package/dist/electron-build/pi-ecosystem-judgment/value-injection.js +598 -0
  397. package/dist/electron-build/pi-ecosystem-judgment/value-injection.js.map +1 -0
  398. package/dist/electron-build/pi-ecosystem-mcp/index.js +643 -0
  399. package/dist/electron-build/pi-ecosystem-mcp/index.js.map +1 -0
  400. package/dist/electron-build/pi-ecosystem-mcp/ui-tools.js +116 -0
  401. package/dist/electron-build/pi-ecosystem-mcp/ui-tools.js.map +1 -0
  402. package/dist/electron-build/pi-ecosystem-subagents/index.js +352 -0
  403. package/dist/electron-build/pi-ecosystem-subagents/index.js.map +1 -0
  404. package/dist/electron-build/security/builtin-guards.js +133 -0
  405. package/dist/electron-build/security/builtin-guards.js.map +1 -0
  406. package/dist/electron-build/security/context-router-tool.js +111 -0
  407. package/dist/electron-build/security/context-router-tool.js.map +1 -0
  408. package/dist/electron-build/security/input-scanner.js +263 -0
  409. package/dist/electron-build/security/input-scanner.js.map +1 -0
  410. package/dist/electron-build/security/react-harness.js +148 -0
  411. package/dist/electron-build/security/react-harness.js.map +1 -0
  412. package/dist/electron-build/security/tool-gate.js +291 -0
  413. package/dist/electron-build/security/tool-gate.js.map +1 -0
  414. package/dist/electron-build/setup/setup-store.js +648 -0
  415. package/dist/electron-build/setup/setup-store.js.map +1 -0
  416. package/dist/electron-build/social/channels/ChannelManager.js +444 -0
  417. package/dist/electron-build/social/channels/ChannelManager.js.map +1 -0
  418. package/dist/electron-build/social/channels/DiapChannelBridge.js +451 -0
  419. package/dist/electron-build/social/channels/DiapChannelBridge.js.map +1 -0
  420. package/dist/electron-build/social/channels/InterestMatcher.js +135 -0
  421. package/dist/electron-build/social/channels/InterestMatcher.js.map +1 -0
  422. package/dist/electron-build/social/channels/types.js +21 -0
  423. package/dist/electron-build/social/channels/types.js.map +1 -0
  424. package/dist/electron-build/social/global-shared-context.js +368 -0
  425. package/dist/electron-build/social/global-shared-context.js.map +1 -0
  426. package/dist/electron-build/social/heartbeat.js +882 -0
  427. package/dist/electron-build/social/heartbeat.js.map +1 -0
  428. package/dist/electron-build/storage/did-catalog-bridge.js +314 -0
  429. package/dist/electron-build/storage/did-catalog-bridge.js.map +1 -0
  430. package/dist/electron-build/storage/did-catalog.js +272 -0
  431. package/dist/electron-build/storage/did-catalog.js.map +1 -0
  432. package/dist/electron-build/utils/auto-update.js +140 -558
  433. package/dist/electron-build/utils/auto-update.js.map +1 -1
  434. package/dist/electron-build/utils/module-context.js +98 -0
  435. package/dist/electron-build/utils/module-context.js.map +1 -0
  436. package/dist/electron-build/utils/runtime-bootstrap.js +745 -0
  437. package/dist/electron-build/utils/runtime-bootstrap.js.map +1 -0
  438. package/dist/electron-build/utils/update-manager.js +770 -0
  439. package/dist/electron-build/utils/update-manager.js.map +1 -0
  440. package/dist/electron-build/utils/update-state.js +406 -0
  441. package/dist/electron-build/utils/update-state.js.map +1 -0
  442. package/dist/electron-build/utils/version-info.js +562 -0
  443. package/dist/electron-build/utils/version-info.js.map +1 -0
  444. package/dist/electron-build/web/i18n.js +146 -0
  445. package/dist/electron-build/web/i18n.js.map +1 -0
  446. package/dist/electron-build/web/routes-x402-info.js +232 -0
  447. package/dist/electron-build/web/routes-x402-info.js.map +1 -0
  448. package/dist/electron-build/web/server-storage.js +390 -0
  449. package/dist/electron-build/web/server-storage.js.map +1 -0
  450. package/dist/electron-build/web/server-types.js +52 -0
  451. package/dist/electron-build/web/server-types.js.map +1 -0
  452. package/dist/electron-build/web/task-deps.js +41 -0
  453. package/dist/electron-build/web/task-deps.js.map +1 -0
  454. package/dist/index.js +58 -27
  455. package/dist/llm/system-prompt/registry.js +6 -3
  456. package/dist/security/tool-gate.js +4 -0
  457. package/dist/utils/auto-update.js +138 -525
  458. package/dist/utils/module-context.js +59 -0
  459. package/dist/utils/runtime-bootstrap.js +682 -0
  460. package/dist/utils/update-cli.js +82 -0
  461. package/dist/utils/update-health.js +401 -0
  462. package/dist/utils/update-manager.js +716 -0
  463. package/dist/utils/update-state.js +353 -0
  464. package/dist/utils/version-info.js +510 -0
  465. package/dist/web/mobile-contacts.js +329 -0
  466. package/dist/web/mobile-core.js +481 -15
  467. package/dist/web/mobile.html +32 -0
  468. package/dist/web/mobile.js +139 -0
  469. package/dist/web/routes-contacts.js +420 -0
  470. package/dist/web/server.js +5 -0
  471. package/package.json +1 -1
  472. package/scripts/build-cli.js +32 -151
  473. package/scripts/postinstall.js +153 -76
@@ -14,9 +14,12 @@ import * as os from 'os';
14
14
  import * as path from 'path';
15
15
  import { getContextManager } from '../bootstrap/context-manager.js';
16
16
  import { createRequire } from 'module';
17
+ import { currentPackageRoot } from '../utils/version-info.js';
17
18
  // 2026-08-07: ESM 下裸 require 抛错被 catch 吞掉 → estimateHistoryTokens/maxContextTokens 静默失效
18
19
  // (状态栏恒 0 的第二层根因). 统一用 createRequire 加载 CJS 模块.
19
- const _piRequire = createRequire(import.meta.url);
20
+ // 2026-09-19: 原为 createRequire(import.meta.url) —— electron 构建(CommonJS)下 TS1343。
21
+ // createRequire 只用来解析裸模块名, 给包内任意文件路径即可, 用包根 package.json 最稳。
22
+ const _piRequire = createRequire(path.join(currentPackageRoot(), 'package.json'));
20
23
  import { documentReader } from '../documents/reader.js';
21
24
  import { getMinimax } from '../constraints/index.js';
22
25
  import { p2pNetwork } from '../network/p2p.js';
@@ -42,6 +45,8 @@ export { TOOL_DEFINITIONS, } from './pi-sdk-types.js';
42
45
  export { PiSessionManager } from './pi-sdk-session-manager.js';
43
46
  import { PiSessionManager } from './pi-sdk-session-manager.js';
44
47
  import { registerBuiltinTools, registerWalletTools, setupInboxListener, IdempotencyCache, } from './pi-sdk-tools.js';
48
+ import { registerContactTools } from './contacts/tools.js';
49
+ import { ContactChain } from './contacts/chain.js';
45
50
  export { createAgentSession, getAgentSession, resetAgentSession, runSelfImproveLoop, } from './pi-sdk-session-factory.js';
46
51
  // Judgment 注入门 (P0): 在主对话 LLM 调起前自动拼入 Top 3 判断力
47
52
  // 失败静默, 不阻塞主对话
@@ -572,6 +577,14 @@ export class PiAgentSession {
572
577
  },
573
578
  };
574
579
  registerBuiltinTools(toolCtx);
580
+ // 2026-09-19: 联系方式工具 (手机/邮箱) —— Agent 拿不到明文, 只能给 contactId;
581
+ // 所有调用都要过 contacts/policy (首次联系/敏感内容需人工批准, 批量永远禁止)。
582
+ try {
583
+ registerContactTools(toolCtx, new ContactChain({ ownerDid: this.identity?.did || 'did:bolln:local' }));
584
+ }
585
+ catch (err) {
586
+ console.warn('[contacts] 注册联系工具失败 (非致命, 该能力不可用):', err?.message || err);
587
+ }
575
588
  registerWalletTools(toolCtx);
576
589
  setupInboxListener(toolCtx);
577
590
  // 镜像到 ToolRegistry (alias resolve 用)
@@ -0,0 +1,349 @@
1
+ /**
2
+ * update-commands.ts — `bolloon --version` / `bolloon update` / `bolloon doctor` 的实现
3
+ * (Phase 1-7 的对外出口, 2026-09-19)
4
+ *
5
+ * 三个命令都只读同一个 `VersionInfo` / `UpdateState`, 不各自拼字符串:
6
+ * --version [--verbose|--json] 版本身份 (普通 / 诊断 / 机器)
7
+ * update [--plan|--status|--history|--now] 检查(默认) / 计划 / 状态 / 历史 / 执行
8
+ * doctor 安装入口 + 版本事实 + 更新状态的自洽性
9
+ *
10
+ * 退出码 (供脚本用, 稳定约定):
11
+ * 0 正常 (检查成功 / 更新成功 / doctor healthy|degraded)
12
+ * 1 执行失败 (更新失败 / doctor failed)
13
+ * 2 检查不可用 (离线 / registry 不可用 / 读不到本地版本) —— 与"没有更新"区分开
14
+ */
15
+ import { resolveBolloonHome } from '../setup/setup-store.js';
16
+ import { collectVersionInfo, renderVersionText, renderVersionJson, } from '../utils/version-info.js';
17
+ import { checkForUpdate, buildUpdatePlan, renderUpdatePlan, applyUpdate, readUpdateStatus, readHistory, renderHistory, updateSummaryFor, compareVersions, } from '../utils/update-manager.js';
18
+ import { runDoctor, renderDoctor } from '../utils/update-health.js';
19
+ import { detectRuntimeReport, bootstrapRuntimes, renderRuntimeReport, renderBootstrapPlan, RUNTIME_MIN, readRuntimeConfigWithFallback, } from '../utils/runtime-bootstrap.js';
20
+ const RESET = '\x1b[0m';
21
+ const BOLD = '\x1b[1m';
22
+ const CYAN = '\x1b[38;2;196;214;64m';
23
+ const GREEN = '\x1b[38;2;34;197;94m';
24
+ const YELLOW = '\x1b[38;2;245;158;11m';
25
+ const RED = '\x1b[38;2;239;68;68m';
26
+ const out = (s) => process.stdout.write(s + '\n');
27
+ const err = (s) => process.stderr.write(s + '\n');
28
+ // ── 版本 ────────────────────────────────────────────────────────────────────
29
+ export async function runVersionCommand(args = []) {
30
+ // 2026-09-19 (leo): 子命令一律**裸词**, 不再带 `--` 前缀 (只有 `--version` 本身保留 --)
31
+ // 为了不打断已经有脚本/肌肉记忆的用法, 旧的 `--verbose` / `--json` 仍然被接受。
32
+ const json = args.includes('json') || args.includes('--json');
33
+ const verbose = args.includes('verbose') || args.includes('--verbose') || args.includes('-V') || args.includes('all');
34
+ const home = resolveBolloonHome();
35
+ const update = await updateSummaryFor(home).catch(() => null);
36
+ // 运行时配置 (leo 2026-09-19: 展示安装信息时要展示这些配置)。
37
+ // 普通版做浅探测 (路径 + 版本); verbose/json 做**真执行验证** (git 建临时仓库/python 真跑脚本/node 真加载 CLI)。
38
+ const runtime = await detectRuntimeReport({ home, deep: verbose || json }).catch(() => null);
39
+ const rtCfg = await readRuntimeConfigWithFallback(home).catch(() => ({}));
40
+ const runtimeConfigBacked = Boolean(rtCfg.node);
41
+ // 机器版也要完整身份 (git commit / npm / Python) —— "给问题报告用"就必须有这些;
42
+ // 只有启动横幅那种高频场景才走 light。
43
+ const info = collectVersionInfo({ home, update, runtime, runtimeConfigBacked, light: false });
44
+ if (json) {
45
+ out(renderVersionJson(info));
46
+ return 0;
47
+ }
48
+ if (!verbose) {
49
+ // 普通版: 首次问"我运行的到底是什么"时也顺手把更新事实刷新一次
50
+ // (不发通知, 只是别让用户看到永远空白的"尚未检查"; 迁移自旧缓存时 lastCheckStatus 为 null)
51
+ if (!info.update || !info.update.lastCheckAt || !info.update.lastCheckStatus) {
52
+ const r = await checkForUpdate({ home, force: false }).catch(() => null);
53
+ if (r) {
54
+ const fresh = await updateSummaryFor(home).catch(() => null);
55
+ if (fresh)
56
+ info.update = fresh;
57
+ }
58
+ }
59
+ }
60
+ out(renderVersionText(info, { verbose }));
61
+ if (verbose) {
62
+ out('');
63
+ out('提示: bolloon --version json 给脚本/问题报告用; bolloon doctor 看安装是否自洽。');
64
+ }
65
+ return 0;
66
+ }
67
+ // ── 更新状态渲染 ────────────────────────────────────────────────────────────
68
+ function statusConclusion(status, latest, current) {
69
+ switch (status) {
70
+ case 'up_to_date': return `${GREEN}已是最新${RESET} (${current})`;
71
+ case 'update_available': return `${YELLOW}有新版可用${RESET} (${current} → ${latest || '未知'})`;
72
+ case 'check_skipped': return `${CYAN}使用缓存结论${RESET} (未打网络)`;
73
+ case 'offline': return `${RED}离线${RESET} — 连不上 npm registry, ${BOLD}不能判定为最新${RESET}`;
74
+ case 'registry_unavailable': return `${RED}registry 不可用${RESET} — ${BOLD}不能判定为最新${RESET}`;
75
+ case 'local_version_unknown': return `${RED}读不到本地版本${RESET} — 不判断是否有更新`;
76
+ case 'unsupported_installation': {
77
+ // 仍然把"和最新比到底差多少"说清楚 —— 不支持自动更新 ≠ 不需要知道有没有新版
78
+ const cmp = !latest ? '' : compareVersions(current, latest) < 0 ? ` — 已有更新版 ${latest}, 需按该安装方式手动升级` : ` — 本地 ${current} 已是 registry 上最新`;
79
+ return `${YELLOW}当前安装方式不支持自动更新${RESET}${cmp}`;
80
+ }
81
+ default: return '尚未检查';
82
+ }
83
+ }
84
+ export function renderCheckResult(r) {
85
+ const L = [];
86
+ L.push(`当前版本: ${r.currentVersion}`);
87
+ L.push(`最新版本: ${r.latestVersion || '未知'}`);
88
+ L.push(`更新通道: ${r.channel} (来源: ${r.source})`);
89
+ L.push(`安装方式: ${r.installMethod}`);
90
+ L.push(`检查时间: ${r.checkedAt}${r.fromCache ? ' (缓存)' : ''}`);
91
+ L.push(`结论: ${statusConclusion(r.status, r.latestVersion, r.currentVersion)}`);
92
+ if (r.reason)
93
+ L.push(`说明: ${r.reason}`);
94
+ L.push('');
95
+ if (r.status === 'update_available') {
96
+ L.push(`下一步: ${BOLD}bolloon update plan${RESET} 看计划, ${BOLD}bolloon update now${RESET} 执行更新`);
97
+ }
98
+ else if (r.status === 'unsupported_installation') {
99
+ L.push('下一步: 按上面"说明"里对应安装方式更新 (源码目录: git pull && npm install && npm run build:all)');
100
+ }
101
+ else if (r.status === 'offline' || r.status === 'registry_unavailable') {
102
+ L.push('下一步: 检查网络/代理后重跑 `bolloon update`; 也可以 `bolloon update status` 看上次结论');
103
+ }
104
+ else if (r.status === 'local_version_unknown') {
105
+ L.push('下一步: 重新安装 (npm install -g @bolloon/bolloon-agent) 以恢复 package.json');
106
+ }
107
+ return L.join('\n');
108
+ }
109
+ export function renderStatusReport(s) {
110
+ const L = [];
111
+ const lu = s.lastUpdate;
112
+ L.push(`${BOLD}更新状态${RESET}`);
113
+ L.push(`当前版本: ${s.currentVersion}`);
114
+ L.push(`最新版本: ${s.latestVersion || (s.lastCheckStatus ? '未知' : '尚未检查')}`);
115
+ L.push(`是否最新: ${statusConclusion(s.lastCheckStatus, s.latestVersion, s.currentVersion)}`);
116
+ L.push(`更新通道: ${s.channel}`);
117
+ L.push(`安装方式: ${s.installMethod}`);
118
+ L.push(`安装目录: ${s.installDir}`);
119
+ L.push(`运行入口: ${s.entryPath}`);
120
+ L.push(`最近检查: ${s.lastCheckAt || '从未'}${s.lastCheckReason ? ` (${s.lastCheckReason})` : ''}`);
121
+ L.push(`最近更新: ${lu ? `${lu.at} ${lu.from} → ${lu.to} [${lu.status}]${lu.reason ? ` ${lu.reason}` : ''}` : '无记录'}`);
122
+ L.push(`最近失败: ${s.lastFailure ? `${s.lastFailure.at} @${s.lastFailure.stage}: ${s.lastFailure.reason}` : '无'}`);
123
+ L.push(`需要重启: ${s.needsRestart ? '是 (新版已就位, 重启后生效)' : '否'}`);
124
+ L.push(`更新锁: ${s.lock ? `有 (pid ${s.lock.pid}, ${s.lock.at}${s.lock.stale ? ', 已陈旧' : ''})` : '无'}`);
125
+ L.push(`开关: 检查更新=${s.prefs.checkUpdates} (${s.prefs.sources.checkUpdates}) · 自动安装=${s.prefs.autoInstall} (${s.prefs.sources.autoInstall}) · 自动重启=${s.prefs.autoRestart} (${s.prefs.sources.autoRestart})`);
126
+ return L.join('\n');
127
+ }
128
+ // ── update 子命令 ───────────────────────────────────────────────────────────
129
+ export async function runUpdateCommand(args = []) {
130
+ const home = resolveBolloonHome();
131
+ // 裸词优先 (bolloon update plan / status / history / now / wait / force / json),
132
+ // 同时兼容旧的 --plan / --status / ... 写法 (已有脚本不断裂)。
133
+ const has = (...f) => f.some((x) => args.includes(x));
134
+ const json = has('json', '--json');
135
+ // ── 状态 ──
136
+ if (has('status', '--status')) {
137
+ const s = await readUpdateStatus({ home });
138
+ if (json) {
139
+ out(JSON.stringify(s, null, 2));
140
+ return 0;
141
+ }
142
+ out(renderStatusReport(s));
143
+ return 0;
144
+ }
145
+ // ── 历史 ──
146
+ if (has('history', '--history')) {
147
+ const idx = args.findIndex((a) => a === 'history' || a === '--history');
148
+ const n = parseInt(args[idx + 1] || '10', 10);
149
+ const recs = await readHistory(Number.isFinite(n) && n > 0 ? n : 10, home);
150
+ if (json) {
151
+ out(JSON.stringify(recs, null, 2));
152
+ return 0;
153
+ }
154
+ out(renderHistory(recs));
155
+ return 0;
156
+ }
157
+ // ── 计划 ──
158
+ if (has('plan', '--plan')) {
159
+ const plan = await buildUpdatePlan({ home, force: true });
160
+ if (json) {
161
+ out(JSON.stringify(plan, null, 2));
162
+ return 0;
163
+ }
164
+ out(renderUpdatePlan(plan));
165
+ return 0;
166
+ }
167
+ // ── 执行 ──
168
+ if (has('now', '--now')) {
169
+ const wait = has('wait', '--wait');
170
+ const force = has('force', '--force', '-f');
171
+ const plan = await buildUpdatePlan({ home, force: true });
172
+ if (!json)
173
+ out(renderUpdatePlan(plan));
174
+ if (!plan.ok && plan.blockers.length > 0) {
175
+ if (json)
176
+ out(JSON.stringify({ stage: 'blocked', reason: plan.blockers.join('; ') }, null, 2));
177
+ err(`${RED}✗ 更新被阻塞${RESET}: ${plan.blockers.join('; ')}`);
178
+ return 1;
179
+ }
180
+ if (!plan.targetVersion) {
181
+ if (json)
182
+ out(JSON.stringify({ stage: 'succeeded', ok: true, reason: '已是最新', from: plan.currentVersion, to: plan.currentVersion }, null, 2));
183
+ out(`${GREEN}✓ 已是最新, 无需更新${RESET} (${plan.currentVersion})`);
184
+ return 0;
185
+ }
186
+ const res = await applyUpdate({
187
+ home,
188
+ strategy: wait ? 'wait' : 'now',
189
+ force,
190
+ onStage: json ? undefined : (stage, detail) => out(` [${stage}] ${detail}`),
191
+ });
192
+ if (json) {
193
+ out(JSON.stringify(res, null, 2));
194
+ return res.ok ? 0 : 1;
195
+ }
196
+ if (res.ok) {
197
+ out(`${GREEN}✓ 更新成功${RESET}: ${res.from} → ${res.to} (${(res.durationMs / 1000).toFixed(1)}s)`);
198
+ out(' 正在做更新后健康检查...');
199
+ const health = await runDoctor({ bolloonHome: home }).catch(() => null);
200
+ if (health) {
201
+ out(renderDoctor(health));
202
+ }
203
+ out(`${YELLOW}请重启 bolloon 以使用新版本${RESET}`);
204
+ return 0;
205
+ }
206
+ if (res.stage === 'blocked') {
207
+ err(`${YELLOW}! ${res.reason}${RESET}`);
208
+ return 1;
209
+ }
210
+ err(`${RED}✗ 更新失败${RESET} (${res.stage}): ${res.reason}`);
211
+ err(` 旧版本仍在: ${res.from} — 可继续使用; 详情: bolloon update status`);
212
+ if (res.stage === 'rolled_back')
213
+ err(` 已回滚到 ${res.from}`);
214
+ return 1;
215
+ }
216
+ // ── 默认: 只检查, 给清晰结论 (显式命令 = 忽略节流) ──
217
+ const r = await checkForUpdate({ home, force: true });
218
+ if (json) {
219
+ out(JSON.stringify(r, null, 2));
220
+ return r.status === 'offline' || r.status === 'registry_unavailable' || r.status === 'local_version_unknown' ? 2 : 0;
221
+ }
222
+ out(renderCheckResult(r));
223
+ if (r.status !== 'up_to_date' && r.status !== 'check_skipped') {
224
+ out('');
225
+ out(`${YELLOW}提示${RESET}: 本次只检查, 没有安装任何东西。`);
226
+ }
227
+ if (r.status === 'offline' || r.status === 'registry_unavailable' || r.status === 'local_version_unknown')
228
+ return 2;
229
+ if (r.status === 'update_available' && compareVersions(r.currentVersion, r.latestVersion || r.currentVersion) >= 0)
230
+ return 0;
231
+ return 0;
232
+ }
233
+ // ── doctor ──────────────────────────────────────────────────────────────────
234
+ export async function runDoctorCommand(args = []) {
235
+ const home = resolveBolloonHome();
236
+ const json = args.includes('json') || args.includes('--json');
237
+ const skipNetwork = args.includes('offline') || args.includes('--offline');
238
+ const rep = await runDoctor({ bolloonHome: home, skipNetwork });
239
+ if (json) {
240
+ out(JSON.stringify(rep, null, 2));
241
+ return rep.grade === 'failed' ? 1 : 0;
242
+ }
243
+ out(renderDoctor(rep));
244
+ return rep.grade === 'failed' ? 1 : 0;
245
+ }
246
+ /**
247
+ * `bolloon runtime [check|install|report|json|dry-run|yes]`
248
+ * check/report —— 只看 (Phase 5 报告: 四个运行时 + 五项能力)
249
+ * install —— 真安装缺失的运行时 (需要 yes; 不偷偷 sudo)
250
+ * dry-run —— 只显示将执行的命令
251
+ * json —— 机器可读
252
+ * 也是 `bolloon setup repair-runtime` 的同一实现 (只有一份)。
253
+ */
254
+ export async function runRuntimeCommand(args = []) {
255
+ const home = resolveBolloonHome();
256
+ const json = args.includes('json') || args.includes('--json');
257
+ const dryRun = args.includes('dry-run') || args.includes('--dry-run');
258
+ const yes = args.includes('yes') || args.includes('--yes') || args.includes('-y');
259
+ const verbose = args.includes('verbose') || args.includes('--verbose');
260
+ const install = args.includes('install') || args.includes('repair') || args.includes('repair-runtime');
261
+ const wantPlan = args.includes('plan') || dryRun;
262
+ if (args.includes('help') || args.includes('--help')) {
263
+ out(`${BOLD}bolloon runtime${RESET} — 运行时 (Node/npm/Git/Python) 检查与安装`);
264
+ out('');
265
+ for (const [id, v] of Object.entries(RUNTIME_MIN))
266
+ out(` ${id.padEnd(7)} 最低 ${v.min.padEnd(8)} ${v.why}`);
267
+ out('');
268
+ out(' bolloon runtime 检查并给报告 (真执行验证)');
269
+ out(' bolloon runtime verbose 同上 + 路径/来源/验证时间');
270
+ out(' bolloon runtime plan 只看安装计划 (要装什么/用哪个包管理器/是否要管理员权限)');
271
+ out(' bolloon runtime install yes 真安装缺失项 (不偷偷 sudo; 需要管理员权限时会明确说)');
272
+ out(' bolloon runtime dry-run 只显示将执行的命令');
273
+ out(' bolloon runtime json 机器可读');
274
+ return 0;
275
+ }
276
+ if (wantPlan && !install) {
277
+ const before = await detectRuntimeReport({ home, deep: false });
278
+ const { planBootstrap } = await import('../utils/runtime-bootstrap.js');
279
+ const plan = planBootstrap(before.facts);
280
+ if (json) {
281
+ out(JSON.stringify({ report: before, plan }, null, 2));
282
+ return before.ok ? 0 : 1;
283
+ }
284
+ out(renderBootstrapPlan(plan));
285
+ return before.ok ? 0 : 1;
286
+ }
287
+ if (install && !json) {
288
+ // Phase 3: 真正改变系统之前先显示一次计划 (装什么/用什么装/要不要管理员权限/是否改 PATH)
289
+ const before = await detectRuntimeReport({ home, deep: false });
290
+ const { planBootstrap } = await import('../utils/runtime-bootstrap.js');
291
+ out(renderBootstrapPlan(planBootstrap(before.facts)));
292
+ out('');
293
+ if (install && !yes)
294
+ out(`${YELLOW}未带 yes: 只显示计划, 不执行安装${RESET} (加 yes 才真装)`);
295
+ }
296
+ // 只看 (check/report): 不经过安装流程, 免得打印"未获得同意"这种与本次目的无关的话
297
+ if (!install && !dryRun) {
298
+ const fresh = await detectRuntimeReport({ home, deep: true });
299
+ if (json) {
300
+ out(JSON.stringify(fresh, null, 2));
301
+ return fresh.ok ? 0 : 1;
302
+ }
303
+ out(renderRuntimeReport(fresh, { verbose }));
304
+ return fresh.ok ? 0 : 1;
305
+ }
306
+ const rep = await bootstrapRuntimes({
307
+ home,
308
+ dryRun,
309
+ yes: install ? yes : false,
310
+ onProgress: json ? undefined : (m) => out(` ${m}`),
311
+ });
312
+ if (json) {
313
+ out(JSON.stringify(rep, null, 2));
314
+ return rep.ok ? 0 : 1;
315
+ }
316
+ out(renderRuntimeReport(rep, { verbose: true }));
317
+ if (!rep.ok) {
318
+ out('');
319
+ out(`${YELLOW}不宣布安装成功${RESET}: ${rep.missing.concat(rep.belowMinimum).join(', ') || '运行时未全部就绪'}`);
320
+ return 1;
321
+ }
322
+ return 0;
323
+ }
324
+ export const UPDATE_HELP = `
325
+ ${BOLD}版本与更新:${RESET} (子命令一律裸词, 不带 -- 前缀)
326
+ bolloon --version 版本 + 安装方式/目录/入口/通道/上游/是否最新
327
+ bolloon --version verbose 诊断版 (构建时间/git/Node/npm/Python/配置目录/最近更新)
328
+ bolloon --version json 机器版 (同一份 VersionInfo, 给脚本与问题报告)
329
+ bolloon update 只检查并给结论 (不安装任何东西)
330
+ bolloon update plan 更新计划: 要更新什么 / 不会动什么 / 风险检查
331
+ bolloon update status 更新状态: 最近检查/最近更新/失败/是否需重启/开关
332
+ bolloon update history [N] 最近 N 次更新 (时间 · 版本变化 · 结果 · 耗时 · 原因)
333
+ bolloon update now 真正执行更新 (默认先看计划)
334
+ bolloon update now wait 等当前 Run 结束后再更新 (有长期任务时的默认建议)
335
+ bolloon doctor 安装入口 + 版本事实 + 更新状态 + 运行时 是否自洽
336
+ bolloon doctor json 同上, 机器可读
337
+ bolloon runtime [plan|install|json] 运行时 (Node/npm/Git/Python) 检查与安装 (install 需显式 yes)
338
+
339
+ ${BOLD}开关 (config.json):${RESET}
340
+ checkUpdates (默认 true) 启动时后台检查
341
+ autoInstall (默认 false) 自动安装 —— 默认关, 需显式打开
342
+ autoRestart (默认 false) 装完自动重启
343
+ ${BOLD}环境变量 (临时覆盖, 不落盘):${RESET}
344
+ BOLLOON_SKIP_UPDATE=1 本次不检查
345
+ BOLLOON_AUTO_UPDATE=1 本次允许自动安装
346
+ BOLLOON_UPDATE_CHANNEL=stable|beta|dev
347
+
348
+ ${BOLD}退出码:${RESET} 0 正常 · 1 执行失败 · 2 检查不可用 (离线/registry 不可用/读不到本地版本)
349
+ `;
package/dist/cli-entry.js CHANGED
@@ -20,6 +20,8 @@ import { fileURLToPath } from 'url';
20
20
  import { printBanner } from './cli/loading-tui.js';
21
21
  import { discoverEngines, delegateToEngine } from './external-engines/index.js';
22
22
  import { x402CheckBalance, x402Fetch } from './agents/x402/x402Pay.js';
23
+ import { runVersionCommand, runUpdateCommand, runDoctorCommand, runRuntimeCommand, UPDATE_HELP } from './cli/update-commands.js';
24
+ import { collectVersionInfo } from './utils/version-info.js';
23
25
  import { createRequire } from 'module';
24
26
  const _require = createRequire(import.meta.url);
25
27
  const isWindows = process.platform === 'win32';
@@ -31,18 +33,8 @@ const CYAN = _fg(0xc4, 0xd6, 0x40); // #c4d640
31
33
  const YELLOW = _fg(0xf5, 0x9e, 0x0b); // #f59e0b
32
34
  const GREEN = _fg(0x22, 0xc5, 0x5e); // #22c55e
33
35
  const MAGENTA = _fg(0xef, 0x44, 0x44); // #ef4444
34
- // 版本信息 — 2026-07-20 Bug 3: 从 package.json 读取, 不再硬编码
35
- const VERSION = (() => {
36
- try {
37
- const entryDir = path.dirname(fileURLToPath(import.meta.url));
38
- const pkgPath = path.resolve(entryDir, '..', 'package.json');
39
- const raw = fs.readFileSync(pkgPath, 'utf-8');
40
- return JSON.parse(raw).version || '0.0.0';
41
- }
42
- catch {
43
- return '0.0.0';
44
- }
45
- })();
36
+ // 版本信息 — 2026-09-19: 统一走 version-info 的**唯一版本解析** (不再各读一遍 package.json)
37
+ const VERSION = collectVersionInfo({ light: true }).packageVersion;
46
38
  function log(msg, color = RESET) {
47
39
  console.log(`${color}${msg}${RESET}`);
48
40
  }
@@ -58,12 +50,14 @@ ${BOLD}选项:${RESET}
58
50
  --gui, -g 启动图形界面 (Electron)
59
51
  --web, -w 启动 Web UI (浏览器)
60
52
  --cli, -c 启动命令行界面
61
- --version, -v 显示版本信息
53
+ --version, -v 显示版本 (bolloon --version verbose / bolloon --version json)
62
54
  --help, -h 显示帮助信息
63
55
 
64
56
  ${BOLD}命令:${RESET}
65
57
  bolloon setup 初始化向导 (你的称呼 + 模型供应商 + API key + 连通性测试)
66
- bolloon update [--now] 检查更新 / 立即更新 (bolloon update --now)
58
+ bolloon update [plan|status|history|now] 检查更新 / 计划 / 状态 / 历史 / 执行 (默认只检查)
59
+ bolloon doctor 安装入口 + 版本事实 + 更新状态自洽性诊断
60
+ bolloon runtime [plan|install] 运行时 (Node/npm/Git/Python) 检查与安装
67
61
  bolloon model [name] [model] 列出 / 切换模型供应商 (如: bolloon model deepseek deepseek-v4-flash)
68
62
  bolloon model key <name> 配置某供应商的 API key (隐藏输入, 不回显)
69
63
  bolloon model test [name] 测试供应商连通性
@@ -80,9 +74,11 @@ ${BOLD}示例:${RESET}
80
74
  bolloon --web # 启动 Web UI
81
75
  bolloon --cli # 命令行模式
82
76
  bolloon model # 查看当前模型供应商
83
- bolloon model minimax # 切换到 MiniMax
84
- bolloon update # 检查更新
85
- bolloon update --now # 立即更新
77
+ bolloon update # 检查更新 (只读, 不改任何东西)
78
+ bolloon update plan # 看更新计划与风险检查
79
+ bolloon update now # 真正执行更新
80
+ bolloon doctor # 我这台机器的 Bolloon 是否自洽
81
+ ${UPDATE_HELP}
86
82
 
87
83
  ${BOLD}环境变量:${RESET}
88
84
  MINIMAX_API_KEY MiniMax API 密钥
@@ -134,7 +130,10 @@ function parseArgs() {
134
130
  switch (mode) {
135
131
  case '-v':
136
132
  case '--version':
137
- return { mode: 'version', args: [] };
133
+ // 2026-09-19: --version 现在分三层 (普通/--verbose/--json), 参数必须往下传
134
+ return { mode: 'version', args: args.slice(1) };
135
+ case 'version':
136
+ return { mode: 'version', args: args.slice(1) };
138
137
  case '-h':
139
138
  case '--help':
140
139
  return { mode: 'help', args: [] };
@@ -154,6 +153,12 @@ function parseArgs() {
154
153
  // 2026-08-06: 子命令形式 (去掉 -- 前缀)
155
154
  case 'update':
156
155
  return { mode: 'update', args: args.slice(1) };
156
+ // 2026-09-19: 安装入口/版本事实/更新状态 自洽性诊断
157
+ case 'doctor':
158
+ return { mode: 'doctor', args: args.slice(1) };
159
+ // 2026-09-19: 运行时 (Node/npm/Git/Python) 检查与安装
160
+ case 'runtime':
161
+ return { mode: 'runtime', args: args.slice(1) };
157
162
  case 'model':
158
163
  return { mode: 'model', args: args.slice(1) };
159
164
  // 2026-09-18: 智能体工具执行轨迹 + 本机 P2P 连接信息 (递给名片/小工具用)
@@ -293,41 +298,8 @@ async function handleX402Command(x402Args) {
293
298
  console.error(`未知 x402 子命令: ${sub}`);
294
299
  process.exit(1);
295
300
  }
296
- /** update 子命令: 检查 / 执行更新 (bolloon update [--now|now] [packages]) */
297
- async function handleUpdateCommand(updateArgs) {
298
- const { checkForUpdates, performUpdate } = await import('./utils/auto-update.js');
299
- // bolloon update --now / bolloon update now [packages] — 立即更新
300
- if (updateArgs[0] === '--now' || updateArgs[0] === 'now') {
301
- const packages = updateArgs.slice(1).filter(a => !a.startsWith('-'));
302
- console.log('🔄 正在检查并更新...');
303
- const result = await performUpdate(packages.length > 0 ? packages : undefined);
304
- if (result.success) {
305
- console.log(`${GREEN}✅ 更新成功${result.updatedPackages ? `: ${result.updatedPackages.join(', ')}` : ''}${RESET}`);
306
- if (result.updated)
307
- console.log(`${YELLOW} 请重新启动应用以使用新版本${RESET}`);
308
- }
309
- else {
310
- console.error(`${MAGENTA}❌ 更新失败: ${result.error}${RESET}`);
311
- process.exit(1);
312
- }
313
- return;
314
- }
315
- // 默认: 检查更新
316
- console.log('🔄 正在检查更新...');
317
- const info = await checkForUpdates();
318
- if (info && info.outdated) {
319
- console.log(`${CYAN}📦 发现更新可用:${RESET}\n`);
320
- console.log(` 当前版本: ${info.version}`);
321
- console.log(` 最新版本: ${info.latest}\n`);
322
- console.log(` 待更新包:`);
323
- for (const p of info.packages)
324
- console.log(` - ${p.name}: ${p.current} → ${p.latest}`);
325
- console.log(`\n 运行 ${GREEN}bolloon update --now${RESET} 执行更新`);
326
- }
327
- else {
328
- console.log(`${GREEN}✅ 已是最新版本${RESET} (${info?.version || 'unknown'})`);
329
- }
330
- }
301
+ /** update 子命令: 2026-09-19 起统一走 src/cli/update-commands.ts 的 runUpdateCommand
302
+ * (旧实现只有"检查/--now"两种行为, 且各自拼一套版本信息 —— 已删除, 避免两套事实) */
331
303
  /** model 子命令: 列出 / 切换模型供应商 (bolloon model [name] [model]) */
332
304
  /**
333
305
  * `bolloon trace [runId] [--json] [--last N]`
@@ -516,6 +488,11 @@ async function handleSetupCommand(setupArgs) {
516
488
  const i = setupArgs.indexOf(name);
517
489
  return i >= 0 && i + 1 < setupArgs.length ? setupArgs[i + 1] : undefined;
518
490
  };
491
+ if (setupArgs.includes('repair-runtime') || setupArgs.includes('--repair-runtime')) {
492
+ // Phase 7: 补装缺失运行时 (与 bolloon runtime install yes 同一实现)
493
+ console.log(`${BOLD}setup repair-runtime${RESET} — 检查并补装 Node/npm/Git/Python (不偷偷 sudo)`);
494
+ process.exit(await runRuntimeCommand(['install', 'yes']));
495
+ }
519
496
  if (setupArgs.includes('--help') || setupArgs.includes('-h')) {
520
497
  console.log(`${BOLD}bolloon setup${RESET} — 初始化 Bolloon (用户身份 + 模型供应商 + API key)`);
521
498
  console.log('');
@@ -525,6 +502,7 @@ async function handleSetupCommand(setupArgs) {
525
502
  console.log(' --model <名> 指定模型');
526
503
  console.log(' --name <称呼> 你的称呼 (写入 ~/.bolloon/identity/user.json)');
527
504
  console.log(' --no-test 跳过连通性测试');
505
+ console.log(' repair-runtime 检查并补装缺失运行时 (Node/npm/Git/Python)');
528
506
  return;
529
507
  }
530
508
  const apiKey = val('--api-key');
@@ -731,7 +709,8 @@ async function main() {
731
709
  const { mode, args } = parseArgs();
732
710
  switch (mode) {
733
711
  case 'version':
734
- console.log(`Bolloon Agent v${VERSION}`);
712
+ // 2026-09-19: 三层版本输出 (普通/--verbose/--json) 全走同一个 VersionInfo
713
+ process.exit(await runVersionCommand(args));
735
714
  break;
736
715
  case 'help':
737
716
  printHelp();
@@ -755,7 +734,14 @@ async function main() {
755
734
  break;
756
735
  // 2026-08-06: 子命令 (bolloon update / bolloon model)
757
736
  case 'update':
758
- await handleUpdateCommand(args);
737
+ process.exit(await runUpdateCommand(args));
738
+ break;
739
+ case 'doctor':
740
+ process.exit(await runDoctorCommand(args));
741
+ break;
742
+ // 2026-09-19: 运行时检查/安装 (与 install.sh / postinstall / doctor 同一实现)
743
+ case 'runtime':
744
+ process.exit(await runRuntimeCommand(args));
759
745
  break;
760
746
  case 'model':
761
747
  await handleModelCommand(args);