karajan-code 4.70.3 → 5.0.0

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 (388) hide show
  1. package/README.md +2 -2
  2. package/package.json +6 -14
  3. package/packages/hu-board/package.json +1 -1
  4. package/packages/hu-board/public/app.js +4 -18
  5. package/packages/hu-board/public/index.html +5 -2
  6. package/packages/hu-board/public/styles.css +26 -0
  7. package/packages/hu-board/public/utils/api.js +0 -74
  8. package/packages/hu-board/public/utils/board-tour.js +62 -0
  9. package/packages/hu-board/public/utils/board-view.js +49 -144
  10. package/packages/hu-board/public/utils/command-launcher.js +8 -70
  11. package/packages/hu-board/public/utils/formatters.js +10 -0
  12. package/packages/hu-board/public/utils/governance-view.js +13 -1
  13. package/packages/hu-board/public/utils/hu-actions.js +17 -68
  14. package/packages/hu-board/public/utils/init-listeners.js +7 -8
  15. package/packages/hu-board/public/utils/log-panel.js +3 -16
  16. package/packages/hu-board/public/utils/maggle-mode.js +2 -12
  17. package/packages/hu-board/public/utils/modals.js +7 -0
  18. package/packages/hu-board/public/utils/project-picker-view.js +1 -1
  19. package/packages/hu-board/public/utils/server-push.js +3 -22
  20. package/packages/hu-board/public/utils/shared-board-notice.js +33 -0
  21. package/packages/hu-board/public/utils/story-detail-view.js +5 -19
  22. package/packages/hu-board/src/cleanup-zombies.js +0 -1
  23. package/packages/hu-board/src/command-runner.js +36 -25
  24. package/packages/hu-board/src/db-connection.js +282 -0
  25. package/packages/hu-board/src/db-paths.js +113 -0
  26. package/packages/hu-board/src/db-queries.js +188 -0
  27. package/packages/hu-board/src/db-tombstones.js +51 -0
  28. package/packages/hu-board/src/db.js +28 -619
  29. package/packages/hu-board/src/ephemeral-cleaner.js +2 -3
  30. package/packages/hu-board/src/hu-zombie-reaper.js +5 -1
  31. package/packages/hu-board/src/plan-mutations.js +3 -153
  32. package/packages/hu-board/src/plans-service.js +55 -0
  33. package/packages/hu-board/src/routes/api/commands.js +122 -0
  34. package/packages/hu-board/src/routes/api/plans.js +55 -0
  35. package/packages/hu-board/src/routes/api/projects.js +267 -0
  36. package/packages/hu-board/src/routes/api/prompts.js +135 -0
  37. package/packages/hu-board/src/routes/api/sessions.js +95 -0
  38. package/packages/hu-board/src/routes/api/stories.js +183 -0
  39. package/packages/hu-board/src/routes/api/system.js +241 -0
  40. package/packages/hu-board/src/routes/api/tombstones.js +38 -0
  41. package/packages/hu-board/src/routes/api.js +24 -1371
  42. package/packages/hu-board/src/routes/governance.js +23 -1
  43. package/packages/hu-board/src/routes/lanes.js +40 -0
  44. package/packages/hu-board/src/routes/rag.js +4 -3
  45. package/packages/hu-board/src/server.js +20 -34
  46. package/packages/hu-board/src/sync-files.js +318 -0
  47. package/packages/hu-board/src/sync-project.js +99 -0
  48. package/packages/hu-board/src/sync.js +22 -566
  49. package/packages/hu-board/src/zombie-reaper.js +1 -1
  50. package/scripts/dual-publish.mjs +19 -3
  51. package/scripts/postinstall.js +15 -2
  52. package/scripts/verify-pack-mcp.mjs +11 -7
  53. package/scripts/verify-pack.mjs +4 -4
  54. package/src/audit/audit-history.js +3 -2
  55. package/src/audit/dead-exports.js +68 -59
  56. package/src/audit/deterministic-summary.js +33 -13
  57. package/src/audit/npm-signatures.js +41 -0
  58. package/src/audit/sbom.js +35 -0
  59. package/src/checks/agent-token.js +112 -0
  60. package/src/checks/ai-surface.js +9 -7
  61. package/src/checks/config-files.js +8 -7
  62. package/src/checks/dir-setup.js +34 -1
  63. package/src/checks/native-build.js +21 -39
  64. package/src/checks/runner.js +128 -142
  65. package/src/cli/advanced-commands.js +6 -6
  66. package/src/cli/register-meta.js +42 -82
  67. package/src/cli/register-pipeline.js +8 -140
  68. package/src/cli/register-plan.js +9 -100
  69. package/src/cli/retired-commands.js +49 -0
  70. package/src/cli.js +18 -5
  71. package/src/commands/agent-run.js +40 -26
  72. package/src/commands/audit.js +127 -124
  73. package/src/commands/board.js +5 -9
  74. package/src/commands/check.js +29 -16
  75. package/src/commands/doctor.js +2 -0
  76. package/src/commands/env.js +176 -148
  77. package/src/commands/go.js +76 -55
  78. package/src/commands/harden.js +105 -86
  79. package/src/commands/hu-start.js +52 -0
  80. package/src/commands/hu.js +288 -221
  81. package/src/commands/identity.js +111 -78
  82. package/src/commands/init-atril.js +47 -0
  83. package/src/commands/init.js +11 -40
  84. package/src/commands/install-tools.js +70 -85
  85. package/src/commands/main-guard.js +78 -0
  86. package/src/commands/policy.js +226 -184
  87. package/src/commands/qmd.js +27 -21
  88. package/src/commands/rag.js +75 -48
  89. package/src/commands/review-gate.js +422 -339
  90. package/src/commands/start.js +4 -5
  91. package/src/commands/steward.js +96 -47
  92. package/src/commands/tournament.js +46 -37
  93. package/src/commands/worktree.js +94 -25
  94. package/src/config/loader.js +34 -17
  95. package/src/config/overrides.js +2 -1
  96. package/src/config/secrets.js +36 -0
  97. package/src/config.js +1 -0
  98. package/src/environment/adr.js +16 -2
  99. package/src/environment/board-access.js +11 -9
  100. package/src/git/karajan-label.js +20 -8
  101. package/src/guards/main-guard.js +54 -0
  102. package/src/harden/branch-protection.js +36 -3
  103. package/src/harden/hook-templates.js +16 -1
  104. package/src/harden/sentinel/posttooluse.mjs +18 -6
  105. package/src/harden/sentinel/pretooluse-sentinel.mjs +81 -35
  106. package/src/harden/sentinel/sentinel-lib.mjs +149 -23
  107. package/src/harden/sentinel/sentinel-shell.mjs +64 -0
  108. package/src/harden/sentinel/sessionstart.mjs +3 -2
  109. package/src/harden/sentinel/stop.mjs +5 -4
  110. package/src/harden/workflow-engine.js +12 -1
  111. package/src/harden/workflow-templates.js +1 -1
  112. package/src/hu/board-lookup.js +29 -0
  113. package/src/hu/gh-identity.js +23 -0
  114. package/src/hu/github-board.js +4 -2
  115. package/src/hu/lane-prune.js +15 -7
  116. package/src/hu/lane-setup.js +65 -0
  117. package/src/hu/lanes.js +66 -0
  118. package/src/hu/team-board-mirror.js +3 -2
  119. package/src/infrastructure/command-runner.js +1 -1
  120. package/src/infrastructure/file-system-service.js +1 -1
  121. package/src/mcp/handlers/direct-handlers.js +2 -292
  122. package/src/mcp/handlers/hu-handlers.js +44 -55
  123. package/src/mcp/handlers/management-handlers.js +2 -42
  124. package/src/mcp/server-handlers.js +16 -22
  125. package/src/mcp/tools.js +5 -200
  126. package/src/plan/lane-plans.js +54 -0
  127. package/src/plan/plan-store.js +7 -4
  128. package/src/policy/add.js +26 -12
  129. package/src/policy/adr-number-check.js +31 -0
  130. package/src/prompts/audit.js +299 -339
  131. package/src/prompts/card-context.js +10 -5
  132. package/src/prompts/reviewer.js +5 -2
  133. package/src/rag/auto-update.js +56 -43
  134. package/src/rag/bootstrap-index.js +28 -54
  135. package/src/rag/migrate.js +1 -1
  136. package/src/rag/onnx-fallback.js +2 -2
  137. package/src/rag/pid-lease.js +70 -0
  138. package/src/rag/project-store.js +2 -12
  139. package/src/review/card-first.js +57 -46
  140. package/src/review/dual-review.js +5 -4
  141. package/src/review/gate-gitignore.js +23 -4
  142. package/src/review/gate-hook.js +47 -0
  143. package/src/review/one-shot-review.js +51 -37
  144. package/src/review/publish-pr.js +18 -3
  145. package/src/review/repo-docs.js +73 -0
  146. package/src/review/repo-stack.js +59 -0
  147. package/src/review/reviewer-fallback.js +34 -3
  148. package/src/review/seal-commit.js +29 -0
  149. package/src/review/sonar-pregate.js +59 -44
  150. package/src/review/third-party-review.js +90 -16
  151. package/src/review/third-party-size.js +43 -0
  152. package/src/review/third-party-skills.js +54 -0
  153. package/src/review/verify-pr.js +2 -26
  154. package/src/roles/audit-role.js +106 -125
  155. package/src/skills/atril-skills.js +5 -4
  156. package/src/sonar/scanner.js +116 -101
  157. package/src/steward/invariants.js +5 -4
  158. package/src/steward/phantom-sweep.js +66 -0
  159. package/src/tournament/judge.js +60 -53
  160. package/src/utils/agent-home.js +33 -0
  161. package/src/utils/gh-account.js +37 -0
  162. package/src/utils/git.js +0 -13
  163. package/src/utils/home-migration.js +7 -1
  164. package/src/utils/main-checkout.js +53 -0
  165. package/src/utils/qmd-collection.js +3 -1
  166. package/src/utils/welcome.js +3 -3
  167. package/templates/{skills → atril/commands}/kj-architect.md +5 -0
  168. package/templates/{skills → atril/commands}/kj-audit.md +5 -0
  169. package/templates/{skills → atril/commands}/kj-board.md +5 -0
  170. package/templates/{skills → atril/commands}/kj-code.md +5 -0
  171. package/templates/{skills → atril/commands}/kj-csv-transform.md +5 -0
  172. package/templates/{skills → atril/commands}/kj-data-report.md +5 -0
  173. package/templates/{skills → atril/commands}/kj-discover.md +5 -0
  174. package/templates/{skills → atril/commands}/kj-rag-query.md +5 -0
  175. package/templates/{skills → atril/commands}/kj-review.md +5 -0
  176. package/templates/{skills → atril/commands}/kj-security.md +5 -0
  177. package/templates/{skills → atril/commands}/kj-sonar.md +5 -0
  178. package/templates/{skills → atril/commands}/kj-sql-analysis.md +5 -0
  179. package/templates/{skills → atril/commands}/kj-test.md +5 -0
  180. package/packages/hu-board/public/utils/run-launcher.js +0 -169
  181. package/packages/hu-board/src/run-tracker.js +0 -121
  182. package/src/activity-log.js +0 -59
  183. package/src/agents/host-agent.js +0 -38
  184. package/src/agents/model-registry.js +0 -142
  185. package/src/audit/plan-adherence.js +0 -224
  186. package/src/autonomy/arbiter-role.js +0 -71
  187. package/src/autonomy/arbiter.js +0 -22
  188. package/src/autonomy/decider.js +0 -18
  189. package/src/autonomy/decision-resolver.js +0 -58
  190. package/src/autonomy/outcome-report.js +0 -55
  191. package/src/autonomy/stage-ask.js +0 -30
  192. package/src/brain/decision-tracker.js +0 -125
  193. package/src/brain/decisor.js +0 -243
  194. package/src/brain/solomon-consult.js +0 -171
  195. package/src/brain/standby-scheduler.js +0 -8
  196. package/src/budget/comparison.js +0 -96
  197. package/src/canvas/parse-md.js +0 -238
  198. package/src/canvas/schema.js +0 -101
  199. package/src/canvas/to-flat.js +0 -85
  200. package/src/canvas/validate.js +0 -163
  201. package/src/ci/dispatch.js +0 -99
  202. package/src/ci/index.js +0 -3
  203. package/src/ci/pr-diff.js +0 -26
  204. package/src/cli/register-standby.js +0 -26
  205. package/src/commands/architect.js +0 -111
  206. package/src/commands/autorun.js +0 -49
  207. package/src/commands/researcher.js +0 -54
  208. package/src/commands/resume.js +0 -72
  209. package/src/commands/review.js +0 -89
  210. package/src/commands/run.js +0 -185
  211. package/src/commands/standby.js +0 -117
  212. package/src/commands/status.js +0 -36
  213. package/src/commands/triage.js +0 -78
  214. package/src/commands/undo.js +0 -62
  215. package/src/domains/domain-loader.js +0 -245
  216. package/src/domains/domain-registry.js +0 -140
  217. package/src/domains/domain-synthesizer.js +0 -129
  218. package/src/git/automation.js +0 -433
  219. package/src/git/coder-commit-guard.js +0 -40
  220. package/src/git/hu-automation.js +0 -243
  221. package/src/git/hu-snapshot.js +0 -10
  222. package/src/git/symlink-targets.js +0 -57
  223. package/src/golden/asserter.js +0 -92
  224. package/src/golden/loader.js +0 -52
  225. package/src/golden/runner.js +0 -92
  226. package/src/golden/schema.js +0 -41
  227. package/src/guards/duplicate-members.js +0 -86
  228. package/src/guards/intent-guard.js +0 -161
  229. package/src/guards/perf-guard.js +0 -126
  230. package/src/guards/policy-guard.js +0 -90
  231. package/src/guards/policy-resolver.js +0 -85
  232. package/src/guards/secret-redactor.js +0 -71
  233. package/src/hu/acceptance-runner.js +0 -138
  234. package/src/hu/lazy-planner.js +0 -109
  235. package/src/hu/parallel-executor.js +0 -94
  236. package/src/hu/routing-metrics.js +0 -17
  237. package/src/hu/split-validator.js +0 -143
  238. package/src/hu/splitting-detector.js +0 -158
  239. package/src/hu/splitting-generator.js +0 -175
  240. package/src/hu/store.js +0 -394
  241. package/src/infrastructure/mocks.js +0 -182
  242. package/src/mcp/handlers/run-handler.js +0 -318
  243. package/src/mcp/sovereignty-guard.js +0 -113
  244. package/src/mcp/tool-arg-normalizers.js +0 -16
  245. package/src/mutate/reviewer-signal.js +0 -76
  246. package/src/orchestrator/agent-fallback.js +0 -81
  247. package/src/orchestrator/brain-coordinator.js +0 -186
  248. package/src/orchestrator/ci-integration.js +0 -139
  249. package/src/orchestrator/config-init.js +0 -426
  250. package/src/orchestrator/direct-actions.js +0 -217
  251. package/src/orchestrator/drivers/error-recovery.js +0 -287
  252. package/src/orchestrator/drivers/init-context.js +0 -238
  253. package/src/orchestrator/drivers/iteration-loop.js +0 -382
  254. package/src/orchestrator/drivers/iteration-phases/coder-and-refactorer.js +0 -69
  255. package/src/orchestrator/drivers/iteration-phases/guards.js +0 -91
  256. package/src/orchestrator/drivers/iteration-phases/handle-approved.js +0 -29
  257. package/src/orchestrator/drivers/iteration-phases/quality-gates.js +0 -125
  258. package/src/orchestrator/drivers/iteration-phases/reviewer-gate.js +0 -62
  259. package/src/orchestrator/drivers/post-loop.js +0 -404
  260. package/src/orchestrator/drivers/pre-loop-phases/auto-hu-batch.js +0 -137
  261. package/src/orchestrator/drivers/pre-loop-phases/config-deprecations.js +0 -47
  262. package/src/orchestrator/drivers/pre-loop-phases/ensure-addyosmani-skills.js +0 -84
  263. package/src/orchestrator/drivers/pre-loop-phases/inject-loaded-plan.js +0 -393
  264. package/src/orchestrator/drivers/pre-loop.js +0 -524
  265. package/src/orchestrator/drivers/run-hu-batch.js +0 -468
  266. package/src/orchestrator/feedback-enrichment.js +0 -140
  267. package/src/orchestrator/feedback-queue.js +0 -151
  268. package/src/orchestrator/flow-control.js +0 -170
  269. package/src/orchestrator/flow-runner.js +0 -365
  270. package/src/orchestrator/fs-leak-detector.js +0 -228
  271. package/src/orchestrator/hu-scheduler.js +0 -114
  272. package/src/orchestrator/hu-sub-pipeline.js +0 -642
  273. package/src/orchestrator/iteration-gate.js +0 -73
  274. package/src/orchestrator/iteration-stages.js +0 -9
  275. package/src/orchestrator/parallel-limiter.js +0 -74
  276. package/src/orchestrator/pipeline-context.js +0 -72
  277. package/src/orchestrator/post-loop-stages.js +0 -468
  278. package/src/orchestrator/pre-loop-stages.js +0 -11
  279. package/src/orchestrator/preflight-checks.js +0 -487
  280. package/src/orchestrator/repair/repair-detector.js +0 -117
  281. package/src/orchestrator/repair/repair-runner.js +0 -142
  282. package/src/orchestrator/reviewer-fallback.js +0 -45
  283. package/src/orchestrator/role-output-compressor.js +0 -189
  284. package/src/orchestrator/session-journal.js +0 -308
  285. package/src/orchestrator/solomon-escalation.js +0 -331
  286. package/src/orchestrator/solomon-rules.js +0 -212
  287. package/src/orchestrator/stages/acceptance-coverage-stage.js +0 -47
  288. package/src/orchestrator/stages/architect-stage.js +0 -172
  289. package/src/orchestrator/stages/coder-stage.js +0 -506
  290. package/src/orchestrator/stages/domain-curator-stage.js +0 -82
  291. package/src/orchestrator/stages/format-stage.js +0 -61
  292. package/src/orchestrator/stages/hu-reviewer-phases/detect-and-apply-splits.js +0 -127
  293. package/src/orchestrator/stages/hu-reviewer-stage.js +0 -419
  294. package/src/orchestrator/stages/perf-stage.js +0 -140
  295. package/src/orchestrator/stages/planner-stage.js +0 -85
  296. package/src/orchestrator/stages/rag-context-stage.js +0 -80
  297. package/src/orchestrator/stages/rag-preload-decisor.js +0 -58
  298. package/src/orchestrator/stages/research-stage.js +0 -69
  299. package/src/orchestrator/stages/reviewer-stage.js +0 -431
  300. package/src/orchestrator/stages/sonar-stage.js +0 -439
  301. package/src/orchestrator/stages/stage-classes.js +0 -84
  302. package/src/orchestrator/stages/stage-executor.js +0 -155
  303. package/src/orchestrator/stages/suite-green-stage.js +0 -62
  304. package/src/orchestrator/stages/tdd-discipline-stage.js +0 -56
  305. package/src/orchestrator/stages/tool-judge-stage.js +0 -53
  306. package/src/orchestrator/stages/triage-stage.js +0 -172
  307. package/src/orchestrator/standby.js +0 -71
  308. package/src/orchestrator/verification-gate.js +0 -183
  309. package/src/orchestrator.js +0 -22
  310. package/src/plan/adr-generator.js +0 -170
  311. package/src/plan/adr-loader.js +0 -60
  312. package/src/plan/plan-executor.js +0 -100
  313. package/src/plan/plan-validation.js +0 -4
  314. package/src/prompts/acceptance-coverage.js +0 -32
  315. package/src/prompts/arbiter.js +0 -38
  316. package/src/prompts/architect.js +0 -103
  317. package/src/prompts/hu-reviewer.js +0 -244
  318. package/src/prompts/tool-correctness-judge.js +0 -31
  319. package/src/prompts/triage.js +0 -57
  320. package/src/rag/embedder.js +0 -2
  321. package/src/rag/embedders/_cloud-base.js +0 -2
  322. package/src/rag/embedders/cohere.js +0 -2
  323. package/src/rag/embedders/mistral.js +0 -2
  324. package/src/rag/embedders/onnx.js +0 -2
  325. package/src/rag/embedders/openai.js +0 -2
  326. package/src/rag/embedders/voyage.js +0 -2
  327. package/src/rag/rerank.js +0 -4
  328. package/src/rag/where-parser.js +0 -4
  329. package/src/repeat-detector.js +0 -88
  330. package/src/review/diff-generator.js +0 -112
  331. package/src/review/git-stash-helper.js +0 -104
  332. package/src/review/schema.js +0 -31
  333. package/src/review/scope-filter.js +0 -152
  334. package/src/review/snapshot-diff.js +0 -122
  335. package/src/review/tdd-discipline.js +0 -90
  336. package/src/review/tdd-policy.js +0 -69
  337. package/src/roles/acceptance-coverage-role.js +0 -78
  338. package/src/roles/architect-role.js +0 -77
  339. package/src/roles/coder-role.js +0 -113
  340. package/src/roles/commiter-role.js +0 -113
  341. package/src/roles/domain-curator-role.js +0 -134
  342. package/src/roles/hu-reviewer-role.js +0 -64
  343. package/src/roles/impeccable-role.js +0 -85
  344. package/src/roles/index.js +0 -18
  345. package/src/roles/karajan-brain-role.js +0 -134
  346. package/src/roles/perf-role.js +0 -122
  347. package/src/roles/planner-role.js +0 -151
  348. package/src/roles/refactorer-role.js +0 -30
  349. package/src/roles/repairer-role.js +0 -181
  350. package/src/roles/researcher-role.js +0 -70
  351. package/src/roles/reviewer-role.js +0 -115
  352. package/src/roles/security-role.js +0 -73
  353. package/src/roles/solomon-role.js +0 -271
  354. package/src/roles/sonar-role.js +0 -72
  355. package/src/roles/tester-role.js +0 -235
  356. package/src/roles/tool-correctness-judge-role.js +0 -78
  357. package/src/roles/triage-role.js +0 -99
  358. package/src/session/journal/decisions-writer.js +0 -200
  359. package/src/session/journal/iteration-logger.js +0 -194
  360. package/src/session/journal/summary-writer.js +0 -320
  361. package/src/session/journal/tree-writer.js +0 -164
  362. package/src/session/journal/write-all.js +0 -89
  363. package/src/session-cleanup.js +0 -116
  364. package/src/skills/semantic-detector.js +0 -167
  365. package/src/skills/skill-detector.js +0 -385
  366. package/src/sonar/cloud-scanner.js +0 -78
  367. package/src/tracker-bootstrap.js +0 -44
  368. package/src/types/index.js +0 -38
  369. package/src/types/policy.js +0 -43
  370. package/src/types/solomon.js +0 -87
  371. package/src/utils/async-lock.js +0 -31
  372. package/src/utils/budget.js +0 -229
  373. package/src/utils/cwd-confirm.js +0 -39
  374. package/src/utils/display/event-handlers.js +0 -403
  375. package/src/utils/display/formatters.js +0 -132
  376. package/src/utils/display/header.js +0 -47
  377. package/src/utils/display/session-summary.js +0 -118
  378. package/src/utils/display/solomon.js +0 -42
  379. package/src/utils/pricing.js +0 -29
  380. package/src/utils/quota-simulator.js +0 -56
  381. package/src/utils/role-assigner.js +0 -137
  382. package/src/utils/rtk-wrapper.js +0 -87
  383. package/src/utils/run-registry.js +0 -9
  384. package/src/utils/status-dashboard.js +0 -254
  385. package/src/utils/tool-call-extractor.js +0 -56
  386. package/src/webperf/devtools-detect.js +0 -112
  387. package/src/webperf/webperf-role-integration.js +0 -66
  388. package/templates/skills/kj-run.md +0 -73
@@ -1,186 +0,0 @@
1
- // Brain Coordinator: integrates Karajan Brain + 5 support modules into the pipeline.
2
- // Replaces ad-hoc role-to-role communication with a central intelligence.
3
-
4
- import * as queue from "./feedback-queue.js";
5
- import * as enrich from "./feedback-enrichment.js";
6
- import { verifyCoderOutput, VerificationTracker } from "./verification-gate.js";
7
- import { executeActions } from "./direct-actions.js";
8
- import { compressRoleOutput, measureCompression } from "./role-output-compressor.js";
9
-
10
- /**
11
- * @typedef {Object} BrainContext
12
- * @property {Object} feedbackQueue - structured feedback queue
13
- * @property {VerificationTracker} verificationTracker - tracks coder changes
14
- * @property {Object} compressionStats - token savings per role
15
- * @property {boolean} enabled - whether brain coordination is active
16
- */
17
-
18
- /**
19
- * Create a new brain context for a pipeline session.
20
- */
21
- export function createBrainContext({ enabled = false } = {}) {
22
- return {
23
- feedbackQueue: queue.createQueue(),
24
- verificationTracker: new VerificationTracker(),
25
- compressionStats: { totalSaved: 0, perRole: {} },
26
- extensionCount: 0,
27
- enabled
28
- };
29
- }
30
-
31
- /**
32
- * Check if brain coordination is enabled for this config.
33
- */
34
- export function isBrainEnabled(config) {
35
- return Boolean(config?.brain?.enabled) || Boolean(config?.pipeline?.brain?.enabled);
36
- }
37
-
38
- /**
39
- * After a role completes, push its feedback to the queue and compress.
40
- * Returns the compressed output for passing to next role.
41
- */
42
- export function processRoleOutput(ctx, { roleName, output, iteration }) {
43
- if (!ctx.enabled) return output;
44
-
45
- // Compress for next-role context
46
- const compressed = compressRoleOutput(roleName, output);
47
- const stats = measureCompression(output, compressed);
48
- ctx.compressionStats.totalSaved += stats.savedTokens;
49
- ctx.compressionStats.perRole[roleName] = stats;
50
-
51
- // Extract feedback entries from specific role outputs
52
- const entries = extractFeedbackEntries(roleName, output, iteration);
53
- if (entries.length > 0) {
54
- queue.addEntries(ctx.feedbackQueue, entries);
55
- enrich.enrichQueue(ctx.feedbackQueue);
56
- queue.deduplicate(ctx.feedbackQueue);
57
- queue.prioritize(ctx.feedbackQueue);
58
- }
59
-
60
- return compressed;
61
- }
62
-
63
- /**
64
- * Extract structured feedback entries from a role's output.
65
- */
66
- function extractFeedbackEntries(roleName, output, iteration) {
67
- if (!output || typeof output !== "object") return [];
68
-
69
- const entries = [];
70
- if (roleName === "reviewer" && output.blocking_issues) {
71
- for (const issue of output.blocking_issues) {
72
- entries.push({
73
- source: "reviewer",
74
- severity: issue.severity || "medium",
75
- description: issue.description || "",
76
- file: issue.file || null,
77
- line: issue.line || null,
78
- suggestedFix: issue.suggested_fix || null,
79
- id: issue.id || null,
80
- iteration
81
- });
82
- }
83
- } else if (roleName === "tester" && output.verdict === "fail") {
84
- const missing = output.missing_scenarios || [];
85
- for (const scenario of missing) {
86
- entries.push({
87
- source: "tester",
88
- severity: "high",
89
- category: "tests",
90
- description: `Missing scenario: ${scenario}`,
91
- iteration
92
- });
93
- }
94
- if (output.coverage?.overall != null && output.coverage.overall < 80) {
95
- entries.push({
96
- source: "tester",
97
- severity: "high",
98
- category: "tests",
99
- description: `Coverage below 80% (${output.coverage.overall}%)`,
100
- iteration
101
- });
102
- }
103
- // Catch-all: tester failed but no structured detail → still record the failure
104
- if (entries.length === 0) {
105
- entries.push({
106
- source: "tester",
107
- severity: "high",
108
- category: "tests",
109
- description: output.summary || "Tester failed (no structured detail available)",
110
- iteration
111
- });
112
- }
113
- } else if (roleName === "security" && output.verdict === "fail") {
114
- for (const vuln of output.vulnerabilities || []) {
115
- entries.push({
116
- source: "security",
117
- severity: vuln.severity || "high",
118
- category: "security",
119
- description: vuln.description || "",
120
- file: vuln.file || null,
121
- line: vuln.line || null,
122
- suggestedFix: vuln.fix_suggestion || null,
123
- iteration
124
- });
125
- }
126
- // Catch-all: security failed but no structured vulnerabilities → still record
127
- if (entries.length === 0) {
128
- entries.push({
129
- source: "security",
130
- severity: "high",
131
- category: "security",
132
- description: output.summary || "Security gate failed (no structured detail available)",
133
- iteration
134
- });
135
- }
136
- }
137
- return entries;
138
- }
139
-
140
- /**
141
- * Before coder runs, format the feedback queue as an actionable prompt.
142
- */
143
- export function buildCoderFeedbackPrompt(ctx) {
144
- if (!ctx.enabled || ctx.feedbackQueue.entries.length === 0) return null;
145
- return enrich.formatEnrichedForCoder(ctx.feedbackQueue.entries);
146
- }
147
-
148
- /**
149
- * After coder runs, verify changes were made. Returns verification result.
150
- */
151
- export function verifyCoderRan(ctx, { baseRef, projectDir }) {
152
- if (!ctx.enabled) return { passed: true, filesChanged: 0, reason: "brain disabled" };
153
- const result = verifyCoderOutput({ baseRef, projectDir });
154
- ctx.verificationTracker.record(result);
155
- return result;
156
- }
157
-
158
- /**
159
- * Execute direct actions (npm install, gitignore updates, etc.).
160
- */
161
- export async function runDirectActions(ctx, actions, { cwd } = {}) {
162
- if (!ctx.enabled || !actions?.length) return [];
163
- return executeActions(actions, { cwd });
164
- }
165
-
166
- /**
167
- * Clear feedback queue after coder addresses it.
168
- */
169
- export function clearFeedback(ctx) {
170
- if (!ctx.enabled) return;
171
- queue.clear(ctx.feedbackQueue);
172
- }
173
-
174
- /**
175
- * Get a summary of brain activity for the session.
176
- */
177
- export function summarize(ctx) {
178
- if (!ctx.enabled) return null;
179
- return {
180
- feedbackQueueSize: ctx.feedbackQueue.entries.length,
181
- queueCategories: queue.countByCategory(ctx.feedbackQueue),
182
- consecutiveVerificationFailures: ctx.verificationTracker.consecutiveFailures,
183
- compressionSaved: ctx.compressionStats.totalSaved,
184
- compressionPerRole: ctx.compressionStats.perRole
185
- };
186
- }
@@ -1,139 +0,0 @@
1
- /**
2
- * CI/CD integration — early PR creation, incremental push, review dispatch.
3
- * Extracted from orchestrator.js — self-contained feature, only active when ci.enabled.
4
- */
5
- import { saveSession } from "../session/store.js";
6
- import { setCiEarlyPr, appendCiCommits } from "../session/mutators.js";
7
- import { earlyPrCreation, incrementalPush } from "../git/automation.js";
8
- import { emitProgress, makeEvent } from "../utils/events.js";
9
- import { getIntegration } from "./integrations.js";
10
-
11
- export async function tryCiComment({ config, session, logger: _logger, agent, body }) {
12
- if (!config.ci?.enabled || !session.ci_pr_number) return;
13
- try {
14
- const { dispatchComment } = await import("../ci/dispatch.js");
15
- const { detectRepo } = await import("../ci/repo.js");
16
- const repo = await detectRepo();
17
- if (repo) {
18
- await dispatchComment({
19
- repo, prNumber: session.ci_pr_number, agent,
20
- body, ciConfig: config.ci
21
- });
22
- }
23
- } catch { /* non-blocking */ }
24
- }
25
-
26
- function formatCommitList(commits) {
27
- return commits.map((c) => `- \`${c.hash.slice(0, 7)}\` ${c.message}`).join("\n");
28
- }
29
-
30
- async function ciIncrementalPush({ config, session, gitCtx, task, logger, repo, dispatchComment }) {
31
- const pushResult = await incrementalPush({ gitCtx, task, logger, session });
32
- if (!pushResult) return;
33
-
34
- const tracker = getIntegration("tracker");
35
- for (const c of pushResult.commits) tracker?.onCommit?.(session, c);
36
-
37
- appendCiCommits(session, pushResult.commits);
38
- await saveSession(session);
39
-
40
- if (!repo) return;
41
- const feedback = session.last_reviewer_feedback || "N/A";
42
- await dispatchComment({
43
- repo, prNumber: session.ci_pr_number, agent: "Coder",
44
- body: `Issues fixed:\n${feedback}\n\nCommits:\n${formatCommitList(pushResult.commits)}`,
45
- ciConfig: config.ci
46
- });
47
- }
48
-
49
- async function ciCreateEarlyPr({ config, session, emitter, eventBase, gitCtx, task, logger, stageResults, i, repo, dispatchComment }) {
50
- const earlyPr = await earlyPrCreation({ gitCtx, task, logger, session, stageResults });
51
- if (!earlyPr) return;
52
-
53
- const tracker = getIntegration("tracker");
54
- for (const c of earlyPr.commits) tracker?.onCommit?.(session, c);
55
-
56
- setCiEarlyPr(session, { prNumber: earlyPr.prNumber, prUrl: earlyPr.prUrl, commits: earlyPr.commits });
57
- await saveSession(session);
58
- emitProgress(emitter, makeEvent("ci:pr-created", { ...eventBase, stage: "ci" }, {
59
- message: `Early PR created: #${earlyPr.prNumber}`,
60
- detail: { prNumber: earlyPr.prNumber, prUrl: earlyPr.prUrl }
61
- }));
62
-
63
- if (!repo) return;
64
- await dispatchComment({
65
- repo, prNumber: earlyPr.prNumber, agent: "Coder",
66
- body: `Iteration ${i} completed.\n\nCommits:\n${formatCommitList(earlyPr.commits)}`,
67
- ciConfig: config.ci
68
- });
69
- }
70
-
71
- export async function handleCiEarlyPrOrPush({ ciEnabled, config, session, emitter, eventBase, gitCtx, task, logger, stageResults, i }) {
72
- if (!ciEnabled) return;
73
-
74
- try {
75
- const { dispatchComment } = await import("../ci/dispatch.js");
76
- const { detectRepo } = await import("../ci/repo.js");
77
- const repo = await detectRepo();
78
-
79
- if (session.ci_pr_number) {
80
- await ciIncrementalPush({ config, session, gitCtx, task, logger, repo, dispatchComment });
81
- } else {
82
- await ciCreateEarlyPr({ config, session, emitter, eventBase, gitCtx, task, logger, stageResults, i, repo, dispatchComment });
83
- }
84
- } catch (err) {
85
- logger.warn(`CI early PR/push failed (non-blocking): ${err.message}`);
86
- }
87
- }
88
-
89
- function formatBlockingIssues(issues) {
90
- return issues?.map((x) => `- ${x.id || "ISSUE"} [${x.severity || ""}] ${x.description}`).join("\n") || "";
91
- }
92
-
93
- function formatSuggestions(suggestions) {
94
- return suggestions?.map((s) => {
95
- const detail = typeof s === "string" ? s : `${s.id || ""} ${s.description || s}`;
96
- return `- ${detail}`;
97
- }).join("\n") || "";
98
- }
99
-
100
- function buildReviewCommentBody(review, i) {
101
- const status = review.approved ? "APPROVED" : "REQUEST_CHANGES";
102
- const blocking = formatBlockingIssues(review.blocking_issues);
103
- const suggestions = formatSuggestions(review.non_blocking_suggestions);
104
- let body = `Review iteration ${i}: ${status}`;
105
- if (blocking) body += `\n\n**Blocking:**\n${blocking}`;
106
- if (suggestions) body += `\n\n**Suggestions:**\n${suggestions}`;
107
- return body;
108
- }
109
-
110
- export async function handleCiReviewDispatch({ ciEnabled, config, session, review, i, logger }) {
111
- if (!ciEnabled || !session.ci_pr_number) return;
112
-
113
- try {
114
- const { dispatchReview, dispatchComment } = await import("../ci/dispatch.js");
115
- const { detectRepo } = await import("../ci/repo.js");
116
- const repo = await detectRepo();
117
- if (!repo) return;
118
-
119
- const bc = config.ci;
120
- const reviewEvent = review.approved ? "APPROVE" : "REQUEST_CHANGES";
121
- const reviewBody = review.approved
122
- ? (review.summary || "Approved")
123
- : (formatBlockingIssues(review.blocking_issues) || review.summary || "Changes requested");
124
-
125
- await dispatchReview({
126
- repo, prNumber: session.ci_pr_number,
127
- event: reviewEvent, body: reviewBody, agent: "Reviewer", ciConfig: bc
128
- });
129
-
130
- await dispatchComment({
131
- repo, prNumber: session.ci_pr_number, agent: "Reviewer",
132
- body: buildReviewCommentBody(review, i), ciConfig: bc
133
- });
134
-
135
- logger.info(`CI: dispatched review for PR #${session.ci_pr_number}`);
136
- } catch (err) {
137
- logger.warn(`CI dispatch failed (non-blocking): ${err.message}`);
138
- }
139
- }