mirror of
https://github.com/deepseek-ai/deepseek-harness.git
synced 2026-08-29 04:26:38 +00:00
Conflict rulings follow the projection-reattach plan: - host/runtime package (deleted on master): take master; the PR's boot composition moves to the cordis.yml roster and its goals handlers will be re-landed in dsh-host-apiproxy; the session.prompt slash interception and its spec are dropped entirely (superseded by command.execute + command/run logging). - client core (rewritten on master): take master; the PR's Session goal fields/methods, ConversationSnapshot.goal, goalActions injection, and the hard-mounted GoalBar are all superseded by the 'goal' session projection (useProjection) and will return as the ui-goal plugin. - wire contract: union of master's workspace/command/skill domains and the PR's goal domain, minus goal.get (the read side is the projection block + session/projection frames; six mutation RPCs stay). - GoalBar component and spec leave ui-conversation (they re-land in the new ui-goal package); IconSparkle16 stays in ui-conversation chat. - The web-slash-command-dispatch note documents the dropped interception and is removed; the goal-bar note will be rewritten for the projection model. - pnpm-lock.yaml taken from master (reinstall recomputes).
53 lines
2.3 KiB
TypeScript
53 lines
2.3 KiB
TypeScript
/**
|
|
* RPC method registry and signature-derived generics. The map
|
|
* registers only client-request methods (respond is a client-response, so it is absent);
|
|
* map keys are the wire path segments (POST /api/session.list).
|
|
*/
|
|
|
|
import type { SessionsApi } from './sessions.ts'
|
|
import type { HostApi } from './host.ts'
|
|
import type { WorkspaceApi } from './workspace.ts'
|
|
import type { CommandsApi } from './commands.ts'
|
|
import type { SkillsApi } from './skills.ts'
|
|
import type { GoalsApi } from './goals.ts'
|
|
import type { RpcResponse } from './rpc.ts'
|
|
|
|
/**
|
|
* Method name → method signature. Signatures are the single source of truth; payload/value
|
|
* types are always derived from here. A method may declare a trailing AbortSignal after the
|
|
* request (command.execute): the carrier passes its request signal, never a wire field.
|
|
*/
|
|
export interface RpcMethodMap {
|
|
'session.list': SessionsApi['list']
|
|
'session.create': SessionsApi['create']
|
|
'session.history': SessionsApi['history']
|
|
'session.models': SessionsApi['models']
|
|
'session.selectModel': SessionsApi['selectModel']
|
|
'session.prompt': SessionsApi['prompt']
|
|
'session.cancel': SessionsApi['cancel']
|
|
'host.describe': HostApi['describe']
|
|
'host.pickDirectory': HostApi['pickDirectory']
|
|
'host.openPath': HostApi['openPath']
|
|
'workspace.list': WorkspaceApi['list']
|
|
'workspace.create': WorkspaceApi['create']
|
|
'workspace.rename': WorkspaceApi['rename']
|
|
'workspace.delete': WorkspaceApi['delete']
|
|
'workspace.insertSessionBefore': WorkspaceApi['insertSessionBefore']
|
|
'command.list': CommandsApi['list']
|
|
'command.execute': CommandsApi['execute']
|
|
'skill.list': SkillsApi['list']
|
|
'goal.create': GoalsApi['create']
|
|
'goal.edit': GoalsApi['edit']
|
|
'goal.pause': GoalsApi['pause']
|
|
'goal.resume': GoalsApi['resume']
|
|
'goal.complete': GoalsApi['complete']
|
|
'goal.clear': GoalsApi['clear']
|
|
}
|
|
|
|
/** Business request payload of method K (reaches through the RpcRequest narrow form to payload). */
|
|
export type RequestPayload<K extends keyof RpcMethodMap> = Parameters<RpcMethodMap[K]>[0]['payload']
|
|
|
|
/** Business return value of method K (reaches through the RpcResponse narrow form to infer the ok value of result). */
|
|
export type ResponseValue<K extends keyof RpcMethodMap> =
|
|
Awaited<ReturnType<RpcMethodMap[K]>> extends RpcResponse<infer T> ? T : never
|