kimi-code / packages /transcript /src /view /registry.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4e23b01 verified
Raw
History Blame Contribute Delete
1.64 kB
import type { ToolCallFrame } from '../model/frame';
import type { TranscriptTask } from '../model/task';
import type { TurnOrigin } from '../model/turn';
export interface ToolViewContext {
readonly frame: ToolCallFrame;
readonly task?: TranscriptTask;
}
export interface InputViewContext {
readonly origin: TurnOrigin;
readonly prompt?: string;
}
export interface MarkerViewContext {
readonly marker: string;
readonly payload?: unknown;
}
export interface ViewRegistryOptions<C> {
readonly fallbackTool?: C;
}
export class ViewRegistry<C = unknown> {
readonly #toolRenderers = new Map<string, C>();
readonly #inputRenderers = new Map<string, C>();
readonly #markerRenderers = new Map<string, C>();
readonly #fallbackTool: C | undefined;
constructor(options: ViewRegistryOptions<C> = {}) {
this.#fallbackTool = options.fallbackTool;
}
registerTool(key: string, renderer: C): this {
this.#toolRenderers.set(key.toLowerCase(), renderer);
return this;
}
registerInput(originKind: string, renderer: C): this {
this.#inputRenderers.set(originKind, renderer);
return this;
}
registerMarker(marker: string, renderer: C): this {
this.#markerRenderers.set(marker, renderer);
return this;
}
resolveTool(frame: ToolCallFrame): C | undefined {
const key = (frame.view ?? frame.name).toLowerCase();
return this.#toolRenderers.get(key) ?? this.#fallbackTool;
}
resolveInput(origin: TurnOrigin): C | undefined {
return this.#inputRenderers.get(origin.kind);
}
resolveMarker(marker: string): C | undefined {
return this.#markerRenderers.get(marker);
}
}