opencode-immune 1.0.59 → 1.0.60
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/plugin.js +27 -1
- package/package.json +1 -1
package/dist/plugin.js
CHANGED
|
@@ -96,6 +96,7 @@ function createState(input) {
|
|
|
96
96
|
providerRetryWatchdogs: new Map(),
|
|
97
97
|
childFallbackRequests: new Map(),
|
|
98
98
|
sessionErrorRetryCount: new Map(),
|
|
99
|
+
ultraworkPermissionSessions: new Set(),
|
|
99
100
|
fallbackAgentByAgent: new Map(),
|
|
100
101
|
baseAgentByFallbackAgent: new Map(),
|
|
101
102
|
ultraworkMarkerPath: join(input.directory, ".opencode", "state", "ultrawork-active.json"),
|
|
@@ -174,6 +175,20 @@ async function createManagedUltraworkSession(state, title) {
|
|
|
174
175
|
await addManagedUltraworkSession(state, sessionID);
|
|
175
176
|
return sessionID;
|
|
176
177
|
}
|
|
178
|
+
async function applyUltraworkSessionPermissions(state, sessionID) {
|
|
179
|
+
if (state.ultraworkPermissionSessions.has(sessionID))
|
|
180
|
+
return;
|
|
181
|
+
const result = await state.client.session.update({
|
|
182
|
+
directory: state.input.directory,
|
|
183
|
+
sessionID,
|
|
184
|
+
permission: ULTRAWORK_SESSION_PERMISSION,
|
|
185
|
+
});
|
|
186
|
+
if (result.error || !result.response.ok) {
|
|
187
|
+
pluginLog.warn(`[opencode-immune] Failed to apply ultrawork permissions to session ${sessionID}:`, result.error ?? result.response.status);
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
state.ultraworkPermissionSessions.add(sessionID);
|
|
191
|
+
}
|
|
177
192
|
async function promptManagedSession(state, sessionID, text, options = {}) {
|
|
178
193
|
const result = await state.client.session.promptAsync({
|
|
179
194
|
directory: state.input.directory,
|
|
@@ -336,6 +351,7 @@ async function addManagedUltraworkSession(state, sessionID, timestamp = Date.now
|
|
|
336
351
|
return;
|
|
337
352
|
}
|
|
338
353
|
state.managedUltraworkSessions.set(sessionID, nextRecord);
|
|
354
|
+
await applyUltraworkSessionPermissions(state, sessionID);
|
|
339
355
|
}
|
|
340
356
|
async function addManagedChildSession(state, sessionID, parentSessionID, timestamp = Date.now()) {
|
|
341
357
|
const parent = state.managedUltraworkSessions.get(parentSessionID);
|
|
@@ -379,6 +395,7 @@ async function removeManagedUltraworkSession(state, sessionID, reason) {
|
|
|
379
395
|
cancelPendingSessionRetry(state, sessionID, reason);
|
|
380
396
|
cancelProviderRetryWatchdog(state, sessionID, reason);
|
|
381
397
|
state.sessionErrorRetryCount.delete(sessionID);
|
|
398
|
+
state.ultraworkPermissionSessions.delete(sessionID);
|
|
382
399
|
const existed = state.managedUltraworkSessions.delete(sessionID);
|
|
383
400
|
if (!existed)
|
|
384
401
|
return;
|
|
@@ -2066,8 +2083,17 @@ function createMultiCycleHandler(state) {
|
|
|
2066
2083
|
function createPermissionAskHandler(state) {
|
|
2067
2084
|
return async (input, output) => {
|
|
2068
2085
|
const sessionID = input.sessionID;
|
|
2069
|
-
if (!
|
|
2086
|
+
if (!sessionID)
|
|
2070
2087
|
return;
|
|
2088
|
+
if (!isManagedUltraworkSession(state, sessionID)) {
|
|
2089
|
+
const markerActive = await isUltraworkMarkerActive(state);
|
|
2090
|
+
const recovery = markerActive ? await parseTasksFile(state.input.directory) : null;
|
|
2091
|
+
if (!recovery || recovery.phase === "ARCHIVE: DONE")
|
|
2092
|
+
return;
|
|
2093
|
+
state.recoveryContext = recovery;
|
|
2094
|
+
await addManagedUltraworkSession(state, sessionID);
|
|
2095
|
+
pluginLog.info(`[opencode-immune] Permission request recovered AUTO-RESUME session ${sessionID}; applying managed ultrawork auto-allow.`);
|
|
2096
|
+
}
|
|
2071
2097
|
output.status = "allow";
|
|
2072
2098
|
await writeDiagnosticLog(state, "permission:auto-allow", {
|
|
2073
2099
|
sessionID,
|