Commit Graph
47 Commits
Author SHA1 Message Date
key 721839c847 feat(aihr): harden finance RAG retrieval and evidence gates 2026-08-03 22:34:18 +08:00
key 6ad8a017a4 feat(aihr): close functional checklist gaps 2026-08-02 12:15:45 +08:00
key 699cc08050 feat: govern knowledge assets and source citations 2026-08-02 01:43:43 +08:00
key c16a3e83d7 feat(release): close handler and microphone gaps 2026-07-30 12:01:45 +08:00
key 5027bef32d fix(mobile): support Android system file picker 2026-07-29 23:52:44 +08:00
key cb928edafd fix(mobile): handle file picker cancellation 2026-07-29 02:01:45 +08:00
key 9ea5d79a62 release: prepare August 1 Android RC 2026-07-29 00:35:15 +08:00
adminandClaude Opus 5 d84ad87cb6 fix(sop): restore voice-first replies on App without withholding text
73712994 disabled voice-first on native by gating the TTS preload behind
!isNativeAppRuntime(), which left App users with the degraded text bubble
plus a 播报 button. The voice-line, 转文字 toggle and 收起全文 markup were
still present but unreachable.

Re-enable the preload on every platform and open the transcript when the
message is created, so the answer is readable while synthesis runs.

Collapse the transcript when playback starts rather than when synthesis
finishes: on-device synthesis settles in 2-6s, so collapsing on ready
pulled the answer away mid-sentence. transcriptPinned records a manual
toggle so the automatic collapse never overrides the reader.

Bound the preparing bubble at 20s (the upstream DashScope ceiling) so a
stalled synthesis degrades to the plain text bubble instead of showing an
endless placeholder duration.

Replace the tautological assertion that pinned the previous behaviour by
matching source strings with assertions on the behaviour itself.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-26 02:36:14 +08:00
adminandClaude Opus 5 73712994c6 fix(mobile): stop preloading answer TTS on native App
On native App the eager TTS request delayed the answer bubble: the message was
created in `preparing` state, so the text stayed behind a voice line that was
still waiting on a round trip.

Skip the preload when `isNativeAppRuntime()`, marking the voice `unavailable`
so the text and citations render immediately. The existing `unavailable`
branch already exposes a play button that calls `toggleAnswerSpeech`, so voice
stays reachable on demand instead of being dropped. H5 keeps preloading.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 23:58:19 +08:00
admin f545983de8 fix(knowledge): bind summary cards to cited evidence 2026-07-25 01:45:41 +08:00
admin 5f8d8f96f0 fix(agent): preserve broadcast consultation context 2026-07-25 00:12:53 +08:00
admin 5b7c5613f5 feat(agent): move mobile ask to unified agent 2026-07-24 22:36:14 +08:00
admin 743d629dc8 fix(knowledge): use native file downloads in app 2026-07-24 14:52:07 +08:00
admin 442ba66848 fix(knowledge): make protected file downloads WebView-safe 2026-07-24 13:31:30 +08:00
admin 927458b9e0 feat(aihr): harden M0-M2 mobile training flows 2026-07-23 21:18:13 +08:00
admin 0f5c2e8667 feat(mobile-app): prepare native app packaging 2026-07-23 14:40:23 +08:00
admin 4b31848e3d fix(aihr): harden broadcast and mobile assistant flows 2026-07-23 03:35:36 +08:00
admin 5a31896394 fix(mobile-uni): 清理原生 Emoji 符号,全面替换为 uni-icons 标准矢量图标规避跨终端兼容风险 2026-07-23 02:12:47 +08:00
admin eb973418d5 fix(mobile-uni): 极简压缩“问”模块顶部Header与项目栏,大幅释放对话框垂直空间 2026-07-23 02:09:30 +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 11250811a6 fix: show work capture context before actions 2026-07-21 05:01:43 +08:00
admin 4536d607e3 feat: add project-scoped work assistant results 2026-07-21 04:44:15 +08:00
admin 578592b21d fix(mobile): flex-center pill buttons and fix learning task card layout
- learning: task-list/snippet-list use column direction (row squeeze caused
  one-char-per-line vertical text in today-task cards)
- learning/profile: fold-toggle flex-centered
- login: code-button flex-centered
- practice: transcript-toggle / bubble-action / style-chip flex-centered
- questions: filter-chip flex-centered
- sop: modal-close flex-centered with 32px hit area
- web-ai: bubble-action flex-centered
2026-07-20 09:03:58 +08:00
admin 0a5fc9a463 feat(assistant): unify confirmed memory capture 2026-07-20 02:30:06 +08:00
admin 46a6156d8c fix(mobile): highlight new-chat button and flex-center composer labels
- AskSourceHeader: solid brand-red new-chat button, flex-centered label
- replace padding+line-height centering with flex on chips, hold-talk,
  send, bubble-action, transcript-toggle, system-text, scope-note
- carries the in-flight AskSourceHeader extraction on sop/web-ai pages
  (parallel session work; its test updates intentionally left uncommitted)
2026-07-19 23:21:24 +08:00
admin c47bf748cb fix(mobile): replace emoji glyphs with uni-icons and flex centering app-wide
- ChatComposer panel contract: callers now pass uni-icons type names
  (image/sound/list/help/checkmark) instead of emoji
- voice playback buttons: sound icon + pulse animation, no more 🔊/◼ chars
- practice recent list: rare symbols ⌕⌁◉ (tofu risk) -> wallet/gear/chatbubble
- sop resource icon ▶/文 -> 视/文 character badges
- back arrows: 22 char-based ← -> uni-icons back across 21 pages
- line-height centering -> flex in 8 spots (back buttons, media-remove,
  turn-voice capsule, option-marker, text-button, play-question)
2026-07-19 20:16:05 +08:00
admin 24da833fa6 feat(personal-assistant): add confirmed project memory 2026-07-19 08:19:24 +08:00
admin 151cc26caf fix(mobile): precise centering in ask page switch and composer
Replace line-height centering with flex + fixed heights, and swap
emoji/unicode glyphs (+ × ⌨ 🎤) for uni-icons vector icons so
alignment and rendering are consistent across platforms.
2026-07-19 03:27:46 +08:00
admin 4c2b5deb00 feat(mobile): redesign today home and switch mentor persona to female
- today: immersive community hero + hold-to-talk voice card, numbered
  schedule rows, common-functions grid (learning/report/question-board)
- login: female mentor bust; sop: female mentor chat avatars
- speech: raise browser-fallback mentor pitch to match female voice
2026-07-19 02:38:18 +08:00
admin 064816a784 feat(knowledge): add short-term ask memory 2026-07-18 21:22:49 +08:00
admin 68d5600534 feat(speech): add role-aware emotional TTS profiles 2026-07-18 18:27:14 +08:00
adminandClaude Fable 5 d5ea4b5451 feat(mobile): restore two old-H5 interaction loops in chat form
旧 H5 vs uniapp 逐功能盘点(客户要求'html 版本逻辑保持')后确认的
两个交互缺口,以会话形态补齐:

1. 学练闭环:总结卡底部新增「去练一遍」(旧版'开始跟读'),
   关卡后直达练页预习视图,学完话术立刻练。
2. 建议采用:老师傅提示气泡新增「用这句话回复」(旧版'建议回复'
   的真实数据版),ChatComposer 暴露 setDraft(text)——填入输入框并
   切键盘模式,员工可修改后发送;对打字困难的老年员工是关键路径。

盘点其余结论:旧版功能全部已迁移或被更优实现替代;
团队短板热力图为写死演示数据,真实版记 P2(需后端维度聚合);
演示角色切换/假数据脚手架确认不迁。

验证:本地+生产 E2E——总结卡→去练一遍→预习视图;
对练→老师傅提示→用这句话回复→输入框回填→发送进入下一轮。
发布备份 h5-before-$TS。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 11:29:05 +08:00
adminandClaude Fable 5 95dfd653ba fix(mobile): remove inherited page padding gaps around chat layout
客户标注了四处间距问题:头部上方空隙、头部/切换条两侧内缩、
输入条两侧内缩、输入条与 tab 栏之间约 96px 灰色空档。

根因:全局 .page 类自带 padding: 22px 16px 96px 且 min-height:100vh,
会话页继承后四边都被垫开;页面高度 calc 与之叠加产生底部大空档。

修复:
- .sop-chat-page 改为 fixed 铺满窗口区(--window-top 到 --window-bottom),
  padding 清零,头部/线程/输入条边到边,与微信布局一致
- ChatComposer 底部去掉 env(safe-area-inset-bottom) 叠加(tab 栏自行处理)

验证:本地与生产实测 headTop=0 headLeft=0 composer 与 tab 栏间距 ≤1px;
截图目检通过。发布备份 h5-before-20260718051038。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 05:11:21 +08:00
adminandClaude Fable 5 a7f0305bcb feat(mobile): make 转文字 transcript collapsible both ways
客户追加:转文字展开后应可收回。实现双向收口:
- 「转文字」chip 常驻并变为开关(展开后显示「收起」)
- 展开内容底部增加「收起全文 ▲」——长文读到底部无需回滚到顶部
红点语义不变(仅播放清除);TTS 不可用的纯文本气泡不受影响。
验证:本地展开⇄收起往返(chip 与底部链接各一次)通过;已发布
(备份 h5-before-$TS)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 05:05:48 +08:00
adminandClaude Fable 5 f7eff14342 feat(mobile): voice-first master replies with WeChat-style unread dot and 转文字
客户 2026-07-18 追加要求:师傅回复先以语音消息呈现(微信式),
未读带红点,点击播放,可选「转文字」展开全文;同时优化长文刷屏布局。

speech.ts:
- 播放控制器新增 preload(text):预合成 TTS 并写入源缓存(不播放),
  供语音气泡在首次点击前显示时长;失败返回 null
- 新增 measureAudioDuration(source):经 metadata 探测音频秒长(8s 超时兜底)

sop/index.vue:
- MasterMsg 增加 voiceStatus(preparing/ready/unavailable)/voiceDuration/
  unread/transcriptOpen
- 答案到达即后台预合成语音(说话内容=直接答案 answer 字段),
  就绪后气泡显示「🔊 N"」+未读红点;点击播放(再点停止,播放态变色),
  播放即清红点;「转文字」灰 chip 展开完整结构化内容
  (要点/提醒/引用/总结卡/反馈),微信同款交互
- TTS 不可用或答案为空时自动回退为纯文本气泡(播报按钮保留),
  训练概况等数据型回复直接文本呈现
- 布局优化:头部压缩,长文默认收进「转文字」,线程不再整段刷屏

验证:
- 本地:时长 13" 真实测得、红点播放后消失、转文字展开全文,3 张截图目检
- 生产冒烟:语音气泡+时长+红点+转文字 chip 全部就位
- H5 已发布(备份 h5-before-20260718045801)

说明:每条答案一次 TTS 合成调用(有缓存),试点量级成本可忽略;
练页会话化(批次二)将复用同一套语音气泡形态。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 04:59:11 +08:00
adminandClaude Fable 5 bf1e881a8c feat(mobile): rebuild SOP ask page as WeChat-style chat (batch 1)
客户 2026-07-18 新要求:语音文字交互改为微信聊天式,替代表单式操作
(客户原话 > Figma,已记入版本对比冲突表)。

新增 components/chat/ChatComposer.vue(可复用,练页批次二直接使用):
- 微信式输入条:⊕功能面板(图片/视频、选音频转文字、训练概况)、
  按住说话(touch+mouse,松开即发送/滑出取消)、麦克风⇄键盘切换、
  文本发送;录音兜底:环境不支持自动转选音频
- 快捷问题 chips 横向滚动置于输入条上方;附件以可移除 chip 展示

pages/user/sop/index.vue 重构为消息流模型:
- user/master/system/pending 四类消息;答案气泡内含要点/提醒/无依据提示,
  操作行=播报、引用N条(折叠展开)、总结卡、有帮助/没解决(逐条反馈)
- 语音松开即发送(按用户决策):转写成功直接成为消息(带🎤标),
  失败以系统气泡提示;选音频同语义
- 登录守卫、pending query/tool、主管学员态、生成计数取消、
  onHide/onUnload 清理全部保留;总结卡弹窗(下载/播报)原样保留

验证:
- 本地(构建产物+生产API)9 张截图人工目检:空态/快捷词问答/引用展开/
  键盘输入发送/按住录音/语音失败系统气泡/⊕面板/总结卡/超大字号档
- 生产冒烟:composer 存在 + 完整问答回合渲染通过
- H5 已发布(备份 h5-before-20260718044611)

批次二(待办):练页会话化(复用 ChatComposer)、web-ai 页统一、
旧表单样式清理。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-18 04:47:33 +08:00
admin 6bdc86e3fc feat: restore learning feedback and knowledge capabilities 2026-07-18 00:50:11 +08:00
admin 493fd5361e fix(mobile): align sop position label 2026-07-14 20:44:47 +08:00
admin 07ab28fd7b feat(aihr): trace sop feedback to search review 2026-07-14 04:18:09 +08:00
admin 87360a25d3 feat(aihr): align figma pages for release 2026-07-14 02:04:36 +08:00
admin c8ef15ee9e feat(mobile): add personal assistant knowledge flow 2026-07-12 11:57:02 +08:00
admin c66fc4e4b0 feat(mobile): finish employee app page polish 2026-07-11 18:59:30 +08:00
admin ee396d1e7a feat(mobile): 重做员工端首页、问答和训练页视觉
统一员工端 tabBar、共享卡片和三大核心页面的视觉基础,同时保持现有移动端业务流程不变。补充 H5 输入兼容、页面结构和训练回滚行为的回归测试。
2026-07-11 01:13:14 +08:00
admin 8f73cb0c84 fix(mobile): require employee position before user flow 2026-07-09 17:09:26 +08:00
admin ba8c35904e fix(mobile): normalize sop answer step labels 2026-07-09 15:28:14 +08:00
admin 04405b5e11 fix(mobile): reset page scroll on route entry 2026-07-09 13:34:24 +08:00
admin 678543e8a5 feat(aihr): complete uni-app role workflows 2026-07-09 10:42:20 +08:00