oh-my-opencode 3.17.13 → 3.17.14
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/cli/index.js +34 -14
- package/dist/cli/run/continuation-state.d.ts +1 -0
- package/dist/features/background-agent/manager.d.ts +1 -0
- package/dist/features/background-agent/process-cleanup.d.ts +4 -0
- package/dist/features/run-continuation-state/types.d.ts +1 -1
- package/dist/features/skill-mcp-manager/types.d.ts +1 -0
- package/dist/index.js +77 -21
- package/package.json +12 -12
package/dist/cli/index.js
CHANGED
|
@@ -7143,6 +7143,7 @@ function toLogLabel(cacheLabel) {
|
|
|
7143
7143
|
}
|
|
7144
7144
|
function createJsonFileCacheStore(options) {
|
|
7145
7145
|
let memoryValue;
|
|
7146
|
+
let writtenInCurrentProcess = false;
|
|
7146
7147
|
function getCacheFilePath() {
|
|
7147
7148
|
return join8(options.getCacheDir(), options.filename);
|
|
7148
7149
|
}
|
|
@@ -7177,6 +7178,12 @@ function createJsonFileCacheStore(options) {
|
|
|
7177
7178
|
}
|
|
7178
7179
|
}
|
|
7179
7180
|
function has() {
|
|
7181
|
+
if (memoryValue !== undefined && memoryValue !== null) {
|
|
7182
|
+
return true;
|
|
7183
|
+
}
|
|
7184
|
+
if (writtenInCurrentProcess) {
|
|
7185
|
+
return true;
|
|
7186
|
+
}
|
|
7180
7187
|
return existsSync7(getCacheFilePath());
|
|
7181
7188
|
}
|
|
7182
7189
|
function write(value) {
|
|
@@ -7185,6 +7192,7 @@ function createJsonFileCacheStore(options) {
|
|
|
7185
7192
|
try {
|
|
7186
7193
|
writeFileSync2(cacheFile, options.serialize?.(value) ?? JSON.stringify(value, null, 2));
|
|
7187
7194
|
memoryValue = value;
|
|
7195
|
+
writtenInCurrentProcess = true;
|
|
7188
7196
|
log(`[${options.logPrefix}] ${options.cacheLabel} written`, options.describe(value));
|
|
7189
7197
|
} catch (error) {
|
|
7190
7198
|
log(`[${options.logPrefix}] Error writing ${toLogLabel(options.cacheLabel)}`, {
|
|
@@ -7194,6 +7202,7 @@ function createJsonFileCacheStore(options) {
|
|
|
7194
7202
|
}
|
|
7195
7203
|
function resetMemory() {
|
|
7196
7204
|
memoryValue = undefined;
|
|
7205
|
+
writtenInCurrentProcess = false;
|
|
7197
7206
|
}
|
|
7198
7207
|
return {
|
|
7199
7208
|
read,
|
|
@@ -7244,6 +7253,9 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
7244
7253
|
return providerModelsCacheStore.read();
|
|
7245
7254
|
}
|
|
7246
7255
|
function hasProviderModelsCache() {
|
|
7256
|
+
if (providerModelsCacheWrittenInCurrentProcess) {
|
|
7257
|
+
return true;
|
|
7258
|
+
}
|
|
7247
7259
|
return providerModelsCacheStore.has();
|
|
7248
7260
|
}
|
|
7249
7261
|
function writeProviderModelsCache(data) {
|
|
@@ -7251,6 +7263,7 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
7251
7263
|
...data,
|
|
7252
7264
|
updatedAt: new Date().toISOString()
|
|
7253
7265
|
});
|
|
7266
|
+
providerModelsCacheWrittenInCurrentProcess = true;
|
|
7254
7267
|
}
|
|
7255
7268
|
async function updateConnectedProvidersCache(client) {
|
|
7256
7269
|
if (!client?.provider?.list) {
|
|
@@ -7299,6 +7312,7 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
7299
7312
|
function _resetMemCacheForTesting() {
|
|
7300
7313
|
connectedProvidersCacheStore.resetMemory();
|
|
7301
7314
|
providerModelsCacheStore.resetMemory();
|
|
7315
|
+
providerModelsCacheWrittenInCurrentProcess = false;
|
|
7302
7316
|
}
|
|
7303
7317
|
return {
|
|
7304
7318
|
readConnectedProvidersCache,
|
|
@@ -7328,7 +7342,7 @@ function findProviderModelMetadata(providerID, modelID, cache = defaultConnected
|
|
|
7328
7342
|
}
|
|
7329
7343
|
return;
|
|
7330
7344
|
}
|
|
7331
|
-
var CONNECTED_PROVIDERS_CACHE_FILE = "connected-providers.json", PROVIDER_MODELS_CACHE_FILE = "provider-models.json", defaultConnectedProvidersCacheStore, readConnectedProvidersCache, hasConnectedProvidersCache, readProviderModelsCache, hasProviderModelsCache, writeProviderModelsCache, updateConnectedProvidersCache, _resetMemCacheForTesting;
|
|
7345
|
+
var providerModelsCacheWrittenInCurrentProcess = false, CONNECTED_PROVIDERS_CACHE_FILE = "connected-providers.json", PROVIDER_MODELS_CACHE_FILE = "provider-models.json", defaultConnectedProvidersCacheStore, readConnectedProvidersCache, hasConnectedProvidersCache, readProviderModelsCache, hasProviderModelsCache, writeProviderModelsCache, updateConnectedProvidersCache, _resetMemCacheForTesting;
|
|
7332
7346
|
var init_connected_providers_cache = __esm(() => {
|
|
7333
7347
|
init_logger();
|
|
7334
7348
|
init_data_path();
|
|
@@ -53206,7 +53220,7 @@ async function checkForUpdate(directory) {
|
|
|
53206
53220
|
isPinned: pluginInfo.isPinned
|
|
53207
53221
|
};
|
|
53208
53222
|
}
|
|
53209
|
-
const needsUpdate = currentVersion !==
|
|
53223
|
+
const needsUpdate = compareVersions(currentVersion, latestVersion) !== 0;
|
|
53210
53224
|
log(`[auto-update-checker] Current: ${currentVersion}, Latest (${channel}): ${latestVersion}, NeedsUpdate: ${needsUpdate}`);
|
|
53211
53225
|
return {
|
|
53212
53226
|
needsUpdate,
|
|
@@ -53218,6 +53232,7 @@ async function checkForUpdate(directory) {
|
|
|
53218
53232
|
}
|
|
53219
53233
|
var init_check_for_update = __esm(() => {
|
|
53220
53234
|
init_logger();
|
|
53235
|
+
init_opencode_version();
|
|
53221
53236
|
init_local_dev_path();
|
|
53222
53237
|
init_plugin_entry();
|
|
53223
53238
|
init_cached_version();
|
|
@@ -53867,7 +53882,7 @@ var {
|
|
|
53867
53882
|
// package.json
|
|
53868
53883
|
var package_default = {
|
|
53869
53884
|
name: "oh-my-opencode",
|
|
53870
|
-
version: "3.17.
|
|
53885
|
+
version: "3.17.14",
|
|
53871
53886
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
53872
53887
|
main: "./dist/index.js",
|
|
53873
53888
|
types: "dist/index.d.ts",
|
|
@@ -53947,17 +53962,17 @@ var package_default = {
|
|
|
53947
53962
|
zod: "^4.3.0"
|
|
53948
53963
|
},
|
|
53949
53964
|
optionalDependencies: {
|
|
53950
|
-
"oh-my-opencode-darwin-arm64": "3.17.
|
|
53951
|
-
"oh-my-opencode-darwin-x64": "3.17.
|
|
53952
|
-
"oh-my-opencode-darwin-x64-baseline": "3.17.
|
|
53953
|
-
"oh-my-opencode-linux-arm64": "3.17.
|
|
53954
|
-
"oh-my-opencode-linux-arm64-musl": "3.17.
|
|
53955
|
-
"oh-my-opencode-linux-x64": "3.17.
|
|
53956
|
-
"oh-my-opencode-linux-x64-baseline": "3.17.
|
|
53957
|
-
"oh-my-opencode-linux-x64-musl": "3.17.
|
|
53958
|
-
"oh-my-opencode-linux-x64-musl-baseline": "3.17.
|
|
53959
|
-
"oh-my-opencode-windows-x64": "3.17.
|
|
53960
|
-
"oh-my-opencode-windows-x64-baseline": "3.17.
|
|
53965
|
+
"oh-my-opencode-darwin-arm64": "3.17.14",
|
|
53966
|
+
"oh-my-opencode-darwin-x64": "3.17.14",
|
|
53967
|
+
"oh-my-opencode-darwin-x64-baseline": "3.17.14",
|
|
53968
|
+
"oh-my-opencode-linux-arm64": "3.17.14",
|
|
53969
|
+
"oh-my-opencode-linux-arm64-musl": "3.17.14",
|
|
53970
|
+
"oh-my-opencode-linux-x64": "3.17.14",
|
|
53971
|
+
"oh-my-opencode-linux-x64-baseline": "3.17.14",
|
|
53972
|
+
"oh-my-opencode-linux-x64-musl": "3.17.14",
|
|
53973
|
+
"oh-my-opencode-linux-x64-musl-baseline": "3.17.14",
|
|
53974
|
+
"oh-my-opencode-windows-x64": "3.17.14",
|
|
53975
|
+
"oh-my-opencode-windows-x64-baseline": "3.17.14"
|
|
53961
53976
|
},
|
|
53962
53977
|
overrides: {},
|
|
53963
53978
|
trustedDependencies: [
|
|
@@ -72328,6 +72343,7 @@ async function getContinuationState(directory, sessionID, client3) {
|
|
|
72328
72343
|
hasActiveRalphLoop: hasActiveRalphLoopContinuation(directory, sessionID),
|
|
72329
72344
|
hasHookMarker: marker !== null,
|
|
72330
72345
|
hasTodoHookMarker: marker?.sources.todo !== undefined,
|
|
72346
|
+
hasActiveBackgroundTaskMarker: marker?.sources["background-task"]?.state === "active",
|
|
72331
72347
|
hasActiveHookMarker: isContinuationMarkerActive(marker),
|
|
72332
72348
|
activeHookMarkerReason: getActiveContinuationMarkerReason(marker)
|
|
72333
72349
|
};
|
|
@@ -72397,6 +72413,10 @@ async function checkCompletionConditions(ctx) {
|
|
|
72397
72413
|
if (!continuationState.hasTodoHookMarker && !await areAllTodosComplete(ctx)) {
|
|
72398
72414
|
return false;
|
|
72399
72415
|
}
|
|
72416
|
+
if (continuationState.hasActiveBackgroundTaskMarker) {
|
|
72417
|
+
logWaiting(ctx, continuationState.activeHookMarkerReason ?? "background tasks are active");
|
|
72418
|
+
return false;
|
|
72419
|
+
}
|
|
72400
72420
|
if (!await areAllChildrenIdle(ctx)) {
|
|
72401
72421
|
return false;
|
|
72402
72422
|
}
|
|
@@ -84,6 +84,7 @@ export declare class BackgroundManager {
|
|
|
84
84
|
private startTask;
|
|
85
85
|
getTask(id: string): BackgroundTask | undefined;
|
|
86
86
|
getTasksByParentSession(sessionID: string): BackgroundTask[];
|
|
87
|
+
private updateBackgroundTaskMarker;
|
|
87
88
|
getAllDescendantTasks(sessionID: string): BackgroundTask[];
|
|
88
89
|
findBySession(sessionID: string): BackgroundTask | undefined;
|
|
89
90
|
private resolveTaskAttemptBySession;
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
/** @internal test-only */
|
|
2
|
+
export declare function __disableScheduledForcedExitForTesting(): void;
|
|
3
|
+
/** @internal test-only */
|
|
4
|
+
export declare function __enableScheduledForcedExitForTesting(): void;
|
|
1
5
|
interface CleanupTarget {
|
|
2
6
|
shutdown(): void | Promise<void>;
|
|
3
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ContinuationMarkerSource = "todo" | "stop";
|
|
1
|
+
export type ContinuationMarkerSource = "todo" | "stop" | "background-task";
|
|
2
2
|
export type ContinuationMarkerState = "idle" | "active" | "stopped";
|
|
3
3
|
export interface ContinuationMarkerSourceEntry {
|
|
4
4
|
state: ContinuationMarkerState;
|
package/dist/index.js
CHANGED
|
@@ -19612,6 +19612,7 @@ function toLogLabel(cacheLabel) {
|
|
|
19612
19612
|
}
|
|
19613
19613
|
function createJsonFileCacheStore(options) {
|
|
19614
19614
|
let memoryValue;
|
|
19615
|
+
let writtenInCurrentProcess = false;
|
|
19615
19616
|
function getCacheFilePath() {
|
|
19616
19617
|
return join10(options.getCacheDir(), options.filename);
|
|
19617
19618
|
}
|
|
@@ -19646,6 +19647,12 @@ function createJsonFileCacheStore(options) {
|
|
|
19646
19647
|
}
|
|
19647
19648
|
}
|
|
19648
19649
|
function has() {
|
|
19650
|
+
if (memoryValue !== undefined && memoryValue !== null) {
|
|
19651
|
+
return true;
|
|
19652
|
+
}
|
|
19653
|
+
if (writtenInCurrentProcess) {
|
|
19654
|
+
return true;
|
|
19655
|
+
}
|
|
19649
19656
|
return existsSync10(getCacheFilePath());
|
|
19650
19657
|
}
|
|
19651
19658
|
function write(value) {
|
|
@@ -19654,6 +19661,7 @@ function createJsonFileCacheStore(options) {
|
|
|
19654
19661
|
try {
|
|
19655
19662
|
writeFileSync2(cacheFile, options.serialize?.(value) ?? JSON.stringify(value, null, 2));
|
|
19656
19663
|
memoryValue = value;
|
|
19664
|
+
writtenInCurrentProcess = true;
|
|
19657
19665
|
log(`[${options.logPrefix}] ${options.cacheLabel} written`, options.describe(value));
|
|
19658
19666
|
} catch (error) {
|
|
19659
19667
|
log(`[${options.logPrefix}] Error writing ${toLogLabel(options.cacheLabel)}`, {
|
|
@@ -19663,6 +19671,7 @@ function createJsonFileCacheStore(options) {
|
|
|
19663
19671
|
}
|
|
19664
19672
|
function resetMemory() {
|
|
19665
19673
|
memoryValue = undefined;
|
|
19674
|
+
writtenInCurrentProcess = false;
|
|
19666
19675
|
}
|
|
19667
19676
|
return {
|
|
19668
19677
|
read,
|
|
@@ -19673,6 +19682,7 @@ function createJsonFileCacheStore(options) {
|
|
|
19673
19682
|
}
|
|
19674
19683
|
|
|
19675
19684
|
// src/shared/connected-providers-cache.ts
|
|
19685
|
+
var providerModelsCacheWrittenInCurrentProcess = false;
|
|
19676
19686
|
var CONNECTED_PROVIDERS_CACHE_FILE = "connected-providers.json";
|
|
19677
19687
|
var PROVIDER_MODELS_CACHE_FILE = "provider-models.json";
|
|
19678
19688
|
function isRecord(value) {
|
|
@@ -19712,6 +19722,9 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
19712
19722
|
return providerModelsCacheStore.read();
|
|
19713
19723
|
}
|
|
19714
19724
|
function hasProviderModelsCache() {
|
|
19725
|
+
if (providerModelsCacheWrittenInCurrentProcess) {
|
|
19726
|
+
return true;
|
|
19727
|
+
}
|
|
19715
19728
|
return providerModelsCacheStore.has();
|
|
19716
19729
|
}
|
|
19717
19730
|
function writeProviderModelsCache(data) {
|
|
@@ -19719,6 +19732,7 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
19719
19732
|
...data,
|
|
19720
19733
|
updatedAt: new Date().toISOString()
|
|
19721
19734
|
});
|
|
19735
|
+
providerModelsCacheWrittenInCurrentProcess = true;
|
|
19722
19736
|
}
|
|
19723
19737
|
async function updateConnectedProvidersCache(client) {
|
|
19724
19738
|
if (!client?.provider?.list) {
|
|
@@ -19767,6 +19781,7 @@ function createConnectedProvidersCacheStore(getCacheDir2 = getOmoOpenCodeCacheDi
|
|
|
19767
19781
|
function _resetMemCacheForTesting() {
|
|
19768
19782
|
connectedProvidersCacheStore.resetMemory();
|
|
19769
19783
|
providerModelsCacheStore.resetMemory();
|
|
19784
|
+
providerModelsCacheWrittenInCurrentProcess = false;
|
|
19770
19785
|
}
|
|
19771
19786
|
return {
|
|
19772
19787
|
readConnectedProvidersCache,
|
|
@@ -66659,7 +66674,7 @@ async function injectContinuation(args) {
|
|
|
66659
66674
|
log(`[${HOOK_NAME}] Skipped injection: continuation stopped for session`, { sessionID });
|
|
66660
66675
|
return;
|
|
66661
66676
|
}
|
|
66662
|
-
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((task) => task.status === "running") : false;
|
|
66677
|
+
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((task) => task.status === "running" || task.status === "pending") : false;
|
|
66663
66678
|
if (hasRunningBgTasks) {
|
|
66664
66679
|
log(`[${HOOK_NAME}] Skipped injection: background tasks running`, { sessionID });
|
|
66665
66680
|
return;
|
|
@@ -66865,7 +66880,7 @@ async function handleSessionIdle(args) {
|
|
|
66865
66880
|
}
|
|
66866
66881
|
state2.abortDetectedAt = undefined;
|
|
66867
66882
|
}
|
|
66868
|
-
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((task) => task.status === "running") : false;
|
|
66883
|
+
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((task) => task.status === "running" || task.status === "pending") : false;
|
|
66869
66884
|
if (hasRunningBgTasks) {
|
|
66870
66885
|
log(`[${HOOK_NAME}] Skipped: background tasks running`, { sessionID });
|
|
66871
66886
|
return;
|
|
@@ -86078,6 +86093,7 @@ async function resolveRecentPromptContextForSession(ctx, sessionID) {
|
|
|
86078
86093
|
}
|
|
86079
86094
|
|
|
86080
86095
|
// src/hooks/atlas/boulder-continuation-injector.ts
|
|
86096
|
+
var ACTIVE_BACKGROUND_TASK_STATUSES = new Set(["pending", "running"]);
|
|
86081
86097
|
async function injectBoulderContinuation(input) {
|
|
86082
86098
|
const {
|
|
86083
86099
|
ctx,
|
|
@@ -86092,7 +86108,7 @@ async function injectBoulderContinuation(input) {
|
|
|
86092
86108
|
backgroundManager,
|
|
86093
86109
|
sessionState
|
|
86094
86110
|
} = input;
|
|
86095
|
-
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((t) => t.status
|
|
86111
|
+
const hasRunningBgTasks = backgroundManager ? backgroundManager.getTasksByParentSession(sessionID).some((t) => ACTIVE_BACKGROUND_TASK_STATUSES.has(t.status)) : false;
|
|
86096
86112
|
if (hasRunningBgTasks) {
|
|
86097
86113
|
log(`[${HOOK_NAME7}] Skipped injection: background tasks running`, { sessionID });
|
|
86098
86114
|
return "skipped_background_tasks";
|
|
@@ -96348,7 +96364,8 @@ function createSkillMcpTool(options) {
|
|
|
96348
96364
|
serverName: args.mcp_name,
|
|
96349
96365
|
skillName: found.skill.name,
|
|
96350
96366
|
sessionID,
|
|
96351
|
-
scope: found.skill.scope
|
|
96367
|
+
scope: found.skill.scope,
|
|
96368
|
+
directory: toolContext.directory
|
|
96352
96369
|
};
|
|
96353
96370
|
const context = {
|
|
96354
96371
|
config: found.config,
|
|
@@ -104362,11 +104379,17 @@ async function tryFallbackRetry(args) {
|
|
|
104362
104379
|
}
|
|
104363
104380
|
|
|
104364
104381
|
// src/features/background-agent/process-cleanup.ts
|
|
104365
|
-
|
|
104382
|
+
var _scheduleForcedExitEnabled = true;
|
|
104383
|
+
function scheduleForcedExit(cleanupResult, exitCode, exitAfterCleanup = false) {
|
|
104384
|
+
if (!_scheduleForcedExitEnabled)
|
|
104385
|
+
return;
|
|
104366
104386
|
process.exitCode = exitCode;
|
|
104367
104387
|
const exitTimeout = setTimeout(() => process.exit(), 6000);
|
|
104368
104388
|
Promise.resolve(cleanupResult).finally(() => {
|
|
104369
104389
|
clearTimeout(exitTimeout);
|
|
104390
|
+
if (exitAfterCleanup) {
|
|
104391
|
+
process.exit(exitCode);
|
|
104392
|
+
}
|
|
104370
104393
|
});
|
|
104371
104394
|
}
|
|
104372
104395
|
function registerProcessSignal(signal, handler, exitAfter) {
|
|
@@ -104381,8 +104404,9 @@ function registerProcessSignal(signal, handler, exitAfter) {
|
|
|
104381
104404
|
}
|
|
104382
104405
|
function registerErrorEvent(signal, handler) {
|
|
104383
104406
|
const listener = (error) => {
|
|
104407
|
+
process.off(signal, listener);
|
|
104384
104408
|
log(`[background-agent] ${signal} received during shutdown cleanup:`, error);
|
|
104385
|
-
scheduleForcedExit(handler(error), 1);
|
|
104409
|
+
scheduleForcedExit(handler(error), 1, true);
|
|
104386
104410
|
};
|
|
104387
104411
|
process.on(signal, listener);
|
|
104388
104412
|
return listener;
|
|
@@ -105221,6 +105245,7 @@ class BackgroundManager {
|
|
|
105221
105245
|
}
|
|
105222
105246
|
spawnReservation.commit();
|
|
105223
105247
|
this.markPreStartDescendantReservation(task);
|
|
105248
|
+
this.updateBackgroundTaskMarker(input.parentSessionId);
|
|
105224
105249
|
this.processKey(key);
|
|
105225
105250
|
return { ...task };
|
|
105226
105251
|
} catch (error) {
|
|
@@ -105268,6 +105293,7 @@ class BackgroundManager {
|
|
|
105268
105293
|
if (item.task.sessionId) {
|
|
105269
105294
|
await this.abortSessionWithLogging(item.task.sessionId, "startTask error cleanup");
|
|
105270
105295
|
}
|
|
105296
|
+
this.updateBackgroundTaskMarker(item.task.parentSessionId);
|
|
105271
105297
|
this.markForNotification(item.task);
|
|
105272
105298
|
this.enqueueNotificationForParent(item.task.parentSessionId, () => this.notifyParentSession(item.task)).catch((err) => {
|
|
105273
105299
|
log("[background-agent] Failed to notify on startTask error:", err);
|
|
@@ -105522,6 +105548,15 @@ The fallback retry session is now created and can be inspected directly.
|
|
|
105522
105548
|
}
|
|
105523
105549
|
return tasks;
|
|
105524
105550
|
}
|
|
105551
|
+
updateBackgroundTaskMarker(parentSessionID) {
|
|
105552
|
+
const tasks = this.getTasksByParentSession(parentSessionID);
|
|
105553
|
+
const activeTasks = tasks.filter((t) => t.status === "running" || t.status === "pending");
|
|
105554
|
+
if (activeTasks.length > 0) {
|
|
105555
|
+
setContinuationMarkerSource(this.directory, parentSessionID, "background-task", "active", `${activeTasks.length} background task(s) active`);
|
|
105556
|
+
} else {
|
|
105557
|
+
setContinuationMarkerSource(this.directory, parentSessionID, "background-task", "idle");
|
|
105558
|
+
}
|
|
105559
|
+
}
|
|
105525
105560
|
getAllDescendantTasks(sessionID) {
|
|
105526
105561
|
const result = [];
|
|
105527
105562
|
const directChildren = this.getTasksByParentSession(sessionID);
|
|
@@ -106102,6 +106137,9 @@ The fallback retry session is now created and can be inspected directly.
|
|
|
106102
106137
|
if (task.sessionId) {
|
|
106103
106138
|
SessionCategoryRegistry.remove(task.sessionId);
|
|
106104
106139
|
}
|
|
106140
|
+
if (task.parentSessionId) {
|
|
106141
|
+
this.updateBackgroundTaskMarker(task.parentSessionId);
|
|
106142
|
+
}
|
|
106105
106143
|
this.markForNotification(task);
|
|
106106
106144
|
this.enqueueNotificationForParent(task.parentSessionId, () => this.notifyParentSession(task)).catch((err) => {
|
|
106107
106145
|
log("[background-agent] Error in notifyParentSession for errored task:", { taskId: task.id, error: err });
|
|
@@ -106336,6 +106374,9 @@ ${originalText}`;
|
|
|
106336
106374
|
SessionCategoryRegistry.remove(task.sessionId);
|
|
106337
106375
|
}
|
|
106338
106376
|
removeTaskToastTracking(task.id);
|
|
106377
|
+
if (task.parentSessionId) {
|
|
106378
|
+
this.updateBackgroundTaskMarker(task.parentSessionId);
|
|
106379
|
+
}
|
|
106339
106380
|
if (options?.skipNotification) {
|
|
106340
106381
|
this.cleanupPendingByParent(task);
|
|
106341
106382
|
this.scheduleTaskRemoval(task.id);
|
|
@@ -106415,6 +106456,9 @@ ${originalText}`;
|
|
|
106415
106456
|
await this.abortSessionWithLogging(task.sessionId, `task completion (${source})`);
|
|
106416
106457
|
SessionCategoryRegistry.remove(task.sessionId);
|
|
106417
106458
|
}
|
|
106459
|
+
if (task.parentSessionId) {
|
|
106460
|
+
this.updateBackgroundTaskMarker(task.parentSessionId);
|
|
106461
|
+
}
|
|
106418
106462
|
try {
|
|
106419
106463
|
await this.enqueueNotificationForParent(task.parentSessionId, () => this.notifyParentSession(task));
|
|
106420
106464
|
log(`[background-agent] Task completed via ${source}:`, task.id);
|
|
@@ -106598,6 +106642,9 @@ ${originalText}`;
|
|
|
106598
106642
|
}
|
|
106599
106643
|
}
|
|
106600
106644
|
this.cleanupPendingByParent(task);
|
|
106645
|
+
if (task.parentSessionId) {
|
|
106646
|
+
this.updateBackgroundTaskMarker(task.parentSessionId);
|
|
106647
|
+
}
|
|
106601
106648
|
this.markForNotification(task);
|
|
106602
106649
|
this.enqueueNotificationForParent(task.parentSessionId, () => this.notifyParentSession(task)).catch((err) => {
|
|
106603
106650
|
log("[background-agent] Error in notifyParentSession for stale-pruned task:", { taskId: task.id, error: err });
|
|
@@ -106652,6 +106699,9 @@ ${originalText}`;
|
|
|
106652
106699
|
if (task.sessionId) {
|
|
106653
106700
|
SessionCategoryRegistry.remove(task.sessionId);
|
|
106654
106701
|
}
|
|
106702
|
+
if (task.parentSessionId) {
|
|
106703
|
+
this.updateBackgroundTaskMarker(task.parentSessionId);
|
|
106704
|
+
}
|
|
106655
106705
|
this.markForNotification(task);
|
|
106656
106706
|
this.enqueueNotificationForParent(task.parentSessionId, () => this.notifyParentSession(task)).catch((err) => {
|
|
106657
106707
|
log("[background-agent] Error in notifyParentSession for crashed task:", { taskId: task.id, error: err });
|
|
@@ -111777,7 +111827,8 @@ async function createStdioClient(params) {
|
|
|
111777
111827
|
command,
|
|
111778
111828
|
args,
|
|
111779
111829
|
env: mergedEnv,
|
|
111780
|
-
stderr: "ignore"
|
|
111830
|
+
stderr: "ignore",
|
|
111831
|
+
...info.directory ? { cwd: info.directory } : {}
|
|
111781
111832
|
});
|
|
111782
111833
|
const client2 = stdioClientDependencies.createClient({ name: `skill-mcp-${info.skillName}-${info.serverName}`, version: "1.0.0" }, { capabilities: {} });
|
|
111783
111834
|
try {
|
|
@@ -127608,7 +127659,6 @@ init_agent_display_names();
|
|
|
127608
127659
|
init_agent_display_names();
|
|
127609
127660
|
|
|
127610
127661
|
// src/plugin/ultrawork-db-model-override.ts
|
|
127611
|
-
import { Database } from "bun:sqlite";
|
|
127612
127662
|
import { join as join102 } from "path";
|
|
127613
127663
|
import { existsSync as existsSync92 } from "fs";
|
|
127614
127664
|
function getDbPath() {
|
|
@@ -127687,7 +127737,13 @@ function retryViaMicrotask(db, messageId, targetModel, variant, attempt) {
|
|
|
127687
127737
|
});
|
|
127688
127738
|
}
|
|
127689
127739
|
function scheduleDeferredModelOverride(messageId, targetModel, variant) {
|
|
127690
|
-
queueMicrotask(() => {
|
|
127740
|
+
queueMicrotask(async () => {
|
|
127741
|
+
const sqliteModule = await import("bun:sqlite").catch(() => null);
|
|
127742
|
+
const Database = sqliteModule?.Database;
|
|
127743
|
+
if (typeof Database !== "function") {
|
|
127744
|
+
log("[ultrawork-db-override] bun:sqlite unavailable, skipping deferred override", { messageId });
|
|
127745
|
+
return;
|
|
127746
|
+
}
|
|
127691
127747
|
const dbPath = getDbPath();
|
|
127692
127748
|
if (!existsSync92(dbPath)) {
|
|
127693
127749
|
log("[ultrawork-db-override] DB not found, skipping deferred override");
|
|
@@ -133787,7 +133843,7 @@ class PostHog extends PostHogBackendClient {
|
|
|
133787
133843
|
// package.json
|
|
133788
133844
|
var package_default = {
|
|
133789
133845
|
name: "oh-my-opencode",
|
|
133790
|
-
version: "3.17.
|
|
133846
|
+
version: "3.17.14",
|
|
133791
133847
|
description: "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
133792
133848
|
main: "./dist/index.js",
|
|
133793
133849
|
types: "dist/index.d.ts",
|
|
@@ -133867,17 +133923,17 @@ var package_default = {
|
|
|
133867
133923
|
zod: "^4.3.0"
|
|
133868
133924
|
},
|
|
133869
133925
|
optionalDependencies: {
|
|
133870
|
-
"oh-my-opencode-darwin-arm64": "3.17.
|
|
133871
|
-
"oh-my-opencode-darwin-x64": "3.17.
|
|
133872
|
-
"oh-my-opencode-darwin-x64-baseline": "3.17.
|
|
133873
|
-
"oh-my-opencode-linux-arm64": "3.17.
|
|
133874
|
-
"oh-my-opencode-linux-arm64-musl": "3.17.
|
|
133875
|
-
"oh-my-opencode-linux-x64": "3.17.
|
|
133876
|
-
"oh-my-opencode-linux-x64-baseline": "3.17.
|
|
133877
|
-
"oh-my-opencode-linux-x64-musl": "3.17.
|
|
133878
|
-
"oh-my-opencode-linux-x64-musl-baseline": "3.17.
|
|
133879
|
-
"oh-my-opencode-windows-x64": "3.17.
|
|
133880
|
-
"oh-my-opencode-windows-x64-baseline": "3.17.
|
|
133926
|
+
"oh-my-opencode-darwin-arm64": "3.17.14",
|
|
133927
|
+
"oh-my-opencode-darwin-x64": "3.17.14",
|
|
133928
|
+
"oh-my-opencode-darwin-x64-baseline": "3.17.14",
|
|
133929
|
+
"oh-my-opencode-linux-arm64": "3.17.14",
|
|
133930
|
+
"oh-my-opencode-linux-arm64-musl": "3.17.14",
|
|
133931
|
+
"oh-my-opencode-linux-x64": "3.17.14",
|
|
133932
|
+
"oh-my-opencode-linux-x64-baseline": "3.17.14",
|
|
133933
|
+
"oh-my-opencode-linux-x64-musl": "3.17.14",
|
|
133934
|
+
"oh-my-opencode-linux-x64-musl-baseline": "3.17.14",
|
|
133935
|
+
"oh-my-opencode-windows-x64": "3.17.14",
|
|
133936
|
+
"oh-my-opencode-windows-x64-baseline": "3.17.14"
|
|
133881
133937
|
},
|
|
133882
133938
|
overrides: {},
|
|
133883
133939
|
trustedDependencies: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oh-my-opencode",
|
|
3
|
-
"version": "3.17.
|
|
3
|
+
"version": "3.17.14",
|
|
4
4
|
"description": "The Best AI Agent Harness - Batteries-Included OpenCode Plugin with Multi-Model Orchestration, Parallel Background Agents, and Crafted LSP/AST Tools",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -80,17 +80,17 @@
|
|
|
80
80
|
"zod": "^4.3.0"
|
|
81
81
|
},
|
|
82
82
|
"optionalDependencies": {
|
|
83
|
-
"oh-my-opencode-darwin-arm64": "3.17.
|
|
84
|
-
"oh-my-opencode-darwin-x64": "3.17.
|
|
85
|
-
"oh-my-opencode-darwin-x64-baseline": "3.17.
|
|
86
|
-
"oh-my-opencode-linux-arm64": "3.17.
|
|
87
|
-
"oh-my-opencode-linux-arm64-musl": "3.17.
|
|
88
|
-
"oh-my-opencode-linux-x64": "3.17.
|
|
89
|
-
"oh-my-opencode-linux-x64-baseline": "3.17.
|
|
90
|
-
"oh-my-opencode-linux-x64-musl": "3.17.
|
|
91
|
-
"oh-my-opencode-linux-x64-musl-baseline": "3.17.
|
|
92
|
-
"oh-my-opencode-windows-x64": "3.17.
|
|
93
|
-
"oh-my-opencode-windows-x64-baseline": "3.17.
|
|
83
|
+
"oh-my-opencode-darwin-arm64": "3.17.14",
|
|
84
|
+
"oh-my-opencode-darwin-x64": "3.17.14",
|
|
85
|
+
"oh-my-opencode-darwin-x64-baseline": "3.17.14",
|
|
86
|
+
"oh-my-opencode-linux-arm64": "3.17.14",
|
|
87
|
+
"oh-my-opencode-linux-arm64-musl": "3.17.14",
|
|
88
|
+
"oh-my-opencode-linux-x64": "3.17.14",
|
|
89
|
+
"oh-my-opencode-linux-x64-baseline": "3.17.14",
|
|
90
|
+
"oh-my-opencode-linux-x64-musl": "3.17.14",
|
|
91
|
+
"oh-my-opencode-linux-x64-musl-baseline": "3.17.14",
|
|
92
|
+
"oh-my-opencode-windows-x64": "3.17.14",
|
|
93
|
+
"oh-my-opencode-windows-x64-baseline": "3.17.14"
|
|
94
94
|
},
|
|
95
95
|
"overrides": {},
|
|
96
96
|
"trustedDependencies": [
|