@bolloon/bolloon-agent 0.1.35 → 0.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (502) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/p2p-chat-tools.js +6 -6
  3. package/dist/agents/permission-mode.js +115 -0
  4. package/dist/agents/pi-sdk.js +435 -25
  5. package/dist/agents/pre-tool-validator.js +194 -0
  6. package/dist/agents/workflow-pivot-loop.js +113 -12
  7. package/dist/bollharness-integration/context-router.js +2 -2
  8. package/dist/bollharness-integration/guard-checker.js +1 -1
  9. package/dist/bootstrap/bootstrap.js +3 -0
  10. package/dist/bootstrap/context-collector.js +17 -1
  11. package/dist/bootstrap/context-hierarchy.js +218 -0
  12. package/dist/bootstrap/lifecycle-hooks.js +86 -24
  13. package/dist/bootstrap/project-context.js +10 -3
  14. package/dist/context-compaction/auto-compact.js +144 -0
  15. package/dist/context-compaction/budget-gate.js +28 -0
  16. package/dist/context-compaction/budget-reduce.js +35 -0
  17. package/dist/context-compaction/context-collapse.js +66 -0
  18. package/dist/context-compaction/index.js +21 -0
  19. package/dist/context-compaction/microcompact.js +51 -0
  20. package/dist/context-compaction/pipeline.js +123 -0
  21. package/dist/context-compaction/snip.js +45 -0
  22. package/dist/context-compaction/token-estimator.js +35 -0
  23. package/dist/context-compaction/types.js +19 -0
  24. package/dist/heartbeat/HealthMonitor.js +3 -2
  25. package/dist/index.js +38 -2
  26. package/dist/llm/llm-judgment-client.js +32 -30
  27. package/dist/llm/pi-ai.js +103 -16
  28. package/dist/llm/system-prompt/health.js +129 -0
  29. package/dist/llm/system-prompt/registry.js +246 -0
  30. package/dist/llm/system-prompt/strip-hibsml.js +51 -0
  31. package/dist/llm/tool-manifest/ask_user_input.js +35 -0
  32. package/dist/llm/tool-manifest/bash.js +23 -0
  33. package/dist/llm/tool-manifest/create_file.js +24 -0
  34. package/dist/llm/tool-manifest/fetch_sports_data.js +26 -0
  35. package/dist/llm/tool-manifest/image_search.js +24 -0
  36. package/dist/llm/tool-manifest/index.js +69 -0
  37. package/dist/llm/tool-manifest/mcp.js +43 -0
  38. package/dist/llm/tool-manifest/message_compose.js +31 -0
  39. package/dist/llm/tool-manifest/places.js +83 -0
  40. package/dist/llm/tool-manifest/present_files.js +21 -0
  41. package/dist/llm/tool-manifest/recipe.js +40 -0
  42. package/dist/llm/tool-manifest/recommend_apps.js +23 -0
  43. package/dist/llm/tool-manifest/str_replace.js +27 -0
  44. package/dist/llm/tool-manifest/types.js +7 -0
  45. package/dist/llm/tool-manifest/view.js +24 -0
  46. package/dist/llm/tool-manifest/weather.js +27 -0
  47. package/dist/llm/tool-manifest/web.js +51 -0
  48. package/dist/network/p2p-direct.js +23 -0
  49. package/dist/network/source-intent-broadcaster.js +203 -0
  50. package/dist/network/source-intent.js +100 -0
  51. package/dist/pi-ecosystem-judgment/adaptive-scan.js +48 -0
  52. package/dist/pi-ecosystem-judgment/injection-gate.js +54 -12
  53. package/dist/pi-ecosystem-judgment/value-injection.js +8 -2
  54. package/dist/security/context-router-tool.js +1 -1
  55. package/dist/security/input-scanner.js +223 -0
  56. package/dist/web/client.js +3089 -4458
  57. package/dist/web/index.html +58 -67
  58. package/dist/web/server.js +299 -117
  59. package/dist/web/style.css +531 -249
  60. package/dist/web/ui/message-renderer.js +352 -0
  61. package/dist/web/ui/step-timeline.js +279 -0
  62. package/package.json +2 -2
  63. package/.auto-evolve-calls +0 -1
  64. package/.last-auto-evolve-baseline +0 -1
  65. package/Bolloon.md +0 -103
  66. package/dist/agents/constraint-layer.js.map +0 -1
  67. package/dist/agents/pi-sdk.js.map +0 -1
  68. package/dist/agents/workflow-engine.js.map +0 -1
  69. package/dist/bollharness/src/index.js +0 -5
  70. package/dist/bollharness/src/scripts/checks/check_adr_plan_numbering.js +0 -6
  71. package/dist/bollharness/src/scripts/checks/check_api_types.js +0 -45
  72. package/dist/bollharness/src/scripts/checks/check_artifact_link.js +0 -146
  73. package/dist/bollharness/src/scripts/checks/check_bridge_deps.js +0 -6
  74. package/dist/bollharness/src/scripts/checks/check_bugfix_binding.js +0 -6
  75. package/dist/bollharness/src/scripts/checks/check_bugfix_binding_ci.js +0 -6
  76. package/dist/bollharness/src/scripts/checks/check_doc_file_references.js +0 -6
  77. package/dist/bollharness/src/scripts/checks/check_doc_freshness.js +0 -135
  78. package/dist/bollharness/src/scripts/checks/check_doc_links.js +0 -31
  79. package/dist/bollharness/src/scripts/checks/check_file_existence_claims.js +0 -6
  80. package/dist/bollharness/src/scripts/checks/check_fragment_integrity.js +0 -34
  81. package/dist/bollharness/src/scripts/checks/check_hook_installed.js +0 -63
  82. package/dist/bollharness/src/scripts/checks/check_issue_closure.js +0 -41
  83. package/dist/bollharness/src/scripts/checks/check_mcp_parity.js +0 -6
  84. package/dist/bollharness/src/scripts/checks/check_security.js +0 -48
  85. package/dist/bollharness/src/scripts/checks/check_skill_parity.js +0 -6
  86. package/dist/bollharness/src/scripts/checks/check_versions.js +0 -6
  87. package/dist/bollharness/src/scripts/checks/finding.js +0 -13
  88. package/dist/bollharness/src/scripts/checks/next_decision_number.js +0 -20
  89. package/dist/bollharness/src/scripts/checks/regenerate_magic_docs.js +0 -6
  90. package/dist/bollharness/src/scripts/ci/detect_rebaseline_triggers.js +0 -8
  91. package/dist/bollharness/src/scripts/ci/scan_subprocess_cfg.js +0 -8
  92. package/dist/bollharness/src/scripts/ci/scan_verify_artifacts.js +0 -8
  93. package/dist/bollharness/src/scripts/ci/scan_yaml_schema.js +0 -8
  94. package/dist/bollharness/src/scripts/context_router.js +0 -67
  95. package/dist/bollharness/src/scripts/deploy-guard.js +0 -157
  96. package/dist/bollharness/src/scripts/guard-feedback.js +0 -192
  97. package/dist/bollharness/src/scripts/guard_router.js +0 -158
  98. package/dist/bollharness/src/scripts/hooks/_hook_output.js +0 -6
  99. package/dist/bollharness/src/scripts/hooks/auto-python3.js +0 -6
  100. package/dist/bollharness/src/scripts/hooks/deploy-progress-on-session-end.js +0 -6
  101. package/dist/bollharness/src/scripts/hooks/failure-analyzer.js +0 -6
  102. package/dist/bollharness/src/scripts/hooks/gate-judgment-inject.js +0 -92
  103. package/dist/bollharness/src/scripts/hooks/gate-transition-judgment.js +0 -63
  104. package/dist/bollharness/src/scripts/hooks/inbox-ack.js +0 -6
  105. package/dist/bollharness/src/scripts/hooks/inbox-inject-on-start.js +0 -6
  106. package/dist/bollharness/src/scripts/hooks/inbox-validate.js +0 -6
  107. package/dist/bollharness/src/scripts/hooks/inbox-write-ledger.js +0 -6
  108. package/dist/bollharness/src/scripts/hooks/initializer-agent.js +0 -6
  109. package/dist/bollharness/src/scripts/hooks/loop-detection.js +0 -73
  110. package/dist/bollharness/src/scripts/hooks/owner-guard.js +0 -6
  111. package/dist/bollharness/src/scripts/hooks/precompact.js +0 -6
  112. package/dist/bollharness/src/scripts/hooks/review-agent-gatekeeper.js +0 -6
  113. package/dist/bollharness/src/scripts/hooks/risk-tracker.js +0 -108
  114. package/dist/bollharness/src/scripts/hooks/sanitize-on-read.js +0 -6
  115. package/dist/bollharness/src/scripts/hooks/session-reflection.js +0 -7
  116. package/dist/bollharness/src/scripts/hooks/session-start-magic-docs.js +0 -7
  117. package/dist/bollharness/src/scripts/hooks/session-start-reset-risk.js +0 -7
  118. package/dist/bollharness/src/scripts/hooks/session-start-toolkit-reminder.js +0 -7
  119. package/dist/bollharness/src/scripts/hooks/stop-evaluator.js +0 -157
  120. package/dist/bollharness/src/scripts/hooks/tool-call-counter.js +0 -6
  121. package/dist/bollharness/src/scripts/hooks/trace-analyzer.js +0 -10
  122. package/dist/bollharness/src/scripts/install/install-trust-token.js +0 -7
  123. package/dist/bollharness/src/scripts/install/multi_project_registry.js +0 -9
  124. package/dist/bollharness/src/scripts/install/phase2_auto.js +0 -21
  125. package/dist/bollharness/src/scripts/install/pre_commit_installer.js +0 -6
  126. package/dist/bollharness/src/scripts/install/tier_selector.js +0 -7
  127. package/dist/bollharness/src/scripts/install/transcript_miner.js +0 -7
  128. package/dist/bollharness/src/scripts/lib/claim_patterns.js +0 -10
  129. package/dist/bollharness/src/scripts/lib/sanitize_patterns.js +0 -12
  130. package/dist/bollharness/src/scripts/sanitize.js +0 -6
  131. package/dist/bollharness-integration/context-router-judgment.js.map +0 -1
  132. package/dist/bollharness-integration/context-router.js.map +0 -1
  133. package/dist/bollharness-integration/gate-state-machine.js.map +0 -1
  134. package/dist/bollharness-integration/gate-transition-hooks.js.map +0 -1
  135. package/dist/bollharness-integration/guard-checker.js.map +0 -1
  136. package/dist/bollharness-integration/index.js.map +0 -1
  137. package/dist/bollharness-integration/integration.js.map +0 -1
  138. package/dist/bollharness-integration/llm/pi-ai.d.ts +0 -60
  139. package/dist/bollharness-integration/pi-ecosystem-colony/index.d.ts +0 -153
  140. package/dist/bollharness-integration/pi-ecosystem-goals/index.d.ts +0 -136
  141. package/dist/bollharness-integration/pi-ecosystem-judgment/decision.d.ts +0 -117
  142. package/dist/bollharness-integration/pi-ecosystem-judgment/distillation.d.ts +0 -78
  143. package/dist/bollharness-integration/pi-ecosystem-judgment/index.d.ts +0 -139
  144. package/dist/bollharness-integration/pi-ecosystem-mcp/index.d.ts +0 -127
  145. package/dist/bollharness-integration/pi-ecosystem-subagents/index.d.ts +0 -95
  146. package/dist/bollharness-integration/skill-adapter.js.map +0 -1
  147. package/dist/constraint-runtime/src/_archive_helper.js +0 -9
  148. package/dist/constraint-runtime/src/agent/coordinator.js +0 -48
  149. package/dist/constraint-runtime/src/agent/index.js +0 -1
  150. package/dist/constraint-runtime/src/assistant/index.js +0 -12
  151. package/dist/constraint-runtime/src/bootstrap/index.js +0 -12
  152. package/dist/constraint-runtime/src/bootstrap_graph.js +0 -13
  153. package/dist/constraint-runtime/src/bridge/index.js +0 -12
  154. package/dist/constraint-runtime/src/buddy/index.js +0 -12
  155. package/dist/constraint-runtime/src/cli/index.js +0 -12
  156. package/dist/constraint-runtime/src/command_graph.js +0 -10
  157. package/dist/constraint-runtime/src/commands.js +0 -60
  158. package/dist/constraint-runtime/src/components/index.js +0 -12
  159. package/dist/constraint-runtime/src/constants/index.js +0 -12
  160. package/dist/constraint-runtime/src/constraint/budget.js +0 -22
  161. package/dist/constraint-runtime/src/constraint/budget.js.map +0 -1
  162. package/dist/constraint-runtime/src/constraint/index.js +0 -2
  163. package/dist/constraint-runtime/src/constraint/permission.js +0 -20
  164. package/dist/constraint-runtime/src/constraint/permission.js.map +0 -1
  165. package/dist/constraint-runtime/src/context.js +0 -30
  166. package/dist/constraint-runtime/src/coordinator/index.js +0 -12
  167. package/dist/constraint-runtime/src/cost_hook.js +0 -4
  168. package/dist/constraint-runtime/src/cost_tracker.js +0 -8
  169. package/dist/constraint-runtime/src/deferred_init.js +0 -10
  170. package/dist/constraint-runtime/src/direct_modes.js +0 -6
  171. package/dist/constraint-runtime/src/dynamic-tool-loader.js +0 -85
  172. package/dist/constraint-runtime/src/entrypoints/index.js +0 -12
  173. package/dist/constraint-runtime/src/execution_registry.js +0 -44
  174. package/dist/constraint-runtime/src/history.js +0 -9
  175. package/dist/constraint-runtime/src/hooks/index.js +0 -12
  176. package/dist/constraint-runtime/src/index.js +0 -26
  177. package/dist/constraint-runtime/src/ink.js +0 -4
  178. package/dist/constraint-runtime/src/keybindings/index.js +0 -12
  179. package/dist/constraint-runtime/src/memdir/index.js +0 -12
  180. package/dist/constraint-runtime/src/migrations/index.js +0 -12
  181. package/dist/constraint-runtime/src/models.js +0 -1
  182. package/dist/constraint-runtime/src/models.js.map +0 -1
  183. package/dist/constraint-runtime/src/moreright/index.js +0 -12
  184. package/dist/constraint-runtime/src/native_ts/index.js +0 -12
  185. package/dist/constraint-runtime/src/output_styles/index.js +0 -12
  186. package/dist/constraint-runtime/src/parity_audit.js +0 -12
  187. package/dist/constraint-runtime/src/plugins/index.js +0 -12
  188. package/dist/constraint-runtime/src/port_manifest.js +0 -11
  189. package/dist/constraint-runtime/src/prefetch.js +0 -9
  190. package/dist/constraint-runtime/src/query.js +0 -1
  191. package/dist/constraint-runtime/src/remote/index.js +0 -12
  192. package/dist/constraint-runtime/src/remote_runtime.js +0 -9
  193. package/dist/constraint-runtime/src/runtime/index.js +0 -1
  194. package/dist/constraint-runtime/src/runtime/session.js +0 -35
  195. package/dist/constraint-runtime/src/schemas/index.js +0 -12
  196. package/dist/constraint-runtime/src/screens/index.js +0 -12
  197. package/dist/constraint-runtime/src/server/index.js +0 -12
  198. package/dist/constraint-runtime/src/services/index.js +0 -12
  199. package/dist/constraint-runtime/src/session_store.js +0 -22
  200. package/dist/constraint-runtime/src/setup.js +0 -30
  201. package/dist/constraint-runtime/src/skills/index.js +0 -1
  202. package/dist/constraint-runtime/src/skills/skill-registry.js +0 -28
  203. package/dist/constraint-runtime/src/state/index.js +0 -12
  204. package/dist/constraint-runtime/src/system_init.js +0 -20
  205. package/dist/constraint-runtime/src/thinking/engine.js +0 -42
  206. package/dist/constraint-runtime/src/thinking/index.js +0 -1
  207. package/dist/constraint-runtime/src/tool_pool.js +0 -8
  208. package/dist/constraint-runtime/src/tools/OpenCLI/execAdapter.js +0 -7
  209. package/dist/constraint-runtime/src/tools/OpenCLI/listAdapters.js +0 -7
  210. package/dist/constraint-runtime/src/tools/OpenCLI/runCommand.js +0 -7
  211. package/dist/constraint-runtime/src/tools/PolymarketSDK/cancelOrder.js +0 -6
  212. package/dist/constraint-runtime/src/tools/PolymarketSDK/createOrder.js +0 -6
  213. package/dist/constraint-runtime/src/tools/PolymarketSDK/getMarket.js +0 -5
  214. package/dist/constraint-runtime/src/tools/PolymarketSDK/getOrders.js +0 -6
  215. package/dist/constraint-runtime/src/tools/PolymarketSDK/listMarkets.js +0 -4
  216. package/dist/constraint-runtime/src/tools/SafeSDK/confirmTransaction.js +0 -6
  217. package/dist/constraint-runtime/src/tools/SafeSDK/createTransaction.js +0 -8
  218. package/dist/constraint-runtime/src/tools/SafeSDK/deploySafe.js +0 -6
  219. package/dist/constraint-runtime/src/tools/SafeSDK/executeTransaction.js +0 -6
  220. package/dist/constraint-runtime/src/tools/SafeSDK/getBalance.js +0 -6
  221. package/dist/constraint-runtime/src/tools/SafeSDK/getPendingTransactions.js +0 -6
  222. package/dist/constraint-runtime/src/tools/SafeSDK/proposeTransaction.js +0 -6
  223. package/dist/constraint-runtime/src/tools/WalletTools/autoPay.js +0 -29
  224. package/dist/constraint-runtime/src/tools/WalletTools/createWallet.js +0 -10
  225. package/dist/constraint-runtime/src/tools/WalletTools/getBalance.js +0 -13
  226. package/dist/constraint-runtime/src/tools/WalletTools/importWallet.js +0 -22
  227. package/dist/constraint-runtime/src/tools/WalletTools/sendTransaction.js +0 -25
  228. package/dist/constraint-runtime/src/tools/WalletTools/signMessage.js +0 -10
  229. package/dist/constraint-runtime/src/tools/WalletTools/transferToken.js +0 -25
  230. package/dist/constraint-runtime/src/tools.js +0 -80
  231. package/dist/constraint-runtime/src/transcript.js +0 -19
  232. package/dist/constraint-runtime/src/types/index.js +0 -12
  233. package/dist/constraint-runtime/src/upstream_proxy/index.js +0 -12
  234. package/dist/constraint-runtime/src/utils/index.js +0 -12
  235. package/dist/constraint-runtime/src/vim/index.js +0 -12
  236. package/dist/constraint-runtime/src/voice/index.js +0 -12
  237. package/dist/constraints/index.js.map +0 -1
  238. package/dist/documents/reader.js.map +0 -1
  239. package/dist/llm/config-store.js.map +0 -1
  240. package/dist/llm/pi-ai.js.map +0 -1
  241. package/dist/network/agent-network.js.map +0 -1
  242. package/dist/network/iroh-integration.js.map +0 -1
  243. package/dist/network/iroh-transport.js.map +0 -1
  244. package/dist/network/p2p.js.map +0 -1
  245. package/dist/network/storage/adapters/json-adapter.js.map +0 -1
  246. package/dist/pi-ecosystem-colony/index.js.map +0 -1
  247. package/dist/pi-ecosystem-goals/index.js.map +0 -1
  248. package/dist/pi-ecosystem-judgment/decision.js.map +0 -1
  249. package/dist/pi-ecosystem-judgment/distillation.js.map +0 -1
  250. package/dist/pi-ecosystem-judgment/human-value-store.js.map +0 -1
  251. package/dist/pi-ecosystem-judgment/index.js.map +0 -1
  252. package/dist/pi-ecosystem-judgment/value-injection.js.map +0 -1
  253. package/dist/pi-ecosystem-mcp/index.js.map +0 -1
  254. package/dist/pi-ecosystem-subagents/index.js.map +0 -1
  255. package/dist/social/ant-colony/AdaptiveHeartbeat.js.map +0 -1
  256. package/dist/social/ant-colony/PheromoneEngine.js.map +0 -1
  257. package/dist/social/ant-colony/types.js.map +0 -1
  258. package/dist/social/channels/ChannelManager.js.map +0 -1
  259. package/dist/social/channels/DiapChannelBridge.js.map +0 -1
  260. package/dist/social/channels/InterestMatcher.js.map +0 -1
  261. package/dist/social/channels/types.js.map +0 -1
  262. package/dist/social/global-shared-context.js.map +0 -1
  263. package/dist/social/heartbeat.js.map +0 -1
  264. package/lefthook.yml +0 -29
  265. package/scripts/auto-evolve-loop.ts +0 -376
  266. package/scripts/auto-evolve-oneshot.sh +0 -155
  267. package/scripts/auto-evolve-snapshot.sh +0 -136
  268. package/scripts/build-cli.js +0 -216
  269. package/scripts/build-web.ts +0 -82
  270. package/scripts/detect-schema-changes.sh +0 -48
  271. package/scripts/diff-reviewer.ts +0 -159
  272. package/scripts/postinstall.js +0 -153
  273. package/scripts/weekly-report.ts +0 -364
  274. package/src/agents/agent-manifest-protocol.ts +0 -117
  275. package/src/agents/constraint-layer.ts +0 -309
  276. package/src/agents/iroh-secret.ts +0 -32
  277. package/src/agents/p2p-chat-tools.ts +0 -383
  278. package/src/agents/p2p-document-tools.ts +0 -347
  279. package/src/agents/pi-sdk.ts +0 -2462
  280. package/src/agents/protocol.ts +0 -398
  281. package/src/agents/shell-guard.ts +0 -417
  282. package/src/agents/shell-tool.ts +0 -103
  283. package/src/agents/skill-loader.ts +0 -202
  284. package/src/agents/subagent-manager.ts +0 -553
  285. package/src/agents/workflow-engine.ts +0 -332
  286. package/src/agents/workflow-pivot-loop.ts +0 -675
  287. package/src/bollharness/.sanitize-report.json +0 -13
  288. package/src/bollharness/CLAUDE.md +0 -73
  289. package/src/bollharness/LICENSE +0 -21
  290. package/src/bollharness/README.md +0 -143
  291. package/src/bollharness/README.zh-CN.md +0 -131
  292. package/src/bollharness/package.json +0 -20
  293. package/src/bollharness/reference/SOURCE-COMMIT.txt +0 -3
  294. package/src/bollharness/reference/boll-reference/scripts/hooks/.sanitize-report.json +0 -12
  295. package/src/bollharness/reference/boll-reference/scripts/hooks/find-boll-root.sh +0 -27
  296. package/src/bollharness/reference/boll-reference/scripts/hooks/precompact.sh +0 -57
  297. package/src/bollharness/reference/boll-reference/scripts/hooks/stop-evaluator.md +0 -57
  298. package/src/bollharness/schemas/metrics-jsonl-allowlist.json +0 -67
  299. package/src/bollharness/scripts/checks/next_decision_number.sh +0 -48
  300. package/src/bollharness/scripts/ci/count-components.sh +0 -65
  301. package/src/bollharness/scripts/context-fragments/artifact-linkage.md +0 -14
  302. package/src/bollharness/scripts/context-fragments/auth-consumers.md +0 -17
  303. package/src/bollharness/scripts/context-fragments/bridge-constitution.md +0 -13
  304. package/src/bollharness/scripts/context-fragments/catalyst-distributed.md +0 -18
  305. package/src/bollharness/scripts/context-fragments/closure-checklist.md +0 -13
  306. package/src/bollharness/scripts/context-fragments/contract-consumers.md +0 -15
  307. package/src/bollharness/scripts/context-fragments/db-shared-structures.md +0 -15
  308. package/src/bollharness/scripts/context-fragments/fixed-three-layers.md +0 -19
  309. package/src/bollharness/scripts/context-fragments/general-dev-principles.md +0 -11
  310. package/src/bollharness/scripts/context-fragments/issue-first.md +0 -8
  311. package/src/bollharness/scripts/context-fragments/mcp-parity.md +0 -16
  312. package/src/bollharness/scripts/context-fragments/pi-agent-operations.md +0 -108
  313. package/src/bollharness/scripts/context-fragments/protocol-consumers.md +0 -15
  314. package/src/bollharness/scripts/context-fragments/run-events-consumers.md +0 -15
  315. package/src/bollharness/scripts/context-fragments/scene-fidelity.md +0 -13
  316. package/src/bollharness/scripts/context-fragments/truth-source-hierarchy.md +0 -15
  317. package/src/bollharness/scripts/context-fragments/two-language.md +0 -15
  318. package/src/bollharness/scripts/context-fragments/version-sources.md +0 -14
  319. package/src/bollharness/scripts/hooks/find-project-root.sh +0 -47
  320. package/src/bollharness/scripts/hooks/inbox-poll.sh +0 -78
  321. package/src/bollharness/scripts/hooks/precompact.sh +0 -56
  322. package/src/bollharness/scripts/hooks/stop-evaluator.md +0 -83
  323. package/src/bollharness/scripts/sync-from-upstream.sh +0 -281
  324. package/src/bollharness/src/index.ts +0 -5
  325. package/src/bollharness/src/scripts/checks/check_adr_plan_numbering.ts +0 -11
  326. package/src/bollharness/src/scripts/checks/check_api_types.ts +0 -52
  327. package/src/bollharness/src/scripts/checks/check_artifact_link.ts +0 -156
  328. package/src/bollharness/src/scripts/checks/check_bridge_deps.ts +0 -11
  329. package/src/bollharness/src/scripts/checks/check_bugfix_binding.ts +0 -11
  330. package/src/bollharness/src/scripts/checks/check_bugfix_binding_ci.ts +0 -11
  331. package/src/bollharness/src/scripts/checks/check_doc_file_references.ts +0 -11
  332. package/src/bollharness/src/scripts/checks/check_doc_freshness.ts +0 -141
  333. package/src/bollharness/src/scripts/checks/check_doc_links.ts +0 -36
  334. package/src/bollharness/src/scripts/checks/check_file_existence_claims.ts +0 -11
  335. package/src/bollharness/src/scripts/checks/check_fragment_integrity.ts +0 -40
  336. package/src/bollharness/src/scripts/checks/check_hook_installed.ts +0 -70
  337. package/src/bollharness/src/scripts/checks/check_issue_closure.ts +0 -51
  338. package/src/bollharness/src/scripts/checks/check_mcp_parity.ts +0 -11
  339. package/src/bollharness/src/scripts/checks/check_security.ts +0 -54
  340. package/src/bollharness/src/scripts/checks/check_skill_parity.ts +0 -11
  341. package/src/bollharness/src/scripts/checks/check_versions.ts +0 -11
  342. package/src/bollharness/src/scripts/checks/finding.ts +0 -35
  343. package/src/bollharness/src/scripts/checks/next_decision_number.ts +0 -24
  344. package/src/bollharness/src/scripts/checks/regenerate_magic_docs.ts +0 -11
  345. package/src/bollharness/src/scripts/ci/detect_rebaseline_triggers.ts +0 -14
  346. package/src/bollharness/src/scripts/ci/scan_subprocess_cfg.ts +0 -14
  347. package/src/bollharness/src/scripts/ci/scan_verify_artifacts.ts +0 -14
  348. package/src/bollharness/src/scripts/ci/scan_yaml_schema.ts +0 -14
  349. package/src/bollharness/src/scripts/context_router.ts +0 -76
  350. package/src/bollharness/src/scripts/deploy-guard.ts +0 -182
  351. package/src/bollharness/src/scripts/guard-feedback.ts +0 -215
  352. package/src/bollharness/src/scripts/guard_router.ts +0 -194
  353. package/src/bollharness/src/scripts/hooks/_hook_output.js +0 -3
  354. package/src/bollharness/src/scripts/hooks/_hook_output.ts +0 -11
  355. package/src/bollharness/src/scripts/hooks/auto-python3.ts +0 -10
  356. package/src/bollharness/src/scripts/hooks/deploy-progress-on-session-end.ts +0 -10
  357. package/src/bollharness/src/scripts/hooks/failure-analyzer.ts +0 -10
  358. package/src/bollharness/src/scripts/hooks/gate-judgment-inject.ts +0 -111
  359. package/src/bollharness/src/scripts/hooks/gate-transition-judgment.ts +0 -74
  360. package/src/bollharness/src/scripts/hooks/inbox-ack.ts +0 -10
  361. package/src/bollharness/src/scripts/hooks/inbox-inject-on-start.ts +0 -10
  362. package/src/bollharness/src/scripts/hooks/inbox-validate.ts +0 -10
  363. package/src/bollharness/src/scripts/hooks/inbox-write-ledger.ts +0 -10
  364. package/src/bollharness/src/scripts/hooks/initializer-agent.ts +0 -10
  365. package/src/bollharness/src/scripts/hooks/loop-detection.ts +0 -83
  366. package/src/bollharness/src/scripts/hooks/owner-guard.ts +0 -10
  367. package/src/bollharness/src/scripts/hooks/precompact.ts +0 -10
  368. package/src/bollharness/src/scripts/hooks/review-agent-gatekeeper.ts +0 -10
  369. package/src/bollharness/src/scripts/hooks/risk-tracker.ts +0 -121
  370. package/src/bollharness/src/scripts/hooks/sanitize-on-read.ts +0 -10
  371. package/src/bollharness/src/scripts/hooks/session-reflection.ts +0 -12
  372. package/src/bollharness/src/scripts/hooks/session-start-magic-docs.ts +0 -12
  373. package/src/bollharness/src/scripts/hooks/session-start-reset-risk.ts +0 -12
  374. package/src/bollharness/src/scripts/hooks/session-start-toolkit-reminder.ts +0 -12
  375. package/src/bollharness/src/scripts/hooks/stop-evaluator.ts +0 -164
  376. package/src/bollharness/src/scripts/hooks/tool-call-counter.ts +0 -10
  377. package/src/bollharness/src/scripts/hooks/trace-analyzer.ts +0 -14
  378. package/src/bollharness/src/scripts/install/install-trust-token.ts +0 -13
  379. package/src/bollharness/src/scripts/install/multi_project_registry.ts +0 -13
  380. package/src/bollharness/src/scripts/install/phase2_auto.ts +0 -28
  381. package/src/bollharness/src/scripts/install/pre_commit_installer.ts +0 -10
  382. package/src/bollharness/src/scripts/install/tier_selector.ts +0 -10
  383. package/src/bollharness/src/scripts/install/transcript_miner.ts +0 -13
  384. package/src/bollharness/src/scripts/lib/claim_patterns.ts +0 -11
  385. package/src/bollharness/src/scripts/lib/sanitize_patterns.ts +0 -13
  386. package/src/bollharness/src/scripts/sanitize.ts +0 -9
  387. package/src/bollharness/templates/persona/default.json +0 -19
  388. package/src/bollharness/templates/scaffold/.gitignore.append +0 -16
  389. package/src/bollharness/templates/scaffold/CLAUDE.md +0 -89
  390. package/src/bollharness-integration/channel-judgment-engine.ts +0 -634
  391. package/src/bollharness-integration/context-chain-router.ts +0 -474
  392. package/src/bollharness-integration/context-router-judgment.ts +0 -339
  393. package/src/bollharness-integration/context-router.ts +0 -583
  394. package/src/bollharness-integration/gate-state-machine.ts +0 -444
  395. package/src/bollharness-integration/gate-transition-hooks.ts +0 -137
  396. package/src/bollharness-integration/guard-checker.ts +0 -451
  397. package/src/bollharness-integration/index.ts +0 -195
  398. package/src/bollharness-integration/integration.ts +0 -538
  399. package/src/bollharness-integration/judgment-prompts.yaml +0 -535
  400. package/src/bollharness-integration/llm-judgment-engine.ts +0 -712
  401. package/src/bollharness-integration/skill-adapter.ts +0 -646
  402. package/src/bootstrap/bootstrap.ts +0 -132
  403. package/src/bootstrap/context-collector.ts +0 -342
  404. package/src/bootstrap/lifecycle-hooks.ts +0 -176
  405. package/src/bootstrap/project-context.ts +0 -163
  406. package/src/cli/interface.ts +0 -211
  407. package/src/cli-entry.ts +0 -304
  408. package/src/constraints/index.ts +0 -6
  409. package/src/documents/reader.ts +0 -85
  410. package/src/documents/store.ts +0 -252
  411. package/src/electron-preload.ts +0 -25
  412. package/src/electron.ts +0 -200
  413. package/src/heartbeat/DaemonManager.ts +0 -283
  414. package/src/heartbeat/HealthMonitor.ts +0 -316
  415. package/src/heartbeat/StartupVerifier.ts +0 -223
  416. package/src/heartbeat/Watchdog.ts +0 -208
  417. package/src/heartbeat/index.ts +0 -109
  418. package/src/heartbeat/self-improve-bus.ts +0 -110
  419. package/src/heartbeat/types.ts +0 -82
  420. package/src/index.ts +0 -1690
  421. package/src/llm/audio-config-store.ts +0 -246
  422. package/src/llm/config-store.ts +0 -400
  423. package/src/llm/llm-judgment-client.ts +0 -470
  424. package/src/llm/pi-ai.ts +0 -558
  425. package/src/llm/video-config-store.ts +0 -257
  426. package/src/network/agent-network.ts +0 -800
  427. package/src/network/hybrid-messenger.ts +0 -199
  428. package/src/network/iroh-bootstrap.ts +0 -57
  429. package/src/network/iroh-discovery.ts +0 -208
  430. package/src/network/iroh-integration.ts +0 -158
  431. package/src/network/iroh-transport.ts +0 -637
  432. package/src/network/known-peers.ts +0 -102
  433. package/src/network/p2p-direct.ts +0 -240
  434. package/src/network/p2p-secret.ts +0 -153
  435. package/src/network/p2p.ts +0 -964
  436. package/src/network/storage/adapters/json-adapter.ts +0 -454
  437. package/src/network/storage/index.ts +0 -203
  438. package/src/network/storage/types.ts +0 -166
  439. package/src/security/builtin-guards.ts +0 -162
  440. package/src/security/context-router-tool.ts +0 -122
  441. package/src/security/react-harness.ts +0 -177
  442. package/src/security/tool-gate.ts +0 -294
  443. package/src/social/ant-colony/index.js +0 -19
  444. package/src/social/channels/ChannelManager.ts +0 -485
  445. package/src/social/channels/DiapChannelBridge.ts +0 -501
  446. package/src/social/channels/InterestMatcher.ts +0 -189
  447. package/src/social/channels/agent-workflow-config.json +0 -214
  448. package/src/social/channels/agent-workflow-config.yaml +0 -334
  449. package/src/social/channels/channel-agent-session.ts +0 -407
  450. package/src/social/channels/channel-heartbeat-agent.ts +0 -622
  451. package/src/social/channels/diap-doc-parser.ts +0 -282
  452. package/src/social/channels/harness-workflow-integrator.ts +0 -594
  453. package/src/social/channels/index.ts +0 -22
  454. package/src/social/channels/types.ts +0 -115
  455. package/src/social/global-shared-context.ts +0 -506
  456. package/src/social/heartbeat.ts +0 -1057
  457. package/src/social/persona/enhanced-persona.ts +0 -359
  458. package/src/types.d.ts +0 -12
  459. package/src/utils/auto-evolve-policy.ts +0 -138
  460. package/src/utils/auto-update.ts +0 -482
  461. package/src/utils/clamp.ts +0 -5
  462. package/src/web/agent-delegate-server.ts +0 -148
  463. package/src/web/api-config.html +0 -520
  464. package/src/web/client.js +0 -4898
  465. package/src/web/components/p2p/P2PModal.tsx +0 -416
  466. package/src/web/components/p2p/index.ts +0 -566
  467. package/src/web/components/p2p/index.tsx +0 -297
  468. package/src/web/components/p2p/p2p-connection.ts +0 -338
  469. package/src/web/components/p2p/p2p-identity.ts +0 -92
  470. package/src/web/components/p2p/p2p-manager.ts +0 -147
  471. package/src/web/components/p2p/p2p-messages.ts +0 -219
  472. package/src/web/components/p2p/p2p-modal.ts +0 -685
  473. package/src/web/components/p2p/p2p-store-memory.ts +0 -162
  474. package/src/web/components/p2p/p2p-tools.ts +0 -315
  475. package/src/web/components/p2p/types.ts +0 -170
  476. package/src/web/components/wallet-viem.mjs +0 -118
  477. package/src/web/design.md +0 -99
  478. package/src/web/icons/apple-touch-icon.png +0 -0
  479. package/src/web/icons/favicon-16x16.png +0 -0
  480. package/src/web/icons/favicon-192x192.png +0 -0
  481. package/src/web/icons/favicon-32x32.png +0 -0
  482. package/src/web/icons/favicon-48x48.png +0 -0
  483. package/src/web/icons/favicon-512x512.png +0 -0
  484. package/src/web/icons/favicon.icns +0 -0
  485. package/src/web/icons/favicon.ico +0 -0
  486. package/src/web/icons/icon.png +0 -0
  487. package/src/web/icons/image.png +0 -0
  488. package/src/web/index.html +0 -382
  489. package/src/web/iroh-delegate-transport.ts +0 -139
  490. package/src/web/manifest.json +0 -21
  491. package/src/web/server.ts +0 -5571
  492. package/src/web/style.css +0 -4455
  493. package/staging/auto-evolve/clean-001/.review-verdict +0 -9
  494. package/staging/auto-evolve/clean-001/clean-001.patch +0 -14
  495. package/staging/auto-evolve/e2e-001/.patch-id +0 -1
  496. package/staging/auto-evolve/e2e-001/.review-verdict +0 -12
  497. package/staging/auto-evolve/e2e-001/e2e-001.patch +0 -11
  498. package/staging/auto-evolve/test-bad/.review-verdict +0 -12
  499. package/staging/auto-evolve/test-bad/test-bad.patch +0 -11
  500. package/tsconfig.cli.json +0 -16
  501. package/tsconfig.electron.json +0 -20
  502. package/tsconfig.json +0 -18
@@ -1,83 +0,0 @@
1
- # Stop Hook: Completion Proposal + Independent Review (ADR-044 §3.4 L3+L4)
2
-
3
- 你**不是** Evaluator。你是被评估的一方。你的工作是:
4
- 1. 写出你做了什么(proposal)
5
- 2. 请一个独立 agent 来评你
6
-
7
- **禁止自己给自己打分。** 自评有结构性利益冲突(Anthropic: "Agents consistently overpraise their own work")。
8
-
9
- ## Step 1: 写 Completion Proposal
10
-
11
- 将以下 JSON 写入 `.boll/state/completion-proposal.json`:
12
-
13
- ```json
14
- {
15
- "session_id": "<当前 session 标识>",
16
- "timestamp": "<ISO 8601>",
17
- "summary": "<1-3 句话描述本 session 做了什么>",
18
- "files_changed": ["<从 git diff 或 risk-snapshot 获取>"],
19
- "evidence": {
20
- "tests_run": "<运行了哪些测试,结果如何>",
21
- "verification_commands": ["<实际执行的验证命令>"],
22
- "commits": ["<本 session 的 commit hash + message>"]
23
- },
24
- "known_limitations": ["<诚实列出已知的未完成项或风险>"],
25
- "task_reference": "<TASK.md 路径或用户原始指令摘要>"
26
- }
27
- ```
28
-
29
- **要求**:
30
- - `files_changed` 必须从 `git diff` 或 risk-snapshot 的 `files_touched` 取,**不得凭记忆列举**
31
- - `evidence` 中的测试结果必须是实际运行输出,不是"应该通过"
32
- - `known_limitations` 必须诚实 — 这是给 reviewer 的线索,不是给自己开脱
33
-
34
- ## Step 2: Spawn 独立 Reviewer
35
-
36
- 写完 proposal 后,**必须** spawn 一个独立审查 agent:
37
-
38
- ```
39
- Agent({
40
- subagent_type: "review-readonly",
41
- description: "Completion review",
42
- prompt: `你是独立的 Completion Reviewer(ADR-044 L4)。
43
- 你的任务是验证 agent 的 completion proposal 是否与实际代码变更一致。
44
-
45
- 读取 .boll/state/completion-proposal.json,然后:
46
-
47
- 1. **Proposal vs Reality**:git diff 的实际变更是否与 proposal.files_changed 一致?有遗漏吗?
48
- 2. **Evidence 可信度**:proposal.evidence 中声称的测试/验证,结果是否真实?
49
- 3. **半成品检查**:变更文件中有没有 TODO/FIXME/HACK?有没有 dead code?
50
- 4. **契约一致性**:如果改了 API/config/路由,所有引用处是否同步更新?
51
- 5. **已知限制诚实度**:proposal.known_limitations 是否遗漏了明显风险?
52
-
53
- 评分(每维 1-5,任何维 < 3 = FAIL):
54
- - Completeness: proposal 是否覆盖所有实际变更
55
- - Honesty: evidence 和 limitations 是否真实
56
- - Quality: 代码变更本身的质量
57
- - Consistency: 跨文件/跨层的一致性
58
-
59
- 输出格式:
60
- ## Verdict: PASS / FAIL
61
- ## Scores: Completeness X/5, Honesty X/5, Quality X/5, Consistency X/5
62
- ## Findings: [具体发现列表]
63
- ## Recommendation: [如果 FAIL,具体要修什么]`
64
- })
65
- ```
66
-
67
- ## Step 3: 根据 Reviewer 裁决行动
68
-
69
- - **Reviewer 说 PASS** → 你可以 Stop
70
- - **Reviewer 说 FAIL** → 按 Recommendation 修复,修复后再尝试 Stop
71
- - **Reviewer spawn 失败**(超时/权限等)→ 降级为 PreCompletionChecklist 自检(下方),但必须在输出中声明 "独立审查未执行,以下为自检降级"
72
-
73
- ## 降级 Fallback: PreCompletionChecklist(仅当 reviewer 不可用时)
74
-
75
- 如果因环境限制无法 spawn reviewer,执行以下自检:
76
-
77
- 1. **Git 状态**: 所有新文件是否已 `git add`?是否有未保存的变更?
78
- 2. **测试**: 如果有代码变更,相关测试是否通过?
79
- 3. **文档一致性**: 代码变更是否需要更新文档?
80
- 4. **无半成品**: 是否有 TODO/FIXME/HACK 被遗留?
81
- 5. **契约一致性**: API 类型、路由路径、配置 key 是否在所有引用处一致?
82
-
83
- **但必须标注**:这是自检降级,不是独立审查。
@@ -1,281 +0,0 @@
1
- #!/bin/bash
2
- # sync-from-upstream.sh — Sync hook files from boll (upstream) to bollharness.
3
- #
4
- # Purpose: boll is the development/incubation repo where hooks are written
5
- # and tested. This script copies updated hooks to bollharness and reports
6
- # any discrepancies in settings.json hook registrations.
7
- #
8
- # What it does:
9
- # 1. Copy shared hook scripts from boll → bollharness (skip boll-only files)
10
- # 2. Replace find-boll-root.sh references → find-project-root.sh in copied files
11
- # 3. Compare settings.json hook registrations and report differences
12
- # 4. Sync shared scripts (guard-feedback.ts, deploy-guard.ts, context_router.ts, guard_router.ts)
13
- # 5. Sync context-fragments/ directory
14
- #
15
- # Usage:
16
- # ./scripts/sync-from-upstream.sh # default boll path
17
- # ./scripts/sync-from-upstream.sh /path/to/boll # explicit upstream path
18
- # ./scripts/sync-from-upstream.sh --dry-run # show what would change
19
-
20
- set -euo pipefail
21
-
22
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
23
- HARNESS_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
24
- UPSTREAM_DEFAULT="$(cd "$HARNESS_ROOT/../boll" 2>/dev/null && pwd || echo "")"
25
-
26
- # Parse args
27
- DRY_RUN=false
28
- UPSTREAM=""
29
-
30
- for arg in "$@"; do
31
- case "$arg" in
32
- --dry-run) DRY_RUN=true ;;
33
- *) UPSTREAM="$arg" ;;
34
- esac
35
- done
36
-
37
- if [ -z "$UPSTREAM" ]; then
38
- UPSTREAM="$UPSTREAM_DEFAULT"
39
- fi
40
-
41
- if [ -z "$UPSTREAM" ] || [ ! -d "$UPSTREAM/scripts/hooks" ]; then
42
- echo "ERROR: Cannot find upstream boll repo."
43
- echo "Usage: $0 [--dry-run] [/path/to/boll]"
44
- exit 1
45
- fi
46
-
47
- echo "=== bollharness sync-from-upstream ==="
48
- echo "Upstream: $UPSTREAM"
49
- echo "Target: $HARNESS_ROOT"
50
- echo "Dry run: $DRY_RUN"
51
- echo ""
52
-
53
- # ─── Files that exist only in boll (not synced) ───
54
- boll_ONLY=(
55
- "find-boll-root.sh" # boll-specific root finder
56
- )
57
-
58
- # ─── Files that exist only in bollharness (not overwritten) ───
59
- HARNESS_ONLY=(
60
- "find-project-root.sh" # Generic root finder
61
- "sanitize-on-read.ts" # WP-11 addition
62
- )
63
-
64
- # ─── Step 1: Copy shared hooks ───
65
- echo "── Step 1: Sync hook scripts ──"
66
- COPIED=0
67
- SKIPPED=0
68
- UNCHANGED=0
69
-
70
- for src_file in "$UPSTREAM/scripts/hooks/"*; do
71
- [ -f "$src_file" ] || continue # skip directories (e.g. __pycache__)
72
- filename="$(basename "$src_file")"
73
-
74
- # Skip boll-only files
75
- skip=false
76
- for excl in "${boll_ONLY[@]}"; do
77
- if [ "$filename" = "$excl" ]; then
78
- skip=true
79
- break
80
- fi
81
- done
82
- if $skip; then
83
- echo " SKIP (boll-only): $filename"
84
- ((SKIPPED++))
85
- continue
86
- fi
87
-
88
- # Skip harness-only files (don't overwrite)
89
- for excl in "${HARNESS_ONLY[@]}"; do
90
- if [ "$filename" = "$excl" ]; then
91
- skip=true
92
- break
93
- fi
94
- done
95
- if $skip; then
96
- echo " SKIP (harness-only): $filename"
97
- ((SKIPPED++))
98
- continue
99
- fi
100
-
101
- dst_file="$HARNESS_ROOT/scripts/hooks/$filename"
102
-
103
- # Check if content differs
104
- if [ -f "$dst_file" ]; then
105
- if diff -q "$src_file" "$dst_file" > /dev/null 2>&1; then
106
- ((UNCHANGED++))
107
- continue
108
- fi
109
- fi
110
-
111
- if $DRY_RUN; then
112
- echo " WOULD COPY: $filename"
113
- else
114
- cp "$src_file" "$dst_file"
115
- echo " COPIED: $filename"
116
- fi
117
- ((COPIED++))
118
- done
119
-
120
- echo ""
121
- echo " Results: $COPIED copied, $SKIPPED skipped, $UNCHANGED unchanged"
122
-
123
- # ─── Step 2: Replace find-boll-root.sh references ───
124
- echo ""
125
- echo "── Step 2: Path references ──"
126
- PATCHED=0
127
-
128
- for hook_file in "$HARNESS_ROOT/scripts/hooks/"*.ts "$HARNESS_ROOT/scripts/hooks/"*.sh; do
129
- [ -f "$hook_file" ] || continue
130
- filename="$(basename "$hook_file")"
131
-
132
- # Skip harness-only files
133
- skip=false
134
- for excl in "${HARNESS_ONLY[@]}"; do
135
- if [ "$filename" = "$excl" ]; then
136
- skip=true
137
- break
138
- fi
139
- done
140
- if $skip; then continue; fi
141
-
142
- if grep -q "find-boll-root.sh" "$hook_file" 2>/dev/null; then
143
- if $DRY_RUN; then
144
- echo " WOULD PATCH: $filename (find-boll-root.sh → find-project-root.sh)"
145
- else
146
- # Use perl for reliable in-place replace (macOS sed -i differs from GNU)
147
- perl -pi -e 's/find-boll-root\.sh/find-project-root.sh/g' "$hook_file"
148
- echo " PATCHED: $filename"
149
- fi
150
- ((PATCHED++))
151
- fi
152
- done
153
-
154
- if [ "$PATCHED" -eq 0 ]; then
155
- echo " No path references to patch"
156
- fi
157
-
158
- # ─── Step 3: Compare settings.json hook registrations ───
159
- echo ""
160
- echo "── Step 3: Hook registration diff ──"
161
-
162
- # Extract hook script names from settings.json
163
- extract_hooks() {
164
- npx ts-node -e "
165
- import json, sys
166
- const d = JSON.parse(require('fs').readFileSync('$1', 'utf8'));
167
- const hooks = [];
168
- for (const [stage, entries] of Object.entries(d.get('hooks', {}))) {
169
- for (const entry of entries) {
170
- const matcher = entry.get('matcher', '*');
171
- for (const h of entry.get('hooks', [])) {
172
- const cmd = h.get('command', '');
173
- // Extract script name
174
- const parts = cmd.split(' ');
175
- for (let i = parts.length - 1; i >= 0; i--) {
176
- if (parts[i].endsWith('.ts') || parts[i].endsWith('.sh')) {
177
- hooks.push(\`\${stage}|\${matcher}|\${parts[i].split('/').pop()}\`);
178
- break;
179
- }
180
- }
181
- }
182
- }
183
- }
184
- for (const h of [...new Set(hooks)].sort()) console.log(h);
185
- " 2>/dev/null
186
- }
187
-
188
- UPSTREAM_HOOKS=$(extract_hooks "$UPSTREAM/.boll/settings.json")
189
- HARNESS_HOOKS=$(extract_hooks "$HARNESS_ROOT/.boll/settings.json")
190
-
191
- # Find hooks only in upstream
192
- ONLY_UPSTREAM=$(comm -23 <(echo "$UPSTREAM_HOOKS") <(echo "$HARNESS_HOOKS"))
193
- ONLY_HARNESS=$(comm -13 <(echo "$UPSTREAM_HOOKS") <(echo "$HARNESS_HOOKS"))
194
-
195
- if [ -n "$ONLY_UPSTREAM" ]; then
196
- echo " ⚠ Only in boll (missing from bollharness):"
197
- echo "$ONLY_UPSTREAM" | while IFS='|' read -r stage matcher script; do
198
- echo " $stage $matcher: $script"
199
- done
200
- fi
201
-
202
- if [ -n "$ONLY_HARNESS" ]; then
203
- echo " ℹ Only in bollharness (expected for harness-specific hooks):"
204
- echo "$ONLY_HARNESS" | while IFS='|' read -r stage matcher script; do
205
- echo " $stage $matcher: $script"
206
- done
207
- fi
208
-
209
- if [ -z "$ONLY_UPSTREAM" ] && [ -z "$ONLY_HARNESS" ]; then
210
- echo " ✓ Hook registrations in sync"
211
- fi
212
-
213
- # ─── Step 4: Check for other synced files ───
214
- echo ""
215
- echo "── Step 4: Other shared files ──"
216
-
217
- # Scripts in scripts/ root that are shared with boll
218
- for shared_file in "guard-feedback.ts" "deploy-guard.ts" "context_router.ts" "guard_router.ts"; do
219
- src="$UPSTREAM/scripts/$shared_file"
220
- dst="$HARNESS_ROOT/scripts/$shared_file"
221
- if [ -f "$src" ] && [ -f "$dst" ]; then
222
- if ! diff -q "$src" "$dst" > /dev/null 2>&1; then
223
- if $DRY_RUN; then
224
- echo " WOULD COPY: scripts/$shared_file"
225
- else
226
- cp "$src" "$dst"
227
- echo " COPIED: scripts/$shared_file"
228
- fi
229
- fi
230
- elif [ -f "$src" ] && [ ! -f "$dst" ]; then
231
- echo " ⚠ MISSING in harness: scripts/$shared_file"
232
- fi
233
- done
234
-
235
- # ─── Step 5: Sync context-fragments/ directory ───
236
- echo ""
237
- echo "── Step 5: Context fragments ──"
238
- FRAG_COPIED=0
239
- FRAG_UNCHANGED=0
240
-
241
- src_frag_dir="$UPSTREAM/scripts/context-fragments"
242
- dst_frag_dir="$HARNESS_ROOT/scripts/context-fragments"
243
-
244
- if [ -d "$src_frag_dir" ]; then
245
- if [ ! -d "$dst_frag_dir" ]; then
246
- if $DRY_RUN; then
247
- echo " WOULD CREATE: scripts/context-fragments/"
248
- else
249
- mkdir -p "$dst_frag_dir"
250
- echo " CREATED: scripts/context-fragments/"
251
- fi
252
- fi
253
-
254
- for src_frag in "$src_frag_dir/"*; do
255
- [ -f "$src_frag" ] || continue
256
- frag_name="$(basename "$src_frag")"
257
- dst_frag="$dst_frag_dir/$frag_name"
258
-
259
- if [ -f "$dst_frag" ]; then
260
- if diff -q "$src_frag" "$dst_frag" > /dev/null 2>&1; then
261
- ((FRAG_UNCHANGED++))
262
- continue
263
- fi
264
- fi
265
-
266
- if $DRY_RUN; then
267
- echo " WOULD COPY: context-fragments/$frag_name"
268
- else
269
- cp "$src_frag" "$dst_frag"
270
- echo " COPIED: context-fragments/$frag_name"
271
- fi
272
- ((FRAG_COPIED++))
273
- done
274
-
275
- echo " Results: $FRAG_COPIED copied, $FRAG_UNCHANGED unchanged"
276
- else
277
- echo " ⚠ Upstream context-fragments/ not found"
278
- fi
279
-
280
- echo ""
281
- echo "=== Sync complete ==="
@@ -1,5 +0,0 @@
1
- export { Finding, createFinding } from "./scripts/checks/finding";
2
- export { route, runGuards, writeSessionSignal, readAllSignals, GUARD_MAP, DEFAULT_GUARDS, CATEGORY_TO_SKILLS } from "./scripts/guard_router";
3
- export { match, loadFragment, FALLBACK_FRAGMENTS, CONTEXT_MAP } from "./scripts/context_router";
4
- export { main as guardFeedbackMain } from "./scripts/guard-feedback";
5
- export { main as deployGuardMain } from "./scripts/deploy-guard";
@@ -1,11 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- if (mode !== "full" && mode !== "ci") return findings;
9
-
10
- return findings;
11
- }
@@ -1,52 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- const tsFile = path.join(repoRoot, "generated", "api-types.ts");
9
- if (!fs.existsSync(tsFile)) {
10
- findings.push({
11
- severity: "P1",
12
- message: "generated/api-types.ts does not exist — run scripts/export_api_types.py",
13
- file: "generated/api-types.ts",
14
- blocking: false,
15
- category: "general",
16
- problem_class: "unknown",
17
- required_skills: [],
18
- required_reads: [],
19
- });
20
- return findings;
21
- }
22
-
23
- const content = fs.readFileSync(tsFile, "utf-8");
24
- const interfaceMatch = content.match(/export interface (\w+) \{/g);
25
-
26
- if (!interfaceMatch) {
27
- findings.push({
28
- severity: "P1",
29
- message: "generated/api-types.ts contains no interfaces",
30
- file: "generated/api-types.ts",
31
- blocking: false,
32
- category: "general",
33
- problem_class: "unknown",
34
- required_skills: [],
35
- required_reads: [],
36
- });
37
- return findings;
38
- }
39
-
40
- findings.push({
41
- severity: "P2",
42
- message: "API type checking requires backend model comparison (Python 3.10+ backend not available in TypeScript check)",
43
- file: "generated/api-types.ts",
44
- blocking: false,
45
- category: "general",
46
- problem_class: "unknown",
47
- required_skills: [],
48
- required_reads: [],
49
- });
50
-
51
- return findings;
52
- }
@@ -1,156 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { execSync } from "child_process";
4
- import { Finding } from "./finding";
5
-
6
- const CODE_EXTENSIONS = new Set([".py", ".ts", ".tsx", ".js", ".jsx"]);
7
- const CONFIG_EXTENSIONS = new Set([".json", ".yml", ".yaml", ".toml"]);
8
- const TEST_PREFIXES = ["tests/", "test_"];
9
- const ARTIFACT_PREFIXES = ["docs/issues/", "docs/decisions/"];
10
- const BUILD_DIRS = new Set([".open-next", "dist", "build", ".next", "node_modules"]);
11
-
12
- function isCodeFile(filePath: string): boolean {
13
- const p = path.parse(filePath);
14
- if (!CODE_EXTENSIONS.has(p.ext)) return false;
15
- const parts = p.dir.split(path.sep);
16
- for (const part of parts) {
17
- if (part.startsWith("test_") || part === "tests") return false;
18
- }
19
- for (const part of parts) {
20
- if (BUILD_DIRS.has(part)) return false;
21
- }
22
- return true;
23
- }
24
-
25
- function isArtifactFile(filePath: string): boolean {
26
- return ARTIFACT_PREFIXES.some(prefix => filePath.startsWith(prefix)) && filePath.endsWith(".md");
27
- }
28
-
29
- function extractScope(artifactPath: string): string[] {
30
- try {
31
- const text = fs.readFileSync(artifactPath, "utf-8");
32
- if (!text.startsWith("---")) return [];
33
-
34
- const end = text.indexOf("\n---", 3);
35
- if (end === -1) return [];
36
-
37
- const frontmatter = text.slice(3, end);
38
- const scopes: string[] = [];
39
- let inScope = false;
40
-
41
- for (const line of frontmatter.split("\n")) {
42
- const stripped = line.trim();
43
- if (stripped.startsWith("scope:")) {
44
- const value = stripped.slice(6).trim();
45
- if (value && !value.startsWith("[")) {
46
- scopes.push(value);
47
- inScope = false;
48
- } else if (value.startsWith("[")) {
49
- const inner = value.replace(/[\[\] ]/g, "");
50
- scopes.push(...inner.split(",").filter(s => s));
51
- inScope = false;
52
- } else {
53
- inScope = true;
54
- }
55
- continue;
56
- }
57
- if (inScope) {
58
- if (stripped.startsWith("- ")) {
59
- scopes.push(stripped.slice(2).trim().replace(/^["']|["']$/g, ""));
60
- } else if (stripped && !stripped.startsWith("#")) {
61
- inScope = false;
62
- }
63
- }
64
- }
65
-
66
- return scopes.filter(s => s);
67
- } catch {
68
- return [];
69
- }
70
- }
71
-
72
- function checkScopeBinding(
73
- codeFiles: string[],
74
- artifactFiles: string[],
75
- repoRoot: string
76
- ): Finding[] {
77
- const allScopes: string[] = [];
78
- for (const af of artifactFiles) {
79
- allScopes.push(...extractScope(path.join(repoRoot, af)));
80
- }
81
-
82
- if (allScopes.length === 0) return [];
83
-
84
- const uncovered: string[] = [];
85
- for (const cf of codeFiles) {
86
- if (!allScopes.some(scope => cf.startsWith(scope))) {
87
- uncovered.push(cf);
88
- }
89
- }
90
-
91
- if (uncovered.length === 0) return [];
92
-
93
- return [{
94
- severity: "P2",
95
- message: `Scope binding gap: ${uncovered.length} code file(s) not covered by any artifact scope. Uncovered: ${uncovered.slice(0, 5).join(", ")}${uncovered.length > 5 ? ` (and ${uncovered.length - 5} more)` : ""}. Add a scope field to the relevant artifact doc.`,
96
- file: uncovered[0],
97
- blocking: false,
98
- category: "scope_binding",
99
- problem_class: "unknown",
100
- required_skills: ["lead"],
101
- required_reads: [],
102
- }];
103
- }
104
-
105
- function getChangedFiles(mode: string, repoRoot: string): string[] {
106
- if (mode === "staged") {
107
- try {
108
- const result = execSync("git diff --cached --name-only", { cwd: repoRoot, encoding: "utf-8" });
109
- return result.split("\n").map(l => l.trim()).filter(l => l);
110
- } catch {
111
- return [];
112
- }
113
- } else if (mode === "ci") {
114
- try {
115
- const result = execSync("git diff origin/main..HEAD --name-only", { cwd: repoRoot, encoding: "utf-8" });
116
- return result.split("\n").map(l => l.trim()).filter(l => l);
117
- } catch {
118
- return [];
119
- }
120
- }
121
- return [];
122
- }
123
-
124
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
125
- if (mode === "full") return [];
126
-
127
- const files = getChangedFiles(mode, repoRoot);
128
- if (!files.length) return [];
129
-
130
- const codeFiles = files.filter(f => isCodeFile(f));
131
- const artifactFiles = files.filter(f => isArtifactFile(f));
132
- const hasCode = codeFiles.length > 0;
133
- const hasArtifact = artifactFiles.length > 0;
134
-
135
- const findings: Finding[] = [];
136
-
137
- if (hasCode && !hasArtifact) {
138
- findings.push({
139
- severity: "P1",
140
- message: `Code changes without artifact documentation. ${codeFiles.length} code file(s) changed but no docs/issues/ or docs/decisions/ file included. Add an issue or decision doc.`,
141
- file: codeFiles[0],
142
- blocking: true,
143
- category: "artifact_linkage",
144
- problem_class: "unknown",
145
- required_skills: ["lead"],
146
- required_reads: [],
147
- });
148
- return findings;
149
- }
150
-
151
- if (hasCode && hasArtifact) {
152
- findings.push(...checkScopeBinding(codeFiles, artifactFiles, repoRoot));
153
- }
154
-
155
- return findings;
156
- }
@@ -1,11 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- if (mode !== "full" && mode !== "ci") return findings;
9
-
10
- return findings;
11
- }
@@ -1,11 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- if (mode !== "full" && mode !== "ci") return findings;
9
-
10
- return findings;
11
- }
@@ -1,11 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- if (mode !== "full" && mode !== "ci") return findings;
9
-
10
- return findings;
11
- }
@@ -1,11 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { Finding } from "./finding";
4
-
5
- export function run(repoRoot: string, mode: string = "full"): Finding[] {
6
- const findings: Finding[] = [];
7
-
8
- if (mode !== "full" && mode !== "ci") return findings;
9
-
10
- return findings;
11
- }