DSH Missing Attachments: TRANSPORT Retries & Recovery

Author
DeepSeekAgent.io Editorial Team
Published
Updated

When a historical image object disappears locally, DeepSeek Harness can wrap the deterministic attachment failure as TRANSPORT and apply a network retry policy. The Session appears to hang for seconds even though the request may never leave the machine.

An October 2026 community reproduction on Windows with DSH Desktop 0.2.1-rc.2 and deepseek-flash documented this path. Session history retained the image reference, while its content-addressed object was missing. The next turn failed in under 100 ms and triggered five ineffective retries. Restoring the exact original image bytes immediately recovered the Session.

How attachment state can become incomplete

DSH stores attachment references in durable conversation history while the bytes live in a content-addressed object store. The reproduction identifies this path:

${DSH_HOME}/attachments/v1/objects/<first two hash characters>/<full hash>

This avoids embedding the same large file in every message and allows content reuse. It also means references and objects must be backed up, migrated, and restored together. A present Session file does not prove that every image remains readable.

Why this is not a network retry

The community analysis found that AttachmentError: ATTACHMENT_NOT_FOUND was caught and reclassified as LlmError(..., "TRANSPORT"). The default retry policy then attempted the request again, but every attempt encountered the same missing local file during preparation.

Signals that point to a local attachment failure include:

  • failure occurs almost immediately, without normal network latency;
  • later text-only turns in the same Session also fail because history still projects the image;
  • each retry produces the same error;
  • a new Session can call the same model;
  • the provider has no matching request record.

Safe recovery sequence

1. Stop automatic retries

Retrying cannot recreate the missing object. Preserve the full error, Session ID, DSH version, and attachment hash.

2. Inspect the object read-only

Resolve the reference and expected path without deleting the attachment store. If the object exists, check permissions, size, and hash. If it is absent, look for the original file or a backup of that exact object.

3. Restore exact bytes from a trusted backup

A content-addressed store requires content matching the referenced hash. A visually similar image or renamed replacement is invalid. Back up the current state, restore the object, and send a minimal message to verify recovery.

4. Migrate task context when restoration is impossible

The report found that forking from before the missing image produced history without image blocks, while a later branch retained the reference. If the UI can branch from an earlier point, this is safer than editing the Session journal.

Otherwise, create a new Session with confirmed findings, remaining work, and required text. Avoid deleting image blocks by hand unless you understand Session format, Projection Cache, and integrity relationships.

Backup and implementation improvements

A useful backup includes Sessions, attachment objects, and Profile configuration, followed by a restore test that resolves references. A JSONL-only backup can preserve an unusable image history.

At the implementation layer, deterministic codes such as ATTACHMENT_NOT_FOUND can remain distinct from TRANSPORT and be excluded from automatic network retries. The UI can show the missing hash, expected location, and recovery choices directly. This is a community proposal, not a fix confirmed in a released version.

For image capability setup, see DSH vision model configuration. If the failure followed a plugin tool change instead, use the dynamic-tool update recovery guide.

References