feat(ai): 业务上下文感知与 A2UI 链路统一
- 新增代码内业务上下文元数据层(实体字典 + 三大闭环工作流) - 新增 get_business_context / get_entity_schema / get_pending_tasks 运行时工具 - SYSTEM_PROMPT 与技能目录改为先查业务流程/待办再执行 - A2UI 增加 ai_a2ui_submissions 幂等表、表单过期、ui.artifact 事件 - 提交回灌携带 submissionId / fieldErrors / 下一步建议 - 前端 uiArtifacts 归一化与过期表单禁用
This commit is contained in:
66
apps/server/src/ai-chat/ai-chat.submit-content.spec.ts
Normal file
66
apps/server/src/ai-chat/ai-chat.submit-content.spec.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, it } from '@jest/globals';
|
||||
import {
|
||||
a2uiReviewSubmitInfo,
|
||||
a2uiSubmitInfo,
|
||||
buildFormSubmitModelContent,
|
||||
buildReviewSubmitModelContent,
|
||||
} from './ai-chat.submit-content';
|
||||
|
||||
describe('a2ui submit model content', () => {
|
||||
it('表单提交信息解析 submissionId 与 fieldErrors', () => {
|
||||
const info = a2uiSubmitInfo({
|
||||
a2uiSubmit: {
|
||||
formId: 'form-1',
|
||||
formTitle: '新增学生',
|
||||
values: { name: '张三' },
|
||||
submissionId: 'sub-1',
|
||||
fieldErrors: [{ field: 'phone', message: '手机号格式错误' }],
|
||||
},
|
||||
});
|
||||
expect(info).toEqual({
|
||||
formId: 'form-1',
|
||||
title: '新增学生',
|
||||
values: { name: '张三' },
|
||||
submissionId: 'sub-1',
|
||||
fieldErrors: [{ field: 'phone', message: '手机号格式错误' }],
|
||||
});
|
||||
});
|
||||
|
||||
it('表单回灌内容包含提交 ID 与结构化错误', () => {
|
||||
const content = buildFormSubmitModelContent({
|
||||
title: '新增学生',
|
||||
values: { name: '张三' },
|
||||
submissionId: 'sub-1',
|
||||
fieldErrors: [],
|
||||
});
|
||||
expect(content).toContain('sub-1');
|
||||
expect(content).toContain('"name":"张三"');
|
||||
expect(content).toContain('fieldErrors');
|
||||
});
|
||||
|
||||
it('审阅提交信息解析 submissionId 与下一步建议', () => {
|
||||
const info = a2uiReviewSubmitInfo({
|
||||
a2uiReviewSubmit: {
|
||||
reviewId: 'review-1',
|
||||
reviewTitle: '批量入住导入',
|
||||
resultMessage: '已导入 12 条',
|
||||
submissionId: 'sub-2',
|
||||
nextSteps: [{ key: 'after_checkin', label: '入住完成 → 建议录入费用' }],
|
||||
},
|
||||
});
|
||||
expect(info?.submissionId).toBe('sub-2');
|
||||
expect(info?.nextSteps).toHaveLength(1);
|
||||
});
|
||||
|
||||
it('审阅回灌内容包含提交 ID 与下一步建议', () => {
|
||||
const content = buildReviewSubmitModelContent({
|
||||
reviewId: 'review-1',
|
||||
reviewTitle: '批量入住导入',
|
||||
resultMessage: '已导入 12 条',
|
||||
submissionId: 'sub-2',
|
||||
nextSteps: [{ key: 'after_checkin', label: '入住完成 → 建议录入费用' }],
|
||||
});
|
||||
expect(content).toContain('sub-2');
|
||||
expect(content).toContain('建议录入费用');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user