@zhin.js/adapter-sandbox 5.0.3 → 5.0.4

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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @zhin.js/adapter-process
2
2
 
3
+ ## 5.0.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 5cc9c03: fix: ai 优化
8
+ - b9b3881: fix: 增加游戏引擎以及部分游戏
9
+ - Updated dependencies [5b08052]
10
+ - Updated dependencies [5cc9c03]
11
+ - Updated dependencies [36d6db2]
12
+ - Updated dependencies [b9b3881]
13
+ - Updated dependencies [7700903]
14
+ - @zhin.js/core@1.3.3
15
+ - @zhin.js/client@2.0.4
16
+ - @zhin.js/contract@1.0.2
17
+ - @zhin.js/host-api@2.0.4
18
+ - @zhin.js/host-router@2.0.2
19
+
3
20
  ## 5.0.3
4
21
 
5
22
  ### Patch Changes
@@ -1,7 +1,7 @@
1
1
  import { useRef, useEffect, forwardRef, useImperativeHandle } from 'react'
2
2
 
3
3
  export interface MessageSegment {
4
- type: 'text' | 'at' | 'face' | 'image' | 'video' | 'audio' | 'record' | 'file'
4
+ type: 'text' | 'mention' | 'at' | 'face' | 'image' | 'video' | 'audio' | 'record' | 'file'
5
5
  data: Record<string, any>
6
6
  }
7
7
 
@@ -69,7 +69,10 @@ const RichTextEditor = forwardRef<RichTextEditorRef, RichTextEditorProps>(
69
69
  const name = el.dataset.name
70
70
  const id = el.dataset.id
71
71
  text += `[@${name}]`
72
- segments.push({ type: 'at', data: { name, qq: id } })
72
+ segments.push({
73
+ type: 'mention',
74
+ data: id ? { target: id, name } : { target: name, name },
75
+ })
73
76
  } else if (el.tagName === 'BR') {
74
77
  text += '\n'
75
78
  }
@@ -56,8 +56,17 @@ export default function Sandbox() {
56
56
  useEffect(() => { fetchFaceList() }, [])
57
57
 
58
58
  const handleInboundPayload = (data: {
59
- type: string; id: string; content?: unknown; endpoint?: string; timestamp: number
59
+ type: string; id: string; content?: unknown; endpoint?: string; timestamp: number;
60
+ messageId?: string; bot?: string;
60
61
  }) => {
62
+ if (data.type === 'edit' && data.messageId) {
63
+ const content: MessageSegment[] = Array.isArray(data.content)
64
+ ? data.content as MessageSegment[]
65
+ : parseTextToSegments(String(data.content ?? ''))
66
+ setMessages((prev) => prev.map((m) => (m.id === data.messageId ? { ...m, content } : m)))
67
+ return
68
+ }
69
+
61
70
  const content: MessageSegment[] = typeof data.content === 'string'
62
71
  ? parseTextToSegments(data.content)
63
72
  : Array.isArray(data.content) ? data.content as MessageSegment[] : parseTextToSegments(String(data.content ?? ''))
@@ -77,12 +86,18 @@ export default function Sandbox() {
77
86
  })
78
87
 
79
88
  setMessages((prev) => [...prev, {
80
- id: `bot_${data.timestamp}`, type: 'received', channelType,
89
+ id: data.messageId ?? `bot_${data.timestamp}`, type: 'received', channelType,
81
90
  channelId: data.id, channelName, senderId: 'endpoint',
82
91
  senderName: data.bot || endpointName, content, timestamp: data.timestamp,
83
92
  }])
84
93
  }
85
94
 
95
+ const sendInteractiveAction = (payload: string) => {
96
+ const segments: MessageSegment[] = [{ type: 'action', data: { id: payload, payload } }]
97
+ const payloadJson = JSON.stringify({ type: activeChannel.type, id: activeChannel.id, content: segments, timestamp: Date.now() })
98
+ wsRef.current?.send(payloadJson)
99
+ }
100
+
86
101
  useEffect(() => {
87
102
  const wsUrl = buildSandboxWebSocketUrl()
88
103
  wsRef.current = new WebSocket(wsUrl)
@@ -113,7 +128,7 @@ export default function Sandbox() {
113
128
  const t = text.substring(lastIndex, match.index)
114
129
  if (t) segments.push({ type: 'text', data: { text: t } })
115
130
  }
116
- if (match[1]) segments.push({ type: 'at', data: { qq: match[1], name: match[1] } })
131
+ if (match[1]) segments.push({ type: 'mention', data: { target: match[1], name: match[1] } })
117
132
  else if (match[2]) segments.push({ type: 'face', data: { id: parseInt(match[2], 10) } })
118
133
  else if (match[3]) segments.push({ type: 'image', data: { url: match[3] } })
119
134
  else if (match[4]) segments.push({ type: 'video', data: { url: match[4] } })
@@ -131,6 +146,7 @@ export default function Sandbox() {
131
146
  if (segments.length === 0) return false
132
147
  return segments.some((s) => {
133
148
  if (s.type === 'text') return Boolean(String(s.data?.text ?? '').trim())
149
+ if (s.type === 'keyboard') return true
134
150
  return true
135
151
  })
136
152
  }
@@ -145,10 +161,15 @@ export default function Sandbox() {
145
161
  switch (segment.type) {
146
162
  case 'text':
147
163
  return <span key={index}>{String(d.text ?? '').split('\n').map((part: string, i: number) => <React.Fragment key={i}>{part}{i < String(d.text ?? '').split('\n').length - 1 && <br />}</React.Fragment>)}</span>
164
+ case 'mention':
148
165
  case 'at':
149
- return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5">@{String(d.name ?? d.qq ?? '')}</span>
166
+ return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5">@{String(d.name ?? d.target ?? d.qq ?? '')}</span>
150
167
  case 'face':
151
- return <img key={index} src={`https://face.viki.moe/apng/${d.id}.png`} alt="" className="w-6 h-6 inline-block align-middle mx-0.5" />
168
+ return <img key={index} src={`https://face.viki.moe/apng/${d.id}.png`} alt={String(d.name ?? '')} className="w-6 h-6 inline-block align-middle mx-0.5" title={String(d.name ?? d.id ?? '')} />
169
+ case 'dice':
170
+ return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5">🎲 {d.result != null ? `点数 ${String(d.result)}` : '骰子'}</span>
171
+ case 'rps':
172
+ return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5">✊ {d.result != null ? `结果 ${String(d.result)}` : '猜拳'}</span>
152
173
  case 'image': {
153
174
  const raw = pickMediaRawUrl(d)
154
175
  const src = resolveMediaSrc(raw, 'image')
@@ -189,8 +210,64 @@ export default function Sandbox() {
189
210
  />
190
211
  )
191
212
  }
192
- case 'file':
193
- return <span key={index} className="inline-flex items-center px-1.5 py-0.5 rounded border text-xs mx-0.5">📎 {String(d.name || '文件')}</span>
213
+ case 'reply':
214
+ return (
215
+ <div key={index} className="mb-1 rounded-md border border-dashed px-2 py-1 text-xs opacity-90">
216
+ ↩ 引用消息 #{String(d.message_id ?? d.id ?? '')}
217
+ </div>
218
+ )
219
+ case 'forward': {
220
+ const messages = d.messages as Array<Array<{ type?: string; data?: Record<string, unknown> }>> | undefined
221
+ const title = String(d.title ?? '聊天记录')
222
+ return (
223
+ <div key={index} className="my-1 rounded-md border bg-background/40 px-2 py-2 text-xs space-y-1">
224
+ <div className="font-medium">📨 {title}</div>
225
+ {Array.isArray(messages) && messages.length > 0 ? (
226
+ <div className="space-y-1 pl-2 border-l-2 border-muted">
227
+ {messages.slice(0, 3).map((batch, bi) => (
228
+ <div key={bi} className="opacity-90">
229
+ {batch.map((s, si) => (
230
+ <span key={si}>
231
+ {s.type === 'text' ? String(s.data?.text ?? '') : `[${s.type ?? 'seg'}]`}
232
+ </span>
233
+ ))}
234
+ </div>
235
+ ))}
236
+ {messages.length > 3 && <div className="opacity-60">…共 {messages.length} 条</div>}
237
+ </div>
238
+ ) : (
239
+ <div className="opacity-70">[合并转发]</div>
240
+ )}
241
+ </div>
242
+ )
243
+ }
244
+ case 'keyboard': {
245
+ const rows = (d.rows as Array<Array<{ label: string; payload: string; disabled?: boolean }>>) ?? []
246
+ return (
247
+ <div key={index} className="inline-grid gap-1 my-1">
248
+ {rows.map((row, ri) => (
249
+ <div key={ri} className="flex gap-1">
250
+ {row.map((btn) => (
251
+ <button
252
+ key={btn.payload}
253
+ type="button"
254
+ disabled={btn.disabled || isSent}
255
+ onClick={() => sendInteractiveAction(btn.payload)}
256
+ className={cn(
257
+ 'min-w-9 h-9 rounded-md border text-sm font-medium transition-colors',
258
+ btn.disabled
259
+ ? 'opacity-50 cursor-not-allowed'
260
+ : 'hover:bg-accent active:scale-95',
261
+ )}
262
+ >
263
+ {btn.label}
264
+ </button>
265
+ ))}
266
+ </div>
267
+ ))}
268
+ </div>
269
+ )
270
+ }
194
271
  default:
195
272
  return <span key={index} className="text-xs opacity-70">[{segment.type}]</span>
196
273
  }
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import ze,{useState as g,useEffect as Ie,useRef as we}from"react";import{cn as A,resolveMediaSrc as Pe,pickMediaRawUrl as ye}from"@zhin.js/client";function ta(){let i=localStorage.getItem("zhin_api_base")?.trim();return(i?i.replace(/\/$/,""):null)??window.location.origin}function oa(){return localStorage.getItem("zhin_api_token")?.trim()||localStorage.getItem("HTTP_TOKEN")?.trim()||localStorage.getItem("zhin_http_token")?.trim()||""}function Te(i){let p=(i??ta()).replace(/\/$/,""),I=new URL("/sandbox",`${p}/`);I.protocol=I.protocol==="https:"?"wss:":"ws:";let L=oa();return L&&I.searchParams.set("token",L),I.href}import{forwardRef as sa,createElement as fa}from"react";var Le=(...i)=>i.filter((p,I,L)=>!!p&&p.trim()!==""&&L.indexOf(p)===I).join(" ").trim();var qe=i=>i.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var Ue=i=>i.replace(/^([A-Z])|[\s-_]+(\w)/g,(p,I,L)=>L?L.toUpperCase():I.toLowerCase());var ke=i=>{let p=Ue(i);return p.charAt(0).toUpperCase()+p.slice(1)};import{forwardRef as ra,createElement as Ne}from"react";var xe={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Oe=i=>{for(let p in i)if(p.startsWith("aria-")||p==="role"||p==="title")return!0;return!1};import{createContext as da,useContext as ua,useMemo as Va,createElement as za}from"react";var la=da({});var He=()=>ua(la);var Ee=ra(({color:i,size:p,strokeWidth:I,absoluteStrokeWidth:L,className:N="",children:D,iconNode:h,...m},k)=>{let{size:B=24,strokeWidth:U=2,absoluteStrokeWidth:_=!1,color:E="currentColor",className:G=""}=He()??{},O=L??_?Number(I??U)*24/Number(p??B):I??U;return Ne("svg",{ref:k,...xe,width:p??B??xe.width,height:p??B??xe.height,stroke:i??E,strokeWidth:O,className:Le("lucide",G,N),...!D&&!Oe(m)&&{"aria-hidden":"true"},...m},[...h.map(([M,w])=>Ne(M,w)),...Array.isArray(D)?D:[D]])});var r=(i,p)=>{let I=sa(({className:L,...N},D)=>fa(Ee,{ref:D,iconNode:p,className:Le(`lucide-${qe(ke(i))}`,`lucide-${i}`,L),...N}));return I.displayName=ke(i),I};var ia=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],X=r("bell",ia);var ca=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],ee=r("bot",ca);var na=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],ae=r("check",na);var pa=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],te=r("hash",pa);var ma=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],oe=r("image",ma);var La=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],de=r("info",La);var xa=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],H=r("message-square",xa);var Ia=[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]],ue=r("music",Ia);var Ca=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],j=r("search",Ca);var ga=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],le=r("send",ga);var ha=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],re=r("smile",ha);var Sa=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],se=r("trash-2",Sa);var ka=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],K=r("user-plus",ka);var wa=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],Z=r("user",wa);var Pa=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],fe=r("users",Pa);var ya=[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]],ie=r("video",ya);var Aa=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],ce=r("wifi-off",Aa);var Ma=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],ne=r("wifi",Ma);var Ba=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],pe=r("x",Ba);import{useRef as Ge,forwardRef as Fa,useImperativeHandle as Da}from"react";import{jsx as ba}from"react/jsx-runtime";var We=Fa(({placeholder:i="\u8F93\u5165\u6D88\u606F...",onSend:p,onChange:I,onAtTrigger:L,minHeight:N="44px",maxHeight:D="200px"},h)=>{let m=Ge(null),k=Ge(null),B=()=>{if(!m.current)return{text:"",segments:[]};let d="",t=[],u=Array.from(m.current.childNodes);for(let c of u)if(c.nodeType===Node.TEXT_NODE){let l=c.textContent||"";l&&(d+=l,t.push({type:"text",data:{text:l}}))}else if(c.nodeType===Node.ELEMENT_NODE){let l=c;if(l.classList.contains("editor-face")){let n=l.dataset.id;d+=`[face:${n}]`,t.push({type:"face",data:{id:Number(n)}})}else if(l.classList.contains("editor-image")){let n=l.dataset.url;d+=`[image:${n}]`,t.push({type:"image",data:{url:n}})}else if(l.classList.contains("editor-video")){let n=l.dataset.url||"";d+=`[video:${n}]`,t.push({type:"video",data:{url:n}})}else if(l.classList.contains("editor-audio")){let n=l.dataset.url||"";d+=`[audio:${n}]`,t.push({type:"audio",data:{url:n}})}else if(l.classList.contains("editor-at")){let n=l.dataset.name,y=l.dataset.id;d+=`[@${n}]`,t.push({type:"at",data:{name:n,qq:y}})}else l.tagName==="BR"&&(d+=`
2
- `)}return{text:d,segments:t}},U=d=>{if(!m.current)return;let t=document.createElement("img");t.src=`https://face.viki.moe/apng/${d}.png`,t.alt=`[face:${d}]`,t.dataset.type="face",t.dataset.id=String(d),t.className="editor-face",M(t),R()},_=d=>{if(!m.current||!d.trim())return;let t=document.createElement("img");t.src=d.trim(),t.alt=`[image:${d.trim()}]`,t.dataset.type="image",t.dataset.url=d.trim(),t.className="editor-image",M(t),R()},E=d=>{if(!m.current||!d.trim())return;let t=d.trim(),u=document.createElement("span");u.className="editor-video",u.dataset.url=t,u.contentEditable="false",u.textContent="\u{1F4F9} \u89C6\u9891",M(u),R()},G=d=>{if(!m.current||!d.trim())return;let t=d.trim(),u=document.createElement("span");u.className="editor-audio",u.dataset.url=t,u.contentEditable="false",u.textContent="\u{1F3B5} \u97F3\u9891",M(u),R()},O=(d,t)=>{if(!m.current||!d.trim())return;let u=document.createElement("span");u.dataset.type="at",u.dataset.name=d,t&&(u.dataset.id=t),u.className="editor-at",u.contentEditable="false";let c=document.createElement("span");c.textContent="@",c.className="editor-at-symbol";let l=document.createElement("span");l.textContent=d,l.className="editor-at-name",u.appendChild(c),u.appendChild(l),M(u),R()},M=d=>{if(!m.current)return;m.current.focus();let t=window.getSelection();if(t&&t.rangeCount>0){let u=t.getRangeAt(0);if(m.current.contains(u.commonAncestorContainer))u.deleteContents(),u.insertNode(d),u.collapse(!1),t.removeAllRanges(),t.addRange(u);else{m.current.appendChild(d);let l=document.createRange();l.setStartAfter(d),l.collapse(!0),t.removeAllRanges(),t.addRange(l)}}else{m.current.appendChild(d);let u=window.getSelection();if(u){let c=document.createRange();c.setStartAfter(d),c.collapse(!0),u.removeAllRanges(),u.addRange(c)}}},w=()=>{m.current&&(m.current.innerHTML="",R())},W=()=>{m.current?.focus()},$=()=>B(),me=()=>{if(!m.current||!L)return;let d=window.getSelection();if(!d||d.rangeCount===0){L(!1,""),k.current=null;return}let t=d.getRangeAt(0);if(!m.current.contains(t.commonAncestorContainer)){L(!1,""),k.current=null;return}let u=t.startContainer;if(u.nodeType!==Node.TEXT_NODE){L(!1,""),k.current=null;return}let c=u,l=c.textContent?.substring(0,t.startOffset)||"",n=l.lastIndexOf("@");if(n!==-1){let y=l.substring(n+1);if(y.includes(" ")||y.includes(`
3
- `)){L(!1,""),k.current=null;return}k.current=c;let V=document.createRange();V.setStart(c,n),V.setEnd(c,n+1);let v=V.getBoundingClientRect(),b=m.current.getBoundingClientRect();L(!0,y,{top:v.bottom-b.top,left:v.left-b.left})}else L(!1,""),k.current=null},R=()=>{if(me(),I){let{text:d,segments:t}=B();I(d,t)}},Ce=(d,t)=>{if(!k.current)return;let u=k.current,c=u.textContent||"",l=c.lastIndexOf("@");if(l!==-1){let n=c.substring(l+1),y=l+1+n.split(/[\s\n]/)[0].length,V=c.substring(0,l),v=c.substring(y);u.textContent=V+v;let b=window.getSelection();if(b){let T=document.createRange();T.setStart(u,l),T.collapse(!0),b.removeAllRanges(),b.addRange(T)}}k.current=null,O(d,t)},Y=d=>{d.preventDefault();let t=d.clipboardData,c=Array.from(t.items).find(n=>n.type.startsWith("image/"));if(c){let n=c.getAsFile();if(n){let y=new FileReader;y.onload=()=>{typeof y.result=="string"&&_(y.result)},y.readAsDataURL(n)}return}let l=t.getData("text/plain");l&&(document.execCommand("insertText",!1,l),R())},Q=d=>{if(d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),p)){let{text:t,segments:u}=B();p(t,u)}};return Da(h,()=>({focus:W,clear:w,insertFace:U,insertImage:_,insertVideo:E,insertAudio:G,insertAt:O,replaceAtTrigger:Ce,getContent:$})),ba("div",{ref:m,contentEditable:!0,suppressContentEditableWarning:!0,onInput:R,onKeyDown:Q,onPaste:Y,"data-placeholder":i,className:"rich-text-editor",style:{width:"100%",minHeight:N,maxHeight:D,padding:"0.5rem 0.75rem",border:"1px solid var(--gray-6)",borderRadius:"6px",backgroundColor:"var(--gray-1)",fontSize:"var(--font-size-2)",outline:"none",overflowY:"auto",lineHeight:"1.5",wordWrap:"break-word",color:"var(--gray-12)"}})});We.displayName="RichTextEditor";var Ve=We;import{Fragment as Ra,jsx as a,jsxs as o}from"react/jsx-runtime";function Ae(){let[i,p]=g([]),[I,L]=g([{id:"user_1001",name:"\u6D4B\u8BD5\u7528\u6237",type:"private",unread:0},{id:"group_2001",name:"\u6D4B\u8BD5\u7FA4\u7EC4",type:"group",unread:0},{id:"channel_3001",name:"\u6D4B\u8BD5\u9891\u9053",type:"channel",unread:0}]),[N,D]=g([]),[h,m]=g(I[0]),[k,B]=g(""),[U,_]=g("ProcessEndpoint"),[E,G]=g(!1),[O,M]=g(!1),[w,W]=g(null),[$,me]=g(""),[R,Ce]=g(!1),[Y,Q]=g(null),[d,t]=g(""),[u,c]=g(""),[l,n]=g(""),[y]=g([{id:"10001",name:"\u5F20\u4E09"},{id:"10002",name:"\u674E\u56DB"},{id:"10003",name:"\u738B\u4E94"},{id:"10004",name:"\u8D75\u516D"},{id:"10005",name:"\u6D4B\u8BD5\u7528\u6237"},{id:"10086",name:"Admin"},{id:"10010",name:"Test User"}]),[V,v]=g([]),[b,T]=g(!1),[J,ge]=g("chat"),Me=we(null),z=we(null),q=we(null),Xe=async()=>{try{let e=await fetch("https://face.viki.moe/metadata.json");D(await e.json())}catch(e){console.error("[Sandbox] Failed to fetch face list:",e)}};Ie(()=>{Xe()},[]);let Ke=e=>{let s=typeof e.content=="string"?he(e.content):Array.isArray(e.content)?e.content:he(String(e.content??"")),x=e.type==="private"?`\u79C1\u804A-${e.bot||U}`:e.type==="group"?`\u7FA4\u7EC4-${e.id}`:`\u9891\u9053-${e.id}`,C=e.type;L(f=>{if(f.some(F=>F.id===e.id))return f;let S={id:e.id,name:x,type:C,unread:0};return m(S),[...f,S]}),p(f=>[...f,{id:`bot_${e.timestamp}`,type:"received",channelType:C,channelId:e.id,channelName:x,senderId:"endpoint",senderName:e.bot||U,content:s,timestamp:e.timestamp}])};Ie(()=>{let e=Te();return z.current=new WebSocket(e),z.current.onopen=()=>G(!0),z.current.onmessage=s=>{try{Ke(JSON.parse(s.data))}catch(x){console.error("[Sandbox] Failed to parse message:",x)}},z.current.onclose=()=>G(!1),()=>{z.current?.close(),z.current=null,G(!1)}},[]),Ie(()=>{Me.current?.scrollIntoView({behavior:"smooth"})},[i]),Ie(()=>{v(k.trim()?he(k):[])},[k]);let he=e=>{let s=[],x=/\[@([^\]]+)\]|\[face:(\d+)\]|\[image:([^\]]+)\]|\[video:([^\]]+)\]|\[audio:([^\]]+)\]/g,C=0,f;for(;(f=x.exec(e))!==null;){if(f.index>C){let S=e.substring(C,f.index);S&&s.push({type:"text",data:{text:S}})}f[1]?s.push({type:"at",data:{qq:f[1],name:f[1]}}):f[2]?s.push({type:"face",data:{id:parseInt(f[2],10)}}):f[3]?s.push({type:"image",data:{url:f[3]}}):f[4]?s.push({type:"video",data:{url:f[4]}}):f[5]&&s.push({type:"audio",data:{url:f[5]}}),C=x.lastIndex}if(C<e.length){let S=e.substring(C);S&&s.push({type:"text",data:{text:S}})}return s.length>0?s:[{type:"text",data:{text:e}}]},Be=e=>e.length===0?!1:e.some(s=>s.type==="text"?!!String(s.data?.text??"").trim():!0),Ze=(e,s)=>{let x=s?"ring-1 ring-primary-foreground/25":"ring-1 ring-border/60";return e.map((C,f)=>{if(typeof C=="string")return a("span",{children:C.split(`
4
- `).map((F,P)=>o(ze.Fragment,{children:[F,P<C.split(`
5
- `).length-1&&a("br",{})]},P))},f);let S=C.data;switch(C.type){case"text":return a("span",{children:String(S.text??"").split(`
6
- `).map((F,P)=>o(ze.Fragment,{children:[F,P<String(S.text??"").split(`
7
- `).length-1&&a("br",{})]},P))},f);case"at":return o("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5",children:["@",String(S.name??S.qq??"")]},f);case"face":return a("img",{src:`https://face.viki.moe/apng/${S.id}.png`,alt:"",className:"w-6 h-6 inline-block align-middle mx-0.5"},f);case"image":{let F=ye(S),P=Pe(F,"image");return P?a("a",{href:P,target:"_blank",rel:"noreferrer",className:"block my-1",children:a("img",{src:P,alt:"",className:A("max-w-[min(320px,88vw)] rounded-lg block",x,"ring-offset-0"),onError:aa=>{aa.target.style.display="none"}})},f):a("span",{className:"text-xs opacity-70",children:"[\u56FE\u7247]"},f)}case"video":{let F=ye(S),P=Pe(F,"video");return P?a("video",{src:P,controls:!0,playsInline:!0,preload:"metadata",className:A("max-w-[min(360px,92vw)] max-h-72 rounded-lg my-1 bg-black/10",x)},f):a("span",{className:"text-xs opacity-70",children:"[\u89C6\u9891\u65E0\u5730\u5740]"},f)}case"audio":case"record":{let F=ye(S),P=Pe(F,"audio");return P?a("audio",{src:P,controls:!0,preload:"metadata",className:A("w-full max-w-sm my-2 h-10",s&&"opacity-95")},f):a("span",{className:"text-xs opacity-70",children:"[\u97F3\u9891\u65E0\u5730\u5740]"},f)}case"file":return o("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-xs mx-0.5",children:["\u{1F4CE} ",String(S.name||"\u6587\u4EF6")]},f);default:return o("span",{className:"text-xs opacity-70",children:["[",C.type,"]"]},f)}})},Fe=(e,s)=>{if(!Be(s))return;let x={id:`msg_${Date.now()}`,type:"sent",channelType:h.type,channelId:h.id,channelName:h.name,senderId:"test_user",senderName:"\u6D4B\u8BD5\u7528\u6237",content:s,timestamp:Date.now()};p(f=>[...f,x]),B(""),v([]),q.current?.clear();let C=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});z.current?.send(C)},_e=()=>{confirm("\u786E\u5B9A\u6E05\u7A7A\u6240\u6709\u6D88\u606F\u8BB0\u5F55\uFF1F")&&p([])},Qe=e=>{ge("chat"),m(e),L(s=>s.map(x=>x.id===e.id?{...x,unread:0}:x)),window.innerWidth<768&&T(!1)},Je=()=>{let e=["private","group","channel"],s=e[Math.floor(Math.random()*e.length)],x=prompt("\u8BF7\u8F93\u5165\u9891\u9053\u540D\u79F0\uFF1A");if(x){let C={id:`${s}_${Date.now()}`,name:x,type:s,unread:0};L(f=>[...f,C]),m(C)}},De=e=>{switch(e){case"private":return a(Z,{size:16});case"group":return a(fe,{size:16});case"channel":return a(te,{size:16});default:return a(H,{size:16})}},je=e=>{q.current?.insertFace(e),M(!1)},be=()=>{let e=$.trim();!e||!w||(w==="image"?q.current?.insertImage(e):w==="video"?q.current?.insertVideo(e):q.current?.insertAudio(e),me(""),W(null))},va=()=>{l.trim()&&(q.current?.insertAt(l.trim()),n(""),Ce(!1))},$e=e=>{q.current?.replaceAtTrigger(e.name,e.id),Q(null),t("")},Ye=(e,s,x)=>{if(h.type==="private"){Q(null),t("");return}e&&x?(Q(x),t(s)):(Q(null),t(""))},Re=y.filter(e=>{if(!d.trim())return!0;let s=d.toLowerCase();return e.name.toLowerCase().includes(s)||e.id.toLowerCase().includes(s)}),ea=(e,s)=>{B(e),v(s)},ve=N.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.describe.toLowerCase().includes(u.toLowerCase())),Se=i.filter(e=>e.channelId===h.id);return o("div",{className:"sandbox-container rounded-xl border border-border/70 bg-card/30 shadow-sm",children:[o("button",{className:"mobile-channel-toggle md:hidden",onClick:()=>T(!b),children:[a(H,{size:20})," \u9891\u9053\u5217\u8868"]}),o("div",{className:A("channel-sidebar rounded-lg border bg-card",b&&"show"),children:[a("div",{className:"p-3 border-b",children:o("div",{className:"flex justify-between items-center",children:[o("div",{className:"flex items-center gap-2",children:[a("div",{className:"p-1 rounded-md bg-secondary",children:a(H,{size:16,className:"text-muted-foreground"})}),a("h3",{className:"font-semibold",children:"\u9891\u9053\u5217\u8868"})]}),o("span",{className:A("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border",E?"bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800":"bg-muted text-muted-foreground"),children:[E?a(ne,{size:12}):a(ce,{size:12}),E?"\u5DF2\u8FDE\u63A5":"\u672A\u8FDE\u63A5"]})]})}),o("div",{className:"flex-1 overflow-y-auto p-2 space-y-1",children:[I.map(e=>{let s=J==="chat"&&h.id===e.id;return o("div",{className:A("menu-item",s&&"active"),onClick:()=>Qe(e),children:[a("span",{className:"shrink-0",children:De(e.type)}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium truncate",children:e.name}),a("div",{className:"text-xs text-muted-foreground",children:e.type==="private"?"\u79C1\u804A":e.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),e.unread>0&&a("span",{className:"inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-destructive text-destructive-foreground text-[10px] font-medium px-1",children:e.unread})]},e.id)}),o("div",{className:"pt-2 mt-2 border-t space-y-1",children:[o("div",{className:A("menu-item",J==="requests"&&"active"),onClick:()=>{ge("requests"),window.innerWidth<768&&T(!1)},children:[a(K,{size:16,className:"shrink-0"}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u8BF7\u6C42"}),a("div",{className:"text-xs text-muted-foreground",children:"\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49"})]})]}),o("div",{className:A("menu-item",J==="notices"&&"active"),onClick:()=>{ge("notices"),window.innerWidth<768&&T(!1)},children:[a(X,{size:16,className:"shrink-0"}),o("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u901A\u77E5"}),a("div",{className:"text-xs text-muted-foreground",children:"\u7FA4\u7BA1/\u64A4\u56DE\u7B49"})]})]})]})]}),a("div",{className:"p-2 border-t",children:a("button",{className:"w-full py-2 px-3 rounded-md border border-dashed text-sm text-muted-foreground hover:bg-accent transition-colors",onClick:Je,children:"+ \u6DFB\u52A0\u9891\u9053"})})]}),b&&a("div",{className:"channel-overlay md:hidden",onClick:()=>T(!1)}),o("div",{className:"chat-area",children:[J==="requests"&&o("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:o("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(K,{size:20})," \u8BF7\u6C42"]})}),o("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(K,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u8BF7\u6C42\u6570\u636E"}),o("span",{className:"text-sm",children:["\u5B9E\u9645\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49\u8BF7\u6C42\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),J==="notices"&&o("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:o("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(X,{size:20})," \u901A\u77E5"]})}),o("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(X,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u901A\u77E5\u6570\u636E"}),o("span",{className:"text-sm",children:["\u5B9E\u9645\u7FA4\u7BA1\u3001\u64A4\u56DE\u7B49\u901A\u77E5\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),J==="chat"&&o(Ra,{children:[a("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0",children:o("div",{className:"flex justify-between items-center flex-wrap gap-2",children:[o("div",{className:"flex items-center gap-3",children:[a("div",{className:"p-2 rounded-lg bg-secondary",children:De(h.type)}),o("div",{children:[a("h2",{className:"text-lg font-bold",children:h.name}),o("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[a("span",{children:h.id}),a("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-[10px]",children:Se.length}),a("span",{children:"\u6761\u6D88\u606F"})]})]}),a("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-secondary text-secondary-foreground",children:h.type==="private"?"\u79C1\u804A":h.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),o("div",{className:"flex items-center gap-2",children:[a("input",{value:U,onChange:e=>_(e.target.value),placeholder:"\u673A\u5668\u4EBA\u540D\u79F0",className:"h-8 w-28 rounded-md border bg-transparent px-2 text-sm"}),o("button",{className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-secondary text-secondary-foreground text-sm hover:bg-secondary/80",onClick:_e,children:[a(se,{size:14})," \u6E05\u7A7A"]})]})]})}),a("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0",children:a("div",{className:"flex-1 overflow-y-auto p-4",children:Se.length===0?o("div",{className:"flex flex-col items-center justify-center h-full gap-3",children:[a(H,{size:64,className:"text-muted-foreground/20"}),a("span",{className:"text-muted-foreground",children:"\u6682\u65E0\u6D88\u606F\uFF0C\u5F00\u59CB\u5BF9\u8BDD\u5427\uFF01"})]}):o("div",{className:"space-y-2",children:[Se.map(e=>a("div",{className:A("flex",e.type==="sent"?"justify-end":"justify-start"),children:o("div",{className:A("max-w-[70%] p-3 rounded-2xl",e.type==="sent"?"bg-primary text-primary-foreground":"bg-muted"),children:[o("div",{className:"flex items-center gap-2 mb-1",children:[e.type==="received"&&a(ee,{size:14}),e.type==="sent"&&a(Z,{size:14}),a("span",{className:"text-xs font-medium opacity-90",children:e.senderName}),a("span",{className:"text-xs opacity-70",children:new Date(e.timestamp).toLocaleTimeString()})]}),a("div",{className:"text-sm space-y-1",children:Ze(e.content,e.type==="sent")})]})},e.id)),a("div",{ref:Me})]})})}),o("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0 space-y-3",children:[o("div",{className:"flex gap-2 items-center flex-wrap",children:[a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",O?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{M(!O),W(null)},title:"\u63D2\u5165\u8868\u60C5",children:a(re,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="image"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="image"?null:"image"),M(!1)},title:"\u63D2\u5165\u56FE\u7247 URL",children:a(oe,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="video"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="video"?null:"video"),M(!1)},title:"\u63D2\u5165\u89C6\u9891 URL",children:a(ie,{size:16})}),a("button",{type:"button",className:A("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",w==="audio"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{W(e=>e==="audio"?null:"audio"),M(!1)},title:"\u63D2\u5165\u97F3\u9891 URL",children:a(ue,{size:16})}),a("div",{className:"flex-1 min-w-[1rem]"}),k&&a("button",{className:"h-8 w-8 rounded-md flex items-center justify-center hover:bg-accent transition-colors",onClick:()=>{B(""),v([])},children:a(pe,{size:16})})]}),O&&o("div",{className:"p-3 rounded-md border bg-muted/30 max-h-64 overflow-y-auto space-y-2",children:[a("input",{value:u,onChange:e=>c(e.target.value),placeholder:"\u641C\u7D22\u8868\u60C5...",className:"w-full h-8 rounded-md border bg-transparent px-2 text-sm"}),a("div",{className:"grid grid-cols-8 gap-1",children:ve.slice(0,80).map(e=>a("button",{onClick:()=>je(e.id),title:e.name,className:"w-10 h-10 rounded-md border flex items-center justify-center hover:bg-accent transition-colors",children:a("img",{src:`https://face.viki.moe/apng/${e.id}.png`,alt:e.name,className:"w-8 h-8"})},e.id))}),ve.length===0&&o("div",{className:"flex flex-col items-center gap-2 py-4",children:[a(j,{size:32,className:"text-muted-foreground/30"}),a("span",{className:"text-sm text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u8868\u60C5"})]})]}),w&&o("div",{className:"p-3 rounded-md border bg-muted/30 space-y-2",children:[o("p",{className:"text-xs text-muted-foreground",children:[w==="image"&&"\u652F\u6301 http(s) \u56FE\u7247\u94FE\u63A5\u6216 data URL",w==="video"&&"\u652F\u6301\u6D4F\u89C8\u5668\u53EF\u89E3\u7801\u7684\u89C6\u9891\u76F4\u94FE\uFF08\u5982 .mp4\u3001.webm\uFF09",w==="audio"&&"\u652F\u6301 .mp3\u3001.ogg\u3001.wav \u7B49\u97F3\u9891\u76F4\u94FE"]}),a("input",{value:$,onChange:e=>me(e.target.value),placeholder:w==="image"?"\u56FE\u7247 URL\u2026":w==="video"?"\u89C6\u9891 URL\u2026":"\u97F3\u9891 URL\u2026",className:"w-full h-8 rounded-md border border-input bg-background px-2 text-sm",onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),be())}}),o("button",{type:"button",className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",onClick:be,disabled:!$.trim(),children:[a(ae,{size:14})," \u63D2\u5165\u5230\u8F93\u5165\u6846"]})]}),o("div",{className:"flex gap-2 items-start",children:[o("div",{className:"flex-1 relative",children:[a(Ve,{ref:q,placeholder:`\u5411 ${h.name} \u53D1\u9001\u6D88\u606F...`,onSend:Fe,onChange:ea,onAtTrigger:Ye,minHeight:"44px",maxHeight:"200px"}),Y&&a("div",{className:"absolute z-50 rounded-lg border bg-popover shadow-md min-w-60 max-h-72 overflow-y-auto p-1",style:{top:`${Y.top}px`,left:`${Y.left}px`},children:Re.length>0?Re.map(e=>o("div",{className:"flex items-center gap-2 p-2 rounded-md cursor-pointer hover:bg-accent transition-colors",onClick:()=>$e(e),children:[a(Z,{size:16,className:"text-muted-foreground"}),o("div",{className:"flex-1",children:[a("div",{className:"text-sm font-medium",children:e.name}),o("div",{className:"text-xs text-muted-foreground",children:["ID: ",e.id]})]})]},e.id)):o("div",{className:"flex flex-col items-center gap-2 p-4",children:[a(j,{size:20,className:"text-muted-foreground/50"}),a("span",{className:"text-xs text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u7528\u6237"})]})})]}),o("button",{className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-md bg-primary text-primary-foreground text-sm font-medium disabled:opacity-50 transition-colors hover:bg-primary/90",onClick:()=>{let e=q.current?.getContent();e&&Fe(e.text,e.segments)},disabled:!Be(V),children:[a(le,{size:16})," \u53D1\u9001"]})]}),o("div",{className:"flex items-center gap-2 flex-wrap text-xs text-muted-foreground",children:[a(de,{size:12})," \u5FEB\u6377\u64CD\u4F5C:",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Enter"})," \u53D1\u9001",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Shift+Enter"})," \u6362\u884C",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[@\u540D\u79F0]"})," @\u67D0\u4EBA",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[video:URL]"}),a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[audio:URL]"})]})]})]})]})]})}function Po(i){i.addRoute({path:"/console/sandbox",name:"\u6C99\u76D2",element:i.React.createElement(Ae,{hostReact:i.React})}),i.addTool({id:"sandbox",name:"\u6C99\u76D2",path:"/console/sandbox"})}export{Po as register};
1
+ import Ze,{useState as w,useEffect as he,useRef as Ae}from"react";import{cn as M,resolveMediaSrc as Me,pickMediaRawUrl as Be}from"@zhin.js/client";function la(){let c=localStorage.getItem("zhin_api_base")?.trim();return(c?c.replace(/\/$/,""):null)??window.location.origin}function sa(){return localStorage.getItem("zhin_api_token")?.trim()||localStorage.getItem("HTTP_TOKEN")?.trim()||localStorage.getItem("zhin_http_token")?.trim()||""}function Oe(c){let m=(c??la()).replace(/\/$/,""),g=new URL("/sandbox",`${m}/`);g.protocol=g.protocol==="https:"?"wss:":"ws:";let I=sa();return I&&g.searchParams.set("token",I),g.href}import{forwardRef as na,createElement as pa}from"react";var Ce=(...c)=>c.filter((m,g,I)=>!!m&&m.trim()!==""&&I.indexOf(m)===g).join(" ").trim();var He=c=>c.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var Ne=c=>c.replace(/^([A-Z])|[\s-_]+(\w)/g,(m,g,I)=>I?I.toUpperCase():g.toLowerCase());var ye=c=>{let m=Ne(c);return m.charAt(0).toUpperCase()+m.slice(1)};import{forwardRef as ca,createElement as We}from"react";var ge={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var Ee=c=>{for(let m in c)if(m.startsWith("aria-")||m==="role"||m==="title")return!0;return!1};import{createContext as ra,useContext as fa,useMemo as Za,createElement as _a}from"react";var ia=ra({});var Ge=()=>fa(ia);var Ve=ca(({color:c,size:m,strokeWidth:g,absoluteStrokeWidth:I,className:E="",children:F,iconNode:h,...L},P)=>{let{size:D=24,strokeWidth:U=2,absoluteStrokeWidth:Q=!1,color:G="currentColor",className:W=""}=Ge()??{},O=I??Q?Number(g??U)*24/Number(m??D):g??U;return We("svg",{ref:P,...ge,width:m??D??ge.width,height:m??D??ge.height,stroke:c??G,strokeWidth:O,className:Ce("lucide",W,E),...!F&&!Ee(L)&&{"aria-hidden":"true"},...L},[...h.map(([B,y])=>We(B,y)),...Array.isArray(F)?F:[F]])});var f=(c,m)=>{let g=na(({className:I,...E},F)=>pa(Ve,{ref:F,iconNode:m,className:Ce(`lucide-${He(ye(c))}`,`lucide-${c}`,I),...E}));return g.displayName=ye(c),g};var ma=[["path",{d:"M10.268 21a2 2 0 0 0 3.464 0",key:"vwvbt9"}],["path",{d:"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326",key:"11g9vi"}]],K=f("bell",ma);var La=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],te=f("bot",La);var xa=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],oe=f("check",xa);var Ia=[["line",{x1:"4",x2:"20",y1:"9",y2:"9",key:"4lhtct"}],["line",{x1:"4",x2:"20",y1:"15",y2:"15",key:"vyu0kd"}],["line",{x1:"10",x2:"8",y1:"3",y2:"21",key:"1ggp8o"}],["line",{x1:"16",x2:"14",y1:"3",y2:"21",key:"weycgp"}]],de=f("hash",Ia);var Ca=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]],ue=f("image",Ca);var ga=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]],le=f("info",ga);var ha=[["path",{d:"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z",key:"18887p"}]],N=f("message-square",ha);var Sa=[["path",{d:"M9 18V5l12-2v13",key:"1jmyc2"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["circle",{cx:"18",cy:"16",r:"3",key:"1hluhg"}]],se=f("music",Sa);var ka=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],$=f("search",ka);var wa=[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]],re=f("send",wa);var Pa=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M8 14s1.5 2 4 2 4-2 4-2",key:"1y1vjs"}],["line",{x1:"9",x2:"9.01",y1:"9",y2:"9",key:"yxxnd0"}],["line",{x1:"15",x2:"15.01",y1:"9",y2:"9",key:"1p4y9e"}]],fe=f("smile",Pa);var ya=[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],ie=f("trash-2",ya);var Aa=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]],Z=f("user-plus",Aa);var Ma=[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]],_=f("user",Ma);var Ba=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],ce=f("users",Ba);var Da=[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]],ne=f("video",Da);var Fa=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],pe=f("wifi-off",Fa);var ba=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],me=f("wifi",ba);var Ra=[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]],Le=f("x",Ra);import{useRef as ze,forwardRef as va,useImperativeHandle as Ta}from"react";import{jsx as qa}from"react/jsx-runtime";var Xe=va(({placeholder:c="\u8F93\u5165\u6D88\u606F...",onSend:m,onChange:g,onAtTrigger:I,minHeight:E="44px",maxHeight:F="200px"},h)=>{let L=ze(null),P=ze(null),D=()=>{if(!L.current)return{text:"",segments:[]};let d="",o=[],u=Array.from(L.current.childNodes);for(let p of u)if(p.nodeType===Node.TEXT_NODE){let r=p.textContent||"";r&&(d+=r,o.push({type:"text",data:{text:r}}))}else if(p.nodeType===Node.ELEMENT_NODE){let r=p;if(r.classList.contains("editor-face")){let n=r.dataset.id;d+=`[face:${n}]`,o.push({type:"face",data:{id:Number(n)}})}else if(r.classList.contains("editor-image")){let n=r.dataset.url;d+=`[image:${n}]`,o.push({type:"image",data:{url:n}})}else if(r.classList.contains("editor-video")){let n=r.dataset.url||"";d+=`[video:${n}]`,o.push({type:"video",data:{url:n}})}else if(r.classList.contains("editor-audio")){let n=r.dataset.url||"";d+=`[audio:${n}]`,o.push({type:"audio",data:{url:n}})}else if(r.classList.contains("editor-at")){let n=r.dataset.name,A=r.dataset.id;d+=`[@${n}]`,o.push({type:"mention",data:A?{target:A,name:n}:{target:n,name:n}})}else r.tagName==="BR"&&(d+=`
2
+ `)}return{text:d,segments:o}},U=d=>{if(!L.current)return;let o=document.createElement("img");o.src=`https://face.viki.moe/apng/${d}.png`,o.alt=`[face:${d}]`,o.dataset.type="face",o.dataset.id=String(d),o.className="editor-face",B(o),R()},Q=d=>{if(!L.current||!d.trim())return;let o=document.createElement("img");o.src=d.trim(),o.alt=`[image:${d.trim()}]`,o.dataset.type="image",o.dataset.url=d.trim(),o.className="editor-image",B(o),R()},G=d=>{if(!L.current||!d.trim())return;let o=d.trim(),u=document.createElement("span");u.className="editor-video",u.dataset.url=o,u.contentEditable="false",u.textContent="\u{1F4F9} \u89C6\u9891",B(u),R()},W=d=>{if(!L.current||!d.trim())return;let o=d.trim(),u=document.createElement("span");u.className="editor-audio",u.dataset.url=o,u.contentEditable="false",u.textContent="\u{1F3B5} \u97F3\u9891",B(u),R()},O=(d,o)=>{if(!L.current||!d.trim())return;let u=document.createElement("span");u.dataset.type="at",u.dataset.name=d,o&&(u.dataset.id=o),u.className="editor-at",u.contentEditable="false";let p=document.createElement("span");p.textContent="@",p.className="editor-at-symbol";let r=document.createElement("span");r.textContent=d,r.className="editor-at-name",u.appendChild(p),u.appendChild(r),B(u),R()},B=d=>{if(!L.current)return;L.current.focus();let o=window.getSelection();if(o&&o.rangeCount>0){let u=o.getRangeAt(0);if(L.current.contains(u.commonAncestorContainer))u.deleteContents(),u.insertNode(d),u.collapse(!1),o.removeAllRanges(),o.addRange(u);else{L.current.appendChild(d);let r=document.createRange();r.setStartAfter(d),r.collapse(!0),o.removeAllRanges(),o.addRange(r)}}else{L.current.appendChild(d);let u=window.getSelection();if(u){let p=document.createRange();p.setStartAfter(d),p.collapse(!0),u.removeAllRanges(),u.addRange(p)}}},y=()=>{L.current&&(L.current.innerHTML="",R())},V=()=>{L.current?.focus()},Y=()=>D(),xe=()=>{if(!L.current||!I)return;let d=window.getSelection();if(!d||d.rangeCount===0){I(!1,""),P.current=null;return}let o=d.getRangeAt(0);if(!L.current.contains(o.commonAncestorContainer)){I(!1,""),P.current=null;return}let u=o.startContainer;if(u.nodeType!==Node.TEXT_NODE){I(!1,""),P.current=null;return}let p=u,r=p.textContent?.substring(0,o.startOffset)||"",n=r.lastIndexOf("@");if(n!==-1){let A=r.substring(n+1);if(A.includes(" ")||A.includes(`
3
+ `)){I(!1,""),P.current=null;return}P.current=p;let z=document.createRange();z.setStart(p,n),z.setEnd(p,n+1);let v=z.getBoundingClientRect(),b=L.current.getBoundingClientRect();I(!0,A,{top:v.bottom-b.top,left:v.left-b.left})}else I(!1,""),P.current=null},R=()=>{if(xe(),g){let{text:d,segments:o}=D();g(d,o)}},Se=(d,o)=>{if(!P.current)return;let u=P.current,p=u.textContent||"",r=p.lastIndexOf("@");if(r!==-1){let n=p.substring(r+1),A=r+1+n.split(/[\s\n]/)[0].length,z=p.substring(0,r),v=p.substring(A);u.textContent=z+v;let b=window.getSelection();if(b){let T=document.createRange();T.setStart(u,r),T.collapse(!0),b.removeAllRanges(),b.addRange(T)}}P.current=null,O(d,o)},ee=d=>{d.preventDefault();let o=d.clipboardData,p=Array.from(o.items).find(n=>n.type.startsWith("image/"));if(p){let n=p.getAsFile();if(n){let A=new FileReader;A.onload=()=>{typeof A.result=="string"&&Q(A.result)},A.readAsDataURL(n)}return}let r=o.getData("text/plain");r&&(document.execCommand("insertText",!1,r),R())},J=d=>{if(d.key==="Enter"&&!d.shiftKey&&(d.preventDefault(),m)){let{text:o,segments:u}=D();m(o,u)}};return Ta(h,()=>({focus:V,clear:y,insertFace:U,insertImage:Q,insertVideo:G,insertAudio:W,insertAt:O,replaceAtTrigger:Se,getContent:Y})),qa("div",{ref:L,contentEditable:!0,suppressContentEditableWarning:!0,onInput:R,onKeyDown:J,onPaste:ee,"data-placeholder":c,className:"rich-text-editor",style:{width:"100%",minHeight:E,maxHeight:F,padding:"0.5rem 0.75rem",border:"1px solid var(--gray-6)",borderRadius:"6px",backgroundColor:"var(--gray-1)",fontSize:"var(--font-size-2)",outline:"none",overflowY:"auto",lineHeight:"1.5",wordWrap:"break-word",color:"var(--gray-12)"}})});Xe.displayName="RichTextEditor";var Ke=Xe;import{Fragment as Ua,jsx as a,jsxs as t}from"react/jsx-runtime";function De(){let[c,m]=w([]),[g,I]=w([{id:"user_1001",name:"\u6D4B\u8BD5\u7528\u6237",type:"private",unread:0},{id:"group_2001",name:"\u6D4B\u8BD5\u7FA4\u7EC4",type:"group",unread:0},{id:"channel_3001",name:"\u6D4B\u8BD5\u9891\u9053",type:"channel",unread:0}]),[E,F]=w([]),[h,L]=w(g[0]),[P,D]=w(""),[U,Q]=w("ProcessEndpoint"),[G,W]=w(!1),[O,B]=w(!1),[y,V]=w(null),[Y,xe]=w(""),[R,Se]=w(!1),[ee,J]=w(null),[d,o]=w(""),[u,p]=w(""),[r,n]=w(""),[A]=w([{id:"10001",name:"\u5F20\u4E09"},{id:"10002",name:"\u674E\u56DB"},{id:"10003",name:"\u738B\u4E94"},{id:"10004",name:"\u8D75\u516D"},{id:"10005",name:"\u6D4B\u8BD5\u7528\u6237"},{id:"10086",name:"Admin"},{id:"10010",name:"Test User"}]),[z,v]=w([]),[b,T]=w(!1),[j,ke]=w("chat"),Fe=Ae(null),H=Ae(null),q=Ae(null),_e=async()=>{try{let e=await fetch("https://face.viki.moe/metadata.json");F(await e.json())}catch(e){console.error("[Sandbox] Failed to fetch face list:",e)}};he(()=>{_e()},[]);let Qe=e=>{if(e.type==="edit"&&e.messageId){let l=Array.isArray(e.content)?e.content:Ie(String(e.content??""));m(i=>i.map(C=>C.id===e.messageId?{...C,content:l}:C));return}let s=typeof e.content=="string"?Ie(e.content):Array.isArray(e.content)?e.content:Ie(String(e.content??"")),x=e.type==="private"?`\u79C1\u804A-${e.bot||U}`:e.type==="group"?`\u7FA4\u7EC4-${e.id}`:`\u9891\u9053-${e.id}`,S=e.type;I(l=>{if(l.some(C=>C.id===e.id))return l;let i={id:e.id,name:x,type:S,unread:0};return L(i),[...l,i]}),m(l=>[...l,{id:e.messageId??`bot_${e.timestamp}`,type:"received",channelType:S,channelId:e.id,channelName:x,senderId:"endpoint",senderName:e.bot||U,content:s,timestamp:e.timestamp}])},Je=e=>{let s=[{type:"action",data:{id:e,payload:e}}],x=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});H.current?.send(x)};he(()=>{let e=Oe();return H.current=new WebSocket(e),H.current.onopen=()=>W(!0),H.current.onmessage=s=>{try{Qe(JSON.parse(s.data))}catch(x){console.error("[Sandbox] Failed to parse message:",x)}},H.current.onclose=()=>W(!1),()=>{H.current?.close(),H.current=null,W(!1)}},[]),he(()=>{Fe.current?.scrollIntoView({behavior:"smooth"})},[c]),he(()=>{v(P.trim()?Ie(P):[])},[P]);let Ie=e=>{let s=[],x=/\[@([^\]]+)\]|\[face:(\d+)\]|\[image:([^\]]+)\]|\[video:([^\]]+)\]|\[audio:([^\]]+)\]/g,S=0,l;for(;(l=x.exec(e))!==null;){if(l.index>S){let i=e.substring(S,l.index);i&&s.push({type:"text",data:{text:i}})}l[1]?s.push({type:"mention",data:{target:l[1],name:l[1]}}):l[2]?s.push({type:"face",data:{id:parseInt(l[2],10)}}):l[3]?s.push({type:"image",data:{url:l[3]}}):l[4]?s.push({type:"video",data:{url:l[4]}}):l[5]&&s.push({type:"audio",data:{url:l[5]}}),S=x.lastIndex}if(S<e.length){let i=e.substring(S);i&&s.push({type:"text",data:{text:i}})}return s.length>0?s:[{type:"text",data:{text:e}}]},be=e=>e.length===0?!1:e.some(s=>s.type==="text"?!!String(s.data?.text??"").trim():(s.type==="keyboard",!0)),je=(e,s)=>{let x=s?"ring-1 ring-primary-foreground/25":"ring-1 ring-border/60";return e.map((S,l)=>{if(typeof S=="string")return a("span",{children:S.split(`
4
+ `).map((C,k)=>t(Ze.Fragment,{children:[C,k<S.split(`
5
+ `).length-1&&a("br",{})]},k))},l);let i=S.data;switch(S.type){case"text":return a("span",{children:String(i.text??"").split(`
6
+ `).map((C,k)=>t(Ze.Fragment,{children:[C,k<String(i.text??"").split(`
7
+ `).length-1&&a("br",{})]},k))},l);case"mention":case"at":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-accent text-accent-foreground text-xs mx-0.5",children:["@",String(i.name??i.target??i.qq??"")]},l);case"face":return a("img",{src:`https://face.viki.moe/apng/${i.id}.png`,alt:String(i.name??""),className:"w-6 h-6 inline-block align-middle mx-0.5",title:String(i.name??i.id??"")},l);case"dice":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5",children:["\u{1F3B2} ",i.result!=null?`\u70B9\u6570 ${String(i.result)}`:"\u9AB0\u5B50"]},l);case"rps":return t("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded bg-secondary text-xs mx-0.5",children:["\u270A ",i.result!=null?`\u7ED3\u679C ${String(i.result)}`:"\u731C\u62F3"]},l);case"image":{let C=Be(i),k=Me(C,"image");return k?a("a",{href:k,target:"_blank",rel:"noreferrer",className:"block my-1",children:a("img",{src:k,alt:"",className:M("max-w-[min(320px,88vw)] rounded-lg block",x,"ring-offset-0"),onError:ae=>{ae.target.style.display="none"}})},l):a("span",{className:"text-xs opacity-70",children:"[\u56FE\u7247]"},l)}case"video":{let C=Be(i),k=Me(C,"video");return k?a("video",{src:k,controls:!0,playsInline:!0,preload:"metadata",className:M("max-w-[min(360px,92vw)] max-h-72 rounded-lg my-1 bg-black/10",x)},l):a("span",{className:"text-xs opacity-70",children:"[\u89C6\u9891\u65E0\u5730\u5740]"},l)}case"audio":case"record":{let C=Be(i),k=Me(C,"audio");return k?a("audio",{src:k,controls:!0,preload:"metadata",className:M("w-full max-w-sm my-2 h-10",s&&"opacity-95")},l):a("span",{className:"text-xs opacity-70",children:"[\u97F3\u9891\u65E0\u5730\u5740]"},l)}case"reply":return t("div",{className:"mb-1 rounded-md border border-dashed px-2 py-1 text-xs opacity-90",children:["\u21A9 \u5F15\u7528\u6D88\u606F #",String(i.message_id??i.id??"")]},l);case"forward":{let C=i.messages,k=String(i.title??"\u804A\u5929\u8BB0\u5F55");return t("div",{className:"my-1 rounded-md border bg-background/40 px-2 py-2 text-xs space-y-1",children:[t("div",{className:"font-medium",children:["\u{1F4E8} ",k]}),Array.isArray(C)&&C.length>0?t("div",{className:"space-y-1 pl-2 border-l-2 border-muted",children:[C.slice(0,3).map((ae,X)=>a("div",{className:"opacity-90",children:ae.map((Pe,ua)=>a("span",{children:Pe.type==="text"?String(Pe.data?.text??""):`[${Pe.type??"seg"}]`},ua))},X)),C.length>3&&t("div",{className:"opacity-60",children:["\u2026\u5171 ",C.length," \u6761"]})]}):a("div",{className:"opacity-70",children:"[\u5408\u5E76\u8F6C\u53D1]"})]},l)}case"keyboard":{let C=i.rows??[];return a("div",{className:"inline-grid gap-1 my-1",children:C.map((k,ae)=>a("div",{className:"flex gap-1",children:k.map(X=>a("button",{type:"button",disabled:X.disabled||s,onClick:()=>Je(X.payload),className:M("min-w-9 h-9 rounded-md border text-sm font-medium transition-colors",X.disabled?"opacity-50 cursor-not-allowed":"hover:bg-accent active:scale-95"),children:X.label},X.payload))},ae))},l)}default:return t("span",{className:"text-xs opacity-70",children:["[",S.type,"]"]},l)}})},Re=(e,s)=>{if(!be(s))return;let x={id:`msg_${Date.now()}`,type:"sent",channelType:h.type,channelId:h.id,channelName:h.name,senderId:"test_user",senderName:"\u6D4B\u8BD5\u7528\u6237",content:s,timestamp:Date.now()};m(l=>[...l,x]),D(""),v([]),q.current?.clear();let S=JSON.stringify({type:h.type,id:h.id,content:s,timestamp:Date.now()});H.current?.send(S)},$e=()=>{confirm("\u786E\u5B9A\u6E05\u7A7A\u6240\u6709\u6D88\u606F\u8BB0\u5F55\uFF1F")&&m([])},Ye=e=>{ke("chat"),L(e),I(s=>s.map(x=>x.id===e.id?{...x,unread:0}:x)),window.innerWidth<768&&T(!1)},ea=()=>{let e=["private","group","channel"],s=e[Math.floor(Math.random()*e.length)],x=prompt("\u8BF7\u8F93\u5165\u9891\u9053\u540D\u79F0\uFF1A");if(x){let S={id:`${s}_${Date.now()}`,name:x,type:s,unread:0};I(l=>[...l,S]),L(S)}},ve=e=>{switch(e){case"private":return a(_,{size:16});case"group":return a(ce,{size:16});case"channel":return a(de,{size:16});default:return a(N,{size:16})}},aa=e=>{q.current?.insertFace(e),B(!1)},Te=()=>{let e=Y.trim();!e||!y||(y==="image"?q.current?.insertImage(e):y==="video"?q.current?.insertVideo(e):q.current?.insertAudio(e),xe(""),V(null))},Oa=()=>{r.trim()&&(q.current?.insertAt(r.trim()),n(""),Se(!1))},ta=e=>{q.current?.replaceAtTrigger(e.name,e.id),J(null),o("")},oa=(e,s,x)=>{if(h.type==="private"){J(null),o("");return}e&&x?(J(x),o(s)):(J(null),o(""))},qe=A.filter(e=>{if(!d.trim())return!0;let s=d.toLowerCase();return e.name.toLowerCase().includes(s)||e.id.toLowerCase().includes(s)}),da=(e,s)=>{D(e),v(s)},Ue=E.filter(e=>e.name.toLowerCase().includes(u.toLowerCase())||e.describe.toLowerCase().includes(u.toLowerCase())),we=c.filter(e=>e.channelId===h.id);return t("div",{className:"sandbox-container rounded-xl border border-border/70 bg-card/30 shadow-sm",children:[t("button",{className:"mobile-channel-toggle md:hidden",onClick:()=>T(!b),children:[a(N,{size:20})," \u9891\u9053\u5217\u8868"]}),t("div",{className:M("channel-sidebar rounded-lg border bg-card",b&&"show"),children:[a("div",{className:"p-3 border-b",children:t("div",{className:"flex justify-between items-center",children:[t("div",{className:"flex items-center gap-2",children:[a("div",{className:"p-1 rounded-md bg-secondary",children:a(N,{size:16,className:"text-muted-foreground"})}),a("h3",{className:"font-semibold",children:"\u9891\u9053\u5217\u8868"})]}),t("span",{className:M("inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-xs font-medium border",G?"bg-emerald-100 text-emerald-800 border-emerald-200 dark:bg-emerald-900/30 dark:text-emerald-400 dark:border-emerald-800":"bg-muted text-muted-foreground"),children:[G?a(me,{size:12}):a(pe,{size:12}),G?"\u5DF2\u8FDE\u63A5":"\u672A\u8FDE\u63A5"]})]})}),t("div",{className:"flex-1 overflow-y-auto p-2 space-y-1",children:[g.map(e=>{let s=j==="chat"&&h.id===e.id;return t("div",{className:M("menu-item",s&&"active"),onClick:()=>Ye(e),children:[a("span",{className:"shrink-0",children:ve(e.type)}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium truncate",children:e.name}),a("div",{className:"text-xs text-muted-foreground",children:e.type==="private"?"\u79C1\u804A":e.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),e.unread>0&&a("span",{className:"inline-flex items-center justify-center h-5 min-w-5 rounded-full bg-destructive text-destructive-foreground text-[10px] font-medium px-1",children:e.unread})]},e.id)}),t("div",{className:"pt-2 mt-2 border-t space-y-1",children:[t("div",{className:M("menu-item",j==="requests"&&"active"),onClick:()=>{ke("requests"),window.innerWidth<768&&T(!1)},children:[a(Z,{size:16,className:"shrink-0"}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u8BF7\u6C42"}),a("div",{className:"text-xs text-muted-foreground",children:"\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49"})]})]}),t("div",{className:M("menu-item",j==="notices"&&"active"),onClick:()=>{ke("notices"),window.innerWidth<768&&T(!1)},children:[a(K,{size:16,className:"shrink-0"}),t("div",{className:"flex-1 min-w-0",children:[a("div",{className:"text-sm font-medium",children:"\u901A\u77E5"}),a("div",{className:"text-xs text-muted-foreground",children:"\u7FA4\u7BA1/\u64A4\u56DE\u7B49"})]})]})]})]}),a("div",{className:"p-2 border-t",children:a("button",{className:"w-full py-2 px-3 rounded-md border border-dashed text-sm text-muted-foreground hover:bg-accent transition-colors",onClick:ea,children:"+ \u6DFB\u52A0\u9891\u9053"})})]}),b&&a("div",{className:"channel-overlay md:hidden",onClick:()=>T(!1)}),t("div",{className:"chat-area",children:[j==="requests"&&t("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:t("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(Z,{size:20})," \u8BF7\u6C42"]})}),t("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(Z,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u8BF7\u6C42\u6570\u636E"}),t("span",{className:"text-sm",children:["\u5B9E\u9645\u597D\u53CB/\u7FA4\u9080\u8BF7\u7B49\u8BF7\u6C42\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),j==="notices"&&t("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0 overflow-hidden",children:[a("div",{className:"p-3 border-b flex-shrink-0",children:t("h2",{className:"text-lg font-bold flex items-center gap-2",children:[a(K,{size:20})," \u901A\u77E5"]})}),t("div",{className:"flex-1 overflow-y-auto p-4 flex flex-col items-center justify-center gap-3 text-muted-foreground text-center",children:[a(K,{size:48,className:"opacity-30"}),a("span",{children:"\u6C99\u76D2\u4E3A\u6A21\u62DF\u73AF\u5883\uFF0C\u6682\u65E0\u901A\u77E5\u6570\u636E"}),t("span",{className:"text-sm",children:["\u5B9E\u9645\u7FA4\u7BA1\u3001\u64A4\u56DE\u7B49\u901A\u77E5\u8BF7\u5230\u4FA7\u8FB9\u680F ",a("strong",{children:"\u673A\u5668\u4EBA"})," \u9875\u9762\u8FDB\u5165\u5BF9\u5E94\u673A\u5668\u4EBA\u7BA1\u7406\u67E5\u770B"]})]})]}),j==="chat"&&t(Ua,{children:[a("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0",children:t("div",{className:"flex justify-between items-center flex-wrap gap-2",children:[t("div",{className:"flex items-center gap-3",children:[a("div",{className:"p-2 rounded-lg bg-secondary",children:ve(h.type)}),t("div",{children:[a("h2",{className:"text-lg font-bold",children:h.name}),t("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[a("span",{children:h.id}),a("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-[10px]",children:we.length}),a("span",{children:"\u6761\u6D88\u606F"})]})]}),a("span",{className:"inline-flex items-center px-2 py-0.5 rounded-full text-xs font-medium bg-secondary text-secondary-foreground",children:h.type==="private"?"\u79C1\u804A":h.type==="group"?"\u7FA4\u804A":"\u9891\u9053"})]}),t("div",{className:"flex items-center gap-2",children:[a("input",{value:U,onChange:e=>Q(e.target.value),placeholder:"\u673A\u5668\u4EBA\u540D\u79F0",className:"h-8 w-28 rounded-md border bg-transparent px-2 text-sm"}),t("button",{className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-secondary text-secondary-foreground text-sm hover:bg-secondary/80",onClick:$e,children:[a(ie,{size:14})," \u6E05\u7A7A"]})]})]})}),a("div",{className:"rounded-lg border bg-card flex-1 flex flex-col min-h-0",children:a("div",{className:"flex-1 overflow-y-auto p-4",children:we.length===0?t("div",{className:"flex flex-col items-center justify-center h-full gap-3",children:[a(N,{size:64,className:"text-muted-foreground/20"}),a("span",{className:"text-muted-foreground",children:"\u6682\u65E0\u6D88\u606F\uFF0C\u5F00\u59CB\u5BF9\u8BDD\u5427\uFF01"})]}):t("div",{className:"space-y-2",children:[we.map(e=>a("div",{className:M("flex",e.type==="sent"?"justify-end":"justify-start"),children:t("div",{className:M("max-w-[70%] p-3 rounded-2xl",e.type==="sent"?"bg-primary text-primary-foreground":"bg-muted"),children:[t("div",{className:"flex items-center gap-2 mb-1",children:[e.type==="received"&&a(te,{size:14}),e.type==="sent"&&a(_,{size:14}),a("span",{className:"text-xs font-medium opacity-90",children:e.senderName}),a("span",{className:"text-xs opacity-70",children:new Date(e.timestamp).toLocaleTimeString()})]}),a("div",{className:"text-sm space-y-1",children:je(e.content,e.type==="sent")})]})},e.id)),a("div",{ref:Fe})]})})}),t("div",{className:"rounded-lg border bg-card p-3 flex-shrink-0 space-y-3",children:[t("div",{className:"flex gap-2 items-center flex-wrap",children:[a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",O?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{B(!O),V(null)},title:"\u63D2\u5165\u8868\u60C5",children:a(fe,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="image"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="image"?null:"image"),B(!1)},title:"\u63D2\u5165\u56FE\u7247 URL",children:a(ue,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="video"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="video"?null:"video"),B(!1)},title:"\u63D2\u5165\u89C6\u9891 URL",children:a(ne,{size:16})}),a("button",{type:"button",className:M("h-8 w-8 rounded-md flex items-center justify-center border transition-colors",y==="audio"?"bg-primary text-primary-foreground":"hover:bg-accent"),onClick:()=>{V(e=>e==="audio"?null:"audio"),B(!1)},title:"\u63D2\u5165\u97F3\u9891 URL",children:a(se,{size:16})}),a("div",{className:"flex-1 min-w-[1rem]"}),P&&a("button",{className:"h-8 w-8 rounded-md flex items-center justify-center hover:bg-accent transition-colors",onClick:()=>{D(""),v([])},children:a(Le,{size:16})})]}),O&&t("div",{className:"p-3 rounded-md border bg-muted/30 max-h-64 overflow-y-auto space-y-2",children:[a("input",{value:u,onChange:e=>p(e.target.value),placeholder:"\u641C\u7D22\u8868\u60C5...",className:"w-full h-8 rounded-md border bg-transparent px-2 text-sm"}),a("div",{className:"grid grid-cols-8 gap-1",children:Ue.slice(0,80).map(e=>a("button",{onClick:()=>aa(e.id),title:e.name,className:"w-10 h-10 rounded-md border flex items-center justify-center hover:bg-accent transition-colors",children:a("img",{src:`https://face.viki.moe/apng/${e.id}.png`,alt:e.name,className:"w-8 h-8"})},e.id))}),Ue.length===0&&t("div",{className:"flex flex-col items-center gap-2 py-4",children:[a($,{size:32,className:"text-muted-foreground/30"}),a("span",{className:"text-sm text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u8868\u60C5"})]})]}),y&&t("div",{className:"p-3 rounded-md border bg-muted/30 space-y-2",children:[t("p",{className:"text-xs text-muted-foreground",children:[y==="image"&&"\u652F\u6301 http(s) \u56FE\u7247\u94FE\u63A5\u6216 data URL",y==="video"&&"\u652F\u6301\u6D4F\u89C8\u5668\u53EF\u89E3\u7801\u7684\u89C6\u9891\u76F4\u94FE\uFF08\u5982 .mp4\u3001.webm\uFF09",y==="audio"&&"\u652F\u6301 .mp3\u3001.ogg\u3001.wav \u7B49\u97F3\u9891\u76F4\u94FE"]}),a("input",{value:Y,onChange:e=>xe(e.target.value),placeholder:y==="image"?"\u56FE\u7247 URL\u2026":y==="video"?"\u89C6\u9891 URL\u2026":"\u97F3\u9891 URL\u2026",className:"w-full h-8 rounded-md border border-input bg-background px-2 text-sm",onKeyDown:e=>{e.key==="Enter"&&(e.preventDefault(),Te())}}),t("button",{type:"button",className:"inline-flex items-center gap-1 h-8 px-3 rounded-md bg-primary text-primary-foreground text-sm disabled:opacity-50",onClick:Te,disabled:!Y.trim(),children:[a(oe,{size:14})," \u63D2\u5165\u5230\u8F93\u5165\u6846"]})]}),t("div",{className:"flex gap-2 items-start",children:[t("div",{className:"flex-1 relative",children:[a(Ke,{ref:q,placeholder:`\u5411 ${h.name} \u53D1\u9001\u6D88\u606F...`,onSend:Re,onChange:da,onAtTrigger:oa,minHeight:"44px",maxHeight:"200px"}),ee&&a("div",{className:"absolute z-50 rounded-lg border bg-popover shadow-md min-w-60 max-h-72 overflow-y-auto p-1",style:{top:`${ee.top}px`,left:`${ee.left}px`},children:qe.length>0?qe.map(e=>t("div",{className:"flex items-center gap-2 p-2 rounded-md cursor-pointer hover:bg-accent transition-colors",onClick:()=>ta(e),children:[a(_,{size:16,className:"text-muted-foreground"}),t("div",{className:"flex-1",children:[a("div",{className:"text-sm font-medium",children:e.name}),t("div",{className:"text-xs text-muted-foreground",children:["ID: ",e.id]})]})]},e.id)):t("div",{className:"flex flex-col items-center gap-2 p-4",children:[a($,{size:20,className:"text-muted-foreground/50"}),a("span",{className:"text-xs text-muted-foreground",children:"\u672A\u627E\u5230\u5339\u914D\u7684\u7528\u6237"})]})})]}),t("button",{className:"inline-flex items-center gap-1.5 h-10 px-4 rounded-md bg-primary text-primary-foreground text-sm font-medium disabled:opacity-50 transition-colors hover:bg-primary/90",onClick:()=>{let e=q.current?.getContent();e&&Re(e.text,e.segments)},disabled:!be(z),children:[a(re,{size:16})," \u53D1\u9001"]})]}),t("div",{className:"flex items-center gap-2 flex-wrap text-xs text-muted-foreground",children:[a(le,{size:12})," \u5FEB\u6377\u64CD\u4F5C:",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Enter"})," \u53D1\u9001",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"Shift+Enter"})," \u6362\u884C",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[@\u540D\u79F0]"})," @\u67D0\u4EBA",a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[video:URL]"}),a("span",{className:"px-1 py-0.5 rounded border text-[10px]",children:"[audio:URL]"})]})]})]})]})]})}function Bo(c){c.addRoute({path:"/console/sandbox",name:"\u6C99\u76D2",element:c.React.createElement(De,{hostReact:c.React})}),c.addTool({id:"sandbox",name:"\u6C99\u76D2",path:"/console/sandbox"})}export{Bo as register};
8
8
  /*! Bundled license information:
9
9
 
10
10
  lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
@@ -37,7 +37,7 @@ lucide-react/dist/esm/icons/wifi.mjs:
37
37
  lucide-react/dist/esm/icons/x.mjs:
38
38
  lucide-react/dist/esm/lucide-react.mjs:
39
39
  (**
40
- * @license lucide-react v1.21.0 - ISC
40
+ * @license lucide-react v1.23.0 - ISC
41
41
  *
42
42
  * This source code is licensed under the ISC license.
43
43
  * See the LICENSE file in the root directory of this source tree.
@@ -61,11 +61,13 @@ export declare class SandboxWsEndpoint extends EventEmitter implements Endpoint<
61
61
  $disconnect(): Promise<void>;
62
62
  $formatMessage({ content, type, id, ts }: EndpointEvent): Message<EndpointEvent>;
63
63
  $sendMessage(options: SendOptions): Promise<string>;
64
+ $editMessage(options: import('zhin.js').EditMessageOptions): Promise<void>;
64
65
  $recallMessage(_id: string): Promise<void>;
65
66
  }
66
67
  export declare class SandboxWsHostAdapter extends Adapter<SandboxWsEndpoint> {
67
68
  protected readonly defaults: ResolvedSandboxBot;
68
69
  static readonly capabilities: readonly ["inbound", "outbound"];
70
+ static interactivePolicy: "native";
69
71
  constructor(plugin: Plugin, defaults: ResolvedSandboxBot);
70
72
  getOutboundMediaCapabilities(): {
71
73
  image: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-ws.d.ts","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-ws.d.ts","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
package/lib/sandbox-ws.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /** Sandbox 传输 — Node WebSocket。 */
2
2
  import { EventEmitter } from "node:events";
3
3
  import { Adapter, Message, segment, } from 'zhin.js';
4
+ import { fromCanonicalSegments, toCanonicalSegments } from './segment-mapper.js';
4
5
  /** 无 WS 时的占位 socket(仅用于 endpoint:list,不可收发) */
5
6
  export function createOfflineSandboxWs() {
6
7
  return { send: () => { }, close: () => { } };
@@ -95,7 +96,7 @@ export function parseSandboxWsPayload(raw) {
95
96
  const content = typeof payload.content === "string"
96
97
  ? [{ type: "text", data: { text: payload.content } }]
97
98
  : Array.isArray(payload.content)
98
- ? payload.content
99
+ ? toCanonicalSegments(payload.content)
99
100
  : [{ type: "text", data: { text: payload.text ?? raw } }];
100
101
  return { type, id, content, timestamp: payload.timestamp ?? Date.now() };
101
102
  }
@@ -146,14 +147,15 @@ export class SandboxWsEndpoint extends EventEmitter {
146
147
  $formatMessage({ content, type, id, ts }) {
147
148
  if (!this.$config.owner)
148
149
  this.$config.owner = id;
150
+ const canonical = toCanonicalSegments(content);
149
151
  const message = Message.from({ content, type, id, ts }, {
150
152
  $id: `${ts}`,
151
153
  $adapter: "sandbox",
152
154
  $endpoint: this.$config.name,
153
155
  $sender: { id, name: "mock" },
154
156
  $channel: { id, type },
155
- $content: content,
156
- $raw: segment.raw(content),
157
+ $content: canonical,
158
+ $raw: segment.raw(canonical),
157
159
  $timestamp: ts,
158
160
  $recall: async () => { },
159
161
  $reply: async (replyContent, quote) => {
@@ -186,18 +188,40 @@ export class SandboxWsEndpoint extends EventEmitter {
186
188
  const ws = this.$config.ws;
187
189
  if (!ws)
188
190
  return "";
191
+ const messageId = `sb_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
192
+ const normalized = (Array.isArray(options.content) ? options.content : [options.content]).map((s) => typeof s === 'string' ? { type: 'text', data: { text: s } } : s);
193
+ const wire = fromCanonicalSegments(toCanonicalSegments(normalized));
189
194
  ws.send(JSON.stringify({
190
195
  ...options,
196
+ messageId,
197
+ content: wire,
198
+ timestamp: Date.now(),
199
+ }));
200
+ return messageId;
201
+ }
202
+ async $editMessage(options) {
203
+ if (!this.$connected)
204
+ return;
205
+ const ws = this.$config.ws;
206
+ if (!ws)
207
+ return;
208
+ ws.send(JSON.stringify({
209
+ type: 'edit',
210
+ messageId: options.messageId,
211
+ context: options.context,
212
+ endpoint: options.endpoint,
213
+ id: options.id,
214
+ channelType: options.type,
191
215
  content: options.content,
192
216
  timestamp: Date.now(),
193
217
  }));
194
- return "";
195
218
  }
196
219
  async $recallMessage(_id) { }
197
220
  }
198
221
  export class SandboxWsHostAdapter extends Adapter {
199
222
  defaults;
200
223
  static capabilities = ['inbound', 'outbound'];
224
+ static interactivePolicy = 'native';
201
225
  constructor(plugin, defaults) {
202
226
  super(plugin, "sandbox", []);
203
227
  this.defaults = defaults;
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox-ws.js","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox-ws.js","sourceRoot":"","sources":["../src/sandbox-ws.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
2
+ //# sourceMappingURL=segment-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment-mapper.d.ts","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';
2
+ //# sourceMappingURL=segment-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"segment-mapper.js","sourceRoot":"","sources":["../src/segment-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/adapter-sandbox",
3
- "version": "5.0.3",
3
+ "version": "5.0.4",
4
4
  "description": "Zhin.js adapter for local testing and development",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -43,26 +43,26 @@
43
43
  "directory": "plugins/adapters/sandbox"
44
44
  },
45
45
  "dependencies": {
46
- "lucide-react": "^1.21.0"
46
+ "lucide-react": "^1.22.0"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@types/react": "^19.2.17",
50
50
  "@types/react-dom": "^19.2.3",
51
51
  "typescript": "^6.0.3",
52
- "@zhin.js/cli": "1.0.91",
53
- "@zhin.js/client": "2.0.3",
54
- "@zhin.js/core": "1.3.2",
55
- "@zhin.js/contract": "1.0.1",
56
- "@zhin.js/host-api": "2.0.3",
57
- "@zhin.js/host-router": "2.0.1",
58
- "zhin.js": "4.1.0"
52
+ "@zhin.js/cli": "1.0.92",
53
+ "@zhin.js/contract": "1.0.2",
54
+ "@zhin.js/client": "2.0.4",
55
+ "@zhin.js/core": "1.3.3",
56
+ "@zhin.js/host-api": "2.0.4",
57
+ "@zhin.js/host-router": "2.0.2",
58
+ "zhin.js": "4.1.1"
59
59
  },
60
60
  "peerDependencies": {
61
- "@zhin.js/host-router": "2.0.1",
62
- "@zhin.js/core": "1.3.2",
63
- "@zhin.js/host-api": "2.0.3",
64
- "@zhin.js/client": "2.0.3",
65
- "@zhin.js/contract": "1.0.1"
61
+ "@zhin.js/core": "1.3.3",
62
+ "@zhin.js/client": "2.0.4",
63
+ "@zhin.js/host-router": "2.0.2",
64
+ "@zhin.js/host-api": "2.0.4",
65
+ "@zhin.js/contract": "1.0.2"
66
66
  },
67
67
  "peerDependenciesMeta": {
68
68
  "@zhin.js/host-router": {
package/src/sandbox-ws.ts CHANGED
@@ -10,6 +10,7 @@ import {
10
10
  type Plugin,
11
11
  type SendContent,
12
12
  type SendOptions,} from 'zhin.js';
13
+ import { fromCanonicalSegments, toCanonicalSegments } from './segment-mapper.js';
13
14
 
14
15
  export interface SandboxWsConfig {
15
16
  context: "sandbox";
@@ -172,7 +173,7 @@ export function parseSandboxWsPayload(raw: string): {
172
173
  const content: MessageElement[] = typeof payload.content === "string"
173
174
  ? [{ type: "text", data: { text: payload.content } }]
174
175
  : Array.isArray(payload.content)
175
- ? payload.content
176
+ ? toCanonicalSegments(payload.content)
176
177
  : [{ type: "text", data: { text: payload.text ?? raw } }];
177
178
  return { type, id, content, timestamp: payload.timestamp ?? Date.now() };
178
179
  }
@@ -238,6 +239,7 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
238
239
 
239
240
  $formatMessage({ content, type, id, ts }: EndpointEvent) {
240
241
  if (!this.$config.owner) this.$config.owner = id;
242
+ const canonical = toCanonicalSegments(content);
241
243
  const message = Message.from<EndpointEvent>(
242
244
  { content, type, id, ts },
243
245
  {
@@ -246,8 +248,8 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
246
248
  $endpoint: this.$config.name,
247
249
  $sender: { id, name: "mock" },
248
250
  $channel: { id, type },
249
- $content: content,
250
- $raw: segment.raw(content),
251
+ $content: canonical,
252
+ $raw: segment.raw(canonical),
251
253
  $timestamp: ts,
252
254
  $recall: async () => {},
253
255
  $reply: async (replyContent: SendContent, quote?: boolean | string) => {
@@ -281,14 +283,38 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
281
283
  if (!this.$connected) return "";
282
284
  const ws = this.$config.ws;
283
285
  if (!ws) return "";
286
+ const messageId = `sb_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
287
+ const normalized = (Array.isArray(options.content) ? options.content : [options.content]).map((s) =>
288
+ typeof s === 'string' ? { type: 'text' as const, data: { text: s } } : s,
289
+ );
290
+ const wire = fromCanonicalSegments(toCanonicalSegments(normalized));
284
291
  ws.send(
285
292
  JSON.stringify({
286
293
  ...options,
294
+ messageId,
295
+ content: wire,
296
+ timestamp: Date.now(),
297
+ }),
298
+ );
299
+ return messageId;
300
+ }
301
+
302
+ async $editMessage(options: import('zhin.js').EditMessageOptions): Promise<void> {
303
+ if (!this.$connected) return;
304
+ const ws = this.$config.ws;
305
+ if (!ws) return;
306
+ ws.send(
307
+ JSON.stringify({
308
+ type: 'edit',
309
+ messageId: options.messageId,
310
+ context: options.context,
311
+ endpoint: options.endpoint,
312
+ id: options.id,
313
+ channelType: options.type,
287
314
  content: options.content,
288
315
  timestamp: Date.now(),
289
316
  }),
290
317
  );
291
- return "";
292
318
  }
293
319
 
294
320
  async $recallMessage(_id: string): Promise<void> {}
@@ -296,6 +322,7 @@ export class SandboxWsEndpoint extends EventEmitter implements Endpoint<SandboxW
296
322
 
297
323
  export class SandboxWsHostAdapter extends Adapter<SandboxWsEndpoint> {
298
324
  static override readonly capabilities = ['inbound', 'outbound'] as const;
325
+ static override interactivePolicy = 'native' as const;
299
326
 
300
327
  constructor(
301
328
  plugin: Plugin,
@@ -0,0 +1 @@
1
+ export { toCanonicalSegments, fromCanonicalSegments } from 'zhin.js';