key
dc20b92061
fix(mobile): recover direct channels after network failure
2026-07-29 02:31:19 +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
admin and Claude 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
admin and Claude Opus 5
7096545e82
fix(mobile): translate microphone errors and pre-request permission
...
实时陪练失败时,getUserMedia 抛出的 Chromium 英文原文会直接透给用户(真机实测见过
"Could not start audio source"),既不可读也不含任何可执行指引。新增
utils/microphone.ts 把权限、设备占用、无设备、非安全上下文四类底层错误翻译成中文
引导;业务层自己抛的中文文案原样透出,未识别的错误回落到原有通用提示。
同时在建会话之前主动申请 RECORD_AUDIO,并在 manifest 显式声明该权限。
需要说明:此权限预申请是防御性的。真机核查 RECORD_AUDIO 已授予、APK 本就声明该权限、
实时链路可正常跑通,先前那次 "Could not start audio source" 是麦克风被其他应用占用
的瞬时故障,不是权限缺陷。未在"权限未授予"的设备上实测过 WebView 是否会自行弹出
Android 运行时授权框,故此调用在已授权设备上为无害空转;若确实不弹,则它是唯一授权入口。
manifest 声明同样只为防未来模块调整导致权限丢失。
新增 6 项单测覆盖错误映射与授权分支(共 168 项通过)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-26 00:58:40 +08:00
admin and Claude Opus 5
788a2abbe4
fix(mobile): avoid status bar overlap on custom-nav pages
...
全局 navigationStyle 为 custom,页面需自行避让状态栏,但四处顶部内容仍被状态栏
压住:练习页标题与对话页标题、我的页顶部卡片、问答页头部。
避让不能走 CSS:env(safe-area-inset-top) 在 Android WebView 恒为 0(该值本是
iOS 刘海概念,Chromium 仅在配置 display-cutout 时才上报),uni-app 注入的
--status-bar-height 实测在 App 端同样取不到,两者都会静默回落成 0,造成"构建产物
里改动存在但运行时无效"。改由 utils/safe-area.ts 读
uni.getSystemInfoSync().statusBarHeight,各页面以内联样式绑定 padding-top。
profile 页同时把 min-height 从 100vh 改为 100%:叠加状态栏内边距后 100vh 会
溢出一屏高度产生多余滚动。
真机(vivo V2443A,720x1600,状态栏 72px)像素验证:修复前状态栏下缘 60-80px 带内
有 872 个文字像素,修复后四处均为 0。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-26 00:58:18 +08:00
admin and Claude 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 and Claude Opus 5
5cf7ce5847
feat(practice): run realtime practice on App-Plus through renderjs
...
App-Plus has no WebRTC or getUserMedia in the logic layer, so realtime
practice was H5-only and the native entry had to advertise a record-then-
transcribe downgrade.
Move the media/WebRTC engine into `realtime-browser-engine.js` and drive it
from `RealtimePracticeAppBridge.vue`, whose renderjs script runs inside the
system WebView where those APIs do exist. The logic layer keeps the
authenticated calls: SDP exchange and `search_knowledge` tool invocation stay
server-proxied, so the access token is never handed to the view layer. Both
sides talk over the renderjs bridge only in session payloads the server
already assembled.
Verified against a real App build (`app-renderjs.js` holds RTCPeerConnection
and getUserMedia; `app-service.js` holds the SDP endpoint, renderjs side has
zero hits). Microphone permission, live transcription, remote playback,
foreground/background switching and disconnect fallback still require Android
and iOS device verification.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-25 23:58:10 +08:00
admin and Claude Opus 5
3055d2bec9
fix(mobile): replace App-Plus unsupported date and query APIs
...
`URLSearchParams` is absent from the App-Plus JS core, and
`toLocaleDateString('sv-SE', { timeZone: 'Asia/Shanghai' })` depends on full
ICU data that the App runtime does not ship, so the work-result pages built
either a broken query string or the device-local date.
Build query strings with `encodeURIComponent`, and centralise the business day
in `currentShanghaiDate()`, which shifts the epoch by a fixed UTC+8 offset
before slicing the ISO date. Asia/Shanghai has no DST, so the fixed offset is
exact rather than an approximation.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
2026-07-25 23:57:06 +08:00
admin
bb8b2dde7e
fix(exam): replace unfounded 4-char title rule with explicit validation messages
...
- 考试名称仅要求非空,移除无依据的至少 4 字限制;保留及格分 1-100、
至少一题、总分 100、题干/选项/答案完整、至少一名员工的发布校验
- 发布坞展示具体校验失败原因,不再静默禁用按钮
- CHANGELOG/README 同步 2026-07-25 组织姓名定向补齐与生产复核记录
2026-07-25 18:15:32 +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
2b3c37677d
fix(mobile): prioritize practice actions above guidance
2026-07-25 13:17:32 +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
3a19b475a8
feat(mobile): add voice-to-text input to direct feedback page
...
- 反馈内容 label 行新增语音 chip:toggle 录音(启动/录音计时/结束中/转写
四态),转写结果以换行追加,JS 侧截断至 5000 字上限并提示
- 复用既有 services/speech.ts + /api/ai/asr 链路;表单页文字为主路径,
录音不可用或权限失败仅提示改文字输入,不做选文件降级
- voiceStopping 状态修复 stop→onCapture 竞态(重复点按不再丢录音)
- onHide/onUnload 统一 teardownVoice:generation++、abort 转写、
cancel 录音、停计时,切页无迟来写回
- 渠道按钮加图标(vip/wallet/staff/eye/gear),匿名行与空历史态补图标
- 测试改用函数体提取断言,覆盖清理/竞态/截断/模板契约;150/150
单测、vue-tsc、H5 构建通过,mock API 浏览器验证通过
已经过 Codex 审查
2026-07-25 03:00:30 +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
f6ffafda30
fix(mobile): type direct feedback switch event
2026-07-25 00:16:56 +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
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
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
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
83f775faec
fix(mobile): stack extra-large schedule actions
2026-07-23 22:18:44 +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
f6609808df
feat(aihr): add M1 broadcast targeting and mandatory reads
2026-07-23 12:11:41 +08:00
admin
4b31848e3d
fix(aihr): harden broadcast and mobile assistant flows
2026-07-23 03:35:36 +08:00
admin
62c8b41672
feat(mobile-uni): 重构“我”(个人中心)为原生App沉浸式卡片看板,禁用Emoji全面采用uni-icons矢量图标
2026-07-23 02:20:10 +08:00
admin
b4ae0e6da0
feat(mobile-uni): 彻底完成登录页、首页、学习中心与问答页UI/UX极简重构及单条消息追问功能
2026-07-23 02:16:57 +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
9ccfe1afae
refactor(mobile-uni): 彻底移除底部悬浮胶囊Bar,恢复原生App纯净卡片流与流内快捷动作
2026-07-23 02:01:03 +08:00
admin
a8a1845fdd
fix(mobile-uni): 在 Tab 视图末尾注入 90px 实体占位 Element 彻底规避底部 Dock 遮挡
2026-07-23 01:56:22 +08:00
admin
8bce7aff0f
fix(mobile-uni): 修复 panel-head 右对齐、隐藏 scroll-view 滚动条并消除底部悬浮 Dock 遮挡
2026-07-23 01:53:48 +08:00
admin
4381dd8f7e
fix(mobile-uni): 彻底优化学习中心UI细节,替换长框刷新按钮为精致图标,重构空状态与筛选Chips
2026-07-23 01:50:55 +08:00
admin
dd187cf15c
feat(mobile-uni): 全面重构“学”(学习中心)页面为原生App分段视图架构,新增Segmented Tabs与悬浮Dock
2026-07-23 01:47:26 +08:00
admin
390bbda993
style(mobile-uni): 重构今日安排任务列表排版,新增Top-Meta栏与主题色卡片亮边
2026-07-23 01:35:06 +08:00
admin
333c365c6f
style(mobile-uni): 优化员工端首页与登录页UI交互,更名为银城帮道
2026-07-23 00:42:51 +08:00
admin
455267cf6f
feat: add realtime practice voice selector
2026-07-22 12:24:46 +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