karajan-code 1.58.2 → 1.59.1
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/package.json +1 -1
- package/src/agents/aider-agent.js +7 -0
- package/src/agents/claude-agent.js +36 -2
- package/src/agents/codex-agent.js +4 -0
- package/src/agents/gemini-agent.js +4 -0
- package/src/agents/opencode-agent.js +4 -0
- package/src/bootstrap.js +20 -9
- package/src/cli.js +1 -0
- package/src/commands/doctor.js +19 -0
- package/src/commands/report.js +13 -0
- package/src/commands/status.js +7 -0
- package/src/config.js +35 -0
- package/src/domains/domain-loader.js +85 -4
- package/src/git/automation.js +32 -4
- package/src/guards/policy-guard.js +90 -0
- package/src/mcp/handlers/run-handler.js +20 -3
- package/src/mcp/shared-helpers.js +4 -2
- package/src/mcp/sovereignty-guard.js +1 -1
- package/src/mcp/tools.js +2 -1
- package/src/orchestrator.js +77 -20
- package/src/prompts/coder.js +5 -4
- package/src/prompts/reviewer.js +5 -4
- package/src/prompts/rtk-snippet.js +12 -0
- package/src/proxy/adapters/anthropic.js +131 -0
- package/src/proxy/adapters/gemini.js +106 -0
- package/src/proxy/adapters/index.js +51 -0
- package/src/proxy/adapters/openai.js +71 -0
- package/src/proxy/compression/ai-compressor.js +209 -0
- package/src/proxy/compression/dedup-cache.js +100 -0
- package/src/proxy/compression/deterministic/bash-build.js +60 -0
- package/src/proxy/compression/deterministic/bash-git.js +101 -0
- package/src/proxy/compression/deterministic/bash-infra.js +64 -0
- package/src/proxy/compression/deterministic/bash-misc.js +53 -0
- package/src/proxy/compression/deterministic/bash-pkg.js +49 -0
- package/src/proxy/compression/deterministic/bash-test.js +61 -0
- package/src/proxy/compression/deterministic/glob.js +26 -0
- package/src/proxy/compression/deterministic/grep.js +53 -0
- package/src/proxy/compression/deterministic/index.js +58 -0
- package/src/proxy/compression/deterministic/read.js +22 -0
- package/src/proxy/compression/deterministic/utils.js +33 -0
- package/src/proxy/compression/pipeline.js +270 -0
- package/src/proxy/middleware/prompt-injector.js +165 -0
- package/src/proxy/middleware/response-interceptor.js +223 -0
- package/src/proxy/progress-monitor.js +98 -0
- package/src/proxy/proxy-lifecycle.js +201 -0
- package/src/proxy/proxy-server.js +239 -0
- package/src/proxy/security.js +45 -0
- package/src/review/diff-generator.js +10 -8
- package/src/roles/coder-role.js +1 -0
- package/src/roles/impeccable-role.js +2 -4
- package/src/roles/researcher-role.js +2 -4
- package/src/roles/reviewer-role.js +10 -8
- package/src/roles/solomon-role.js +2 -4
- package/src/session-cleanup.js +39 -15
- package/src/sonar/cloud-scanner.js +6 -3
- package/src/sonar/scanner.js +12 -7
- package/src/utils/banner.js +66 -0
- package/src/utils/display.js +46 -7
- package/src/utils/git.js +5 -0
- package/src/utils/welcome.js +3 -8
package/src/utils/display.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { printBanner } from "./banner.js";
|
|
4
5
|
|
|
5
6
|
// TODO: i18n display messages
|
|
6
7
|
const DISPLAY_PKG_PATH = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "../../package.json");
|
|
@@ -83,9 +84,7 @@ const BAR = `${ANSI.dim}\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u
|
|
|
83
84
|
|
|
84
85
|
export function printHeader({ task, config }) {
|
|
85
86
|
const version = DISPLAY_VERSION;
|
|
86
|
-
|
|
87
|
-
console.log(`${ANSI.bold}${ANSI.cyan}\u25b6 Karajan Code v${version}${ANSI.reset}`);
|
|
88
|
-
console.log(BAR);
|
|
87
|
+
printBanner(version);
|
|
89
88
|
console.log(`${ANSI.bold}Task:${ANSI.reset} ${task}`);
|
|
90
89
|
console.log(
|
|
91
90
|
`${ANSI.bold}Coder:${ANSI.reset} ${config.roles?.coder?.provider || config.coder} ${ANSI.dim}|${ANSI.reset} ${ANSI.bold}Reviewer:${ANSI.reset} ${config.roles?.reviewer?.provider || config.reviewer}`
|
|
@@ -560,6 +559,24 @@ const EVENT_HANDLERS = {
|
|
|
560
559
|
console.log(` ${ANSI.dim}\u2514${ANSI.reset}`);
|
|
561
560
|
},
|
|
562
561
|
|
|
562
|
+
"session:checkpoint": (event) => {
|
|
563
|
+
const d = event.detail || {};
|
|
564
|
+
if (d.auto_continued) {
|
|
565
|
+
console.log(` \u251c\u2500 ${ANSI.dim}\u2714 Checkpoint: auto-continuing (${d.reason || "progress"})${ANSI.reset}`);
|
|
566
|
+
} else {
|
|
567
|
+
console.log(` \u251c\u2500 ${ANSI.yellow}\u23f8\ufe0f Interactive checkpoint at ${d.elapsed_minutes?.toFixed(1) || "?"}min${ANSI.reset}`);
|
|
568
|
+
}
|
|
569
|
+
},
|
|
570
|
+
|
|
571
|
+
"becaria:pr-created": (event) => {
|
|
572
|
+
const url = event.detail?.prUrl || "";
|
|
573
|
+
console.log(` \u251c\u2500 ${ANSI.green}\ud83d\ude80 BecarIA PR created: ${url}${ANSI.reset}`);
|
|
574
|
+
},
|
|
575
|
+
|
|
576
|
+
"solomon:alert": (event) => {
|
|
577
|
+
console.log(` \u251c\u2500 ${ANSI.yellow}\u2696\ufe0f Solomon alert: ${event.message || "conflict detected"}${ANSI.reset}`);
|
|
578
|
+
},
|
|
579
|
+
|
|
563
580
|
"agent:output": (event) => {
|
|
564
581
|
console.log(` \u2502 ${ANSI.dim}${event.message}${ANSI.reset}`);
|
|
565
582
|
}
|
|
@@ -567,9 +584,30 @@ const EVENT_HANDLERS = {
|
|
|
567
584
|
|
|
568
585
|
/* ── Quiet-mode filter ──────────────────────────────────────── */
|
|
569
586
|
|
|
570
|
-
/** Event types suppressed in quiet mode (
|
|
587
|
+
/** Event types suppressed in quiet mode (internal/noise events). */
|
|
571
588
|
const QUIET_SUPPRESSED = new Set([
|
|
572
|
-
"agent:output"
|
|
589
|
+
"agent:output",
|
|
590
|
+
"agent:stall",
|
|
591
|
+
"agent:heartbeat",
|
|
592
|
+
"pipeline:simplify",
|
|
593
|
+
"pipeline:analysis-only",
|
|
594
|
+
"policies:resolved",
|
|
595
|
+
"intent:classified",
|
|
596
|
+
"skills:auto-install",
|
|
597
|
+
"context:loaded",
|
|
598
|
+
"rtk:detected",
|
|
599
|
+
"proxy:started",
|
|
600
|
+
"board:started",
|
|
601
|
+
"plan:loaded",
|
|
602
|
+
"tdd:auto-detect",
|
|
603
|
+
"dry-run:summary",
|
|
604
|
+
"pg:decompose",
|
|
605
|
+
"tester:auto-continue",
|
|
606
|
+
"security:auto-continue",
|
|
607
|
+
"hu:sub-pipeline:start",
|
|
608
|
+
"hu:sub-pipeline:end",
|
|
609
|
+
"resilient:auto_resume",
|
|
610
|
+
"guard:blocked",
|
|
573
611
|
]);
|
|
574
612
|
|
|
575
613
|
/* ── Main entry point ───────────────────────────────────────── */
|
|
@@ -591,7 +629,8 @@ export function printEvent(event, opts = {}) {
|
|
|
591
629
|
const handler = EVENT_HANDLERS[event.type];
|
|
592
630
|
if (handler) {
|
|
593
631
|
handler(event, icon, elapsed, status);
|
|
594
|
-
} else {
|
|
595
|
-
console.log(` \u251c\u2500 ${icon} ${event.message
|
|
632
|
+
} else if (event.message) {
|
|
633
|
+
console.log(` \u251c\u2500 ${icon} ${event.message} ${elapsed}`);
|
|
596
634
|
}
|
|
635
|
+
// Events without handler AND without message are silently dropped
|
|
597
636
|
}
|
package/src/utils/git.js
CHANGED
|
@@ -40,6 +40,11 @@ export async function currentBranch() {
|
|
|
40
40
|
return runGit(["rev-parse", "--abbrev-ref", "HEAD"]);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
export async function hasCommits() {
|
|
44
|
+
const res = await run("git", ["rev-parse", "HEAD"]);
|
|
45
|
+
return res.exitCode === 0;
|
|
46
|
+
}
|
|
47
|
+
|
|
43
48
|
export async function fetchBase(baseBranch) {
|
|
44
49
|
await runGit(["fetch", "origin", baseBranch]);
|
|
45
50
|
}
|
package/src/utils/welcome.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { printBanner } from "./banner.js";
|
|
2
|
+
|
|
1
3
|
const A = {
|
|
2
4
|
reset: "\x1b[0m",
|
|
3
5
|
bold: "\x1b[1m",
|
|
@@ -7,8 +9,6 @@ const A = {
|
|
|
7
9
|
yellow: "\x1b[33m",
|
|
8
10
|
};
|
|
9
11
|
|
|
10
|
-
const BAR = `${A.dim}${"─".repeat(44)}${A.reset}`;
|
|
11
|
-
|
|
12
12
|
const QUICK_START = [
|
|
13
13
|
["kj run <task>", "Run the full coder+reviewer pipeline"],
|
|
14
14
|
["kj init", "Initialize config and setup"],
|
|
@@ -24,12 +24,7 @@ const QUICK_START = [
|
|
|
24
24
|
* @param {object} [opts.config] - Loaded KJ config (optional, shows configured agents)
|
|
25
25
|
*/
|
|
26
26
|
export function printWelcomeScreen({ version, config = null }) {
|
|
27
|
-
|
|
28
|
-
console.log(BAR);
|
|
29
|
-
console.log(` ${A.bold}${A.cyan}▶ Karajan Code${A.reset} ${A.dim}v${version}${A.reset}`);
|
|
30
|
-
console.log(` ${A.dim}AI-powered coding pipeline${A.reset}`);
|
|
31
|
-
console.log(BAR);
|
|
32
|
-
console.log();
|
|
27
|
+
printBanner(version, { force: true });
|
|
33
28
|
|
|
34
29
|
if (config) {
|
|
35
30
|
const coder = config.roles?.coder?.provider || config.coder || "claude";
|