refactor(api): converge the Remote failure vocabulary and client surface
Single RemoteError with a merge-extensible, domain-prefixed code map; owners throw at the failure point; streams surface marked failures; clients consume ctx.remote directly with isRemoteFailure as the only discrimination point and construct no failure instances.
This commit is contained in:
1 parent
12d7b4ed0c
commit
804b1ffbfc
252 files changed
+3182
-3832
No files matched your search
@@ -2,6 +2,7 @@
|
||||
|
||||
import { notifySubscribers } from '@deepseek-ai/dsh-client-store'
|
||||
import type {} from '@deepseek-ai/dsh-api-workspace-controller/remote'
|
||||
import { isRemoteFailure } from '@deepseek-ai/dsh-api-gateway/client'
|
||||
import type { RemoteFailure, RemoteResult, TypertClientRemote } from '@deepseek-ai/dsh-typert-protocol'
|
||||
import type {
|
||||
WorkspaceArchiveSessionRequest,
|
||||
@@ -82,12 +83,7 @@ export class ClientWorkspaceModel implements WorkspaceFollowSink {
|
||||
* @returns generated Remote result.
|
||||
*/
|
||||
async create(input: WorkspaceCreateRequest): Promise<RemoteResult<WorkspaceCreateValue>> {
|
||||
let result: RemoteResult<WorkspaceCreateValue>
|
||||
try {
|
||||
result = await this.remote.create(input)
|
||||
} catch (error) {
|
||||
result = failureResult(error)
|
||||
}
|
||||
const result = await this.remote.create(input)
|
||||
if (result.ok) this.upsert(result.value.workspace)
|
||||
return result
|
||||
}
|
||||
@@ -129,19 +125,10 @@ export class ClientWorkspaceModel implements WorkspaceFollowSink {
|
||||
const frameGeneration = this.orderFrameGeneration
|
||||
const localOrder = this.items.map(workspace => workspace.workspaceId)
|
||||
this.installOrder(insertIdBefore(localOrder, workspaceId, beforeWorkspaceId))
|
||||
let result: RemoteResult<WorkspaceOrderValue>
|
||||
try {
|
||||
result = await this.remote.insertBefore({
|
||||
workspaceId,
|
||||
...beforeWorkspaceId === undefined ? {} : { beforeWorkspaceId },
|
||||
})
|
||||
} catch (error) {
|
||||
if (requestGeneration === this.orderRequestGeneration
|
||||
&& frameGeneration === this.orderFrameGeneration) {
|
||||
this.installOrder(this.committedOrder)
|
||||
}
|
||||
throw error
|
||||
}
|
||||
const result = await this.remote.insertBefore({
|
||||
workspaceId,
|
||||
...beforeWorkspaceId === undefined ? {} : { beforeWorkspaceId },
|
||||
})
|
||||
if (requestGeneration === this.orderRequestGeneration
|
||||
&& frameGeneration === this.orderFrameGeneration) {
|
||||
this.installOrder(result.ok ? result.value.workspaceIds : this.committedOrder, result.ok)
|
||||
@@ -233,8 +220,9 @@ export class ClientWorkspaceModel implements WorkspaceFollowSink {
|
||||
* @param error - terminal stream failure.
|
||||
*/
|
||||
handleStreamFailure(error: unknown): void {
|
||||
if (!isRemoteFailure(error)) throw error
|
||||
this.state = 'error'
|
||||
this.error = failureOf(error)
|
||||
this.error = error
|
||||
this.invalidate()
|
||||
}
|
||||
|
||||
@@ -369,15 +357,3 @@ function insertIdBefore(
|
||||
const at = beforeId === undefined ? without.length : without.indexOf(beforeId)
|
||||
return [...without.slice(0, at), id, ...without.slice(at)]
|
||||
}
|
||||
|
||||
function failureResult<T>(error: unknown): RemoteResult<T> {
|
||||
return { ok: false, error: failureOf(error) }
|
||||
}
|
||||
|
||||
function failureOf(error: unknown): RemoteFailure {
|
||||
return {
|
||||
code: 'internal',
|
||||
message: error instanceof Error ? error.message : String(error),
|
||||
details: {},
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user