@straiffi/archon 1.8.14 → 1.8.15
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/dist/client/assets/{ActivityView-DYDYyqIN.js → ActivityView-DpY9GZez.js} +1 -1
- package/dist/client/assets/{GitHubActionsDialog-jhi4GOyV.js → GitHubActionsDialog-BCr-hjvp.js} +1 -1
- package/dist/client/assets/{RepositoryGraphDialog-BZV0vHu6.js → RepositoryGraphDialog-_hm-x1Dx.js} +1 -1
- package/dist/client/assets/{VerificationDialog-Sc6e8AKH.js → VerificationDialog-CsjDzpE1.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DFbki8mi.js → architectureDiagram-3BPJPVTR-Dx7MJofM.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-BZFehG8P.js → blockDiagram-GPEHLZMM-CSSJR8F_.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-FVDXRu1t.js → c4Diagram-AAUBKEIU-C4F9969r.js} +1 -1
- package/dist/client/assets/channel-DVkhJzgx.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-4tuVZaT0.js → chunk-2J33WTMH-23HW6i-y.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-DSn14S35.js → chunk-3OPIFGDE-C3ZmRDMb.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-Cwx1KNjg.js → chunk-5ZQYHXKU-B_-UQvCg.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-Odza4hes.js → chunk-727SXJPM-5Dua6u1B.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-BmVoQT7M.js → chunk-AQP2D5EJ-DcpcaFRO.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-Bg7Ktx0B.js → chunk-CSCIHK7Q-CLCpOw52.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-2tnhar2x.js → chunk-KSCS5N6A-uOZFe2JI.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-dAyg8qMJ.js → chunk-L5ZTLDWV-DNnzSNoX.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-0gElxrlR.js → chunk-LZXEDZCA-CSA3Xnoh.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-Bu-8Lz91.js → chunk-ND2GUHAM-BQR5rD7w.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-CInZFdzd.js → chunk-NZK2D7GU-DyIwcQYQ.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-rAzpvdNR.js → chunk-O5CBEL6O-DfW60w5V.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-DOOw2vq7.js → chunk-WU5MYG2G-CzMMPYdi.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-6oZ93s5p.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DYO_YnkU.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-Dgua1iuh.js → dagre-BM42HDAG-Ba7Pz-ZI.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-odacwlwu.js → diagram-2AECGRRQ-BxYfgpZ6.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-BiKjFmJ1.js → diagram-5GNKFQAL-Bc4-O-UJ.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-CmYcvFri.js → diagram-KO2AKTUF-Ds1Lmrzm.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-ncx0RBuX.js → diagram-LMA3HP47-VFQabxKS.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DbchKIzw.js → diagram-OG6HWLK6-Baff59Zc.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CMnpvRyQ.js → erDiagram-TEJ5UH35-Da5zHjOK.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Bi02_PK5.js → flowDiagram-I6XJVG4X-pdGMAuog.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-BiS992US.js → ganttDiagram-6RSMTGT7-DjJGX0nm.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-Cc1hrTsT.js → gitGraphDiagram-PVQCEYII-kErlwtcT.js} +1 -1
- package/dist/client/assets/index-CS4TzG41.css +2 -0
- package/dist/client/assets/{index-B1gdJKwK.js → index-D5TEfELZ.js} +107 -107
- package/dist/client/assets/{infoDiagram-5YYISTIA-BKVfqJCe.js → infoDiagram-5YYISTIA-Bx78HhDi.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-B-IbFOty.js → ishikawaDiagram-YF4QCWOH-BP0YQCMl.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-DAZBgAQW.js → journeyDiagram-JHISSGLW-DUgrCOuD.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-Bkr_fXev.js → kanban-definition-UN3LZRKU-K0Zc5_M8.js} +1 -1
- package/dist/client/assets/{line-CROuuXDO.js → line-Dtg-krjk.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-DrBw_Rsc.js → mermaid-parser.core-Dw5BI77W.js} +1 -1
- package/dist/client/assets/{mermaid.core-pPd6OYYj.js → mermaid.core-BE-qlWNj.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-BXSd3TZU.js → mindmap-definition-RKZ34NQL-1Piz4H9I.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DoT7PIZC.js → pieDiagram-4H26LBE5-zlWdJ7lL.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-ycZkLowm.js → quadrantDiagram-W4KKPZXB-DRQY8Adp.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-BPkO1yLu.js → requirementDiagram-4Y6WPE33-B8_GJFxl.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-D7AvhhCw.js → sankeyDiagram-5OEKKPKP-BaI0Njo8.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-C982swnH.js → sequenceDiagram-3UESZ5HK-DjqAXbRF.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-xvJ3u8lc.js → stateDiagram-AJRCARHV-Ovr_3LeO.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-9pmeAorV.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-D89qjzb5.js → timeline-definition-PNZ67QCA-DkczYKeZ.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CoKeC__u.js → vennDiagram-CIIHVFJN-BZyo4ESi.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-DKhjzvSE.js → wardleyDiagram-YWT4CUSO-BEISrECX.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-DFn9ass1.js → xychartDiagram-2RQKCTM6-CyNzGK7f.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +2 -0
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +11 -42
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +61 -12
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentProvider.js +13 -3
- package/dist/server/lib/agentProvider.js.map +1 -1
- package/dist/server/lib/agentRuns.js +20 -9
- package/dist/server/lib/agentRuns.js.map +1 -1
- package/dist/server/lib/chatOperations.js +30 -1
- package/dist/server/lib/chatOperations.js.map +1 -1
- package/dist/server/lib/git.js +32 -1
- package/dist/server/lib/git.js.map +1 -1
- package/dist/server/lib/lightweightPrompt.js +1 -0
- package/dist/server/lib/lightweightPrompt.js.map +1 -1
- package/dist/server/lib/opencodeExecutionReliability.js +52 -0
- package/dist/server/lib/opencodeExecutionReliability.js.map +1 -0
- package/dist/server/lib/opencodeSessionOperations.js +21 -11
- package/dist/server/lib/opencodeSessionOperations.js.map +1 -1
- package/dist/server/lib/projectAutoConfig.js +1 -0
- package/dist/server/lib/projectAutoConfig.js.map +1 -1
- package/dist/server/lib/specArtifact.js +19 -0
- package/dist/server/lib/specArtifact.js.map +1 -1
- package/dist/server/lib/specBundleGroups.js +151 -0
- package/dist/server/lib/specBundleGroups.js.map +1 -0
- package/dist/server/lib/specExport.js +1 -0
- package/dist/server/lib/specExport.js.map +1 -1
- package/dist/server/lib/specFormatting.js +13 -0
- package/dist/server/lib/specFormatting.js.map +1 -1
- package/dist/server/lib/specReviewValidation.js +22 -1
- package/dist/server/lib/specReviewValidation.js.map +1 -1
- package/dist/server/lib/specReviews.js +1 -1
- package/dist/server/lib/specSections.js +8 -1
- package/dist/server/lib/specSections.js.map +1 -1
- package/dist/server/lib/specTicketMaterialization.js +119 -0
- package/dist/server/lib/specTicketMaterialization.js.map +1 -0
- package/dist/server/lib/specs.js +27 -5
- package/dist/server/lib/specs.js.map +1 -1
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/workers/followUp.js +25 -4
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/plan.js +23 -2
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/review.js +29 -10
- package/dist/server/workers/review.js.map +1 -1
- package/dist/server/workers/specReview.js +7 -1
- package/dist/server/workers/specReview.js.map +1 -1
- package/dist/server/workers/specSession.js +68 -36
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/channel-D1kOpezG.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C253nwny.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-DFgDA23g.js +0 -1
- package/dist/client/assets/index-CCQwWUKF.css +0 -2
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BKQG8NCn.js +0 -1
package/dist/server/lib/agent.js
CHANGED
|
@@ -8,6 +8,7 @@ import { normalizeClaudeModelId, normalizeModelId } from './models.js';
|
|
|
8
8
|
import { createOpencodeTaskSessionReader, parseOpencodeTaskEnvelope } from './opencodeTaskSessions.js';
|
|
9
9
|
import { hostOpencodeSessionOperations } from './opencodeSessionOperations.js';
|
|
10
10
|
import { hostExecutionEnvironment } from './hostExecutionEnvironment.js';
|
|
11
|
+
import { markRetryableOpenCodeDatabaseLock, RetryableOpenCodeDatabaseLockError, retryOpenCodeDatabaseLocks } from './opencodeExecutionReliability.js';
|
|
11
12
|
import { claudeAgentProvider } from './claudeAgentProvider.js';
|
|
12
13
|
import { buildOpencodeSpecReviewInvocation, createOpencodeExitError, createOpencodeRecoveryTracker, interpretOpencodeRecoveryEvent, isSuccessfulOpencodeExit, opencodeAgentProvider, } from './opencodeAgentProvider.js';
|
|
13
14
|
import { appendClaudeHeadlessPlanPrompt, buildClaudeHeadlessPlanArgs } from './planModeQuestions.js';
|
|
@@ -49,6 +50,7 @@ export const getAgentErrorTranscriptRuns = (error) => {
|
|
|
49
50
|
};
|
|
50
51
|
const OPENCODE_SESSION_METADATA_LOOKUP_DELAY_MS = 1500;
|
|
51
52
|
const AGENT_PROGRESS_UPDATE_INTERVAL_MS = 100;
|
|
53
|
+
const OPENCODE_SUBAGENT_POLL_INTERVAL_MS = 750;
|
|
52
54
|
const resolveAgentModel = (tool, model) => {
|
|
53
55
|
if (tool === 'claude') {
|
|
54
56
|
return normalizeClaudeModelId(model) || null;
|
|
@@ -1486,7 +1488,7 @@ export const readOpencodeSessionTranscript = ({ sessionId, since, cwd, }) => {
|
|
|
1486
1488
|
reader.close();
|
|
1487
1489
|
}
|
|
1488
1490
|
};
|
|
1489
|
-
export const createOpencodeSubagentMonitor = ({ initialParentSessionId, spawnTimestamp, cwd, tracker, onParentSessionId, taskSessionReader, discoverParentSession = true, }) => {
|
|
1491
|
+
export const createOpencodeSubagentMonitor = ({ initialParentSessionId, spawnTimestamp, cwd, tracker, onParentSessionId, taskSessionReader, discoverParentSession = true, parentDiscoveryDelayMs = 0, }) => {
|
|
1490
1492
|
const reader = taskSessionReader === undefined ? createOpencodeTaskSessionReader() : taskSessionReader;
|
|
1491
1493
|
let parentSessionId = initialParentSessionId;
|
|
1492
1494
|
let timer = null;
|
|
@@ -1529,7 +1531,7 @@ export const createOpencodeSubagentMonitor = ({ initialParentSessionId, spawnTim
|
|
|
1529
1531
|
return;
|
|
1530
1532
|
}
|
|
1531
1533
|
try {
|
|
1532
|
-
if (!parentSessionId && discoverParentSession) {
|
|
1534
|
+
if (!parentSessionId && discoverParentSession && Date.now() >= spawnTimestamp + parentDiscoveryDelayMs) {
|
|
1533
1535
|
setParentSessionId(reader.findParentSessionSince(spawnTimestamp));
|
|
1534
1536
|
}
|
|
1535
1537
|
if (!parentSessionId) {
|
|
@@ -1562,7 +1564,7 @@ export const createOpencodeSubagentMonitor = ({ initialParentSessionId, spawnTim
|
|
|
1562
1564
|
return;
|
|
1563
1565
|
}
|
|
1564
1566
|
refresh();
|
|
1565
|
-
timer = setInterval(refresh,
|
|
1567
|
+
timer = setInterval(refresh, OPENCODE_SUBAGENT_POLL_INTERVAL_MS);
|
|
1566
1568
|
timer.unref?.();
|
|
1567
1569
|
};
|
|
1568
1570
|
const stop = () => {
|
|
@@ -1864,7 +1866,7 @@ export const stopSpecReviewAgent = async (specReviewRunId) => {
|
|
|
1864
1866
|
}
|
|
1865
1867
|
return true;
|
|
1866
1868
|
};
|
|
1867
|
-
|
|
1869
|
+
const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null, resumeSessionId = null, sessionField = 'session_id', trackBuildProcess = false, reviewProcessState, emitSuccessUpdate = true, opencodeAgentMode, runStream, executionContext, persistSessionIdToTicket = false, spawnPermitId, executionProvider = hostExecutionEnvironment, }) => {
|
|
1868
1870
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
1869
1871
|
const subagentTracker = createSubagentRunTracker({
|
|
1870
1872
|
parentType: 'ticket',
|
|
@@ -2244,6 +2246,13 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2244
2246
|
const error = resumeSessionId && !executionCapableEventObserved && isTypedPreExecutionContinuationRejection(failureMessage)
|
|
2245
2247
|
? new AgentContinuationRejectedError(failureMessage)
|
|
2246
2248
|
: createOpencodeExitError(failureMessage, stderrModelError, recoveryTracker);
|
|
2249
|
+
const retryableError = !executionCapableEventObserved && !sessionId
|
|
2250
|
+
? markRetryableOpenCodeDatabaseLock(error)
|
|
2251
|
+
: error;
|
|
2252
|
+
if (retryableError instanceof RetryableOpenCodeDatabaseLockError) {
|
|
2253
|
+
rejectOnce(retryableError);
|
|
2254
|
+
return;
|
|
2255
|
+
}
|
|
2247
2256
|
const transcriptRuns = finalizeRun('error', log, finalResponse);
|
|
2248
2257
|
rejectOnce(attachTranscriptRunsToError(error, transcriptRuns));
|
|
2249
2258
|
});
|
|
@@ -2264,7 +2273,11 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2264
2273
|
});
|
|
2265
2274
|
});
|
|
2266
2275
|
};
|
|
2267
|
-
export const
|
|
2276
|
+
export const runAgent = (options) => {
|
|
2277
|
+
const run = () => runAgentOnce(options);
|
|
2278
|
+
return options.tool === 'opencode' ? retryOpenCodeDatabaseLocks(run) : run();
|
|
2279
|
+
};
|
|
2280
|
+
const runChatAgentOnce = ({ chatSessionId, tool, prompt, files = [], cwd, io, model, variant = null, resumeSessionId = null, opencodeAgentMode = 'build', executionContext, mainRun, spawnPermitId, }) => {
|
|
2268
2281
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
2269
2282
|
const subagentTracker = createSubagentRunTracker({
|
|
2270
2283
|
parentType: 'chat',
|
|
@@ -2631,11 +2644,18 @@ export const runChatAgent = ({ chatSessionId, tool, prompt, files = [], cwd, io,
|
|
|
2631
2644
|
}, transcriptRuns));
|
|
2632
2645
|
return;
|
|
2633
2646
|
}
|
|
2634
|
-
updateChatSessionStatus(chatSessionId, 'error', log, io, finalResponse);
|
|
2635
2647
|
const failureMessage = `Agent exited with code ${code ?? 'null'}\n${log}${stderrOutput !== log && stderrOutput ? '\n\n' + stderrOutput : ''}`;
|
|
2636
2648
|
const error = resumeSessionId && !executionCapableEventObserved && isTypedPreExecutionContinuationRejection(failureMessage)
|
|
2637
2649
|
? new AgentContinuationRejectedError(failureMessage)
|
|
2638
2650
|
: createOpencodeExitError(failureMessage, stderrModelError, recoveryTracker);
|
|
2651
|
+
const retryableError = !executionCapableEventObserved
|
|
2652
|
+
? markRetryableOpenCodeDatabaseLock(error)
|
|
2653
|
+
: error;
|
|
2654
|
+
if (retryableError instanceof RetryableOpenCodeDatabaseLockError) {
|
|
2655
|
+
rejectOnce(retryableError);
|
|
2656
|
+
return;
|
|
2657
|
+
}
|
|
2658
|
+
updateChatSessionStatus(chatSessionId, 'error', log, io, finalResponse);
|
|
2639
2659
|
const transcriptRuns = subagentTracker.finalize('error', log, finalResponse);
|
|
2640
2660
|
rejectOnce(attachTranscriptRunsToError(error, transcriptRuns));
|
|
2641
2661
|
});
|
|
@@ -2665,7 +2685,11 @@ export const runChatAgent = ({ chatSessionId, tool, prompt, files = [], cwd, io,
|
|
|
2665
2685
|
});
|
|
2666
2686
|
});
|
|
2667
2687
|
};
|
|
2668
|
-
export const
|
|
2688
|
+
export const runChatAgent = (options) => {
|
|
2689
|
+
const run = () => runChatAgentOnce(options);
|
|
2690
|
+
return options.tool === 'opencode' ? retryOpenCodeDatabaseLocks(run) : run();
|
|
2691
|
+
};
|
|
2692
|
+
const runSpecAgentOnce = ({ specSessionId, tool, prompt, files = [], cwd, io, model, variant = null, resumeSessionId = null, executionContext, mainRun, }) => {
|
|
2669
2693
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
2670
2694
|
const subagentTracker = createSubagentRunTracker({
|
|
2671
2695
|
parentType: 'spec',
|
|
@@ -3005,10 +3029,18 @@ export const runSpecAgent = ({ specSessionId, tool, prompt, files = [], cwd, io,
|
|
|
3005
3029
|
}, transcriptRuns));
|
|
3006
3030
|
return;
|
|
3007
3031
|
}
|
|
3032
|
+
const failureMessage = `Agent exited with code ${code ?? 'null'}\n${log}${stderrOutput !== log && stderrOutput ? '\n\n' + stderrOutput : ''}`;
|
|
3033
|
+
const error = createOpencodeExitError(failureMessage, stderrModelError, recoveryTracker);
|
|
3034
|
+
const retryableError = logLines.length === 0 && responseLines.length === 0
|
|
3035
|
+
? markRetryableOpenCodeDatabaseLock(error)
|
|
3036
|
+
: error;
|
|
3037
|
+
if (retryableError instanceof RetryableOpenCodeDatabaseLockError) {
|
|
3038
|
+
rejectOnce(retryableError);
|
|
3039
|
+
return;
|
|
3040
|
+
}
|
|
3008
3041
|
updateSpecSessionStatusLocal(specSessionId, 'error', log, io, finalResponse);
|
|
3009
3042
|
const transcriptRuns = subagentTracker.finalize('error', log, finalResponse);
|
|
3010
|
-
|
|
3011
|
-
rejectOnce(attachTranscriptRunsToError(createOpencodeExitError(failureMessage, stderrModelError, recoveryTracker), transcriptRuns));
|
|
3043
|
+
rejectOnce(attachTranscriptRunsToError(error, transcriptRuns));
|
|
3012
3044
|
});
|
|
3013
3045
|
child.on('error', err => {
|
|
3014
3046
|
progressUpdater.cancel();
|
|
@@ -3036,6 +3068,10 @@ export const runSpecAgent = ({ specSessionId, tool, prompt, files = [], cwd, io,
|
|
|
3036
3068
|
});
|
|
3037
3069
|
});
|
|
3038
3070
|
};
|
|
3071
|
+
export const runSpecAgent = (options) => {
|
|
3072
|
+
const run = () => runSpecAgentOnce(options);
|
|
3073
|
+
return options.tool === 'opencode' ? retryOpenCodeDatabaseLocks(run) : run();
|
|
3074
|
+
};
|
|
3039
3075
|
/**
|
|
3040
3076
|
* Focused, decoupled runner for a one-shot Spec Review.
|
|
3041
3077
|
*
|
|
@@ -3046,7 +3082,7 @@ export const runSpecAgent = ({ specSessionId, tool, prompt, files = [], cwd, io,
|
|
|
3046
3082
|
* updateSpecReviewRunStatus / updateSpecReviewRunStreaming / updateSpecReviewRunUsage —
|
|
3047
3083
|
* the spec_sessions row is never touched by this path.
|
|
3048
3084
|
*/
|
|
3049
|
-
|
|
3085
|
+
const runSpecReviewAgentOnce = ({ specReviewRunId, specSessionId, tool, prompt, files = [], cwd, io, model, variant = null, executionContext, }) => {
|
|
3050
3086
|
const registeredState = activeSpecReviewProcesses.get(specReviewRunId);
|
|
3051
3087
|
if (registeredState?.stopRequested) {
|
|
3052
3088
|
return Promise.resolve({
|
|
@@ -3150,6 +3186,7 @@ export const runSpecReviewAgent = ({ specReviewRunId, specSessionId, tool, promp
|
|
|
3150
3186
|
spawnTimestamp,
|
|
3151
3187
|
cwd,
|
|
3152
3188
|
tracker: subagentTracker,
|
|
3189
|
+
parentDiscoveryDelayMs: OPENCODE_SESSION_METADATA_LOOKUP_DELAY_MS,
|
|
3153
3190
|
});
|
|
3154
3191
|
opencodeSubagentMonitor.start();
|
|
3155
3192
|
}
|
|
@@ -3322,9 +3359,17 @@ export const runSpecReviewAgent = ({ specReviewRunId, specSessionId, tool, promp
|
|
|
3322
3359
|
});
|
|
3323
3360
|
return;
|
|
3324
3361
|
}
|
|
3325
|
-
subagentTracker.finalize('error', log || null, finalResponse || null);
|
|
3326
3362
|
const failureMessage = `Agent exited with code ${code ?? 'null'}\n${log}${stderrOutput !== log && stderrOutput ? '\n\n' + stderrOutput : ''}`;
|
|
3327
|
-
|
|
3363
|
+
const error = createOpencodeExitError(failureMessage, stderrModelError, recoveryTracker);
|
|
3364
|
+
const retryableError = logLines.length === 0 && responseLines.length === 0 && !opencodeSessionId
|
|
3365
|
+
? markRetryableOpenCodeDatabaseLock(error)
|
|
3366
|
+
: error;
|
|
3367
|
+
if (retryableError instanceof RetryableOpenCodeDatabaseLockError) {
|
|
3368
|
+
rejectOnce(retryableError);
|
|
3369
|
+
return;
|
|
3370
|
+
}
|
|
3371
|
+
subagentTracker.finalize('error', log || null, finalResponse || null);
|
|
3372
|
+
rejectOnce(error);
|
|
3328
3373
|
});
|
|
3329
3374
|
child.on('error', err => {
|
|
3330
3375
|
progressUpdater.cancel();
|
|
@@ -3350,4 +3395,8 @@ export const runSpecReviewAgent = ({ specReviewRunId, specSessionId, tool, promp
|
|
|
3350
3395
|
});
|
|
3351
3396
|
});
|
|
3352
3397
|
};
|
|
3398
|
+
export const runSpecReviewAgent = (options) => {
|
|
3399
|
+
const run = () => runSpecReviewAgentOnce(options);
|
|
3400
|
+
return options.tool === 'opencode' ? retryOpenCodeDatabaseLocks(run) : run();
|
|
3401
|
+
};
|
|
3353
3402
|
//# sourceMappingURL=agent.js.map
|