mirror of
https://github.com/THU-MAIC/OpenMAIC.git
synced 2026-11-07 08:54:09 +08:00
* feat(runtime): add whiteboard RuntimeStore foundation * Potential fix for pull request finding 'Comparison between inconvertible types' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> * fix(runtime): reject invalid whiteboard appends before commit * fix(runtime): preserve special JSON keys during canonical clone * Potential fix for pull request finding 'Invalid prototype value' Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> * feat(runtime): add minimal learner whiteboard mutation --------- Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> Co-authored-by: wyuc <wang-yc24@mails.tsinghua.edu.cn>
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { isChatMessageSkeleton, isQuizAttemptSkeleton } from '@openmaic/dsl';
|
|
import type { RuntimePayloadValidator } from '@openmaic/storage';
|
|
|
|
import { whiteboardRuntimePayloadValidator } from '@/lib/whiteboard/runtime/validate';
|
|
|
|
const chat: RuntimePayloadValidator = (payload) =>
|
|
isChatMessageSkeleton(payload)
|
|
? { valid: true }
|
|
: {
|
|
valid: false,
|
|
errors: [
|
|
{
|
|
path: '/payload',
|
|
message: 'chat payload must match ChatMessageSkeleton (role + content)',
|
|
},
|
|
],
|
|
};
|
|
|
|
const quizAttempt: RuntimePayloadValidator = (payload) =>
|
|
isQuizAttemptSkeleton(payload)
|
|
? { valid: true }
|
|
: {
|
|
valid: false,
|
|
errors: [
|
|
{
|
|
path: '/payload',
|
|
message: 'quizAttempt payload must match QuizAttemptSkeleton (phase + answers)',
|
|
},
|
|
],
|
|
};
|
|
|
|
/** Complete app validator table. RuntimeStore options replace their defaults. */
|
|
export const APP_RUNTIME_PAYLOAD_VALIDATORS = Object.freeze({
|
|
chat,
|
|
quizAttempt,
|
|
whiteboard: whiteboardRuntimePayloadValidator,
|
|
}) satisfies Readonly<Record<string, RuntimePayloadValidator>>;
|