Răsfoiți Sursa

refactor(client-runtime): home the snapshot-store engine in contract/

The store migration (#538) parked the engine in a store/ sibling domain;
loader and sessions imported it directly, tripping verify-client-domain-graph
(cross-domain shared surface must route through contract/). The engine is
layer-0 shared infrastructure by definition, so it moves to contract/store.ts
verbatim; the four importers and the spec follow mechanically.
imccyu 2 luni în urmă
părinte
comite
3785e10754

+ 0 - 0
packages/client/runtime/src/client/store/index.ts → packages/client/runtime/src/client/contract/store.ts


+ 3 - 3
packages/client/runtime/src/client/index.ts

@@ -12,7 +12,7 @@
 import type { Context } from 'cordis'
 import type { ConnectionHandle, SessionId } from '@deepseek-ai/dsh-client-connection/client'
 import type { SnapshotSelectorHook } from '@deepseek-ai/dsh-client-ui-slots'
-import type { SnapshotStore } from './store/index.ts'
+import type { SnapshotStore } from './contract/store.ts'
 import { SlotsService } from './slots.ts'
 import { SessionsService } from './sessions/service.ts'
 import type { SessionListState } from './sessions/service.ts'
@@ -28,10 +28,10 @@ export type { SessionBinding, SessionListState, SessionSummary } from './session
 // The snapshot-store engine lives here since the store migration (the data
 // layer owns its substrate; web-react is React glue only). The './client'
 // main export is the single serving door — no store subpath.
-export { createSnapshotStore, defineStore, shallowEqual } from './store/index.ts'
+export { createSnapshotStore, defineStore, shallowEqual } from './contract/store.ts'
 export type {
   EngineStoreHandle, EngineStoreInstance, ObservableSnapshot, SnapshotStore,
-} from './store/index.ts'
+} from './contract/store.ts'
 export type {
   AssistantBlock, AssistantMessageNode, ContextMessageNode, ConversationNode, ConversationSnapshot,
   PendingInteraction, RunningToolCall, SteeringMessageNode,

+ 1 - 1
packages/client/runtime/src/client/loader/index.ts

@@ -17,7 +17,7 @@
  * load one by one in inject topology.
  */
 import type { Context } from 'cordis'
-import { createSnapshotStore } from '../store/index.ts'
+import { createSnapshotStore } from '../contract/store.ts'
 import type { BootPluginEntry, ClientLoader, LoaderStatus } from '../index.ts'
 
 export type { BootPluginEntry, ClientLoader, LoaderStatus } from '../index.ts'

+ 2 - 2
packages/client/runtime/src/client/sessions/service.ts

@@ -16,8 +16,8 @@
 import type { Context, Fiber } from 'cordis'
 import type { IApiClient, SessionId } from '@deepseek-ai/dsh-client-connection/client'
 import type { SessionCell } from '@deepseek-ai/dsh-client-ui-slots'
-import type { SnapshotStore } from '../store/index.ts'
-import { createSnapshotStore } from '../store/index.ts'
+import type { SnapshotStore } from '../contract/store.ts'
+import { createSnapshotStore } from '../contract/store.ts'
 import { SessionManager } from './manager.ts'
 import type { Session } from './session.ts'
 

+ 1 - 1
packages/client/runtime/src/client/sessions/session.ts

@@ -7,7 +7,7 @@ import type { ContentBlock } from '@deepseek-ai/dsh-llm/types'
 import type { SessionEvent } from '@deepseek-ai/dsh-session/types'
 import type { HistoryEntry, IApiClient, MuxFrame, RpcError, RpcId, RpcResult, SessionId, ToolEventView } from '@deepseek-ai/dsh-client-connection/client'
 import { transportError } from '@deepseek-ai/dsh-client-connection/client'
-import type { ObservableSnapshot } from '../store/index.ts'
+import type { ObservableSnapshot } from '../contract/store.ts'
 import type {
   ConversationNode, ConversationSnapshot, OpenState, PendingInteraction, PromptError, RunningToolCall,
 } from './conversation.ts'

+ 1 - 1
packages/client/runtime/tests/store.spec.ts

@@ -1,5 +1,5 @@
 import { afterEach, describe, expect, it, vi } from 'vitest'
-import { createSnapshotStore, defineStore, shallowEqual } from '../src/client/store/index.ts'
+import { createSnapshotStore, defineStore, shallowEqual } from '../src/client/contract/store.ts'
 
 interface State {
   a: { n: number }