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 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 !== latestVersion;
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.13",
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.13",
53951
- "oh-my-opencode-darwin-x64": "3.17.13",
53952
- "oh-my-opencode-darwin-x64-baseline": "3.17.13",
53953
- "oh-my-opencode-linux-arm64": "3.17.13",
53954
- "oh-my-opencode-linux-arm64-musl": "3.17.13",
53955
- "oh-my-opencode-linux-x64": "3.17.13",
53956
- "oh-my-opencode-linux-x64-baseline": "3.17.13",
53957
- "oh-my-opencode-linux-x64-musl": "3.17.13",
53958
- "oh-my-opencode-linux-x64-musl-baseline": "3.17.13",
53959
- "oh-my-opencode-windows-x64": "3.17.13",
53960
- "oh-my-opencode-windows-x64-baseline": "3.17.13"
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
  }
@@ -4,6 +4,7 @@ export interface ContinuationState {
4
4
  hasActiveRalphLoop: boolean;
5
5
  hasHookMarker: boolean;
6
6
  hasTodoHookMarker: boolean;
7
+ hasActiveBackgroundTaskMarker: boolean;
7
8
  hasActiveHookMarker: boolean;
8
9
  activeHookMarkerReason: string | null;
9
10
  }
@@ -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;
@@ -20,6 +20,7 @@ export interface SkillMcpClientInfo {
20
20
  skillName: string;
21
21
  sessionID: string;
22
22
  scope?: SkillScope | "local";
23
+ directory?: string;
23
24
  }
24
25
  export interface SkillMcpServerContext {
25
26
  config: ClaudeCodeMcpServer;
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 === "running") : false;
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
- function scheduleForcedExit(cleanupResult, exitCode) {
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.13",
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.13",
133871
- "oh-my-opencode-darwin-x64": "3.17.13",
133872
- "oh-my-opencode-darwin-x64-baseline": "3.17.13",
133873
- "oh-my-opencode-linux-arm64": "3.17.13",
133874
- "oh-my-opencode-linux-arm64-musl": "3.17.13",
133875
- "oh-my-opencode-linux-x64": "3.17.13",
133876
- "oh-my-opencode-linux-x64-baseline": "3.17.13",
133877
- "oh-my-opencode-linux-x64-musl": "3.17.13",
133878
- "oh-my-opencode-linux-x64-musl-baseline": "3.17.13",
133879
- "oh-my-opencode-windows-x64": "3.17.13",
133880
- "oh-my-opencode-windows-x64-baseline": "3.17.13"
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.13",
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.13",
84
- "oh-my-opencode-darwin-x64": "3.17.13",
85
- "oh-my-opencode-darwin-x64-baseline": "3.17.13",
86
- "oh-my-opencode-linux-arm64": "3.17.13",
87
- "oh-my-opencode-linux-arm64-musl": "3.17.13",
88
- "oh-my-opencode-linux-x64": "3.17.13",
89
- "oh-my-opencode-linux-x64-baseline": "3.17.13",
90
- "oh-my-opencode-linux-x64-musl": "3.17.13",
91
- "oh-my-opencode-linux-x64-musl-baseline": "3.17.13",
92
- "oh-my-opencode-windows-x64": "3.17.13",
93
- "oh-my-opencode-windows-x64-baseline": "3.17.13"
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": [