chorus-codes 0.7.0 → 0.7.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/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/cache/.previewinfo +1 -1
- package/.next/cache/.rscinfo +1 -1
- package/.next/fallback-build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/app/_global-error.html +1 -1
- package/.next/server/app/_global-error.rsc +1 -1
- package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/_not-found.html +1 -1
- package/.next/server/app/_not-found.rsc +1 -1
- package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/new.html +1 -1
- package/.next/server/app/new.rsc +1 -1
- package/.next/server/app/new.segments/_full.segment.rsc +1 -1
- package/.next/server/app/new.segments/_head.segment.rsc +1 -1
- package/.next/server/app/new.segments/_index.segment.rsc +1 -1
- package/.next/server/app/new.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/new.segments/new.segment.rsc +1 -1
- package/.next/server/app/onboarding.html +1 -1
- package/.next/server/app/onboarding.rsc +1 -1
- package/.next/server/app/onboarding.segments/_full.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_index.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
- package/.next/server/app/personas.html +1 -1
- package/.next/server/app/personas.rsc +1 -1
- package/.next/server/app/personas.segments/_full.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_index.segment.rsc +1 -1
- package/.next/server/app/personas.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
- package/.next/server/app/settings.html +1 -1
- package/.next/server/app/settings.rsc +1 -1
- package/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
- package/.next/server/app/templates.html +1 -1
- package/.next/server/app/templates.rsc +1 -1
- package/.next/server/app/templates.segments/_full.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_head.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_index.segment.rsc +1 -1
- package/.next/server/app/templates.segments/_tree.segment.rsc +1 -1
- package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +1 -1
- package/.next/server/app/templates.segments/templates.segment.rsc +1 -1
- package/.next/server/middleware-build-manifest.js +3 -3
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/server-reference-manifest.js +1 -1
- package/.next/server/server-reference-manifest.json +1 -1
- package/.next/trace +1 -1
- package/.next/trace-build +1 -1
- package/dist/cli/commands/doctor.js +116 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.js +211 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/start.js +240 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.js +54 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.js +97 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/connect.js +108 -0
- package/dist/cli/connect.js.map +1 -0
- package/dist/cli/index.js +99 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/port-utils.js +260 -0
- package/dist/cli/port-utils.js.map +1 -0
- package/dist/cli/runtime-env.js +60 -0
- package/dist/cli/runtime-env.js.map +1 -0
- package/dist/cli/shared.js +54 -0
- package/dist/cli/shared.js.map +1 -0
- package/dist/cli/ui.js +60 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/daemon/agents/claude.js +98 -0
- package/dist/daemon/agents/claude.js.map +1 -0
- package/dist/daemon/agents/codex.js +160 -0
- package/dist/daemon/agents/codex.js.map +1 -0
- package/dist/daemon/agents/gemini.js +111 -0
- package/dist/daemon/agents/gemini.js.map +1 -0
- package/dist/daemon/agents/index.js +59 -0
- package/dist/daemon/agents/index.js.map +1 -0
- package/dist/daemon/agents/kimi.js +206 -0
- package/dist/daemon/agents/kimi.js.map +1 -0
- package/dist/daemon/agents/opencode.js +228 -0
- package/dist/daemon/agents/opencode.js.map +1 -0
- package/dist/daemon/agents/openrouter.js +274 -0
- package/dist/daemon/agents/openrouter.js.map +1 -0
- package/dist/daemon/agents/parsers/claude.js +63 -0
- package/dist/daemon/agents/parsers/claude.js.map +1 -0
- package/dist/daemon/agents/parsers/codex.js +51 -0
- package/dist/daemon/agents/parsers/codex.js.map +1 -0
- package/dist/daemon/agents/parsers/gemini.js +144 -0
- package/dist/daemon/agents/parsers/gemini.js.map +1 -0
- package/dist/daemon/agents/parsers/index.js +31 -0
- package/dist/daemon/agents/parsers/index.js.map +1 -0
- package/dist/daemon/agents/parsers/kimi.js +8 -0
- package/dist/daemon/agents/parsers/kimi.js.map +1 -0
- package/dist/daemon/agents/parsers/opencode.js +105 -0
- package/dist/daemon/agents/parsers/opencode.js.map +1 -0
- package/dist/daemon/agents/parsers/openrouter.js +69 -0
- package/dist/daemon/agents/parsers/openrouter.js.map +1 -0
- package/dist/daemon/agents/parsers/shared.js +17 -0
- package/dist/daemon/agents/parsers/shared.js.map +1 -0
- package/dist/daemon/agents/preflight.js +83 -0
- package/dist/daemon/agents/preflight.js.map +1 -0
- package/dist/daemon/agents/quote.js +45 -0
- package/dist/daemon/agents/quote.js.map +1 -0
- package/dist/daemon/agents/sandbox-guard.js +69 -0
- package/dist/daemon/agents/sandbox-guard.js.map +1 -0
- package/dist/daemon/agents/types.js +6 -0
- package/dist/daemon/agents/types.js.map +1 -0
- package/dist/daemon/api-response.js +65 -0
- package/dist/daemon/api-response.js.map +1 -0
- package/dist/daemon/error-detector.js +329 -0
- package/dist/daemon/error-detector.js.map +1 -0
- package/dist/daemon/headless.js +533 -0
- package/dist/daemon/headless.js.map +1 -0
- package/dist/daemon/index.js +333 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/openrouter.js +192 -0
- package/dist/daemon/openrouter.js.map +1 -0
- package/dist/daemon/orchestrators/claude.js +163 -0
- package/dist/daemon/orchestrators/claude.js.map +1 -0
- package/dist/daemon/orchestrators/codex.js +101 -0
- package/dist/daemon/orchestrators/codex.js.map +1 -0
- package/dist/daemon/orchestrators/cursor-windsurf.js +118 -0
- package/dist/daemon/orchestrators/cursor-windsurf.js.map +1 -0
- package/dist/daemon/orchestrators/gemini.js +108 -0
- package/dist/daemon/orchestrators/gemini.js.map +1 -0
- package/dist/daemon/orchestrators/index.js +90 -0
- package/dist/daemon/orchestrators/index.js.map +1 -0
- package/dist/daemon/orchestrators/kimi.js +108 -0
- package/dist/daemon/orchestrators/kimi.js.map +1 -0
- package/dist/daemon/orchestrators/opencode.js +152 -0
- package/dist/daemon/orchestrators/opencode.js.map +1 -0
- package/dist/daemon/orchestrators/shared.js +60 -0
- package/dist/daemon/orchestrators/shared.js.map +1 -0
- package/dist/daemon/output-watcher.js +131 -0
- package/dist/daemon/output-watcher.js.map +1 -0
- package/dist/daemon/participant-aborts.js +123 -0
- package/dist/daemon/participant-aborts.js.map +1 -0
- package/dist/daemon/reaper.js +46 -0
- package/dist/daemon/reaper.js.map +1 -0
- package/dist/daemon/routes/chats-events.js +62 -0
- package/dist/daemon/routes/chats-events.js.map +1 -0
- package/dist/daemon/routes/chats-stream.js +241 -0
- package/dist/daemon/routes/chats-stream.js.map +1 -0
- package/dist/daemon/routes/chats-validation.js +13 -0
- package/dist/daemon/routes/chats-validation.js.map +1 -0
- package/dist/daemon/routes/chats.js +545 -0
- package/dist/daemon/routes/chats.js.map +1 -0
- package/dist/daemon/routes/openrouter.js +103 -0
- package/dist/daemon/routes/openrouter.js.map +1 -0
- package/dist/daemon/routes/settings.js +199 -0
- package/dist/daemon/routes/settings.js.map +1 -0
- package/dist/daemon/routes/stats.js +155 -0
- package/dist/daemon/routes/stats.js.map +1 -0
- package/dist/daemon/routes/system.js +208 -0
- package/dist/daemon/routes/system.js.map +1 -0
- package/dist/daemon/routes/templates-personas.js +254 -0
- package/dist/daemon/routes/templates-personas.js.map +1 -0
- package/dist/daemon/routes/voices.js +139 -0
- package/dist/daemon/routes/voices.js.map +1 -0
- package/dist/daemon/runner/doer-driver.js +346 -0
- package/dist/daemon/runner/doer-driver.js.map +1 -0
- package/dist/daemon/runner/doer.js +336 -0
- package/dist/daemon/runner/doer.js.map +1 -0
- package/dist/daemon/runner/prior-round.js +140 -0
- package/dist/daemon/runner/prior-round.js.map +1 -0
- package/dist/daemon/runner/prompt-builder.js +292 -0
- package/dist/daemon/runner/prompt-builder.js.map +1 -0
- package/dist/daemon/runner/review-only-phase.js +103 -0
- package/dist/daemon/runner/review-only-phase.js.map +1 -0
- package/dist/daemon/runner/reviewer-driver.js +410 -0
- package/dist/daemon/runner/reviewer-driver.js.map +1 -0
- package/dist/daemon/runner/reviewer.js +384 -0
- package/dist/daemon/runner/reviewer.js.map +1 -0
- package/dist/daemon/runner/run-with-fallback.js +56 -0
- package/dist/daemon/runner/run-with-fallback.js.map +1 -0
- package/dist/daemon/runner/sanitize-name.js +8 -0
- package/dist/daemon/runner/sanitize-name.js.map +1 -0
- package/dist/daemon/runner/stream-file-writer.js +116 -0
- package/dist/daemon/runner/stream-file-writer.js.map +1 -0
- package/dist/daemon/runner/swap-sidecar.js +102 -0
- package/dist/daemon/runner/swap-sidecar.js.map +1 -0
- package/dist/daemon/runner/template-fallback.js +119 -0
- package/dist/daemon/runner/template-fallback.js.map +1 -0
- package/dist/daemon/runner/types.js +3 -0
- package/dist/daemon/runner/types.js.map +1 -0
- package/dist/daemon/runner/verdict.js +51 -0
- package/dist/daemon/runner/verdict.js.map +1 -0
- package/dist/daemon/runner-multiplex.js +364 -0
- package/dist/daemon/runner-multiplex.js.map +1 -0
- package/dist/daemon/runner.js +427 -0
- package/dist/daemon/runner.js.map +1 -0
- package/dist/daemon/ship.js +340 -0
- package/dist/daemon/ship.js.map +1 -0
- package/dist/daemon/template-cache.js +37 -0
- package/dist/daemon/template-cache.js.map +1 -0
- package/dist/daemon/tmux-types.js +9 -0
- package/dist/daemon/tmux-types.js.map +1 -0
- package/dist/daemon/tmux.js +341 -0
- package/dist/daemon/tmux.js.map +1 -0
- package/dist/lib/atomic-write.js +55 -0
- package/dist/lib/atomic-write.js.map +1 -0
- package/dist/lib/chat-events-bus.js +27 -0
- package/dist/lib/chat-events-bus.js.map +1 -0
- package/dist/lib/chat-slug.js +105 -0
- package/dist/lib/chat-slug.js.map +1 -0
- package/dist/lib/cli-detect.js +388 -0
- package/dist/lib/cli-detect.js.map +1 -0
- package/dist/lib/cli-health.js +156 -0
- package/dist/lib/cli-health.js.map +1 -0
- package/dist/lib/cli-paths.js +113 -0
- package/dist/lib/cli-paths.js.map +1 -0
- package/dist/lib/cli-precheck.js +141 -0
- package/dist/lib/cli-precheck.js.map +1 -0
- package/dist/lib/db/chats.js +244 -0
- package/dist/lib/db/chats.js.map +1 -0
- package/dist/lib/db/connection.js +254 -0
- package/dist/lib/db/connection.js.map +1 -0
- package/dist/lib/db/index.js +34 -0
- package/dist/lib/db/index.js.map +1 -0
- package/dist/lib/db/personas.js +65 -0
- package/dist/lib/db/personas.js.map +1 -0
- package/dist/lib/db/phase-events.js +172 -0
- package/dist/lib/db/phase-events.js.map +1 -0
- package/dist/lib/db/secrets.js +53 -0
- package/dist/lib/db/secrets.js.map +1 -0
- package/dist/lib/db/settings.js +47 -0
- package/dist/lib/db/settings.js.map +1 -0
- package/dist/lib/db/templates.js +75 -0
- package/dist/lib/db/templates.js.map +1 -0
- package/dist/lib/db/voices.js +184 -0
- package/dist/lib/db/voices.js.map +1 -0
- package/dist/lib/lineage-maps.js +200 -0
- package/dist/lib/lineage-maps.js.map +1 -0
- package/dist/lib/logger.js +186 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/personas.js +117 -0
- package/dist/lib/personas.js.map +1 -0
- package/dist/lib/runtime-path.js +222 -0
- package/dist/lib/runtime-path.js.map +1 -0
- package/dist/lib/settings/billing.js +58 -0
- package/dist/lib/settings/billing.js.map +1 -0
- package/dist/lib/settings/permissions.js +81 -0
- package/dist/lib/settings/permissions.js.map +1 -0
- package/dist/lib/settings/transport.js +113 -0
- package/dist/lib/settings/transport.js.map +1 -0
- package/dist/lib/telemetry.js +290 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/template-schema.js +319 -0
- package/dist/lib/template-schema.js.map +1 -0
- package/dist/lib/template-validation.js +82 -0
- package/dist/lib/template-validation.js.map +1 -0
- package/dist/lib/voices.js +533 -0
- package/dist/lib/voices.js.map +1 -0
- package/dist/mcp/client.js +138 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/index.js +178 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/tools.js +355 -0
- package/dist/mcp/tools.js.map +1 -0
- package/package.json +2 -1
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js +0 -6077
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js.map +0 -69
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js +0 -6318
- package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js.map +0 -71
- package/.next/dev/types/cache-life.d.ts +0 -145
- package/.next/dev/types/routes.d.ts +0 -84
- package/.next/dev/types/validator.ts +0 -178
- /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 8H2I8TTPlrKuWCV-SxY5f}/_buildManifest.js +0 -0
- /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 8H2I8TTPlrKuWCV-SxY5f}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 8H2I8TTPlrKuWCV-SxY5f}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.runReviewers = runReviewers;
|
|
40
|
+
const fs_1 = __importDefault(require("fs"));
|
|
41
|
+
const path_1 = __importDefault(require("path"));
|
|
42
|
+
const template_schema_js_1 = require("../../lib/template-schema.js");
|
|
43
|
+
const cli_health_js_1 = require("../../lib/cli-health.js");
|
|
44
|
+
const cli_precheck_js_1 = require("../../lib/cli-precheck.js");
|
|
45
|
+
const index_js_1 = require("../../lib/db/index.js");
|
|
46
|
+
const permissions_js_1 = require("../../lib/settings/permissions.js");
|
|
47
|
+
const transport_js_1 = require("../../lib/settings/transport.js");
|
|
48
|
+
const index_js_2 = require("../agents/index.js");
|
|
49
|
+
const output_watcher_js_1 = require("../output-watcher.js");
|
|
50
|
+
const participantAborts = __importStar(require("../participant-aborts.js"));
|
|
51
|
+
const prompt_builder_js_1 = require("./prompt-builder.js");
|
|
52
|
+
const reviewer_js_1 = require("./reviewer.js");
|
|
53
|
+
const run_with_fallback_js_1 = require("./run-with-fallback.js");
|
|
54
|
+
const sanitize_name_js_1 = require("./sanitize-name.js");
|
|
55
|
+
const swap_sidecar_js_1 = require("./swap-sidecar.js");
|
|
56
|
+
const template_fallback_js_1 = require("./template-fallback.js");
|
|
57
|
+
const verdict_js_1 = require("./verdict.js");
|
|
58
|
+
// Cap concurrent reviewer subprocesses per chat. Templates with 4+
|
|
59
|
+
// reviewer candidates would otherwise spawn the full set in parallel —
|
|
60
|
+
// which in practice means simultaneous LLM-CLI subprocesses each holding
|
|
61
|
+
// a shim child + stream parser, plus per-chat cwd. At load=133 last week
|
|
62
|
+
// the root cause was unbounded fan-out across re-attached SSE sessions;
|
|
63
|
+
// the per-chat ceiling stops a single big template from melting the host.
|
|
64
|
+
const REVIEWER_CONCURRENCY = 3;
|
|
65
|
+
async function runReviewers(chatDir, chatId, phase, phaseIdx, round, doerOutput, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, templateFallbackReviewer) {
|
|
66
|
+
if (!phase.reviewer || phase.reviewer.candidates.length === 0) {
|
|
67
|
+
return { agreed: true, summary: '', allFailed: false };
|
|
68
|
+
}
|
|
69
|
+
const roundDir = path_1.default.join(chatDir, `round-${round}`);
|
|
70
|
+
if (!fs_1.default.existsSync(roundDir)) {
|
|
71
|
+
fs_1.default.mkdirSync(roundDir, { recursive: true });
|
|
72
|
+
}
|
|
73
|
+
// 'failed' = reviewer never produced a valid answer (timeout/quota/crash).
|
|
74
|
+
// The chat-level verdict has to know the difference: if EVERY reviewer
|
|
75
|
+
// failed, we shouldn't auto-approve.
|
|
76
|
+
const reviews = [];
|
|
77
|
+
const candidates = phase.reviewer.candidates;
|
|
78
|
+
let cursor = 0;
|
|
79
|
+
async function worker() {
|
|
80
|
+
while (true) {
|
|
81
|
+
const idx = cursor++;
|
|
82
|
+
if (idx >= candidates.length)
|
|
83
|
+
return;
|
|
84
|
+
const candidate = candidates[idx];
|
|
85
|
+
try {
|
|
86
|
+
const res = await runReviewer(chatDir, chatId, phase, phaseIdx, round, idx, doerOutput, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, templateFallbackReviewer);
|
|
87
|
+
reviews.push({
|
|
88
|
+
reviewer: `${candidate.lineage}-${idx}`,
|
|
89
|
+
outcome: res === null ? 'failed' : res ? 'agreed' : 'disagreed',
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
reviews.push({
|
|
94
|
+
reviewer: `${candidate.lineage}-${idx}`,
|
|
95
|
+
outcome: 'failed',
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const workerCount = Math.min(REVIEWER_CONCURRENCY, candidates.length);
|
|
101
|
+
await Promise.all(Array.from({ length: workerCount }, () => worker()));
|
|
102
|
+
const agreedCount = reviews.filter((r) => r.outcome === 'agreed').length;
|
|
103
|
+
const failedCount = reviews.filter((r) => r.outcome === 'failed').length;
|
|
104
|
+
const required = phase.reviewer.require;
|
|
105
|
+
const agreed = agreedCount >= required;
|
|
106
|
+
const allFailed = failedCount === reviews.length && reviews.length > 0;
|
|
107
|
+
const summary = allFailed
|
|
108
|
+
? `All ${reviews.length} reviewer(s) failed (timeout/quota/crash)`
|
|
109
|
+
: reviews.length > 0
|
|
110
|
+
? `${agreedCount}/${reviews.length} reviewers agreed${failedCount ? `, ${failedCount} failed` : ''}`
|
|
111
|
+
: 'No reviews completed';
|
|
112
|
+
return { agreed, summary, allFailed };
|
|
113
|
+
}
|
|
114
|
+
async function runReviewer(chatDir, chatId, phase, phaseIdx, round, reviewerIdx, doerOutput, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, templateFallbackReviewer) {
|
|
115
|
+
// Returns:
|
|
116
|
+
// true = reviewer ran and approved
|
|
117
|
+
// false = reviewer ran and disagreed
|
|
118
|
+
// null = reviewer never produced a valid answer (timeout/quota/crash)
|
|
119
|
+
if (!phase.reviewer)
|
|
120
|
+
return true;
|
|
121
|
+
const candidate = phase.reviewer.candidates[reviewerIdx];
|
|
122
|
+
const reviewerModel = candidate.models?.[0];
|
|
123
|
+
const shim = (0, index_js_2.pickShimForVoice)(candidate.lineage, reviewerModel);
|
|
124
|
+
const agentName = shim.name;
|
|
125
|
+
// Pre-spawn precheck — same gate as runDoer. A reviewer that fails
|
|
126
|
+
// precheck returns null, which the phase loop already handles by
|
|
127
|
+
// counting it toward the all-reviewers-failed threshold and continuing
|
|
128
|
+
// with the remaining reviewers. HTTP-dispatched shims (openrouter)
|
|
129
|
+
// skip this — auth is the secrets table, checked inside the shim.
|
|
130
|
+
if (!(0, index_js_2.isHttpDispatchedShim)(shim)) {
|
|
131
|
+
const preRev = await (0, cli_precheck_js_1.precheckLineage)(candidate.lineage);
|
|
132
|
+
if (!preRev.ok) {
|
|
133
|
+
onEvent({
|
|
134
|
+
chatId,
|
|
135
|
+
type: 'cli_warning',
|
|
136
|
+
payload: {
|
|
137
|
+
phaseId: phase.id,
|
|
138
|
+
round,
|
|
139
|
+
role: 'reviewer',
|
|
140
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
141
|
+
lineage: candidate.lineage,
|
|
142
|
+
reason: preRev.reason,
|
|
143
|
+
message: preRev.message,
|
|
144
|
+
cta: preRev.cta,
|
|
145
|
+
resetAt: preRev.resetAt,
|
|
146
|
+
},
|
|
147
|
+
ts: Date.now(),
|
|
148
|
+
});
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const roundDir = path_1.default.join(chatDir, `round-${round}`);
|
|
153
|
+
const reviewerDir = path_1.default.join(roundDir, `reviewer-${agentName}-${reviewerIdx}`);
|
|
154
|
+
if (!fs_1.default.existsSync(reviewerDir)) {
|
|
155
|
+
fs_1.default.mkdirSync(reviewerDir, { recursive: true });
|
|
156
|
+
}
|
|
157
|
+
const askFile = path_1.default.join(reviewerDir, 'ask.md');
|
|
158
|
+
const answerFile = path_1.default.join(reviewerDir, 'answer.md');
|
|
159
|
+
// Resolve reviewer persona — same fallback + warning pattern as runDoer.
|
|
160
|
+
let reviewerPersonaPrompt;
|
|
161
|
+
if (candidate.persona) {
|
|
162
|
+
const personaId = candidate.persona;
|
|
163
|
+
try {
|
|
164
|
+
const row = await index_js_1.personas.getById(personaId);
|
|
165
|
+
if (row) {
|
|
166
|
+
reviewerPersonaPrompt = row.system_prompt;
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
onEvent({
|
|
170
|
+
chatId,
|
|
171
|
+
type: 'cli_warning',
|
|
172
|
+
payload: {
|
|
173
|
+
phaseId: phase.id,
|
|
174
|
+
phaseIdx,
|
|
175
|
+
round,
|
|
176
|
+
role: 'reviewer',
|
|
177
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
178
|
+
kind: 'persona_missing',
|
|
179
|
+
message: `Reviewer persona "${personaId}" not found in personas table — running with generic prompt. Check the template's reviewer candidate persona field.`,
|
|
180
|
+
},
|
|
181
|
+
ts: Date.now(),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
187
|
+
onEvent({
|
|
188
|
+
chatId,
|
|
189
|
+
type: 'cli_warning',
|
|
190
|
+
payload: {
|
|
191
|
+
phaseId: phase.id,
|
|
192
|
+
phaseIdx,
|
|
193
|
+
round,
|
|
194
|
+
role: 'reviewer',
|
|
195
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
196
|
+
kind: 'persona_lookup_failed',
|
|
197
|
+
message: `Reviewer persona lookup for "${personaId}" failed: ${message} — running with generic prompt.`,
|
|
198
|
+
},
|
|
199
|
+
ts: Date.now(),
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
const ask = (0, prompt_builder_js_1.buildReviewerAsk)(phase, phaseIdx, round, work, doerOutput, filesBlock, reviewerPersonaPrompt);
|
|
204
|
+
fs_1.default.writeFileSync(askFile, ask);
|
|
205
|
+
// Per-slot model fallback: when candidate.models lists multiple models
|
|
206
|
+
// we try them in order, falling through on `null` (no answer produced).
|
|
207
|
+
// The boolean verdict `false` (disagreement) is a real result and stops
|
|
208
|
+
// the chain — runWithModelFallback only re-tries on literal null.
|
|
209
|
+
const transport = await (0, transport_js_1.getTransport)();
|
|
210
|
+
if (transport === 'headless' && shim.runHeadless) {
|
|
211
|
+
const handle = participantAborts.register(chatId, participantAborts.participantKey('reviewer', agentName, reviewerIdx), abortSignal);
|
|
212
|
+
try {
|
|
213
|
+
// Compose: this slot's per-slot chain + template-level
|
|
214
|
+
// fallback.reviewer (same lineage, dedup'd against this slot AND
|
|
215
|
+
// every other reviewer slot in the phase so we don't spawn a
|
|
216
|
+
// duplicate voice).
|
|
217
|
+
const allReviewerSlots = (phase.reviewer?.candidates ?? []).map((c) => ({
|
|
218
|
+
lineage: c.lineage,
|
|
219
|
+
models: c.models ?? [],
|
|
220
|
+
}));
|
|
221
|
+
const thisSlot = {
|
|
222
|
+
lineage: candidate.lineage,
|
|
223
|
+
models: candidate.models ?? [],
|
|
224
|
+
};
|
|
225
|
+
const chain = (0, template_fallback_js_1.buildSlotFallbackChain)(thisSlot, allReviewerSlots, templateFallbackReviewer);
|
|
226
|
+
return await (0, run_with_fallback_js_1.runWithChainFallback)(chain, async (entry) => {
|
|
227
|
+
// Cross-lineage swap: when the entry's lineage differs from the
|
|
228
|
+
// slot's primary, re-resolve the shim. The slot's identity
|
|
229
|
+
// (agentName, reviewerDir, participant key) stays bound to the
|
|
230
|
+
// primary lineage so the cockpit card doesn't re-key mid-run —
|
|
231
|
+
// the cli_warning below tells the UI a swap happened.
|
|
232
|
+
const entryShim = entry.lineage === candidate.lineage
|
|
233
|
+
? shim
|
|
234
|
+
: (0, index_js_2.pickShimForVoice)(entry.lineage, entry.model);
|
|
235
|
+
return (0, reviewer_js_1.runReviewerHeadless)({
|
|
236
|
+
shim: entryShim,
|
|
237
|
+
chatId,
|
|
238
|
+
phase,
|
|
239
|
+
round,
|
|
240
|
+
reviewerIdx,
|
|
241
|
+
candidateLineage: entry.lineage,
|
|
242
|
+
candidateModel: entry.model,
|
|
243
|
+
agentName,
|
|
244
|
+
askContent: ask,
|
|
245
|
+
answerFile,
|
|
246
|
+
reviewerDir,
|
|
247
|
+
abortSignal: handle.signal,
|
|
248
|
+
onEvent,
|
|
249
|
+
});
|
|
250
|
+
}, (from, to, fromIdx) => {
|
|
251
|
+
const sameLineage = from.lineage === to.lineage;
|
|
252
|
+
const reason = sameLineage ? 'model_fallback' : 'lineage_fallback';
|
|
253
|
+
const message = sameLineage
|
|
254
|
+
? `Reviewer model "${from.model ?? '(default)'}" produced no answer; retrying with "${to.model ?? '(default)'}".`
|
|
255
|
+
: `Reviewer ${from.lineage}/${from.model ?? '(default)'} failed; switching to ${to.lineage}/${to.model ?? '(default)'} (cross-lineage fallback).`;
|
|
256
|
+
onEvent({
|
|
257
|
+
chatId,
|
|
258
|
+
type: 'cli_warning',
|
|
259
|
+
payload: {
|
|
260
|
+
phaseId: phase.id,
|
|
261
|
+
round,
|
|
262
|
+
role: 'reviewer',
|
|
263
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
264
|
+
reason,
|
|
265
|
+
fromLineage: from.lineage,
|
|
266
|
+
toLineage: to.lineage,
|
|
267
|
+
fromModel: from.model ?? '(default)',
|
|
268
|
+
toModel: to.model ?? '(default)',
|
|
269
|
+
fallbackIdx: fromIdx,
|
|
270
|
+
message,
|
|
271
|
+
},
|
|
272
|
+
ts: Date.now(),
|
|
273
|
+
});
|
|
274
|
+
// Persist a sidecar so swap cards survive page reloads — the
|
|
275
|
+
// SSE stream shuts off for terminal chats, and phase_events
|
|
276
|
+
// packs warnings as opaque text. Mirrors the _stats.json /
|
|
277
|
+
// _meta.json pattern: append-only JSON array, read by the
|
|
278
|
+
// run-artifacts route at the next refresh tick.
|
|
279
|
+
(0, swap_sidecar_js_1.appendSwapSidecar)(reviewerDir, {
|
|
280
|
+
round,
|
|
281
|
+
phaseId: phase.id,
|
|
282
|
+
role: 'reviewer',
|
|
283
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
284
|
+
reason,
|
|
285
|
+
fromLineage: from.lineage,
|
|
286
|
+
toLineage: to.lineage,
|
|
287
|
+
fromModel: from.model ?? '(default)',
|
|
288
|
+
toModel: to.model ?? '(default)',
|
|
289
|
+
fallbackIdx: fromIdx,
|
|
290
|
+
ts: Date.now(),
|
|
291
|
+
});
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
finally {
|
|
295
|
+
handle.release();
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Reviewers don't share sessions across rounds — each round wants a
|
|
299
|
+
// fresh perspective on the new doer output. Across-phase reuse never
|
|
300
|
+
// makes sense.
|
|
301
|
+
const perms = await (0, permissions_js_1.getPermissions)();
|
|
302
|
+
const sessionName = (0, sanitize_name_js_1.sanitizeName)(`chorus-${chatId}-${phase.id}-reviewer-${agentName}-${reviewerIdx}`);
|
|
303
|
+
const session = await tmuxMgr.acquire({
|
|
304
|
+
chatId,
|
|
305
|
+
phaseId: phase.id,
|
|
306
|
+
role: 'reviewer',
|
|
307
|
+
round,
|
|
308
|
+
shareSessionAcrossRounds: false,
|
|
309
|
+
shareSessionAcrossPhases: false,
|
|
310
|
+
shim,
|
|
311
|
+
spawnOpts: {
|
|
312
|
+
sessionName,
|
|
313
|
+
cwd: reviewerDir,
|
|
314
|
+
model: candidate.models?.[0],
|
|
315
|
+
sandbox: perms.sandboxProfile,
|
|
316
|
+
autoApprove: perms.autoApprovePrompts,
|
|
317
|
+
networkAccess: perms.networkAccess,
|
|
318
|
+
},
|
|
319
|
+
agentName: `${agentName}-${reviewerIdx}`,
|
|
320
|
+
});
|
|
321
|
+
if (shim.clearKeys && shim.clearKeys.length > 0) {
|
|
322
|
+
tmuxMgr.sendKeys(session.name, [...shim.clearKeys]);
|
|
323
|
+
}
|
|
324
|
+
if (shim.preNudge)
|
|
325
|
+
shim.preNudge(session.name);
|
|
326
|
+
const prompt = shim.formatPrompt({
|
|
327
|
+
promptFile: askFile,
|
|
328
|
+
answerFile,
|
|
329
|
+
task: `Review: ${phase.title}`,
|
|
330
|
+
expectDoneSentinel: true,
|
|
331
|
+
});
|
|
332
|
+
// Wait for the CLI's TUI to finish cold-start before pasting (6s
|
|
333
|
+
// covers Codex's slow cold-start). See doer-driver for rationale.
|
|
334
|
+
await new Promise((r) => setTimeout(r, 6000));
|
|
335
|
+
tmuxMgr.pasteBuffer(session.name, prompt);
|
|
336
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
337
|
+
tmuxMgr.sendKeys(session.name, ['Enter']);
|
|
338
|
+
// Failure-mode polling — same pattern as the doer.
|
|
339
|
+
const pollHandle = setInterval(() => {
|
|
340
|
+
try {
|
|
341
|
+
const pane = tmuxMgr.capturePane(session.name);
|
|
342
|
+
const err = errorDetector.inspect(session.name, candidate.lineage, pane);
|
|
343
|
+
if (err) {
|
|
344
|
+
const recoveryKeys = err.kind === 'permission_prompt' ? shim.recoverKeys?.permission_prompt : undefined;
|
|
345
|
+
if (recoveryKeys && recoveryKeys.length > 0) {
|
|
346
|
+
tmuxMgr.sendKeys(session.name, [...recoveryKeys]);
|
|
347
|
+
onEvent({
|
|
348
|
+
chatId,
|
|
349
|
+
type: 'cli_warning',
|
|
350
|
+
payload: {
|
|
351
|
+
phaseId: phase.id,
|
|
352
|
+
round,
|
|
353
|
+
role: 'reviewer',
|
|
354
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
355
|
+
recovered: err.kind,
|
|
356
|
+
keys: [...recoveryKeys],
|
|
357
|
+
detail: err.detail,
|
|
358
|
+
},
|
|
359
|
+
ts: Date.now(),
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
// Fire-and-forget — see doer-driver for rationale.
|
|
364
|
+
(0, cli_health_js_1.recordHealth)({
|
|
365
|
+
lineage: candidate.lineage,
|
|
366
|
+
status: (0, cli_health_js_1.kindToStatus)(err.kind),
|
|
367
|
+
message: err.message,
|
|
368
|
+
resetAt: err.resetAt,
|
|
369
|
+
}).catch((healthErr) => {
|
|
370
|
+
console.error(`[chorus] recordHealth failed for ${candidate.lineage}:`, healthErr);
|
|
371
|
+
});
|
|
372
|
+
onEvent({
|
|
373
|
+
chatId,
|
|
374
|
+
type: 'cli_error',
|
|
375
|
+
payload: {
|
|
376
|
+
phaseId: phase.id,
|
|
377
|
+
round,
|
|
378
|
+
role: 'reviewer',
|
|
379
|
+
agent: `${agentName}-${reviewerIdx}`,
|
|
380
|
+
error: err,
|
|
381
|
+
},
|
|
382
|
+
ts: Date.now(),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
// ignore
|
|
389
|
+
}
|
|
390
|
+
}, 2000);
|
|
391
|
+
try {
|
|
392
|
+
const result = await (0, output_watcher_js_1.waitForAnswer)(answerFile, {
|
|
393
|
+
timeoutMs: phase.timeoutMs ?? template_schema_js_1.DEFAULT_TMUX_PHASE_TIMEOUT_MS,
|
|
394
|
+
doneSentinel: '## DONE',
|
|
395
|
+
});
|
|
396
|
+
if (!result.full || result.content.trim().length === 0) {
|
|
397
|
+
// Watcher resolved on timeout/silence with no real answer.
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
return (0, verdict_js_1.verdictFromReviewerText)(result.content);
|
|
401
|
+
}
|
|
402
|
+
catch {
|
|
403
|
+
// Timed out or watcher errored — no valid answer produced.
|
|
404
|
+
return null;
|
|
405
|
+
}
|
|
406
|
+
finally {
|
|
407
|
+
clearInterval(pollHandle);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=reviewer-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewer-driver.js","sourceRoot":"","sources":["../../../src/daemon/runner/reviewer-driver.ts"],"names":[],"mappings":"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"}
|