File size: 1,898 Bytes
4e23b01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | 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;
}
|