@straiffi/archon 1.7.0 → 1.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/dist/client/assets/{GitHubActionsDialog-B9_WJBOp.js → GitHubActionsDialog-DAD5REmY.js} +1 -1
- package/dist/client/assets/{TestsDialog-DKvbjH_M.js → TestsDialog-B5NVrroq.js} +1 -1
- package/dist/client/assets/{TicketChangesModal-C8rFoKjY.js → TicketChangesModal-By-_gTGd.js} +1 -1
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-DXRSRLL9.js → architectureDiagram-3BPJPVTR-Do9nbC8v.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-D7EE6Dnv.js → blockDiagram-GPEHLZMM-DGGOLHF8.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-UhVzFafr.js → c4Diagram-AAUBKEIU-Bz7tQybs.js} +1 -1
- package/dist/client/assets/channel-Dd5Len0X.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-obbfylVr.js → chunk-2J33WTMH-CJO-GmWJ.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-DPVuS-uo.js → chunk-3OPIFGDE-DPAVagpC.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-Dsc03vy9.js → chunk-5ZQYHXKU-Cof75Mu7.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-COE-iq_Z.js → chunk-727SXJPM-COuPqQ8_.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-DnbAdr8m.js → chunk-AQP2D5EJ-CFj5KabW.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-DbTzC_WS.js → chunk-CSCIHK7Q-C4M6w5cT.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-xvviIayr.js → chunk-KSCS5N6A-ByaiwVue.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-DY4Q9Til.js → chunk-L5ZTLDWV-Cx5jeot9.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-Bbeq2DZs.js → chunk-LZXEDZCA-DmGtztud.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-CylX1p3K.js → chunk-ND2GUHAM-i3yuspqL.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-BTcALpQq.js → chunk-NZK2D7GU-CQ4E_jP4.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-Be_5dk2_.js → chunk-O5CBEL6O-D2g4VDCd.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-DXPsSM4Q.js → chunk-WU5MYG2G-exIu-zQ2.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-B7KUg6r8.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CQm-z5c4.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-CABUW7xK.js → dagre-BM42HDAG-DvF75yLZ.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-KvcNrpvf.js → diagram-2AECGRRQ-DFv0HxLL.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-DQV6-I4e.js → diagram-5GNKFQAL-C_LRir0-.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DYDk9roD.js → diagram-KO2AKTUF-DGZxRDRy.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-Da-0u-HG.js → diagram-LMA3HP47-UXt0uti4.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-CuD5eRBv.js → diagram-OG6HWLK6-CFbZS4n5.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-BL5dBE-b.js → erDiagram-TEJ5UH35-CfAwZDdf.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-Bke5cWs7.js → flowDiagram-I6XJVG4X-Cdgi5z3n.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-5OD-ayGn.js → ganttDiagram-6RSMTGT7-DOrkFkhu.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-7Cf6FVfO.js → gitGraphDiagram-PVQCEYII-cEox0peD.js} +1 -1
- package/dist/client/assets/index-BHq6-Eir.js +270 -0
- package/dist/client/assets/index-BxTc5qQT.css +2 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-BchMN9V-.js → infoDiagram-5YYISTIA-gm51u2Nn.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-D6TchjQy.js → ishikawaDiagram-YF4QCWOH-CjnoOIja.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-CwEcoeX-.js → journeyDiagram-JHISSGLW-Dlg4DsiO.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-S2V9CLGR.js → kanban-definition-UN3LZRKU-BU0XZaSd.js} +1 -1
- package/dist/client/assets/{line-DRheChzQ.js → line-Bert22-_.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-CN13XjLe.js → mermaid-parser.core-BvQSGDmL.js} +1 -1
- package/dist/client/assets/{mermaid.core-JhdSpoF5.js → mermaid.core--qSAHJRj.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-657TKwRB.js → mindmap-definition-RKZ34NQL-BgFIvWWD.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-DJ8eQ94X.js → pieDiagram-4H26LBE5-DGcbXD0M.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-GpYFqyb1.js → quadrantDiagram-W4KKPZXB-ClkBUeia.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-COZFWgq1.js → requirementDiagram-4Y6WPE33-B8CwGToU.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BdCHyfcQ.js → sankeyDiagram-5OEKKPKP-DTk3jL6B.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DAh3Ogx0.js → sequenceDiagram-3UESZ5HK-BQVrcnKf.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-Ck8Yie8_.js → stateDiagram-AJRCARHV-DD4yMZPB.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-C8yO6POT.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-kYr9DNtP.js → timeline-definition-PNZ67QCA-BnCBVqcd.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CC_SlRiC.js → vennDiagram-CIIHVFJN-BDmLMNXS.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-CZ17ccSN.js → wardleyDiagram-YWT4CUSO-DSLuQiEv.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-Blqaj-ci.js → xychartDiagram-2RQKCTM6-DAq_LA4r.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/index.js +15 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +54 -6
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/buildOpenQuestions.js +8 -0
- package/dist/server/lib/buildOpenQuestions.js.map +1 -1
- package/dist/server/lib/shutdown.js +2 -2
- package/dist/server/lib/shutdown.js.map +1 -1
- package/dist/server/lib/ticketOpenQuestions.js +30 -14
- package/dist/server/lib/ticketOpenQuestions.js.map +1 -1
- package/dist/server/lib/ticketRunOperations.js +24 -1
- package/dist/server/lib/ticketRunOperations.js.map +1 -1
- package/dist/server/lib/tickets.js +5 -2
- package/dist/server/lib/tickets.js.map +1 -1
- package/dist/server/workers/followUp.js +27 -15
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/review.js +65 -1
- package/dist/server/workers/review.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/channel-CNoEXkwa.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BgmK8-LI.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Dj5LqBjo.js +0 -1
- package/dist/client/assets/index-D8EniXuq.css +0 -2
- package/dist/client/assets/index-DXuxAAzf.js +0 -270
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-B6zibRqD.js +0 -1
package/dist/server/lib/agent.js
CHANGED
|
@@ -313,6 +313,7 @@ const hasMatchingUsageSnapshot = (current, next) => {
|
|
|
313
313
|
&& current.usage_snapshot_reasoning_tokens === next.usage_snapshot_reasoning_tokens;
|
|
314
314
|
};
|
|
315
315
|
const activeBuildProcesses = new Map();
|
|
316
|
+
const activeReviewProcesses = new Map();
|
|
316
317
|
const activeChatProcesses = new Map();
|
|
317
318
|
const activeSpecProcesses = new Map();
|
|
318
319
|
const activeSpecReviewProcesses = new Map();
|
|
@@ -1763,6 +1764,24 @@ const untrackSpecReviewProcess = (specReviewRunId, state) => {
|
|
|
1763
1764
|
state.metadataRefresher = null;
|
|
1764
1765
|
};
|
|
1765
1766
|
export const isBuildAgentRunning = (ticketId) => activeBuildProcesses.has(ticketId);
|
|
1767
|
+
export const registerReviewProcess = (ticketId) => {
|
|
1768
|
+
const state = { children: new Set(), stopRequested: false };
|
|
1769
|
+
activeReviewProcesses.set(ticketId, state);
|
|
1770
|
+
return state;
|
|
1771
|
+
};
|
|
1772
|
+
export const untrackReviewProcess = (ticketId, state) => {
|
|
1773
|
+
if (activeReviewProcesses.get(ticketId) === state) {
|
|
1774
|
+
activeReviewProcesses.delete(ticketId);
|
|
1775
|
+
}
|
|
1776
|
+
};
|
|
1777
|
+
export const isReviewAgentRunning = (ticketId) => activeReviewProcesses.has(ticketId);
|
|
1778
|
+
export const isReviewStopRequested = (ticketId) => {
|
|
1779
|
+
return activeReviewProcesses.get(ticketId)?.stopRequested === true;
|
|
1780
|
+
};
|
|
1781
|
+
export const stopAllReviewAgents = async () => {
|
|
1782
|
+
const ticketIds = [...activeReviewProcesses.keys()];
|
|
1783
|
+
await Promise.all(ticketIds.map(stopReviewAgent));
|
|
1784
|
+
};
|
|
1766
1785
|
export const stopAllBuildAgents = async () => {
|
|
1767
1786
|
const ticketIds = [...activeBuildProcesses.keys()];
|
|
1768
1787
|
await Promise.all(ticketIds.map(stopBuildAgent));
|
|
@@ -1781,6 +1800,24 @@ export const stopBuildAgent = async (ticketId) => {
|
|
|
1781
1800
|
}
|
|
1782
1801
|
return true;
|
|
1783
1802
|
};
|
|
1803
|
+
export const stopReviewAgent = async (ticketId) => {
|
|
1804
|
+
const state = activeReviewProcesses.get(ticketId);
|
|
1805
|
+
if (!state) {
|
|
1806
|
+
return false;
|
|
1807
|
+
}
|
|
1808
|
+
state.stopRequested = true;
|
|
1809
|
+
const children = [...state.children];
|
|
1810
|
+
for (const child of children) {
|
|
1811
|
+
killProcess(child, 'SIGTERM');
|
|
1812
|
+
}
|
|
1813
|
+
await Promise.all(children.map(child => waitForProcessExit(child, 5000)));
|
|
1814
|
+
const aliveChildren = children.filter(isProcessAlive);
|
|
1815
|
+
for (const child of aliveChildren) {
|
|
1816
|
+
killProcess(child, 'SIGKILL');
|
|
1817
|
+
}
|
|
1818
|
+
await Promise.all(aliveChildren.map(child => waitForProcessExit(child, 1000)));
|
|
1819
|
+
return true;
|
|
1820
|
+
};
|
|
1784
1821
|
export const stopChatAgent = async (chatSessionId) => {
|
|
1785
1822
|
const state = activeChatProcesses.get(chatSessionId);
|
|
1786
1823
|
if (!state?.child) {
|
|
@@ -1834,7 +1871,7 @@ export const stopSpecReviewAgent = async (specReviewRunId) => {
|
|
|
1834
1871
|
}
|
|
1835
1872
|
return true;
|
|
1836
1873
|
};
|
|
1837
|
-
export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = null, resumeSessionId = null, sessionField = 'session_id', trackBuildProcess = false, emitSuccessUpdate = true, opencodeAgentMode, runStream, }) => {
|
|
1874
|
+
export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = null, resumeSessionId = null, sessionField = 'session_id', trackBuildProcess = false, reviewProcessState, emitSuccessUpdate = true, opencodeAgentMode, runStream, }) => {
|
|
1838
1875
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
1839
1876
|
const subagentTracker = createSubagentRunTracker({
|
|
1840
1877
|
parentType: 'ticket',
|
|
@@ -1885,6 +1922,7 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
1885
1922
|
let settled = false;
|
|
1886
1923
|
let startTime = null;
|
|
1887
1924
|
let firstFinalAnswerTime = null;
|
|
1925
|
+
let reviewChild = null;
|
|
1888
1926
|
const buildState = trackBuildProcess
|
|
1889
1927
|
? { child: null, stopRequested: false, sessionLookupTimer: null }
|
|
1890
1928
|
: null;
|
|
@@ -1901,6 +1939,9 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
1901
1939
|
if (trackBuildProcess && buildState) {
|
|
1902
1940
|
untrackBuildProcess(ticketId, buildState);
|
|
1903
1941
|
}
|
|
1942
|
+
if (reviewChild) {
|
|
1943
|
+
reviewProcessState?.children.delete(reviewChild);
|
|
1944
|
+
}
|
|
1904
1945
|
handler(value);
|
|
1905
1946
|
};
|
|
1906
1947
|
const resolveOnce = settle(resolve);
|
|
@@ -1943,6 +1984,7 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
1943
1984
|
env: { ...process.env, PWD: cwd },
|
|
1944
1985
|
detached: process.platform !== 'win32',
|
|
1945
1986
|
});
|
|
1987
|
+
reviewChild = child;
|
|
1946
1988
|
if (tool === 'claude') {
|
|
1947
1989
|
const claudePrompt = opencodeAgentMode === 'plan'
|
|
1948
1990
|
? appendClaudeHeadlessPlanPrompt(prompt)
|
|
@@ -1953,6 +1995,12 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
1953
1995
|
buildState.child = child;
|
|
1954
1996
|
activeBuildProcesses.set(ticketId, buildState);
|
|
1955
1997
|
}
|
|
1998
|
+
if (reviewProcessState) {
|
|
1999
|
+
reviewProcessState.children.add(child);
|
|
2000
|
+
if (reviewProcessState.stopRequested) {
|
|
2001
|
+
killProcess(child, 'SIGTERM');
|
|
2002
|
+
}
|
|
2003
|
+
}
|
|
1956
2004
|
startTime = Date.now();
|
|
1957
2005
|
if (tool === 'opencode' && spawnTimestamp !== null) {
|
|
1958
2006
|
opencodeSubagentMonitor = createOpencodeSubagentMonitor({
|
|
@@ -2018,7 +2066,7 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2018
2066
|
const finalResponse = responseLines.join('\n\n') || errOutput;
|
|
2019
2067
|
const modelError = isModelResolutionError(finalLog);
|
|
2020
2068
|
const timing = startTime ? { totalMs: Date.now() - startTime } : null;
|
|
2021
|
-
if (buildState?.stopRequested) {
|
|
2069
|
+
if (buildState?.stopRequested || reviewProcessState?.stopRequested) {
|
|
2022
2070
|
const transcriptRuns = finalizeRun('stopped', finalLog, finalResponse);
|
|
2023
2071
|
resolveOnce(withTranscriptRuns({ response: finalResponse, responseTiming: timing, usageSnapshot }, transcriptRuns));
|
|
2024
2072
|
return;
|
|
@@ -2033,7 +2081,7 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2033
2081
|
});
|
|
2034
2082
|
child.on('error', err => {
|
|
2035
2083
|
progressUpdater.cancel();
|
|
2036
|
-
if (buildState?.stopRequested) {
|
|
2084
|
+
if (buildState?.stopRequested || reviewProcessState?.stopRequested) {
|
|
2037
2085
|
const transcriptRuns = finalizeRun('stopped', null, null);
|
|
2038
2086
|
resolveOnce(withTranscriptRuns({ response: null, responseTiming: null, usageSnapshot }, transcriptRuns));
|
|
2039
2087
|
return;
|
|
@@ -2117,8 +2165,8 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2117
2165
|
? recoveredResponse
|
|
2118
2166
|
: responseLines.join('\n\n') || stderrOutput;
|
|
2119
2167
|
const modelError = isModelResolutionError(log);
|
|
2120
|
-
const timing = buildResponseTiming({ startTime, firstFinalAnswerTime, isStopped: Boolean(buildState?.stopRequested) });
|
|
2121
|
-
if (buildState?.stopRequested) {
|
|
2168
|
+
const timing = buildResponseTiming({ startTime, firstFinalAnswerTime, isStopped: Boolean(buildState?.stopRequested || reviewProcessState?.stopRequested) });
|
|
2169
|
+
if (buildState?.stopRequested || reviewProcessState?.stopRequested) {
|
|
2122
2170
|
const transcriptRuns = finalizeRun('stopped', log, finalResponse);
|
|
2123
2171
|
resolveOnce(withTranscriptRuns({ response: finalResponse, responseTiming: timing }, transcriptRuns));
|
|
2124
2172
|
return;
|
|
@@ -2137,7 +2185,7 @@ export const runAgent = ({ ticketId, tool, prompt, cwd, io, model, variant = nul
|
|
|
2137
2185
|
clearTimeout(sessionLookupTimer);
|
|
2138
2186
|
sessionLookupTimer = null;
|
|
2139
2187
|
}
|
|
2140
|
-
if (buildState?.stopRequested) {
|
|
2188
|
+
if (buildState?.stopRequested || reviewProcessState?.stopRequested) {
|
|
2141
2189
|
const transcriptRuns = finalizeRun('stopped', null, null);
|
|
2142
2190
|
resolveOnce(withTranscriptRuns({ response: null, responseTiming: null }, transcriptRuns));
|
|
2143
2191
|
return;
|