Commit Graph
99 Commits
Author SHA1 Message Date
admin d9ff43eae3 feat(aihr): add owner identity profiles for realtime practice
- remove owner-impatient persona; owner-calm renamed to 业主
- aihr_realtime_owner_profile table (tenant+project unique, enabled,
  version) with formal migration
- admin CRUD under moderator role gate; project code validated against
  org snapshot and project name taken from snapshot authoritatively
- employee endpoint returns display-safe fields plus defaultProfileId
  from the employee's own community; profile body never exposed
- session creation renders {community}/{profile} server-side; client
  text can never enter instructions; invalid profileId rejected,
  default resolution fails closed
- duplicate create returns 409
2026-08-05 03:18:50 +08:00
admin 8f9c244aeb feat(aihr): add experience library and community best answers as ask sources
- server-side employee position resolution (org snapshot) with hard
  position gate for EXPERIENCE/CASE sources; formal sources unaffected;
  unresolvable position fails closed to general-scope only
- merge published experiences (aihr_case_record, CASE_EXP) and moderated
  best answers (COMMUNITY, no submitter identity) into the citation pool
  as REFERENCE tier; auxiliary sources never alter formal answers and
  fail without breaking the main chain; grading re-grades ROUTE into
  GUIDANCE when only auxiliary evidence exists
- case recall endpoints enforce the same position gate
- moderator endpoint to promote a best answer into a CANDIDATE case
  record (idempotent via source_ref unique key, never auto-published)
- migration aihr_20260822_case_source_ref_and_best_answer_index_mysql8.sql
- COMMUNITY citations carry community-question:{id} in detailRef for
  direct navigation
2026-08-05 02:45:57 +08:00
admin 6cc2ac73e5 feat(aihr): add evidence grading, clarification loop and route exits to ask agent
- narrow amount-semantics clarification to adjudicative intents only
- persist pending clarification on conversation and resolve follow-up
  replies as ANSWERED/GAVE_UP/NEW_TOPIC (max one round per field)
- add AihrEvidenceGradingService: FULL/PARTIAL/GUIDANCE/ROUTE arbitration,
  policy-claim post-validation, reference answers labeled as non-formal
- unblock retrieval source gating; tag citations with evidence tier,
  keep PUBLISHED/HUMAN_VERIFIED/effective-date authorization gates
- replace operator-facing no-evidence copy with actionable route exits
  (human help, direct finance channel, web research)
- allow fragment-less down feedback for own NO_EVIDENCE queries so
  ROUTE answers can escalate to human help (fragment_id nullable)
- migrations: aihr_20260804_pending_clarification_mysql8.sql,
  aihr_20260804_feedback_fragment_nullable_mysql8.sql
2026-08-05 00:52:52 +08:00
key 09b1085d9e docs(aihr): reconcile grounded agent production state 2026-08-04 23:09:06 +08:00
key 901f1aeb3c feat(aihr): prepare grounded agent shadow validation 2026-08-04 21:24:25 +08:00
key b653164a46 feat(aihr): add grounded agent shadow runtime 2026-08-04 12:03:24 +08:00
key 12fc9fdddc feat: add query observability and collation safeguards 2026-08-04 02:15:03 +08:00
key 99e8c509d5 fix: harden knowledge lifecycle rollout 2026-08-03 16:00:45 +08:00
key df77998e0c feat: complete governed knowledge lifecycle 2026-08-03 14:34:54 +08:00
key a275f98fad feat: support RTF knowledge uploads 2026-08-03 01:49:48 +08:00
key a07bbcca07 fix: support authenticated video citation playback 2026-08-02 22:04:09 +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 72c56e7c96 fix(knowledge): focus formal citation snippets 2026-07-31 01:17:15 +08:00
key ca61b1f36f fix(knowledge): reject irrelevant formal citations 2026-07-31 01:02:48 +08:00
key bf703b7853 fix(knowledge): gate policy answers by formal sources 2026-07-31 00:28:41 +08:00
key a3689591e7 docs(release): reconcile August 1 pilot evidence 2026-07-30 23:57:38 +08:00
key c16a3e83d7 feat(release): close handler and microphone gaps 2026-07-30 12:01:45 +08:00
key 6a6b264f22 docs: record 500MB upload production verification 2026-07-29 21:58:52 +08:00
key 140aa6f31f fix: allow 500MB async knowledge uploads 2026-07-29 17:55:12 +08:00
key 652e48884b fix(aihr): recover stalled media processing 2026-07-29 15:09:01 +08:00
key 70e5516ff3 fix(release): close fixed-code mobile auth gaps 2026-07-29 11:59:30 +08:00
key 9ae5f750c8 fix: align Windows dev, App compiler, and ASR 2026-07-26 21:27:37 +08:00
adminandClaude Opus 5 c9f5271dd9 docs(org): record the incremental employee sync contract
Document the `/api/aihr/org/sync-changes` change feed shipped in 30ef6a8f:
`employee.id` is the stable subject key, the dry-run-then-apply order, and the
fail-closed rules that full `/sync` keeps for masked phone numbers and
duplicate memberships. Adds the endpoint row and a curl example alongside the
existing full-sync entry.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-25 23:58:45 +08:00
adminandClaude 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 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 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 80af8a0870 docs(upload): record production multipart limits 2026-07-25 01:11:11 +08:00
admin c9d2012ec1 feat(aihr): finalize practice growth and access boundaries 2026-07-25 00:42:19 +08:00
admin a67444645e docs(agent): sync final implementation state 2026-07-25 00:03:19 +08:00
admin cc7563cac0 docs(agent): record local implementation boundary 2026-07-24 23:37:52 +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 163b08ecfe feat(aihr): 重构运营后台与租户知识治理
- 重构运营总览、侧栏和内容运营工作台\n- 增加大喇叭、成果审核与运营统计链路\n- 补齐租户、知识空间、分类和知识维护闭环\n- 加固标签页租户上下文、停用租户写保护与迁移预检
2026-07-23 01:24:22 +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 0a5fc9a463 feat(assistant): unify confirmed memory capture 2026-07-20 02:30:06 +08:00
admin 24da833fa6 feat(personal-assistant): add confirmed project memory 2026-07-19 08:19:24 +08:00
admin 064816a784 feat(knowledge): add short-term ask memory 2026-07-18 21:22:49 +08:00
admin 2eda757483 docs: define ask-master conversation memory plan 2026-07-18 20:47:26 +08:00
admin 68d5600534 feat(speech): add role-aware emotional TTS profiles 2026-07-18 18:27:14 +08:00
admin 267bb3525f docs: sync production release truth 2026-07-18 01:30:13 +08:00
admin 6bdc86e3fc feat: restore learning feedback and knowledge capabilities 2026-07-18 00:50:11 +08:00
admin eacf1a0aea feat(mobile): align employee practice screens for release 2026-07-15 11:23:08 +08:00
admin 82d93a1af1 feat(aihr): allow employees to complete onboarding tasks 2026-07-15 02:49:40 +08:00
admin 2f21895597 feat(aihr): add candidate voice interview answers 2026-07-15 02:45:00 +08:00
admin 40574c204d fix(aihr): separate onboarding and candidate review states 2026-07-15 02:39:29 +08:00