Commit Graph
343 Commits
Author SHA1 Message Date
adminandClaude Opus 5 7b014765d6 fix(agent): answer follow-up questions instead of asking to clarify
The planner falls back to CLARIFY whenever no keyword matches and the model
plan is unavailable or malformed. Mid-conversation that produced a dead end:
a follow-up such as "如果我要报销,一般需要查哪几个文件?" was answered with a
clarification request even though the previous turn had established context.

When a non-media request carries a conversationId and a contextVersion above
zero (i.e. at least one turn has completed), route CLARIFY to KNOWLEDGE_QA
with a grounded knowledge search.

Tradeoff: this also suppresses the deliberate CLARIFY for explicitly vague
phrasing ("你看着办", "帮我处理一下") from the second turn onward, which will
now run a knowledge search instead of asking back. Blank input is still
rejected earlier by requireQuestion.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 23:58:30 +08:00
admin c2358686ce fix(agent): tolerate Jackson int-range decode in Redis draft/session reads
全局 Redisson codec 用 DefaultTyping.NON_FINAL,final 的 Long/record 不写类名:
数字草稿 id 读回 Integer、realtime 会话 record 读回 LinkedHashMap,confirm 与
工具调用路径双双 ClassCastException(生产 19:35 日志实证)。改为 Number/String
防御转换与 ObjectMapper.convertValue 显式还原,补 3 个回归测试,模块 693 全绿。
2026-07-25 19:48:17 +08:00
admin 30ef6a8f6b feat(org): add incremental employee sync via upstream change feed
- POST /api/aihr/org/sync-changes(superadmin/hr_operator):拉取上游
  /sync/changes,按稳定 employee.id 回源 /employees/{id},只替换受影响
  员工,不再依赖每次全量覆盖;dryRun 仍须显式,首次必须传 sinceTime
- extPartyId 优先级翻转为 employee.id 优先:上游 employee_number 仅
  7/3417 匹配既有主体,稳定 employee_id 匹配 3417/3417
- 脱敏手机号保留本地既有有效值;上游显式清空则同步清除;手机号字段
  整体缺失拒绝写入
- 范围字段明确不一致视为迁出,写入时同事务删除本地旧记录(含登录
  身份);范围字段缺失保守跳过不删;回源详情主体与 resource_id 不一致
  在任何范围动作前拒绝
- 任职快照拉取失败在写入路径 fail-closed,不用员工字段兜底降级覆盖
- 全量同步:脱敏手机号在任何写入模式(含 replaceExisting=false)默认
  拒绝,allowPartialReplace=true 时脱敏员工保留本地手机号
- 测试 38 个(org 域),全模块 690 通过
2026-07-25 18:15:20 +08:00
admin acd5fd3a6d fix(practice): generate replies from coach hints 2026-07-25 15:44:45 +08:00
admin 230dfb4dfc feat(broadcast): finish multi-role insight experience 2026-07-25 15:18:58 +08:00
admin 7990db6883 feat(broadcast): expose employee role insights 2026-07-25 14:33:27 +08:00
admin 91ebe41259 feat(broadcast): generate grounded role insights 2026-07-25 14:24:08 +08:00
admin c35fd0741b feat(broadcast): add multi-role insight contract 2026-07-25 14:19:03 +08:00
admin 7ced39b03b fix(practice): restore scenario content updates 2026-07-25 13:39:23 +08:00
admin fa9d6da975 feat(practice): streamline pilot content operations 2026-07-25 12:51:39 +08:00
admin 35b37b07f7 feat(practice): server-owned realtime personas with knowledge tool calling
- AihrRealtimePersonaRegistry whitelist: owner-calm (default), owner-impatient,
  digital-mentor (search_knowledge); persona binds default voice
- /realtime/session assembles session.update server-side (instructions/tools);
  browser forwards payload verbatim; Redis session record 30min with sliding renewal
- /realtime/tools/invoke validates login identity + Redis session ownership +
  persona tool whitelist, then read-only searchAuthorized; per-account rate limits
- source=realtime skips sop review and knowledge-gap persistence (Beta no-persist)
- frontend: persona cards replace 56-voice picker; serialized tool-call chain with
  soft-landing fallback
2026-07-25 11:13:04 +08:00
admin f545983de8 fix(knowledge): bind summary cards to cited evidence 2026-07-25 01:45:41 +08:00
admin 4d2b3828c0 feat(brand): rename product to 帮道 2026-07-25 01:09:49 +08:00
admin c9d2012ec1 feat(aihr): finalize practice growth and access boundaries 2026-07-25 00:42:19 +08:00
admin 09278d40c6 merge: integrate broadcast question correction
# Conflicts:
#	docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
2026-07-25 00:13:49 +08:00
admin 5f8d8f96f0 fix(agent): preserve broadcast consultation context 2026-07-25 00:12:53 +08:00
admin 9b39ffbb76 fix(agent): bound user questions 2026-07-24 23:48:25 +08:00
admin fdd98049e5 fix(agent): decouple media analysis from knowledge scope 2026-07-24 23:37:46 +08:00
admin 342f84a9de feat(aihr): complete company message R1-R3 2026-07-24 23:25:15 +08:00
admin 5b7c5613f5 feat(agent): move mobile ask to unified agent 2026-07-24 22:36:14 +08:00
admin 6ba4e06a2f feat(agent): audit orchestrated runs 2026-07-24 22:13:04 +08:00
admin 434bab6fed feat(agent): require web research consent 2026-07-24 20:37:51 +08:00
admin 6f8c549752 feat(agent): confirm existing domain drafts 2026-07-24 20:33:07 +08:00
admin 775a326ae2 fix(agent): route media by intent 2026-07-24 20:27:03 +08:00
admin ffe830f64a feat(agent): orchestrate read-only work tools 2026-07-24 20:17:21 +08:00
admin b4cc83168d feat(agent): enforce tool policy 2026-07-24 20:12:43 +08:00
admin ac6b14926a feat(agent): add conservative intent planner 2026-07-24 20:08:28 +08:00
admin bdc4ffad9f fix(knowledge): share public download tickets across tenant context 2026-07-24 13:51:44 +08:00
admin 442ba66848 fix(knowledge): make protected file downloads WebView-safe 2026-07-24 13:31:30 +08:00
admin 83c497c5f1 fix(aihr): namespace external organization directory ids 2026-07-24 09:19:16 +08:00
admin 474d46e728 feat(speech): add qwen tts voice preferences 2026-07-24 01:54:37 +08:00
admin faa2a77e9a feat(practice): complete five-position training operations 2026-07-24 00:26:27 +08:00
admin 067cc30d80 feat(aihr): complete M3 protected practice replay 2026-07-23 22:21:43 +08:00
admin 927458b9e0 feat(aihr): harden M0-M2 mobile training flows 2026-07-23 21:18:13 +08:00
admin 06322c994b feat(aihr): add tenant organization governance 2026-07-23 15:58:38 +08:00
admin f6609808df feat(aihr): add M1 broadcast targeting and mandatory reads 2026-07-23 12:11:41 +08:00
admin cd94f4fe9f test: add M1 broadcast acceptance reproducers 2026-07-23 11:27:53 +08:00
admin 4b31848e3d fix(aihr): harden broadcast and mobile assistant flows 2026-07-23 03:35:36 +08:00
admin 163b08ecfe feat(aihr): 重构运营后台与租户知识治理
- 重构运营总览、侧栏和内容运营工作台\n- 增加大喇叭、成果审核与运营统计链路\n- 补齐租户、知识空间、分类和知识维护闭环\n- 加固标签页租户上下文、停用租户写保护与迁移预检
2026-07-23 01:24:22 +08:00
admin 4ab0fccc73 fix(knowledge): parse PDFs through safe Tika adapter 2026-07-22 21:44:40 +08:00
admin 87772cc64c feat: add qwen realtime practice beta 2026-07-22 09:29:39 +08:00
admin 2488febf19 Merge branch 'codex/personal-assistant-phase2' into codex/multi-tenant-knowledge-platform
# Conflicts:
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrModelSeedServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java
#	docs/API_INTEGRATION.md
#	docs/个人AI助理阶段二专项TechSpec.md
#	docs/个人AI助理阶段二开发推进计划.md
#	frontend/src/views/knowledge/processing.vue
#	mobile-uni/src/pages/user/sop/index.vue
#	mobile-uni/src/services/api.ts
#	mobile-uni/src/services/personal-assistant.ts
#	mobile-uni/tests/personal-assistant.test.mjs
#	scripts/demo-check.sh
#	scripts/personal-assistant-smoke.sh
2026-07-22 08:54:04 +08:00
admin c38a723ae4 Merge branch 'codex/brd-release-20260715' into codex/multi-tenant-knowledge-platform
# Conflicts:
#	AGENTS.md
#	README.md
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrPracticeDto.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrOrgSyncService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrPracticeSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrUploadQueueService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrOrgSyncServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrPracticeSeedServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrUploadQueueServiceTest.java
#	docs/20260708/uni-app用户侧前端重建计划.md
#	docs/API_INTEGRATION.md
#	docs/BRD_IMPLEMENTATION_AUDIT.md
#	docs/BRD_PRODUCTION_MIGRATION_RUNBOOK.md
#	docs/DEMO_ACCEPTANCE.md
#	docs/DEV_SETUP.md
#	docs/FIGMA_IMPLEMENTATION_MATRIX.md
#	docs/README.md
#	frontend/src/views/knowledge/processing.vue
#	mobile-uni/src/pages/supervisor/assign/index.vue
#	mobile-uni/src/pages/supervisor/index/index.vue
#	mobile-uni/src/pages/supervisor/profile/index.vue
#	mobile-uni/src/pages/supervisor/review/index.vue
#	mobile-uni/src/pages/supervisor/reviews/index.vue
#	mobile-uni/src/pages/supervisor/team/index.vue
#	mobile-uni/src/pages/user/cases/index.vue
#	mobile-uni/src/pages/user/practice/index.vue
#	mobile-uni/src/pages/user/profile/index.vue
#	mobile-uni/src/pages/user/sop/index.vue
#	mobile-uni/src/pages/user/today/index.vue
#	mobile-uni/src/types/api.ts
#	scripts/tests/aihr-schema-migrations.test.sh
2026-07-22 08:41:49 +08:00
admin d7664e45a7 feat(work-results): support historical project outcomes 2026-07-22 00:29:19 +08:00
admin 4536d607e3 feat: add project-scoped work assistant results 2026-07-21 04:44:15 +08:00
admin b6a7af9e51 fix(backend): return canonical extPartyId in practice review detail
The reviewDetail query referenced a.trainee_name without declaring the
table alias, which 500s whenever org-sync display fields are enabled,
and the mobile payload never exposed extPartyId, so the supervisor
review pages could not resolve organization member names.
2026-07-20 13:16:18 +08:00
admin 11ef5b9721 test: align practice assertions with current behavior 2026-07-20 11:36:55 +08:00
admin dd7058a783 test: adapt exam idempotency test to model service constructor 2026-07-20 11:33:34 +08:00
admin 175a047952 fix: prevent NPE on practice finish without measured response latency 2026-07-20 11:27:13 +08:00
admin 4e9ccfa8b5 feat(backend): employee name fallback labels and AI exam question generation
- practice team members / exam targets: when person_name is empty, show
  phone-masked label (员工·尾号XXXX) instead of a bare 员工
- POST /api/aihr/mobile/exams/supervisor/ai-generate: LLM-generated exam
  questions grounded on SOP knowledge fragments, strict JSON sanitize,
  scores rebalanced to 100; clear errors when model unavailable
2026-07-20 10:16:40 +08:00