Skip to content

feat: adapt to DSH 0.1.2 - #25

Merged
Lixxx1 merged 15 commits into
mainfrom
feat/dsh-0.1.2-compat
Sep 12, 2026
Merged

Lixxx1 merged 15 commits into
mainfrom
feat/dsh-0.1.2-compat

Conversation

@Lixxx1

@Lixxx1 Lixxx1 commented Sep 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adapt DSH Sidebar to the breaking protocol changes in DeepSeek Harness 0.1.2-rc.1.

This draft currently contains the authenticated transport foundation. The chat controller still uses the old client; the sidebar is not yet fully compatible with the new runtime.

Related to #22.

Progress

  • Launch URL parsing, token-to-cookie authentication, credential redaction, runtime probing, and basic Session Remote methods.
  • Integrate the new client with multiplexed event streams, session history, approvals, and follow-up questions.
  • Migrate model selection, commands, projections, queues, attachments, settings, and plugin status.
  • Verify plugin loading, autonomous debugging, file review, and end-to-end development workflows, including Windows.

Validation for the transport foundation

  • pnpm check: 241 tests passed, 1 skipped; typecheck and build passed.
  • Isolated DSH 0.1.2-rc.1: authentication, session list/create/rename/cancel, prompt requestId validation, and authenticated WebSocket handshake passed.
  • No real model request was sent during the isolated smoke test.

@agibson-fl

Copy link
Copy Markdown

Curious what happened to PR#23? I had been subscribed to that and posted on it, but it's gone. I think this is related to that same issue?

@Lixxx1

Lixxx1 commented Sep 10, 2026

Copy link
Copy Markdown
Collaborator Author

Curious what happened to PR#23? I had been subscribed to that and posted on it, but it's gone. I think this is related to that same issue?

Also curious about it. It just disappeared suddenly(with the issue as well), that's why i have to create a new pr now 🫪

Synchronize model, command and preset discovery with runtime changes and protect settings edits with revisions. Expose runtime plugin inventory, including preset-scoped entries and external runtimes.

Support transient assistant streams and command attachment format negotiation while preserving DSH 0.1.2 compatibility. Add regression coverage for streaming, discovery, settings and plugin management.
@Lixxx1
Lixxx1 marked this pull request as ready for review September 12, 2026 06:44
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 12, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-12T07:52:42.302152Z 876a8cd Manual request
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 307099b881

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/extension.ts Outdated
Comment on lines +455 to +459
this.disconnectClient()
this.clearLiveControls()
const message = error instanceof Error ? error.message : String(error)
this.output.appendLine(`[reconnect] ${message}`)
this.publish({ phase: 'error', setup: null, statusText: `Could not reconnect to DSH: ${message} No tasks were resent.` })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Drop transient assistant text when recovery fails

If the event stream drops during a live assistant attempt and all reconnect attempts fail, this path clears only controls and leaves the projector's process-local liveAttempt intact. The incomplete response therefore remains in the transcript with streaming: true even though no stream can finish it; rebuild the projector from historyEntries here so durable messages remain while the transient prefix is discarded.

Useful? React with 👍 / 👎.

@Lixxx1

Lixxx1 commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator Author

@codex, review this

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 49ac95da2e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/extension.ts Outdated
Comment on lines +502 to +504
this.disconnectClient()
this.clearLiveControls()
this.publish({ phase: 'error', setup: null, statusText: `Lost the DSH event stream: ${error.message}` })

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Discard live assistant state on terminal stream errors

When an invalid frame, authentication refusal, or other non-retryable stream error reaches this branch while a modern assistant response is streaming, disconnecting the client and clearing controls leaves the projector's process-local attempt—and the already-published message with streaming: true—intact even though it can never settle. The fresh case beyond the earlier exhausted-reconnect report is this non-retryable branch; rebuild the projector from historyEntries and republish its durable messages here as the reconnect-failure path does.

Useful? React with 👍 / 👎.

@Lixxx1

Lixxx1 commented Sep 12, 2026

Copy link
Copy Markdown
Collaborator Author

@codex, review this

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 876a8cd4d9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/extension.ts Outdated
this.publish({ phase: 'loading', statusText: `Reconnecting to DSH${automatic ? ` (${String(attempt)}/3)` : ''}…` })
// A manual retry can renew an expired cookie using the existing launch URL.
// An automatic retry never changes credentials or starts a process.
if (!automatic) await connection.reauthenticate(recovery.abort.signal)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Skip reauthentication for tokenless reused runtimes

When the runtime was automatically reused because its unauthenticated session/list probe succeeded, its DshConnection has neither a cookie nor a saved launch URL. A manual reconnect— including invoking Reconnect on an otherwise healthy connection—disconnects the client and then unconditionally calls reauthenticate(), which always throws No DSH launch token is available; consequently this supported external-runtime path cannot be manually reconnected without restarting or reselecting the runtime. Only renew credentials for token-backed connections, or let tokenless connections rebuild their subscriptions directly.

Useful? React with 👍 / 👎.

@Lixxx1
Lixxx1 merged commit ddda514 into main Sep 12, 2026
2 checks passed
@Lixxx1
Lixxx1 deleted the feat/dsh-0.1.2-compat branch September 12, 2026 14:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants