feat(ssa): Complete Phase 2A frontend integration - multi-step workflow end-to-end

Phase 2A: WorkflowPlannerService, WorkflowExecutorService, Python data quality, 6 bug fixes, DescriptiveResultView, multi-step R code/Word export, MVP UI reuse. V11 UI: Gemini-style, multi-task, single-page scroll, Word export. Architecture: Block-based rendering consensus (4 block types). New R tools: chi_square, correlation, descriptive, logistic_binary, mann_whitney, t_test_paired. Docs: dev summary, block-based plan, status updates, task list v2.0.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-20 23:09:27 +08:00
parent 23b422f758
commit 428a22adf2
62 changed files with 15416 additions and 299 deletions

View File

@@ -0,0 +1,100 @@
-- =====================================================
-- Phase 2A: SSA 智能化核心 - 数据库迁移脚本
-- 日期: 2026-02-20
-- 描述: 添加工作流表和数据画像字段
-- 注意: ssa_sessions.id 是 TEXT 类型(存储 UUID 字符串)
-- =====================================================
-- 1. 给 ssa_sessions 表添加 data_profile 字段(如果不存在)
ALTER TABLE ssa_schema.ssa_sessions
ADD COLUMN IF NOT EXISTS data_profile JSONB;
COMMENT ON COLUMN ssa_schema.ssa_sessions.data_profile IS 'Python Tool C 生成的数据画像 (Phase 2A)';
-- 2. 创建 ssa_workflows 表(多步骤分析流程)
CREATE TABLE IF NOT EXISTS ssa_schema.ssa_workflows (
id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::TEXT,
session_id TEXT NOT NULL,
message_id TEXT,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
total_steps INTEGER NOT NULL,
completed_steps INTEGER NOT NULL DEFAULT 0,
workflow_plan JSONB NOT NULL,
reasoning TEXT,
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT NOW(),
started_at TIMESTAMP WITHOUT TIME ZONE,
completed_at TIMESTAMP WITHOUT TIME ZONE,
CONSTRAINT fk_ssa_workflow_session
FOREIGN KEY (session_id)
REFERENCES ssa_schema.ssa_sessions(id)
ON DELETE CASCADE
);
-- ssa_workflows 索引
CREATE INDEX IF NOT EXISTS idx_ssa_workflow_session
ON ssa_schema.ssa_workflows(session_id);
CREATE INDEX IF NOT EXISTS idx_ssa_workflow_status
ON ssa_schema.ssa_workflows(status);
-- ssa_workflows 字段注释
COMMENT ON TABLE ssa_schema.ssa_workflows IS 'SSA 多步骤分析工作流 (Phase 2A)';
COMMENT ON COLUMN ssa_schema.ssa_workflows.status IS 'pending | running | completed | partial | error';
COMMENT ON COLUMN ssa_schema.ssa_workflows.workflow_plan IS 'LLM 生成的原始工作流计划 JSON';
COMMENT ON COLUMN ssa_schema.ssa_workflows.reasoning IS 'LLM 规划理由说明';
-- 3. 创建 ssa_workflow_steps 表(流程中的每个步骤)
CREATE TABLE IF NOT EXISTS ssa_schema.ssa_workflow_steps (
id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::TEXT,
workflow_id TEXT NOT NULL,
step_order INTEGER NOT NULL,
tool_code VARCHAR(50) NOT NULL,
tool_name VARCHAR(100) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'pending',
input_params JSONB,
guardrail_checks JSONB,
output_result JSONB,
error_info JSONB,
execution_ms INTEGER,
started_at TIMESTAMP WITHOUT TIME ZONE,
completed_at TIMESTAMP WITHOUT TIME ZONE,
CONSTRAINT fk_ssa_workflow_step_workflow
FOREIGN KEY (workflow_id)
REFERENCES ssa_schema.ssa_workflows(id)
ON DELETE CASCADE
);
-- ssa_workflow_steps 索引
CREATE INDEX IF NOT EXISTS idx_ssa_workflow_step_workflow
ON ssa_schema.ssa_workflow_steps(workflow_id);
CREATE INDEX IF NOT EXISTS idx_ssa_workflow_step_status
ON ssa_schema.ssa_workflow_steps(status);
-- ssa_workflow_steps 字段注释
COMMENT ON TABLE ssa_schema.ssa_workflow_steps IS 'SSA 工作流单步执行记录 (Phase 2A)';
COMMENT ON COLUMN ssa_schema.ssa_workflow_steps.status IS 'pending | running | success | warning | error | skipped';
COMMENT ON COLUMN ssa_schema.ssa_workflow_steps.guardrail_checks IS 'R Service JIT 护栏检验结果 (正态性、方差齐性等)';
COMMENT ON COLUMN ssa_schema.ssa_workflow_steps.output_result IS '工具执行结果 (已裁剪,符合 LLM 上下文限制)';
COMMENT ON COLUMN ssa_schema.ssa_workflow_steps.error_info IS '错误信息 (用于容错管道的部分成功场景)';
-- =====================================================
-- 验证脚本
-- =====================================================
SELECT 'ssa_sessions.data_profile 字段' as item,
CASE WHEN EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_schema = 'ssa_schema' AND table_name = 'ssa_sessions' AND column_name = 'data_profile'
) THEN '✅ 已创建' ELSE '❌ 未创建' END as status;
SELECT 'ssa_workflows 表' as item,
CASE WHEN EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = 'ssa_schema' AND table_name = 'ssa_workflows'
) THEN '✅ 已创建' ELSE '❌ 未创建' END as status;
SELECT 'ssa_workflow_steps 表' as item,
CASE WHEN EXISTS (
SELECT 1 FROM information_schema.tables
WHERE table_schema = 'ssa_schema' AND table_name = 'ssa_workflow_steps'
) THEN '✅ 已创建' ELSE '❌ 未创建' END as status;