Commit Graph
535 Commits
Author SHA1 Message Date
junvandCopilot cdb7efd61d jbot: add WeChat-style hold-to-talk voice button
- Added VoiceButton component (inline in App.jsx) with full
  mousedown/mouseup/mouseleave + touchstart/touchend/touchcancel support
- Shows context-aware label: 🎙 按住说话 /  准备中 / 🔴 松开发送 / ⚙ 思考中 / 🔊 播放中
- Pulsing red animation while recording, amber pulse while acquiring mic
- Disabled (gray) while AI is thinking or speaking
- Desktop: pill button docked at bottom of chat panel (max-width 380px)
- Mobile: fixed to bottom of viewport with safe-area-inset support,
  height 60px for easy thumb tap; right-col padded so messages aren't hidden
- Updated hint text and listening status to be input-agnostic

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
junvandCopilot fd1d9db753 fix(jbot): ignore normal WebSocket close frame in on_error
Volcengine ASR server sends a WS close frame (opcode=8, code 1000,
'finish last sequence') after receiving the final audio chunk.
websocket-client fires on_error with this frame data instead of
(or in addition to) on_close — treat opcode=8 and 'already closed'
as normal termination, not an error.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
junvandCopilot 2d6d4b09fc fix(jbot): replace WebSocketApp.send_binary with ws.send(data, OPCODE_BINARY)
WebSocketApp callbacks receive the WebSocketApp object, not WebSocket.
WebSocketApp has no send_binary() method — must use:
  ws.send(data, ws_module.ABNF.OPCODE_BINARY)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
junvandCopilot e9dea75423 fix(jbot): add type=module to script tag + add JBOT to nav menu
- jbot/index.html: <script type="module"> required for Vite ES module output
  (jbot.js uses import statements for the shared client chunk)
- base.html: add JBOT menu item with robot icon after Invest in dropdown

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
junvandCopilot a47ea316c7 feat(jbot): UI-configurable API keys + fix Dockerfile
- Add JbotApiConfig Django model (DB singleton) for storing
  Volcengine/OpenRouter credentials set via Settings UI
- New endpoint GET/POST /api/jbot/api-config/ — tokens masked as ***
  on read; only non-placeholder values are updated on write
- views.py: _get_cfg() helper reads DB first, env vars as fallback
- Settings.jsx: new 🔑 API 配置 section with show/hide token fields
  for VOLC App ID, Access Token, OpenRouter API Key, LLM Model, ASR Resource
- api.js: apiGetApiConfig() / apiSaveApiConfig() client helpers
- Dockerfile: COPY jbot/ in both builder + production stages (was missing)
- entrypoint.sh: runs migrate --noinput before gunicorn (auto-creates table)
- k8s/manifest.yaml: remove jbot-credentials secretKeyRef (no Secret needed);
  keep LLM_MODEL/VOLC_TTS_VOICE/VOLC_ASR_RESOURCE as optional env defaults

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
junvandCopilot a87b4643fd feat: port JBOT AI robot face into links as Django app
- Add jbot Django app (jbot/__init__.py, apps.py, urls.py, api_urls.py)
- Python backend (jbot/views.py): TTS 2.0, ASR 1.0 BigASR, LLM/memory via OpenRouter
- React SPA frontend at /jbot/ (static_src/jbot/): RobotFace, ChatPanel, expressions,
  voices, push-to-talk, history, memory, settings pages
- Vite entry jbot: static_src/jbot/main.jsx → dist/jbot.js + dist/jbot.css
- react-router-dom added; BrowserRouter basename=/jbot for SPA routing
- core/settings.py: added jbot to INSTALLED_APPS
- core/urls.py: /jbot/ + /api/jbot/ URL includes
- pyproject.toml: websocket-client>=1.9.0 for BigASR binary WS protocol
- Dockerfile: ffmpeg added to production apt-get for WebM→PCM audio conversion
- k8s/manifest.yaml: VOLC_APP_ID, VOLC_ACCESS_TOKEN, OPENROUTER_API_KEY env vars
  via jbot-credentials Secret; LLM_MODEL, VOLC_TTS_VOICE, VOLC_ASR_RESOURCE defaults

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-17 14:13:37 +10:00
github-actions[bot] 9148966e5c chore: update manifest image to 1.0.328 [skip ci] 2026-05-15 23:16:10 +00:00
junv a369bc7975 Update UI 2026-05-16 09:12:18 +10:00
junv ec9cbf115a Update redis ur;l 2026-05-16 08:49:35 +10:00
github-actions[bot] 2111397a31 chore: update manifest image to 1.0.326 [skip ci] 2026-05-11 13:01:44 +00:00
junv 839aadcf21 Update ban ip form 2026-05-11 22:57:25 +10:00
github-actions[bot] 81c0e807b9 chore: update manifest image to 1.0.325 [skip ci] 2026-05-11 11:58:37 +00:00
junv f587ab3053 UI tweaks 2026-05-11 21:53:43 +10:00
github-actions[bot] ea1417a04f chore: update manifest image to 1.0.324 [skip ci] 2026-05-11 11:32:41 +00:00
junv 1b04d500d1 Add price check 2026-05-11 21:28:59 +10:00
github-actions[bot] 136df1ce51 chore: update manifest image to 1.0.323 [skip ci] 2026-05-11 10:30:13 +00:00
junv 81c56207d4 update 2026-05-11 20:25:25 +10:00
junv cb81fa8601 update 2026-05-03 14:53:39 +10:00
github-actions[bot] 9b6708d442 chore: update manifest image to 1.0.321 [skip ci] 2026-05-02 10:58:42 +00:00
junv b52b821baf test change rate 2026-05-02 20:55:02 +10:00
github-actions[bot] 29f35c5c87 chore: update manifest image to 1.0.320 [skip ci] 2026-05-02 10:40:54 +00:00
junv 68dd32d2cd update performance chart logic! 2026-05-02 20:36:32 +10:00
github-actions[bot] f60c6bff67 chore: update manifest image to 1.0.319 [skip ci] 2026-04-28 04:21:44 +00:00
junvandGitHub e5ea1e9bf4 Merge pull request #85 from wahyd4/feature/invest-portfolio
fix: remove duplicate serializer classes causing 500 on Transaction API
2026-04-28 14:17:12 +10:00
OpenClaw Sub-agentandCopilot 5125e69db5 fix: remove duplicate serializer classes causing 500 on Transaction API
The serializers.py file had two issues:
1. A second definition of TransactionSerializer that included a
   non-existent 'price_per_share' field, overriding the correct one
   and causing 500 errors on GET/POST /api/invest/transactions/.
2. Duplicate AIHoldingInputSerializer and AIUpdateSerializer blocks
   that were redundant (same content as the first definitions).

Removed all duplicate class definitions, leaving only the correct
single definitions that match the Transaction model fields.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-04-28 14:15:37 +10:00
github-actions[bot] 59794d9ddb chore: update manifest image to 1.0.317 [skip ci] 2026-04-25 02:03:08 +00:00
junv e82a9c285e Update invest UI 2026-04-25 11:58:42 +10:00
junv 748a39975f Fix snapshot! 2026-04-25 11:58:42 +10:00
github-actions[bot] 0c4918db82 chore: update manifest image to 1.0.315 [skip ci] 2026-04-25 01:04:11 +00:00
junv 971fa992dc fix: pull --rebase before manifest push to avoid rejection 2026-04-25 11:00:34 +10:00
junv 9646cd7c7a fix: derive portfolio header change from sum of per-stock changes for consistency 2026-04-25 10:58:24 +10:00
github-actions[bot] b4a02654d0 chore: update manifest image to 1.0.313 [skip ci] 2026-04-25 00:50:21 +00:00
junv f3e9e13297 fix: compare live portfolio value against last week snapshot (not this week) 2026-04-25 10:46:55 +10:00
junv 18c5a554d2 feat: show dollar + % week change per stock in portfolio table 2026-04-25 10:45:30 +10:00
junv 3acaa328cb feat: add per-stock weekly price change column to portfolio table 2026-04-25 10:42:21 +10:00
junv d4183f30e6 fix: show live values and correct change% on invest dashboard cards 2026-04-25 10:40:46 +10:00
github-actions[bot] eb02eca719 chore: update manifest image to 1.0.309 [skip ci] 2026-04-18 13:45:58 +00:00
junvandGitHub c0093ac6ab Merge pull request #83 from wahyd4/feature/invest-portfolio
fix: API bugs in invest portfolio
2026-04-18 23:42:21 +10:00
github-actions[bot] 328ec3173f chore: update manifest image to 1.0.308 [skip ci] 2026-04-18 13:35:37 +00:00
junv e9f7c90420 add transaction history section to invest dashboard 2026-04-18 23:29:56 +10:00
OpenClaw Sub-agent aee64a6df8 fix: remove duplicate PortfolioViewSet and add missing add_transaction helper 2026-04-18 23:24:38 +10:00
github-actions[bot] 52becdeaab chore: update manifest image to 1.0.306 [skip ci] 2026-04-18 13:07:28 +00:00
junv 8209ac34c7 fix weekly overview: use asof snapshot lookup and 5-day gap for last_week 2026-04-18 23:03:33 +10:00
github-actions[bot] e7d24eb781 chore: update manifest image to 1.0.303 [skip ci] 2026-04-18 13:02:49 +00:00
junv 56bb5df57c cache benchmark prices in DB, refresh weekly 2026-04-18 22:58:25 +10:00
junv 221cdcdbee add yfinance dependency 2026-04-18 22:56:16 +10:00
github-actions[bot] f96a6e0a4a chore: update manifest image to 1.0.302 [skip ci] 2026-04-18 12:47:27 +00:00
junv 3c2d97b31d update ui 2026-04-18 22:43:58 +10:00
junv b345534277 update dockerfile 2026-04-18 22:43:58 +10:00
junv 028b2eda76 Update ui 2026-04-18 22:43:58 +10:00