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,346 @@
|
|
|
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.runDoer = runDoer;
|
|
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 doer_js_1 = require("./doer.js");
|
|
52
|
+
const prompt_builder_js_1 = require("./prompt-builder.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
|
+
async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, repoPath, templateFallbackDoer, priorRoundFeedback) {
|
|
58
|
+
const doerModel = phase.doer.models?.[0];
|
|
59
|
+
const shim = (0, index_js_2.pickShimForVoice)(phase.doer.lineage, doerModel);
|
|
60
|
+
const agentName = shim.name;
|
|
61
|
+
// Pre-spawn precheck: short-circuit doomed runs without paying the spawn
|
|
62
|
+
// tax. Two cheap layers: (1) recent quota_exhausted with future resetAt,
|
|
63
|
+
// (2) credential file missing → user not logged in. HTTP-dispatched shims
|
|
64
|
+
// (openrouter) skip this — their auth is the secrets table, checked
|
|
65
|
+
// inside the shim itself.
|
|
66
|
+
if (!(0, index_js_2.isHttpDispatchedShim)(shim)) {
|
|
67
|
+
const preDoer = await (0, cli_precheck_js_1.precheckLineage)(phase.doer.lineage);
|
|
68
|
+
if (!preDoer.ok) {
|
|
69
|
+
onEvent({
|
|
70
|
+
chatId,
|
|
71
|
+
type: 'cli_warning',
|
|
72
|
+
payload: {
|
|
73
|
+
phaseId: phase.id,
|
|
74
|
+
round,
|
|
75
|
+
role: 'doer',
|
|
76
|
+
agent: agentName,
|
|
77
|
+
lineage: phase.doer.lineage,
|
|
78
|
+
reason: preDoer.reason,
|
|
79
|
+
message: preDoer.message,
|
|
80
|
+
cta: preDoer.cta,
|
|
81
|
+
resetAt: preDoer.resetAt,
|
|
82
|
+
},
|
|
83
|
+
ts: Date.now(),
|
|
84
|
+
});
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const roundDir = path_1.default.join(chatDir, `round-${round}`);
|
|
89
|
+
const doerDir = path_1.default.join(roundDir, `doer-${agentName}`);
|
|
90
|
+
if (!fs_1.default.existsSync(doerDir)) {
|
|
91
|
+
fs_1.default.mkdirSync(doerDir, { recursive: true });
|
|
92
|
+
}
|
|
93
|
+
const askFile = path_1.default.join(doerDir, 'ask.md');
|
|
94
|
+
const answerFile = path_1.default.join(doerDir, 'answer.md');
|
|
95
|
+
// Resolve doer persona. Falls back to no-persona prompt when the id can't
|
|
96
|
+
// be resolved — emits cli_warning so the cockpit can surface the
|
|
97
|
+
// misconfiguration. Without the warning, retroactive PR #17 review
|
|
98
|
+
// (gemini + opencode-deepseek + opencode-kimi) flagged that a user
|
|
99
|
+
// typoing a persona id silently runs the chat with a generic prompt.
|
|
100
|
+
let doerPersonaPrompt;
|
|
101
|
+
if ('persona' in phase.doer && phase.doer.persona) {
|
|
102
|
+
const personaId = phase.doer.persona;
|
|
103
|
+
try {
|
|
104
|
+
const row = await index_js_1.personas.getById(personaId);
|
|
105
|
+
if (row) {
|
|
106
|
+
doerPersonaPrompt = row.system_prompt;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
onEvent({
|
|
110
|
+
chatId,
|
|
111
|
+
type: 'cli_warning',
|
|
112
|
+
payload: {
|
|
113
|
+
phaseId: phase.id,
|
|
114
|
+
phaseIdx,
|
|
115
|
+
round,
|
|
116
|
+
role: 'doer',
|
|
117
|
+
agent: agentName,
|
|
118
|
+
kind: 'persona_missing',
|
|
119
|
+
message: `Doer persona "${personaId}" not found in personas table — running with generic prompt. Check the template's doer.persona field.`,
|
|
120
|
+
},
|
|
121
|
+
ts: Date.now(),
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
127
|
+
onEvent({
|
|
128
|
+
chatId,
|
|
129
|
+
type: 'cli_warning',
|
|
130
|
+
payload: {
|
|
131
|
+
phaseId: phase.id,
|
|
132
|
+
phaseIdx,
|
|
133
|
+
round,
|
|
134
|
+
role: 'doer',
|
|
135
|
+
agent: agentName,
|
|
136
|
+
kind: 'persona_lookup_failed',
|
|
137
|
+
message: `Doer persona lookup for "${personaId}" failed: ${message} — running with generic prompt.`,
|
|
138
|
+
},
|
|
139
|
+
ts: Date.now(),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const ask = (0, prompt_builder_js_1.buildAsk)(phase, phaseIdx, round, work, phase.inputs, filesBlock, doerPersonaPrompt, priorRoundFeedback);
|
|
144
|
+
fs_1.default.writeFileSync(askFile, ask);
|
|
145
|
+
// When the chat was created with a repoPath, the doer's working tree
|
|
146
|
+
// becomes the user's repo (so it can read files + make real edits the
|
|
147
|
+
// ship phase will commit). Reviewers always stay in scratch — they're
|
|
148
|
+
// not allowed to write to the user's repo. ask.md/answer.md still live
|
|
149
|
+
// in the chat dir for artifact viewing.
|
|
150
|
+
const doerCwd = repoPath ?? doerDir;
|
|
151
|
+
// Transport branch: headless when settings + shim support it; else fall
|
|
152
|
+
// through to tmux. Mixed-mode in a single chat is OK — Claude can run
|
|
153
|
+
// headless while a Gemini reviewer falls back to tmux.
|
|
154
|
+
//
|
|
155
|
+
// Per-slot model fallback: phase.doer.models can list multiple models.
|
|
156
|
+
// The chain extends with template.fallback.doer (same lineage, dedup'd).
|
|
157
|
+
// Doer has only one slot, so the dedup just guards against re-trying
|
|
158
|
+
// the slot's own model.
|
|
159
|
+
const transport = await (0, transport_js_1.getTransport)();
|
|
160
|
+
if (transport === 'headless' && shim.runHeadless) {
|
|
161
|
+
const handle = participantAborts.register(chatId, participantAborts.participantKey('doer', agentName), abortSignal);
|
|
162
|
+
try {
|
|
163
|
+
const doerSlot = {
|
|
164
|
+
lineage: phase.doer.lineage,
|
|
165
|
+
models: phase.doer.models ?? [],
|
|
166
|
+
};
|
|
167
|
+
const chain = (0, template_fallback_js_1.buildSlotFallbackChain)(doerSlot, [doerSlot], templateFallbackDoer);
|
|
168
|
+
return await (0, run_with_fallback_js_1.runWithChainFallback)(chain, async (entry) => {
|
|
169
|
+
// Cross-lineage swap: when the entry's lineage differs from the
|
|
170
|
+
// doer's primary, re-resolve the shim. Slot identity (agentName,
|
|
171
|
+
// doerDir) stays bound to the primary lineage; cli_warning below
|
|
172
|
+
// surfaces the swap to the cockpit.
|
|
173
|
+
const entryShim = entry.lineage === phase.doer.lineage
|
|
174
|
+
? shim
|
|
175
|
+
: (0, index_js_2.pickShimForVoice)(entry.lineage, entry.model);
|
|
176
|
+
return (0, doer_js_1.runDoerHeadless)({
|
|
177
|
+
shim: entryShim,
|
|
178
|
+
chatId,
|
|
179
|
+
phase,
|
|
180
|
+
round,
|
|
181
|
+
agentName,
|
|
182
|
+
askContent: ask,
|
|
183
|
+
answerFile,
|
|
184
|
+
doerCwd,
|
|
185
|
+
abortSignal: handle.signal,
|
|
186
|
+
onEvent,
|
|
187
|
+
modelOverride: entry.model,
|
|
188
|
+
});
|
|
189
|
+
}, (from, to, fromIdx) => {
|
|
190
|
+
const sameLineage = from.lineage === to.lineage;
|
|
191
|
+
const reason = sameLineage ? 'model_fallback' : 'lineage_fallback';
|
|
192
|
+
const message = sameLineage
|
|
193
|
+
? `Doer model "${from.model ?? '(default)'}" produced no answer; retrying with "${to.model ?? '(default)'}".`
|
|
194
|
+
: `Doer ${from.lineage}/${from.model ?? '(default)'} failed; switching to ${to.lineage}/${to.model ?? '(default)'} (cross-lineage fallback).`;
|
|
195
|
+
onEvent({
|
|
196
|
+
chatId,
|
|
197
|
+
type: 'cli_warning',
|
|
198
|
+
payload: {
|
|
199
|
+
phaseId: phase.id,
|
|
200
|
+
round,
|
|
201
|
+
role: 'doer',
|
|
202
|
+
agent: agentName,
|
|
203
|
+
reason,
|
|
204
|
+
fromLineage: from.lineage,
|
|
205
|
+
toLineage: to.lineage,
|
|
206
|
+
fromModel: from.model ?? '(default)',
|
|
207
|
+
toModel: to.model ?? '(default)',
|
|
208
|
+
fallbackIdx: fromIdx,
|
|
209
|
+
message,
|
|
210
|
+
},
|
|
211
|
+
ts: Date.now(),
|
|
212
|
+
});
|
|
213
|
+
// Persist to sidecar (see reviewer-driver.ts for rationale).
|
|
214
|
+
// doerDir is the chat-scoped scratch dir, used here even when
|
|
215
|
+
// doerCwd was overridden to the user's repo.
|
|
216
|
+
(0, swap_sidecar_js_1.appendSwapSidecar)(doerDir, {
|
|
217
|
+
round,
|
|
218
|
+
phaseId: phase.id,
|
|
219
|
+
role: 'doer',
|
|
220
|
+
agent: agentName,
|
|
221
|
+
reason,
|
|
222
|
+
fromLineage: from.lineage,
|
|
223
|
+
toLineage: to.lineage,
|
|
224
|
+
fromModel: from.model ?? '(default)',
|
|
225
|
+
toModel: to.model ?? '(default)',
|
|
226
|
+
fallbackIdx: fromIdx,
|
|
227
|
+
ts: Date.now(),
|
|
228
|
+
});
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
handle.release();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Acquire session — fresh per chat by default; reuses across rounds when
|
|
236
|
+
// template policy says so (shareSessionAcrossRounds, default true).
|
|
237
|
+
const perms = await (0, permissions_js_1.getPermissions)();
|
|
238
|
+
const sessionName = (0, sanitize_name_js_1.sanitizeName)(`chorus-${chatId}-${phase.id}-doer-${agentName}`);
|
|
239
|
+
const session = await tmuxMgr.acquire({
|
|
240
|
+
chatId,
|
|
241
|
+
phaseId: phase.id,
|
|
242
|
+
role: 'doer',
|
|
243
|
+
round,
|
|
244
|
+
shareSessionAcrossRounds: phase.iterate.shareSessionAcrossRounds,
|
|
245
|
+
shareSessionAcrossPhases: phase.iterate.shareSessionAcrossPhases,
|
|
246
|
+
shim,
|
|
247
|
+
spawnOpts: {
|
|
248
|
+
sessionName,
|
|
249
|
+
cwd: doerCwd,
|
|
250
|
+
model: phase.doer.models?.[0],
|
|
251
|
+
sandbox: perms.sandboxProfile,
|
|
252
|
+
autoApprove: perms.autoApprovePrompts,
|
|
253
|
+
networkAccess: perms.networkAccess,
|
|
254
|
+
},
|
|
255
|
+
agentName,
|
|
256
|
+
});
|
|
257
|
+
if (shim.clearKeys && shim.clearKeys.length > 0) {
|
|
258
|
+
tmuxMgr.sendKeys(session.name, [...shim.clearKeys]);
|
|
259
|
+
}
|
|
260
|
+
if (shim.preNudge)
|
|
261
|
+
shim.preNudge(session.name);
|
|
262
|
+
const prompt = shim.formatPrompt({
|
|
263
|
+
promptFile: askFile,
|
|
264
|
+
answerFile,
|
|
265
|
+
task: phase.title,
|
|
266
|
+
expectDoneSentinel: true,
|
|
267
|
+
});
|
|
268
|
+
// Wait for the CLI's TUI to finish cold-start before pasting. 6s covers
|
|
269
|
+
// Codex's slow cold-start (it auths + paints panels); shorter and the
|
|
270
|
+
// Enter we send below races against the input box being ready and gets
|
|
271
|
+
// eaten. Raise if a slower box still misses the prompt.
|
|
272
|
+
await new Promise((r) => setTimeout(r, 6000));
|
|
273
|
+
tmuxMgr.pasteBuffer(session.name, prompt);
|
|
274
|
+
// Small gap between paste and Enter so the TUI registers the paste before
|
|
275
|
+
// we submit.
|
|
276
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
277
|
+
tmuxMgr.sendKeys(session.name, ['Enter']);
|
|
278
|
+
// Poll capture-pane every 2s to surface known CLI failure modes while we
|
|
279
|
+
// wait for the answer file. The detector is stateful for opencode's
|
|
280
|
+
// sustained-error pattern.
|
|
281
|
+
const pollHandle = setInterval(() => {
|
|
282
|
+
try {
|
|
283
|
+
const pane = tmuxMgr.capturePane(session.name);
|
|
284
|
+
const err = errorDetector.inspect(session.name, phase.doer.lineage, pane);
|
|
285
|
+
if (err) {
|
|
286
|
+
const recoveryKeys = err.kind === 'permission_prompt' ? shim.recoverKeys?.permission_prompt : undefined;
|
|
287
|
+
if (recoveryKeys && recoveryKeys.length > 0) {
|
|
288
|
+
// Layer 2 recovery: navigate the dialog, emit a warning (not error),
|
|
289
|
+
// skip health recording — we recovered, no degradation.
|
|
290
|
+
tmuxMgr.sendKeys(session.name, [...recoveryKeys]);
|
|
291
|
+
onEvent({
|
|
292
|
+
chatId,
|
|
293
|
+
type: 'cli_warning',
|
|
294
|
+
payload: {
|
|
295
|
+
phaseId: phase.id,
|
|
296
|
+
round,
|
|
297
|
+
role: 'doer',
|
|
298
|
+
agent: agentName,
|
|
299
|
+
recovered: err.kind,
|
|
300
|
+
keys: [...recoveryKeys],
|
|
301
|
+
detail: err.detail,
|
|
302
|
+
},
|
|
303
|
+
ts: Date.now(),
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
// Fire-and-forget — recordHealth became async in the libsql
|
|
308
|
+
// migration. Inside a setInterval callback we can't await without
|
|
309
|
+
// changing the callback shape; explicit .catch keeps unhandled
|
|
310
|
+
// rejections off the process and preserves the pre-migration
|
|
311
|
+
// semantics (non-blocking health record).
|
|
312
|
+
(0, cli_health_js_1.recordHealth)({
|
|
313
|
+
lineage: phase.doer.lineage,
|
|
314
|
+
status: (0, cli_health_js_1.kindToStatus)(err.kind),
|
|
315
|
+
message: err.message,
|
|
316
|
+
resetAt: err.resetAt,
|
|
317
|
+
}).catch((healthErr) => {
|
|
318
|
+
console.error(`[chorus] recordHealth failed for ${phase.doer.lineage}:`, healthErr);
|
|
319
|
+
});
|
|
320
|
+
onEvent({
|
|
321
|
+
chatId,
|
|
322
|
+
type: 'cli_error',
|
|
323
|
+
payload: { phaseId: phase.id, round, role: 'doer', agent: agentName, error: err },
|
|
324
|
+
ts: Date.now(),
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
// ignore — the watcher will time out independently
|
|
331
|
+
}
|
|
332
|
+
}, 2000);
|
|
333
|
+
try {
|
|
334
|
+
return await (0, output_watcher_js_1.waitForAnswer)(answerFile, {
|
|
335
|
+
timeoutMs: phase.timeoutMs ?? template_schema_js_1.DEFAULT_TMUX_PHASE_TIMEOUT_MS,
|
|
336
|
+
doneSentinel: '## DONE',
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
catch {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
finally {
|
|
343
|
+
clearInterval(pollHandle);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
//# sourceMappingURL=doer-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doer-driver.js","sourceRoot":"","sources":["../../../src/daemon/runner/doer-driver.ts"],"names":[],"mappings":"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"}
|