opencami 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/README.md +48 -31
  2. package/dist/client/assets/{CSPContext-Bq8j4nl9.js → CSPContext-CCZJblsW.js} +1 -1
  3. package/dist/client/assets/{DirectionContext-BdX86BHP.js → DirectionContext-CAS2SgNN.js} +1 -1
  4. package/dist/client/assets/{_sessionKey-DsjnpErt.js → _sessionKey-f5UgmhlK.js} +4 -4
  5. package/dist/client/assets/agents-DBx41wBT.js +2 -0
  6. package/dist/client/assets/{agents-screen-DwIY8hze.js → agents-screen-CjqM2uOb.js} +1 -1
  7. package/dist/client/assets/bots-BqD0EQcs.js +2 -0
  8. package/dist/client/assets/{bots-screen-c78I920d.js → bots-screen-ivWEgfTv.js} +1 -1
  9. package/dist/client/assets/{button-Dg7VFQQn.js → button-DzGUU5Tc.js} +1 -1
  10. package/dist/client/assets/{composite-DBl8R3ae.js → composite-afaLtloO.js} +1 -1
  11. package/dist/client/assets/{connect-NYvOqiBJ.js → connect-9Vns9nqk.js} +1 -1
  12. package/dist/client/assets/{file-explorer-screen-BSMbs0vi.js → file-explorer-screen-Di0232pk.js} +1 -1
  13. package/dist/client/assets/files-BlMyTMb7.js +2 -0
  14. package/dist/client/assets/{index-CMATW8VA.js → index-BvN0Cj0s.js} +1 -1
  15. package/dist/client/assets/{index-rOIRO-8E.js → index-CRgPm0pb.js} +1 -1
  16. package/dist/client/assets/{keyboard-shortcuts-dialog-BTGWdJMl.js → keyboard-shortcuts-dialog-C5kjcplH.js} +1 -1
  17. package/dist/client/assets/{main-B_dlfHME.js → main-ZPHfbCuz.js} +3 -3
  18. package/dist/client/assets/{markdown-BVzT7z4x.js → markdown-1-xJ1B1H.js} +1 -1
  19. package/dist/client/assets/memory-rR6pG57i.js +2 -0
  20. package/dist/client/assets/{memory-screen-C-Z9o31m.js → memory-screen-BV4YRKim.js} +1 -1
  21. package/dist/client/assets/{menu-DHNgWk_8.js → menu-9GT8MQlt.js} +1 -1
  22. package/dist/client/assets/{opencami-logo-BQQETnJG.js → opencami-logo-CxC-KcS9.js} +1 -1
  23. package/dist/client/assets/{owner-CpRnf1fI.js → owner-Bm20thei.js} +1 -1
  24. package/dist/client/assets/{popupStateMapping-BRPDXnjv.js → popupStateMapping-C797EAip.js} +1 -1
  25. package/dist/client/assets/{proxy-BcUh9kMA.js → proxy-aJlrsYWj.js} +1 -1
  26. package/dist/client/assets/{react-irH8OzhB.js → react-DuiuJSA1.js} +1 -1
  27. package/dist/client/assets/{search-dialog-B96zx_ng.js → search-dialog-DD_ESAph.js} +1 -1
  28. package/dist/client/assets/{session-export-dialog-DPuHnhgv.js → session-export-dialog-5X5WKL4z.js} +1 -1
  29. package/dist/client/assets/{settings-dialog-DZcRCaPj.js → settings-dialog-Bd0RXSk3.js} +1 -1
  30. package/dist/client/assets/skills-DAKbQw5l.js +2 -0
  31. package/dist/client/assets/{skills-panel-WDUfIwnI.js → skills-panel-oNmWCyiv.js} +1 -1
  32. package/dist/client/assets/styles-Ecf_rLDJ.css +1 -0
  33. package/dist/client/assets/{switch-DPocNFRG.js → switch-BJY4FNiL.js} +1 -1
  34. package/dist/client/assets/{tabs-B0cro1hL.js → tabs-DBIBgGyG.js} +1 -1
  35. package/dist/client/assets/{tooltip-Dg9fy-vT.js → tooltip-BoKzJ7ag.js} +1 -1
  36. package/dist/client/assets/{use-file-explorer-state-DzT0bksg.js → use-file-explorer-state-EK2HTABk.js} +1 -1
  37. package/dist/client/assets/{useButton-Cbl_9oFG.js → useButton-Bh6gEhdL.js} +1 -1
  38. package/dist/client/assets/{useCompositeItem-BDAzTxVe.js → useCompositeItem-BR34_3gK.js} +1 -1
  39. package/dist/client/assets/{useControlled-Dscz_s4f.js → useControlled-byIifl1i.js} +1 -1
  40. package/dist/client/assets/{useMutation-B1FlDsNN.js → useMutation-D5JCmjGc.js} +1 -1
  41. package/dist/client/assets/{visuallyHidden-ONmQ-0U2.js → visuallyHidden-ChUPUs-q.js} +1 -1
  42. package/dist/server/assets/{_sessionKey-B0ZlLAjH.js → _sessionKey-BCdHKOq7.js} +3 -3
  43. package/dist/server/assets/{_tanstack-start-manifest_v-D5UVTs1o.js → _tanstack-start-manifest_v-XVyva8_b.js} +1 -1
  44. package/dist/server/assets/{index-CiUjUD0t.js → index-r4KOEzK3.js} +1 -1
  45. package/dist/server/assets/{router-Uuagl6O7.js → router-CkcOXH0V.js} +5 -5
  46. package/dist/server/assets/{search-dialog-DZTS5SEi.js → search-dialog-CuuZvlyq.js} +2 -2
  47. package/dist/server/assets/{settings-dialog-CSYDj2qm.js → settings-dialog-S2HICL7l.js} +2 -2
  48. package/dist/server/server.js +2 -2
  49. package/package.json +1 -1
  50. package/dist/client/assets/agents-DwxKcpP6.js +0 -2
  51. package/dist/client/assets/bots-CRlm-3-d.js +0 -2
  52. package/dist/client/assets/files-BJbMx0_w.js +0 -2
  53. package/dist/client/assets/memory-S3Yws6a5.js +0 -2
  54. package/dist/client/assets/skills-YZe3I63y.js +0 -2
  55. package/dist/client/assets/styles-Bwo-K6Y4.css +0 -1
package/README.md CHANGED
@@ -4,11 +4,6 @@
4
4
 
5
5
  A beautiful web client for [OpenClaw](https://github.com/openclaw/openclaw).
6
6
 
7
- ```bash
8
- npm install -g opencami
9
- opencami
10
- ```
11
-
12
7
  [![npm](https://img.shields.io/npm/v/opencami)](https://www.npmjs.com/package/opencami)
13
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
14
9
 
@@ -16,14 +11,18 @@ opencami
16
11
 
17
12
  ## Quick Start
18
13
 
19
- Install globally and run:
14
+ ```bash
15
+ curl -fsSL https://opencami.xyz/install.sh | bash
16
+ ```
17
+
18
+ Or via npm:
20
19
 
21
20
  ```bash
22
21
  npm install -g opencami
23
22
  opencami
24
23
  ```
25
24
 
26
- That's it. Opens your browser to the chat interface.
25
+ Opens your browser to the chat interface.
27
26
 
28
27
  ### Options
29
28
 
@@ -43,30 +42,48 @@ docker run -p 3000:3000 opencami
43
42
 
44
43
  ## Features
45
44
 
46
- **Real-time streaming** persistent WebSocket + SSE, token-by-token\
47
- 🔍 **Conversation search** — current session (⌘F) and global (⌘⇧F)\
48
- 🔊 **Voice playback (TTS)** — ElevenLabs OpenAI Edge TTS fallback chain\
49
- 🎤 **Voice input (STT)** — ElevenLabs Scribe → OpenAI Whisper Browser Web Speech API\
50
- 🔧 **TTS/STT provider selection** — choose provider and voice in Settings\
51
- 🔧 **Workspace Settings** — Unified toggles for Files, Memory, Agents, Skills & Cron Jobs\
52
- 📂 **File explorer** — 30+ file types, built-in editor, path jailing\
53
- 🎭 **Persona picker** — 20 personas, integrated with the personas skill\
54
- 🤖 **Agent manager** — sidebar panel for managing agents\
55
- 🎨 **Model selector** — switch models on the fly\
56
- 🏷️ **Smart titles** — LLM-generated session titles\
57
- 🧠 **Thinking level toggle** — Select reasoning depth (off/low/medium/high) per message\
58
- 🔌 **Multi-provider LLM** — Smart features via OpenAI, OpenRouter, Ollama, or custom provider\
59
- 💡 **Smart follow-ups** — contextual suggestions after each response\
60
- 🖼️ **Image attachments** — with compression for the 512KB WS limit\
61
- 🔎 **Search sources badge** — expandable badge with favicons for search results\
62
- 📁 **Session folders** — grouped by kind (chats, subagents, cron, other)\
63
- 📌 **Pin sessions** — pinned always on top\
64
- 📥 **Export** — Markdown, JSON, or plain text\
65
- 🔤 **Text size** — S / M / L / XL\
66
- 🦎 **Chameleon theme** — adaptive color scheme\
67
- 📱 **PWA** — installable, offline shell, auto-update\
68
- ⌨️ **Keyboard shortcuts** — full keyboard navigation\
69
- 💬 **Slash commands** — inline help and actions
45
+ ### 💬 Chat & Communication
46
+ - **Real-time streaming** — persistent WebSocket + SSE, token-by-token
47
+ - 🖼️ **Image attachments** — drag & drop with compression
48
+ - 🔊 **Voice playback (TTS)** — ElevenLabs → OpenAI → Edge TTS fallback
49
+ - 🎤 **Voice input (STT)** — ElevenLabs Scribe OpenAI Whisper → Browser
50
+ - 🔔 **Browser notifications** — background tab alerts when assistant replies
51
+
52
+ ### 🧠 Smart Features
53
+ - 🏷️ **Smart titles** — LLM-generated session titles
54
+ - 💡 **Smart follow-ups** — contextual suggestions after each response
55
+ - 🧠 **Thinking level toggle** — reasoning depth (off/low/medium/high) per message
56
+ - 🔎 **Search sources badge** — see which search engines were used
57
+ - 📊 **Context window meter** — visual token usage indicator
58
+
59
+ ### 🔧 Workspace
60
+ - 📂 **File explorer** — browse & edit 30+ file types with built-in editor
61
+ - 🧠 **Memory viewer** — browse and edit MEMORY.md and daily memory files
62
+ - 🤖 **Agent manager** — create, edit, delete agents from the sidebar
63
+ - 🧩 **Skills browser** — discover and install skills from ClawHub
64
+ - **Cron jobs panel** — manage scheduled automations
65
+ - 🔧 **Workspace settings** — toggle each tool on/off in Settings
66
+
67
+ ### 🎨 Customization
68
+ - 🎨 **Model selector** — switch AI models per message
69
+ - 🎭 **Persona picker** — 20 AI personalities
70
+ - 🦎 **Chameleon theme** — light/dark/system with accent colors
71
+ - 🔤 **Text size** — S / M / L / XL
72
+ - 🔌 **Multi-provider LLM** — OpenAI, OpenRouter, Ollama, or custom
73
+
74
+ ### 📁 Organization
75
+ - 📁 **Session folders** — grouped by kind (chats, subagents, cron, other)
76
+ - 📌 **Pin sessions** — pinned always on top
77
+ - 🗑️ **Bulk delete** — select multiple sessions, delete at once
78
+ - 🛡️ **Protected sessions** — prevent accidental deletion
79
+ - 📥 **Export** — Markdown, JSON, or plain text
80
+
81
+ ### 📱 Platform
82
+ - 📱 **PWA** — installable, offline shell, auto-update
83
+ - 🖥️ **Tauri desktop app** (Beta) — native wrapper for macOS/Windows/Linux
84
+ - ⌨️ **Keyboard shortcuts** — full power-user navigation
85
+ - 💬 **Slash commands** — inline help and actions
86
+ - 🔍 **Conversation search** — current (⌘F) and global (⌘⇧F)
70
87
 
71
88
  ## Development
72
89
 
@@ -1 +1 @@
1
- import{r as t}from"./main-B_dlfHME.js";const e=t.createContext(void 0),o={disableStyleElements:!1};function s(){return t.useContext(e)??o}export{s as u};
1
+ import{r as t}from"./main-ZPHfbCuz.js";const e=t.createContext(void 0),o={disableStyleElements:!1};function s(){return t.useContext(e)??o}export{s as u};
@@ -1 +1 @@
1
- import{r as l}from"./main-B_dlfHME.js";const E=["top","right","bottom","left"],p=Math.min,h=Math.max,L=Math.round,k=Math.floor,q=t=>({x:t,y:t}),x={left:"right",right:"left",bottom:"top",top:"bottom"},d={start:"end",end:"start"};function R(t,e,n){return h(t,p(e,n))}function T(t,e){return typeof t=="function"?t(e):t}function m(t){return t.split("-")[0]}function g(t){return t.split("-")[1]}function b(t){return t==="x"?"y":"x"}function A(t){return t==="y"?"height":"width"}const P=new Set(["top","bottom"]);function y(t){return P.has(m(t))?"y":"x"}function M(t){return b(y(t))}function v(t,e,n){n===void 0&&(n=!1);const s=g(t),i=M(t),o=A(i);let r=i==="x"?s===(n?"end":"start")?"right":"left":s==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(r=a(r)),[r,a(r)]}function z(t){const e=a(t);return[c(t),e,c(e)]}function c(t){return t.replace(/start|end/g,e=>d[e])}const u=["left","right"],f=["right","left"],O=["top","bottom"],S=["bottom","top"];function C(t,e,n){switch(t){case"top":case"bottom":return n?e?f:u:e?u:f;case"left":case"right":return e?O:S;default:return[]}}function B(t,e,n,s){const i=g(t);let o=C(m(t),n==="start",s);return i&&(o=o.map(r=>r+"-"+i),e&&(o=o.concat(o.map(c)))),o}function a(t){return t.replace(/left|right|bottom|top/g,e=>x[e])}function w(t){return{top:0,right:0,bottom:0,left:0,...t}}function F(t){return typeof t!="number"?w(t):{top:t,right:t,bottom:t,left:t}}function G(t){const{x:e,y:n,width:s,height:i}=t;return{width:s,height:i,top:n,left:e,right:e+s,bottom:n+i,x:e,y:n}}const j=l.createContext(void 0);function H(){return l.useContext(j)?.direction??"ltr"}export{y as a,a as b,z as c,B as d,T as e,k as f,m as g,v as h,g as i,h as j,M as k,F as l,p as m,G as n,A as o,R as p,b as q,L as r,E as s,q as t,H as u};
1
+ import{r as l}from"./main-ZPHfbCuz.js";const E=["top","right","bottom","left"],p=Math.min,h=Math.max,L=Math.round,k=Math.floor,q=t=>({x:t,y:t}),x={left:"right",right:"left",bottom:"top",top:"bottom"},d={start:"end",end:"start"};function R(t,e,n){return h(t,p(e,n))}function T(t,e){return typeof t=="function"?t(e):t}function m(t){return t.split("-")[0]}function g(t){return t.split("-")[1]}function b(t){return t==="x"?"y":"x"}function A(t){return t==="y"?"height":"width"}const P=new Set(["top","bottom"]);function y(t){return P.has(m(t))?"y":"x"}function M(t){return b(y(t))}function v(t,e,n){n===void 0&&(n=!1);const s=g(t),i=M(t),o=A(i);let r=i==="x"?s===(n?"end":"start")?"right":"left":s==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(r=a(r)),[r,a(r)]}function z(t){const e=a(t);return[c(t),e,c(e)]}function c(t){return t.replace(/start|end/g,e=>d[e])}const u=["left","right"],f=["right","left"],O=["top","bottom"],S=["bottom","top"];function C(t,e,n){switch(t){case"top":case"bottom":return n?e?f:u:e?u:f;case"left":case"right":return e?O:S;default:return[]}}function B(t,e,n,s){const i=g(t);let o=C(m(t),n==="start",s);return i&&(o=o.map(r=>r+"-"+i),e&&(o=o.concat(o.map(c)))),o}function a(t){return t.replace(/left|right|bottom|top/g,e=>x[e])}function w(t){return{top:0,right:0,bottom:0,left:0,...t}}function F(t){return typeof t!="number"?w(t):{top:t,right:t,bottom:t,left:t}}function G(t){const{x:e,y:n,width:s,height:i}=t;return{width:s,height:i,top:n,left:e,right:e+s,bottom:n+i,x:e,y:n}}const j=l.createContext(void 0);function H(){return l.useContext(j)?.direction??"ltr"}export{y as a,a as b,z as c,B as d,T as e,k as f,m as g,v as h,g as i,h as j,M as k,F as l,p as m,G as n,A as o,R as p,b as q,L as r,E as s,q as t,H as u};