@bolloon/bolloon-agent 0.1.0 → 0.1.2

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 (581) hide show
  1. package/bin/bolloon-cli.cjs +157 -0
  2. package/bin/bolloon-daemon.sh +207 -0
  3. package/bin/bolloon.cmd +11 -0
  4. package/dist/agents/constraint-layer.js +10 -15
  5. package/dist/agents/pi-sdk.js +433 -106
  6. package/dist/agents/protocol.js +82 -1
  7. package/dist/agents/subagent-manager.js +2 -2
  8. package/dist/agents/workflow-engine.js +15 -20
  9. package/dist/agents/workflow-pivot-loop.js +541 -0
  10. package/dist/bollharness/src/index.js +5 -0
  11. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +6 -0
  12. package/dist/bollharness/src/scripts/checks/check_api_types.js +45 -0
  13. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +146 -0
  14. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +6 -0
  15. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +6 -0
  16. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +6 -0
  17. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +6 -0
  18. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +135 -0
  19. package/dist/bollharness/src/scripts/checks/check_doc_links.js +31 -0
  20. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +6 -0
  21. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +34 -0
  22. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +63 -0
  23. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +41 -0
  24. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +6 -0
  25. package/dist/bollharness/src/scripts/checks/check_security.js +48 -0
  26. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +6 -0
  27. package/dist/bollharness/src/scripts/checks/check_versions.js +6 -0
  28. package/dist/bollharness/src/scripts/checks/finding.js +13 -0
  29. package/dist/bollharness/src/scripts/checks/next_decision_number.js +20 -0
  30. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +6 -0
  31. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +8 -0
  32. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +8 -0
  33. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +8 -0
  34. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +8 -0
  35. package/dist/bollharness/src/scripts/context_router.js +67 -0
  36. package/dist/bollharness/src/scripts/deploy-guard.js +157 -0
  37. package/dist/bollharness/src/scripts/guard-feedback.js +192 -0
  38. package/dist/bollharness/src/scripts/guard_router.js +158 -0
  39. package/dist/bollharness/src/scripts/hooks/_hook_output.js +6 -0
  40. package/dist/bollharness/src/scripts/hooks/auto-python3.js +6 -0
  41. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +6 -0
  42. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +6 -0
  43. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +92 -0
  44. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +63 -0
  45. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +6 -0
  46. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +6 -0
  47. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +6 -0
  48. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +6 -0
  49. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +6 -0
  50. package/dist/bollharness/src/scripts/hooks/loop-detection.js +73 -0
  51. package/dist/bollharness/src/scripts/hooks/owner-guard.js +6 -0
  52. package/dist/bollharness/src/scripts/hooks/precompact.js +6 -0
  53. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +6 -0
  54. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +108 -0
  55. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +6 -0
  56. package/dist/bollharness/src/scripts/hooks/session-reflection.js +7 -0
  57. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +7 -0
  58. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +7 -0
  59. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +7 -0
  60. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +157 -0
  61. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +6 -0
  62. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +10 -0
  63. package/dist/bollharness/src/scripts/install/install-trust-token.js +7 -0
  64. package/dist/bollharness/src/scripts/install/multi_project_registry.js +9 -0
  65. package/dist/bollharness/src/scripts/install/phase2_auto.js +21 -0
  66. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +6 -0
  67. package/dist/bollharness/src/scripts/install/tier_selector.js +7 -0
  68. package/dist/bollharness/src/scripts/install/transcript_miner.js +7 -0
  69. package/dist/bollharness/src/scripts/lib/claim_patterns.js +10 -0
  70. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +12 -0
  71. package/dist/bollharness/src/scripts/sanitize.js +6 -0
  72. package/dist/bollharness-integration/channel-judgment-engine.js +530 -0
  73. package/dist/bollharness-integration/context-chain-router.js +383 -0
  74. package/dist/bollharness-integration/context-router-judgment.js +13 -21
  75. package/dist/bollharness-integration/context-router.js +22 -64
  76. package/dist/bollharness-integration/gate-state-machine.js +14 -19
  77. package/dist/bollharness-integration/gate-transition-hooks.js +16 -61
  78. package/dist/bollharness-integration/guard-checker.js +21 -68
  79. package/dist/bollharness-integration/index.js +14 -124
  80. package/dist/bollharness-integration/integration.js +13 -20
  81. package/dist/bollharness-integration/llm-judgment-engine.js +569 -0
  82. package/dist/bollharness-integration/skill-adapter.js +18 -64
  83. package/dist/cli-entry.js +261 -0
  84. package/dist/constraint-runtime/src/commands.js +17 -7
  85. package/dist/constraint-runtime/src/constraint/budget.js +1 -6
  86. package/dist/constraint-runtime/src/constraint/permission.js +1 -6
  87. package/dist/constraint-runtime/src/models.js +1 -3
  88. package/dist/constraint-runtime/src/tools.js +17 -7
  89. package/dist/constraints/index.js +1 -7
  90. package/dist/documents/reader.js +8 -49
  91. package/dist/heartbeat/DaemonManager.js +242 -0
  92. package/dist/heartbeat/HealthMonitor.js +285 -0
  93. package/dist/heartbeat/StartupVerifier.js +205 -0
  94. package/dist/heartbeat/Watchdog.js +168 -0
  95. package/dist/heartbeat/index.js +84 -0
  96. package/dist/heartbeat/types.js +5 -0
  97. package/dist/index.js +381 -28
  98. package/dist/llm/config-store.js +31 -57
  99. package/dist/llm/llm-judgment-client.js +389 -0
  100. package/dist/llm/pi-ai.js +9 -52
  101. package/dist/network/agent-network.js +46 -90
  102. package/dist/network/hybrid-messenger.js +125 -0
  103. package/dist/network/iroh-bootstrap.js +38 -0
  104. package/dist/network/iroh-discovery.js +145 -0
  105. package/dist/network/iroh-integration.js +9 -16
  106. package/dist/network/iroh-transport.js +10 -48
  107. package/dist/network/p2p.js +23 -62
  108. package/dist/network/storage/adapters/json-adapter.js +4 -42
  109. package/dist/network/storage/index.js +147 -0
  110. package/dist/network/storage/types.js +14 -0
  111. package/dist/pi-ecosystem/index.js +233 -0
  112. package/dist/pi-ecosystem-colony/index.js +29 -90
  113. package/dist/pi-ecosystem-goals/index.js +20 -74
  114. package/dist/pi-ecosystem-judgment/decision.js +29 -47
  115. package/dist/pi-ecosystem-judgment/distillation.js +16 -29
  116. package/dist/pi-ecosystem-judgment/human-value-store.js +13 -60
  117. package/dist/pi-ecosystem-judgment/index.js +21 -74
  118. package/dist/pi-ecosystem-judgment/value-injection.js +26 -72
  119. package/dist/pi-ecosystem-mcp/index.js +24 -78
  120. package/dist/pi-ecosystem-subagents/index.js +20 -69
  121. package/dist/social/ant-colony/AdaptiveHeartbeat.js +3 -8
  122. package/dist/social/ant-colony/PheromoneEngine.js +11 -49
  123. package/dist/social/ant-colony/index.js +6 -0
  124. package/dist/social/ant-colony/types.js +4 -8
  125. package/dist/social/channels/ChannelManager.js +8 -46
  126. package/dist/social/channels/DiapChannelBridge.js +9 -47
  127. package/dist/social/channels/InterestMatcher.js +2 -7
  128. package/dist/social/channels/channel-agent-session.js +309 -0
  129. package/dist/social/channels/channel-heartbeat-agent.js +494 -0
  130. package/dist/social/channels/diap-doc-parser.js +204 -0
  131. package/dist/social/channels/harness-workflow-integrator.js +446 -0
  132. package/dist/social/channels/index.js +9 -0
  133. package/dist/social/channels/types.js +3 -7
  134. package/dist/social/global-shared-context.js +6 -47
  135. package/dist/social/heartbeat.js +29 -72
  136. package/dist/social/persona/enhanced-persona.js +299 -0
  137. package/dist/web/client.js +302 -136
  138. package/dist/web/components/p2p/index.js +159 -9
  139. package/dist/web/components/p2p/p2p-connection.js +136 -0
  140. package/dist/web/components/p2p/p2p-manager.js +24 -0
  141. package/dist/web/components/p2p/p2p-store-memory.js +1 -1
  142. package/dist/web/components/p2p/types.js +7 -0
  143. package/dist/web/index.html +5 -0
  144. package/dist/web/style.css +118 -0
  145. package/package.json +12 -6
  146. package/scripts/build-cli.js +206 -0
  147. package/scripts/postinstall.js +153 -0
  148. package/src/agents/pi-sdk.ts +347 -28
  149. package/src/agents/protocol.ts +95 -1
  150. package/src/agents/workflow-pivot-loop.ts +674 -0
  151. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +34 -0
  152. package/src/cli-entry.ts +304 -0
  153. package/src/heartbeat/DaemonManager.ts +283 -0
  154. package/src/heartbeat/HealthMonitor.ts +316 -0
  155. package/src/heartbeat/StartupVerifier.ts +223 -0
  156. package/src/heartbeat/Watchdog.ts +198 -0
  157. package/src/heartbeat/index.ts +108 -0
  158. package/src/heartbeat/types.ts +82 -0
  159. package/src/llm/config-store.ts +23 -5
  160. package/src/network/iroh-transport.ts +3 -3
  161. package/src/web/client.js +302 -136
  162. package/src/web/components/p2p/P2PModal.tsx +91 -3
  163. package/src/web/components/p2p/index.ts +171 -9
  164. package/src/web/components/p2p/p2p-connection.ts +153 -1
  165. package/src/web/components/p2p/p2p-manager.ts +39 -1
  166. package/src/web/components/p2p/p2p-store-memory.ts +1 -1
  167. package/src/web/components/p2p/p2p-tools.ts +315 -0
  168. package/src/web/components/p2p/types.ts +58 -0
  169. package/src/web/index.html +5 -0
  170. package/src/web/server.ts +353 -36
  171. package/src/web/style.css +118 -0
  172. package/tsconfig.cli.json +16 -0
  173. package/tsconfig.electron.json +1 -1
  174. package/tsconfig.json +1 -2
  175. package/dist/constraint-runtime/tests/agent.test.js +0 -16
  176. package/dist/constraint-runtime/tests/constraint.test.js +0 -41
  177. package/dist/constraint-runtime/tests/skill.test.js +0 -19
  178. package/dist/constraint-runtime/tests/thinking.test.js +0 -22
  179. package/dist/electron-preload.js +0 -15
  180. package/dist/electron-preload.js.map +0 -1
  181. package/dist/electron.js +0 -206
  182. package/dist/electron.js.map +0 -1
  183. package/dist/test/constraint-layer.test.js +0 -164
  184. package/dist/test/global-shared-context.test.js +0 -315
  185. package/dist/test/pi-sdk.test.js +0 -47
  186. package/dist/test/set-persona.test.js +0 -38
  187. package/dist/test/subagent-manager.test.js +0 -276
  188. package/dist/test/workflow-engine.test.js +0 -87
  189. package/dist/web/server.js +0 -1647
  190. package/dist/web/server.js.map +0 -1
  191. package/dist/workflows/collaboration.js +0 -374
  192. package/dist/workflows/index.js +0 -54
  193. package/docs/agent-communication.md +0 -333
  194. package/docs/plans/2026-05-15-document-agent-design.md +0 -479
  195. package/docs/plans/2026-05-15-document-agent-implementation-plan.md +0 -792
  196. package/docs/plans/2026-05-16-chat-ui-design.md +0 -86
  197. package/docs/plans/2026-05-16-constraint-runtime-design.md +0 -106
  198. package/docs/plans/2026-05-16-constraint-runtime-implementation.md +0 -441
  199. package/docs//346/225/260/345/255/246/350/276/205/345/212/251/346/231/272/350/203/275/344/275/223-/346/240/270/345/277/203/346/225/210/346/236/234/345/256/232/344/271/211.md +0 -287
  200. package/src/bollharness/.boll/CLAUDE.md.template +0 -34
  201. package/src/bollharness/.boll/MANIFEST.yaml +0 -213
  202. package/src/bollharness/.boll/active-review-agents/.gitkeep +0 -0
  203. package/src/bollharness/.boll/agents/review-base.yaml +0 -108
  204. package/src/bollharness/.boll/deploy-allowlist.yaml +0 -38
  205. package/src/bollharness/.boll/inbox/schema/message-v1.json +0 -99
  206. package/src/bollharness/.boll/install-staging/.gitkeep +0 -0
  207. package/src/bollharness/.boll/issue-adapter.yaml +0 -31
  208. package/src/bollharness/.boll/plugins/boll-mode-toolkit/contracts/mode-contract.md +0 -85
  209. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  210. package/src/bollharness/.boll/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  211. package/src/bollharness/.boll/rules/backend-routes.md +0 -31
  212. package/src/bollharness/.boll/rules/closure-semantics.md +0 -30
  213. package/src/bollharness/.boll/rules/env-vars.md +0 -32
  214. package/src/bollharness/.boll/rules/hanis-protocol.md +0 -145
  215. package/src/bollharness/.boll/rules/repo-structure.md +0 -42
  216. package/src/bollharness/.boll/rules/review-agent-isolation.md +0 -73
  217. package/src/bollharness/.boll/rules/source-of-truth.md +0 -33
  218. package/src/bollharness/.boll/settings.json +0 -180
  219. package/src/bollharness/.boll/settings.json.template +0 -31
  220. package/src/bollharness/.boll/skills/arch/SKILL.md +0 -372
  221. package/src/bollharness/.boll/skills/bug-pipeline/SKILL.md +0 -168
  222. package/src/bollharness/.boll/skills/bug-triage/SKILL.md +0 -161
  223. package/src/bollharness/.boll/skills/context-chains/SKILL.md +0 -250
  224. package/src/bollharness/.boll/skills/context-chains/context-chain-index.md +0 -48
  225. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/code_change_extractor.ts +0 -142
  226. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/debugging_extractor.ts +0 -126
  227. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/design_extractor.ts +0 -148
  228. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/planning_extractor.ts +0 -162
  229. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/question_extractor.ts +0 -116
  230. package/src/bollharness/.boll/skills/context-chains/work-type-extractors/review_extractor.ts +0 -136
  231. package/src/bollharness/.boll/skills/crystal-learn/SKILL.md +0 -93
  232. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-0.md +0 -34
  233. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-1.md +0 -34
  234. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-2.md +0 -35
  235. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-3.md +0 -34
  236. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-4.md +0 -43
  237. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-5.md +0 -34
  238. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-6.md +0 -37
  239. package/src/bollharness/.boll/skills/crystal-learn/invariants/INV-7.md +0 -46
  240. package/src/bollharness/.boll/skills/guardian-fixer/PROMPT.md +0 -415
  241. package/src/bollharness/.boll/skills/guardian-fixer/SKILL.md +0 -320
  242. package/src/bollharness/.boll/skills/harness-dev/SKILL.md +0 -93
  243. package/src/bollharness/.boll/skills/harness-dev/examples/README.md +0 -227
  244. package/src/bollharness/.boll/skills/harness-dev-handoff/SKILL.md +0 -165
  245. package/src/bollharness/.boll/skills/harness-eng/SKILL.md +0 -110
  246. package/src/bollharness/.boll/skills/harness-eng-test/SKILL.md +0 -79
  247. package/src/bollharness/.boll/skills/harness-lab/SKILL.md +0 -170
  248. package/src/bollharness/.boll/skills/harness-ops/SKILL.md +0 -57
  249. package/src/bollharness/.boll/skills/harness-voice/SKILL.md +0 -183
  250. package/src/bollharness/.boll/skills/judgment/SKILL.md +0 -115
  251. package/src/bollharness/.boll/skills/lead/SKILL.md +0 -245
  252. package/src/bollharness/.boll/skills/lead/install-wow-harness.md +0 -77
  253. package/src/bollharness/.boll/skills/lead/ref-review-sop.md +0 -91
  254. package/src/bollharness/.boll/skills/lead/ref-stages.md +0 -129
  255. package/src/bollharness/.boll/skills/skill-discovery/SKILL.md +0 -169
  256. package/src/bollharness/.boll/skills/task-arch/SKILL.md +0 -106
  257. package/src/bollharness/.boll/skills/toolkit/SKILL.md +0 -57
  258. package/src/bollharness/.boll/tasks/.gitkeep +0 -0
  259. package/src/bollharness/.boll/toolkit-index.yaml +0 -112
  260. package/src/bollharness/.claude/agents/review-base.yaml +0 -108
  261. package/src/bollharness/.claude/plugins/boll-mode-toolkit/.claude-plugin/plugin.json +0 -44
  262. package/src/bollharness/.claude/plugins/boll-review-toolkit/.claude-plugin/plugin.json +0 -24
  263. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/evidence-packet-schema.json +0 -102
  264. package/src/bollharness/.claude/plugins/boll-review-toolkit/contracts/review-contract.yaml +0 -247
  265. package/src/bollharness/.claude/settings.json +0 -157
  266. package/src/bollharness/.claude/skills/arch/SKILL.md +0 -64
  267. package/src/bollharness/.claude/skills/crystal-learn/SKILL.md +0 -93
  268. package/src/bollharness/.claude/skills/guardian-fixer/PROMPT.md +0 -44
  269. package/src/bollharness/.claude/skills/guardian-fixer/SKILL.md +0 -324
  270. package/src/bollharness/.claude/skills/harness-dev/SKILL.md +0 -93
  271. package/src/bollharness/.claude/skills/harness-dev/examples/README.md +0 -17
  272. package/src/bollharness/.claude/skills/harness-dev-handoff/SKILL.md +0 -165
  273. package/src/bollharness/.claude/skills/harness-eng/SKILL.md +0 -183
  274. package/src/bollharness/.claude/skills/harness-eng-test/SKILL.md +0 -57
  275. package/src/bollharness/.claude/skills/harness-ops/SKILL.md +0 -57
  276. package/src/bollharness/.claude/skills/harness-voice/SKILL.md +0 -84
  277. package/src/bollharness/.claude/skills/lead/INDEX.md +0 -28
  278. package/src/bollharness/.claude/skills/lead/SKILL.md +0 -24
  279. package/src/bollharness/.claude/skills/lead/install-wow-harness.md +0 -77
  280. package/src/bollharness/.claude/skills/lead/ref-review-sop.md +0 -48
  281. package/src/bollharness/.claude/skills/lead/ref-stages.md +0 -58
  282. package/src/bollharness/.claude/skills/plan-lock/SKILL.md +0 -74
  283. package/src/bollharness/.claude/skills/skill-discovery/SKILL.md +0 -120
  284. package/src/bollharness/.claude/skills/task-arch/SKILL.md +0 -106
  285. package/src/bollharness/.claude/skills/toolkit/SKILL.md +0 -57
  286. package/src/bollharness/.claude/skills/toolkit/list.sh +0 -92
  287. package/src/bollharness/.githooks/pre-commit +0 -21
  288. package/src/bollharness/.github/workflows/ci.yml +0 -88
  289. package/src/bollharness/docs/decisions/ADR-030-guard-signal-protocol-and-governance-reload.md +0 -1076
  290. package/src/bollharness/docs/decisions/ADR-038-harness-optimization-strategy.md +0 -2039
  291. package/src/bollharness/docs/decisions/ADR-041-codex-claude-code-division-of-labor.md +0 -128
  292. package/src/bollharness/docs/decisions/ADR-H1-crystal-learn-revival.md +0 -188
  293. package/src/bollharness/docs/decisions/ADR-H2-identity-isolation.md +0 -183
  294. package/src/bollharness/docs/decisions/ADR-H3-memory-scope.md +0 -133
  295. package/src/bollharness/docs/decisions/ADR-H4-prompt-governance.md +0 -146
  296. package/src/bollharness/docs/decisions/ADR-H5-gate-quantization.md +0 -212
  297. package/src/bollharness/docs/decisions/ADR-H6-state-file-health.md +0 -211
  298. package/src/bollharness/docs/decisions/ADR-H8-issue-and-doc-compliance.md +0 -202
  299. package/src/bollharness/docs/decisions/ADR-H9-mailbox.md +0 -231
  300. package/src/bollharness/docs/decisions/PLAN-H1-crystal-learn-revival.md +0 -270
  301. package/src/bollharness/docs/decisions/PLAN-H2-identity-isolation.md +0 -291
  302. package/src/bollharness/docs/decisions/PLAN-H3-memory-scope.md +0 -228
  303. package/src/bollharness/docs/decisions/PLAN-H4-prompt-governance.md +0 -227
  304. package/src/bollharness/docs/decisions/PLAN-H5-gate-quantization.md +0 -239
  305. package/src/bollharness/docs/decisions/PLAN-H6-state-file-health.md +0 -325
  306. package/src/bollharness/docs/decisions/PLAN-H8-issue-and-doc-compliance.md +0 -242
  307. package/src/bollharness/docs/decisions/PLAN-H9-mailbox.md +0 -378
  308. package/src/bollharness/docs/launch-article-en.md +0 -276
  309. package/src/bollharness/docs/launch-article-zh.md +0 -305
  310. package/src/bollharness/docs/practice.html +0 -356
  311. package/src/bollharness/docs/practice.md +0 -82
  312. package/src/bollharness/docs/research/round-1/README.md +0 -11
  313. package/src/bollharness/docs/research/round-2/README.md +0 -11
  314. package/src/bollharness/docs/research/round-3/README.md +0 -11
  315. package/src/bollharness/docs/research/round-4/README.md +0 -11
  316. package/src/bollharness/docs/research/round-5/README.md +0 -11
  317. package/src/bollharness/docs/research/round-6/README.md +0 -11
  318. package/src/bollharness/package-lock.json +0 -48
  319. package/src/bollharness/reference/boll-reference/.claude/rules/backend-routes.md +0 -268
  320. package/src/bollharness/reference/boll-reference/.claude/rules/bridge.md +0 -20
  321. package/src/bollharness/reference/boll-reference/.claude/rules/closure-semantics.md +0 -30
  322. package/src/bollharness/reference/boll-reference/.claude/rules/coaching.md +0 -13
  323. package/src/bollharness/reference/boll-reference/.claude/rules/env-vars.md +0 -50
  324. package/src/bollharness/reference/boll-reference/.claude/rules/hackathon.md +0 -12
  325. package/src/bollharness/reference/boll-reference/.claude/rules/repo-structure.md +0 -184
  326. package/src/bollharness/reference/boll-reference/.claude/rules/review-agent-isolation.md +0 -112
  327. package/src/bollharness/reference/boll-reference/.claude/rules/scenes.md +0 -12
  328. package/src/bollharness/reference/boll-reference/.claude/skills/arch/SKILL.md +0 -551
  329. package/src/bollharness/reference/boll-reference/.claude/skills/boll-animation/SKILL.md +0 -26
  330. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/SKILL.md +0 -227
  331. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/agents/openai.yaml +0 -4
  332. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-failure-taxonomy.md +0 -142
  333. package/src/bollharness/reference/boll-reference/.claude/skills/boll-bridge/references/bridge-validation-ladder.md +0 -107
  334. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal/SKILL.md +0 -893
  335. package/src/bollharness/reference/boll-reference/.claude/skills/boll-crystal-learn/SKILL.md +0 -89
  336. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/SKILL.md +0 -93
  337. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev/examples/README.md +0 -209
  338. package/src/bollharness/reference/boll-reference/.claude/skills/boll-dev-handoff/SKILL.md +0 -165
  339. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng/SKILL.md +0 -110
  340. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-frontend/SKILL.md +0 -203
  341. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-hdc/SKILL.md +0 -27
  342. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-orchestrator/SKILL.md +0 -28
  343. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-prompt/SKILL.md +0 -27
  344. package/src/bollharness/reference/boll-reference/.claude/skills/boll-eng-test/SKILL.md +0 -79
  345. package/src/bollharness/reference/boll-reference/.claude/skills/boll-lab/SKILL.md +0 -372
  346. package/src/bollharness/reference/boll-reference/.claude/skills/boll-run/SKILL.md +0 -437
  347. package/src/bollharness/reference/boll-reference/.claude/skills/boll-ux-appstore/SKILL.md +0 -27
  348. package/src/bollharness/reference/boll-reference/.claude/skills/boll-voice/SKILL.md +0 -442
  349. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/PROMPT.md +0 -421
  350. package/src/bollharness/reference/boll-reference/.claude/skills/guardian-fixer/SKILL.md +0 -326
  351. package/src/bollharness/reference/boll-reference/.claude/skills/lead/SKILL.md +0 -155
  352. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-review-sop.md +0 -91
  353. package/src/bollharness/reference/boll-reference/.claude/skills/lead/ref-stages.md +0 -129
  354. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-preview.png +0 -0
  355. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v2.png +0 -0
  356. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v3.png +0 -0
  357. package/src/bollharness/reference/boll-reference/.claude/skills/nature-designer/output/skill-map-v4.png +0 -0
  358. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/SKILL.md +0 -425
  359. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-three-checks.md +0 -62
  360. package/src/bollharness/reference/boll-reference/.claude/skills/plan-lock/ref-wp-templates.md +0 -78
  361. package/src/bollharness/reference/boll-reference/.claude/skills/task-arch/SKILL.md +0 -76
  362. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/SKILL.md +0 -57
  363. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-graph/beads-graph.sh +0 -153
  364. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/SKILL.md +0 -52
  365. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-init/beads-auto-link.sh +0 -76
  366. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/SKILL.md +0 -50
  367. package/src/bollharness/reference/boll-reference/.claude/skills/vibedevteam-sync/beads-sync-proj.sh +0 -108
  368. package/src/bollharness/reference/boll-reference/docs/architecture/AGENT-PROFILE.md +0 -151
  369. package/src/bollharness/reference/boll-reference/docs/architecture/COST-STRUCTURE.md +0 -56
  370. package/src/bollharness/reference/boll-reference/docs/architecture/INDEX.md +0 -76
  371. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE1-INTENT-FIELD.md +0 -116
  372. package/src/bollharness/reference/boll-reference/docs/architecture/MODULE2-CRYSTALLIZATION.md +0 -200
  373. package/src/bollharness/reference/boll-reference/docs/architecture/PRINCIPLES.md +0 -84
  374. package/src/bollharness/reference/boll-reference/docs/architecture/PROTOCOL-CORE.md +0 -209
  375. package/src/bollharness/reference/boll-reference/docs/architecture/VISION.md +0 -181
  376. package/src/bollharness/reference/boll-reference/docs/architecture/discussions/D-01-MARKET-SCENE-PROTOCOL.md +0 -754
  377. package/src/bollharness/templates/scaffold/.boll/guard/.gitkeep +0 -0
  378. package/src/bollharness/templates/scaffold/.boll/metrics/.gitkeep +0 -0
  379. package/src/bollharness/templates/scaffold/.boll/state/.gitkeep +0 -0
  380. package/src/bollharness/templates/scaffold/docs/INDEX.md +0 -3
  381. package/src/bollharness/templates/scaffold/docs/decisions/ADR_TEMPLATE.md +0 -38
  382. package/src/bollharness/templates/scaffold/docs/decisions/PLAN_TEMPLATE.md +0 -45
  383. package/src/bollharness/templates/scaffold/docs/decisions/tasks/.gitkeep +0 -2
  384. package/src/bollharness/templates/scaffold/docs/issues/.gitkeep +0 -0
  385. package/src/bollharness/templates/scaffold/docs/issues/GUARD_ISSUE_TEMPLATE.md +0 -35
  386. package/src/bollharness/templates/scaffold/docs/issues/ISSUE_TEMPLATE.md +0 -51
  387. package/src/bollharness/tsconfig.json +0 -26
  388. package/src/constraint-runtime/package-lock.json +0 -48
  389. package/src/constraint-runtime/package.json +0 -34
  390. package/src/constraint-runtime/src/_archive_helper.ts +0 -16
  391. package/src/constraint-runtime/src/agent/coordinator.ts +0 -71
  392. package/src/constraint-runtime/src/agent/index.ts +0 -1
  393. package/src/constraint-runtime/src/assistant/index.ts +0 -15
  394. package/src/constraint-runtime/src/bootstrap/index.ts +0 -15
  395. package/src/constraint-runtime/src/bootstrap_graph.ts +0 -17
  396. package/src/constraint-runtime/src/bridge/index.ts +0 -15
  397. package/src/constraint-runtime/src/buddy/index.ts +0 -15
  398. package/src/constraint-runtime/src/cli/index.ts +0 -15
  399. package/src/constraint-runtime/src/command_graph.ts +0 -20
  400. package/src/constraint-runtime/src/commands.ts +0 -83
  401. package/src/constraint-runtime/src/components/index.ts +0 -15
  402. package/src/constraint-runtime/src/constants/index.ts +0 -15
  403. package/src/constraint-runtime/src/constraint/budget.ts +0 -25
  404. package/src/constraint-runtime/src/constraint/index.ts +0 -3
  405. package/src/constraint-runtime/src/constraint/permission.ts +0 -28
  406. package/src/constraint-runtime/src/context.ts +0 -45
  407. package/src/constraint-runtime/src/coordinator/index.ts +0 -15
  408. package/src/constraint-runtime/src/cost_hook.ts +0 -6
  409. package/src/constraint-runtime/src/cost_tracker.ts +0 -9
  410. package/src/constraint-runtime/src/deferred_init.ts +0 -18
  411. package/src/constraint-runtime/src/direct_modes.ts +0 -13
  412. package/src/constraint-runtime/src/dynamic-tool-loader.ts +0 -115
  413. package/src/constraint-runtime/src/entrypoints/index.ts +0 -15
  414. package/src/constraint-runtime/src/execution_registry.ts +0 -41
  415. package/src/constraint-runtime/src/history.ts +0 -16
  416. package/src/constraint-runtime/src/hooks/index.ts +0 -15
  417. package/src/constraint-runtime/src/index.ts +0 -28
  418. package/src/constraint-runtime/src/ink.ts +0 -4
  419. package/src/constraint-runtime/src/keybindings/index.ts +0 -15
  420. package/src/constraint-runtime/src/memdir/index.ts +0 -15
  421. package/src/constraint-runtime/src/migrations/index.ts +0 -15
  422. package/src/constraint-runtime/src/models.ts +0 -49
  423. package/src/constraint-runtime/src/moreright/index.ts +0 -15
  424. package/src/constraint-runtime/src/native_ts/index.ts +0 -15
  425. package/src/constraint-runtime/src/output_styles/index.ts +0 -15
  426. package/src/constraint-runtime/src/parity_audit.ts +0 -23
  427. package/src/constraint-runtime/src/plugins/index.ts +0 -15
  428. package/src/constraint-runtime/src/port_manifest.ts +0 -20
  429. package/src/constraint-runtime/src/prefetch.ts +0 -17
  430. package/src/constraint-runtime/src/query.ts +0 -7
  431. package/src/constraint-runtime/src/reference_data/archive_surface_snapshot.json +0 -63
  432. package/src/constraint-runtime/src/reference_data/commands_snapshot.json +0 -1037
  433. package/src/constraint-runtime/src/reference_data/subsystems/OpenCLI.json +0 -10
  434. package/src/constraint-runtime/src/reference_data/subsystems/PolymarketSDK.json +0 -12
  435. package/src/constraint-runtime/src/reference_data/subsystems/SafeSDK.json +0 -14
  436. package/src/constraint-runtime/src/reference_data/subsystems/assistant.json +0 -8
  437. package/src/constraint-runtime/src/reference_data/subsystems/bootstrap.json +0 -8
  438. package/src/constraint-runtime/src/reference_data/subsystems/bridge.json +0 -32
  439. package/src/constraint-runtime/src/reference_data/subsystems/buddy.json +0 -13
  440. package/src/constraint-runtime/src/reference_data/subsystems/cli.json +0 -26
  441. package/src/constraint-runtime/src/reference_data/subsystems/components.json +0 -32
  442. package/src/constraint-runtime/src/reference_data/subsystems/constants.json +0 -28
  443. package/src/constraint-runtime/src/reference_data/subsystems/coordinator.json +0 -8
  444. package/src/constraint-runtime/src/reference_data/subsystems/entrypoints.json +0 -15
  445. package/src/constraint-runtime/src/reference_data/subsystems/hooks.json +0 -32
  446. package/src/constraint-runtime/src/reference_data/subsystems/keybindings.json +0 -21
  447. package/src/constraint-runtime/src/reference_data/subsystems/memdir.json +0 -15
  448. package/src/constraint-runtime/src/reference_data/subsystems/migrations.json +0 -18
  449. package/src/constraint-runtime/src/reference_data/subsystems/moreright.json +0 -8
  450. package/src/constraint-runtime/src/reference_data/subsystems/native_ts.json +0 -11
  451. package/src/constraint-runtime/src/reference_data/subsystems/outputStyles.json +0 -8
  452. package/src/constraint-runtime/src/reference_data/subsystems/plugins.json +0 -9
  453. package/src/constraint-runtime/src/reference_data/subsystems/remote.json +0 -11
  454. package/src/constraint-runtime/src/reference_data/subsystems/schemas.json +0 -8
  455. package/src/constraint-runtime/src/reference_data/subsystems/screens.json +0 -10
  456. package/src/constraint-runtime/src/reference_data/subsystems/server.json +0 -10
  457. package/src/constraint-runtime/src/reference_data/subsystems/services.json +0 -32
  458. package/src/constraint-runtime/src/reference_data/subsystems/skills.json +0 -27
  459. package/src/constraint-runtime/src/reference_data/subsystems/state.json +0 -13
  460. package/src/constraint-runtime/src/reference_data/subsystems/types.json +0 -18
  461. package/src/constraint-runtime/src/reference_data/subsystems/upstreamproxy.json +0 -9
  462. package/src/constraint-runtime/src/reference_data/subsystems/utils.json +0 -32
  463. package/src/constraint-runtime/src/reference_data/subsystems/vim.json +0 -12
  464. package/src/constraint-runtime/src/reference_data/subsystems/voice.json +0 -8
  465. package/src/constraint-runtime/src/reference_data/tools_snapshot.json +0 -1042
  466. package/src/constraint-runtime/src/remote/index.ts +0 -15
  467. package/src/constraint-runtime/src/remote_runtime.ts +0 -17
  468. package/src/constraint-runtime/src/runtime/index.ts +0 -1
  469. package/src/constraint-runtime/src/runtime/session.ts +0 -42
  470. package/src/constraint-runtime/src/schemas/index.ts +0 -15
  471. package/src/constraint-runtime/src/screens/index.ts +0 -15
  472. package/src/constraint-runtime/src/server/index.ts +0 -15
  473. package/src/constraint-runtime/src/services/index.ts +0 -15
  474. package/src/constraint-runtime/src/session_store.ts +0 -32
  475. package/src/constraint-runtime/src/setup.ts +0 -50
  476. package/src/constraint-runtime/src/skills/index.ts +0 -1
  477. package/src/constraint-runtime/src/skills/skill-registry.ts +0 -40
  478. package/src/constraint-runtime/src/state/index.ts +0 -15
  479. package/src/constraint-runtime/src/system_init.ts +0 -21
  480. package/src/constraint-runtime/src/thinking/engine.ts +0 -61
  481. package/src/constraint-runtime/src/thinking/index.ts +0 -1
  482. package/src/constraint-runtime/src/tool_pool.ts +0 -20
  483. package/src/constraint-runtime/src/tools/OpenCLI/execAdapter.ts +0 -12
  484. package/src/constraint-runtime/src/tools/OpenCLI/listAdapters.ts +0 -12
  485. package/src/constraint-runtime/src/tools/OpenCLI/runCommand.ts +0 -13
  486. package/src/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.ts +0 -10
  487. package/src/constraint-runtime/src/tools/PolymarketSDK/createOrder.ts +0 -13
  488. package/src/constraint-runtime/src/tools/PolymarketSDK/getMarket.ts +0 -14
  489. package/src/constraint-runtime/src/tools/PolymarketSDK/getOrders.ts +0 -10
  490. package/src/constraint-runtime/src/tools/PolymarketSDK/listMarkets.ts +0 -24
  491. package/src/constraint-runtime/src/tools/SafeSDK/confirmTransaction.ts +0 -13
  492. package/src/constraint-runtime/src/tools/SafeSDK/createTransaction.ts +0 -23
  493. package/src/constraint-runtime/src/tools/SafeSDK/deploySafe.ts +0 -12
  494. package/src/constraint-runtime/src/tools/SafeSDK/executeTransaction.ts +0 -12
  495. package/src/constraint-runtime/src/tools/SafeSDK/getBalance.ts +0 -10
  496. package/src/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.ts +0 -10
  497. package/src/constraint-runtime/src/tools/SafeSDK/proposeTransaction.ts +0 -14
  498. package/src/constraint-runtime/src/tools/WalletTools/autoPay.ts +0 -58
  499. package/src/constraint-runtime/src/tools/WalletTools/createWallet.ts +0 -19
  500. package/src/constraint-runtime/src/tools/WalletTools/getBalance.ts +0 -28
  501. package/src/constraint-runtime/src/tools/WalletTools/importWallet.ts +0 -34
  502. package/src/constraint-runtime/src/tools/WalletTools/sendTransaction.ts +0 -50
  503. package/src/constraint-runtime/src/tools/WalletTools/signMessage.ts +0 -23
  504. package/src/constraint-runtime/src/tools/WalletTools/transferToken.ts +0 -49
  505. package/src/constraint-runtime/src/tools.ts +0 -100
  506. package/src/constraint-runtime/src/transcript.ts +0 -23
  507. package/src/constraint-runtime/src/types/index.ts +0 -15
  508. package/src/constraint-runtime/src/upstream_proxy/index.ts +0 -15
  509. package/src/constraint-runtime/src/utils/index.ts +0 -15
  510. package/src/constraint-runtime/src/vim/index.ts +0 -15
  511. package/src/constraint-runtime/src/voice/index.ts +0 -15
  512. package/src/constraint-runtime/tests/agent.test.ts +0 -20
  513. package/src/constraint-runtime/tests/constraint.test.ts +0 -47
  514. package/src/constraint-runtime/tests/skill.test.ts +0 -23
  515. package/src/constraint-runtime/tests/thinking.test.ts +0 -28
  516. package/src/constraint-runtime/tsconfig.json +0 -13
  517. package/src/pi-ecosystem/index.ts +0 -453
  518. package/src/pi-ecosystem-colony/index.ts +0 -482
  519. package/src/pi-ecosystem-goals/index.ts +0 -585
  520. package/src/pi-ecosystem-judgment/decision.ts +0 -431
  521. package/src/pi-ecosystem-judgment/distillation.ts +0 -398
  522. package/src/pi-ecosystem-judgment/human-value-store.ts +0 -580
  523. package/src/pi-ecosystem-judgment/index.ts +0 -678
  524. package/src/pi-ecosystem-judgment/value-injection.ts +0 -744
  525. package/src/pi-ecosystem-mcp/index.ts +0 -427
  526. package/src/pi-ecosystem-subagents/index.ts +0 -408
  527. package/src/test/ai-judgment-test.ts +0 -92
  528. package/src/test/bollharness-integration.test.ts +0 -398
  529. package/src/test/channel-agent-multi-dialogue.ts +0 -265
  530. package/src/test/channel-heartbeat-agent-test.ts +0 -244
  531. package/src/test/constraint-layer.test.ts +0 -191
  532. package/src/test/diap-identity-test.ts +0 -222
  533. package/src/test/diap-quick-test.ts +0 -73
  534. package/src/test/global-shared-context.test.ts +0 -393
  535. package/src/test/harness-judgment-injection.test.ts +0 -353
  536. package/src/test/harness-workflow-integrator-test.ts +0 -285
  537. package/src/test/human-value-store.test.ts +0 -316
  538. package/src/test/hybrid-integration-test.ts +0 -126
  539. package/src/test/hybrid-messenger-verify.ts +0 -68
  540. package/src/test/iroh-bistream-debug.ts +0 -50
  541. package/src/test/iroh-communication.test.ts +0 -81
  542. package/src/test/iroh-debug-test.ts +0 -69
  543. package/src/test/iroh-diap-test.ts +0 -90
  544. package/src/test/iroh-direct-connect.ts +0 -65
  545. package/src/test/iroh-e2e-fixed.ts +0 -106
  546. package/src/test/iroh-e2e-same-process.ts +0 -83
  547. package/src/test/iroh-e2e.ts +0 -83
  548. package/src/test/iroh-final-e2e.ts +0 -84
  549. package/src/test/iroh-relay-test.ts +0 -46
  550. package/src/test/iroh-simple-test.ts +0 -49
  551. package/src/test/iroh-transport-verify.ts +0 -60
  552. package/src/test/iroh-transport.test.ts +0 -47
  553. package/src/test/iroh-two-nodes.ts +0 -87
  554. package/src/test/iroh-verify.ts +0 -55
  555. package/src/test/judgment-decision.test.ts +0 -373
  556. package/src/test/llm-judgment-integration.test.ts +0 -257
  557. package/src/test/p2p-agent-complex-dialogue.ts +0 -490
  558. package/src/test/p2p-agent-dialogue.ts +0 -423
  559. package/src/test/p2p-agent-full-bidirectional.ts +0 -686
  560. package/src/test/p2p-agent-harness-flow.ts +0 -562
  561. package/src/test/p2p-agent-harness-single.ts +0 -175
  562. package/src/test/p2p-ai-dialogue-test.ts +0 -374
  563. package/src/test/p2p-cid-connect-test.ts +0 -245
  564. package/src/test/p2p-connect-receiver.ts +0 -85
  565. package/src/test/p2p-iroh-test.ts +0 -214
  566. package/src/test/p2p-minimal-test.ts +0 -264
  567. package/src/test/p2p-node-1.ts +0 -172
  568. package/src/test/p2p-node-2.ts +0 -172
  569. package/src/test/p2p-server.ts +0 -335
  570. package/src/test/p2p-two-nodes-test.ts +0 -542
  571. package/src/test/pi-sdk.test.ts +0 -47
  572. package/src/test/set-persona.ts +0 -56
  573. package/src/test/simple.test.ts +0 -11
  574. package/src/test/storage-integration.test.ts +0 -191
  575. package/src/test/subagent-manager.test.ts +0 -392
  576. package/src/test/test-gate-flow.test.ts +0 -92
  577. package/src/test/workflow-engine.test.ts +0 -101
  578. package/src/workflows/collaboration.ts +0 -455
  579. package/src/workflows/index.ts +0 -64
  580. package/vitest.config.ts +0 -12
  581. package//346/203/263/346/263/225.md +0 -79
@@ -1,191 +0,0 @@
1
- /**
2
- * Storage Layer Integration Test
3
- * 测试消息存储、离线队列和响应持久化
4
- *
5
- * 运行: npx tsx src/test/storage-integration.test.ts
6
- */
7
-
8
- import { config } from 'dotenv';
9
- import * as fs from 'fs/promises';
10
- import * as path from 'path';
11
-
12
- config();
13
-
14
- const TEST_DIR = path.join(process.env.HOME || '/tmp', '.bolloon', 'test-messages');
15
- const TEST_CLEANUP = true;
16
-
17
- async function runStorageTest() {
18
- console.log('\n========================================');
19
- console.log(' Storage Layer Integration Test');
20
- console.log('========================================\n');
21
-
22
- // 清理测试目录
23
- if (TEST_CLEANUP) {
24
- try {
25
- await fs.rm(TEST_DIR, { recursive: true, force: true });
26
- console.log('✓ Cleaned test directory');
27
- } catch {}
28
- }
29
-
30
- // 导入存储层
31
- console.log('━━━ 导入存储层 ━━━\n');
32
-
33
- const { JsonMessageStore } = await import('../network/storage/adapters/json-adapter.js');
34
- const { createMessageStore, createInMemoryStore } = await import('../network/storage/index.js');
35
-
36
- // 测试 1: JSON 存储初始化
37
- console.log('━━━ 测试 1: JSON 存储初始化 ━━━\n');
38
-
39
- const jsonStore = new JsonMessageStore({ baseDir: TEST_DIR });
40
- await jsonStore.initialize();
41
-
42
- console.log('✓ JsonMessageStore initialized');
43
- console.log(` Base dir: ${TEST_DIR}`);
44
-
45
- // 测试 2: 保存消息
46
- console.log('\n━━━ 测试 2: 保存消息 ━━━\n');
47
-
48
- const msg1 = await jsonStore.saveMessage({
49
- direction: 'sent',
50
- type: 'task',
51
- payload: Buffer.from('Hello World').toString('base64'),
52
- from: 'node-A',
53
- to: 'node-B',
54
- timestamp: Date.now(),
55
- status: 'delivered',
56
- retryCount: 0,
57
- });
58
-
59
- console.log('✓ Saved message');
60
- console.log(` ID: ${msg1.id}`);
61
- console.log(` Type: ${msg1.type}`);
62
- console.log(` Status: ${msg1.status}`);
63
-
64
- // 测试 3: 查询消息
65
- console.log('\n━━━ 测试 3: 查询消息 ━━━\n');
66
-
67
- const allMessages = await jsonStore.getMessages();
68
- console.log(`✓ Found ${allMessages.length} messages`);
69
-
70
- const sentMessages = await jsonStore.getMessages({ direction: 'sent' });
71
- console.log(`✓ Found ${sentMessages.length} sent messages`);
72
-
73
- const taskMessages = await jsonStore.getMessages({ type: 'task' });
74
- console.log(`✓ Found ${taskMessages.length} task messages`);
75
-
76
- // 测试 4: 离线消息队列
77
- console.log('\n━━━ 测试 4: 离线消息队列 ━━━\n');
78
-
79
- const offline1 = await jsonStore.enqueueOfflineMessage({
80
- targetNodeId: 'node-B',
81
- type: 'urgent-task',
82
- payload: Buffer.from('Urgent message').toString('base64'),
83
- createdAt: Date.now(),
84
- transport: 'libp2p',
85
- retryCount: 0,
86
- });
87
-
88
- console.log('✓ Enqueued offline message');
89
- console.log(` ID: ${offline1.id}`);
90
- console.log(` Target: ${offline1.targetNodeId}`);
91
-
92
- const pendingCount = await jsonStore.getPendingOfflineCount();
93
- console.log(`✓ Pending offline count: ${pendingCount}`);
94
-
95
- const nodeBMessages = await jsonStore.getOfflineMessages('node-B');
96
- console.log(`✓ Messages for node-B: ${nodeBMessages.length}`);
97
-
98
- // 测试 5: 待响应请求
99
- console.log('\n━━━ 测试 5: 待响应请求 ━━━\n');
100
-
101
- const pending = await jsonStore.savePendingResponse({
102
- requestId: 'req-123',
103
- type: 'task-request',
104
- payload: 'Request payload',
105
- fromNodeId: 'node-A',
106
- timestamp: Date.now(),
107
- timeout: 30000,
108
- });
109
-
110
- console.log('✓ Saved pending response');
111
- console.log(` ID: ${pending.id}`);
112
- console.log(` Request ID: ${pending.requestId}`);
113
-
114
- const retrieved = await jsonStore.getPendingResponse('req-123');
115
- console.log(`✓ Retrieved pending: ${retrieved ? 'found' : 'not found'}`);
116
-
117
- await jsonStore.removePendingResponse('req-123');
118
- console.log('✓ Removed pending response');
119
-
120
- // 测试 6: 内存存储
121
- console.log('\n━━━ 测试 6: 内存存储 ━━━\n');
122
-
123
- const memStore = createInMemoryStore();
124
- await memStore.initialize();
125
-
126
- const memMsg = await memStore.saveMessage({
127
- direction: 'received',
128
- type: 'chat',
129
- payload: 'In-memory message',
130
- from: 'peer-X',
131
- to: 'me',
132
- timestamp: Date.now(),
133
- status: 'pending',
134
- retryCount: 0,
135
- });
136
-
137
- console.log('✓ Saved to in-memory store');
138
- console.log(` ID: ${memMsg.id}`);
139
-
140
- await memStore.shutdown();
141
- console.log('✓ In-memory store shutdown');
142
-
143
- // 测试 7: 统计和清理
144
- console.log('\n━━━ 测试 7: 统计和清理 ━━━\n');
145
-
146
- const msgCount = await jsonStore.getMessageCount();
147
- console.log(`✓ Total messages: ${msgCount}`);
148
-
149
- const oldMessages = await jsonStore.getMessages({
150
- endTime: Date.now() - 1000, // 1秒前
151
- });
152
- console.log(`✓ Old messages (< 1s): ${oldMessages.length}`);
153
-
154
- // 测试 8: 工厂函数
155
- console.log('\n━━━ 测试 8: 工厂函数 ━━━\n');
156
-
157
- const store = await createMessageStore('libp2p', { baseDir: TEST_DIR });
158
- console.log('✓ Created store via factory');
159
-
160
- await store.shutdown();
161
- console.log('✓ Store shutdown');
162
-
163
- // 验证文件已创建
164
- console.log('\n━━━ 验证存储文件 ━━━\n');
165
-
166
- try {
167
- const files = await fs.readdir(TEST_DIR);
168
- console.log(`✓ Storage files created: ${files.length}`);
169
- for (const file of files) {
170
- console.log(` - ${file}`);
171
- }
172
- } catch (e) {
173
- console.log('No storage files yet (messages not persisted to disk in this session)');
174
- }
175
-
176
- // 最终清理
177
- await jsonStore.shutdown();
178
- console.log('\n✓ All stores shutdown');
179
-
180
- // 统计
181
- console.log('\n========================================');
182
- console.log(' 测试完成');
183
- console.log(` 消息数: ${msgCount}`);
184
- console.log(` 离线消息: ${pendingCount}`);
185
- console.log('========================================\n');
186
- }
187
-
188
- runStorageTest().catch(err => {
189
- console.error('Test failed:', err);
190
- process.exit(1);
191
- });
@@ -1,392 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import * as fs from 'fs/promises';
3
- import * as path from 'path';
4
- import {
5
- SubAgentManager,
6
- resetSubAgentManager,
7
- type SubAgent,
8
- type SubAgentTask
9
- } from '../agents/subagent-manager.js';
10
-
11
- const TEST_STORAGE_PATH = path.join('/tmp', '.bolloon-test', 'agents');
12
-
13
- describe('SubAgentManager', () => {
14
- let manager: SubAgentManager;
15
-
16
- beforeEach(async () => {
17
- resetSubAgentManager();
18
- manager = new SubAgentManager({ storagePath: TEST_STORAGE_PATH });
19
- try {
20
- await fs.rm(TEST_STORAGE_PATH, { recursive: true, force: true });
21
- } catch {}
22
- });
23
-
24
- describe('Agent Registration', () => {
25
- it('should register a new agent', async () => {
26
- await manager.initialize();
27
-
28
- const agent = await manager.registerAgent({
29
- name: 'TestAgent',
30
- capabilities: ['coding', 'debugging'],
31
- parentAgentId: 'parent-001'
32
- });
33
-
34
- expect(agent.id).toBeDefined();
35
- expect(agent.name).toBe('TestAgent');
36
- expect(agent.capabilities).toEqual(['coding', 'debugging']);
37
- expect(agent.status).toBe('active');
38
- expect(agent.parentAgentId).toBe('parent-001');
39
- });
40
-
41
- it('should update agent status', async () => {
42
- await manager.initialize();
43
- const agent = await manager.registerAgent({
44
- name: 'TestAgent',
45
- capabilities: ['coding']
46
- });
47
-
48
- await manager.updateAgentStatus(agent.id, 'busy');
49
- const updated = await manager.getAgent(agent.id);
50
-
51
- expect(updated?.status).toBe('busy');
52
- });
53
-
54
- it('should update agent info', async () => {
55
- await manager.initialize();
56
- const agent = await manager.registerAgent({
57
- name: 'TestAgent',
58
- capabilities: ['coding']
59
- });
60
-
61
- await manager.updateAgent(agent.id, {
62
- did: 'did:key:test123',
63
- walletAddress: '0x123...'
64
- });
65
-
66
- const updated = await manager.getAgent(agent.id);
67
- expect(updated?.did).toBe('did:key:test123');
68
- expect(updated?.walletAddress).toBe('0x123...');
69
- });
70
-
71
- it('should get all agents', async () => {
72
- await manager.initialize();
73
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
74
- await manager.registerAgent({ name: 'Agent2', capabilities: ['writing'] });
75
-
76
- const agents = await manager.getAllAgents();
77
- expect(agents).toHaveLength(2);
78
- });
79
-
80
- it('should get active agents only', async () => {
81
- await manager.initialize();
82
- const agent1 = await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
83
- await manager.registerAgent({ name: 'Agent2', capabilities: ['writing'] });
84
-
85
- await manager.updateAgentStatus(agent1.id, 'terminated');
86
-
87
- const activeAgents = await manager.getActiveAgents();
88
- expect(activeAgents).toHaveLength(1);
89
- expect(activeAgents[0].name).toBe('Agent2');
90
- });
91
-
92
- it('should find agents by capability', async () => {
93
- await manager.initialize();
94
- await manager.registerAgent({ name: 'Coder', capabilities: ['coding', 'debugging'] });
95
- await manager.registerAgent({ name: 'Writer', capabilities: ['writing', 'editing'] });
96
- await manager.registerAgent({ name: 'FullStack', capabilities: ['coding', 'writing'] });
97
-
98
- const coders = await manager.getAgentsByCapability('coding');
99
- expect(coders).toHaveLength(2);
100
- });
101
-
102
- it('should find agent by DID', async () => {
103
- await manager.initialize();
104
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'], did: 'did:key:abc' });
105
-
106
- const agent = await manager.getAgentByDid('did:key:abc');
107
- expect(agent?.name).toBe('Agent1');
108
- });
109
-
110
- it('should unregister agent', async () => {
111
- await manager.initialize();
112
- const agent = await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
113
-
114
- await manager.unregisterAgent(agent.id);
115
-
116
- const deleted = await manager.getAgent(agent.id);
117
- expect(deleted).toBeUndefined();
118
- });
119
- });
120
-
121
- describe('Task Management', () => {
122
- it('should create a task', async () => {
123
- await manager.initialize();
124
-
125
- const task = await manager.createTask(
126
- 'delegate',
127
- 'Fix bug',
128
- 'Fix the login bug in the authentication module',
129
- 'parent-001',
130
- 'agent-001',
131
- 'high',
132
- 'Bug ID: #1234'
133
- );
134
-
135
- expect(task.id).toBeDefined();
136
- expect(task.title).toBe('Fix bug');
137
- expect(task.type).toBe('delegate');
138
- expect(task.priority).toBe('high');
139
- expect(task.status).toBe('assigned');
140
- });
141
-
142
- it('should create pending task without assignee', async () => {
143
- await manager.initialize();
144
-
145
- const task = await manager.createTask(
146
- 'consult',
147
- 'Code review',
148
- 'Review the new API implementation',
149
- 'parent-001'
150
- );
151
-
152
- expect(task.status).toBe('pending');
153
- expect(task.toAgentId).toBeUndefined();
154
- });
155
-
156
- it('should assign task to agent', async () => {
157
- await manager.initialize();
158
- const agent = await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
159
- const task = await manager.createTask('delegate', 'Task', 'Description', 'parent-001');
160
-
161
- await manager.assignTask(task.id, agent.id);
162
-
163
- const updated = await manager.getTask(task.id);
164
- expect(updated?.assignedAgentId).toBe(agent.id);
165
- expect(updated?.status).toBe('assigned');
166
- });
167
-
168
- it('should update task status', async () => {
169
- await manager.initialize();
170
- const task = await manager.createTask('delegate', 'Task', 'Description', 'parent-001');
171
-
172
- await manager.updateTaskStatus(task.id, 'completed', 'Task result', undefined);
173
-
174
- const updated = await manager.getTask(task.id);
175
- expect(updated?.status).toBe('completed');
176
- expect(updated?.result).toBe('Task result');
177
- expect(updated?.completedAt).toBeDefined();
178
- });
179
-
180
- it('should get tasks for agent', async () => {
181
- await manager.initialize();
182
- const agent = await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
183
- await manager.createTask('delegate', 'Task1', 'Desc1', 'parent-001', agent.id);
184
- await manager.createTask('delegate', 'Task2', 'Desc2', 'parent-001', agent.id);
185
-
186
- const tasks = await manager.getTasksForAgent(agent.id);
187
- expect(tasks).toHaveLength(2);
188
- });
189
-
190
- it('should get pending tasks', async () => {
191
- await manager.initialize();
192
- await manager.createTask('delegate', 'Task1', 'Desc1', 'parent-001');
193
- await manager.createTask('delegate', 'Task2', 'Desc2', 'parent-001');
194
- await manager.createTask('delegate', 'Task3', 'Desc3', 'parent-001', 'agent-001');
195
-
196
- const pending = await manager.getPendingTasks();
197
- expect(pending).toHaveLength(2);
198
- });
199
- });
200
-
201
- describe('Task Delegation', () => {
202
- it('should find best agent for task', async () => {
203
- await manager.initialize();
204
- await manager.registerAgent({ name: 'Coder', capabilities: ['coding'] });
205
- await manager.registerAgent({ name: 'Writer', capabilities: ['writing'] });
206
- await manager.registerAgent({ name: 'FullStack', capabilities: ['coding', 'writing'] });
207
-
208
- const agent = await manager.findBestAgentForTask(['coding']);
209
- expect(agent).toBeDefined();
210
- expect(agent?.capabilities).toContain('coding');
211
- });
212
-
213
- it('should delegate task to best available agent', async () => {
214
- await manager.initialize();
215
- await manager.registerAgent({ name: 'Coder', capabilities: ['coding'] });
216
-
217
- const { task, agent } = await manager.delegateTask(
218
- 'parent-001',
219
- 'Implement the new feature',
220
- ['coding']
221
- );
222
-
223
- expect(task.status).toBe('assigned');
224
- expect(agent).toBeDefined();
225
- expect(agent?.name).toBe('Coder');
226
- });
227
-
228
- it('should create pending task if no agent available', async () => {
229
- await manager.initialize();
230
-
231
- const { task, agent } = await manager.delegateTask(
232
- 'parent-001',
233
- 'Implement the new feature',
234
- ['quantum-computing']
235
- );
236
-
237
- expect(task.status).toBe('pending');
238
- expect(agent).toBeUndefined();
239
- });
240
- });
241
-
242
- describe('Inter-Agent Messaging', () => {
243
- it('should send message between agents', async () => {
244
- await manager.initialize();
245
- await manager.registerAgent({ name: 'Sender', capabilities: ['coding'] });
246
- await manager.registerAgent({ name: 'Receiver', capabilities: ['coding'] });
247
-
248
- const message = await manager.sendMessage(
249
- 'sender-id',
250
- 'receiver-id',
251
- 'Hello, can you help with this task?',
252
- 'query'
253
- );
254
-
255
- expect(message.id).toBeDefined();
256
- expect(message.content).toBe('Hello, can you help with this task?');
257
- expect(message.type).toBe('query');
258
- });
259
-
260
- it('should get messages for agent', async () => {
261
- await manager.initialize();
262
- await manager.registerAgent({ name: 'Sender', capabilities: ['coding'] });
263
- await manager.registerAgent({ name: 'Receiver', capabilities: ['coding'] });
264
-
265
- await manager.sendMessage('sender-id', 'receiver-id', 'Message 1');
266
- await manager.sendMessage('sender-id', 'receiver-id', 'Message 2');
267
-
268
- const messages = await manager.getMessagesForAgent('receiver-id');
269
- expect(messages).toHaveLength(2);
270
- });
271
-
272
- it('should receive messages via listener', async () => {
273
- await manager.initialize();
274
- await manager.registerAgent({ name: 'Sender', capabilities: ['coding'] });
275
- await manager.registerAgent({ name: 'Receiver', capabilities: ['coding'] });
276
-
277
- let receivedMessage: any = null;
278
- const unsubscribe = manager.onMessage('receiver-id', (msg) => {
279
- receivedMessage = msg;
280
- });
281
-
282
- await manager.sendMessage('sender-id', 'receiver-id', 'Test message');
283
-
284
- expect(receivedMessage).toBeDefined();
285
- expect(receivedMessage.content).toBe('Test message');
286
-
287
- unsubscribe();
288
- });
289
-
290
- it('should broadcast message to all agents', async () => {
291
- await manager.initialize();
292
- const agent1 = await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
293
- const agent2 = await manager.registerAgent({ name: 'Agent2', capabilities: ['coding'] });
294
- const agent3 = await manager.registerAgent({ name: 'Agent3', capabilities: ['coding'] });
295
-
296
- await manager.broadcastMessage('parent-id', 'System-wide notification');
297
-
298
- const msgs1 = await manager.getMessagesForAgent(agent1.id);
299
- const msgs2 = await manager.getMessagesForAgent(agent2.id);
300
- const msgs3 = await manager.getMessagesForAgent(agent3.id);
301
-
302
- expect(msgs1).toHaveLength(1);
303
- expect(msgs2).toHaveLength(1);
304
- expect(msgs3).toHaveLength(1);
305
- });
306
-
307
- it('should consult another agent', async () => {
308
- await manager.initialize();
309
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
310
- await manager.registerAgent({ name: 'Agent2', capabilities: ['coding'] });
311
-
312
- const message = await manager.consultAgent(
313
- 'agent1-id',
314
- 'agent2-id',
315
- 'What is the best approach for this?'
316
- );
317
-
318
- expect(message.type).toBe('query');
319
- expect(message.toAgentId).toBe('agent2-id');
320
- });
321
- });
322
-
323
- describe('Task Listeners', () => {
324
- it('should notify task listeners on status change', async () => {
325
- await manager.initialize();
326
- const task = await manager.createTask('delegate', 'Task', 'Desc', 'parent-001');
327
-
328
- let updatedTask: SubAgentTask | undefined;
329
- manager.onTask((t) => {
330
- updatedTask = t;
331
- });
332
-
333
- await manager.updateTaskStatus(task.id, 'completed', 'Done');
334
-
335
- expect(updatedTask).toBeDefined();
336
- expect((updatedTask as SubAgentTask | undefined)?.status).toBe('completed');
337
- });
338
- });
339
-
340
- describe('Statistics', () => {
341
- it('should return agent statistics', async () => {
342
- await manager.initialize();
343
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
344
- await manager.registerAgent({ name: 'Agent2', capabilities: ['writing'] });
345
- await manager.createTask('delegate', 'Task1', 'Desc', 'parent-001');
346
- await manager.createTask('delegate', 'Task2', 'Desc', 'parent-001', 'agent-001');
347
-
348
- const stats = await manager.getAgentStatistics();
349
-
350
- expect(stats.total).toBe(2);
351
- expect(stats.pendingTasks).toBe(1);
352
- expect(stats.activeTasks).toBe(1);
353
- });
354
- });
355
-
356
- describe('Persistence', () => {
357
- it('should persist and reload agents', async () => {
358
- await manager.initialize();
359
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
360
-
361
- const newManager = new SubAgentManager({ storagePath: TEST_STORAGE_PATH });
362
- await newManager.initialize();
363
-
364
- const agents = await newManager.getAllAgents();
365
- expect(agents).toHaveLength(1);
366
- expect(agents[0].name).toBe('Agent1');
367
- });
368
-
369
- it('should persist and reload tasks', async () => {
370
- await manager.initialize();
371
- await manager.createTask('delegate', 'Task1', 'Desc', 'parent-001');
372
-
373
- const newManager = new SubAgentManager({ storagePath: TEST_STORAGE_PATH });
374
- await newManager.initialize();
375
-
376
- const tasks = await newManager.getPendingTasks();
377
- expect(tasks).toHaveLength(1);
378
- });
379
- });
380
-
381
- describe('Destroy', () => {
382
- it('should clean up all data on destroy', async () => {
383
- await manager.initialize();
384
- await manager.registerAgent({ name: 'Agent1', capabilities: ['coding'] });
385
-
386
- await manager.destroy();
387
-
388
- const agents = await manager.getAllAgents();
389
- expect(agents).toHaveLength(0);
390
- });
391
- });
392
- });
@@ -1,92 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { GateStateMachine } from '../bollharness-integration/gate-state-machine.js';
3
- import { initializeGateHooks, listGateHooks, clearGateHooks } from '../bollharness-integration/gate-transition-hooks.js';
4
- import { generateJudgmentInjection, getCoreJudgmentsForSession, getJudgmentsForPath } from '../bollharness-integration/context-router-judgment.js';
5
- import { getCombinedJudgments } from '../pi-ecosystem-judgment/index.js';
6
-
7
- describe('Gate State Machine', () => {
8
- it('should initialize at gate 0', () => {
9
- const gsm = new GateStateMachine();
10
- expect(gsm.getCurrentGate()).toBe(0);
11
- });
12
-
13
- it('should have correct gate pack', () => {
14
- const gsm = new GateStateMachine();
15
- const pack = gsm.getGatePack();
16
- expect(pack.current_gate).toBe(0);
17
- expect(pack.required_artifact).toBeTruthy();
18
- expect(pack.required_next_skill).toBe('arch');
19
- });
20
-
21
- it('should transition to gate 1', async () => {
22
- const gsm = new GateStateMachine();
23
- const result = await gsm.transition();
24
- expect(result.from).toBe(0);
25
- expect(result.to).toBe(1);
26
- expect(result.blockers).toHaveLength(0);
27
- expect(gsm.getCurrentGate()).toBe(1);
28
- });
29
- });
30
-
31
- describe('Gate Transition Hooks', () => {
32
- beforeEach(() => {
33
- clearGateHooks();
34
- });
35
-
36
- it('should initialize without hooks', () => {
37
- initializeGateHooks();
38
- const hooks = listGateHooks();
39
- expect(hooks).toBeDefined();
40
- });
41
-
42
- it('should load hooks from settings', () => {
43
- initializeGateHooks();
44
- const hooks = listGateHooks();
45
- console.log('Loaded hooks:', hooks.length);
46
- });
47
- });
48
-
49
- describe('Judgment System', () => {
50
- it('should load judgments from YAML files', async () => {
51
- const judgments = await getCombinedJudgments();
52
- console.log('Total judgments loaded:', judgments.length);
53
- judgments.forEach(j => {
54
- console.log(` - ${j.id}: ${j.content ? j.content.substring(0, 30) : 'N/A'}... (${j.type}, conf: ${j.confidence})`);
55
- });
56
- expect(Array.isArray(judgments)).toBe(true);
57
- });
58
-
59
- it('should generate core judgments for gate 0', async () => {
60
- const injection = await getCoreJudgmentsForSession(0.9);
61
- console.log('Core judgments length:', injection.length);
62
- if (injection.length > 0) {
63
- console.log('Core judgments sample:', injection.substring(0, 300));
64
- }
65
- expect(typeof injection).toBe('string');
66
- });
67
-
68
- it('should generate judgment injection for gate 0', async () => {
69
- const injection = await generateJudgmentInjection('src/agents/', 0);
70
- console.log('Gate 0 injection length:', injection.length);
71
- if (injection.length > 0) {
72
- console.log('Gate 0 injection:', injection.substring(0, 300));
73
- }
74
- expect(typeof injection).toBe('string');
75
- });
76
-
77
- it('should generate judgment injection for gate 3', async () => {
78
- const injection = await generateJudgmentInjection('src/agents/', 3);
79
- console.log('Gate 3 injection length:', injection.length);
80
- if (injection.length > 0) {
81
- console.log('Gate 3 injection:', injection.substring(0, 300));
82
- }
83
- expect(typeof injection).toBe('string');
84
- });
85
-
86
- it('should get judgments for path', async () => {
87
- const result = await getJudgmentsForPath('src/agents/');
88
- console.log('Path judgments - count:', result.judgments.length, 'confidence:', result.confidence);
89
- expect(result.fragments).toBeDefined();
90
- expect(Array.isArray(result.judgments)).toBe(true);
91
- });
92
- });