chorus-codes 0.7.0 → 0.7.2
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/cache/.tsbuildinfo +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/README.md +38 -15
- 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 +298 -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 → 9cD3yIOGe_Aqr17uJHTQS}/_buildManifest.js +0 -0
- /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 9cD3yIOGe_Aqr17uJHTQS}/_clientMiddlewareManifest.js +0 -0
- /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 9cD3yIOGe_Aqr17uJHTQS}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner-multiplex.js","sourceRoot":"","sources":["../../src/daemon/runner-multiplex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Phase runner — orchestrates template execution.
|
|
4
|
+
* Spawns CLI sessions per phase/round/role, writes prompts, watches for
|
|
5
|
+
* answers, handles reviewer consensus, and emits SSE events.
|
|
6
|
+
*
|
|
7
|
+
* Per-role drivers live in runner/{doer-driver,reviewer-driver,
|
|
8
|
+
* review-only-phase}.ts. Headless streaming hot paths live in
|
|
9
|
+
* runner/{doer,reviewer,stream-file-writer}.ts. Pure prompt-construction
|
|
10
|
+
* helpers live in runner/prompt-builder.ts.
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.verdictFromReviewerText = exports.StreamFileWriter = exports.runReviewerHeadless = exports.runDoerHeadless = exports.packAttachedFiles = exports.buildReviewerAsk = exports.buildAsk = void 0;
|
|
17
|
+
exports.runChat = runChat;
|
|
18
|
+
const fs_1 = __importDefault(require("fs"));
|
|
19
|
+
const os_1 = __importDefault(require("os"));
|
|
20
|
+
const path_1 = __importDefault(require("path"));
|
|
21
|
+
const atomic_write_js_1 = require("../lib/atomic-write.js");
|
|
22
|
+
const template_schema_js_1 = require("../lib/template-schema.js");
|
|
23
|
+
const doer_driver_js_1 = require("./runner/doer-driver.js");
|
|
24
|
+
const prior_round_js_1 = require("./runner/prior-round.js");
|
|
25
|
+
const reviewer_driver_js_1 = require("./runner/reviewer-driver.js");
|
|
26
|
+
const review_only_phase_js_1 = require("./runner/review-only-phase.js");
|
|
27
|
+
const ship_js_1 = require("./ship.js");
|
|
28
|
+
/**
|
|
29
|
+
* Main runner. Iterates phases, spawns doers, waits for answers, runs
|
|
30
|
+
* reviewers, checks consensus, and emits events.
|
|
31
|
+
*/
|
|
32
|
+
async function runChat(opts) {
|
|
33
|
+
const { chatId, template, work, artifact, repoPath, attachedFiles, onEvent, abortSignal, tmuxMgr, errorDetector } = opts;
|
|
34
|
+
const chatDir = path_1.default.join(os_1.default.homedir(), '.chorus', 'chats', chatId);
|
|
35
|
+
// Pack attached files into a single block once per chat. Both doer +
|
|
36
|
+
// every reviewer get the same block — they're auditing the same artifacts.
|
|
37
|
+
const filesBlock = (0, prompt_builder_js_1.packAttachedFiles)(attachedFiles, repoPath);
|
|
38
|
+
if (!fs_1.default.existsSync(chatDir)) {
|
|
39
|
+
fs_1.default.mkdirSync(chatDir, { recursive: true });
|
|
40
|
+
}
|
|
41
|
+
// Atomic temp+rename so a partial write (daemon crash, FS ENOSPC
|
|
42
|
+
// mid-fsync) can't leave a corrupt JSON the cockpit chokes on.
|
|
43
|
+
const meta = {
|
|
44
|
+
chatId,
|
|
45
|
+
work,
|
|
46
|
+
templateId: template.id,
|
|
47
|
+
createdAt: Date.now(),
|
|
48
|
+
};
|
|
49
|
+
(0, atomic_write_js_1.atomicWriteJsonSync)(path_1.default.join(chatDir, 'meta.json'), meta);
|
|
50
|
+
// chat_done is a one-way latch. The abort listener and the normal
|
|
51
|
+
// terminal emission both try to fire it; whichever runs first wins.
|
|
52
|
+
// This closes a race where SSE-disconnect → abort → chat_done(cancelled),
|
|
53
|
+
// then the loop kept running and emitted chat_done(completed),
|
|
54
|
+
// overwriting 'cancelled' with 'approved' in the DB.
|
|
55
|
+
let chatDoneEmitted = false;
|
|
56
|
+
const emitChatDone = (payload) => {
|
|
57
|
+
if (chatDoneEmitted)
|
|
58
|
+
return;
|
|
59
|
+
chatDoneEmitted = true;
|
|
60
|
+
onEvent({ chatId, type: 'chat_done', payload, ts: Date.now() });
|
|
61
|
+
};
|
|
62
|
+
const abortListener = () => {
|
|
63
|
+
// TODO(H): send polite Escape to active session, flip status to cancelled
|
|
64
|
+
emitChatDone({ status: 'cancelled' });
|
|
65
|
+
};
|
|
66
|
+
abortSignal.addEventListener('abort', abortListener);
|
|
67
|
+
// Track whether any phase failed because every reviewer in it failed
|
|
68
|
+
// (timeout/quota/crash). If so, the chat ends in 'no_review' rather
|
|
69
|
+
// than 'approved' — there was no actual peer review to approve from.
|
|
70
|
+
let anyPhaseAllReviewersFailed = false;
|
|
71
|
+
// Track whether any doer failed all rounds (couldn't produce output).
|
|
72
|
+
// If so, the chat must NOT end approved — there was no real
|
|
73
|
+
// implementation to review.
|
|
74
|
+
let anyPhaseDoerFailed = false;
|
|
75
|
+
// Captures the consensus from the most recent review-only phase. Used
|
|
76
|
+
// to override the default 'approved' verdict in chat_done — review-only
|
|
77
|
+
// chats surface what the reviewers actually said rather than auto-
|
|
78
|
+
// approving. null when no review-only phase ran (standard templates).
|
|
79
|
+
let reviewOnlyConsensus = null;
|
|
80
|
+
try {
|
|
81
|
+
for (let phaseIdx = 0; phaseIdx < template.phases.length; phaseIdx++) {
|
|
82
|
+
if (abortSignal.aborted)
|
|
83
|
+
break;
|
|
84
|
+
const phase = template.phases[phaseIdx];
|
|
85
|
+
// Review-only phases skip the doer entirely. Single pass, no
|
|
86
|
+
// iterate loop, no ship — enforced here, not in the schema, so
|
|
87
|
+
// future hybrid templates can mix kinds without re-plumbing the
|
|
88
|
+
// validator.
|
|
89
|
+
if ((0, template_schema_js_1.isReviewOnlyPhase)(phase)) {
|
|
90
|
+
const outcome = await (0, review_only_phase_js_1.runReviewOnlyPhase)({
|
|
91
|
+
chatDir,
|
|
92
|
+
chatId,
|
|
93
|
+
phase,
|
|
94
|
+
phaseIdx,
|
|
95
|
+
artifact: artifact ?? '',
|
|
96
|
+
work,
|
|
97
|
+
filesBlock,
|
|
98
|
+
tmuxMgr,
|
|
99
|
+
errorDetector,
|
|
100
|
+
onEvent,
|
|
101
|
+
abortSignal,
|
|
102
|
+
templateFallbackReviewer: template.fallback?.reviewer,
|
|
103
|
+
});
|
|
104
|
+
if (outcome.allReviewersFailed) {
|
|
105
|
+
anyPhaseAllReviewersFailed = true;
|
|
106
|
+
}
|
|
107
|
+
if (!outcome.completed) {
|
|
108
|
+
// Aborted (Ctrl-C / cockpit cancel). DO NOT capture consensus
|
|
109
|
+
// here — emitChatDone is racing with the abort listener which
|
|
110
|
+
// fires status='cancelled', and surfacing 'request_changes'
|
|
111
|
+
// would collapse "user hit cancel" with "reviewers said no" if
|
|
112
|
+
// the abort listener loses the latch race.
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
// Reviewers actually finished a pass. Capture so chat_done can
|
|
116
|
+
// surface the real verdict instead of always reporting 'approved'.
|
|
117
|
+
reviewOnlyConsensus = {
|
|
118
|
+
agreed: outcome.agreed,
|
|
119
|
+
summary: outcome.summary,
|
|
120
|
+
};
|
|
121
|
+
onEvent({
|
|
122
|
+
chatId,
|
|
123
|
+
type: 'phase_done',
|
|
124
|
+
payload: {
|
|
125
|
+
phaseId: phase.id,
|
|
126
|
+
phaseIdx,
|
|
127
|
+
kind: phase.kind,
|
|
128
|
+
},
|
|
129
|
+
ts: Date.now(),
|
|
130
|
+
});
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// Standard phase from here on.
|
|
134
|
+
const stdPhase = phase;
|
|
135
|
+
let doerSucceeded = false;
|
|
136
|
+
for (let round = 1; round <= stdPhase.iterate.maxRounds; round++) {
|
|
137
|
+
if (abortSignal.aborted)
|
|
138
|
+
break;
|
|
139
|
+
onEvent({
|
|
140
|
+
chatId,
|
|
141
|
+
type: 'phase_start',
|
|
142
|
+
payload: {
|
|
143
|
+
phaseId: stdPhase.id,
|
|
144
|
+
phaseIdx,
|
|
145
|
+
kind: stdPhase.kind,
|
|
146
|
+
round,
|
|
147
|
+
role: 'doer',
|
|
148
|
+
agent: stdPhase.doer.lineage,
|
|
149
|
+
},
|
|
150
|
+
ts: Date.now(),
|
|
151
|
+
});
|
|
152
|
+
// Round 2+ feeds prior reviewer findings back into the doer prompt
|
|
153
|
+
// so disagreement → retry is a real revision loop, not "ask the same
|
|
154
|
+
// question again." Returns "" when round === 1.
|
|
155
|
+
const priorRoundFeedback = (0, prior_round_js_1.readPriorRoundFeedback)(chatDir, round);
|
|
156
|
+
const doerAnswer = await (0, doer_driver_js_1.runDoer)(chatDir, chatId, stdPhase, phaseIdx, round, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, repoPath, template.fallback?.doer, priorRoundFeedback);
|
|
157
|
+
// Treat null OR partial-stream as a doer failure — `!doerAnswer.full`
|
|
158
|
+
// means runDoerHeadless saw a mid-stream error and only captured a
|
|
159
|
+
// partial transcript. Passing that to reviewers leads to verdicts
|
|
160
|
+
// on a half-written answer (gemini caught this on the launch-eve
|
|
161
|
+
// runner review). The runner already retries via the round loop,
|
|
162
|
+
// so failing this round is the right move; reviewing garbage is not.
|
|
163
|
+
if (!doerAnswer || !doerAnswer.full) {
|
|
164
|
+
onEvent({
|
|
165
|
+
chatId,
|
|
166
|
+
type: 'phase_failed',
|
|
167
|
+
payload: {
|
|
168
|
+
phaseId: stdPhase.id,
|
|
169
|
+
phaseIdx,
|
|
170
|
+
kind: stdPhase.kind,
|
|
171
|
+
role: 'doer',
|
|
172
|
+
reason: doerAnswer ? 'doer_partial_stream' : 'doer_timeout',
|
|
173
|
+
},
|
|
174
|
+
ts: Date.now(),
|
|
175
|
+
});
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
onEvent({
|
|
179
|
+
chatId,
|
|
180
|
+
type: 'phase_progress',
|
|
181
|
+
payload: {
|
|
182
|
+
phaseId: stdPhase.id,
|
|
183
|
+
round,
|
|
184
|
+
role: 'doer',
|
|
185
|
+
output: doerAnswer.content.slice(0, 500),
|
|
186
|
+
},
|
|
187
|
+
ts: Date.now(),
|
|
188
|
+
});
|
|
189
|
+
if (stdPhase.reviewer && stdPhase.reviewer.candidates.length > 0) {
|
|
190
|
+
const consensus = await (0, reviewer_driver_js_1.runReviewers)(chatDir, chatId, stdPhase, phaseIdx, round, doerAnswer.content, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, template.fallback?.reviewer);
|
|
191
|
+
if (consensus.allFailed) {
|
|
192
|
+
anyPhaseAllReviewersFailed = true;
|
|
193
|
+
}
|
|
194
|
+
if (consensus.agreed) {
|
|
195
|
+
doerSucceeded = true;
|
|
196
|
+
// Phase succeeded in this round — clear any
|
|
197
|
+
// all-reviewers-failed latch from prior rounds of THIS
|
|
198
|
+
// phase. Without this, a chat that had a flaky round 1 (one
|
|
199
|
+
// reviewer's CLI quota briefly exhausted, or a subprocess
|
|
200
|
+
// crashed) but recovered to consensus in round 2 was being
|
|
201
|
+
// terminally classified as `no_review`. The latch is meant
|
|
202
|
+
// to surface "we never got a real review", not "we briefly
|
|
203
|
+
// couldn't but eventually did". Subsequent phases set the
|
|
204
|
+
// flag again from their own round-1 outcomes, so cross-phase
|
|
205
|
+
// failure semantics are preserved.
|
|
206
|
+
anyPhaseAllReviewersFailed = false;
|
|
207
|
+
break;
|
|
208
|
+
}
|
|
209
|
+
if (round < stdPhase.iterate.maxRounds) {
|
|
210
|
+
onEvent({
|
|
211
|
+
chatId,
|
|
212
|
+
type: 'phase_progress',
|
|
213
|
+
payload: {
|
|
214
|
+
phaseId: stdPhase.id,
|
|
215
|
+
round,
|
|
216
|
+
role: 'reviewer',
|
|
217
|
+
disagreement: consensus.summary,
|
|
218
|
+
},
|
|
219
|
+
ts: Date.now(),
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// No reviewers: doer succeeds immediately
|
|
225
|
+
doerSucceeded = true;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (!doerSucceeded) {
|
|
230
|
+
anyPhaseDoerFailed = true;
|
|
231
|
+
onEvent({
|
|
232
|
+
chatId,
|
|
233
|
+
type: 'phase_failed',
|
|
234
|
+
payload: {
|
|
235
|
+
phaseId: stdPhase.id,
|
|
236
|
+
phaseIdx,
|
|
237
|
+
kind: stdPhase.kind,
|
|
238
|
+
role: 'doer',
|
|
239
|
+
reason: 'max_rounds_exhausted',
|
|
240
|
+
},
|
|
241
|
+
ts: Date.now(),
|
|
242
|
+
});
|
|
243
|
+
// Don't continue to subsequent phases when a doer failed every
|
|
244
|
+
// round — there is no real implementation to feed forward, and
|
|
245
|
+
// the chat must not end 'approved'. The chat_done branch below
|
|
246
|
+
// handles the terminal status as 'failed' / 'no_review'.
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
onEvent({
|
|
250
|
+
chatId,
|
|
251
|
+
type: 'phase_done',
|
|
252
|
+
payload: {
|
|
253
|
+
phaseId: stdPhase.id,
|
|
254
|
+
phaseIdx,
|
|
255
|
+
kind: stdPhase.kind,
|
|
256
|
+
},
|
|
257
|
+
ts: Date.now(),
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
// ─── Ship phase ────────────────────────────────────────────────
|
|
261
|
+
// Runs after all phases pass + reviewers agree, AND chat targets a
|
|
262
|
+
// real repo, AND template opted in. Failures are surfaced as
|
|
263
|
+
// status=blocked (chat ran fine, ship couldn't complete) rather
|
|
264
|
+
// than failed (chat broke).
|
|
265
|
+
let shipOutcome = { kind: 'skipped' };
|
|
266
|
+
// Forcibly skipped when any phase is review_only — there's no doer
|
|
267
|
+
// diff to commit and a template author who set ship.enabled=true on
|
|
268
|
+
// a review-only template would otherwise hit gh-cli with an empty
|
|
269
|
+
// stage. The schema docs claim the runner enforces this.
|
|
270
|
+
const templateHasReviewOnly = template.phases.some(template_schema_js_1.isReviewOnlyPhase);
|
|
271
|
+
if (!anyPhaseAllReviewersFailed &&
|
|
272
|
+
!anyPhaseDoerFailed &&
|
|
273
|
+
!templateHasReviewOnly &&
|
|
274
|
+
template.ship?.enabled &&
|
|
275
|
+
repoPath) {
|
|
276
|
+
const ctx = (0, ship_js_1.detectGitContext)(repoPath, template.ship.baseBranch);
|
|
277
|
+
if (!ctx.ok) {
|
|
278
|
+
// Surface as a skip with reason — chat still ends approved
|
|
279
|
+
// (we didn't ship, but the review was real).
|
|
280
|
+
shipOutcome = { kind: 'skipped', reason: `${ctx.reason}: ${ctx.detail}` };
|
|
281
|
+
onEvent({
|
|
282
|
+
chatId,
|
|
283
|
+
type: 'phase_progress',
|
|
284
|
+
payload: { phaseId: 'ship', skipped: true, reason: ctx.reason, detail: ctx.detail },
|
|
285
|
+
ts: Date.now(),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// Read the most recent doer's output for the PR body. Fall back
|
|
290
|
+
// to the chat's `work` if we can't find it (shouldn't happen in
|
|
291
|
+
// practice — ship phase only runs after a successful doer).
|
|
292
|
+
const lastDoerOutput = readLastDoerAnswer(chatDir) ?? work;
|
|
293
|
+
onEvent({
|
|
294
|
+
chatId,
|
|
295
|
+
type: 'phase_start',
|
|
296
|
+
payload: { phaseId: 'ship', kind: 'ship' },
|
|
297
|
+
ts: Date.now(),
|
|
298
|
+
});
|
|
299
|
+
const result = (0, ship_js_1.runShipPhase)({
|
|
300
|
+
context: ctx.context,
|
|
301
|
+
chatId,
|
|
302
|
+
templateId: template.id,
|
|
303
|
+
branchPattern: template.ship.branchPattern ?? 'chorus/{chatId}',
|
|
304
|
+
titleTemplate: template.ship.titleTemplate ?? 'chorus: {template} via #{chatId}',
|
|
305
|
+
summary: work,
|
|
306
|
+
doerOutput: lastDoerOutput,
|
|
307
|
+
});
|
|
308
|
+
if (result.ok) {
|
|
309
|
+
shipOutcome = { kind: 'merged', prUrl: result.prUrl };
|
|
310
|
+
onEvent({
|
|
311
|
+
chatId,
|
|
312
|
+
type: 'phase_done',
|
|
313
|
+
payload: { phaseId: 'ship', prUrl: result.prUrl, branch: result.branch },
|
|
314
|
+
ts: Date.now(),
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
else {
|
|
318
|
+
shipOutcome = { kind: 'blocked', error: `${result.stage}: ${result.detail}` };
|
|
319
|
+
onEvent({
|
|
320
|
+
chatId,
|
|
321
|
+
type: 'phase_failed',
|
|
322
|
+
payload: { phaseId: 'ship', stage: result.stage, detail: result.detail },
|
|
323
|
+
ts: Date.now(),
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
// Final chat_done — encodes terminal status and ship-phase outcome.
|
|
329
|
+
// Routed through emitChatDone so an earlier abort (SSE close, user
|
|
330
|
+
// cancel) can't be overwritten by a later "completed" emission.
|
|
331
|
+
if (anyPhaseDoerFailed) {
|
|
332
|
+
// The doer never produced a real implementation. Don't pretend
|
|
333
|
+
// the chat was reviewed — surface as failed so the cockpit shows
|
|
334
|
+
// it red.
|
|
335
|
+
emitChatDone({ status: 'failed', verdict: 'failed', error: 'doer_failed_all_rounds' });
|
|
336
|
+
}
|
|
337
|
+
else if (anyPhaseAllReviewersFailed) {
|
|
338
|
+
emitChatDone({ status: 'no_review', verdict: 'no_review' });
|
|
339
|
+
}
|
|
340
|
+
else if (shipOutcome.kind === 'merged') {
|
|
341
|
+
emitChatDone({
|
|
342
|
+
status: 'merged',
|
|
343
|
+
verdict: 'approved',
|
|
344
|
+
prUrl: shipOutcome.prUrl,
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
else if (shipOutcome.kind === 'blocked') {
|
|
348
|
+
emitChatDone({ status: 'blocked', verdict: 'approved', shipError: shipOutcome.error });
|
|
349
|
+
}
|
|
350
|
+
else if (reviewOnlyConsensus !== null) {
|
|
351
|
+
// Review-only chats surface the actual reviewer consensus rather
|
|
352
|
+
// than auto-approving. The chat itself completed (artifact
|
|
353
|
+
// reviewed, findings written) regardless of agreement — verdict
|
|
354
|
+
// reflects what reviewers said so the cockpit/CLI can render a
|
|
355
|
+
// meaningful "agreed / requested changes" state.
|
|
356
|
+
emitChatDone({
|
|
357
|
+
status: 'completed',
|
|
358
|
+
verdict: reviewOnlyConsensus.agreed ? 'approved' : 'request_changes',
|
|
359
|
+
reviewerSummary: reviewOnlyConsensus.summary,
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
// Either no ship phase or ship was skipped — chat ends approved.
|
|
364
|
+
emitChatDone({
|
|
365
|
+
status: 'completed',
|
|
366
|
+
verdict: 'approved',
|
|
367
|
+
...(shipOutcome.kind === 'skipped' && shipOutcome.reason
|
|
368
|
+
? { shipSkipped: shipOutcome.reason }
|
|
369
|
+
: {}),
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
375
|
+
emitChatDone({ status: 'failed', error: message });
|
|
376
|
+
}
|
|
377
|
+
finally {
|
|
378
|
+
abortSignal.removeEventListener('abort', abortListener);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Find and read the most recent doer's answer.md from the chat dir.
|
|
383
|
+
* Used by the ship phase to embed doer output in the PR body. Returns
|
|
384
|
+
* undefined if no doer output exists (shouldn't happen since ship runs
|
|
385
|
+
* after success).
|
|
386
|
+
*/
|
|
387
|
+
function readLastDoerAnswer(chatDir) {
|
|
388
|
+
if (!fs_1.default.existsSync(chatDir))
|
|
389
|
+
return undefined;
|
|
390
|
+
// Walk rounds in reverse (highest first). Within each round pick the
|
|
391
|
+
// doer-* dir's answer.md. There's at most one doer per round.
|
|
392
|
+
const rounds = fs_1.default
|
|
393
|
+
.readdirSync(chatDir)
|
|
394
|
+
.filter((n) => /^round-\d+$/.test(n))
|
|
395
|
+
.map((n) => ({ name: n, num: parseInt(n.replace('round-', ''), 10) }))
|
|
396
|
+
.sort((a, b) => b.num - a.num);
|
|
397
|
+
for (const r of rounds) {
|
|
398
|
+
const roundDir = path_1.default.join(chatDir, r.name);
|
|
399
|
+
const doerSubdir = fs_1.default
|
|
400
|
+
.readdirSync(roundDir)
|
|
401
|
+
.find((n) => n.startsWith('doer-'));
|
|
402
|
+
if (!doerSubdir)
|
|
403
|
+
continue;
|
|
404
|
+
const answerFile = path_1.default.join(roundDir, doerSubdir, 'answer.md');
|
|
405
|
+
if (fs_1.default.existsSync(answerFile)) {
|
|
406
|
+
const content = fs_1.default.readFileSync(answerFile, 'utf-8');
|
|
407
|
+
if (content.trim().length > 0)
|
|
408
|
+
return content;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
return undefined;
|
|
412
|
+
}
|
|
413
|
+
// Re-exports keep external import sites stable. Tests import some of
|
|
414
|
+
// these from `'../src/daemon/runner'`, the MCP layer imports verdict.
|
|
415
|
+
const prompt_builder_js_1 = require("./runner/prompt-builder.js");
|
|
416
|
+
Object.defineProperty(exports, "buildAsk", { enumerable: true, get: function () { return prompt_builder_js_1.buildAsk; } });
|
|
417
|
+
Object.defineProperty(exports, "buildReviewerAsk", { enumerable: true, get: function () { return prompt_builder_js_1.buildReviewerAsk; } });
|
|
418
|
+
Object.defineProperty(exports, "packAttachedFiles", { enumerable: true, get: function () { return prompt_builder_js_1.packAttachedFiles; } });
|
|
419
|
+
const doer_js_1 = require("./runner/doer.js");
|
|
420
|
+
Object.defineProperty(exports, "runDoerHeadless", { enumerable: true, get: function () { return doer_js_1.runDoerHeadless; } });
|
|
421
|
+
const reviewer_js_1 = require("./runner/reviewer.js");
|
|
422
|
+
Object.defineProperty(exports, "runReviewerHeadless", { enumerable: true, get: function () { return reviewer_js_1.runReviewerHeadless; } });
|
|
423
|
+
const stream_file_writer_js_1 = require("./runner/stream-file-writer.js");
|
|
424
|
+
Object.defineProperty(exports, "StreamFileWriter", { enumerable: true, get: function () { return stream_file_writer_js_1.StreamFileWriter; } });
|
|
425
|
+
const verdict_js_1 = require("./runner/verdict.js");
|
|
426
|
+
Object.defineProperty(exports, "verdictFromReviewerText", { enumerable: true, get: function () { return verdict_js_1.verdictFromReviewerText; } });
|
|
427
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/daemon/runner.ts"],"names":[],"mappings":"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"}
|