Pine
3688d5d0b1
feat: 增加 screen_id 参数以支持针对特定屏幕的工具执行,优化大屏控制逻辑
2026-08-19 14:28:10 +08:00
Pine
e72442dae0
feat: 实现设备注册和精准控制功能,支持双屏管理;更新相关逻辑以优化设备状态跟踪
2026-08-19 14:19:37 +08:00
Pine
fd6493f582
feat: 添加安装更新功能,支持下载并安装更新包;优化双屏控制逻辑,增强错误处理
2026-08-19 13:40:00 +08:00
Pine
e36840d12b
feat: 添加双屏控制功能,更新相关逻辑以支持双屏窗口全屏展示;新增全局错误边界组件以处理渲染错误
2026-08-19 13:30:03 +08:00
Pine
91e20c3a81
feat: 添加客户端更新检测功能,支持版本检查和更新提示;更新相关组件和样式
2026-08-19 13:14:00 +08:00
Pine
5ed396aea4
feat: 添加双屏控制功能,支持在第二块屏幕上全屏展示内容;更新相关 UI 和逻辑以适应新功能
2026-08-19 13:13:54 +08:00
Pine
1e63da95ec
feat: 更新 .gitignore,移除 .env.local 文件忽略规则;修改 getVoiceWsUrl 函数以固定语音地址跟随 API 基址主机
2026-08-19 12:32:52 +08:00
Pine
107727ea5e
feat: Refactor DpmOverlays to use ShowCard for rendering cards and add ToolStatusToast for operation status notifications
...
- Moved card rendering logic from DpmOverlays to a new ShowCard component for better reusability.
- Introduced ToolStatusToast to display real-time operation statuses in the top right corner.
- Updated PageHeader to conditionally render credits based on the current path.
- Modified PromptPanel to change tool names and update prompt titles.
- Enhanced ScreenLayout to include ToolStatusToast.
- Updated styles for new components and adjusted existing styles for consistency.
- Implemented statusBus utility for dispatching tool status events.
- Updated useMqttControl to integrate tool status notifications during navigation and card display actions.
2026-08-19 12:28:35 +08:00
Pine
81a888f5ca
feat: 更新服务地址为 192.168.1.9,修改相关配置以支持局域网访问
2026-08-18 09:05:23 +08:00
Pine
7e6b14c44a
feat: 优化音频处理逻辑,支持降级到 ScriptProcessorNode,增强兼容性
2026-08-18 08:56:17 +08:00
Pine
71aa2bc3b6
feat: 优化 AudioWorklet 加载策略,增加多种 URL 支持和详细错误日志
2026-08-18 08:41:30 +08:00
Pine
94faf14f07
feat: 更新语音助手名称为昆小创,修改欢迎语和提示词
2026-08-18 08:31:53 +08:00
Pine
f75fe7b9b3
feat: 添加语音 AI 主动问候功能,优化问候文本发送逻辑和音频处理参数
2026-08-18 08:20:44 +08:00
Pine
49c0975fdc
feat: 优化 AudioWorklet 加载逻辑,增加 Blob URL 兼容性和多基址回退方案
2026-08-18 08:06:12 +08:00
Pine
6f8ccf1176
feat: 添加音频工作模块,支持从后端加载音频处理器
2026-08-18 07:57:15 +08:00
Pine
55d33c091b
feat: 优化音量面板关闭逻辑,增加外部点击判断
2026-08-18 07:50:00 +08:00
Pine
566656aab9
feat: 添加 s2s 实时语音 WebSocket 地址支持,并更新相关配置
2026-08-18 07:47:25 +08:00
Pine
d70d9d5fbd
feat: add SFX volume control and improve audio feedback
...
- Implemented separate sound effects volume control in settings.
- Updated backend to handle new `sfx_volume` parameter.
- Enhanced UI to include sound effects volume slider in admin panel.
- Integrated sound effects for various user interactions (clicks, navigation, alerts).
- Added a new global sound engine to manage audio synthesis without external files.
- Updated documentation for Docker deployment and Windows packaging.
- Refactored audio context management to ensure sound effects are available post user interaction.
2026-08-18 07:14:13 +08:00
Pine
18d28be943
feat: 添加后端部署和API基本检索的Docker Compose配置
...
- 引入新的`docker-compose.yml`文件,便于后端和MQTT代理(EMQX)的部署。
- 更新多个组件中的API基本检索,使用函数进行动态解析。
- 加强了多个组件中API调用的错误处理和日志记录。
- 优化了AI聊天面板离线场景的回退响应。
- 更新DataScreen和MediaScreen组件中的数据显示和统计,以反映准确的指标。
- 重构MQTT连接逻辑,以支持动态凭证和客户端ID。
2026-08-18 06:50:50 +08:00
Pine
fbf2eccad2
feat: 语音气泡浅蓝 + 页眉图标展示全部视觉状态 + 简化自动问候
...
- /voice 页右下角气泡文本改浅蓝色(最新 #4cc2ff / 历史 #6fb5ea)
- GlobalVision 广播 dpm:vision-status(status/cameraOn/gesture/faces)
- 页眉图标四态:默认灰(探索) → 识别中浅蓝(摄像头开/检测/面向) → 手势绿(惊喜) → 异常红
- 自动调用语音助手问候语简化为「您好呀,需要我的帮助吗?」
2026-08-18 06:24:26 +08:00
Pine
75498027f3
feat: 右上角图标改造为手势状态指示器
...
- 默认灰色「探索」罗盘图标(Compass)
- 识别到手势(dpm:gesture)→ 变绿色「惊喜」表情(EmojiSurprised)+ 光晕脉冲,3s 后恢复
- title 同步切换(关于 PineSound / 识别到手势),点击仍打开关于弹窗
- 新增 explore/surprise 图标映射与手势状态样式
2026-08-18 06:21:55 +08:00
Pine
6b7fd0ec95
feat: 添加 AI 助手预设问题面板,优化园区概览信息展示
2026-08-18 06:17:57 +08:00
Pine
418d94d7b7
feat: 手势开启新对话 —— 确认弹窗卡片 + 新对话首条用默认欢迎语
...
- 对话中举手 → 弹出确认卡片(再次举手或点击「确认」开启新对话,10s 倒计时自动取消;取消按钮可手动关闭)
- 欢迎页(未开始对话)举手不响应
- 开启新对话后第一条消息 = 默认完整欢迎语(「问问小园」问候),不再只发「已开启新的对话」
- 1 分钟无新消息自动清空本轮,回到默认欢迎语(原 2 分钟)
- 新增 hand-stop/camera 图标与确认卡片样式
2026-08-18 06:13:47 +08:00
Pine
0af159a175
feat: 数据真实化、企业展示墙、全局手势识别与 3D 模型完善
...
- 数据大屏改用真实数据(xls 统计表 + 宣传册口径);TOKEN/工具调用基于真实锚点测算
- 新增企业展示墙页(/wall,39 家全量档案 + MQTT/admin/ESP32 控制文档)
- 新增全局手势识别(GlobalVision 全局挂载 + dpm:gesture 事件分发)
- 3D 模型墙面逐间修复、去除门/过道顶棚/调试标签、房间资产不穿墙、会议室多小桌
- 侧栏企业分布扩展至 39 家完整信息,分区按官方四大孵化区域
- 语音页多轮对话展示优化、去除页脚与检测横条、背景对齐
2026-08-18 05:48:56 +08:00
Pine
1581b62154
feat(Building3D): 更新房间布局,移除临时坐标轴指示,优化墙体组件
2026-08-18 05:38:13 +08:00
Pine
d00e9856cd
feat(Building3D): 更新房间和墙体定义,添加临时坐标轴指示
2026-08-18 05:34:02 +08:00
Pine
7d3cdded9e
style(ui): 开发署名微调(间距与字号 15px)
2026-08-18 02:32:38 +08:00
Pine
7e6c1a09c0
fix(ui): 页眉副标题在矮屏设备(高度≤900px)不再被隐藏,改为压缩字号
...
根因:@media (max-height: 900px) 里 .bd-header-sub { display:none },
1366x768 等设备高度不足触发隐藏;本机大屏高度达标所以显示。
改为字号压缩(10px),所有设备均显示副标题
2026-08-18 02:30:03 +08:00
Pine
f4067c1f0e
refactor(s2s): 语音助手基础提示词迁移到后端统一管理
...
- 后端 config.py:新增 S2S_INSTRUCTIONS(.env DPM_S2S_INSTRUCTIONS 可覆盖)
- rag.py:build_instructions() 组装 配置提示词 + 园区知识库摘要
- routers.py:GET /api/s2s/instructions 下发(前端连接时拉取)
- 前端 VoiceAssistant:删除硬编码 DEFAULT_INSTRUCTIONS,改拉取后端指令;
仅保留后端不可用时的极简兜底
改提示词只需改后端(.env 或代码),前端零硬编码。
2026-08-18 02:28:55 +08:00
Pine
e653c4b2f2
fix(ui): 开发署名移到左侧标题后(分隔线 + 垂直居中)
2026-08-18 02:26:12 +08:00
Pine
10db36aa3f
feat(ui): 页眉加入开发署名(云南派音人工智能科技有限公司 开发)
2026-08-18 02:25:31 +08:00
Pine
26f92837b3
fix(media): 媒体播放控制区只保留播放/暂停 + 左右切换,移除右侧资源名称
...
- 删除页眉媒体控制区的资源名称按钮(含 cleanName/showName 死代码)
- 保留:播放/暂停、上一段、序号、下一段、声音解锁(异常时)
2026-08-18 02:24:40 +08:00
Pine
4d693e895d
feat(mqtt): 集中式 MQTT 调度器(页面级操作 + vision 开关 + 页面上报)
...
useMqttControl 扩展命令分发(opc/display/command):
- vision_set:全局人物识别开/关(dpm:vision-control → 语音页 visionEnabled)
- ai_input / ai_preset / ai_company / ai_zone:AI 助手页操作(dpm:ai-action)
- voice_start / voice_stop / voice_refresh:语音对话页操作(dpm:voice-control)
- 页面状态即时上报 opc/frontend/state(路由变化即发,心跳外补充)
页面监听:
- AiChatPanel:输入并发送 / 选择预设问题发送
- ParkSidePanel:切换分区(加速区/国际区/成长区)/ 切换展示企业(next/prev)
- VoiceAssistant:启动/关闭对话 / 刷新页面;vision 全局开关
- MediaScreen:play/pause/next/prev 已有覆盖
切页(navigate/navigate_rel)、心跳上报沿用既有通道。
2026-08-18 02:20:37 +08:00
Pine
c5a06ac160
fix(voice): 修复语音页黑屏(onToolCall TDZ)
...
onToolCall 依赖数组引用 pushMessage,但被插在 pushMessage 声明之前
→ Cannot access 'pushMessage' before initialization → 渲染崩溃黑屏。
已移到 pushMessage 之后(198→230),与 start/sendGreeting 同类问题一并规避
2026-08-18 02:16:46 +08:00
Pine
83bf19a3e5
feat(agent): 智能体接入工具调用 + 园区知识库(RAG)
...
后端:
- tools.py:工具注册表(get_park_overview 园区实时数据 / query_companies 企业名录 / control_display 大屏控制 / get_time),POST /api/tools/exec 执行
- rag.py:园区知识库(park.md 分块 → dashscope text-embedding-v3 → numpy 余弦检索),/api/kb/brief 摘要注入 + /api/kb/retrieve 动态检索
- 知识索引 kb_index.json 入库,部署免首次构建
前端(VoiceAssistant):
- TOOL_DEFS 经 session.update 传给 LLM;toolcall 事件 → 后端执行 → sendToolOutput + requestResponse
- instructions 拼接园区知识摘要;工具调用气泡提示
- 测试通过:4 个工具,检索「入驻政策」正确命中政策段落
2026-08-18 02:06:07 +08:00
Pine
1e60744961
feat(ui): 增加关于弹窗(PineSound 品牌)
...
- AboutDialog:品牌 Logo/产品名/版本/技术栈/版权,Esc 或点击遮罩关闭
- PageHeader 右上角新增「ⓘ 关于 PineSound」入口(info 图标)
- 样式:about-* 系列(毛玻璃遮罩 + 渐变品牌块),跟随 DPM 配色
2026-08-18 01:59:34 +08:00
Pine
a9a63986be
chore: 清理废弃资源
...
- 删除 public/voice-demo/(iframe 回退版,React 原生页面已取代)
- 删除 voice-embed.css(无引用)
- 删除 pages/Screen.jsx(被 ScreenLayout 取代,无引用)
- 清理各处 .DS_Store
2026-08-18 01:40:18 +08:00
Pine
4e2224e9dc
feat(voice): 实时语音对话页(React 完全复刻原版 UI)
...
- /voice 页面:中间圆球 + 左右按钮 + 状态图标 + 右下角气泡(进场/淡出/阶梯字号/上限8)+ 噪声门弧线电平,结构类名与原版一致
- s2s WebSocket 客户端 + worklet 音频(mic-capture/audio-playback)+ orb 可视化
- 摄像头实时预览(默认开启)+ 视觉识别状态条(后端 YOLO 推理)
- 底部园区概览条(复用 ParkOverviewStrip),orb-wrap 视窗居中
- 页眉复用 ScreenLayout;左右键导航加入 /voice
- 文档:docs/voice-integration-plan.md
2026-08-18 01:37:44 +08:00
Pine
29bdad316f
feat: 播放控制移入页眉 + 媒体铺满智能裁切
...
页眉播放控制(仅媒体轮播页):
- 新增 MediaHeaderControls:播放/暂停、上一段/下一段、序号、当前文件名(点击进后台)、声音解锁
- 新增 mediaControl 共享状态桥:媒体页同步播放状态,页眉订阅渲染并下发指令
- 移除媒体页底部控制区,媒体区保持纯净全屏
媒体展示:
- .ms-media 改为 object-fit: cover,填满整个容器并智能居中裁切(原 contain 留黑边)
修复:
- MediaScreen useEffect 依赖数组引用后声明函数导致的 TDZ 崩溃
- 清理 MediaScreen 中不再使用的 Icon/cleanName/togglePlayPause
2026-08-17 22:45:46 +08:00
Pine
07dbd404a9
refactor: 弱化媒体播放控制区 + MQTT 客户端 ID 唯一化
...
播放控制区:
- 从底部中央移到右下角,整体缩小(播放键 42→30px、导航键 34→26px)
- 背景更透(0.8→0.55)、阴影更轻,视觉弱化不抢内容
- 播放名不再显示完整地址:URL 媒体只显示文件名(cleanName 清洗,去掉协议/路径/查询)
MQTT 客户端 ID:
- 后端 client_id 由固定 dpm-backend 改为 dpm-backend-{pid}-{随机},多实例不互踢
- 前端 client_id 增加时间戳 + 更高熵随机,避免多屏/多标签竞争
2026-08-17 22:16:22 +08:00
Pine
7bb0e9024a
fix: 修复大屏播放控制链路
...
前端:
- useMqttControl 指令分发补上 play_target(此前被静默丢弃,立即播放无法触发大屏跳转)
- MediaScreen 重构 playTarget:pendingTargetRef 统一刷新播放列表路径,
消除与 playlist_changed 重载的竞态(避免跳转被旧索引覆盖)
后端:
- storage.add_to_playlist 自动识别 URL 来源(source=url),
修复 URL 媒体加入播放列表后被当本地文件过滤、永远无法播放的问题
- _load 时规范化旧数据(source=None 的 http 条目自动补 url)
2026-08-17 21:59:13 +08:00
Pine
c55835fb7d
fix: 管理后台连接状态 + 修复按钮无响应
...
连接状态(正式):
- /api/display/state 扩展:screens_online(大屏心跳统计,opc/display/heartbeat)+ last_command(最近指令与发布结果)
- 前端大屏每 10s 上报心跳(稳定 client_id),后端 30s TTL 统计在线大屏数
- 管理台新增「连接状态」卡片:后端/MQTT/在线大屏/最近指令,3s 轮询刷新
按钮无响应根治:
- admin.js 改为 document 事件委托(data-nav/data-control/data-action/复制/预览),不再依赖逐个绑定
- /static 与 /admin 响应加 no-cache 头,杜绝旧 JS/CSS 缓存导致的按钮失效
- SSE 不再自动重载页面(避免与操作回调双重重载清掉反馈);立即播放改为 toast 不重载
2026-08-17 21:54:28 +08:00
Pine
1a95ecbacb
feat: 管理后台补齐完整功能
...
- 页面切换卡片:数据大屏/数字孪生/AI 助手/媒体轮播 → MQTT navigate 控制所有大屏
- 立即播放:新增 POST /api/playlist/play(加入播放列表 + MQTT play_target),
MediaScreen 监听 play_target 跳转并播放指定媒体
- 远程 URL 支持两种操作:添加到媒体库 / 加入播放列表
- 本地媒体卡片显示 FastAPI 输出 URL(/file/...)+ 一键复制
- 预览弹窗增加「立即播放」;新增 page-switch/media-url/copy-btn 样式
2026-08-17 21:38:04 +08:00
Pine
00cb76c73f
feat: 管理后台迁移至 FastAPI + Jinja2 服务端渲染
...
- GET /admin:Jinja 模板渲染(登录页 / 管理台),媒体库、播放列表、设置由服务端渲染
- POST /admin/login:表单登录 + HMAC 签名 Cookie(DPM_ADMIN_SECRET),GET /admin/logout 退出
- /static/admin.css + admin.js:动态操作(上传进度/播放控制/设置/SSE 状态/预览弹窗)调 REST 后整页刷新
- 前端移除 React Admin 页面与 /admin 路由(Admin.jsx 删除);媒体/播放列表接口保持不变
- 依赖改用 uv 管理(pyproject.toml + uv.lock,含 jinja2),README 更新启动方式
2026-08-17 21:30:44 +08:00
Pine
856ff88440
feat: 拆出 FastAPI 独立后端 + MQTT 控制 + 阿里云 AI
...
后端(backend/,FastAPI :10085):
- 全部数据 REST 接口:dashboard 快照 / 企业分区 / 播放列表 / 媒体 / 设置
- MQTT 控制通道:opc/display/command(切页/播放/卡片/通知),
管理端 POST /api/display/command → MQTT 广播 → 所有大屏同步响应
- 阿里云 DashScope:通义千问 LLM + 函数调用(工具经 MQTT 广播),
paraformer-realtime-v2 语音识别 /api/ai/asr
- 媒体资源统一由后端存储返回(上传/列表/静态服务)
- SSE /api/events 保留作 MQTT 不可用时的兼容回退
前端:
- config.js + .env.local 配置后端地址与 MQTT 账号(前端 dpm / 服务端 dpmserver)
- mqtt.js 客户端 + useMqttControl(MQTT 驱动切页/媒体/卡片/通知)
- DpmOverlays 全局覆盖层(通知 toast + 企业/分区/总览卡片)
- useParkSim 改为后端 API 数据源(离线回退本地模拟)
- AiChatPanel:对话走后端 LLM(工具调用),语音走本地录音 + 后端 ASR
- MediaScreen:媒体控制走 MQTT(保留 SSE 回退),修复 useEffect TDZ
Rust:lib.rs 移除内嵌 HTTP 服务器,只保留薄壳(窗口/权限/自启/npc 隧道)
安全:backend/.env、.env.local、media、data.json 已 gitignore
2026-08-17 21:26:16 +08:00
Pine
7f1c2ac4f0
fix: 注释掉 bd-strip-title 的伪元素样式
2026-08-17 20:53:36 +08:00
Pine
e59047c4aa
feat: AI 助手支持文字/语音双模式
...
- 头部新增模式切换(文字/语音),文字=对话框,语音=语音交互按钮
- 语音模式:大麦克风按钮 + 聆听波纹动画 + 识别中状态,点击开始/再次点击结束
- 优先使用 Web Speech API 识别(zh-CN),无权限/不支持时自动兜底模拟识别
- 语音提问以文字形式进入同一对话流,气泡带「语音」标记
- 切换模式保留对话历史;聆听中切换/离开自动中止识别
- 新增 microphone/microphone-filled/microphone-off/message-circle 图标
2026-08-17 20:34:45 +08:00
Pine
7da9749953
feat: 新增 AI 智能助手对话页面(/ai)
...
- 布局沿用数字孪生页接口:左侧 AI 对话区 + 右侧企业分布面板
- 新增共享 ParkSidePanel 组件(分区/企业名录/详情/实时动态),
数字孪生与 AI 助手页右侧完全一致
- 新增 AiChatPanel 对话组件:欢迎语 + 消息流 + 快捷提问 + 输入发送,
内置园区知识库模拟回复(入驻/政策/场地/AI 赋能/分区/企业/融资/就业/导师)
- 路由与导航循环加入 /ai(数据大屏 → 数字孪生 → AI 助手 → 媒体轮播)
- usePageNav 忽略输入框/文本域按键,避免输入方向键误切页面
- 新增 send/eraser/headset/circle-dot 图标,全部遵守 bd- 浅色科技 UI 规范
2026-08-17 20:26:16 +08:00
Pine
ef009dad05
fix: 园区概览页脚颜色统一(设计变量提升至 :root)
...
- --bd-* 设计变量从 .bd-page 提升到 :root,页眉/数字孪生/媒体页/页脚全部生效
修复媒体播放页页脚图标与数值失去蓝色(回退为继承深色)的问题
- 数据大屏改用共享 ParkOverviewStrip 组件,与媒体播放页页脚完全一致
(标签统一为「累计营收」)
- PageHeader 头像 Logo 路径修正 /public/logo.png → /logo.png,修复 Logo 不显示
2026-08-17 20:15:18 +08:00
Pine
84b3f12146
refactor: 页眉由 App 统一注入(ScreenLayout),三页共用一致页眉
...
- 新增 ScreenLayout 布局路由:注入共享 PageHeader + 全局左右键循环导航
- PageHeader 无 props,按路由自动识别状态(数据实时/3D 实时/媒体播放)
- DataScreen / DigitalTwin / MediaScreen 移除各自页眉,避免重复
- 页脚按页面按需保留(数据大屏 + 媒体轮播,数字孪生无)
- 管理后台不参与导航循环;旧 /screen2 路由移除
- 补齐 MediaScreen 音量/播放/翻页图标与浅色主题样式
2026-08-17 20:08:45 +08:00