deepseek-ai/deepseek-harness · error

conversation.updateQueue failed: ${result.error.code}: ${res

Error message

conversation.updateQueue failed: ${result.error.code}: ${result.error.message}

What it means

updateQueue() applies a queue action (steer, cancel, remove, and kin) via session.updateQueue. Non-ok results throw 'conversation.updateQueue failed' — with one deliberate swallow: a steer answered by 'steer-unavailable' or 'queue-item-not-found' returns silently, because the item finished before the steer landed and that outcome is equivalent.

Source

Thrown at packages/client/ui-conversation/src/client/service.ts:294

      void entry.pending.then((url) => {
        if (!this.createdImageUrls.delete(url)) return
        revokePreview(url)
      }, () => {
        // A failed or invalidated load owns no object URL.
      })
    }
  }

  /** Apply one operation to a pending queue occurrence. */
  async updateQueue(itemId: QueueItemId, action: QueueAction): Promise<void> {
    const session = this.scopedSession('updateQueue')
    const result = await session.updateQueue(itemId, action)
    if (!result.ok) {
      if (
        action.kind === 'steer'
        && (result.error.code === 'steer-unavailable' || result.error.code === 'queue-item-not-found')
      ) return
      throw new Error(`conversation.updateQueue failed: ${result.error.code}: ${result.error.message}`)
    }
  }

  /** Cancel the scoped session's in-flight turn while preserving Queue (failures land in promptError and reject, as in send). */
  async cancel(): Promise<void> {
    const session = this.scopedSession('cancel')
    const result = await session.cancel()
    if (!result.ok) throw new Error(`conversation.cancel failed: ${result.error.code}: ${result.error.message}`)
  }

  /** Pull one older history page for the scoped Session. */
  async loadOlder(): Promise<void> {
    await this.scopedSession('loadOlder').loadOlder()
  }

  /** Resolve the caller scope's session face or throw on root contexts. */
  private scopedSession(op: string): SessionFace {
    const id = this.scopeId(op)

View on GitHub (pinned to b150a551b8)

Solutions

  1. Refresh the queue from the live session state and re-render before retrying
  2. Treat item-not-found as benign — the work already settled
  3. Inspect the embedded error.code for genuine host refusals and act on that code
Defensive patterns

Strategy: try-catch

Validate before calling

const item = queueSnapshot.items.find(i => i.id === itemId)
if (item === undefined) return // already settled

Try / catch

try {
  await conversation.updateQueue(itemId, action)
} catch (error) {
  if (isItemNotFound(error)) refreshQueue() // benign race
  else throw error
}

Prevention

When it happens

Trigger: Cancelling or removing a queue item that already completed on the host (queue-item-not-found), or any other host-side refusal or transport failure; steering races are absorbed by design and never reach this throw.

Common situations: A queue button rendered from a stale frame being clicked after the item settled; the queue mutated by another surface first; connection drop mid-action.

Related errors


AI-assisted analysis of deepseek-ai/deepseek-harness@b150a551b8 (2026-08-24). Data as JSON: /api/errors/ff5a924bcde8c741. Report an issue: GitHub.