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.
- package/README.md +2 -2
- package/package.json +6 -14
- package/packages/hu-board/package.json +1 -1
- package/packages/hu-board/public/app.js +4 -18
- package/packages/hu-board/public/index.html +5 -2
- package/packages/hu-board/public/styles.css +26 -0
- package/packages/hu-board/public/utils/api.js +0 -74
- package/packages/hu-board/public/utils/board-tour.js +62 -0
- package/packages/hu-board/public/utils/board-view.js +49 -144
- package/packages/hu-board/public/utils/command-launcher.js +8 -70
- package/packages/hu-board/public/utils/formatters.js +10 -0
- package/packages/hu-board/public/utils/governance-view.js +13 -1
- package/packages/hu-board/public/utils/hu-actions.js +17 -68
- package/packages/hu-board/public/utils/init-listeners.js +7 -8
- package/packages/hu-board/public/utils/log-panel.js +3 -16
- package/packages/hu-board/public/utils/maggle-mode.js +2 -12
- package/packages/hu-board/public/utils/modals.js +7 -0
- package/packages/hu-board/public/utils/project-picker-view.js +1 -1
- package/packages/hu-board/public/utils/server-push.js +3 -22
- package/packages/hu-board/public/utils/shared-board-notice.js +33 -0
- package/packages/hu-board/public/utils/story-detail-view.js +5 -19
- package/packages/hu-board/src/cleanup-zombies.js +0 -1
- package/packages/hu-board/src/command-runner.js +36 -25
- package/packages/hu-board/src/db-connection.js +282 -0
- package/packages/hu-board/src/db-paths.js +113 -0
- package/packages/hu-board/src/db-queries.js +188 -0
- package/packages/hu-board/src/db-tombstones.js +51 -0
- package/packages/hu-board/src/db.js +28 -619
- package/packages/hu-board/src/ephemeral-cleaner.js +2 -3
- package/packages/hu-board/src/hu-zombie-reaper.js +5 -1
- package/packages/hu-board/src/plan-mutations.js +3 -153
- package/packages/hu-board/src/plans-service.js +55 -0
- package/packages/hu-board/src/routes/api/commands.js +122 -0
- package/packages/hu-board/src/routes/api/plans.js +55 -0
- package/packages/hu-board/src/routes/api/projects.js +267 -0
- package/packages/hu-board/src/routes/api/prompts.js +135 -0
- package/packages/hu-board/src/routes/api/sessions.js +95 -0
- package/packages/hu-board/src/routes/api/stories.js +183 -0
- package/packages/hu-board/src/routes/api/system.js +241 -0
- package/packages/hu-board/src/routes/api/tombstones.js +38 -0
- package/packages/hu-board/src/routes/api.js +24 -1371
- package/packages/hu-board/src/routes/governance.js +23 -1
- package/packages/hu-board/src/routes/lanes.js +40 -0
- package/packages/hu-board/src/routes/rag.js +4 -3
- package/packages/hu-board/src/server.js +20 -34
- package/packages/hu-board/src/sync-files.js +318 -0
- package/packages/hu-board/src/sync-project.js +99 -0
- package/packages/hu-board/src/sync.js +22 -566
- package/packages/hu-board/src/zombie-reaper.js +1 -1
- package/scripts/dual-publish.mjs +19 -3
- package/scripts/postinstall.js +15 -2
- package/scripts/verify-pack-mcp.mjs +11 -7
- package/scripts/verify-pack.mjs +4 -4
- package/src/audit/audit-history.js +3 -2
- package/src/audit/dead-exports.js +68 -59
- package/src/audit/deterministic-summary.js +33 -13
- package/src/audit/npm-signatures.js +41 -0
- package/src/audit/sbom.js +35 -0
- package/src/checks/agent-token.js +112 -0
- package/src/checks/ai-surface.js +9 -7
- package/src/checks/config-files.js +8 -7
- package/src/checks/dir-setup.js +34 -1
- package/src/checks/native-build.js +21 -39
- package/src/checks/runner.js +128 -142
- package/src/cli/advanced-commands.js +6 -6
- package/src/cli/register-meta.js +42 -82
- package/src/cli/register-pipeline.js +8 -140
- package/src/cli/register-plan.js +9 -100
- package/src/cli/retired-commands.js +49 -0
- package/src/cli.js +18 -5
- package/src/commands/agent-run.js +40 -26
- package/src/commands/audit.js +127 -124
- package/src/commands/board.js +5 -9
- package/src/commands/check.js +29 -16
- package/src/commands/doctor.js +2 -0
- package/src/commands/env.js +176 -148
- package/src/commands/go.js +76 -55
- package/src/commands/harden.js +105 -86
- package/src/commands/hu-start.js +52 -0
- package/src/commands/hu.js +288 -221
- package/src/commands/identity.js +111 -78
- package/src/commands/init-atril.js +47 -0
- package/src/commands/init.js +11 -40
- package/src/commands/install-tools.js +70 -85
- package/src/commands/main-guard.js +78 -0
- package/src/commands/policy.js +226 -184
- package/src/commands/qmd.js +27 -21
- package/src/commands/rag.js +75 -48
- package/src/commands/review-gate.js +422 -339
- package/src/commands/start.js +4 -5
- package/src/commands/steward.js +96 -47
- package/src/commands/tournament.js +46 -37
- package/src/commands/worktree.js +94 -25
- package/src/config/loader.js +34 -17
- package/src/config/overrides.js +2 -1
- package/src/config/secrets.js +36 -0
- package/src/config.js +1 -0
- package/src/environment/adr.js +16 -2
- package/src/environment/board-access.js +11 -9
- package/src/git/karajan-label.js +20 -8
- package/src/guards/main-guard.js +54 -0
- package/src/harden/branch-protection.js +36 -3
- package/src/harden/hook-templates.js +16 -1
- package/src/harden/sentinel/posttooluse.mjs +18 -6
- package/src/harden/sentinel/pretooluse-sentinel.mjs +81 -35
- package/src/harden/sentinel/sentinel-lib.mjs +149 -23
- package/src/harden/sentinel/sentinel-shell.mjs +64 -0
- package/src/harden/sentinel/sessionstart.mjs +3 -2
- package/src/harden/sentinel/stop.mjs +5 -4
- package/src/harden/workflow-engine.js +12 -1
- package/src/harden/workflow-templates.js +1 -1
- package/src/hu/board-lookup.js +29 -0
- package/src/hu/gh-identity.js +23 -0
- package/src/hu/github-board.js +4 -2
- package/src/hu/lane-prune.js +15 -7
- package/src/hu/lane-setup.js +65 -0
- package/src/hu/lanes.js +66 -0
- package/src/hu/team-board-mirror.js +3 -2
- package/src/infrastructure/command-runner.js +1 -1
- package/src/infrastructure/file-system-service.js +1 -1
- package/src/mcp/handlers/direct-handlers.js +2 -292
- package/src/mcp/handlers/hu-handlers.js +44 -55
- package/src/mcp/handlers/management-handlers.js +2 -42
- package/src/mcp/server-handlers.js +16 -22
- package/src/mcp/tools.js +5 -200
- package/src/plan/lane-plans.js +54 -0
- package/src/plan/plan-store.js +7 -4
- package/src/policy/add.js +26 -12
- package/src/policy/adr-number-check.js +31 -0
- package/src/prompts/audit.js +299 -339
- package/src/prompts/card-context.js +10 -5
- package/src/prompts/reviewer.js +5 -2
- package/src/rag/auto-update.js +56 -43
- package/src/rag/bootstrap-index.js +28 -54
- package/src/rag/migrate.js +1 -1
- package/src/rag/onnx-fallback.js +2 -2
- package/src/rag/pid-lease.js +70 -0
- package/src/rag/project-store.js +2 -12
- package/src/review/card-first.js +57 -46
- package/src/review/dual-review.js +5 -4
- package/src/review/gate-gitignore.js +23 -4
- package/src/review/gate-hook.js +47 -0
- package/src/review/one-shot-review.js +51 -37
- package/src/review/publish-pr.js +18 -3
- package/src/review/repo-docs.js +73 -0
- package/src/review/repo-stack.js +59 -0
- package/src/review/reviewer-fallback.js +34 -3
- package/src/review/seal-commit.js +29 -0
- package/src/review/sonar-pregate.js +59 -44
- package/src/review/third-party-review.js +90 -16
- package/src/review/third-party-size.js +43 -0
- package/src/review/third-party-skills.js +54 -0
- package/src/review/verify-pr.js +2 -26
- package/src/roles/audit-role.js +106 -125
- package/src/skills/atril-skills.js +5 -4
- package/src/sonar/scanner.js +116 -101
- package/src/steward/invariants.js +5 -4
- package/src/steward/phantom-sweep.js +66 -0
- package/src/tournament/judge.js +60 -53
- package/src/utils/agent-home.js +33 -0
- package/src/utils/gh-account.js +37 -0
- package/src/utils/git.js +0 -13
- package/src/utils/home-migration.js +7 -1
- package/src/utils/main-checkout.js +53 -0
- package/src/utils/qmd-collection.js +3 -1
- package/src/utils/welcome.js +3 -3
- package/templates/{skills → atril/commands}/kj-architect.md +5 -0
- package/templates/{skills → atril/commands}/kj-audit.md +5 -0
- package/templates/{skills → atril/commands}/kj-board.md +5 -0
- package/templates/{skills → atril/commands}/kj-code.md +5 -0
- package/templates/{skills → atril/commands}/kj-csv-transform.md +5 -0
- package/templates/{skills → atril/commands}/kj-data-report.md +5 -0
- package/templates/{skills → atril/commands}/kj-discover.md +5 -0
- package/templates/{skills → atril/commands}/kj-rag-query.md +5 -0
- package/templates/{skills → atril/commands}/kj-review.md +5 -0
- package/templates/{skills → atril/commands}/kj-security.md +5 -0
- package/templates/{skills → atril/commands}/kj-sonar.md +5 -0
- package/templates/{skills → atril/commands}/kj-sql-analysis.md +5 -0
- package/templates/{skills → atril/commands}/kj-test.md +5 -0
- package/packages/hu-board/public/utils/run-launcher.js +0 -169
- package/packages/hu-board/src/run-tracker.js +0 -121
- package/src/activity-log.js +0 -59
- package/src/agents/host-agent.js +0 -38
- package/src/agents/model-registry.js +0 -142
- package/src/audit/plan-adherence.js +0 -224
- package/src/autonomy/arbiter-role.js +0 -71
- package/src/autonomy/arbiter.js +0 -22
- package/src/autonomy/decider.js +0 -18
- package/src/autonomy/decision-resolver.js +0 -58
- package/src/autonomy/outcome-report.js +0 -55
- package/src/autonomy/stage-ask.js +0 -30
- package/src/brain/decision-tracker.js +0 -125
- package/src/brain/decisor.js +0 -243
- package/src/brain/solomon-consult.js +0 -171
- package/src/brain/standby-scheduler.js +0 -8
- package/src/budget/comparison.js +0 -96
- package/src/canvas/parse-md.js +0 -238
- package/src/canvas/schema.js +0 -101
- package/src/canvas/to-flat.js +0 -85
- package/src/canvas/validate.js +0 -163
- package/src/ci/dispatch.js +0 -99
- package/src/ci/index.js +0 -3
- package/src/ci/pr-diff.js +0 -26
- package/src/cli/register-standby.js +0 -26
- package/src/commands/architect.js +0 -111
- package/src/commands/autorun.js +0 -49
- package/src/commands/researcher.js +0 -54
- package/src/commands/resume.js +0 -72
- package/src/commands/review.js +0 -89
- package/src/commands/run.js +0 -185
- package/src/commands/standby.js +0 -117
- package/src/commands/status.js +0 -36
- package/src/commands/triage.js +0 -78
- package/src/commands/undo.js +0 -62
- package/src/domains/domain-loader.js +0 -245
- package/src/domains/domain-registry.js +0 -140
- package/src/domains/domain-synthesizer.js +0 -129
- package/src/git/automation.js +0 -433
- package/src/git/coder-commit-guard.js +0 -40
- package/src/git/hu-automation.js +0 -243
- package/src/git/hu-snapshot.js +0 -10
- package/src/git/symlink-targets.js +0 -57
- package/src/golden/asserter.js +0 -92
- package/src/golden/loader.js +0 -52
- package/src/golden/runner.js +0 -92
- package/src/golden/schema.js +0 -41
- package/src/guards/duplicate-members.js +0 -86
- package/src/guards/intent-guard.js +0 -161
- package/src/guards/perf-guard.js +0 -126
- package/src/guards/policy-guard.js +0 -90
- package/src/guards/policy-resolver.js +0 -85
- package/src/guards/secret-redactor.js +0 -71
- package/src/hu/acceptance-runner.js +0 -138
- package/src/hu/lazy-planner.js +0 -109
- package/src/hu/parallel-executor.js +0 -94
- package/src/hu/routing-metrics.js +0 -17
- package/src/hu/split-validator.js +0 -143
- package/src/hu/splitting-detector.js +0 -158
- package/src/hu/splitting-generator.js +0 -175
- package/src/hu/store.js +0 -394
- package/src/infrastructure/mocks.js +0 -182
- package/src/mcp/handlers/run-handler.js +0 -318
- package/src/mcp/sovereignty-guard.js +0 -113
- package/src/mcp/tool-arg-normalizers.js +0 -16
- package/src/mutate/reviewer-signal.js +0 -76
- package/src/orchestrator/agent-fallback.js +0 -81
- package/src/orchestrator/brain-coordinator.js +0 -186
- package/src/orchestrator/ci-integration.js +0 -139
- package/src/orchestrator/config-init.js +0 -426
- package/src/orchestrator/direct-actions.js +0 -217
- package/src/orchestrator/drivers/error-recovery.js +0 -287
- package/src/orchestrator/drivers/init-context.js +0 -238
- package/src/orchestrator/drivers/iteration-loop.js +0 -382
- package/src/orchestrator/drivers/iteration-phases/coder-and-refactorer.js +0 -69
- package/src/orchestrator/drivers/iteration-phases/guards.js +0 -91
- package/src/orchestrator/drivers/iteration-phases/handle-approved.js +0 -29
- package/src/orchestrator/drivers/iteration-phases/quality-gates.js +0 -125
- package/src/orchestrator/drivers/iteration-phases/reviewer-gate.js +0 -62
- package/src/orchestrator/drivers/post-loop.js +0 -404
- package/src/orchestrator/drivers/pre-loop-phases/auto-hu-batch.js +0 -137
- package/src/orchestrator/drivers/pre-loop-phases/config-deprecations.js +0 -47
- package/src/orchestrator/drivers/pre-loop-phases/ensure-addyosmani-skills.js +0 -84
- package/src/orchestrator/drivers/pre-loop-phases/inject-loaded-plan.js +0 -393
- package/src/orchestrator/drivers/pre-loop.js +0 -524
- package/src/orchestrator/drivers/run-hu-batch.js +0 -468
- package/src/orchestrator/feedback-enrichment.js +0 -140
- package/src/orchestrator/feedback-queue.js +0 -151
- package/src/orchestrator/flow-control.js +0 -170
- package/src/orchestrator/flow-runner.js +0 -365
- package/src/orchestrator/fs-leak-detector.js +0 -228
- package/src/orchestrator/hu-scheduler.js +0 -114
- package/src/orchestrator/hu-sub-pipeline.js +0 -642
- package/src/orchestrator/iteration-gate.js +0 -73
- package/src/orchestrator/iteration-stages.js +0 -9
- package/src/orchestrator/parallel-limiter.js +0 -74
- package/src/orchestrator/pipeline-context.js +0 -72
- package/src/orchestrator/post-loop-stages.js +0 -468
- package/src/orchestrator/pre-loop-stages.js +0 -11
- package/src/orchestrator/preflight-checks.js +0 -487
- package/src/orchestrator/repair/repair-detector.js +0 -117
- package/src/orchestrator/repair/repair-runner.js +0 -142
- package/src/orchestrator/reviewer-fallback.js +0 -45
- package/src/orchestrator/role-output-compressor.js +0 -189
- package/src/orchestrator/session-journal.js +0 -308
- package/src/orchestrator/solomon-escalation.js +0 -331
- package/src/orchestrator/solomon-rules.js +0 -212
- package/src/orchestrator/stages/acceptance-coverage-stage.js +0 -47
- package/src/orchestrator/stages/architect-stage.js +0 -172
- package/src/orchestrator/stages/coder-stage.js +0 -506
- package/src/orchestrator/stages/domain-curator-stage.js +0 -82
- package/src/orchestrator/stages/format-stage.js +0 -61
- package/src/orchestrator/stages/hu-reviewer-phases/detect-and-apply-splits.js +0 -127
- package/src/orchestrator/stages/hu-reviewer-stage.js +0 -419
- package/src/orchestrator/stages/perf-stage.js +0 -140
- package/src/orchestrator/stages/planner-stage.js +0 -85
- package/src/orchestrator/stages/rag-context-stage.js +0 -80
- package/src/orchestrator/stages/rag-preload-decisor.js +0 -58
- package/src/orchestrator/stages/research-stage.js +0 -69
- package/src/orchestrator/stages/reviewer-stage.js +0 -431
- package/src/orchestrator/stages/sonar-stage.js +0 -439
- package/src/orchestrator/stages/stage-classes.js +0 -84
- package/src/orchestrator/stages/stage-executor.js +0 -155
- package/src/orchestrator/stages/suite-green-stage.js +0 -62
- package/src/orchestrator/stages/tdd-discipline-stage.js +0 -56
- package/src/orchestrator/stages/tool-judge-stage.js +0 -53
- package/src/orchestrator/stages/triage-stage.js +0 -172
- package/src/orchestrator/standby.js +0 -71
- package/src/orchestrator/verification-gate.js +0 -183
- package/src/orchestrator.js +0 -22
- package/src/plan/adr-generator.js +0 -170
- package/src/plan/adr-loader.js +0 -60
- package/src/plan/plan-executor.js +0 -100
- package/src/plan/plan-validation.js +0 -4
- package/src/prompts/acceptance-coverage.js +0 -32
- package/src/prompts/arbiter.js +0 -38
- package/src/prompts/architect.js +0 -103
- package/src/prompts/hu-reviewer.js +0 -244
- package/src/prompts/tool-correctness-judge.js +0 -31
- package/src/prompts/triage.js +0 -57
- package/src/rag/embedder.js +0 -2
- package/src/rag/embedders/_cloud-base.js +0 -2
- package/src/rag/embedders/cohere.js +0 -2
- package/src/rag/embedders/mistral.js +0 -2
- package/src/rag/embedders/onnx.js +0 -2
- package/src/rag/embedders/openai.js +0 -2
- package/src/rag/embedders/voyage.js +0 -2
- package/src/rag/rerank.js +0 -4
- package/src/rag/where-parser.js +0 -4
- package/src/repeat-detector.js +0 -88
- package/src/review/diff-generator.js +0 -112
- package/src/review/git-stash-helper.js +0 -104
- package/src/review/schema.js +0 -31
- package/src/review/scope-filter.js +0 -152
- package/src/review/snapshot-diff.js +0 -122
- package/src/review/tdd-discipline.js +0 -90
- package/src/review/tdd-policy.js +0 -69
- package/src/roles/acceptance-coverage-role.js +0 -78
- package/src/roles/architect-role.js +0 -77
- package/src/roles/coder-role.js +0 -113
- package/src/roles/commiter-role.js +0 -113
- package/src/roles/domain-curator-role.js +0 -134
- package/src/roles/hu-reviewer-role.js +0 -64
- package/src/roles/impeccable-role.js +0 -85
- package/src/roles/index.js +0 -18
- package/src/roles/karajan-brain-role.js +0 -134
- package/src/roles/perf-role.js +0 -122
- package/src/roles/planner-role.js +0 -151
- package/src/roles/refactorer-role.js +0 -30
- package/src/roles/repairer-role.js +0 -181
- package/src/roles/researcher-role.js +0 -70
- package/src/roles/reviewer-role.js +0 -115
- package/src/roles/security-role.js +0 -73
- package/src/roles/solomon-role.js +0 -271
- package/src/roles/sonar-role.js +0 -72
- package/src/roles/tester-role.js +0 -235
- package/src/roles/tool-correctness-judge-role.js +0 -78
- package/src/roles/triage-role.js +0 -99
- package/src/session/journal/decisions-writer.js +0 -200
- package/src/session/journal/iteration-logger.js +0 -194
- package/src/session/journal/summary-writer.js +0 -320
- package/src/session/journal/tree-writer.js +0 -164
- package/src/session/journal/write-all.js +0 -89
- package/src/session-cleanup.js +0 -116
- package/src/skills/semantic-detector.js +0 -167
- package/src/skills/skill-detector.js +0 -385
- package/src/sonar/cloud-scanner.js +0 -78
- package/src/tracker-bootstrap.js +0 -44
- package/src/types/index.js +0 -38
- package/src/types/policy.js +0 -43
- package/src/types/solomon.js +0 -87
- package/src/utils/async-lock.js +0 -31
- package/src/utils/budget.js +0 -229
- package/src/utils/cwd-confirm.js +0 -39
- package/src/utils/display/event-handlers.js +0 -403
- package/src/utils/display/formatters.js +0 -132
- package/src/utils/display/header.js +0 -47
- package/src/utils/display/session-summary.js +0 -118
- package/src/utils/display/solomon.js +0 -42
- package/src/utils/pricing.js +0 -29
- package/src/utils/quota-simulator.js +0 -56
- package/src/utils/role-assigner.js +0 -137
- package/src/utils/rtk-wrapper.js +0 -87
- package/src/utils/run-registry.js +0 -9
- package/src/utils/status-dashboard.js +0 -254
- package/src/utils/tool-call-extractor.js +0 -56
- package/src/webperf/devtools-detect.js +0 -112
- package/src/webperf/webperf-role-integration.js +0 -66
- package/templates/skills/kj-run.md +0 -73
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* iteration-gate — opt-in per-iteration supervision (KJC-TSK-0628, épica
|
|
3
|
-
* KJC-PCS-0062). With `--step` (or session.iteration_gate in config) the
|
|
4
|
-
* pipeline pauses after EVERY iteration with a compact report — what
|
|
5
|
-
* happened, what the next iteration will do, spend vs cap — and asks the
|
|
6
|
-
* user: continue, stop, or continue WITH instructions. Free-text answers
|
|
7
|
-
* are appended to the reviewer feedback the coder reads next iteration
|
|
8
|
-
* (same channel Solomon's human guidance uses), never overwriting the
|
|
9
|
-
* reviewer's own must-fix list.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
import { markSessionStatus } from "../session/store.js";
|
|
13
|
-
import { setReviewerFeedback } from "../session/mutators.js";
|
|
14
|
-
|
|
15
|
-
const STOP_ANSWERS = new Set(["stop", "parar", "para", "no", "n", "4"]);
|
|
16
|
-
const CONTINUE_ANSWERS = new Set(["", "s", "si", "sí", "y", "yes", "1", "continue", "continuar"]);
|
|
17
|
-
|
|
18
|
-
/** Compact human report of the iteration that just finished. */
|
|
19
|
-
export function buildIterationReport({ i, maxIterations, stageResults = {}, budgetTracker, maxBudgetUsd, reviewVerdict }) {
|
|
20
|
-
const lines = [`Iteration ${i}/${maxIterations} finished.`];
|
|
21
|
-
const stages = Object.keys(stageResults);
|
|
22
|
-
if (stages.length > 0) lines.push(`Stages so far: ${stages.join(", ")}`);
|
|
23
|
-
|
|
24
|
-
const review = reviewVerdict ?? stageResults.reviewer ?? null;
|
|
25
|
-
const mustFix = review?.must_fix ?? review?.issues ?? [];
|
|
26
|
-
if (review?.approved === true) {
|
|
27
|
-
lines.push("Reviewer: APPROVED");
|
|
28
|
-
} else if (mustFix.length > 0) {
|
|
29
|
-
const shown = mustFix.slice(0, 3).map((f) => ` • ${typeof f === "string" ? f : f.title || f.description || JSON.stringify(f)}`);
|
|
30
|
-
lines.push(`Reviewer: rejected with ${mustFix.length} must-fix:`, ...shown);
|
|
31
|
-
if (mustFix.length > 3) lines.push(` … and ${mustFix.length - 3} more`);
|
|
32
|
-
lines.push(`Next iteration: the coder tackles those ${mustFix.length} must-fix.`);
|
|
33
|
-
} else {
|
|
34
|
-
lines.push("Next iteration: the coder retries against the pending feedback.");
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const spent = budgetTracker?.total?.().cost_usd ?? 0;
|
|
38
|
-
const cap = maxBudgetUsd != null ? ` / cap $${Number(maxBudgetUsd).toFixed(2)}` : "";
|
|
39
|
-
lines.push(`Spend: $${spent.toFixed(2)}${cap}`);
|
|
40
|
-
return lines.join("\n");
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Append a user directive without clobbering the reviewer's feedback. */
|
|
44
|
-
export function appendUserDirective(session, text) {
|
|
45
|
-
const existing = session.last_reviewer_feedback || "";
|
|
46
|
-
const block = `## User directive (iteration gate)\n${text}`;
|
|
47
|
-
setReviewerFeedback(session, existing ? `${existing}\n\n${block}` : block);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Ask the user at the gate. Returns { action: "continue" | "stop",
|
|
52
|
-
* injected?: string }. Disabled gate, missing askQuestion (nobody to ask)
|
|
53
|
-
* or unattended autonomous runs pass straight through.
|
|
54
|
-
*/
|
|
55
|
-
export async function handleIterationGate({ enabled, askQuestion, session, logger, report }) {
|
|
56
|
-
if (!enabled || !askQuestion || askQuestion.unattended === true) return { action: "continue" };
|
|
57
|
-
|
|
58
|
-
const answer = await askQuestion(
|
|
59
|
-
`${report}\n\nContinue? [Enter = yes | "stop" = stop | anything else = instructions for the next iteration]`,
|
|
60
|
-
);
|
|
61
|
-
const trimmed = (answer || "").trim();
|
|
62
|
-
const lower = trimmed.toLowerCase();
|
|
63
|
-
|
|
64
|
-
if (STOP_ANSWERS.has(lower)) {
|
|
65
|
-
await markSessionStatus(session, "stopped");
|
|
66
|
-
return { action: "stop" };
|
|
67
|
-
}
|
|
68
|
-
if (CONTINUE_ANSWERS.has(lower)) return { action: "continue" };
|
|
69
|
-
|
|
70
|
-
appendUserDirective(session, trimmed);
|
|
71
|
-
logger?.info?.("Iteration gate: user directive injected for the next iteration.");
|
|
72
|
-
return { action: "continue", injected: trimmed };
|
|
73
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Iteration stage functions.
|
|
3
|
-
* Implementations have been extracted into ./stages/ sub-modules.
|
|
4
|
-
* This file re-exports everything for backward compatibility.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export { runCoderStage, runRefactorerStage, runTddCheckStage } from "./stages/coder-stage.js";
|
|
8
|
-
export { runSonarStage, runSonarCloudStage } from "./stages/sonar-stage.js";
|
|
9
|
-
export { runReviewerStage, fetchReviewDiff } from "./stages/reviewer-stage.js";
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* parallel-limiter — shared concurrency coordinator for parallel HU
|
|
3
|
-
* execution (KJC-TSK-0624, épica KJC-PCS-0065). One instance per plan run,
|
|
4
|
-
* shared by every HU lane:
|
|
5
|
-
*
|
|
6
|
-
* - Semaphore: at most maxParallel HUs hold a slot (acquire/release).
|
|
7
|
-
* - Plan budget: the whole run shares ONE BudgetTracker; the launch gate
|
|
8
|
-
* refuses new lanes once aggregated spend reaches the plan ceiling
|
|
9
|
-
* (maxParallel × max_budget_usd — parallelism scales the cap, it never
|
|
10
|
-
* multiplies it silently).
|
|
11
|
-
* - Cooldown: when any lane hits a provider rate limit it calls
|
|
12
|
-
* notifyCooldown(ms); NEW launches pause until it expires while lanes
|
|
13
|
-
* already flying finish their work — parallel retry stampedes are the
|
|
14
|
-
* fastest way to burn a quota.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
export function createParallelLimiter({ maxParallel = 1, budgetTracker = null, planBudgetUsd = null, now = Date.now } = {}) {
|
|
18
|
-
let inUse = 0;
|
|
19
|
-
let cooldownUntil = 0;
|
|
20
|
-
const waiters = [];
|
|
21
|
-
|
|
22
|
-
const overPlanBudget = () => {
|
|
23
|
-
if (planBudgetUsd == null || !budgetTracker) return false;
|
|
24
|
-
return (budgetTracker.total?.().cost_usd ?? 0) >= Number(planBudgetUsd);
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
const grantNext = () => {
|
|
28
|
-
while (waiters.length > 0 && inUse < maxParallel) {
|
|
29
|
-
inUse += 1;
|
|
30
|
-
waiters.shift()();
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
return {
|
|
35
|
-
/** Why a new lane may not launch right now; null = clear to go. */
|
|
36
|
-
launchBlockReason() {
|
|
37
|
-
if (overPlanBudget()) {
|
|
38
|
-
return `plan budget exhausted ($${(budgetTracker.total().cost_usd).toFixed(2)} ≥ $${Number(planBudgetUsd).toFixed(2)})`;
|
|
39
|
-
}
|
|
40
|
-
const waitMs = cooldownUntil - now();
|
|
41
|
-
if (waitMs > 0) return `provider cooldown for ${Math.ceil(waitMs / 1000)}s`;
|
|
42
|
-
return null;
|
|
43
|
-
},
|
|
44
|
-
|
|
45
|
-
/** Wait for a free slot. Resolves when this lane may run. */
|
|
46
|
-
acquire() {
|
|
47
|
-
if (inUse < maxParallel) {
|
|
48
|
-
inUse += 1;
|
|
49
|
-
return Promise.resolve();
|
|
50
|
-
}
|
|
51
|
-
return new Promise((resolve) => waiters.push(resolve));
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
release() {
|
|
55
|
-
inUse = Math.max(0, inUse - 1);
|
|
56
|
-
grantNext();
|
|
57
|
-
},
|
|
58
|
-
|
|
59
|
-
/** A lane hit a rate limit: pause NEW launches until it expires. */
|
|
60
|
-
notifyCooldown(ms) {
|
|
61
|
-
cooldownUntil = Math.max(cooldownUntil, now() + Math.max(0, ms));
|
|
62
|
-
},
|
|
63
|
-
|
|
64
|
-
stats() {
|
|
65
|
-
return { inUse, waiting: waiters.length, maxParallel, cooldownUntil };
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/** Plan-level ceiling: parallelism scales the per-run cap, explicitly. */
|
|
71
|
-
export function planBudgetUsd({ maxBudgetUsd, maxParallel = 1 }) {
|
|
72
|
-
if (maxBudgetUsd == null) return null;
|
|
73
|
-
return Number(maxBudgetUsd) * Math.max(1, maxParallel);
|
|
74
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared context object for pipeline execution.
|
|
3
|
-
* Replaces destructured parameter objects across orchestrator functions.
|
|
4
|
-
*
|
|
5
|
-
* @typedef {import("../types/config.js").KarajanConfig} KarajanConfig
|
|
6
|
-
* @typedef {import("../types/session.js").Session} Session
|
|
7
|
-
* @typedef {import("../types/stage.js").Logger} Logger
|
|
8
|
-
* @typedef {import("../types/stage.js").Emitter} Emitter
|
|
9
|
-
* @typedef {import("../types/stage.js").EventBase} EventBase
|
|
10
|
-
* @typedef {import("../types/config.js").PipelineFlags} PipelineFlags
|
|
11
|
-
* @typedef {import("../types/stage.js").StageContext} StageContext
|
|
12
|
-
*/
|
|
13
|
-
export class PipelineContext {
|
|
14
|
-
/**
|
|
15
|
-
* @param {Object} args
|
|
16
|
-
* @param {KarajanConfig} args.config
|
|
17
|
-
* @param {Session} args.session
|
|
18
|
-
* @param {Logger} args.logger
|
|
19
|
-
* @param {Emitter|null} args.emitter
|
|
20
|
-
* @param {string} args.task
|
|
21
|
-
* @param {Object} [args.flags]
|
|
22
|
-
*/
|
|
23
|
-
constructor({ config, session, logger, emitter, task, flags = {} }) {
|
|
24
|
-
this.config = config;
|
|
25
|
-
this.session = session;
|
|
26
|
-
this.logger = logger;
|
|
27
|
-
this.emitter = emitter;
|
|
28
|
-
this.task = task;
|
|
29
|
-
this.flags = flags;
|
|
30
|
-
|
|
31
|
-
// Pipeline state (set during execution)
|
|
32
|
-
this.eventBase = {};
|
|
33
|
-
this.pipelineFlags = {};
|
|
34
|
-
this.trackBudget = null;
|
|
35
|
-
this.budgetTracker = null;
|
|
36
|
-
this.budgetLimit = null;
|
|
37
|
-
this.budgetSummary = null;
|
|
38
|
-
this.askQuestion = null;
|
|
39
|
-
this.reviewRules = null;
|
|
40
|
-
this.repeatDetector = null;
|
|
41
|
-
this.sonarState = { issuesInitial: null, issuesFinal: null };
|
|
42
|
-
this.stageResults = {};
|
|
43
|
-
this.gitCtx = {};
|
|
44
|
-
this.iteration = 0;
|
|
45
|
-
|
|
46
|
-
// Roles (initialized during setup)
|
|
47
|
-
this.coderRole = null;
|
|
48
|
-
this.reviewerRole = null;
|
|
49
|
-
this.refactorerRole = null;
|
|
50
|
-
this.coderRoleInstance = null;
|
|
51
|
-
|
|
52
|
-
// Planning Game context
|
|
53
|
-
this.pgTaskId = null;
|
|
54
|
-
this.pgProject = null;
|
|
55
|
-
this.pgCard = null;
|
|
56
|
-
|
|
57
|
-
// Product context (loaded from .karajan/context.md or product-vision.md)
|
|
58
|
-
this.productContext = null;
|
|
59
|
-
|
|
60
|
-
// Domain context (synthesized by Domain Curator from ~/.karajan/domains/ and .karajan/domains/)
|
|
61
|
-
this.domainContext = null;
|
|
62
|
-
|
|
63
|
-
// Planned task (may differ from original task after planner)
|
|
64
|
-
this.plannedTask = null;
|
|
65
|
-
|
|
66
|
-
// Karajan Brain runtime context (feedback queue, verification tracker, compression stats)
|
|
67
|
-
this.brainCtx = null;
|
|
68
|
-
|
|
69
|
-
// Timing
|
|
70
|
-
this.startedAt = null;
|
|
71
|
-
}
|
|
72
|
-
}
|