| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /** Host Workspace Remote owner: explicit commands and reconnect-safe state. */
- import { Context } from '@deepseek-ai/cordis'
- import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol'
- import { WorkspaceCommands } from './commands.ts'
- import { WorkspaceFeed } from './feed.ts'
- import type {
- WorkspaceArchiveSessionRequest,
- WorkspaceArchiveValue,
- WorkspaceCreateRequest,
- WorkspaceCreateValue,
- WorkspaceDeleteRequest,
- WorkspaceDeleteValue,
- WorkspaceFollowFrame,
- WorkspaceInsertBeforeRequest,
- WorkspaceInsertSessionBeforeRequest,
- WorkspaceOrderValue,
- WorkspaceRenameRequest,
- WorkspaceValue,
- } from './types.ts'
- export type * from './types.ts'
- declare module '@deepseek-ai/cordis' {
- interface Context {
- /** Host Workspace business API and Remote namespace owner. */
- workspaceController: WorkspaceController
- }
- }
- /** Host service backing the generated `ctx.remote.workspace` namespace. */
- export class WorkspaceController extends TypertRemoteService {
- static inject = ['typert', 'workspaceRegistry']
- private readonly commands: WorkspaceCommands
- private readonly feed: WorkspaceFeed
- /** @param ctx - Host context containing the Workspace registry. */
- constructor(ctx: Context) {
- super(ctx, 'workspaceController', { namespace: 'workspace' })
- this.commands = new WorkspaceCommands(ctx)
- this.feed = new WorkspaceFeed(ctx)
- }
- /**
- * Create or idempotently resolve one Workspace over an existing directory.
- * @param request - directory path to register.
- * @returns the Workspace and whether this call created it.
- */
- @Remote('create')
- create(request: WorkspaceCreateRequest): Promise<WorkspaceCreateValue> {
- return this.commands.create(request)
- }
- /**
- * Rename one Workspace to a unique non-blank title.
- * @param request - Workspace identity and proposed title.
- * @returns the updated Workspace projection.
- */
- @Remote('rename')
- rename(request: WorkspaceRenameRequest): Promise<WorkspaceValue> {
- return this.commands.rename(request)
- }
- /**
- * Remove one Workspace registration while retaining files and Sessions.
- * @param request - Workspace identity to remove.
- * @returns deletion confirmation.
- */
- @Remote('delete')
- delete(request: WorkspaceDeleteRequest): Promise<WorkspaceDeleteValue> {
- return this.commands.delete(request)
- }
- /**
- * Move one Workspace within the registry display order.
- * @param request - moved Workspace and optional anchor.
- * @returns the complete resulting Workspace order.
- */
- @Remote('insertBefore')
- insertBefore(request: WorkspaceInsertBeforeRequest): Promise<WorkspaceOrderValue> {
- return this.commands.insertBefore(request)
- }
- /**
- * Move one accounted Session within a Workspace.
- * @param request - Workspace, Session, and optional anchor identities.
- * @returns the updated Workspace projection.
- */
- @Remote('insertSessionBefore')
- insertSessionBefore(request: WorkspaceInsertSessionBeforeRequest): Promise<WorkspaceValue> {
- return this.commands.insertSessionBefore(request)
- }
- /**
- * Hide one known Session from Workspace grouping surfaces.
- * @param request - Session identity to archive.
- * @returns the complete resulting archive set.
- */
- @Remote('archiveSession')
- archiveSession(request: WorkspaceArchiveSessionRequest): Promise<WorkspaceArchiveValue> {
- return this.commands.archiveSession(request)
- }
- /**
- * Stream a complete Workspace baseline followed by ordered increments.
- * @param signal - generation cancellation.
- * @returns baseline followed by ordered Workspace increments.
- */
- @Remote({ mode: 'stream' })
- follow(signal: AbortSignal): AsyncIterable<WorkspaceFollowFrame> {
- return this.feed.follow(signal)
- }
- }
- export default WorkspaceController
|