sqlite-web 0.7.2
gitea.db
action_run
Create
Query
access
access_token
action
action_artifact
action_run
action_run_index
action_run_job
action_runner
action_runner_token
action_schedule
action_schedule_spec
action_task
action_task_output
action_task_step
action_tasks_version
action_variable
app_state
attachment
auth_token
badge
branch
collaboration
comment
commit_status
commit_status_index
commit_status_summary
commit_sync_log
commit_sync_status
dbfs_data
dbfs_meta
deploy_key
email_address
email_hash
external_login_user
follow
gpg_key
gpg_key_import
hook_task
issue
issue_assignees
issue_content_history
issue_dependency
issue_index
issue_label
issue_pin
issue_user
issue_watch
label
language_stat
lfs_lock
lfs_meta_object
login_source
milestone
mirror
notice
notification
oauth2_application
oauth2_authorization_code
oauth2_grant
org_user
package
package_blob
package_blob_upload
package_cleanup_rule
package_file
package_property
package_version
project
project_board
project_issue
protected_branch
protected_tag
public_key
pull_auto_merge
pull_request
push_mirror
reaction
release
renamed_branch
repo_archiver
repo_hidden_file
repo_indexer_status
repo_license
repo_redirect
repo_topic
repo_transfer
repo_unit
repository
review
review_state
secret
session
sqlite_sequence
star
stopwatch
system_setting
task
team
team_invite
team_repo
team_unit
team_user
topic
tracked_time
two_factor
upload
user
user_badge
user_blocking
user_open_id
user_redirect
user_setting
version
watch
webauthn_credential
webhook
Toggle helper tables
Structure
Content
Query
Insert
Drop
Import
Export
Update row 7516 in action_run
id
Primary key.
INTEGER NOT NULL
title
fix: 全面分析修复 — 44项安全+性能+架构+类型安全治理
TEXT
repo_id
INTEGER
owner_id
INTEGER
workflow_id
health-check.yml
TEXT
index
INTEGER
trigger_user_id
INTEGER
schedule_id
INTEGER
ref
refs/heads/main
TEXT
commit_sha
ff3149170c6b0deb6d8151cb962592199b95bdd8
TEXT
is_fork_pull_request
INTEGER
need_approval
INTEGER
approved_by
INTEGER
event
push
TEXT
event_payload
{"ref":"refs/heads/main","before":"67078f9a95f53530156ad27027eafe15a3126e89","after":"ff3149170c6b0deb6d8151cb962592199b95bdd8","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/67078f9a95f53530156ad27027eafe15a3126e89...ff3149170c6b0deb6d8151cb962592199b95bdd8","commits":[{"id":"ff3149170c6b0deb6d8151cb962592199b95bdd8","message":"fix: 全面分析修复 — 44项安全+性能+架构+类型安全治理\n\n## 安全修复 (12项)\n- CRITICAL: 修复 knowledge-vector SQL 注入 + event-subscription SQL 注入\n- HIGH: 5处 $queryRawUnsafe → Prisma.sql, PDF XSS 防护, 租户严格模式\n- MEDIUM: 健康端点认证, CORS生产校验, PII脱敏, 权限缓存清除API\n\n## 性能优化 (5项)\n- N+1: getBulkSalesProfiles 800→9次, syncLinkStatistics 3N+1→3次\n- syncConversionStats 批量事务, leads 7索引补充, 慢查询监控恢复\n\n## 架构合规 (14项)\n- 12个controller prisma调用下沉service + requireTenantContext全局启用\n\n## 类型安全 — 77处as any清零\n- process-adapter 39→0, case-converter 15→0, validation 11→0, main 6→0\n\n## 前端v-permission核心链路6模块73指令 + 代码卫生清理\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/ff3149170c6b0deb6d8151cb962592199b95bdd8","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-24T01:13:11+08:00","added":[],"removed":["backend/src/modules/diagnosis/diagnosis.routes.ts.disabled","backend/src/modules/stage-knowledge/stage-knowledge.controller.ts.new","frontend/src/views/ai-agents/TasksReview.vue.orig","frontend/src/views/ai-agents/TasksReview.vue.patch"],"modified":["backend/prisma/schema.prisma","backend/prisma/schema/leads.prisma","backend/src/config/env.ts","backend/src/config/prisma-tenant-middleware.ts","backend/src/main.ts","backend/src/modules/ai-agents/ai-agent.controller.ts","backend/src/modules/ai-agents/ai-agent.service.ts","backend/src/modules/ai-agents/services/knowledge-vector-enhanced.service.ts","backend/src/modules/approvals/approval.controller.ts","backend/src/modules/auth/auth.service.ts","backend/src/modules/community-analytics/community-analytics.controller.ts","backend/src/modules/community-analytics/community-analytics.service.ts","backend/src/modules/contracts/contract.service.ts","backend/src/modules/customers/customer.controller.ts","backend/src/modules/customers/customer.service.ts","backend/src/modules/event-subscriptions/event-subscription-change-request.store.ts","backend/src/modules/fulfillment/fulfillment.controller.ts","backend/src/modules/fulfillment/fulfillment.service.ts","backend/src/modules/integration-services/integration-service.service.ts","backend/src/modules/inventory/inventory.controller.ts","backend/src/modules/inventory/services/inventory-reservation.service.ts","backend/src/modules/leads/lead-smart-assignment.service.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.service.ts","backend/src/modules/omnichannel-dashboard/omnichannel-dashboard.controller.ts","backend/src/modules/omnichannel-dashboard/omnichannel-dashboard.service.ts","backend/src/modules/omnichannel-data-hub/omnichannel-data-hub.controller.ts","backend/src/modules/omnichannel-data-hub/omnichannel-data-hub.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/service-monitor/service-disruption.service.ts","backend/src/modules/tickets/ticket.controller.ts","backend/src/modules/tickets/ticket.service.ts","backend/src/shared/middleware/auth.middleware.ts","backend/src/shared/middleware/case-converter.middleware.ts","backend/src/shared/middleware/slow-query.middleware.ts","backend/src/shared/process-core/process-adapter.ts","backend/src/shared/state-machines/index.ts","backend/src/shared/utils/runtime-schema-bridge.ts","backend/src/shared/utils/validation.ts","frontend/src/api/client.ts","frontend/src/utils/pdf.ts","frontend/src/views/contracts/Detail.vue","frontend/src/views/contracts/Index.vue","frontend/src/views/leads/Detail.vue","frontend/src/views/leads/Index.vue","frontend/src/views/opportunities/Detail.vue","frontend/src/views/opportunities/Index.vue","frontend/src/views/orders/Detail.vue","frontend/src/views/orders/Index.vue","frontend/src/views/quotes/Detail.vue","frontend/src/views/quotes/Index.vue","frontend/src/views/tickets/Detail.vue","frontend/src/views/tickets/Index.vue","scripts/check-consistency.ts"]},{"id":"9a8bbf8de635bd87de19154ac349be5f21784d52","message":"fix: P2+P3 安全加固+质量提升 — 39 MEDIUM + 21 LOW 缺陷修复\n\n## 后端安全加固(10项)\n- 登录错误消息脱敏(不泄露剩余尝试次数)\n- 用户枚举 Timing Attack 防护(dummy bcrypt 消除时间差)\n- RMA 退货期限校验(30天,通过 SN 间接关联订单)\n- Order schema 金额上限 999999999.99\n- 门店批量状态更新加 $transaction\n- 序列号批量激活加 $transaction\n- Redis 缓存 delete-before-write 一致性改进\n- Opportunity bizCode 自动生成(空值防护)\n- SLA 暂停分钟数 Math.round → Math.floor(防误差累积)\n- system-monitor 6 处 $queryRawUnsafe → $queryRaw(杜绝 SQL 注入)\n\n## 前端安全+质量(6 P2 + 4 P3)\n- tickets/Detail.vue v-html 增加 DOMPurify 净化层\n- 幂等 Key 重复代码提取到 utils/idempotency.ts\n- useFormDraft sessionStorage try-catch 防溢出\n- useListPage handleLoadMore 基于 id 去重\n- response-normalizer 兜底搜索限定白名单字段\n- social-analytics window.open URL 协议校验\n- error.middleware TraceId 改用 crypto.randomUUID\n- Lead/Quote format 去 any → Record\u003cstring, unknown\u003e\n- Lead AI 评分并发限制(每批 5 个)\n- 4 个测试文件 console.log 清理\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/9a8bbf8de635bd87de19154ac349be5f21784d52","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-23T21:01:40+08:00","added":["frontend/src/utils/idempotency.ts"],"removed":[],"modified":["backend/src/modules/auth/auth.service.ts","backend/src/modules/leads/lead-smart-assignment.service.ts","backend/src/modules/leads/lead.service.ts","backend/src/modules/opportunities/opportunity.service.ts","backend/src/modules/orders/order.schema.ts","backend/src/modules/quotes/quote.service.ts","backend/src/modules/rma/rma.service.ts","backend/src/modules/serial-numbers/sn.service.ts","backend/src/modules/sla/sla.service.ts","backend/src/modules/stores/store.service.ts","backend/src/modules/system-monitor/system-monitor.service.ts","backend/src/shared/middleware/error.middleware.ts","frontend/src/api/client.ts","frontend/src/api/response-normalizer.ts","frontend/src/composables/useFormDraft.ts","frontend/src/composables/useFormSubmit.ts","frontend/src/composables/useListPage.ts","frontend/src/views/content-library/__tests__/content-library-g4.smoke.test.ts","frontend/src/views/menus/__tests__/menus-g4.smoke.test.ts","frontend/src/views/scheduled-jobs/__tests__/scheduled-jobs-g4.smoke.test.ts","frontend/src/views/social-analytics/Index.vue","frontend/src/views/social-analytics/__tests__/social-analytics-g4.smoke.test.ts","frontend/src/views/tickets/Detail.vue"]},{"id":"076415ad09aa56a849acfbb65520f57320ec54d7","message":"fix: P1 事务原子性+业务逻辑+前端安全修复 — 34 HIGH 缺陷解决\n\n## 事务缺失+事件原子性(8项 + 25处 void catch 消除)\n- 序列号激活包入 $transaction(sn.service.ts)\n- 出库单 deliver 包入 $transaction(shipment.service.ts)\n- 合同 create 事件移入事务内(contract.service.ts)\n- Lead marketing 事件去冗余事务(lead.service.ts)\n- BaseService batchUpdate/batchDelete 加事务保护\n- 13 个文件 25 处 void publishEvent().catch 替换为 logger.error\n- Order 状态转换加 status 条件更新(乐观锁)\n- SLA resume 改用 addBusinessMinutes(跳过非工作时段)\n\n## 业务逻辑+校验缺失(10项)\n- 工单 assign 校验用户有效性+租户归属\n- Order assign 校验用户租户归属\n- Opportunity create 校验 leadId/contactId 租户归属\n- Lead release 添加 canTransitionLead 校验(去除 as any)\n- 结算冲销 metadata 合并而非覆盖\n- Order update 拒绝 closed/cancelled/completed 状态编辑\n- Quote convertToContract 重构为单一事务 + 条件更新\n- getCurrentUser 添加 tenant_id 过滤\n- 工单 escalate 联动更新 priority + SLA 重匹配\n- 工单 start firstResponseAt 防覆盖\n\n## 前端安全+状态管理(6项)\n- API 响应拦截器增加 HTML/非对象响应防御\n- 多 Tab 登出同步(storage 事件监听)\n- 权限不足时 ElMessage.warning 提示\n- 路由 chunk 加载失败自动刷新(防循环)\n- useListPage handleDelete loading 守卫\n- localStorage Token 仅开发环境写入\n\n测试:87/87 通过(orders+contracts+leads+sla+base.service)\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/076415ad09aa56a849acfbb65520f57320ec54d7","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-23T20:52:01+08:00","added":[],"removed":[],"modified":["backend/src/modules/ai-agents/services/knowledge-vector-enhanced.service.ts","backend/src/modules/auth/auth.controller.ts","backend/src/modules/auth/auth.service.ts","backend/src/modules/contracts/contract.service.ts","backend/src/modules/customer-balance/customer-balance.service.ts","backend/src/modules/customers/customer-health.service.ts","backend/src/modules/financial-reports/financial-reports.service.ts","backend/src/modules/im/im-event-bridge.service.ts","backend/src/modules/im/im-workflow-sync.service.ts","backend/src/modules/leads/lead-import.service.ts","backend/src/modules/leads/lead.service.ts","backend/src/modules/marketing/services/attribution.service.ts","backend/src/modules/marketing/services/cac-ltv.service.ts","backend/src/modules/opportunities/opportunity-export.service.ts","backend/src/modules/opportunities/opportunity.service.ts","backend/src/modules/orders/order.service.ts","backend/src/modules/quotes/quote.service.ts","backend/src/modules/reconciliation/matching-engine.service.ts","backend/src/modules/revenue/sales-commission.service.ts","backend/src/modules/sample-requests/sample-request.service.ts","backend/src/modules/serial-numbers/sn.service.ts","backend/src/modules/shipments/shipment.service.ts","backend/src/modules/sla/sla.service.test.ts","backend/src/modules/sla/sla.service.ts","backend/src/modules/store-settlements/store-settlements.service.ts","backend/src/modules/tickets/ticket.service.ts","backend/src/shared/services/base.service.ts","frontend/src/api/client.ts","frontend/src/composables/useListPage.ts","frontend/src/router/index.ts","frontend/src/router/not-found-support.ts","frontend/src/stores/auth.ts"]},{"id":"6830b2416fb6af52cf44ff07ef793f66a1d59334","message":"fix: P0 安全+并发+隔离缺陷修复 — 19 CRITICAL 全部解决\n\n## 安全修复(S1-S3 + 额外 3 项)\n- 8 个运维端点加 authenticate + requireSuperAdmin 认证保护\n- 禁用未实现的注册/密码重置端点(返回 400)\n- Refresh Token Cookie maxAge 与 Redis TTL 对齐(30天→7天)\n- Redis 降级方向修正:故障时拒绝登录(非放行)\n- 无角色用户登录拒绝(非赋默认权限)\n- Prisma 错误信息生产环境脱敏(不返回 meta/SQL)\n\n## 多租户隔离修复(T1-T2 + E1)\n- Opportunity 5 处 update({ where: { id } }) → updateMany + tenant_id\n- Order 8 处同样模式修复(含 shipments/payments 关联表)\n- Opportunity 8 处 publishLifecycleEvent 添加 tx 参数\n\n## 并发安全修复(C1-C6 + F1-F2)\n- 库存扣减加 FOR UPDATE 行锁(防超卖)\n- 发货取消时回滚库存 + 记录流水\n- 客户余额 6 个操作方法加 FOR UPDATE(防资金丢失)\n- 结算金额改用 Prisma Decimal 精确运算\n- 佣金费率总和 ≤100% 校验\n- 团购核销包裹 $transaction + 条件 updateMany\n- BizCode 批量生成改用 upsert 原子操作\n\n## 状态机竞态修复(L1 + C6)\n- SLA 暂停/恢复/停止全部移入工单事务内\n- 工单 reopen 改用 assertTransition 标准流程\n- 联盟协议 5 个状态转换加 $transaction + 条件更新\n- 工单 cancel 重构为标准事务模式\n\n## 前端安全修复(FE1-FE4)\n- useListPage 请求序号机制(防列表竞态)\n- 12 个 Form.vue 补防重复提交守卫\n- 路由参数 UUID 格式全局校验\n- 12 处 window.open 加 noopener,noreferrer\n\n测试:31/31 通过(opportunity 19 + order 12)\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/6830b2416fb6af52cf44ff07ef793f66a1d59334","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-23T20:38:50+08:00","added":[".dockerignore",".github/workflows/test-pipeline.yml","deploy/logrotate/juhi.conf","docs/guides/module-dependency-guide.md","docs/guides/module-prerequisites-guide.md","frontend/public/icons/.gitkeep","frontend/public/manifest.json","frontend/public/sw.js","frontend/src/components/common/SkeletonLoader.vue","frontend/src/directives/lazy-img.ts","frontend/src/styles/_dark-mode.scss","frontend/src/styles/_mobile-global.scss","scripts/incident-response.sh","scripts/ops-status.sh","scripts/setup-cron.sh","scripts/ssl-self-signed.sh"],"removed":[".github/workflows/ci.yml",".github/workflows/database-security.yml",".github/workflows/deploy-aliyun.yml",".github/workflows/integration-test.yml",".github/workflows/quality-check.yml",".github/workflows/test.yml","frontend/src/stores/__tests__/knowledge.store.test.ts","frontend/src/stores/assets.ts","frontend/src/stores/contracts.ts","frontend/src/stores/knowledge.ts","frontend/src/stores/partners.ts"],"modified":[".github/workflows/deploy.yml","Makefile","backend/src/config/env.ts","backend/src/main.ts","backend/src/modules/alliance-agreements/alliance-agreement.service.ts","backend/src/modules/auth/auth.controller.ts","backend/src/modules/auth/auth.service.ts","backend/src/modules/customer-balance/customer-balance.service.ts","backend/src/modules/groupbuy-redemptions/groupbuy-redemption.service.ts","backend/src/modules/inventory/inventory.service.ts","backend/src/modules/opportunities/opportunity.service.test.ts","backend/src/modules/opportunities/opportunity.service.ts","backend/src/modules/orders/order.service.test.ts","backend/src/modules/orders/order.service.ts","backend/src/modules/shipments/shipment.service.ts","backend/src/modules/store-settlements/store-settlements.service.ts","backend/src/modules/tickets/ticket.service.ts","backend/src/shared/middleware/encryption.middleware.ts","backend/src/shared/middleware/error.middleware.ts","backend/src/shared/utils/biz-code.ts","backend/src/shared/utils/password.ts","deploy/prometheus/prometheus.yml","deploy/prometheus/rules/alerts.yml","docker-compose.prod.yml","frontend/index.html","frontend/src/components/common/DataTable.vue","frontend/src/components/common/PageHeader.vue","frontend/src/components/common/index.ts","frontend/src/components/layout/AppLayout.vue","frontend/src/components/layout/Header.vue","frontend/src/components/layout/MobileBottomNav.vue","frontend/src/components/layout/MobileDrawer.vue","frontend/src/components/layout/MobileHeader.vue","frontend/src/composables/useListPage.ts","frontend/src/directives/index.ts","frontend/src/main.ts","frontend/src/router/index.ts","frontend/src/styles/_variables.scss","frontend/src/styles/index.scss","frontend/src/styles/transitions.scss","frontend/src/utils/message-throttle.ts","frontend/src/utils/pdf.ts","frontend/src/utils/validators.ts","frontend/src/views/Login.vue","frontend/src/views/abm-marketing/Index.vue","frontend/src/views/acquisition/Index.vue","frontend/src/views/ad-analytics/Index.vue","frontend/src/views/ad-placement/Index.vue","frontend/src/views/admin/Workbench.vue","frontend/src/views/ai-agents/Index.vue","frontend/src/views/ai-agents/Models.vue","frontend/src/views/ai-agents/Overview.vue","frontend/src/views/ai-agents/TasksPending.vue","frontend/src/views/ai-agents/autopilot/AutoGrowth.vue","frontend/src/views/ai-agents/autopilot/AutoOps.vue","frontend/src/views/ai-agents/autopilot/Flows.vue","frontend/src/views/ai-agents/autopilot/NaturalCommand.vue","frontend/src/views/ai-agents/autopilot/Overview.vue","frontend/src/views/ai-copilot/Index.vue","frontend/src/views/alliance-agreements/Index.vue","frontend/src/views/alliance-analytics/Index.vue","frontend/src/views/alliance-campaigns/Index.vue","frontend/src/views/alliance-coupons/Index.vue","frontend/src/views/alliance-merchants/Index.vue","frontend/src/views/alliance-packages/Index.vue","frontend/src/views/alliance-partners/Index.vue","frontend/src/views/alliance-products/Index.vue","frontend/src/views/alliance-promotions/Index.vue","frontend/src/views/alliance-referrals/Index.vue","frontend/src/views/alliance-settlements/Index.vue","frontend/src/views/analytics/Index.vue","frontend/src/views/analytics/roi/Index.vue","frontend/src/views/ap-ledger/Index.vue","frontend/src/views/approval-configs/Form.vue","frontend/src/views/approval-templates/Form.vue","frontend/src/views/approvals/Detail.vue","frontend/src/views/approvals/Index.vue","frontend/src/views/ar-ledger/Index.vue","frontend/src/views/ar-ledger/components/CollectionManager.vue","frontend/src/views/ar-ledger/components/StatementGenerator.vue","frontend/src/views/assembly/AssemblyOrderList.vue","frontend/src/views/assembly/AssemblyReceiptList.vue","frontend/src/views/assembly/BomList.vue","frontend/src/views/assembly/MaterialIssueList.vue","frontend/src/views/attribution-models/Index.vue","frontend/src/views/attribution-reports/Index.vue","frontend/src/views/auth/Index.vue","frontend/src/views/biz-sequences/Form.vue","frontend/src/views/bom/Index.vue","frontend/src/views/campaign-analytics/Index.vue","frontend/src/views/campaign-library/Index.vue","frontend/src/views/campaigns/Detail.vue","frontend/src/views/campaigns/Form.vue","frontend/src/views/campaigns/Index.vue","frontend/src/views/campaigns/components/CampaignDetail.vue","frontend/src/views/campaigns/components/StoreSelectionDialog.vue","frontend/src/views/campaigns/wizard/index.vue","frontend/src/views/cash-flow/Index.vue","frontend/src/views/channel-analytics/Index.vue","frontend/src/views/channel-integrations/Form.vue","frontend/src/views/channels/Detail.vue","frontend/src/views/channels/Form.vue","frontend/src/views/channels/Index.vue","frontend/src/views/commissions/Index.vue","frontend/src/views/commissions/components/MyCommissionsTab.vue","frontend/src/views/community-gamification/Index.vue","frontend/src/views/content-analytics/Index.vue","frontend/src/views/conversion-paths/Index.vue","frontend/src/views/cost-allocation/Index.vue","frontend/src/views/crm-activities/Index.vue","frontend/src/views/customer-analytics/Index.vue","frontend/src/views/customer-health/Index.vue","frontend/src/views/customer-ltv/Index.vue","frontend/src/views/customer-profit/Index.vue","frontend/src/views/customers/Detail.vue","frontend/src/views/customers/Form.vue","frontend/src/views/customers/Index.vue","frontend/src/views/dashboard/Index.vue","frontend/src/views/dashboard/components/FunnelChart.vue","frontend/src/views/dashboard/components/ProfitAnalysis.vue","frontend/src/views/dashboard/components/RecentActivities.vue","frontend/src/views/dashboard/components/SLAMetrics.vue","frontend/src/views/departments/Index.vue","frontend/src/views/devices/Index.vue","frontend/src/views/diagnosis/Index.vue","frontend/src/views/email-marketing/Index.vue","frontend/src/views/email-templates/Form.vue","frontend/src/views/expense-claims/Index.vue","frontend/src/views/faults/Index.vue","frontend/src/views/files/Index.vue","frontend/src/views/finance-os/ai/AutoCreditAdjustment.vue","frontend/src/views/finance-os/ai/CashForecastModel.vue","frontend/src/views/finance-os/ai/DefaultProbabilityModel.vue","frontend/src/views/finance-os/ai/ROIEvaluation.vue","frontend/src/views/finance-os/cash/CashControlTower.vue","frontend/src/views/finance-os/shared/FinanceGovernanceShell.vue","frontend/src/views/finance/Index.vue","frontend/src/views/financial-reports/Index.vue","frontend/src/views/fulfillment/Index.vue","frontend/src/views/geo-analysis/Index.vue","frontend/src/views/groupbuy-platforms/Index.vue","frontend/src/views/hr/training/components/CertificatesTab.vue","frontend/src/views/im/Index.vue","frontend/src/views/inventory/Index.vue","frontend/src/views/invoices/Detail.vue","frontend/src/views/invoices/Form.vue","frontend/src/views/journey-orchestration/Detail.vue","frontend/src/views/landing-pages/Index.vue","frontend/src/views/leads/Detail.vue","frontend/src/views/leads/Form.vue","frontend/src/views/leads/Index.vue","frontend/src/views/livestream-groupbuy-conversion/Index.vue","frontend/src/views/livestream/Index.vue","frontend/src/views/maintenance/Calendar.vue","frontend/src/views/maintenance/Index.vue","frontend/src/views/maintenance/PlanDetail.vue","frontend/src/views/maintenance/PlanForm.vue","frontend/src/views/maintenance/TaskDetail.vue","frontend/src/views/maintenance/TaskForm.vue","frontend/src/views/marketing-automation/Form.vue","frontend/src/views/marketing-automation/Index.vue","frontend/src/views/marketing-calendar/Index.vue","frontend/src/views/marketing-chatbot/Index.vue","frontend/src/views/marketing-content/Index.vue","frontend/src/views/marketing-forms/Index.vue","frontend/src/views/marketing-matrix/Index.vue","frontend/src/views/marketing-north-star/Index.vue","frontend/src/views/metric-tree/Index.vue","frontend/src/views/notification-configs/Form.vue","frontend/src/views/notifications/Index.vue","frontend/src/views/opportunities/Detail.vue","frontend/src/views/opportunities/Form.vue","frontend/src/views/opportunities/Pipeline.vue","frontend/src/views/org-chart/Index.vue","frontend/src/views/partner-customers/Index.vue","frontend/src/views/payment-analytics/Index.vue","frontend/src/views/payments/Index.vue","frontend/src/views/pm/Calendar.vue","frontend/src/views/pm/Detail.vue","frontend/src/views/price-books/Detail.vue","frontend/src/views/process-designer/Designer.vue","frontend/src/views/product-analytics/Index.vue","frontend/src/views/products/Detail.vue","frontend/src/views/projects/Calendar.vue","frontend/src/views/projects/Detail.vue","frontend/src/views/projects/Gantt.vue","frontend/src/views/projects/GlobalGantt.vue","frontend/src/views/qr-codes/Index.vue","frontend/src/views/realtime-trigger/Detail.vue","frontend/src/views/realtime/Index.vue","frontend/src/views/reconciliation/Index.vue","frontend/src/views/reports/Index.vue","frontend/src/views/resource-requests/index.vue","frontend/src/views/roles/components/PermissionAssign.vue","frontend/src/views/sales-dashboard/Index.vue","frontend/src/views/sales-funnel/Index.vue","frontend/src/views/sample-requests/Form.vue","frontend/src/views/sample-requests/Index.vue","frontend/src/views/satisfaction/Analytics.vue","frontend/src/views/search/Index.vue","frontend/src/views/segments/Form.vue","frontend/src/views/serial-numbers/Activate.vue","frontend/src/views/serial-numbers/Index.vue","frontend/src/views/service-dashboard/Index.vue","frontend/src/views/service-dashboard/components/AlertsPanel.vue","frontend/src/views/service-dashboard/components/OverviewCards.vue","frontend/src/views/service-dashboard/components/SLAPanel.vue","frontend/src/views/service-dashboard/components/SatisfactionPanel.vue","frontend/src/views/service-dashboard/components/TicketStatsPanel.vue","frontend/src/views/service-dashboard/components/TrendsPanel.vue","frontend/src/views/service/TicketGantt.vue","frontend/src/views/shipments/Detail.vue","frontend/src/views/shipments/Form.vue","frontend/src/views/sms-marketing/Index.vue","frontend/src/views/social-analytics/Index.vue","frontend/src/views/social-matrix/Index.vue","frontend/src/views/spare-parts/Index.vue","frontend/src/views/stores/Detail.vue","frontend/src/views/stores/Form.vue","frontend/src/views/supplier-management/Index.vue","frontend/src/views/supplier-payments/Index.vue","frontend/src/views/suppliers/Form.vue","frontend/src/views/supply-chain/Index.vue","frontend/src/views/system-events/Index.vue","frontend/src/views/system-monitor/Index.vue","frontend/src/views/tickets/Detail.vue","frontend/src/views/treasury/Index.vue","frontend/src/views/users/Index.vue","frontend/src/views/utm-tracking/Index.vue","frontend/src/views/video-analytics/Index.vue","frontend/src/views/video-calls/Form.vue","frontend/src/views/video-calls/Index.vue","frontend/src/views/web-tracking/Index.vue","frontend/src/views/workflow-generator/Index.vue","frontend/vite.config.ts","pnpm-lock.yaml","scripts/backup-docker-full.sh","scripts/blue-green-deploy.sh","scripts/cleanup.sh","scripts/deploy.sh","scripts/diagnose.sh","scripts/healthcheck.sh","scripts/migrate-db.sh","scripts/monitor.sh","scripts/one-click-dev.sh","scripts/pg-backup.sh","scripts/pre-deploy-check.sh","scripts/reset-db.sh","scripts/restart-dev.sh","scripts/setup-aliyun-deploy.sh","scripts/start-backend.sh","scripts/start-dev.sh","scripts/status.sh","scripts/stop-all.sh","scripts/stop-dev.sh"]},{"id":"a9c37ba6a57b57becc274010f8b892e28e5a7d30","message":"refactor: 全栈死代码清理 + 重复消除 — 22 Agent 协作治理\n\n## 死代码清理(Phase 1-2 + Phase 4)\n- 删除 68 个死文件(20 service + 19 vue + 8 composable + 4 store + 3 API + 10 test + 2 util)\n- 卸载 4 个死 npm 包(express-validator / redis / @types/handlebars / @types/marked)\n- 删除 LLM 孤岛三件套(llm-gateway / prompt-registry / rag-pipeline)\n- 更新 6 个 barrel export 文件\n\n## 重复代码消除(Phase 3 全量推广)\n- asyncHandler Controller 改造:282/309(91.3%),4,443 个方法消除 try-catch 样板\n- idParamsSchema + withIdParams 工厂:180 个 schema 文件,1,016 处简化\n- toCamelCaseKeys 导入路径统一:105 个文件,207/207 达到 100%\n- useListPage composable:13 个 Index.vue 列表页样板消除\n- createCrudApi 工厂迁移:+24 个 API 模块(31% → 40%)\n- BaseService 迁移:+10 个纯 CRUD 模块(185 → 195)\n- el-table → DataTable 统一:+13 个页面(53% → 58%)\n\n## Bug 修复\n- SLA controller: next() → throw(authHandler 内不可用 next)\n- auth controller: 3 处 return next(error) → throw\n- cpq controller: 嵌套 try-catch 正确处理\n- useListPage: tableData 类型推断修复(Ref\u003cT[]\u003e)\n\n净减少 ~45,700 行代码,669 文件变更,283 个测试全绿。\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/a9c37ba6a57b57becc274010f8b892e28e5a7d30","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-23T20:19:56+08:00","added":["frontend/src/components/mobile/OfflineBanner.vue","frontend/src/components/mobile/PWAInstallPrompt.vue","frontend/src/components/mobile/QuickActions.vue","frontend/src/composables/useNetworkStatus.ts","frontend/src/composables/useSwipeBack.ts","frontend/src/composables/useTheme.ts"],"removed":["backend/src/shared/services/__tests__/approval-notification-template.service.test.ts","backend/src/shared/services/__tests__/batch-operations.service.test.ts","backend/src/shared/services/__tests__/configuration.service.test.ts","backend/src/shared/services/__tests__/conversion.service.test.ts","backend/src/shared/services/__tests__/custom-fields.service.test.ts","backend/src/shared/services/__tests__/dynamic-state-machine.service.test.ts","backend/src/shared/services/__tests__/list-cache.service.test.ts","backend/src/shared/services/__tests__/llm-gateway.service.test.ts","backend/src/shared/services/__tests__/prompt-registry.service.test.ts","backend/src/shared/services/__tests__/quote-opportunity-sync.service.test.ts","backend/src/shared/services/abac-policy.service.ts","backend/src/shared/services/approval-notification-template.service.ts","backend/src/shared/services/batch-operations.service.ts","backend/src/shared/services/business-line-adapters.service.ts","backend/src/shared/services/configuration.service.ts","backend/src/shared/services/conversion.service.ts","backend/src/shared/services/custom-fields.service.ts","backend/src/shared/services/dynamic-state-machine.service.ts","backend/src/shared/services/immutable-audit.service.ts","backend/src/shared/services/list-cache.service.ts","backend/src/shared/services/llm-gateway.service.ts","backend/src/shared/services/marketing-tool-factory.service.ts","backend/src/shared/services/materialized-view.service.ts","backend/src/shared/services/outbox-processor-example.service.ts","backend/src/shared/services/prompt-registry.service.ts","backend/src/shared/services/quote-opportunity-sync.service.ts","backend/src/shared/services/rag-pipeline.service.ts","backend/src/shared/services/unified-campaign.service.ts","backend/src/shared/utils/api-docs.ts","backend/src/uat-proving.ts","frontend/src/api/modules/ai-agents.ts","frontend/src/api/modules/cache-warmup.ts","frontend/src/api/modules/customer-journey-orchestration.ts","frontend/src/components/business/AICommandInput.vue","frontend/src/components/business/ActivityQuickCreate.vue","frontend/src/components/business/EventInsightsInput.vue","frontend/src/components/business/KnowledgeInserter.vue","frontend/src/components/business/KnowledgePackDrawer.vue","frontend/src/components/business/KnowledgeRecommender.vue","frontend/src/components/business/LeadScoreCard.vue","frontend/src/components/business/ObjectionFloater.vue","frontend/src/components/im/EntityCard.vue","frontend/src/components/marketing/CampaignBuilder.vue","frontend/src/components/marketing/MarketingToolForm.vue","frontend/src/components/marketing/MarketingToolSelector.vue","frontend/src/components/marketing/settings/DefaultTobSettings.vue","frontend/src/components/marketing/settings/DefaultTocSettings.vue","frontend/src/components/marketing/tools/DefaultToolConfig.vue","frontend/src/components/responsive/ResponsiveDialog.vue","frontend/src/components/responsive/ResponsiveForm.vue","frontend/src/composables/__tests__/useApprovalFlow.test.ts","frontend/src/composables/__tests__/useEntityChat.test.ts","frontend/src/composables/__tests__/useStageKnowledge.test.ts","frontend/src/composables/useABAC.ts","frontend/src/composables/useApprovalFlow.ts","frontend/src/composables/useE2EEncryption.ts","frontend/src/composables/useEntityChat.ts","frontend/src/composables/useEntityState.ts","frontend/src/composables/useMenuAudit.ts","frontend/src/composables/useSceneContext.ts","frontend/src/composables/useStageKnowledge.ts"],"modified":["backend/package.json","backend/src/modules/ad-accounts/ad-account.controller.ts","backend/src/modules/ad-audiences/ad-audience.controller.ts","backend/src/modules/ad-biddings/ad-bidding.controller.ts","backend/src/modules/ad-biddings/ad-bidding.schema.ts","backend/src/modules/ad-biddings/ad-bidding.service.ts","backend/src/modules/ad-campaigns/ad-campaigns.controller.ts","backend/src/modules/ad-campaigns/ad-campaigns.schema.ts","backend/src/modules/ad-creatives/ad-creative.controller.ts","backend/src/modules/ad-creatives/ad-creative.schema.ts","backend/src/modules/ad-placement/ad-creative.controller.ts","backend/src/modules/ad-placement/ad-creative.schema.ts","backend/src/modules/ad-placement/placement.controller.ts","backend/src/modules/ad-placement/placement.schema.ts","backend/src/modules/ad-reports/ad-report.controller.ts","backend/src/modules/admin-settings/admin-settings.controller.ts","backend/src/modules/admin-settings/admin-settings.schema.ts","backend/src/modules/aging-analysis/aging-analysis.controller.ts","backend/src/modules/ai-agent-skills/ai-agent-skills.controller.ts","backend/src/modules/ai-agent-skills/ai-agent-skills.schema.ts","backend/src/modules/ai-agents/agent-group.controller.ts","backend/src/modules/ai-agents/agent-group.schema.ts","backend/src/modules/ai-agents/ai-agent-im.controller.ts","backend/src/modules/ai-agents/ai-agent-im.schema.ts","backend/src/modules/ai-agents/ai-agent.controller.ts","backend/src/modules/ai-agents/ai-agent.schema.ts","backend/src/modules/ai-agents/ai-autopilot-ai-test.controller.ts","backend/src/modules/ai-agents/ai-autopilot.controller.ts","backend/src/modules/ai-agents/ai-autopilot.schema.ts","backend/src/modules/ai-copilot/ai-copilot.controller.ts","backend/src/modules/ai-copilot/ai-copilot.schema.ts","backend/src/modules/ai-review-queue/ai-review-queue.controller.ts","backend/src/modules/ai-review-queue/ai-review-queue.schema.ts","backend/src/modules/alliance-agreements/alliance-agreement.controller.ts","backend/src/modules/alliance-analytics/alliance-analytics.controller.ts","backend/src/modules/alliance-campaigns/alliance-campaign.controller.ts","backend/src/modules/alliance-coupons/alliance-coupon.controller.ts","backend/src/modules/alliance-coupons/alliance-coupon.schema.ts","backend/src/modules/alliance-coupons/alliance-coupon.service.ts","backend/src/modules/alliance-merchants/alliance-merchant.controller.ts","backend/src/modules/alliance-merchants/alliance-merchant.schema.ts","backend/src/modules/alliance-packages/alliance-package.controller.ts","backend/src/modules/alliance-packages/alliance-package.schema.ts","backend/src/modules/alliance-packages/alliance-package.service.ts","backend/src/modules/alliance-partners/alliance-partner.controller.ts","backend/src/modules/alliance-partners/alliance-partner.schema.ts","backend/src/modules/alliance-products/alliance-product.controller.ts","backend/src/modules/alliance-products/alliance-product.schema.ts","backend/src/modules/alliance-promotions/alliance-promotion.controller.ts","backend/src/modules/alliance-promotions/alliance-promotion.schema.ts","backend/src/modules/alliance-promotions/alliance-promotion.service.ts","backend/src/modules/alliance-referrals/alliance-referral.controller.ts","backend/src/modules/alliance-referrals/alliance-referral.schema.ts","backend/src/modules/alliance-referrals/alliance-referral.service.ts","backend/src/modules/alliance-settlements/alliance-settlement.controller.ts","backend/src/modules/alliance-settlements/alliance-settlement.schema.ts","backend/src/modules/analytics/analytics.controller.ts","backend/src/modules/approval-templates/approval-template.controller.ts","backend/src/modules/approval-templates/approval-template.schema.ts","backend/src/modules/approvals/approval.controller.ts","backend/src/modules/approvals/approval.schema.ts","backend/src/modules/assembly/assembly.controller.ts","backend/src/modules/assembly/assembly.schema.ts","backend/src/modules/assets/asset.controller.ts","backend/src/modules/assets/asset.schema.ts","backend/src/modules/attribution/attribution.controller.ts","backend/src/modules/attribution/attribution.schema.ts","backend/src/modules/audit-logs/audit-log.controller.ts","backend/src/modules/auth/auth.controller.ts","backend/src/modules/auth/auth.schema.ts","backend/src/modules/biz-sequences/biz-sequence.controller.ts","backend/src/modules/biz-sequences/biz-sequence.schema.ts","backend/src/modules/bom/bom.controller.ts","backend/src/modules/bom/bom.schema.ts","backend/src/modules/cache-warmup/cache-warmup.controller.ts","backend/src/modules/cache-warmup/cache-warmup.schema.ts","backend/src/modules/campaign-analytics/campaign-analytics.controller.ts","backend/src/modules/campaign-analytics/campaign-analytics.schema.ts","backend/src/modules/campaign-drafts/campaign-draft.controller.ts","backend/src/modules/campaign-drafts/campaign-draft.schema.ts","backend/src/modules/campaign-library/campaign-library.controller.ts","backend/src/modules/campaign-library/campaign-library.schema.ts","backend/src/modules/campaign-targets/campaign-target.controller.ts","backend/src/modules/campaign-tools/campaign-tool.controller.ts","backend/src/modules/campaign-tools/campaign-tool.schema.ts","backend/src/modules/campaign-use-case-templates/use-case-template.controller.ts","backend/src/modules/campaign-use-case-templates/use-case-template.schema.ts","backend/src/modules/campaigns/campaign.controller.ts","backend/src/modules/campaigns/campaign.schema.ts","backend/src/modules/cash-flow/cash-flow-forecast.schema.ts","backend/src/modules/cash-flow/cash-flow.controller.ts","backend/src/modules/cash-flow/payment-behavior.schema.ts","backend/src/modules/channel-analytics/channel-analytics.schema.ts","backend/src/modules/channels/channel.controller.ts","backend/src/modules/channels/channel.schema.ts","backend/src/modules/commissions/commission.schema.ts","backend/src/modules/community-activities/community-activity.controller.ts","backend/src/modules/community-activities/community-activity.schema.ts","backend/src/modules/community-analytics/community-analytics.controller.ts","backend/src/modules/community-analytics/community-analytics.schema.ts","backend/src/modules/community-bots/community-bot.controller.ts","backend/src/modules/community-bots/community-bot.schema.ts","backend/src/modules/community-fission/community-fission.controller.ts","backend/src/modules/community-fission/community-fission.schema.ts","backend/src/modules/community-gamification/community-gamification.controller.ts","backend/src/modules/community-gamification/community-gamification.schema.ts","backend/src/modules/community-groups/community-group.controller.ts","backend/src/modules/community-groups/community-group.schema.ts","backend/src/modules/community-levels/community-level.controller.ts","backend/src/modules/community-levels/community-level.schema.ts","backend/src/modules/community-materials/community-material.controller.ts","backend/src/modules/community-materials/community-material.schema.ts","backend/src/modules/community-members/community-member.controller.ts","backend/src/modules/community-members/community-member.schema.ts","backend/src/modules/community-messages/community-message.controller.ts","backend/src/modules/community-messages/community-message.schema.ts","backend/src/modules/community-points/community-point.controller.ts","backend/src/modules/community-points/community-point.schema.ts","backend/src/modules/community-tasks/community-task.controller.ts","backend/src/modules/community-tasks/community-task.schema.ts","backend/src/modules/content-analytics/content-analytics.controller.ts","backend/src/modules/content-analytics/content-analytics.schema.ts","backend/src/modules/content-categories/content-category.controller.ts","backend/src/modules/content-copyright/content-copyright.controller.ts","backend/src/modules/content-copyright/content-copyright.service.ts","backend/src/modules/content-creation/content-creation.controller.ts","backend/src/modules/content-distribution/content-distribution.controller.ts","backend/src/modules/content-library/content-library.controller.ts","backend/src/modules/content-review/content-review.controller.ts","backend/src/modules/content-templates/content-template.controller.ts","backend/src/modules/contract-templates/contract-template.controller.ts","backend/src/modules/contract-templates/contract-template.schema.ts","backend/src/modules/contracts/contract.controller.ts","backend/src/modules/contracts/contract.schema.ts","backend/src/modules/contracts/payment-plan.schema.ts","backend/src/modules/cpq/cpq.controller.ts","backend/src/modules/cpq/cpq.schema.ts","backend/src/modules/crm-activities/crm-activity.controller.ts","backend/src/modules/crm-activities/crm-activity.schema.ts","backend/src/modules/crm-activities/crm-activity.service.test.ts","backend/src/modules/crm-activities/crm-activity.service.ts","backend/src/modules/customer-analytics/customer-analytics.controller.ts","backend/src/modules/customer-balance/customer-balance.controller.ts","backend/src/modules/customer-health/customer-health.controller.ts","backend/src/modules/customer-health/customer-health.schema.ts","backend/src/modules/customer-journey-orchestration/customer-journey-orchestration.controller.ts","backend/src/modules/customer-journey/customer-journey.controller.ts","backend/src/modules/customer-journey/customer-journey.schema.ts","backend/src/modules/customer-lifecycle-value/customer-lifecycle-value.controller.ts","backend/src/modules/customer-ltv/customer-ltv.controller.ts","backend/src/modules/customer-marketing/customer-marketing.controller.ts","backend/src/modules/customer-profit/customer-profit.controller.ts","backend/src/modules/customer-profit/customer-profit.schema.ts","backend/src/modules/customers/customer-contact.service.test.ts","backend/src/modules/customers/customer-credit.service.ts","backend/src/modules/customers/customer-hierarchy.service.ts","backend/src/modules/customers/customer-relations.service.ts","backend/src/modules/customers/customer-service.schema.ts","backend/src/modules/customers/customer-service.service.ts","backend/src/modules/customers/customer.controller.ts","backend/src/modules/customers/customer.schema.ts","backend/src/modules/customers/customer.service.test.ts","backend/src/modules/customers/customer.service.ts","backend/src/modules/dashboard/dashboard.controller.ts","backend/src/modules/departments/department.controller.ts","backend/src/modules/departments/department.schema.ts","backend/src/modules/devices/asset-activation.controller.ts","backend/src/modules/devices/asset-activation.schema.ts","backend/src/modules/devices/device.controller.ts","backend/src/modules/devices/device.schema.ts","backend/src/modules/diagnosis/diagnosis.controller.ts","backend/src/modules/diagnosis/diagnosis.schema.ts","backend/src/modules/dictionaries/dictionary.controller.ts","backend/src/modules/dictionaries/dictionary.schema.ts","backend/src/modules/dimension-transform/dimension-transform.schema.ts","backend/src/modules/disbursements/disbursement.controller.ts","backend/src/modules/disbursements/disbursement.schema.ts","backend/src/modules/email-marketing/email-campaign.controller.ts","backend/src/modules/email-marketing/email-campaign.schema.ts","backend/src/modules/email-templates/email-template.controller.ts","backend/src/modules/email-templates/email-template.schema.ts","backend/src/modules/event-logs/event-logs.controller.ts","backend/src/modules/event-logs/event-logs.schema.ts","backend/src/modules/event-subscriptions/event-subscriptions.controller.ts","backend/src/modules/event-subscriptions/event-subscriptions.schema.ts","backend/src/modules/expense/expense.controller.ts","backend/src/modules/expense/expense.schema.ts","backend/src/modules/faults/fault.controller.ts","backend/src/modules/faults/fault.schema.ts","backend/src/modules/files/file.controller.ts","backend/src/modules/files/file.schema.ts","backend/src/modules/finance/event-payment-integration.schema.ts","backend/src/modules/finance/finance.controller.ts","backend/src/modules/finance/finance.schema.ts","backend/src/modules/finance/reconciliation.controller.ts","backend/src/modules/finance/treasury.schema.ts","backend/src/modules/financial-reports/financial-report.controller.ts","backend/src/modules/financial-reports/financial-reports.schema.ts","backend/src/modules/fulfillment/acceptance-automation.schema.ts","backend/src/modules/fulfillment/fulfillment.controller.ts","backend/src/modules/fulfillment/fulfillment.schema.ts","backend/src/modules/geo-analytics/geo-analytics.controller.ts","backend/src/modules/geo-fences/geo-fences.controller.ts","backend/src/modules/geo-fences/geo-fences.schema.ts","backend/src/modules/geo-fences/geo-fences.service.ts","backend/src/modules/geo-keywords/geo-keyword.controller.ts","backend/src/modules/geo-keywords/geo-keyword.schema.ts","backend/src/modules/geo-keywords/geo-keyword.service.ts","backend/src/modules/geo-pois/geo-poi.controller.ts","backend/src/modules/geo-reviews/geo-review.controller.ts","backend/src/modules/groupbuy-analytics/groupbuy-analytics.controller.ts","backend/src/modules/groupbuy-analytics/groupbuy-analytics.schema.ts","backend/src/modules/groupbuy-campaigns/groupbuy-campaign.controller.ts","backend/src/modules/groupbuy-campaigns/groupbuy-campaign.schema.ts","backend/src/modules/groupbuy-commissions/groupbuy-commission.controller.ts","backend/src/modules/groupbuy-influencers/groupbuy-influencer.controller.ts","backend/src/modules/groupbuy-inventory/groupbuy-inventory.controller.ts","backend/src/modules/groupbuy-inventory/groupbuy-inventory.schema.ts","backend/src/modules/groupbuy-orders/groupbuy-order.controller.ts","backend/src/modules/groupbuy-orders/groupbuy-order.schema.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.controller.ts","backend/src/modules/groupbuy-participants/groupbuy-participant.schema.ts","backend/src/modules/groupbuy-platforms/groupbuy-platform.controller.ts","backend/src/modules/groupbuy-platforms/groupbuy-platform.schema.ts","backend/src/modules/groupbuy-pricing/groupbuy-pricing.controller.ts","backend/src/modules/groupbuy-pricing/groupbuy-pricing.schema.ts","backend/src/modules/groupbuy-products/groupbuy-product.controller.ts","backend/src/modules/groupbuy-products/groupbuy-product.schema.ts","backend/src/modules/groupbuy-promotions/groupbuy-promotion.controller.ts","backend/src/modules/groupbuy-promotions/groupbuy-promotion.schema.ts","backend/src/modules/groupbuy-redemptions/groupbuy-redemption.controller.ts","backend/src/modules/groupbuy-redemptions/groupbuy-redemption.schema.ts","backend/src/modules/groupbuy-reviews/groupbuy-review.controller.ts","backend/src/modules/groupbuy-settlements/groupbuy-settlement.controller.ts","backend/src/modules/groupbuy-settlements/groupbuy-settlement.schema.ts","backend/src/modules/hr/attendance/holidays/holiday.controller.ts","backend/src/modules/hr/attendance/holidays/holiday.schema.ts","backend/src/modules/hr/attendance/leaves/leave.controller.ts","backend/src/modules/hr/attendance/overtime/overtime.controller.ts","backend/src/modules/hr/attendance/overtime/overtime.schema.ts","backend/src/modules/hr/attendance/records/record.controller.ts","backend/src/modules/hr/attendance/records/record.schema.ts","backend/src/modules/hr/attendance/schedules/schedule.controller.ts","backend/src/modules/hr/attendance/schedules/schedule.schema.ts","backend/src/modules/hr/attendance/shifts/shift.controller.ts","backend/src/modules/hr/attendance/shifts/shift.schema.ts","backend/src/modules/hr/benefits/claims/claim.controller.ts","backend/src/modules/hr/benefits/claims/claim.schema.ts","backend/src/modules/hr/benefits/enrollments/enrollment.controller.ts","backend/src/modules/hr/benefits/enrollments/enrollment.schema.ts","backend/src/modules/hr/benefits/plans/plan.controller.ts","backend/src/modules/hr/benefits/plans/plan.schema.ts","backend/src/modules/hr/payroll/payroll.controller.ts","backend/src/modules/hr/positions/positions.schema.ts","backend/src/modules/hr/training/certificates/certificate.controller.ts","backend/src/modules/hr/training/certificates/certificate.schema.ts","backend/src/modules/hr/training/competency/competency.controller.ts","backend/src/modules/hr/training/competency/competency.schema.ts","backend/src/modules/hr/training/courses/course.controller.ts","backend/src/modules/hr/training/courses/course.schema.ts","backend/src/modules/hr/training/enrollments/enrollment.controller.ts","backend/src/modules/hr/training/enrollments/enrollment.schema.ts","backend/src/modules/hr/training/exams/exam.controller.ts","backend/src/modules/hr/training/exams/exam.schema.ts","backend/src/modules/hr/training/learning/learning.controller.ts","backend/src/modules/hr/training/learning/learning.schema.ts","backend/src/modules/hr/training/plans/plan.controller.ts","backend/src/modules/hr/training/plans/plan.schema.ts","backend/src/modules/hr/training/questions/question.controller.ts","backend/src/modules/hr/training/questions/question.schema.ts","backend/src/modules/hr/training/sessions/session.controller.ts","backend/src/modules/hr/training/sessions/session.schema.ts","backend/src/modules/hr/training/training-core.controller.ts","backend/src/modules/im/im-channel.controller.ts","backend/src/modules/im/im-channel.schema.ts","backend/src/modules/im/im-enhanced.controller.ts","backend/src/modules/im/im-event-bridge.schema.ts","backend/src/modules/im/im-recommendation.schema.ts","backend/src/modules/im/im-workflow-sync.schema.ts","backend/src/modules/im/im.controller.ts","backend/src/modules/im/intent-analyzer.schema.ts","backend/src/modules/im/search/search.controller.ts","backend/src/modules/im/video-call.controller.ts","backend/src/modules/integration-services/integration-service.controller.ts","backend/src/modules/inventory/inventory-analytics.controller.ts","backend/src/modules/inventory/inventory.controller.ts","backend/src/modules/inventory/inventory.schema.ts","backend/src/modules/journey-orchestration/journey-orchestration.controller.ts","backend/src/modules/journey-orchestration/journey-orchestration.schema.ts","backend/src/modules/knowledge-capture/knowledge-ai.schema.ts","backend/src/modules/knowledge-capture/knowledge-capture-api.schema.ts","backend/src/modules/knowledge-capture/knowledge-capture-enhanced.schema.ts","backend/src/modules/knowledge-capture/knowledge-capture.controller.ts","backend/src/modules/knowledge-capture/knowledge-capture.schema.ts","backend/src/modules/knowledge-capture/knowledge-effectiveness.schema.ts","backend/src/modules/knowledge-capture/knowledge-feedback.controller.ts","backend/src/modules/knowledge-capture/knowledge-feedback.schema.ts","backend/src/modules/knowledge-capture/knowledge-vector.schema.ts","backend/src/modules/knowledge-feedback/knowledge-feedback.controller.ts","backend/src/modules/knowledge-feedback/knowledge-feedback.schema.ts","backend/src/modules/knowledge/knowledge.controller.ts","backend/src/modules/knowledge/knowledge.schema.ts","backend/src/modules/landing-pages/landing-page.controller.ts","backend/src/modules/lead-pools/lead-pools.controller.ts","backend/src/modules/lead-pools/lead-pools.schema.ts","backend/src/modules/lead-qualification/qualification.controller.ts","backend/src/modules/lead-scoring-ai/lead-action-recommendation.controller.ts","backend/src/modules/lead-scoring-ai/lead-action-recommendation.schema.ts","backend/src/modules/lead-scoring-ai/lead-score-trigger.controller.ts","backend/src/modules/lead-scoring-ai/lead-score-trigger.schema.ts","backend/src/modules/lead-scoring-ai/lead-scoring-ai.controller.ts","backend/src/modules/lead-scoring-ai/lead-scoring-ai.schema.ts","backend/src/modules/leads/lead-ai-scoring.schema.ts","backend/src/modules/leads/lead-assignment.schema.ts","backend/src/modules/leads/lead-scoring.schema.ts","backend/src/modules/leads/lead-sla.controller.ts","backend/src/modules/leads/lead-sla.schema.ts","backend/src/modules/leads/lead-smart-assignment.schema.ts","backend/src/modules/leads/lead.controller.ts","backend/src/modules/livestream-analytics/livestream-analytics.controller.ts","backend/src/modules/livestream-gifts/livestream-gifts.controller.ts","backend/src/modules/livestream-gifts/livestream-gifts.schema.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.controller.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.schema.ts","backend/src/modules/livestream-interactions/livestream-interaction.controller.ts","backend/src/modules/livestream-interactions/livestream-realtime.controller.ts","backend/src/modules/livestream-products/livestream-product.controller.ts","backend/src/modules/livestream-products/livestream-product.schema.ts","backend/src/modules/livestream-rooms/livestream-room.controller.ts","backend/src/modules/livestream-rooms/livestream-room.schema.ts","backend/src/modules/livestream-schedules/livestream-schedule.controller.ts","backend/src/modules/livestream-schedules/livestream-schedule.schema.ts","backend/src/modules/livestream-scripts/livestream-script.controller.ts","backend/src/modules/livestream-scripts/livestream-script.service.ts","backend/src/modules/livestream/livestream.controller.ts","backend/src/modules/livestream/livestream.schema.ts","backend/src/modules/location-assessments/location-assessment.controller.ts","backend/src/modules/maintenance/maintenance-plans.controller.ts","backend/src/modules/maintenance/maintenance-plans.schema.ts","backend/src/modules/maintenance/maintenance-tasks.controller.ts","backend/src/modules/maintenance/maintenance-tasks.schema.ts","backend/src/modules/marketing-automation/workflow.controller.ts","backend/src/modules/marketing-calendar/marketing-calendar.controller.ts","backend/src/modules/marketing-calendar/marketing-calendar.schema.ts","backend/src/modules/marketing-chatbot/marketing-chatbot.controller.ts","backend/src/modules/marketing-chatbot/marketing-chatbot.schema.ts","backend/src/modules/marketing-content/content.controller.ts","backend/src/modules/marketing-content/content.schema.ts","backend/src/modules/marketing-content/marketing-content.schema.ts","backend/src/modules/marketing-forms/marketing-form.controller.ts","backend/src/modules/marketing-matrix/matrix.controller.ts","backend/src/modules/marketing-matrix/matrix.schema.ts","backend/src/modules/marketing-north-star/marketing-north-star.controller.ts","backend/src/modules/marketing-north-star/marketing-north-star.schema.ts","backend/src/modules/marketing-timeslots/marketing-timeslots.controller.ts","backend/src/modules/marketing-timeslots/marketing-timeslots.schema.ts","backend/src/modules/marketing-tools/marketing-tools.controller.ts","backend/src/modules/marketing-tools/marketing-tools.schema.ts","backend/src/modules/marketing-workflows/marketing-workflow.controller.ts","backend/src/modules/marketing/attribution.schema.ts","backend/src/modules/marketing/budget-alerts.controller.ts","backend/src/modules/marketing/budget-alerts.schema.ts","backend/src/modules/marketing/budget.schema.ts","backend/src/modules/marketing/local-life.schema.ts","backend/src/modules/marketing/marketing.controller.ts","backend/src/modules/marketing/marketing.schema.ts","backend/src/modules/marketing/social-sync.schema.ts","backend/src/modules/mdm/mdm.controller.ts","backend/src/modules/meddpicc-analyses/meddpicc.controller.ts","backend/src/modules/menus/menu.controller.ts","backend/src/modules/multi-touch-attribution/multi-touch-attribution.controller.ts","backend/src/modules/notifications/notification.controller.ts","backend/src/modules/notifications/notification.schema.ts","backend/src/modules/omnichannel-dashboard/omnichannel-dashboard.controller.ts","backend/src/modules/omnichannel-data-hub/omnichannel-data-hub.controller.ts","backend/src/modules/omnichannel-touchpoints/omnichannel-touchpoints.controller.ts","backend/src/modules/opportunities/opportunity-competitor.service.ts","backend/src/modules/opportunities/opportunity-export.service.ts","backend/src/modules/opportunities/opportunity-stages.service.ts","backend/src/modules/opportunities/opportunity-team.service.ts","backend/src/modules/opportunities/opportunity.controller.ts","backend/src/modules/opportunities/opportunity.schema.ts","backend/src/modules/opportunities/opportunity.service.test.ts","backend/src/modules/opportunities/opportunity.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/orders/order.schema.ts","backend/src/modules/partner-customers/partner-customer.controller.ts","backend/src/modules/partner-customers/partner-customer.schema.ts","backend/src/modules/partners/partner.controller.ts","backend/src/modules/partners/partner.schema.ts","backend/src/modules/payment-analytics/payment-analytics.controller.ts","backend/src/modules/payments/payment-plan.controller.ts","backend/src/modules/payments/payment-reconciliation.controller.ts","backend/src/modules/payments/payment-record.controller.ts","backend/src/modules/payments/payment-statement.controller.ts","backend/src/modules/payments/payment-stats.controller.ts","backend/src/modules/payments/payment.schema.ts","backend/src/modules/pm/pm.controller.ts","backend/src/modules/pm/pm.schema.ts","backend/src/modules/predictive-analytics/predictive-analytics.controller.ts","backend/src/modules/price-books/price-book.controller.ts","backend/src/modules/price-books/price-book.schema.ts","backend/src/modules/price-books/price-definition.schema.ts","backend/src/modules/price-books/price-modification.schema.ts","backend/src/modules/process-designer/process-designer.controller.ts","backend/src/modules/process-designer/process-designer.schema.ts","backend/src/modules/products/controllers/category.controller.ts","backend/src/modules/products/controllers/product.controller.ts","backend/src/modules/products/controllers/sku.controller.ts","backend/src/modules/products/product.schema.ts","backend/src/modules/products/services/category.schema.ts","backend/src/modules/products/services/product.schema.ts","backend/src/modules/products/services/sku.schema.ts","backend/src/modules/projects/installation-project.schema.ts","backend/src/modules/projects/project-gantt.controller.ts","backend/src/modules/projects/project-gantt.schema.ts","backend/src/modules/projects/project.controller.ts","backend/src/modules/projects/project.schema.ts","backend/src/modules/projects/services/calendar.schema.ts","backend/src/modules/projects/services/gantt.schema.ts","backend/src/modules/projects/services/milestone.schema.ts","backend/src/modules/projects/services/project.schema.ts","backend/src/modules/projects/services/task.schema.ts","backend/src/modules/projects/services/ticket.schema.ts","backend/src/modules/public/public.controller.ts","backend/src/modules/purchase-orders/purchase-order.controller.ts","backend/src/modules/purchase-orders/purchase-order.schema.ts","backend/src/modules/quotes/quote.controller.ts","backend/src/modules/quotes/quote.schema.ts","backend/src/modules/realtime/enhanced-push.schema.ts","backend/src/modules/realtime/es-sync.schema.ts","backend/src/modules/realtime/event-storm-protection.schema.ts","backend/src/modules/realtime/message-aggregator.schema.ts","backend/src/modules/realtime/message-template.schema.ts","backend/src/modules/realtime/realtime.controller.ts","backend/src/modules/reconciliation/matching-engine.schema.ts","backend/src/modules/reconciliation/reconciliation.controller.ts","backend/src/modules/reconciliation/reconciliation.schema.ts","backend/src/modules/redemptions/redemptions.controller.ts","backend/src/modules/redemptions/redemptions.schema.ts","backend/src/modules/renewal-tasks/renewal-task.controller.ts","backend/src/modules/renewal-tasks/renewal-task.schema.ts","backend/src/modules/renewals/renewal.controller.ts","backend/src/modules/renewals/renewal.schema.ts","backend/src/modules/reports/report.controller.ts","backend/src/modules/reports/report.schema.ts","backend/src/modules/resource-requests/resource-request.controller.ts","backend/src/modules/resource-requests/resource-request.schema.ts","backend/src/modules/revenue/ar-ledger.controller.ts","backend/src/modules/revenue/invoice.controller.ts","backend/src/modules/revenue/invoice.schema.ts","backend/src/modules/revenue/payment.controller.ts","backend/src/modules/revenue/payment.schema.ts","backend/src/modules/revenue/revenue-recognition.controller.ts","backend/src/modules/revenue/revenue-recognition.schema.ts","backend/src/modules/revenue/revenue.controller.ts","backend/src/modules/revenue/revenue.schema.ts","backend/src/modules/revenue/sales-commission-compat.controller.ts","backend/src/modules/revenue/sales-commission.controller.ts","backend/src/modules/rfm-analysis/rfm-analysis.controller.ts","backend/src/modules/rma/rma.controller.ts","backend/src/modules/rma/rma.schema.ts","backend/src/modules/roles/role.controller.ts","backend/src/modules/roles/role.schema.ts","backend/src/modules/sales-dashboard/sales-dashboard.controller.ts","backend/src/modules/sample-requests/sample-request.controller.ts","backend/src/modules/sample-requests/sample-request.schema.ts","backend/src/modules/satisfaction/satisfaction.controller.ts","backend/src/modules/satisfaction/satisfaction.schema.ts","backend/src/modules/scheduled-jobs/scheduled-job.schema.ts","backend/src/modules/scheduled-jobs/scheduled-jobs.controller.ts","backend/src/modules/scheduled-jobs/scheduled-jobs.schema.ts","backend/src/modules/search/search.controller.ts","backend/src/modules/segments/segment.controller.ts","backend/src/modules/self-operated-store/self-operated-store.controller.ts","backend/src/modules/self-operated-store/self-operated-store.schema.ts","backend/src/modules/serial-numbers/sn.controller.ts","backend/src/modules/serial-numbers/sn.schema.ts","backend/src/modules/service-dashboard/service-dashboard.controller.ts","backend/src/modules/service-monitor/service-disruption.controller.ts","backend/src/modules/service-monitor/service-disruption.schema.ts","backend/src/modules/service/ticket-dependency.schema.ts","backend/src/modules/service/ticket-gantt.schema.ts","backend/src/modules/shipments/shipment.controller.ts","backend/src/modules/shipments/shipment.schema.ts","backend/src/modules/sla/sla.controller.ts","backend/src/modules/sla/sla.schema.ts","backend/src/modules/sms-marketing/sms-marketing.controller.ts","backend/src/modules/sms-marketing/sms-marketing.schema.ts","backend/src/modules/social-accounts/social-account.controller.ts","backend/src/modules/social-analytics/social-analytics.controller.ts","backend/src/modules/social-analytics/social-analytics.schema.ts","backend/src/modules/social-auto-replies/social-auto-reply.controller.ts","backend/src/modules/social-auto-replies/social-auto-reply.schema.ts","backend/src/modules/social-auto-replies/social-auto-reply.service.ts","backend/src/modules/social-competitors/social-competitor.controller.ts","backend/src/modules/social-followers/social-follower.controller.ts","backend/src/modules/social-hot-topics/social-hot-topic.controller.ts","backend/src/modules/social-interactions/social-interactions.controller.ts","backend/src/modules/social-interactions/social-interactions.schema.ts","backend/src/modules/social-posts/social-post.controller.ts","backend/src/modules/spare-parts/spare-part.controller.ts","backend/src/modules/spare-parts/spare-part.schema.ts","backend/src/modules/stage-knowledge/stage-knowledge-content.controller.ts","backend/src/modules/stage-knowledge/stage-knowledge-content.schema.ts","backend/src/modules/stage-knowledge/stage-knowledge.controller.ts","backend/src/modules/stage-knowledge/stage-knowledge.schema.ts","backend/src/modules/store-agency/store-agency.controller.ts","backend/src/modules/store-agency/store-agency.schema.ts","backend/src/modules/store-inventory/store-inventory.controller.ts","backend/src/modules/store-inventory/store-inventory.schema.ts","backend/src/modules/store-performance/store-performance.controller.ts","backend/src/modules/store-settlements/store-settlements.controller.ts","backend/src/modules/store-settlements/store-settlements.schema.ts","backend/src/modules/store-staff/store-staff.controller.ts","backend/src/modules/store-staff/store-staff.schema.ts","backend/src/modules/stores/store.controller.ts","backend/src/modules/stores/store.schema.ts","backend/src/modules/suppliers/supplier.controller.ts","backend/src/modules/suppliers/supplier.schema.ts","backend/src/modules/supply-chain/supplier-management.controller.ts","backend/src/modules/supply-chain/supply-chain-platform.controller.ts","backend/src/modules/supply-chain/supply-chain-platform.schema.ts","backend/src/modules/supply-chain/supply-chain.controller.ts","backend/src/modules/supply-chain/supply-chain.schema.ts","backend/src/modules/swot-analyses/swot.controller.ts","backend/src/modules/system-events/system-event.controller.ts","backend/src/modules/system-events/system-event.schema.ts","backend/src/modules/system-monitor/system-monitor.controller.ts","backend/src/modules/targets/target.controller.ts","backend/src/modules/tenant-configs/tenant-config.controller.ts","backend/src/modules/ticket-workflows/ticket-workflow.controller.ts","backend/src/modules/tickets/ticket.controller.ts","backend/src/modules/tob-toc-gateway/tob-toc-gateway.controller.ts","backend/src/modules/treasury/treasury.controller.ts","backend/src/modules/users/user.controller.ts","backend/src/modules/users/user.schema.ts","backend/src/modules/video-calls/video-call.controller.ts","backend/src/modules/video-calls/video-call.schema.ts","backend/src/modules/web-tracking/web-tracking.controller.ts","backend/src/modules/web-tracking/web-tracking.schema.ts","backend/src/modules/workflow-generator/workflow-generator.controller.ts","backend/src/shared/utils/validation.ts","frontend/package.json","frontend/src/api/modules/community-bots.ts","frontend/src/api/modules/community-fission.ts","frontend/src/api/modules/community-materials.ts","frontend/src/api/modules/contract-templates.ts","frontend/src/api/modules/crm-activities.ts","frontend/src/api/modules/customer-health.ts","frontend/src/api/modules/devices.ts","frontend/src/api/modules/faults.ts","frontend/src/api/modules/geo-keywords.ts","frontend/src/api/modules/geo-pois.ts","frontend/src/api/modules/im-channels.ts","frontend/src/api/modules/knowledge-capture-rules.ts","frontend/src/api/modules/livestream-products.ts","frontend/src/api/modules/livestream-rooms.ts","frontend/src/api/modules/livestream-schedules.ts","frontend/src/api/modules/livestream-scripts.ts","frontend/src/api/modules/marketing-content.ts","frontend/src/api/modules/marketing-matrix.ts","frontend/src/api/modules/partner-customers.ts","frontend/src/api/modules/renewals.ts","frontend/src/api/modules/sample-requests.ts","frontend/src/api/modules/satisfaction.ts","frontend/src/api/modules/social-posts.ts","frontend/src/api/modules/stage-knowledge.ts","frontend/src/components/business/index.ts","frontend/src/components/marketing/index.ts","frontend/src/components/mobile/index.ts","frontend/src/components/responsive/ResponsiveFilterBar.vue","frontend/src/components/responsive/index.ts","frontend/src/composables/index.ts","frontend/src/composables/useListPage.ts","frontend/src/stores/index.ts","frontend/src/views/admin/audit-logs/Index.vue","frontend/src/views/assets/Index.vue","frontend/src/views/biz-sequences/Index.vue","frontend/src/views/contracts/Index.vue","frontend/src/views/invoice-requests/Index.vue","frontend/src/views/invoice-verification/Index.vue","frontend/src/views/invoices/Index.vue","frontend/src/views/location-assessments/Index.vue","frontend/src/views/marketing-timeslots/Index.vue","frontend/src/views/member-benefits/Index.vue","frontend/src/views/opportunities/Index.vue","frontend/src/views/orders/Index.vue","frontend/src/views/partners/Index.vue","frontend/src/views/payment-plans/Index.vue","frontend/src/views/price-books/Index.vue","frontend/src/views/products/Index.vue","frontend/src/views/quotes/Index.vue","frontend/src/views/rma/Index.vue","frontend/src/views/segments/Index.vue","frontend/src/views/shipments/Index.vue","frontend/src/views/store-configs/Index.vue","frontend/src/views/store-inventory/Index.vue","frontend/src/views/store-settlements/Index.vue","frontend/src/views/store-staff/Index.vue","frontend/src/views/suppliers/Index.vue","frontend/src/views/tickets/Index.vue"]}],"total_commits":0,"head_commit":{"id":"ff3149170c6b0deb6d8151cb962592199b95bdd8","message":"fix: 全面分析修复 — 44项安全+性能+架构+类型安全治理\n\n## 安全修复 (12项)\n- CRITICAL: 修复 knowledge-vector SQL 注入 + event-subscription SQL 注入\n- HIGH: 5处 $queryRawUnsafe → Prisma.sql, PDF XSS 防护, 租户严格模式\n- MEDIUM: 健康端点认证, CORS生产校验, PII脱敏, 权限缓存清除API\n\n## 性能优化 (5项)\n- N+1: getBulkSalesProfiles 800→9次, syncLinkStatistics 3N+1→3次\n- syncConversionStats 批量事务, leads 7索引补充, 慢查询监控恢复\n\n## 架构合规 (14项)\n- 12个controller prisma调用下沉service + requireTenantContext全局启用\n\n## 类型安全 — 77处as any清零\n- process-adapter 39→0, case-converter 15→0, validation 11→0, main 6→0\n\n## 前端v-permission核心链路6模块73指令 + 代码卫生清理\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/ff3149170c6b0deb6d8151cb962592199b95bdd8","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-03-24T01:13:11+08:00","added":[],"removed":["backend/src/modules/diagnosis/diagnosis.routes.ts.disabled","backend/src/modules/stage-knowledge/stage-knowledge.controller.ts.new","frontend/src/views/ai-agents/TasksReview.vue.orig","frontend/src/views/ai-agents/TasksReview.vue.patch"],"modified":["backend/prisma/schema.prisma","backend/prisma/schema/leads.prisma","backend/src/config/env.ts","backend/src/config/prisma-tenant-middleware.ts","backend/src/main.ts","backend/src/modules/ai-agents/ai-agent.controller.ts","backend/src/modules/ai-agents/ai-agent.service.ts","backend/src/modules/ai-agents/services/knowledge-vector-enhanced.service.ts","backend/src/modules/approvals/approval.controller.ts","backend/src/modules/auth/auth.service.ts","backend/src/modules/community-analytics/community-analytics.controller.ts","backend/src/modules/community-analytics/community-analytics.service.ts","backend/src/modules/contracts/contract.service.ts","backend/src/modules/customers/customer.controller.ts","backend/src/modules/customers/customer.service.ts","backend/src/modules/event-subscriptions/event-subscription-change-request.store.ts","backend/src/modules/fulfillment/fulfillment.controller.ts","backend/src/modules/fulfillment/fulfillment.service.ts","backend/src/modules/integration-services/integration-service.service.ts","backend/src/modules/inventory/inventory.controller.ts","backend/src/modules/inventory/services/inventory-reservation.service.ts","backend/src/modules/leads/lead-smart-assignment.service.ts","backend/src/modules/livestream-groupbuy/livestream-groupbuy-conversion.service.ts","backend/src/modules/omnichannel-dashboard/omnichannel-dashboard.controller.ts","backend/src/modules/omnichannel-dashboard/omnichannel-dashboard.service.ts","backend/src/modules/omnichannel-data-hub/omnichannel-data-hub.controller.ts","backend/src/modules/omnichannel-data-hub/omnichannel-data-hub.service.ts","backend/src/modules/orders/order.controller.ts","backend/src/modules/service-monitor/service-disruption.service.ts","backend/src/modules/tickets/ticket.controller.ts","backend/src/modules/tickets/ticket.service.ts","backend/src/shared/middleware/auth.middleware.ts","backend/src/shared/middleware/case-converter.middleware.ts","backend/src/shared/middleware/slow-query.middleware.ts","backend/src/shared/process-core/process-adapter.ts","backend/src/shared/state-machines/index.ts","backend/src/shared/utils/runtime-schema-bridge.ts","backend/src/shared/utils/validation.ts","frontend/src/api/client.ts","frontend/src/utils/pdf.ts","frontend/src/views/contracts/Detail.vue","frontend/src/views/contracts/Index.vue","frontend/src/views/leads/Detail.vue","frontend/src/views/leads/Index.vue","frontend/src/views/opportunities/Detail.vue","frontend/src/views/opportunities/Index.vue","frontend/src/views/orders/Detail.vue","frontend/src/views/orders/Index.vue","frontend/src/views/quotes/Detail.vue","frontend/src/views/quotes/Index.vue","frontend/src/views/tickets/Detail.vue","frontend/src/views/tickets/Index.vue","scripts/check-consistency.ts"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"mirror":false,"size":1952858,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"branch_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-03-23T18:39:40+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_code":true,"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"allow_manual_merge":false,"autodetect_manual_merge":false,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","topics":[],"licenses":[]},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"5+luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatar/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}
TEXT
trigger_event
schedule
TEXT
status
INTEGER
version
INTEGER (default 0
started
INTEGER
stopped
INTEGER
previous_duration
INTEGER
created
INTEGER
updated
INTEGER
raw_concurrency
TEXT
concurrency_group
TEXT NOT NULL (default ''
concurrency_cancel
INTEGER NOT NULL (default FALSE
Update
Cancel