@straiffi/archon 1.11.12 → 1.11.16
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-D0YxLUqI.js → ActivityView-TwJeVDII.js} +1 -1
- package/dist/client/assets/{GitHubActionsDialog-hUHzJXrR.js → GitHubActionsDialog-Umiz7hRS.js} +1 -1
- package/dist/client/assets/VerificationDialog-BVaLckVH.js +4 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-CK9xwJva.js → architectureDiagram-3BPJPVTR-DG6n6a9N.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM-f-jooSU5.js → blockDiagram-GPEHLZMM-fpqlAUZA.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-Dw8tFXqU.js → c4Diagram-AAUBKEIU-DD-BA8Fj.js} +1 -1
- package/dist/client/assets/channel-BvWs2-ry.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-Dz9sx1mJ.js → chunk-2J33WTMH-BcwQlxYR.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-DHxSlFck.js → chunk-3OPIFGDE-DCbOiRKI.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-BexTYm2L.js → chunk-5ZQYHXKU-BAgSocEO.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-BgHp49jV.js → chunk-727SXJPM-0NBz7Bl7.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-CBB0Kg-W.js → chunk-AQP2D5EJ-BgLpjpch.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-DyP7XTU4.js → chunk-CSCIHK7Q-CFV8R2WL.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-DmaAlkHd.js → chunk-KSCS5N6A-B-5OABYB.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-BbCJcuw8.js → chunk-L5ZTLDWV-BEakyLfX.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-CO4dUZ7T.js → chunk-LZXEDZCA-k1JqO5jl.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-DdIScoxN.js → chunk-ND2GUHAM-CAvkgbq4.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-CSayat4N.js → chunk-NZK2D7GU-B1XxeNv6.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-DQ6-KxSx.js → chunk-O5CBEL6O-xsxGQlBc.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-Bn4PvIOT.js → chunk-WU5MYG2G-D2RTcS5J.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-CXujfiH2.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-BpQoPe_W.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-DF2DH2PP.js → dagre-BM42HDAG-DQRkT0rW.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-h2YnBn5e.js → diagram-2AECGRRQ-DLxnmFG_.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-CGIA2jQw.js → diagram-5GNKFQAL-Cu1nMouP.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DK3VRNEP.js → diagram-KO2AKTUF-BCpHrNi4.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-CkCAtpdf.js → diagram-LMA3HP47-CIM0-geo.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DaLX4wzh.js → diagram-OG6HWLK6-DV8jDGdy.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-CkDWu9VZ.js → erDiagram-TEJ5UH35-C-5Pkrkl.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-DKzshKa9.js → flowDiagram-I6XJVG4X-CDPh9OIS.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-CfcOUVzd.js → ganttDiagram-6RSMTGT7-jncsu8xZ.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CveUq_fP.js → gitGraphDiagram-PVQCEYII-DGWMJkfX.js} +1 -1
- package/dist/client/assets/{index-D_brbG-0.css → index-C1ZNfkTu.css} +1 -1
- package/dist/client/assets/index-C8n_tSJG.js +293 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-CTBxib6d.js → infoDiagram-5YYISTIA-B4xDH_w0.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH--DkW1thK.js → ishikawaDiagram-YF4QCWOH-DVdd9VXs.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-BBXicnFC.js → journeyDiagram-JHISSGLW-nOtumTZv.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-BquOM7W0.js → kanban-definition-UN3LZRKU-DDOXGouj.js} +1 -1
- package/dist/client/assets/{line-DrikE93F.js → line-Bv23U4ui.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-DcxGTRm1.js → mermaid-parser.core-G9FbMuHU.js} +1 -1
- package/dist/client/assets/{mermaid.core-CRFw0uO2.js → mermaid.core-B3CWAqqw.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-FFNhybFW.js → mindmap-definition-RKZ34NQL-DjSz56M7.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-i6cMYse5.js → pieDiagram-4H26LBE5-DSWgdOVl.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-BYZQjQaz.js → quadrantDiagram-W4KKPZXB-DEupU1aE.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-B4wEb1VZ.js → requirementDiagram-4Y6WPE33-BhBfAL0L.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-CT8mTepY.js → sankeyDiagram-5OEKKPKP-CbjG9Vw2.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-C6RFM__N.js → sequenceDiagram-3UESZ5HK-1Q4xZQSJ.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-ew8CGdEw.js → stateDiagram-AJRCARHV-OtJd_YEY.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-Bkxwy8iL.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-BOIWKsvL.js → timeline-definition-PNZ67QCA-CABkNCpN.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN--dj48T5C.js → vennDiagram-CIIHVFJN-BC2gbfhD.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Bpu8yneZ.js → wardleyDiagram-YWT4CUSO-Bkh5qr4Q.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-CuqF6K-6.js → xychartDiagram-2RQKCTM6-BWDBD0AE.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/index.js +2 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +43 -10
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentProvider.js.map +1 -1
- package/dist/server/lib/codexUpgrade.js +193 -0
- package/dist/server/lib/codexUpgrade.js.map +1 -0
- package/dist/server/lib/i18n/resources.js +3 -0
- package/dist/server/lib/i18n/resources.js.map +1 -1
- package/dist/server/lib/opencodeAgentProvider.js +11 -1
- package/dist/server/lib/opencodeAgentProvider.js.map +1 -1
- package/dist/server/lib/opencodeApprovalContext.js +38 -0
- package/dist/server/lib/opencodeApprovalContext.js.map +1 -0
- package/dist/server/lib/opencodeApprovalLifecycle.js +49 -0
- package/dist/server/lib/opencodeApprovalLifecycle.js.map +1 -0
- package/dist/server/lib/opencodeApprovalRoutes.js +51 -0
- package/dist/server/lib/opencodeApprovalRoutes.js.map +1 -0
- package/dist/server/lib/opencodeApprovalSchema.js +31 -0
- package/dist/server/lib/opencodeApprovalSchema.js.map +1 -0
- package/dist/server/lib/opencodeApprovalTransport.js +713 -0
- package/dist/server/lib/opencodeApprovalTransport.js.map +1 -0
- package/dist/server/lib/opencodeApprovalTypes.js +2 -0
- package/dist/server/lib/opencodeApprovalTypes.js.map +1 -0
- package/dist/server/lib/opencodeToolApprovals.js +371 -0
- package/dist/server/lib/opencodeToolApprovals.js.map +1 -0
- package/dist/server/lib/planModeQuestions.js +4 -0
- package/dist/server/lib/planModeQuestions.js.map +1 -1
- package/dist/server/lib/restrictedFilePrompt.js +11 -3
- package/dist/server/lib/restrictedFilePrompt.js.map +1 -1
- package/dist/server/lib/reviewAgentWatchdog.js +5 -5
- package/dist/server/lib/reviewAgentWatchdog.js.map +1 -1
- package/dist/server/lib/reviewPromptContext.js +5 -3
- package/dist/server/lib/reviewPromptContext.js.map +1 -1
- package/dist/server/lib/specArtifact.js +29 -0
- package/dist/server/lib/specArtifact.js.map +1 -1
- package/dist/server/lib/toolUpgrade.js +4 -1
- package/dist/server/lib/toolUpgrade.js.map +1 -1
- package/dist/server/workers/plan.js +47 -41
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/specArtifactContract.js +40 -0
- package/dist/server/workers/specArtifactContract.js.map +1 -0
- package/dist/server/workers/specSession.js +1 -37
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/VerificationDialog-D6Sr1Hpi.js +0 -4
- package/dist/client/assets/channel-CRzDiEyE.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-ydg4crE2.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-C8542ymn.js +0 -1
- package/dist/client/assets/index-DRMy2cc2.js +0 -293
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DkUI5gTZ.js +0 -1
package/dist/server/lib/agent.js
CHANGED
|
@@ -24,6 +24,7 @@ import { createTranscriptRunSnapshots } from './transcriptRuns.js';
|
|
|
24
24
|
import { createHostLauncherEnvironment, createLegacyHostRuntimeEnvironment, createWorkspaceProcessEnvironment, } from './workspaceProcessEnvironment.js';
|
|
25
25
|
import { OpencodeModelResolutionError, parseOpencodeStderrModelResolutionError, parseOpencodePermissionAutoReject, createOpencodePermissionAutoRejectTracker, } from './opencodeErrors.js';
|
|
26
26
|
import { appendRestrictedFilePrompt } from './restrictedFilePrompt.js';
|
|
27
|
+
import { createOpencodeApprovalClock, prepareOpencodeApprovalPrompt, resolveOpencodeApprovalContext } from './opencodeApprovalContext.js';
|
|
27
28
|
import { decodeOpencodeStreamEvent, extractLeadingOpencodeJsonObjects, extractOpencodeStreamUsage, parseOpencodeStreamLine } from './opencodeStream.js';
|
|
28
29
|
import { assertAgentSpawnPermit, AgentSpawnPermitRevokedError } from './agentSpawnPermits.js';
|
|
29
30
|
import { buildClaudeStdinMessage } from './claudeStdin.js';
|
|
@@ -2034,6 +2035,8 @@ export const stopSpecReviewAgent = async (specReviewRunId) => {
|
|
|
2034
2035
|
return true;
|
|
2035
2036
|
};
|
|
2036
2037
|
const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null, skills = [], resumeSessionId = null, sessionField = 'session_id', trackBuildProcess = false, reviewProcessState, emitSuccessUpdate = true, opencodeAgentMode, runStream, executionContext, persistSessionIdToTicket = false, spawnPermitId, executionProvider = hostExecutionEnvironment, executionTarget, executionLauncherEnvironment = createHostLauncherEnvironment(), executionRuntimeEnvironment = createLegacyHostRuntimeEnvironment(cwd, { PWD: cwd }), opencodeRuntimeIdentity = null, }) => {
|
|
2038
|
+
const opencodeApprovalContext = resolveOpencodeApprovalContext({ tool, parentKind: 'ticket', parentId: ticketId, executionContext, io });
|
|
2039
|
+
const approvalClock = createOpencodeApprovalClock(opencodeApprovalContext);
|
|
2037
2040
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
2038
2041
|
const resolvedOpencodeCompatibility = resolveOpencodeCompatibility(tool, executionProvider, opencodeRuntimeIdentity);
|
|
2039
2042
|
const resolvedOpencodeRuntimeIdentity = resolvedOpencodeCompatibility?.runtimeIdentity ?? null;
|
|
@@ -2108,7 +2111,7 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2108
2111
|
let reviewKillTimer = null;
|
|
2109
2112
|
let reviewCompletionForced = false;
|
|
2110
2113
|
let reviewInactivityTimeoutForced = false;
|
|
2111
|
-
let lastOutputAt =
|
|
2114
|
+
let lastOutputAt = approvalClock.now();
|
|
2112
2115
|
let executionCapableEventObserved = false;
|
|
2113
2116
|
const buildState = trackBuildProcess
|
|
2114
2117
|
? activeBuildProcesses.get(ticketId) ?? registerBuildProcessPlaceholder(ticketId)
|
|
@@ -2172,7 +2175,8 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2172
2175
|
const streamingRequest = {
|
|
2173
2176
|
cwd,
|
|
2174
2177
|
skills,
|
|
2175
|
-
prompt,
|
|
2178
|
+
prompt: prepareOpencodeApprovalPrompt(prompt, opencodeApprovalContext),
|
|
2179
|
+
opencodeApprovalContext,
|
|
2176
2180
|
model: resolvedModel,
|
|
2177
2181
|
variant,
|
|
2178
2182
|
mode: opencodeAgentMode,
|
|
@@ -2239,6 +2243,10 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2239
2243
|
};
|
|
2240
2244
|
void connection.sessionReady.then(providerThreadId => {
|
|
2241
2245
|
if (!settled && providerThreadId) {
|
|
2246
|
+
if (tool === 'opencode') {
|
|
2247
|
+
bindResolvedOpencodeSession(providerThreadId, true);
|
|
2248
|
+
return;
|
|
2249
|
+
}
|
|
2242
2250
|
sessionId = providerThreadId;
|
|
2243
2251
|
writeRunSessionId(providerThreadId);
|
|
2244
2252
|
}
|
|
@@ -2288,7 +2296,7 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2288
2296
|
bindResolvedOpencodeSession(discoveredSessionId);
|
|
2289
2297
|
},
|
|
2290
2298
|
onActivity: () => {
|
|
2291
|
-
lastOutputAt =
|
|
2299
|
+
lastOutputAt = approvalClock.now();
|
|
2292
2300
|
},
|
|
2293
2301
|
});
|
|
2294
2302
|
opencodeSubagentMonitor.start();
|
|
@@ -2398,6 +2406,8 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2398
2406
|
});
|
|
2399
2407
|
if (reviewProcessState && startTime !== null) {
|
|
2400
2408
|
reviewWatchdog = createReviewAgentWatchdog({
|
|
2409
|
+
isApprovalPending: approvalClock.isPending,
|
|
2410
|
+
now: approvalClock.now,
|
|
2401
2411
|
getLastOutputAt: () => lastOutputAt,
|
|
2402
2412
|
checkForCompletion: async () => reviewFinalAnswerObserved && !subagentTracker.hasRunningSubagents(),
|
|
2403
2413
|
onTrigger: async (trigger) => {
|
|
@@ -2418,7 +2428,7 @@ const runAgentOnce = ({ ticketId, tool, prompt, cwd, io, model, variant = null,
|
|
|
2418
2428
|
const output = providerStdout ?? child.stdout;
|
|
2419
2429
|
output?.on('data', (chunk) => {
|
|
2420
2430
|
permissionAutoRejectTracker.consume(chunk);
|
|
2421
|
-
lastOutputAt =
|
|
2431
|
+
lastOutputAt = approvalClock.now();
|
|
2422
2432
|
const text = remainder + chunk.toString();
|
|
2423
2433
|
const lines = text.split('\n');
|
|
2424
2434
|
remainder = lines.pop() ?? '';
|
|
@@ -2625,6 +2635,7 @@ export const runAgent = (options) => {
|
|
|
2625
2635
|
return typeof enrichedPrompt === 'string' ? launch(enrichedPrompt) : enrichedPrompt.then(launch);
|
|
2626
2636
|
};
|
|
2627
2637
|
const runChatAgentOnce = ({ chatSessionId, tool, prompt, files = [], cwd, io, model, variant = null, skills = [], resumeSessionId = null, opencodeAgentMode = 'build', executionContext, mainRun, spawnPermitId, executionProvider = hostExecutionEnvironment, executionTarget, executionLauncherEnvironment = createHostLauncherEnvironment(), executionRuntimeEnvironment = createLegacyHostRuntimeEnvironment(cwd, { PWD: cwd }), opencodeRuntimeIdentity = null, }) => {
|
|
2638
|
+
const opencodeApprovalContext = resolveOpencodeApprovalContext({ tool, parentKind: 'chat', parentId: chatSessionId, executionContext, io });
|
|
2628
2639
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
2629
2640
|
const resolvedOpencodeCompatibility = resolveOpencodeCompatibility(tool, executionProvider, opencodeRuntimeIdentity);
|
|
2630
2641
|
const resolvedOpencodeRuntimeIdentity = resolvedOpencodeCompatibility?.runtimeIdentity ?? null;
|
|
@@ -2676,7 +2687,8 @@ const runChatAgentOnce = ({ chatSessionId, tool, prompt, files = [], cwd, io, mo
|
|
|
2676
2687
|
cwd,
|
|
2677
2688
|
files,
|
|
2678
2689
|
skills,
|
|
2679
|
-
prompt,
|
|
2690
|
+
prompt: prepareOpencodeApprovalPrompt(prompt, opencodeApprovalContext),
|
|
2691
|
+
opencodeApprovalContext,
|
|
2680
2692
|
model: resolvedModel,
|
|
2681
2693
|
variant,
|
|
2682
2694
|
mode: opencodeAgentMode,
|
|
@@ -2763,7 +2775,11 @@ const runChatAgentOnce = ({ chatSessionId, tool, prompt, files = [], cwd, io, mo
|
|
|
2763
2775
|
void connection.sessionReady.then(providerThreadId => {
|
|
2764
2776
|
if (!settled && providerThreadId) {
|
|
2765
2777
|
sessionId = providerThreadId;
|
|
2766
|
-
updateChatSessionId(chatSessionId,
|
|
2778
|
+
updateChatSessionId(chatSessionId, tool, providerThreadId, io);
|
|
2779
|
+
if (tool === 'opencode') {
|
|
2780
|
+
opencodeMetadataRefresher?.pinSessionId(providerThreadId);
|
|
2781
|
+
opencodeSubagentMonitor?.setParentSessionId(providerThreadId);
|
|
2782
|
+
}
|
|
2767
2783
|
subagentTracker.setMainSessionId(providerThreadId);
|
|
2768
2784
|
}
|
|
2769
2785
|
}).catch(() => { });
|
|
@@ -3126,6 +3142,7 @@ export const runChatAgent = (options) => {
|
|
|
3126
3142
|
return typeof enrichedPrompt === 'string' ? launch(enrichedPrompt) : enrichedPrompt.then(launch);
|
|
3127
3143
|
};
|
|
3128
3144
|
const runSpecAgentOnce = ({ specSessionId, tool, prompt, files = [], cwd, io, model, variant = null, skills = [], resumeSessionId = null, executionContext, mainRun, executionProvider = hostExecutionEnvironment, executionTarget, executionLauncherEnvironment = createHostLauncherEnvironment(), executionRuntimeEnvironment = createLegacyHostRuntimeEnvironment(cwd, { PWD: cwd }), opencodeRuntimeIdentity = null, }) => {
|
|
3145
|
+
const opencodeApprovalContext = resolveOpencodeApprovalContext({ tool, parentKind: 'spec', parentId: specSessionId, executionContext, io });
|
|
3129
3146
|
const resolvedModel = resolveAgentModel(tool, model);
|
|
3130
3147
|
const resolvedOpencodeCompatibility = resolveOpencodeCompatibility(tool, executionProvider, opencodeRuntimeIdentity);
|
|
3131
3148
|
const resolvedOpencodeRuntimeIdentity = resolvedOpencodeCompatibility?.runtimeIdentity ?? null;
|
|
@@ -3177,7 +3194,8 @@ const runSpecAgentOnce = ({ specSessionId, tool, prompt, files = [], cwd, io, mo
|
|
|
3177
3194
|
cwd,
|
|
3178
3195
|
files,
|
|
3179
3196
|
skills,
|
|
3180
|
-
prompt,
|
|
3197
|
+
prompt: prepareOpencodeApprovalPrompt(prompt, opencodeApprovalContext),
|
|
3198
|
+
opencodeApprovalContext,
|
|
3181
3199
|
model: resolvedModel,
|
|
3182
3200
|
variant,
|
|
3183
3201
|
mode: 'plan',
|
|
@@ -3258,7 +3276,11 @@ const runSpecAgentOnce = ({ specSessionId, tool, prompt, files = [], cwd, io, mo
|
|
|
3258
3276
|
void connection.sessionReady.then(providerThreadId => {
|
|
3259
3277
|
if (!settled && providerThreadId) {
|
|
3260
3278
|
sessionId = providerThreadId;
|
|
3261
|
-
updateSpecSessionIdLocal(specSessionId,
|
|
3279
|
+
updateSpecSessionIdLocal(specSessionId, tool, providerThreadId, io);
|
|
3280
|
+
if (tool === 'opencode') {
|
|
3281
|
+
opencodeMetadataRefresher?.pinSessionId(providerThreadId);
|
|
3282
|
+
opencodeSubagentMonitor?.setParentSessionId(providerThreadId);
|
|
3283
|
+
}
|
|
3262
3284
|
subagentTracker.setMainSessionId(providerThreadId);
|
|
3263
3285
|
}
|
|
3264
3286
|
}).catch(() => { });
|
|
@@ -3631,6 +3653,7 @@ export const runSpecAgent = (options) => {
|
|
|
3631
3653
|
* the spec_sessions row is never touched by this path.
|
|
3632
3654
|
*/
|
|
3633
3655
|
const runSpecReviewAgentOnce = ({ specReviewRunId, specSessionId, tool, prompt, files = [], cwd, io, model, variant = null, skills = [], executionContext, executionProvider = hostExecutionEnvironment, executionTarget, executionLauncherEnvironment = createHostLauncherEnvironment(), executionRuntimeEnvironment = createLegacyHostRuntimeEnvironment(cwd, { PWD: cwd }), opencodeRuntimeIdentity = null, }) => {
|
|
3656
|
+
const opencodeApprovalContext = resolveOpencodeApprovalContext({ tool, parentKind: 'spec', parentId: specSessionId, executionContext, io });
|
|
3634
3657
|
const registeredState = activeSpecReviewProcesses.get(specReviewRunId);
|
|
3635
3658
|
if (registeredState?.stopRequested) {
|
|
3636
3659
|
return Promise.resolve({
|
|
@@ -3687,7 +3710,8 @@ const runSpecReviewAgentOnce = ({ specReviewRunId, specSessionId, tool, prompt,
|
|
|
3687
3710
|
cwd,
|
|
3688
3711
|
files,
|
|
3689
3712
|
skills,
|
|
3690
|
-
prompt,
|
|
3713
|
+
prompt: prepareOpencodeApprovalPrompt(prompt, opencodeApprovalContext),
|
|
3714
|
+
opencodeApprovalContext,
|
|
3691
3715
|
model: resolvedModel,
|
|
3692
3716
|
variant,
|
|
3693
3717
|
mode: 'plan',
|
|
@@ -3696,7 +3720,7 @@ const runSpecReviewAgentOnce = ({ specReviewRunId, specSessionId, tool, prompt,
|
|
|
3696
3720
|
opencodeRuntimeIdentity: resolvedOpencodeRuntimeIdentity,
|
|
3697
3721
|
opencodeCompatibility: resolvedOpencodeCompatibility,
|
|
3698
3722
|
};
|
|
3699
|
-
const invocation = tool === 'opencode'
|
|
3723
|
+
const invocation = tool === 'opencode' && !opencodeApprovalContext
|
|
3700
3724
|
? buildOpencodeSpecReviewInvocation({
|
|
3701
3725
|
prompt,
|
|
3702
3726
|
files,
|
|
@@ -3742,6 +3766,15 @@ const runSpecReviewAgentOnce = ({ specReviewRunId, specSessionId, tool, prompt,
|
|
|
3742
3766
|
void connection.ready.catch(error => {
|
|
3743
3767
|
rejectOnce(agentProvider.classifyExecutionFailure(error));
|
|
3744
3768
|
});
|
|
3769
|
+
void connection.sessionReady.then(providerSessionId => {
|
|
3770
|
+
if (!settled && providerSessionId) {
|
|
3771
|
+
if (tool === 'opencode') {
|
|
3772
|
+
opencodeSessionId = providerSessionId;
|
|
3773
|
+
opencodeSubagentMonitor?.setParentSessionId(providerSessionId);
|
|
3774
|
+
}
|
|
3775
|
+
subagentTracker.setMainSessionId(providerSessionId);
|
|
3776
|
+
}
|
|
3777
|
+
}).catch(() => { });
|
|
3745
3778
|
}
|
|
3746
3779
|
void placementFailure.then(failure => {
|
|
3747
3780
|
if (failure) {
|