kimi-code / packages /kap-server /src /protocol /question-wire.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
4e23b01 verified
Raw History Blame Contribute Delete
1.9 kB
import type {
QuestionItem,
QuestionOption,
QuestionRequest,
} from '@moonshot-ai/agent-core-v2';
import type {
QuestionItem as ProtocolQuestionItem,
QuestionOption as ProtocolQuestionOption,
QuestionRequest as ProtocolQuestionRequest,
} from './question';
export interface WireQuestionSource {
readonly id: string;
readonly createdAt: number;
readonly payload: unknown;
}
function buildOption(opt: QuestionOption, itemIdx: number, optIdx: number): ProtocolQuestionOption {
const base: ProtocolQuestionOption = { id: `opt_${itemIdx}_${optIdx}`, label: opt.label };
return opt.description === undefined ? base : { ...base, description: opt.description };
}
function buildItem(item: QuestionItem, itemIdx: number): ProtocolQuestionItem {
const out: ProtocolQuestionItem = {
id: `q_${itemIdx}`,
question: item.question,
options: item.options.map((o, oi) => buildOption(o, itemIdx, oi)),
};
if (item.header !== undefined) out.header = item.header;
if (item.body !== undefined) out.body = item.body;
if (item.multiSelect !== undefined) out.multi_select = item.multiSelect;
out.allow_other = true;
if (item.otherLabel !== undefined) out.other_label = item.otherLabel;
if (item.otherDescription !== undefined) out.other_description = item.otherDescription;
return out;
}
export function toWireQuestion(
interaction: WireQuestionSource,
sessionId: string,
): ProtocolQuestionRequest {
const req = interaction.payload as QuestionRequest;
const createdAt = new Date(interaction.createdAt).toISOString();
const out: ProtocolQuestionRequest = {
question_id: interaction.id,
session_id: sessionId,
questions: req.questions.map((q, i) => buildItem(q, i)),
created_at: createdAt,
};
if (req.turnId !== undefined) out.turn_id = req.turnId;
if (req.toolCallId !== undefined) out.tool_call_id = req.toolCallId;
return out;
}