Files
AIclinicalresearch/frontend-v2/tsconfig.tsbuildinfo
HaHafeng bbf98c4d5c fix(backend): Resolve PgBoss infinite loop issue and cleanup unused files
Backend fixes:
- Fix PgBoss task infinite loop on SAE (root cause: missing queue table constraints)
- Add singletonKey to prevent duplicate job enqueueing
- Add idempotency check in reviewWorker (skip completed tasks)
- Add optimistic locking in reviewService (atomic status update)

Frontend fixes:
- Add isSubmitting state to prevent duplicate submissions in RVW Dashboard
- Fix API baseURL in knowledgeBaseApi (relative path)

Cleanup (removed):
- Old frontend/ directory (migrated to frontend-v2)
- python-microservice/ (unused, replaced by extraction_service)
- Root package.json and node_modules (accidentally created)
- redcap-docker-dev/ (external dependency)
- Various temporary files and outdated docs in root

New documentation:
- docs/07-运维文档/01-PgBoss队列监控与维护.md
- docs/07-运维文档/02-故障预防检查清单.md
- docs/07-运维文档/03-数据库迁移注意事项.md

Database fix applied to RDS:
- Added PRIMARY KEY to platform_schema.queue
- Added 3 missing foreign key constraints

Tested: Local build passed, RDS constraints verified
2026-01-27 18:16:22 +08:00

1 line
8.4 KiB
Plaintext

{"root":["./src/app.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/common/api/axios.ts","./src/framework/auth/authcontext.tsx","./src/framework/auth/api.ts","./src/framework/auth/index.ts","./src/framework/auth/moduleapi.ts","./src/framework/auth/types.ts","./src/framework/layout/adminlayout.tsx","./src/framework/layout/mainlayout.tsx","./src/framework/layout/orglayout.tsx","./src/framework/layout/topnavigation.tsx","./src/framework/modules/errorboundary.tsx","./src/framework/modules/moduleerrorfallback.tsx","./src/framework/modules/moduleregistry.ts","./src/framework/modules/types.ts","./src/framework/permission/permissioncontext.tsx","./src/framework/permission/index.ts","./src/framework/permission/types.ts","./src/framework/permission/usepermission.ts","./src/framework/router/permissiondenied.tsx","./src/framework/router/routeguard.tsx","./src/framework/router/index.ts","./src/modules/admin/index.tsx","./src/modules/admin/api/statsapi.ts","./src/modules/admin/api/userapi.ts","./src/modules/admin/components/assigntenantmodal.tsx","./src/modules/admin/components/importusermodal.tsx","./src/modules/admin/components/modulepermissionmodal.tsx","./src/modules/admin/pages/statsdashboardpage.tsx","./src/modules/admin/pages/userdetailpage.tsx","./src/modules/admin/pages/userformpage.tsx","./src/modules/admin/pages/userlistpage.tsx","./src/modules/admin/types/user.ts","./src/modules/aia/constants.ts","./src/modules/aia/index.tsx","./src/modules/aia/types.ts","./src/modules/aia/components/agentcard.tsx","./src/modules/aia/components/agenthub.tsx","./src/modules/aia/components/chatworkspace.tsx","./src/modules/aia/components/index.ts","./src/modules/aia/protocol-agent/protocolagentpage.tsx","./src/modules/aia/protocol-agent/index.ts","./src/modules/aia/protocol-agent/types.ts","./src/modules/aia/protocol-agent/components/actioncard.tsx","./src/modules/aia/protocol-agent/components/chatarea.tsx","./src/modules/aia/protocol-agent/components/documentpanel.tsx","./src/modules/aia/protocol-agent/components/markdowncontent.tsx","./src/modules/aia/protocol-agent/components/reflexionmessage.tsx","./src/modules/aia/protocol-agent/components/resizablesplitpane.tsx","./src/modules/aia/protocol-agent/components/stagecard.tsx","./src/modules/aia/protocol-agent/components/stageeditmodal.tsx","./src/modules/aia/protocol-agent/components/statepanel.tsx","./src/modules/aia/protocol-agent/components/syncbutton.tsx","./src/modules/aia/protocol-agent/components/viewswitcher.tsx","./src/modules/aia/protocol-agent/components/index.ts","./src/modules/aia/protocol-agent/hooks/index.ts","./src/modules/aia/protocol-agent/hooks/useprotocolcontext.ts","./src/modules/aia/protocol-agent/hooks/useprotocolconversations.ts","./src/modules/aia/protocol-agent/hooks/useprotocolgeneration.ts","./src/modules/asl/index.tsx","./src/modules/asl/api/index.ts","./src/modules/asl/components/asllayout.tsx","./src/modules/asl/components/conclusiontag.tsx","./src/modules/asl/components/detailreviewdrawer.tsx","./src/modules/asl/components/fulltextdetaildrawer.tsx","./src/modules/asl/components/judgmentbadge.tsx","./src/modules/asl/hooks/usefulltextresults.ts","./src/modules/asl/hooks/usefulltexttask.ts","./src/modules/asl/hooks/usescreeningresults.ts","./src/modules/asl/hooks/usescreeningtask.ts","./src/modules/asl/pages/fulltextprogress.tsx","./src/modules/asl/pages/fulltextresults.tsx","./src/modules/asl/pages/fulltextsettings.tsx","./src/modules/asl/pages/fulltextworkbench.tsx","./src/modules/asl/pages/researchsearch.tsx","./src/modules/asl/pages/screeningresults.tsx","./src/modules/asl/pages/screeningworkbench.tsx","./src/modules/asl/pages/titlescreeningsettings.tsx","./src/modules/asl/types/index.ts","./src/modules/asl/utils/excelexport.ts","./src/modules/asl/utils/excelutils.ts","./src/modules/asl/utils/tabletransform.ts","./src/modules/dc/index.tsx","./src/modules/dc/api/toolb.ts","./src/modules/dc/api/toolc.ts","./src/modules/dc/components/assetlibrary.tsx","./src/modules/dc/components/tasklist.tsx","./src/modules/dc/components/toolcard.tsx","./src/modules/dc/hooks/useassets.ts","./src/modules/dc/hooks/userecenttasks.ts","./src/modules/dc/pages/portal.tsx","./src/modules/dc/pages/tool-b/step1upload.tsx","./src/modules/dc/pages/tool-b/step2schema.tsx","./src/modules/dc/pages/tool-b/step3processing.tsx","./src/modules/dc/pages/tool-b/step4verify.tsx","./src/modules/dc/pages/tool-b/step5result.tsx","./src/modules/dc/pages/tool-b/index.tsx","./src/modules/dc/pages/tool-b/components/stepindicator.tsx","./src/modules/dc/pages/tool-c/index.tsx","./src/modules/dc/pages/tool-c/components/binningdialog.tsx","./src/modules/dc/pages/tool-c/components/binningdialog_improved.tsx","./src/modules/dc/pages/tool-c/components/computedialog.tsx","./src/modules/dc/pages/tool-c/components/conditionaldialog.tsx","./src/modules/dc/pages/tool-c/components/datagrid.tsx","./src/modules/dc/pages/tool-c/components/dropnadialog.tsx","./src/modules/dc/pages/tool-c/components/filterdialog.tsx","./src/modules/dc/pages/tool-c/components/header.tsx","./src/modules/dc/pages/tool-c/components/metrictimepanel.tsx","./src/modules/dc/pages/tool-c/components/missingvaluedialog.tsx","./src/modules/dc/pages/tool-c/components/multimetricpanel.tsx","./src/modules/dc/pages/tool-c/components/pivotdialog.tsx","./src/modules/dc/pages/tool-c/components/pivotpanel.tsx","./src/modules/dc/pages/tool-c/components/recodedialog.tsx","./src/modules/dc/pages/tool-c/components/sidebar.tsx","./src/modules/dc/pages/tool-c/components/streamingsteps.tsx","./src/modules/dc/pages/tool-c/components/toolbar.tsx","./src/modules/dc/pages/tool-c/components/transformdialog.tsx","./src/modules/dc/pages/tool-c/components/unpivotpanel.tsx","./src/modules/dc/pages/tool-c/hooks/usesessionstatus.ts","./src/modules/dc/pages/tool-c/types/index.ts","./src/modules/dc/types/portal.ts","./src/modules/pkb/index.tsx","./src/modules/pkb/api/knowledgebaseapi.ts","./src/modules/pkb/components/createkbdialog.tsx","./src/modules/pkb/components/documentlist.tsx","./src/modules/pkb/components/documentupload.tsx","./src/modules/pkb/components/editkbdialog.tsx","./src/modules/pkb/components/knowledgebaselist.tsx","./src/modules/pkb/components/workspace/batchmode.tsx","./src/modules/pkb/components/workspace/batchmodecomplete.tsx","./src/modules/pkb/components/workspace/deepreadmode.tsx","./src/modules/pkb/components/workspace/fulltextmode.tsx","./src/modules/pkb/components/workspace/workmodeselector.tsx","./src/modules/pkb/hooks/useworkmode.ts","./src/modules/pkb/pages/dashboardpage.tsx","./src/modules/pkb/pages/knowledgepage.tsx","./src/modules/pkb/pages/workspacepage.tsx","./src/modules/pkb/stores/useknowledgebasestore.ts","./src/modules/pkb/types/workspace.ts","./src/modules/rvw/index.tsx","./src/modules/rvw/api/index.ts","./src/modules/rvw/components/agentmodal.tsx","./src/modules/rvw/components/batchtoolbar.tsx","./src/modules/rvw/components/editorialreport.tsx","./src/modules/rvw/components/filterchips.tsx","./src/modules/rvw/components/header.tsx","./src/modules/rvw/components/methodologyreport.tsx","./src/modules/rvw/components/reportdetail.tsx","./src/modules/rvw/components/scorering.tsx","./src/modules/rvw/components/sidebar.tsx","./src/modules/rvw/components/taskdetail.tsx","./src/modules/rvw/components/tasktable.tsx","./src/modules/rvw/components/index.ts","./src/modules/rvw/pages/dashboard.tsx","./src/modules/rvw/types/index.ts","./src/modules/ssa/index.tsx","./src/modules/st/index.tsx","./src/pages/homepage.tsx","./src/pages/loginpage.tsx","./src/pages/admin/admindashboard.tsx","./src/pages/admin/prompteditorpage.tsx","./src/pages/admin/promptlistpage.tsx","./src/pages/admin/api/promptapi.ts","./src/pages/admin/components/prompteditor.tsx","./src/pages/admin/tenants/tenantdetailpage.tsx","./src/pages/admin/tenants/tenantlistpage.tsx","./src/pages/admin/tenants/api/tenantapi.ts","./src/pages/org/orgdashboard.tsx","./src/shared/components/placeholder.tsx","./src/shared/components/index.ts","./src/shared/components/chat/aistreamchat.tsx","./src/shared/components/chat/chatcontainer.tsx","./src/shared/components/chat/codeblockrenderer.tsx","./src/shared/components/chat/conversationlist.tsx","./src/shared/components/chat/messagerenderer.tsx","./src/shared/components/chat/thinkingblock.tsx","./src/shared/components/chat/index.ts","./src/shared/components/chat/types.ts","./src/shared/components/chat/hooks/index.ts","./src/shared/components/chat/hooks/useaistream.ts","./src/shared/components/chat/hooks/useconversations.ts"],"errors":true,"version":"5.9.3"}