chorus-codes 0.8.25 → 0.8.26

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.
Files changed (148) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +1 -1
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +3 -3
  5. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  6. package/.next/server/app/_global-error.html +1 -1
  7. package/.next/server/app/_global-error.rsc +1 -1
  8. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  9. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  14. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +2 -2
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/connect/page.js +1 -1
  24. package/.next/server/app/connect/page.js.nft.json +1 -1
  25. package/.next/server/app/connect/page_client-reference-manifest.js +1 -1
  26. package/.next/server/app/demo/[scenario]/page.js +1 -1
  27. package/.next/server/app/demo/[scenario]/page.js.nft.json +1 -1
  28. package/.next/server/app/demo/[scenario]/page_client-reference-manifest.js +1 -1
  29. package/.next/server/app/new/page.js +1 -1
  30. package/.next/server/app/new/page.js.nft.json +1 -1
  31. package/.next/server/app/new/page_client-reference-manifest.js +1 -1
  32. package/.next/server/app/new.html +1 -1
  33. package/.next/server/app/new.rsc +3 -3
  34. package/.next/server/app/new.segments/_full.segment.rsc +3 -3
  35. package/.next/server/app/new.segments/_head.segment.rsc +1 -1
  36. package/.next/server/app/new.segments/_index.segment.rsc +2 -2
  37. package/.next/server/app/new.segments/_tree.segment.rsc +2 -2
  38. package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +2 -2
  39. package/.next/server/app/new.segments/new.segment.rsc +1 -1
  40. package/.next/server/app/onboarding/page.js +1 -1
  41. package/.next/server/app/onboarding/page.js.nft.json +1 -1
  42. package/.next/server/app/onboarding/page_client-reference-manifest.js +1 -1
  43. package/.next/server/app/onboarding.html +1 -1
  44. package/.next/server/app/onboarding.rsc +3 -3
  45. package/.next/server/app/onboarding.segments/_full.segment.rsc +3 -3
  46. package/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
  47. package/.next/server/app/onboarding.segments/_index.segment.rsc +2 -2
  48. package/.next/server/app/onboarding.segments/_tree.segment.rsc +2 -2
  49. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +2 -2
  50. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
  51. package/.next/server/app/page.js +2 -2
  52. package/.next/server/app/page.js.nft.json +1 -1
  53. package/.next/server/app/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/personas/page.js +1 -1
  55. package/.next/server/app/personas/page.js.nft.json +1 -1
  56. package/.next/server/app/personas/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/personas.html +1 -1
  58. package/.next/server/app/personas.rsc +3 -3
  59. package/.next/server/app/personas.segments/_full.segment.rsc +3 -3
  60. package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
  61. package/.next/server/app/personas.segments/_index.segment.rsc +2 -2
  62. package/.next/server/app/personas.segments/_tree.segment.rsc +2 -2
  63. package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +2 -2
  64. package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
  65. package/.next/server/app/runs/[runId]/page.js +2 -2
  66. package/.next/server/app/runs/[runId]/page.js.nft.json +1 -1
  67. package/.next/server/app/runs/[runId]/page_client-reference-manifest.js +1 -1
  68. package/.next/server/app/runs/page.js +2 -2
  69. package/.next/server/app/runs/page.js.nft.json +1 -1
  70. package/.next/server/app/runs/page_client-reference-manifest.js +1 -1
  71. package/.next/server/app/settings/page.js +3 -3
  72. package/.next/server/app/settings/page.js.nft.json +1 -1
  73. package/.next/server/app/settings/page_client-reference-manifest.js +1 -1
  74. package/.next/server/app/settings/permissions/page.js +1 -1
  75. package/.next/server/app/settings/permissions/page.js.nft.json +1 -1
  76. package/.next/server/app/settings/permissions/page_client-reference-manifest.js +1 -1
  77. package/.next/server/app/settings.html +1 -1
  78. package/.next/server/app/settings.rsc +3 -3
  79. package/.next/server/app/settings.segments/_full.segment.rsc +3 -3
  80. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  81. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  82. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  83. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +2 -2
  84. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  85. package/.next/server/app/templates/page.js +2 -2
  86. package/.next/server/app/templates/page.js.nft.json +1 -1
  87. package/.next/server/app/templates/page_client-reference-manifest.js +1 -1
  88. package/.next/server/app/templates.html +1 -1
  89. package/.next/server/app/templates.rsc +3 -3
  90. package/.next/server/app/templates.segments/_full.segment.rsc +3 -3
  91. package/.next/server/app/templates.segments/_head.segment.rsc +1 -1
  92. package/.next/server/app/templates.segments/_index.segment.rsc +2 -2
  93. package/.next/server/app/templates.segments/_tree.segment.rsc +2 -2
  94. package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +2 -2
  95. package/.next/server/app/templates.segments/templates.segment.rsc +1 -1
  96. package/.next/server/app-paths-manifest.json +1 -1
  97. package/.next/server/chunks/189.js +1 -0
  98. package/.next/server/chunks/{144.js → 21.js} +1 -1
  99. package/.next/server/chunks/{668.js → 313.js} +1 -1
  100. package/.next/server/chunks/681.js +1 -1
  101. package/.next/server/middleware-build-manifest.js +1 -1
  102. package/.next/server/pages/404.html +1 -1
  103. package/.next/server/pages/500.html +1 -1
  104. package/.next/server/server-reference-manifest.json +1 -1
  105. package/.next/static/chunks/249-2e840495c38ee022.js +25 -0
  106. package/.next/static/chunks/641-2908cb9553b8753a.js +1 -0
  107. package/.next/static/chunks/690-092c26db4082d49a.js +1 -0
  108. package/.next/static/chunks/app/connect/{page-a3a0af374f90ad4c.js → page-ad4409761e870bd0.js} +1 -1
  109. package/.next/static/chunks/app/demo/[scenario]/{page-6a0e4aec4bb96fee.js → page-39673968f543c473.js} +1 -1
  110. package/.next/static/chunks/app/new/{page-b96d75506030acf8.js → page-b5f609ab9413ac00.js} +1 -1
  111. package/.next/static/chunks/app/onboarding/{page-4be5a1d944e32672.js → page-8b0850fef487abdc.js} +1 -1
  112. package/.next/static/chunks/app/{page-35375a7c8b3d117a.js → page-9bdbaad592d0ce56.js} +1 -1
  113. package/.next/static/chunks/app/personas/{page-3884f8907107a4e6.js → page-440c6033a773100c.js} +1 -1
  114. package/.next/static/chunks/app/runs/[runId]/{page-b5bcf0c093389207.js → page-ffc36f12f1b63ebe.js} +1 -1
  115. package/.next/static/chunks/app/runs/{page-376175c1ac803558.js → page-6962ea572c9e4b74.js} +1 -1
  116. package/.next/static/chunks/app/settings/page-ad7180ee0d142704.js +25 -0
  117. package/.next/static/chunks/app/settings/permissions/{page-c90795aa9299bbe8.js → page-cd767401ac71a29c.js} +1 -1
  118. package/.next/static/chunks/app/templates/page-0112ab3c7ab5185d.js +1 -0
  119. package/.next/static/css/df4972a256406ec7.css +3 -0
  120. package/.next/trace +20 -20
  121. package/.next/trace-build +1 -1
  122. package/dist/daemon/cli-semaphore.js +266 -0
  123. package/dist/daemon/cli-semaphore.js.map +1 -0
  124. package/dist/daemon/routes/settings.js +39 -0
  125. package/dist/daemon/routes/settings.js.map +1 -1
  126. package/dist/daemon/runner/doer-driver.js +243 -214
  127. package/dist/daemon/runner/doer-driver.js.map +1 -1
  128. package/dist/daemon/runner/reviewer-driver.js +299 -255
  129. package/dist/daemon/runner/reviewer-driver.js.map +1 -1
  130. package/dist/daemon/runner.js +19 -0
  131. package/dist/daemon/runner.js.map +1 -1
  132. package/dist/lib/db/chats.js +28 -0
  133. package/dist/lib/db/chats.js.map +1 -1
  134. package/dist/lib/db/connection.js +6 -0
  135. package/dist/lib/db/connection.js.map +1 -1
  136. package/dist/lib/db/schema.sql +6 -0
  137. package/dist/lib/settings/concurrency.js +101 -0
  138. package/dist/lib/settings/concurrency.js.map +1 -0
  139. package/package.json +1 -1
  140. package/.next/server/chunks/946.js +0 -1
  141. package/.next/static/chunks/116-8bf7e014066cedde.js +0 -25
  142. package/.next/static/chunks/15-d438a2b057302bed.js +0 -1
  143. package/.next/static/chunks/641-60721f44faf711b9.js +0 -1
  144. package/.next/static/chunks/app/settings/page-1792a3e289409b2d.js +0 -25
  145. package/.next/static/chunks/app/templates/page-1449b0aea2e7cb68.js +0 -1
  146. package/.next/static/css/d2bb161eb5bee944.css +0 -3
  147. /package/.next/static/{47MSfijpKVM6q0E0ye9Mr → eOeXty5cBGWg7xnmtF6ST}/_buildManifest.js +0 -0
  148. /package/.next/static/{47MSfijpKVM6q0E0ye9Mr → eOeXty5cBGWg7xnmtF6ST}/_ssgManifest.js +0 -0
@@ -45,6 +45,8 @@ const cli_precheck_js_1 = require("../../lib/cli-precheck.js");
45
45
  const index_js_1 = require("../../lib/db/index.js");
46
46
  const permissions_js_1 = require("../../lib/settings/permissions.js");
47
47
  const transport_js_1 = require("../../lib/settings/transport.js");
48
+ const concurrency_js_1 = require("../../lib/settings/concurrency.js");
49
+ const cli_semaphore_js_1 = require("../cli-semaphore.js");
48
50
  const index_js_2 = require("../agents/index.js");
49
51
  const output_watcher_js_1 = require("../output-watcher.js");
50
52
  const participantAborts = __importStar(require("../participant-aborts.js"));
@@ -58,12 +60,13 @@ async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock
58
60
  const doerModel = phase.doer.models?.[0];
59
61
  const shim = (0, index_js_2.pickShimForVoice)(phase.doer.lineage, doerModel);
60
62
  const agentName = shim.name;
63
+ const isHttp = (0, index_js_2.isHttpDispatchedShim)(shim);
61
64
  // Pre-spawn precheck: short-circuit doomed runs without paying the spawn
62
65
  // tax. Two cheap layers: (1) recent quota_exhausted with future resetAt,
63
66
  // (2) credential file missing → user not logged in. HTTP-dispatched shims
64
67
  // (openrouter) skip this — their auth is the secrets table, checked
65
68
  // inside the shim itself.
66
- if (!(0, index_js_2.isHttpDispatchedShim)(shim)) {
69
+ if (!isHttp) {
67
70
  const preDoer = await (0, cli_precheck_js_1.precheckLineage)(phase.doer.lineage);
68
71
  if (!preDoer.ok) {
69
72
  onEvent({
@@ -85,6 +88,24 @@ async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock
85
88
  return null;
86
89
  }
87
90
  }
91
+ // Acquire daemon-wide CLI slot (global cap + per-lineage cap). Local
92
+ // CLI only — HTTP-dispatched shims (openrouter) bypass. The slot is
93
+ // held until the doer returns; cross-lineage fallback within the slot
94
+ // doesn't refresh the slot (conservative — see reviewer-driver for
95
+ // the same trade-off). The abortSignal lets a cancelled chat unwind
96
+ // a queued doer without blocking the semaphore head forever.
97
+ // The outer try/finally below guarantees release on every exit path.
98
+ let releaseSlot = null;
99
+ if (!isHttp && concurrency_js_1.CLI_LINEAGES.includes(agentName)) {
100
+ try {
101
+ releaseSlot = await (0, cli_semaphore_js_1.acquire)(agentName, abortSignal);
102
+ }
103
+ catch {
104
+ // Aborted while queued — bail without spawning. Phase loop
105
+ // already treats null doer return as "doer failed".
106
+ return null;
107
+ }
108
+ }
88
109
  const roundDir = path_1.default.join(chatDir, `round-${round}`);
89
110
  const doerDir = path_1.default.join(roundDir, `doer-${agentName}`);
90
111
  if (!fs_1.default.existsSync(doerDir)) {
@@ -92,20 +113,42 @@ async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock
92
113
  }
93
114
  const askFile = path_1.default.join(doerDir, 'ask.md');
94
115
  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;
116
+ // Outer try/finally guarantees the cli-semaphore slot is released on
117
+ // every exit path (return null, throw, headless return, tmux return).
118
+ // releaseSlot is null for HTTP shims; the optional-call is the guard.
119
+ try {
120
+ // Resolve doer persona. Falls back to no-persona prompt when the id can't
121
+ // be resolved — emits cli_warning so the cockpit can surface the
122
+ // misconfiguration. Without the warning, retroactive PR #17 review
123
+ // (gemini + opencode-deepseek + opencode-kimi) flagged that a user
124
+ // typoing a persona id silently runs the chat with a generic prompt.
125
+ let doerPersonaPrompt;
126
+ if ('persona' in phase.doer && phase.doer.persona) {
127
+ const personaId = phase.doer.persona;
128
+ try {
129
+ const row = await index_js_1.personas.getById(personaId);
130
+ if (row) {
131
+ doerPersonaPrompt = row.system_prompt;
132
+ }
133
+ else {
134
+ onEvent({
135
+ chatId,
136
+ type: 'cli_warning',
137
+ payload: {
138
+ phaseId: phase.id,
139
+ phaseIdx,
140
+ round,
141
+ role: 'doer',
142
+ agent: agentName,
143
+ kind: 'persona_missing',
144
+ message: `Doer persona "${personaId}" not found in personas table — running with generic prompt. Check the template's doer.persona field.`,
145
+ },
146
+ ts: Date.now(),
147
+ });
148
+ }
107
149
  }
108
- else {
150
+ catch (err) {
151
+ const message = err instanceof Error ? err.message : String(err);
109
152
  onEvent({
110
153
  chatId,
111
154
  type: 'cli_warning',
@@ -115,179 +158,65 @@ async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock
115
158
  round,
116
159
  role: 'doer',
117
160
  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.`,
161
+ kind: 'persona_lookup_failed',
162
+ message: `Doer persona lookup for "${personaId}" failed: ${message} — running with generic prompt.`,
120
163
  },
121
164
  ts: Date.now(),
122
165
  });
123
166
  }
124
167
  }
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,
168
+ const ask = (0, prompt_builder_js_1.buildAsk)(phase, phaseIdx, round, work, phase.inputs, filesBlock, doerPersonaPrompt, priorRoundFeedback);
169
+ fs_1.default.writeFileSync(askFile, ask);
170
+ // When the chat was created with a repoPath, the doer's working tree
171
+ // becomes the user's repo (so it can read files + make real edits the
172
+ // ship phase will commit). Reviewers always stay in scratch — they're
173
+ // not allowed to write to the user's repo. ask.md/answer.md still live
174
+ // in the chat dir for artifact viewing.
175
+ const doerCwd = repoPath ?? doerDir;
176
+ // Transport branch: headless when settings + shim support it; else fall
177
+ // through to tmux. Mixed-mode in a single chat is OK — Claude can run
178
+ // headless while a Gemini reviewer falls back to tmux.
179
+ //
180
+ // Per-slot model fallback: phase.doer.models can list multiple models.
181
+ // The chain extends with template.fallback.doer (same lineage, dedup'd).
182
+ // Doer has only one slot, so the dedup just guards against re-trying
183
+ // the slot's own model.
184
+ const transport = await (0, transport_js_1.getTransport)();
185
+ if (transport === 'headless' && shim.runHeadless) {
186
+ const handle = participantAborts.register(chatId, participantAborts.participantKey('doer', agentName), abortSignal);
187
+ try {
188
+ const doerSlot = {
189
+ lineage: phase.doer.lineage,
190
+ models: phase.doer.models ?? [],
191
+ };
192
+ const chain = (0, template_fallback_js_1.buildSlotFallbackChain)(doerSlot, [doerSlot], templateFallbackDoer);
193
+ return await (0, run_with_fallback_js_1.runWithChainFallback)(chain, async (entry) => {
194
+ // Cross-lineage swap: when the entry's lineage differs from the
195
+ // doer's primary, re-resolve the shim. Slot identity (agentName,
196
+ // doerDir) stays bound to the primary lineage; cli_warning below
197
+ // surfaces the swap to the cockpit.
198
+ const entryShim = entry.lineage === phase.doer.lineage
199
+ ? shim
200
+ : (0, index_js_2.pickShimForVoice)(entry.lineage, entry.model);
201
+ return (0, doer_js_1.runDoerHeadless)({
202
+ shim: entryShim,
203
+ chatId,
204
+ phase,
200
205
  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]);
206
+ agentName,
207
+ askContent: ask,
208
+ answerFile,
209
+ doerCwd,
210
+ abortSignal: handle.signal,
211
+ onEvent,
212
+ modelOverride: entry.model,
213
+ });
214
+ }, (from, to, fromIdx) => {
215
+ const sameLineage = from.lineage === to.lineage;
216
+ const reason = sameLineage ? 'model_fallback' : 'lineage_fallback';
217
+ const message = sameLineage
218
+ ? `Doer model "${from.model ?? '(default)'}" produced no answer; retrying with "${to.model ?? '(default)'}".`
219
+ : `Doer ${from.lineage}/${from.model ?? '(default)'} failed; switching to ${to.lineage}/${to.model ?? '(default)'} (cross-lineage fallback).`;
291
220
  onEvent({
292
221
  chatId,
293
222
  type: 'cli_warning',
@@ -296,51 +225,151 @@ async function runDoer(chatDir, chatId, phase, phaseIdx, round, work, filesBlock
296
225
  round,
297
226
  role: 'doer',
298
227
  agent: agentName,
299
- recovered: err.kind,
300
- keys: [...recoveryKeys],
301
- detail: err.detail,
228
+ reason,
229
+ fromLineage: from.lineage,
230
+ toLineage: to.lineage,
231
+ fromModel: from.model ?? '(default)',
232
+ toModel: to.model ?? '(default)',
233
+ fallbackIdx: fromIdx,
234
+ message,
302
235
  },
303
236
  ts: Date.now(),
304
237
  });
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 },
238
+ // Persist to sidecar (see reviewer-driver.ts for rationale).
239
+ // doerDir is the chat-scoped scratch dir, used here even when
240
+ // doerCwd was overridden to the user's repo.
241
+ (0, swap_sidecar_js_1.appendSwapSidecar)(doerDir, {
242
+ round,
243
+ phaseId: phase.id,
244
+ role: 'doer',
245
+ agent: agentName,
246
+ reason,
247
+ fromLineage: from.lineage,
248
+ toLineage: to.lineage,
249
+ fromModel: from.model ?? '(default)',
250
+ toModel: to.model ?? '(default)',
251
+ fallbackIdx: fromIdx,
324
252
  ts: Date.now(),
325
253
  });
254
+ });
255
+ }
256
+ finally {
257
+ handle.release();
258
+ }
259
+ }
260
+ // Acquire session — fresh per chat by default; reuses across rounds when
261
+ // template policy says so (shareSessionAcrossRounds, default true).
262
+ const perms = await (0, permissions_js_1.getPermissions)();
263
+ const sessionName = (0, sanitize_name_js_1.sanitizeName)(`chorus-${chatId}-${phase.id}-doer-${agentName}`);
264
+ const session = await tmuxMgr.acquire({
265
+ chatId,
266
+ phaseId: phase.id,
267
+ role: 'doer',
268
+ round,
269
+ shareSessionAcrossRounds: phase.iterate.shareSessionAcrossRounds,
270
+ shareSessionAcrossPhases: phase.iterate.shareSessionAcrossPhases,
271
+ shim,
272
+ spawnOpts: {
273
+ sessionName,
274
+ cwd: doerCwd,
275
+ model: phase.doer.models?.[0],
276
+ sandbox: perms.sandboxProfile,
277
+ autoApprove: perms.autoApprovePrompts,
278
+ networkAccess: perms.networkAccess,
279
+ },
280
+ agentName,
281
+ });
282
+ if (shim.clearKeys && shim.clearKeys.length > 0) {
283
+ tmuxMgr.sendKeys(session.name, [...shim.clearKeys]);
284
+ }
285
+ if (shim.preNudge)
286
+ shim.preNudge(session.name);
287
+ const prompt = shim.formatPrompt({
288
+ promptFile: askFile,
289
+ answerFile,
290
+ task: phase.title,
291
+ expectDoneSentinel: true,
292
+ });
293
+ // Wait for the CLI's TUI to finish cold-start before pasting. 6s covers
294
+ // Codex's slow cold-start (it auths + paints panels); shorter and the
295
+ // Enter we send below races against the input box being ready and gets
296
+ // eaten. Raise if a slower box still misses the prompt.
297
+ await new Promise((r) => setTimeout(r, 6000));
298
+ tmuxMgr.pasteBuffer(session.name, prompt);
299
+ // Small gap between paste and Enter so the TUI registers the paste before
300
+ // we submit.
301
+ await new Promise((r) => setTimeout(r, 500));
302
+ tmuxMgr.sendKeys(session.name, ['Enter']);
303
+ // Poll capture-pane every 2s to surface known CLI failure modes while we
304
+ // wait for the answer file. The detector is stateful for opencode's
305
+ // sustained-error pattern.
306
+ const pollHandle = setInterval(() => {
307
+ try {
308
+ const pane = tmuxMgr.capturePane(session.name);
309
+ const err = errorDetector.inspect(session.name, phase.doer.lineage, pane);
310
+ if (err) {
311
+ const recoveryKeys = err.kind === 'permission_prompt' ? shim.recoverKeys?.permission_prompt : undefined;
312
+ if (recoveryKeys && recoveryKeys.length > 0) {
313
+ // Layer 2 recovery: navigate the dialog, emit a warning (not error),
314
+ // skip health recording — we recovered, no degradation.
315
+ tmuxMgr.sendKeys(session.name, [...recoveryKeys]);
316
+ onEvent({
317
+ chatId,
318
+ type: 'cli_warning',
319
+ payload: {
320
+ phaseId: phase.id,
321
+ round,
322
+ role: 'doer',
323
+ agent: agentName,
324
+ recovered: err.kind,
325
+ keys: [...recoveryKeys],
326
+ detail: err.detail,
327
+ },
328
+ ts: Date.now(),
329
+ });
330
+ }
331
+ else {
332
+ // Fire-and-forget — recordHealth became async in the libsql
333
+ // migration. Inside a setInterval callback we can't await without
334
+ // changing the callback shape; explicit .catch keeps unhandled
335
+ // rejections off the process and preserves the pre-migration
336
+ // semantics (non-blocking health record).
337
+ (0, cli_health_js_1.recordHealth)({
338
+ lineage: phase.doer.lineage,
339
+ status: (0, cli_health_js_1.kindToStatus)(err.kind),
340
+ message: err.message,
341
+ resetAt: err.resetAt,
342
+ }).catch((healthErr) => {
343
+ console.error(`[chorus] recordHealth failed for ${phase.doer.lineage}:`, healthErr);
344
+ });
345
+ onEvent({
346
+ chatId,
347
+ type: 'cli_error',
348
+ payload: { phaseId: phase.id, round, role: 'doer', agent: agentName, error: err },
349
+ ts: Date.now(),
350
+ });
351
+ }
326
352
  }
327
353
  }
354
+ catch {
355
+ // ignore — the watcher will time out independently
356
+ }
357
+ }, 2000);
358
+ try {
359
+ return await (0, output_watcher_js_1.waitForAnswer)(answerFile, {
360
+ timeoutMs: phase.timeoutMs ?? template_schema_js_1.DEFAULT_TMUX_PHASE_TIMEOUT_MS,
361
+ doneSentinel: '## DONE',
362
+ });
328
363
  }
329
364
  catch {
330
- // ignore — the watcher will time out independently
365
+ return null;
366
+ }
367
+ finally {
368
+ clearInterval(pollHandle);
331
369
  }
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
370
  }
342
371
  finally {
343
- clearInterval(pollHandle);
372
+ releaseSlot?.();
344
373
  }
345
374
  }
346
375
  //# sourceMappingURL=doer-driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doer-driver.js","sourceRoot":"","sources":["../../../src/daemon/runner/doer-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doer-driver.js","sourceRoot":"","sources":["../../../src/daemon/runner/doer-driver.ts"],"names":[],"mappings":"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"}