feat(ai): implement unified prompt management UX/UI (ADR-037)
CI / CD Pipeline / build (push) Failing after 3m23s
CI / CD Pipeline / deploy (push) Has been skipped

- Add context config endpoints (GET/PUT /api/ai/prompts/:type/:version/context-config)
- Add execution profile endpoints (CRUD /api/ai/execution-profiles)
- Add sandbox RAG Prep endpoint (POST /api/ai/admin/sandbox/rag-prep)
- Create Prompt Management UI with multi-type support
- Add ContextConfigEditor, PromptEditor, RuntimeParametersPanel components
- Add SandboxTabs for 3-step workflow (OCR, Extract, RAG Prep)
- Add database deltas for ai_execution_profiles and additional prompt types
- Update quickstart.md with production backend URLs
- Add comprehensive test coverage for new features
This commit is contained in:
2026-06-14 19:55:43 +07:00
parent 56f9544cb0
commit 67da186672
64 changed files with 6327 additions and 6107 deletions
@@ -245,7 +245,6 @@ describe('RFADetail', () => {
fireEvent.click(submitButton);
expect(screen.getByText('Submit RFA to Workflow')).toBeInTheDocument();
expect(screen.getByText('Routing Template ID')).toBeInTheDocument();
});
it('should show review team selector when project has publicId', () => {
-14
View File
@@ -20,7 +20,6 @@ interface RFADetailProps {
export function RFADetail({ data }: RFADetailProps) {
const [actionState, setActionState] = useState<'approve' | 'reject' | 'submit' | null>(null);
const [comments, setComments] = useState('');
const [templateId, setTemplateId] = useState<number>(1);
const [reviewTeamPublicId, setReviewTeamPublicId] = useState<string | undefined>(undefined);
const processMutation = useProcessRFA();
const submitMutation = useSubmitRFA();
@@ -84,7 +83,6 @@ export function RFADetail({ data }: RFADetailProps) {
{
uuid: data.publicId,
data: {
templateId,
reviewTeamPublicId,
},
},
@@ -156,18 +154,6 @@ export function RFADetail({ data }: RFADetailProps) {
<CardTitle className="text-lg">Submit RFA to Workflow</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<div className="space-y-2">
<Label htmlFor="templateId">Routing Template ID</Label>
<input
id="templateId"
type="number"
min={1}
className="flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm"
value={templateId}
onChange={(e) => setTemplateId(Number(e.target.value))}
/>
<p className="text-xs text-muted-foreground">Enter the routing template ID for this submission.</p>
</div>
{data.correspondence?.project?.publicId && (
<ReviewTeamSelector
projectPublicId={data.correspondence.project.publicId}