@runtypelabs/persona 4.25.0 → 4.26.0
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/dist/animations/glyph-cycle.d.cts +1 -1
- package/dist/animations/glyph-cycle.d.ts +1 -1
- package/dist/animations/{types-Db61aI9J.d.cts → types-BwKTZhg9.d.cts} +14 -0
- package/dist/animations/{types-Db61aI9J.d.ts → types-BwKTZhg9.d.ts} +14 -0
- package/dist/animations/wipe.d.cts +1 -1
- package/dist/animations/wipe.d.ts +1 -1
- package/dist/animations-extra.d.cts +14 -0
- package/dist/animations-extra.d.ts +14 -0
- package/dist/approval-ui-QAKWNFNM.js +1 -0
- package/dist/approval-ui.cjs +2 -2
- package/dist/approval-ui.d.cts +180 -8
- package/dist/approval-ui.d.ts +180 -8
- package/dist/approval-ui.js +2 -2
- package/dist/{artifacts-ui-IGB5YKLO.js → artifacts-ui-NJGMM27I.js} +1 -1
- package/dist/artifacts-ui.cjs +4 -4
- package/dist/artifacts-ui.d.cts +180 -8
- package/dist/artifacts-ui.d.ts +180 -8
- package/dist/artifacts-ui.js +5 -5
- package/dist/chunk-2ANTRKTV.js +1 -0
- package/dist/chunk-4HPTPUC6.js +1 -0
- package/dist/chunk-6V3MNEKB.js +1 -0
- package/dist/chunk-HGUCGM3K.js +9 -0
- package/dist/chunk-IO5VVUKP.js +3 -0
- package/dist/chunk-J4J3Y2P2.js +1 -0
- package/dist/chunk-K6HKIP5K.js +1 -0
- package/dist/chunk-K7NA7G7J.js +1 -0
- package/dist/chunk-MXUTS3LB.js +1 -0
- package/dist/chunk-PDPVORUF.js +1 -0
- package/dist/chunk-QPPJUSZH.js +1 -0
- package/dist/chunk-QRKGQPU7.js +1 -0
- package/dist/chunk-S6PBWE75.js +1 -0
- package/dist/chunk-T7QM7YMF.js +1 -0
- package/dist/chunk-TR2H475E.js +1 -0
- package/dist/chunk-UPO4GUFC.js +1 -0
- package/dist/chunk-ZC66NAIR.js +1 -0
- package/dist/client-history-YPEG45Q4.js +1 -0
- package/dist/client-history.js +1 -0
- package/dist/client-stream-42FOI3EC.js +4 -0
- package/dist/client-stream.js +5 -0
- package/dist/codegen.cjs +1 -1
- package/dist/codegen.js +1 -1
- package/dist/context-mentions-E7HJYWO6.js +161 -0
- package/dist/{context-mentions-inline-I2RDEBAK.js → context-mentions-inline-QVESLW55.js} +1 -1
- package/dist/context-mentions.cjs +7 -7
- package/dist/context-mentions.d.cts +180 -8
- package/dist/context-mentions.d.ts +180 -8
- package/dist/context-mentions.js +8 -8
- package/dist/event-stream-view-FOIJHFQO.js +1 -0
- package/dist/event-stream-view.cjs +1 -1
- package/dist/event-stream-view.d.cts +183 -31
- package/dist/event-stream-view.d.ts +183 -31
- package/dist/event-stream-view.js +1 -1
- package/dist/forms-ui.d.cts +221 -667
- package/dist/forms-ui.d.ts +221 -667
- package/dist/history-shell-QDQ44PSE.js +3 -0
- package/dist/history-shell.js +3 -0
- package/dist/{history-view-BD6OXLNA.js → history-view-NCFBI5GR.js} +2 -2
- package/dist/history-view.cjs +2 -2
- package/dist/history-view.d.cts +35 -1
- package/dist/history-view.d.ts +35 -1
- package/dist/history-view.js +2 -2
- package/dist/index.cjs +80 -74
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +227 -738
- package/dist/index.d.ts +227 -738
- package/dist/index.global.js +3 -215
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +81 -75
- package/dist/index.js.map +1 -1
- package/dist/install.global.js +1 -1
- package/dist/install.global.js.map +1 -1
- package/dist/launcher.global.js +3 -67
- package/dist/launcher.global.js.map +1 -1
- package/dist/markdown-parsers.js +22 -22
- package/dist/runtype-tts-entry-NFBVWR7N.js +1 -0
- package/dist/runtype-tts.js +1 -1
- package/dist/session-actions-ISSKSI66.js +1 -0
- package/dist/session-actions.js +1 -0
- package/dist/session-reconnect.d.cts +180 -8
- package/dist/session-reconnect.d.ts +180 -8
- package/dist/smart-dom-reader.cjs +13 -13
- package/dist/smart-dom-reader.d.cts +180 -8
- package/dist/smart-dom-reader.d.ts +180 -8
- package/dist/smart-dom-reader.js +11 -11
- package/dist/theme-editor-preview.cjs +116 -98
- package/dist/theme-editor-preview.d.cts +182 -8
- package/dist/theme-editor-preview.d.ts +182 -8
- package/dist/theme-editor-preview.js +49 -54
- package/dist/theme-editor.cjs +2 -2
- package/dist/theme-editor.d.cts +181 -23
- package/dist/theme-editor.d.ts +181 -23
- package/dist/theme-editor.js +2 -2
- package/dist/theme-reference.d.cts +14 -0
- package/dist/theme-reference.d.ts +14 -0
- package/dist/ui-extras-entry-WAYFKVNW.js +3 -0
- package/dist/ui-extras.js +72 -0
- package/dist/voice-runtime-UOQOFAFY.js +17 -0
- package/dist/voice-runtime.cjs +17 -1
- package/dist/voice-runtime.d.cts +11650 -232
- package/dist/voice-runtime.d.ts +11650 -232
- package/dist/voice-runtime.js +17 -1
- package/dist/voice-worklet-player.cjs +19 -4
- package/dist/voice-worklet-player.d.cts +9 -10
- package/dist/voice-worklet-player.d.ts +9 -10
- package/dist/voice-worklet-player.js +19 -4
- package/dist/webmcp-polyfill.js +1 -1
- package/dist/webmcp-runtime-V6ZWW3PI.js +6 -0
- package/dist/webmcp-runtime.cjs +2 -2
- package/dist/webmcp-runtime.d.cts +1 -33
- package/dist/webmcp-runtime.d.ts +1 -33
- package/dist/webmcp-runtime.js +2 -2
- package/dist/widget.css +1 -1
- package/package.json +11 -5
- package/src/approval-paused-tool-settle.test.ts +221 -0
- package/src/client-approve.test.ts +311 -0
- package/src/client-history-eager.ts +9 -0
- package/src/client-history-loader.ts +23 -0
- package/src/client-history.ts +579 -0
- package/src/client-resume.ts +177 -0
- package/src/client-stream-eager.ts +12 -0
- package/src/client-stream-loader.ts +25 -0
- package/src/client-stream.ts +1880 -0
- package/src/client.test.ts +31 -1
- package/src/client.ts +293 -2607
- package/src/components/approval-actions.test.ts +27 -0
- package/src/components/approval-actions.ts +27 -3
- package/src/components/message-bubble.test.ts +19 -0
- package/src/components/message-bubble.ts +2 -0
- package/src/components/registry.ts +6 -6
- package/src/components/tool-bubble.test.ts +9 -0
- package/src/components/tool-bubble.ts +1 -0
- package/src/history-shell-bundle.test.ts +54 -0
- package/src/history-shell-eager.ts +12 -0
- package/src/history-shell-loader.ts +27 -0
- package/src/history-shell.ts +2362 -0
- package/src/history-view-loader.ts +2 -0
- package/src/history-view.ts +3 -0
- package/src/index-core.ts +6 -0
- package/src/index-global.ts +90 -248
- package/src/index.ts +13 -0
- package/src/install.ts +6 -4
- package/src/internal/runtype-history-provider.test.ts +1 -0
- package/src/internal/runtype-history-provider.ts +28 -13
- package/src/plugins/registry.ts +8 -8
- package/src/session-actions-chunk.test.ts +55 -0
- package/src/session-actions-eager.ts +11 -0
- package/src/session-actions-loader.ts +37 -0
- package/src/session-actions.ts +909 -0
- package/src/session-history.test.ts +3 -1
- package/src/session.ts +852 -1536
- package/src/session.voice.test.ts +1170 -5
- package/src/styles/widget.css +58 -0
- package/src/theme-editor/state.ts +91 -91
- package/src/types.ts +198 -5
- package/src/ui-ask-user-sheet.ts +382 -0
- package/src/ui-extras-eager.ts +10 -0
- package/src/ui-extras-entry.ts +9 -0
- package/src/ui-extras-loader.ts +26 -0
- package/src/ui.artifact-rail-resize.test.ts +2 -1
- package/src/ui.ask-user-chunk.test.ts +93 -0
- package/src/ui.history-chunk.test.ts +2 -1
- package/src/ui.history-config-provider.test.ts +2 -1
- package/src/ui.history-confirm-fallback.test.ts +142 -0
- package/src/ui.history-controller.test.ts +2 -1
- package/src/ui.history-lifecycle.test.ts +2 -1
- package/src/ui.history-render-hooks.test.ts +2 -1
- package/src/ui.history-shell.test.ts +2 -1
- package/src/ui.rail-overlay.test.ts +2 -1
- package/src/ui.rail-resize.test.ts +2 -1
- package/src/ui.rail-trigger-pending.test.ts +2 -1
- package/src/ui.ts +340 -2770
- package/src/utils/attachment-manager.ts +67 -67
- package/src/utils/constants.ts +3 -0
- package/src/utils/context-mention-controller.ts +323 -323
- package/src/utils/context-mention-manager.ts +40 -40
- package/src/utils/context-mention-orchestrator.ts +28 -0
- package/src/utils/event-stream-buffer.ts +50 -50
- package/src/utils/event-stream-store.ts +43 -43
- package/src/utils/throughput-tracker.ts +34 -34
- package/src/utils/virtual-scroller.ts +67 -67
- package/src/utils/visitor-store.test.ts +50 -0
- package/src/utils/visitor-store.ts +23 -5
- package/src/voice/__fixtures__/voice-wire/README.md +1 -0
- package/src/voice/__fixtures__/voice-wire/client/cancel.json +3 -0
- package/src/voice/__fixtures__/voice-wire/client/context.json +4 -0
- package/src/voice/__fixtures__/voice-wire/client/delegation_result.json +6 -0
- package/src/voice/__fixtures__/voice-wire/client/delegation_update.json +6 -0
- package/src/voice/__fixtures__/voice-wire/client/ping.json +3 -0
- package/src/voice/__fixtures__/voice-wire/client/playback_progress.json +5 -0
- package/src/voice/__fixtures__/voice-wire/client/start.json +3 -0
- package/src/voice/__fixtures__/voice-wire/server/artifact.json +11 -0
- package/src/voice/__fixtures__/voice-wire/server/attached.json +4 -0
- package/src/voice/__fixtures__/voice-wire/server/audio_clear.json +4 -0
- package/src/voice/__fixtures__/voice-wire/server/audio_end.json +3 -0
- package/src/voice/__fixtures__/voice-wire/server/delegation_cancelled.json +5 -0
- package/src/voice/__fixtures__/voice-wire/server/delegation_completed.json +8 -0
- package/src/voice/__fixtures__/voice-wire/server/delegation_started.json +15 -0
- package/src/voice/__fixtures__/voice-wire/server/error.json +6 -0
- package/src/voice/__fixtures__/voice-wire/server/metrics.json +10 -0
- package/src/voice/__fixtures__/voice-wire/server/pong.json +3 -0
- package/src/voice/__fixtures__/voice-wire/server/session_config.json +16 -0
- package/src/voice/__fixtures__/voice-wire/server/transcript_final.json +7 -0
- package/src/voice/__fixtures__/voice-wire/server/transcript_interim.json +4 -0
- package/src/voice/__fixtures__/voice-wire/server/transcript_partial.json +6 -0
- package/src/voice/__fixtures__/voice-wire/server/transcript_update.json +10 -0
- package/src/voice/__fixtures__/voice-wire/server/warning.json +5 -0
- package/src/voice/audio-playback-manager.test.ts +57 -0
- package/src/voice/audio-playback-manager.ts +120 -98
- package/src/voice/browser-voice-provider.ts +37 -37
- package/src/voice/fallback-speech-engine.ts +22 -16
- package/src/voice/keyed-voice-transcript.ts +314 -0
- package/src/voice/mic-state-styles.ts +182 -0
- package/src/voice/read-aloud-controller.ts +46 -44
- package/src/voice/runtype-speech-engine.ts +35 -33
- package/src/voice/runtype-voice-provider.ts +670 -189
- package/src/voice/session-voice-wiring.ts +266 -0
- package/src/voice/voice-delegation.test.ts +71 -0
- package/src/voice/voice-delegation.ts +364 -0
- package/src/voice/voice-turn-tracker.ts +6 -6
- package/src/voice/voice.test.ts +981 -8
- package/src/voice/worklet-playback-engine.test.ts +81 -0
- package/src/voice/worklet-playback-engine.ts +21 -3
- package/src/voice-runtime-loader.ts +4 -1
- package/src/voice-runtime.ts +7 -0
- package/src/webmcp-runtime-entry.ts +41 -39
- package/dist/approval-ui-3NMYNXBD.js +0 -1
- package/dist/chunk-5EIIHQLQ.js +0 -1
- package/dist/chunk-7CO4T5KB.js +0 -1
- package/dist/chunk-EFJBUH5F.js +0 -1
- package/dist/chunk-R2TMIMDI.js +0 -3
- package/dist/chunk-UTVLOTWB.js +0 -9
- package/dist/context-mentions-45MODWOY.js +0 -161
- package/dist/event-stream-view-GL3ADRY2.js +0 -1
- package/dist/runtype-tts-entry-UJAEF7NZ.js +0 -1
- package/dist/voice-runtime-7DA7MJH4.js +0 -1
- package/dist/webmcp-runtime-JI7T4QYF.js +0 -6
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import{b as Y,d as Z,f as ne}from"./chunk-UTVLOTWB.js";import{b as ee,c as Q,e as te}from"./chunk-R2TMIMDI.js";import{a as G}from"./chunk-7NQ4ZTHF.js";import{a as X,b as J}from"./chunk-Q735PSZL.js";import{a as S,c as C}from"./chunk-76IELU7F.js";import{X as ue}from"lucide";var ie=null,oe=s=>{ie=s},D=(s,e,t,n)=>ie?.(s,e,t,n)??null;function re(s){let{ref:e,config:t,onRemove:n}=s;if(t.renderMentionChip){let u="resolving",A,T=t.renderMentionChip({ref:e,status:u,payload:A,remove:n});return{get el(){return T},setStatus:(L,E)=>{if(L===u&&E===A)return;u=L,A=E;let H=t.renderMentionChip({ref:e,status:u,payload:A,remove:n});T.replaceWith(H),T=H}}}let i=e.iconName??t.chipIconName??"at-sign",o=C("div",{className:"persona-mention-chip",attrs:{"data-persona-mention-chip":"","data-status":"resolving",title:e.label}}),r=S("span","persona-mention-chip-icon"),d=u=>{r.replaceChildren();let A=D(u,13,"currentColor",2);A&&r.appendChild(A)};d(i);let a=S("span","persona-mention-chip-spinner"),l=C("span",{className:"persona-mention-chip-label",text:e.label}),x=C("button",{className:"persona-mention-chip-remove",attrs:{type:"button","aria-label":`Remove ${e.label} context`}}),p=G(ue,11,"currentColor",2.5);return p?x.appendChild(p):x.textContent="\xD7",x.addEventListener("click",u=>{u.preventDefault(),u.stopPropagation(),n()}),o.appendChild(a),o.appendChild(l),o.appendChild(x),{el:o,setStatus:u=>{o.setAttribute("data-status",u),u==="resolving"?(a.parentNode!==o&&o.insertBefore(a,l),r.parentNode===o&&r.remove(),o.setAttribute("title",e.label)):(a.parentNode===o&&a.remove(),r.parentNode!==o&&o.insertBefore(r,l),u==="error"?(d("triangle-alert"),o.setAttribute("title",`Couldn't add ${e.label} to context`)):(d(i),o.setAttribute("title",e.label)))}}}function $(s,e){return{sourceId:s.id,itemId:e.id,label:e.label,iconName:e.iconName,color:e.color}}var se=(s,e)=>`${s}\0${e}`,q=class{constructor(e){this.mentions=[];this.opts=e,this.updateRowVisibility()}get maxMentions(){return this.opts.mentionConfig.maxMentions??8}hasMentions(){return this.mentions.length>0}add(e,t,n=""){let i=se(e.id,t.id);if(this.mentions.some(d=>d.key===i))return this.reject(e,t,"duplicate");if(this.atLimit())return this.reject(e,t,"limit");let o=$(e,t),r={key:i,source:e,item:t,ref:o,status:"resolving",args:n};return r.chip=re({ref:o,config:this.opts.mentionConfig,onRemove:()=>this.remove(i)}),r.chip.el.setAttribute("data-persona-chip-enter",""),r.chip.el.addEventListener("animationend",()=>r.chip?.el.removeAttribute("data-persona-chip-enter"),{once:!0}),this.opts.contextRow.appendChild(r.chip.el),this.startPending(r),this.updateRowVisibility(),!0}atLimit(){return this.mentions.length>=this.maxMentions}admit(e,t){return this.atLimit()?this.reject(e,t,"limit"):!0}track(e,t,n,i="",o){let r={key:e,source:t,item:n,ref:$(t,n),status:"resolving",args:i,reportStatus:o};this.startPending(r)}reject(e,t,n){return this.opts.mentionConfig.onMentionRejected?.(t,n),this.opts.emit?.("rejected",{sourceId:e.id,itemId:t.id,reason:n}),!1}startPending(e){this.mentions.push(e),e.source.resolveOn==="submit"?(e.status="ready",e.chip?.setStatus("ready"),e.reportStatus?.("resolved")):e.resolvePromise=this.resolvePending(e),this.opts.announce(`Added ${e.ref.label} to context`)}buildResolveContext(e,t,n=this.opts.getComposerText()){return{messages:this.opts.getMessages(),config:this.opts.getConfig(),composerText:n,args:t,signal:e}}async resolvePending(e){let t=new AbortController;e.abort=t;try{let n=await e.source.resolve(e.item,this.buildResolveContext(t.signal,e.args));if(t.signal.aborted)return;e.payload=n,e.status="ready",e.chip?.setStatus("ready",n),e.reportStatus?.("resolved")}catch(n){if(t.signal.aborted)return;e.status="error",e.chip?.setStatus("error"),e.reportStatus?.("error"),(this.opts.announceError??this.opts.announce)(`Couldn't attach ${e.ref.label} to context`),this.opts.mentionConfig.onMentionResolveError?.(e.item,n),this.opts.emit?.("resolve-error",{sourceId:e.source.id,itemId:e.item.id})}}remove(e){let t=this.mentions.findIndex(i=>i.key===e);if(t===-1)return;let[n]=this.mentions.splice(t,1);n.abort?.abort(),n.chip?.el.remove(),this.updateRowVisibility(),this.opts.announce(`Removed ${n.ref.label} from context`)}getRefs(){return this.mentions.map(e=>e.ref)}removeLast(){let e=this.mentions[this.mentions.length-1];return e?(this.remove(e.key),!0):!1}clear(){for(let e of this.mentions)e.abort?.abort(),e.chip?.el.remove();this.mentions.length=0,this.updateRowVisibility()}collectForSubmit(){let e=[...this.mentions],t=e.map(o=>o.ref),n=this.opts.getComposerText();for(let o of e)o.chip?.el.remove();return this.mentions.length=0,this.updateRowVisibility(),{refs:t,finalize:async()=>{var x;let o=await Promise.all(e.map(async p=>{try{return p.source.resolveOn==="submit"?await p.source.resolve(p.item,this.buildResolveContext(new AbortController().signal,p.args,n)):(p.resolvePromise&&await p.resolvePromise,p.payload??null)}catch(M){try{this.opts.mentionConfig.onMentionResolveError?.(p.item,M)}catch(u){typeof console<"u"&&console.warn("[Persona] onMentionResolveError callback threw",u)}return this.opts.emit?.("resolve-error",{sourceId:p.source.id,itemId:p.item.id}),null}})),r=[],d=[],a={},l=new Set;for(let p=0;p<e.length;p++){let M=e[p],u=o[p];if(!u)continue;let A=se(M.source.id,M.item.id);if(!l.has(A)){if(l.add(A),u.llmAppend&&u.llmAppend.trim())try{r.push(Y({label:M.ref.label,text:u.llmAppend,ref:M.ref,item:M.item},r.length,this.opts.mentionConfig.llmFormat))}catch(T){typeof console<"u"&&console.warn("[Persona] context-mention llmFormat threw",T)}u.contentParts?.length&&d.push(...u.contentParts),u.context&&((a[x=M.source.id]??(a[x]={}))[M.item.id]=u.context)}}return{blocks:r,contentParts:d,context:a}}}}updateRowVisibility(){Z(this.opts.contextRow)}};var ae=`
|
|
2
|
-
.persona-mention-menu {
|
|
3
|
-
box-sizing: border-box;
|
|
4
|
-
display: flex;
|
|
5
|
-
flex-direction: column;
|
|
6
|
-
max-height: var(--persona-mention-menu-max-height, 280px);
|
|
7
|
-
overflow: hidden;
|
|
8
|
-
background: var(--persona-mention-menu-bg, var(--persona-surface, #ffffff));
|
|
9
|
-
border: 1px solid var(--persona-mention-menu-border, var(--persona-border, #e5e7eb));
|
|
10
|
-
border-radius: var(--persona-mention-menu-radius, 10px);
|
|
11
|
-
box-shadow: var(--persona-mention-menu-shadow, 0 8px 28px rgba(0, 0, 0, 0.12));
|
|
12
|
-
font-family: var(--persona-font-family, inherit);
|
|
13
|
-
}
|
|
14
|
-
.persona-mention-list {
|
|
15
|
-
min-height: 0;
|
|
16
|
-
overflow-y: auto;
|
|
17
|
-
padding: 4px;
|
|
18
|
-
}
|
|
19
|
-
.persona-mention-search {
|
|
20
|
-
display: flex;
|
|
21
|
-
align-items: center;
|
|
22
|
-
gap: 6px;
|
|
23
|
-
padding: 8px 10px;
|
|
24
|
-
border-bottom: 1px solid var(--persona-mention-menu-border, var(--persona-border, #e5e7eb));
|
|
25
|
-
}
|
|
26
|
-
.persona-mention-search-icon {
|
|
27
|
-
display: inline-flex;
|
|
28
|
-
align-items: center;
|
|
29
|
-
flex: 0 0 auto;
|
|
30
|
-
color: var(--persona-mention-group-fg, var(--persona-muted, #6b7280));
|
|
31
|
-
}
|
|
32
|
-
.persona-mention-search-input {
|
|
33
|
-
flex: 1 1 auto;
|
|
34
|
-
min-width: 0;
|
|
35
|
-
padding: 0;
|
|
36
|
-
border: none;
|
|
37
|
-
outline: none;
|
|
38
|
-
background: transparent;
|
|
39
|
-
font-family: inherit;
|
|
40
|
-
/* 16px, not 14px: iOS Safari zooms the page when focusing an input under 16px. */
|
|
41
|
-
font-size: 16px;
|
|
42
|
-
line-height: 1.4;
|
|
43
|
-
color: var(--persona-text, #111827);
|
|
44
|
-
}
|
|
45
|
-
.persona-mention-search-input::placeholder {
|
|
46
|
-
color: var(--persona-mention-group-fg, var(--persona-muted, #6b7280));
|
|
47
|
-
}
|
|
48
|
-
.persona-mention-group + .persona-mention-group {
|
|
49
|
-
margin-top: 2px;
|
|
50
|
-
border-top: 1px solid var(--persona-mention-menu-border, var(--persona-border, #f1f1f1));
|
|
51
|
-
padding-top: 2px;
|
|
52
|
-
}
|
|
53
|
-
.persona-mention-group-header {
|
|
54
|
-
padding: 6px 8px 4px;
|
|
55
|
-
font-size: 11px;
|
|
56
|
-
font-weight: 600;
|
|
57
|
-
text-transform: uppercase;
|
|
58
|
-
letter-spacing: 0.04em;
|
|
59
|
-
color: var(--persona-mention-group-fg, var(--persona-muted, #6b7280));
|
|
60
|
-
}
|
|
61
|
-
.persona-mention-option {
|
|
62
|
-
display: flex;
|
|
63
|
-
align-items: center;
|
|
64
|
-
gap: 8px;
|
|
65
|
-
padding: 7px 8px;
|
|
66
|
-
border-radius: 6px;
|
|
67
|
-
cursor: pointer;
|
|
68
|
-
color: var(--persona-text, #111827);
|
|
69
|
-
}
|
|
70
|
-
.persona-mention-option[data-active="true"] {
|
|
71
|
-
background: var(--persona-mention-option-active-bg, var(--persona-container, #f1f5f9));
|
|
72
|
-
}
|
|
73
|
-
.persona-mention-option-icon {
|
|
74
|
-
display: inline-flex;
|
|
75
|
-
align-items: center;
|
|
76
|
-
flex: 0 0 auto;
|
|
77
|
-
opacity: 0.7;
|
|
78
|
-
}
|
|
79
|
-
.persona-mention-option-text {
|
|
80
|
-
display: flex;
|
|
81
|
-
flex-direction: column;
|
|
82
|
-
min-width: 0;
|
|
83
|
-
}
|
|
84
|
-
.persona-mention-option-labelline {
|
|
85
|
-
display: flex;
|
|
86
|
-
align-items: baseline;
|
|
87
|
-
gap: 6px;
|
|
88
|
-
min-width: 0;
|
|
89
|
-
}
|
|
90
|
-
.persona-mention-option-label {
|
|
91
|
-
font-size: 13px;
|
|
92
|
-
line-height: 1.3;
|
|
93
|
-
overflow: hidden;
|
|
94
|
-
text-overflow: ellipsis;
|
|
95
|
-
white-space: nowrap;
|
|
96
|
-
}
|
|
97
|
-
.persona-mention-option-arghint {
|
|
98
|
-
flex: 0 0 auto;
|
|
99
|
-
font-size: 12px;
|
|
100
|
-
line-height: 1.3;
|
|
101
|
-
color: var(--persona-muted, #6b7280);
|
|
102
|
-
opacity: 0.85;
|
|
103
|
-
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
104
|
-
}
|
|
105
|
-
.persona-mention-option-desc {
|
|
106
|
-
font-size: 11px;
|
|
107
|
-
line-height: 1.3;
|
|
108
|
-
color: var(--persona-muted, #6b7280);
|
|
109
|
-
overflow: hidden;
|
|
110
|
-
text-overflow: ellipsis;
|
|
111
|
-
white-space: nowrap;
|
|
112
|
-
}
|
|
113
|
-
.persona-mention-status,
|
|
114
|
-
.persona-mention-empty,
|
|
115
|
-
.persona-mention-hint {
|
|
116
|
-
padding: 7px 8px;
|
|
117
|
-
font-size: 12px;
|
|
118
|
-
color: var(--persona-muted, #6b7280);
|
|
119
|
-
}
|
|
120
|
-
.persona-mention-error {
|
|
121
|
-
display: flex;
|
|
122
|
-
align-items: center;
|
|
123
|
-
justify-content: space-between;
|
|
124
|
-
gap: 8px;
|
|
125
|
-
color: var(--persona-mention-error, #dc2626);
|
|
126
|
-
}
|
|
127
|
-
.persona-mention-error-text {
|
|
128
|
-
min-width: 0;
|
|
129
|
-
overflow: hidden;
|
|
130
|
-
text-overflow: ellipsis;
|
|
131
|
-
white-space: nowrap;
|
|
132
|
-
}
|
|
133
|
-
.persona-mention-retry {
|
|
134
|
-
flex: 0 0 auto;
|
|
135
|
-
padding: 4px 8px;
|
|
136
|
-
border: 1px solid var(--persona-mention-error, #dc2626);
|
|
137
|
-
border-radius: 6px;
|
|
138
|
-
background: transparent;
|
|
139
|
-
color: var(--persona-mention-error, #dc2626);
|
|
140
|
-
font: inherit;
|
|
141
|
-
font-size: 12px;
|
|
142
|
-
cursor: pointer;
|
|
143
|
-
}
|
|
144
|
-
.persona-mention-retry:hover {
|
|
145
|
-
background: var(--persona-palette-colors-black-alpha-50, rgba(0, 0, 0, 0.06));
|
|
146
|
-
}
|
|
147
|
-
.persona-mention-hint {
|
|
148
|
-
font-style: italic;
|
|
149
|
-
opacity: 0.8;
|
|
150
|
-
}
|
|
151
|
-
@media (pointer: coarse) {
|
|
152
|
-
.persona-mention-option {
|
|
153
|
-
min-height: 44px;
|
|
154
|
-
}
|
|
155
|
-
.persona-mention-retry {
|
|
156
|
-
min-height: 36px;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
`;function V(s){let e=s.replace(/^\s+/,""),t=e.search(/\s/);return t===-1?{name:e,args:""}:{name:e.slice(0,t),args:e.slice(t+1).trim()}}import{Search as he}from"lucide";var le=new Map,ge=(s,e,t)=>{let n=`${s}|${e}|${t}`,i=le.get(n);return i===void 0&&(i=D(s,e,"currentColor",t),le.set(n,i)),i?i.cloneNode(!0):null};function ce(s){let{config:e,listboxId:t}=s,n=C("div",{className:"persona-mention-menu",attrs:{"data-persona-mention-menu":""}}),i=C("div",{className:"persona-mention-search",style:{display:"none"}}),o=S("span","persona-mention-search-icon"),r=G(he,15,"currentColor",2);r&&o.appendChild(r);let d=C("input",{className:"persona-mention-search-input",attrs:{type:"text",role:"combobox","aria-autocomplete":"list","aria-expanded":"false","aria-controls":t,"aria-label":e.searchPlaceholder??"Search context",placeholder:e.searchPlaceholder??"Search context\u2026",autocomplete:"off",autocapitalize:"off",spellcheck:"false"}});i.append(o,d),d.addEventListener("input",()=>s.onSearchInput?.(d.value)),d.addEventListener("keydown",c=>s.onSearchKeydown?.(c));let a=C("div",{className:"persona-mention-list",attrs:{role:"listbox",id:t,"aria-label":"Context mentions"}});n.append(i,a);let l=[],x=[],p=-1,M=new Map,u=(c,h)=>`${c}\0${h}`,A=c=>`${t}-opt-${c}`,T=c=>`${t}-grp-${c}`,K=(c,h)=>{let m=l[c];m&&(h?m.setAttribute("data-active","true"):m.removeAttribute("data-active"),m.setAttribute("aria-selected",h?"true":"false"),x[c]?.(h))},L=(c,h=!0)=>{p>=0&&p!==c&&K(p,!1),p=c;let m=l[c];m?(K(c,!0),h&&m.scrollIntoView?.({block:"nearest"}),a.setAttribute("aria-activedescendant",m.id),d.setAttribute("aria-activedescendant",m.id)):(a.removeAttribute("aria-activedescendant"),d.removeAttribute("aria-activedescendant"))},E=(c,h)=>{let m=T(h),v=C("div",{className:"persona-mention-group",attrs:{role:"group","aria-labelledby":m}});return v.appendChild(C("div",{className:"persona-mention-group-header",attrs:{id:m},text:c})),v},H=()=>{let c=C("div",{className:"persona-mention-option",attrs:{role:"option","aria-selected":"false"}}),h=S("span","persona-mention-option-icon");c.appendChild(h);let m="",v=S("span","persona-mention-option-text"),w=S("span","persona-mention-option-labelline"),I=S("span","persona-mention-option-label");w.appendChild(I),v.appendChild(w),c.appendChild(v);let y=null,b=null,f={el:c,index:0,update:(g,O,P)=>{f.index=O,c.id=A(O),c.setAttribute("aria-setsize",String(P)),c.setAttribute("aria-posinset",String(O+1)),c.removeAttribute("data-active"),c.setAttribute("aria-selected","false");let R=g.iconName??e.chipIconName??"at-sign";if(R!==m){m=R;let N=ge(R,15,2);h.replaceChildren(...N?[N]:[])}I.textContent!==g.label&&(I.textContent=g.label);let W=g.commandArgsPlaceholder?`\u2039${g.commandArgsPlaceholder}\u203A`:null;W?(y||(y=S("span","persona-mention-option-arghint"),w.appendChild(y)),y.textContent!==W&&(y.textContent=W)):y&&(y.remove(),y=null),g.description?(b||(b=S("span","persona-mention-option-desc"),v.appendChild(b)),b.textContent!==g.description&&(b.textContent=g.description)):b&&(b.remove(),b=null)}};return c.addEventListener("mousedown",g=>{g.button===0&&(g.preventDefault(),s.onSelectIndex(f.index))}),c.addEventListener("mouseenter",()=>s.onHoverIndex(f.index)),f},de=(c,h,m,v,w)=>{let I=C("div",{className:"persona-mention-option",attrs:{role:"option",id:A(v),"aria-selected":"false","aria-setsize":String(w),"aria-posinset":String(v+1)}}),y=b=>{I.replaceChildren(e.renderMentionItem({item:c,source:h,query:m,active:b,index:v}))};return y(!1),I.addEventListener("mousedown",b=>{b.button===0&&(b.preventDefault(),s.onSelectIndex(v))}),I.addEventListener("mouseenter",()=>s.onHoverIndex(v)),{el:I,paint:y}},pe=c=>{let h=C("div",{className:"persona-mention-status persona-mention-error"});if(h.appendChild(C("span",{className:"persona-mention-error-text",text:`Couldn't load ${c.label}`})),s.onRetry){let m=C("button",{className:"persona-mention-retry",attrs:{type:"button"},text:"Retry"});m.addEventListener("mousedown",v=>v.preventDefault()),m.addEventListener("click",v=>{v.preventDefault(),s.onRetry(c.id)}),h.appendChild(m)}return h};return{el:n,render:c=>{a.replaceChildren(),l=[],x=[],p=-1;let h=new Set,m=0,v=0,w=0,I=0,y=0,b=c.groups.reduce((f,g)=>g.status==="ready"?f+g.items.length:f,0);for(let f of c.groups)if(f.status==="loading"){w++;let g=E(f.source.label,y++);g.appendChild(C("div",{className:"persona-mention-status persona-mention-loading",attrs:{role:"presentation"},text:"Loading\u2026"})),a.appendChild(g)}else if(f.status==="error"){I++;let g=E(f.source.label,y++);g.appendChild(pe(f.source)),a.appendChild(g)}else if(f.status==="ready"&&f.items.length>0){let g=new Map;for(let P of f.items){let R=P.group??f.source.label,W=g.get(R);W?W.push(P):g.set(R,[P])}let O=Array.from(g.entries());O.forEach(([P,R],W)=>{let N=E(P,y++);for(let _ of R){let U=m++,B;if(e.renderMentionItem){let k=de(_,f.source,c.query,U,b);B=k.el,x.push(k.paint)}else{let k=u(f.source.id,_.id),z=h.has(k)?void 0:M.get(k);z||(z=H(),h.has(k)||M.set(k,z)),h.add(k),z.update(_,U,b),B=z.el,x.push(null)}l.push(B),N.appendChild(B),v++}f.truncated&&W===O.length-1&&N.appendChild(C("div",{className:"persona-mention-hint",attrs:{role:"presentation"},text:"Keep typing to narrow\u2026"})),a.appendChild(N)})}for(let f of M.keys())h.has(f)||M.delete(f);v===0&&w===0&&I===0&&a.appendChild(C("div",{className:"persona-mention-empty",attrs:{role:"presentation"},text:"No matches"})),l.length>0?L(Math.min(Math.max(0,c.activeIndex),l.length-1)):(a.removeAttribute("aria-activedescendant"),d.removeAttribute("aria-activedescendant"))},setActiveIndex:L,destroy:()=>{a.replaceChildren(),l=[],M.clear(),n.remove()},showSearch:(c,h)=>{d.value=c,h&&(d.placeholder=h),i.style.display="",d.setAttribute("aria-expanded","true"),d.focus(),typeof requestAnimationFrame=="function"&&requestAnimationFrame(()=>{i.style.display!=="none"&&d.focus()})},hideSearch:()=>{i.style.display="none",d.value="",d.setAttribute("aria-expanded","false"),d.removeAttribute("aria-activedescendant")}}}var me=s=>!!s&&(typeof s=="object"||typeof s=="function")&&typeof s.then=="function",fe=0,F=class{constructor(e){this.popover=null;this.resizeObserver=null;this.isOpenState=!1;this.query="";this.triggerMatch=null;this.activeIndex=0;this.activeKey=null;this.pickerMode=!1;this.pickerTrigger=null;this.groups=[];this.flat=[];this.searchToken=0;this.searchAbort=null;this.debounceTimer=null;this.knownAsync=new Set;this.invokedForToken=new Set;this.lastAnnouncedCount=-1;this.triggerAnchorOffset=null;this.measuredTriggerIndex=null;this.opts=e;let t=e.mentionConfig,n=ne(t),i=n.filter(r=>r.sources.length>0);this.channels=i.length>0?i:[n[0]],this.activeChannel=this.channels[0],this.maxPerGroup=t.maxItemsPerGroup??6,this.debounceMs=t.searchDebounceMs??150,this.listboxId=`persona-mention-listbox-${++fe}`,this.menu=e.mentionConfig.renderMentionMenu?this.createHostMenu():ce({config:e.mentionConfig,listboxId:this.listboxId,onSelectIndex:r=>this.selectIndex(r),onHoverIndex:r=>this.setActiveIndex(r,!1),onRetry:r=>this.retrySource(r),onSearchInput:r=>this.setQuery(r),onSearchKeydown:r=>{this.handleKeydown(r)}});let o=e.composerInput.element;o.setAttribute("aria-haspopup","listbox"),o.setAttribute("aria-controls",this.listboxId)}get input(){return this.opts.composerInput}createHostMenu(){let e=document.createElement("div");e.setAttribute("data-persona-mention-menu",""),e.setAttribute("role","listbox"),e.id=this.listboxId;let t=()=>{let n=this.opts.mentionConfig.renderMentionMenu({query:this.query,groups:this.groups.map(i=>({source:i.source,items:i.items})),status:Object.fromEntries(this.groups.map(i=>[i.source.id,i.status])),activeIndex:this.activeIndex,select:i=>{let o=this.groups.find(r=>r.items.includes(i));o&&this.commit(o.source,i)},close:()=>this.close()});e.replaceChildren(n)};return{el:e,render:t,setActiveIndex:t,destroy:()=>e.remove()}}isOpen(){return this.isOpenState}openFromButton(e){let t=e&&this.channels.find(r=>r.trigger===e)||this.channels[0],n=this.input.getSelection().start,i=Q(this.input.getLogicalText(),n,[t]);if(i){this.pickerMode=!1,this.triggerMatch=i.match,this.isOpenState?(this.switchChannel(t),this.setQuery(i.match.query)):this.open(i.match.query,t),this.input.focus();return}let o=this.pickerTrigger;this.pickerMode=!0,this.pickerTrigger=t.trigger,this.triggerMatch=null,this.isOpenState?(o&&o!==t.trigger&&this.opts.onPickerOpenChange?.(!1,o,this.listboxId),this.switchChannel(t),this.setQuery("")):this.open("",t),this.menu.showSearch?this.menu.showSearch("",t.searchPlaceholder):this.input.focus(),this.opts.onPickerOpenChange?.(!0,t.trigger,this.listboxId)}onInput(){let e=this.input.getSelection().start,t=Q(this.input.getLogicalText(),e,this.channels);if(!t){this.isOpenState&&this.close();return}if(this.isInlineArgTail(t.channel,t.match.query)){this.triggerMatch=null,this.isOpenState&&this.close(!1);return}this.triggerMatch=t.match,this.isOpenState?(this.switchChannel(t.channel),this.measuredTriggerIndex!==t.match.triggerIndex&&this.updateTriggerAnchor(),this.setQuery(t.match.query)):this.open(t.match.query,t.channel)}switchChannel(e){e!==this.activeChannel&&(this.activeChannel=e,this.groups=[],this.activeIndex=0)}open(e,t){if(this.isOpenState=!0,this.activeChannel=t,this.groups=[],this.activeIndex=0,this.lastAnnouncedCount=-1,!this.popover){let n=this.canAnchorMenu();if(this.popover=J({anchor:this.opts.anchor,content:this.menu.el,placement:"top-start",matchAnchorWidth:!n,offset:6,container:this.opts.popoverContainer,horizontalOffset:n?()=>this.triggerAnchorOffset?.x??null:void 0,verticalOffset:n?()=>this.triggerAnchorOffset?.y??null:void 0,onDismiss:()=>this.close(!1)}),n){let i=this.opts.anchor.getBoundingClientRect().width;this.menu.el.style.minWidth=`${Math.min(220,i)}px`}}this.updateTriggerAnchor(),this.popover.open(),X(this.menu.el,"persona-mention-menu",ae),this.observeComposerResize(),this.opts.emit?.("opened",{trigger:t.trigger}),this.setQuery(e)}observeComposerResize(){typeof ResizeObserver>"u"||this.resizeObserver||(this.resizeObserver=new ResizeObserver(()=>{this.isOpenState&&(this.updateTriggerAnchor(),this.popover?.reposition())}),this.resizeObserver.observe(this.opts.anchor))}disconnectComposerResize(){this.resizeObserver?.disconnect(),this.resizeObserver=null}canAnchorMenu(){return this.isInlineDisplay()&&!!this.input.getLogicalRangeRect}updateTriggerAnchor(){let e=this.triggerMatch,t=this.input.getLogicalRangeRect;if(this.measuredTriggerIndex=e?.triggerIndex??null,this.triggerAnchorOffset=null,!e||!t)return;let n=t(e.triggerIndex,e.triggerIndex+1);if(!n)return;let i=this.opts.anchor.getBoundingClientRect(),o=n.top-i.top,r=this.input.element,d=typeof getComputedStyle=="function"&&getComputedStyle(r).direction==="rtl";this.triggerAnchorOffset={x:d?null:n.left-i.left,y:o}}close(e=!0){this.isOpenState&&(this.isOpenState=!1,this.disconnectComposerResize(),this.debounceTimer&&clearTimeout(this.debounceTimer),this.searchAbort?.abort(),this.searchToken++,this.popover?.close(),this.input.element.removeAttribute("aria-activedescendant"),this.pickerMode&&(this.pickerMode=!1,this.menu.hideSearch?.(),this.opts.onPickerOpenChange?.(!1,this.pickerTrigger??this.activeChannel.trigger,this.listboxId),this.pickerTrigger=null,e&&this.input.focus()))}setQuery(e){this.query=e,this.activeIndex=0,this.activeKey=null;let t=++this.searchToken;this.invokedForToken.clear(),this.searchAbort?.abort(),this.searchAbort=new AbortController;for(let n of this.activeChannel.sources)this.knownAsync.has(n.id)?this.setGroupStatus(n.id,"loading"):(this.invokedForToken.add(n.id),this.invokeSource(n,t));this.render(),this.debounceTimer&&clearTimeout(this.debounceTimer),this.debounceTimer=setTimeout(()=>{if(t===this.searchToken)for(let n of this.activeChannel.sources)this.knownAsync.has(n.id)&&!this.invokedForToken.has(n.id)&&this.invokeSource(n,t)},this.debounceMs)}invokeSource(e,t){let n={messages:this.opts.getMessages(),config:this.opts.getConfig(),signal:this.searchAbort.signal},i;try{i=e.search(this.query,n)}catch{this.setGroupStatus(e.id,"error"),this.render();return}me(i)?(this.knownAsync.add(e.id),this.setGroupStatus(e.id,"loading"),i.then(o=>{t===this.searchToken&&(this.setGroupItems(e.id,o),this.render())}).catch(()=>{t===this.searchToken&&(this.setGroupStatus(e.id,"error"),this.render())})):this.setGroupItems(e.id,i)}getOrCreateGroup(e){let t=this.groups.find(n=>n.source.id===e.id);if(!t){t={source:e,items:[],status:"loading",truncated:!1};let n=this.activeChannel.sources;this.groups.push(t),this.groups.sort((i,o)=>n.findIndex(r=>r.id===i.source.id)-n.findIndex(r=>r.id===o.source.id))}return t}setGroupStatus(e,t){let n=this.activeChannel.sources.find(i=>i.id===e);n&&(this.getOrCreateGroup(n).status=t)}setGroupItems(e,t){let n=this.activeChannel.sources.find(o=>o.id===e);if(!n)return;let i=this.getOrCreateGroup(n);i.truncated=t.length>this.maxPerGroup,i.items=t.slice(0,this.maxPerGroup),i.status=i.items.length===0?"empty":"ready"}keyOf(e){return JSON.stringify([e.source.id,e.item.id])}rebuildFlat(){this.flat=[];for(let e of this.groups)if(e.status==="ready")for(let t of e.items)this.flat.push({source:e.source,item:t});if(this.activeKey){let e=this.flat.findIndex(t=>this.keyOf(t)===this.activeKey);this.activeIndex=e>=0?e:Math.min(this.activeIndex,Math.max(0,this.flat.length-1))}else this.activeIndex>=this.flat.length&&(this.activeIndex=Math.max(0,this.flat.length-1))}viewModel(){return{query:this.query,groups:this.groups,activeIndex:this.activeIndex}}render(){this.rebuildFlat(),this.menu.render(this.viewModel()),this.syncActiveDescendant(),this.popover?.reposition();let e=this.groups.some(t=>t.status==="loading");this.flat.length===0&&e||this.flat.length!==this.lastAnnouncedCount&&(this.lastAnnouncedCount=this.flat.length,this.opts.announce(this.flat.length===0?"No matches":this.flat.length===1?"1 result":`${this.flat.length} results`),this.opts.emit?.("searched",{query:this.query,results:this.flat.length}))}setActiveIndex(e,t=!0){e<0||e>=this.flat.length||(this.activeIndex=e,this.activeKey=this.keyOf(this.flat[e]),this.menu.setActiveIndex(e,t),this.syncActiveDescendant())}syncActiveDescendant(){this.isOpenState&&!this.pickerMode&&this.activeIndex>=0&&this.activeIndex<this.flat.length?this.input.element.setAttribute("aria-activedescendant",`${this.listboxId}-opt-${this.activeIndex}`):this.input.element.removeAttribute("aria-activedescendant")}retrySource(e){let t=this.activeChannel.sources.find(n=>n.id===e);!t||!this.searchAbort||(this.setGroupStatus(e,"loading"),this.render(),this.invokeSource(t,this.searchToken),this.render())}handleKeydown(e){if(!this.isOpenState)return!1;switch(e.key){case"ArrowDown":return this.flat.length===0||(e.preventDefault(),this.setActiveIndex((this.activeIndex+1)%this.flat.length)),!0;case"ArrowUp":return this.flat.length===0||(e.preventDefault(),this.setActiveIndex((this.activeIndex-1+this.flat.length)%this.flat.length)),!0;case"Home":return this.flat.length===0||(e.preventDefault(),this.setActiveIndex(0)),!0;case"End":return this.flat.length===0||(e.preventDefault(),this.setActiveIndex(this.flat.length-1)),!0;case"Enter":case"Tab":return this.flat.length===0?(this.close(),!1):(e.preventDefault(),this.selectIndex(this.activeIndex),!0);case"Escape":return e.preventDefault(),this.close(),!0;case"Backspace":return this.query.length===0&&this.close(),!1;default:return!1}}selectIndex(e){let t=this.flat[e];t&&this.commit(t.source,t.item)}deriveArgs(e){return V(e).args}isInlineCommand(e){return e.command==="server"||e.commandArgsPlaceholder!=null}commit(e,t){let n=t.command;if(this.isInlineCommand(t)){this.completeCommandInline(e,t);return}if(n==="action"){let o=this.deriveArgs(this.query);this.stripQuery(),this.close(),this.runAction(t,o),this.opts.emit?.("command",{sourceId:e.id,itemId:t.id,kind:"action",args:o}),this.input.focus();return}if(n==="prompt"){let o=this.deriveArgs(this.query),r=this.captureStripTarget();this.close(),this.runPromptMacro(e,t,o,r),this.opts.emit?.("command",{sourceId:e.id,itemId:t.id,kind:"prompt",args:o});return}if(this.isInlineDisplay()){this.commitInlineMention(e,t);return}this.opts.onSelect(e,t,"")&&(this.stripQuery(),this.opts.emit?.("selected",{sourceId:e.id,itemId:t.id,label:t.label})),this.close(),this.input.focus()}isInlineDisplay(){return this.opts.mentionConfig.display==="inline"&&!!this.opts.onInsertMention&&!!this.input.insertMentionAtTrigger}commitInlineMention(e,t){if(this.opts.admitMention&&!this.opts.admitMention(e,t)){this.close(),this.input.focus();return}let n=$(e,t),i=this.triggerMatch?this.input.insertMentionAtTrigger(n,this.triggerMatch):this.input.insertMentionAtSelection?.(n)??null;i?(this.opts.onInsertMention(i,e,t,""),this.opts.emit?.("selected",{sourceId:e.id,itemId:t.id,label:t.label})):(this.opts.mentionConfig.onMentionRejected?.(t,"stale"),this.opts.emit?.("rejected",{sourceId:e.id,itemId:t.id,reason:"stale"})),this.triggerMatch=null,this.close(),this.input.focus()}completeCommandInline(e,t){let n=`${this.activeChannel.trigger}${t.label} `,i=this.input.getSelection().start,o=this.triggerMatch?this.triggerMatch.triggerIndex:i;if(this.input.replaceLogicalRange)this.input.replaceLogicalRange(o,i,n);else{let r=this.input.getValue();this.input.setValueWithCaret(r.slice(0,o)+n+r.slice(i),o+n.length)}this.triggerMatch=null,this.close(),this.opts.emit?.("command",{sourceId:e.id,itemId:t.id,kind:t.command??"prompt",phase:"armed"}),this.input.dispatchInput(),this.input.focus()}isInlineArgTail(e,t){let{name:n}=V(t);return!n||t.length<=n.length?!1:e.sources.some(i=>{let o=i.matchCommand?.(n);return!!o&&this.isInlineCommand(o)})}matchInlineCommand(e){for(let t of this.channels){if(!t.trigger)continue;let n=t.position==="anywhere"?[e]:t.position==="line-start"?e.split(`
|
|
160
|
-
`):[e.split(`
|
|
161
|
-
`)[0]];for(let i of n){if(!i.startsWith(t.trigger))continue;let{name:o,args:r}=V(i.slice(t.trigger.length));if(o)for(let d of t.sources){let a=d.matchCommand?.(o);if(a&&this.isInlineCommand(a))return{source:d,item:a,args:r}}}}return null}async dispatchInlineCommand(e){let t=this.matchInlineCommand(e);if(!t)return null;let{source:n,item:i,args:o}=t,r=i.command??"prompt";if(this.opts.emit?.("command",{sourceId:n.id,itemId:i.id,kind:r,args:o}),r==="action")return this.runAction(i,o),{kind:"action"};if(r==="prompt"){let a;try{a=await n.resolve(i,this.resolveContext(o,e))}catch(l){return typeof console<"u"&&console.warn("[Persona] inline prompt command resolve failed",l),null}return{kind:"prompt",sendText:a.insertText??a.llmAppend??e}}return{kind:"server",mentions:{refs:[],finalize:async()=>{let a=await n.resolve(i,this.resolveContext(o,e)),l={};return a.context&&(l[n.id]={[i.id]:a.context}),{blocks:[],contentParts:a.contentParts??[],context:l}}}}}resolveContext(e,t){return{messages:this.opts.getMessages(),config:this.opts.getConfig(),composerText:t,args:e,signal:new AbortController().signal}}runAction(e,t){if(e.action)try{Promise.resolve(e.action({args:t,config:this.opts.getConfig(),messages:this.opts.getMessages(),composer:this.input})).catch(n=>{typeof console<"u"&&console.warn("[Persona] context-mention command action failed",n)})}catch(n){typeof console<"u"&&console.warn("[Persona] context-mention command action failed",n)}}captureStripTarget(){return this.triggerMatch?{value:this.input.getValue(),start:this.triggerMatch.triggerIndex,end:this.input.getSelection().start}:null}async runPromptMacro(e,t,n,i){let o=this.input,r;try{r=await e.resolve(t,{messages:this.opts.getMessages(),config:this.opts.getConfig(),composerText:o.getValue(),args:n,signal:new AbortController().signal})}catch(a){typeof console<"u"&&console.warn("[Persona] context-mention prompt resolve failed",a);return}let d=r.insertText??r.llmAppend??"";t.insertMode==="insert-at-caret"&&i?o.replaceLogicalRange?(o.replaceLogicalRange(i.start,i.end,d),o.dispatchInput()):o.setValue(i.value.slice(0,i.start)+d+i.value.slice(i.end)):o.setValue(d),t.submitOnSelect&&o.submit()}stripQuery(){if(!this.triggerMatch)return;let e=this.input.getSelection().start;if(this.input.replaceLogicalRange)this.input.replaceLogicalRange(this.triggerMatch.triggerIndex,e,"");else{let t=te(this.input.getValue(),this.triggerMatch,e);this.input.setValueWithCaret(t.value,t.caret)}this.input.dispatchInput(),this.triggerMatch=null}destroy(){this.disconnectComposerResize(),this.debounceTimer&&clearTimeout(this.debounceTimer),this.searchAbort?.abort(),this.popover?.destroy(),this.menu.destroy();let e=this.input.element;e.removeAttribute("aria-haspopup"),e.removeAttribute("aria-controls"),e.removeAttribute("aria-activedescendant")}};var ve={position:"absolute",width:"1px",height:"1px",margin:"-1px",padding:"0",overflow:"hidden",clip:"rect(0 0 0 0)",clipPath:"inset(50%)",whiteSpace:"nowrap",border:"0"};function j(s,e){let t=document.createElement("div");t.className="persona-sr-only",t.setAttribute("aria-live",s),t.setAttribute("aria-atomic","true"),t.setAttribute("role",s==="assertive"?"alert":"status"),t.setAttribute("data-persona-mention-live-region","");let n=e.getRootNode();typeof ShadowRoot<"u"&&n instanceof ShadowRoot?(Object.assign(t.style,ve),document.body.appendChild(t)):e.appendChild(t);let o;return{announce:r=>{o!==void 0&&clearTimeout(o),t.textContent="",o=setTimeout(()=>{o=void 0,t.textContent=r},0)},destroy:()=>{o!==void 0&&clearTimeout(o),t.remove()}}}function Ce(s){let e=s.composerInput??ee(s.textarea),t=j("polite",s.liveRegionHost),n=j("assertive",s.liveRegionHost),i=l=>t.announce(l),o=l=>n.announce(l),r=new q({mentionConfig:s.mentionConfig,contextRow:s.contextRow,getMessages:s.getMessages,getConfig:s.getConfig,getComposerText:()=>e.getValue(),announce:i,announceError:o,emit:s.emit}),d=()=>new F({mentionConfig:s.mentionConfig,composerInput:e,anchor:s.anchor,getMessages:s.getMessages,getConfig:s.getConfig,onSelect:(l,x,p)=>r.add(l,x,p),onInsertMention:(l,x,p,M)=>r.track(l,x,p,M,u=>e.setMentionStatus?.(l,u)),admitMention:(l,x)=>r.admit(l,x),announce:i,popoverContainer:s.popoverContainer,onPickerOpenChange:s.onPickerOpenChange,emit:s.emit}),a=d();return{openMenu:l=>a.openFromButton(l),isMenuOpen:()=>a.isOpen(),handleInput:()=>a.onInput(),handleKeydown:l=>a.handleKeydown(l),hasMentions:()=>r.hasMentions(),getMentionRefs:()=>r.getRefs(),removeLastChip:()=>r.removeLast(),dispatchInlineCommand:l=>a.dispatchInlineCommand(l),collectForSubmit:()=>r.hasMentions()?r.collectForSubmit():null,untrackMention:l=>r.remove(l),rebindComposer:l=>{l!==e&&(a.destroy(),e=l,a=d())},clear:()=>r.clear(),destroy:()=>{a.destroy(),r.clear(),t.destroy(),n.destroy()}}}export{Ce as mountContextMentions,oe as setMentionIconRenderer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as _e,d as We,e as $e,f as Ve}from"./chunk-VK6JOIYJ.js";import{a as O}from"./chunk-7NQ4ZTHF.js";import{a as l}from"./chunk-76IELU7F.js";import{Check as Je,ChevronDown as at,ChevronRight as it,Clipboard as ze,ClipboardCopy as Ue,Search as lt,X as je}from"lucide";function Z(t,e){e&&e.split(/\s+/).forEach(n=>n&&t.classList.add(n))}var q={flow_:{bg:"var(--persona-event-badge-flow-bg, #dcfce7)",text:"var(--persona-event-badge-flow-fg, #15803d)"},step_:{bg:"var(--persona-event-badge-step-bg, #f5f5f5)",text:"var(--persona-event-badge-step-fg, #0a0a0a)"},reasoning_:{bg:"var(--persona-event-badge-reasoning-bg, #fef9c3)",text:"var(--persona-event-badge-reasoning-fg, #a16207)"},tool_:{bg:"var(--persona-event-badge-tool-bg, #f3e8ff)",text:"var(--persona-event-badge-tool-fg, #6b21a8)"},agent_:{bg:"var(--persona-event-badge-agent-bg, #ccfbf1)",text:"var(--persona-event-badge-agent-fg, #115e59)"},error:{bg:"var(--persona-event-badge-error-bg, #fee2e2)",text:"var(--persona-event-badge-error-fg, #b91c1c)"}};q.execution_error=q.error;q.execution_=q.flow_;q.turn_=q.agent_;q.text_=q.agent_;var pt={bg:"var(--persona-event-badge-default-bg, #f3f4f6)",text:"var(--persona-event-badge-default-fg, #4b5563)"},ut=["flowName","stepName","reasoningText","text","name","tool","toolName"],dt=100;function qe(t,e){if(e[t])return e[t];for(let n of Object.keys(e))if(n.endsWith("_")&&t.startsWith(n))return e[n]}function ct(t,e){return(e&&qe(t,e))??qe(t,q)??pt}function ft(t){return/^#[0-9a-fA-F]{6}$/.test(t)?`${t}50`:`color-mix(in srgb, ${t} 31%, transparent)`}function mt(t,e){return`+${((t-e)/1e3).toFixed(3)}s`}function ht(t){let e=new Date(t),n=String(e.getHours()).padStart(2,"0"),r=String(e.getMinutes()).padStart(2,"0"),i=String(e.getSeconds()).padStart(2,"0"),a=String(e.getMilliseconds()).padStart(3,"0");return`${n}:${r}:${i}.${a}`}function gt(t,e){try{let n=JSON.parse(t);if(typeof n!="object"||n===null)return null;for(let r of e){let i=r.split("."),a=n;for(let p of i)if(a&&typeof a=="object"&&a!==null)a=a[p];else{a=void 0;break}if(typeof a=="string"&&a.trim())return a.trim()}}catch{}return null}function vt(t){return navigator.clipboard?.writeText?navigator.clipboard.writeText(t):new Promise(e=>{let n=document.createElement("textarea");n.value=t,n.style.position="fixed",n.style.opacity="0",document.body.appendChild(n),n.select(),document.execCommand("copy"),document.body.removeChild(n),e()})}function bt(t){let e;try{e=JSON.parse(t.payload)}catch{e=t.payload}return JSON.stringify({type:t.type,timestamp:new Date(t.timestamp).toISOString(),payload:e},null,2)}function yt(t){return t.tokensPerSecond===void 0||!Number.isFinite(t.tokensPerSecond)?"-- tok/s":`${t.tokensPerSecond.toFixed(1)} tok/s`}function xt(t){let e=[];return t.outputTokens!==void 0&&e.push(`${t.outputTokens.toLocaleString()} tok`),t.durationMs!==void 0&&e.push(`${(t.durationMs/1e3).toFixed(2)}s`),t.source&&e.push(t.source),e.join(" \xB7 ")}function St(t,e,n){let r,i;try{i=JSON.parse(t.payload),r=JSON.stringify(i,null,2)}catch{i=t.payload,r=t.payload}let a=e.find(g=>g.renderEventStreamPayload);if(a?.renderEventStreamPayload&&n){let g=a.renderEventStreamPayload({event:t,config:n,defaultRenderer:()=>p(),parsedPayload:i});if(g)return g}return p();function p(){let g=l("div","persona-bg-persona-container persona-border-t persona-border-persona-divider persona-px-3 persona-py-2 persona-ml-4 persona-mr-3 persona-mb-1 persona-rounded-b persona-overflow-auto persona-max-h-[300px]"),y=l("pre","persona-m-0 persona-whitespace-pre-wrap persona-break-all persona-text-[11px] persona-text-persona-secondary persona-font-mono");return y.textContent=r,g.appendChild(y),g}}function xe(t,e,n,r,i,a,p,g){let y=i.has(t.id),x=l("div","persona-border-b persona-border-persona-divider persona-text-xs");Z(x,r.classNames?.eventRow);let pe=p.find(L=>L.renderEventStreamRow);if(pe?.renderEventStreamRow&&g){let L=pe.renderEventStreamRow({event:t,index:e,config:g,defaultRenderer:()=>_(),isExpanded:y,onToggleExpand:()=>a(t.id)});if(L)return x.appendChild(L),x}return x.appendChild(_()),x;function _(){let L=l("div",""),B=l("div","persona-flex persona-items-center persona-gap-2 persona-px-3 persona-py-3 hover:persona-bg-persona-container persona-cursor-pointer persona-group");B.setAttribute("data-event-id",t.id);let ee=l("span","persona-flex-shrink-0 persona-text-persona-muted persona-w-4 persona-text-center persona-flex persona-items-center persona-justify-center"),M=O(y?at:it,"14px","currentColor",2);M&&ee.appendChild(M);let D=l("span","persona-text-[11px] persona-text-persona-muted persona-whitespace-nowrap persona-flex-shrink-0 persona-font-mono persona-w-[70px]"),S=r.timestampFormat??"relative";D.textContent=S==="relative"?mt(t.timestamp,n):ht(t.timestamp);let A=null;r.showSequenceNumbers!==!1&&(A=l("span","persona-text-[11px] persona-text-persona-muted persona-font-mono persona-flex-shrink-0 persona-w-[28px] persona-text-right"),A.textContent=String(e+1));let R=ct(t.type,r.badgeColors),N=l("span","persona-inline-flex persona-items-center persona-px-2 persona-py-0.5 persona-rounded persona-text-[11px] persona-font-mono persona-font-medium persona-whitespace-nowrap persona-flex-shrink-0 persona-border");N.style.backgroundColor=R.bg,N.style.color=R.text,N.style.borderColor=ft(R.text),N.textContent=t.type;let te=r.descriptionFields??ut,Y=gt(t.payload,te),W=null;Y&&(W=l("span","persona-text-[11px] persona-text-persona-secondary persona-truncate persona-min-w-0"),W.textContent=Y);let E=l("div","persona-flex-1 persona-min-w-0"),T=l("button","persona-text-persona-muted hover:persona-text-persona-primary persona-cursor-pointer persona-flex-shrink-0 persona-border-none persona-bg-transparent persona-p-0"),ne=O(ze,"12px","currentColor",1.5);return ne&&T.appendChild(ne),T.addEventListener("click",async X=>{X.stopPropagation(),await vt(bt(t)),T.innerHTML="";let H=O(Je,"12px","currentColor",1.5);H&&T.appendChild(H),setTimeout(()=>{T.innerHTML="";let Q=O(ze,"12px","currentColor",1.5);Q&&T.appendChild(Q)},1500)}),B.appendChild(ee),B.appendChild(D),A&&B.appendChild(A),B.appendChild(N),W&&B.appendChild(W),B.appendChild(E),B.appendChild(T),L.appendChild(B),y&&L.appendChild(St(t,p,g)),L}}function Ge(t){let{buffer:e,getFullHistory:n,onClose:r,config:i,plugins:a=[],getThroughput:p}=t,g=t.renderIconByName??(()=>null),y=i?.features?.scrollToBottom,x=y?.enabled!==!1,pe=y?.iconName??"arrow-down",_=y?.label??"",L=i?.features?.eventStream??{},B=a.find(M=>M.renderEventStreamView);if(B?.renderEventStreamView&&i){let M=B.renderEventStreamView({config:i,events:e.getAll(),defaultRenderer:()=>ee().element,onClose:r});if(M)return{element:M,update:()=>{},destroy:()=>{}}}return ee();function ee(){let M=L.classNames,D=l("div","persona-event-stream-view persona-flex persona-flex-col persona-flex-1 persona-min-h-0");Z(D,M?.panel);let S=[],A="",R="",N=null,te=[],Y={},W=0,E=_e(),T=0,ne=0,X=!1,H=null,Q=!1,Ce=0,J=new Set,F=new Map,Ee="",Te="",K=null,v,h,b,P,re=null,I=null,$=null;function ge(){let o=l("div","persona-event-toolbar persona-relative persona-flex persona-flex-col persona-flex-shrink-0"),s=l("div","persona-flex persona-items-center persona-gap-2 persona-px-4 persona-py-3 persona-pb-0 persona-border-persona-divider persona-bg-persona-surface persona-overflow-hidden");if(Z(s,M?.headerBar),p){I=l("div","persona-relative persona-flex persona-items-center persona-gap-1.5 persona-whitespace-nowrap"),I.style.cursor="help",re=l("span","persona-text-[11px] persona-font-mono persona-bg-persona-container persona-text-persona-muted persona-px-2 persona-py-0.5 persona-rounded persona-border persona-border-persona-border persona-tabular-nums"),re.textContent="-- tok/s",$=l("div","persona-absolute persona-z-50 persona-whitespace-nowrap persona-rounded persona-border persona-border-persona-border persona-bg-persona-container persona-text-persona-primary persona-text-[11px] persona-font-mono persona-px-2 persona-py-1 persona-shadow"),$.style.display="none",$.style.pointerEvents="none";let j=I,le=$,ot=()=>{if(!le.textContent)return;let Ie=j.getBoundingClientRect(),Oe=o.getBoundingClientRect();le.style.left=`${Ie.left-Oe.left}px`,le.style.top=`${Ie.bottom-Oe.top+4}px`,le.style.display="block"},st=()=>{le.style.display="none"};I.addEventListener("mouseenter",ot),I.addEventListener("mouseleave",st),I.appendChild(re)}let u=l("div","persona-flex-1");v=l("select","persona-text-xs persona-bg-persona-surface persona-border persona-border-persona-border persona-rounded persona-px-2.5 persona-py-1 persona-text-persona-primary persona-cursor-pointer");let C=l("option","");C.value="",C.textContent="All events (0)",v.appendChild(C),h=l("button","persona-inline-flex persona-items-center persona-gap-1.5 persona-rounded persona-text-xs persona-text-persona-muted hover:persona-bg-persona-container hover:persona-text-persona-primary persona-cursor-pointer persona-border persona-border-persona-border persona-bg-persona-surface persona-flex-shrink-0 persona-px-2.5 persona-py-1"),h.type="button",h.title="Copy All";let z=O(Ue,"12px","currentColor",1.5);z&&h.appendChild(z);let U=l("span","persona-event-copy-all persona-text-xs");U.textContent="Copy All",h.appendChild(U),I&&s.appendChild(I),s.appendChild(u),s.appendChild(v),s.appendChild(h);let d=l("div","persona-relative persona-px-4 persona-py-2.5 persona-border-b persona-border-persona-divider persona-bg-persona-surface");Z(d,M?.searchBar);let c=O(lt,"14px","var(--persona-muted, #9ca3af)",1.5),m=l("span","persona-absolute persona-left-6 persona-top-1/2 persona--translate-y-1/2 persona-pointer-events-none persona-flex persona-items-center");c&&m.appendChild(c),b=l("input","persona-text-sm persona-bg-persona-surface persona-border persona-border-persona-border persona-rounded-md persona-pl-8 persona-pr-3 persona-py-1 persona-w-full persona-text-persona-primary"),Z(b,M?.searchInput),b.type="text",b.placeholder="Search event payloads...",P=l("button","persona-absolute persona-right-5 persona-top-1/2 persona--translate-y-1/2 persona-text-persona-muted hover:persona-text-persona-primary persona-cursor-pointer persona-border-none persona-bg-transparent persona-p-0 persona-leading-none"),P.type="button",P.style.display="none";let k=O(je,"12px","currentColor",2);return k&&P.appendChild(k),d.appendChild(m),d.appendChild(b),d.appendChild(P),o.appendChild(s),o.appendChild(d),$&&o.appendChild($),o}let ve,we=a.find(o=>o.renderEventStreamToolbar);we?.renderEventStreamToolbar&&i?ve=we.renderEventStreamToolbar({config:i,defaultRenderer:()=>ge(),eventCount:e.getSize(),filteredCount:0,onFilterChange:s=>{A=s,ie(),G()},onSearchChange:s=>{R=s,ie(),G()}})??ge():ve=ge();let oe=l("div","persona-text-xs persona-text-persona-muted persona-text-center persona-py-0.5 persona-px-4 persona-bg-persona-container persona-border-b persona-border-persona-divider persona-italic persona-flex-shrink-0");oe.style.display="none";function Ze(){if(!p||!re||!I)return;let o=p(),s=yt(o);re.textContent=s;let u=xt(o);$&&($.textContent=u,u||($.style.display="none")),I.setAttribute("aria-label",u?`Throughput: ${s}, ${u}`:`Throughput: ${s}`)}let ue=l("div","persona-flex-1 persona-min-h-0 persona-relative"),f=l("div","persona-event-stream-list persona-overflow-y-auto persona-min-h-0");f.style.height="100%";let w=l("div","persona-scroll-to-bottom-indicator persona-absolute persona-bottom-3 persona-left-1/2 persona-transform persona--translate-x-1/2 persona-cursor-pointer persona-z-10 persona-text-xs");Z(w,M?.scrollIndicator),w.style.display="none",w.setAttribute("data-persona-scroll-to-bottom-has-label",_?"true":"false");let ke=g(pe,"14px","currentColor",2);ke&&w.appendChild(ke);let se=l("span","");se.textContent=_,w.appendChild(se);let ae=l("div","persona-flex persona-items-center persona-justify-center persona-h-full persona-text-sm persona-text-persona-muted");ae.style.display="none",ue.appendChild(f),ue.appendChild(ae),ue.appendChild(w),D.setAttribute("tabindex","0"),D.appendChild(ve),D.appendChild(oe),D.appendChild(ue);function et(){let o=e.getAll(),s={};for(let d of o)s[d.type]=(s[d.type]||0)+1;let u=Object.keys(s).sort(),C=u.length!==te.length||!u.every((d,c)=>d===te[c]),V=!C&&u.some(d=>s[d]!==Y[d]),z=o.length!==Object.values(Y).reduce((d,c)=>d+c,0);if(!C&&!V&&!z||(te=u,Y=s,!v))return;let U=v.value;if(v.options[0].textContent=`All events (${o.length})`,C){for(;v.options.length>1;)v.remove(1);for(let d of u){let c=l("option","");c.value=d,c.textContent=`${d} (${s[d]||0})`,v.appendChild(c)}U&&u.includes(U)?v.value=U:U&&(v.value="",A="")}else for(let d=1;d<v.options.length;d++){let c=v.options[d];c.textContent=`${c.value} (${s[c.value]||0})`}}function tt(){let o=e.getAll();if(A&&(o=o.filter(s=>s.type===A)),R){let s=R.toLowerCase();o=o.filter(u=>u.type.toLowerCase().includes(s)||u.payload.toLowerCase().includes(s))}return o}function be(){return A!==""||R!==""}function ie(){W=0,T=0,E.resume(),w.style.display="none"}function de(o){J.has(o)?J.delete(o):J.add(o),K=o;let s=f.scrollTop,u=E.isFollowing();Q=!0,E.pause(),G(),f.scrollTop=s,u&&E.resume(),Q=!1}function Re(){return We(f,50)}function G(){ne=Date.now(),X=!1,Ze(),et();let o=e.getEvictedCount();o>0?(oe.textContent=`${o.toLocaleString()} older events truncated`,oe.style.display=""):oe.style.display="none",S=tt();let s=S.length,u=e.getSize()>0;s===0&&u&&be()?(ae.textContent=R?`No events matching '${R}'`:"No events matching filter",ae.style.display="",f.style.display="none"):(ae.style.display="none",f.style.display=""),h&&(h.title=be()?`Copy Filtered (${s})`:"Copy All"),x&&!E.isFollowing()&&s>W&&(T+=s-W,se.textContent=_?`${_}${T>0?` (${T})`:""}`:"",w.style.display=""),W=s;let C=e.getAll(),V=C.length>0?C[0].timestamp:0,z=new Set(S.map(c=>c.id));for(let c of J)z.has(c)||J.delete(c);let U=A!==Ee||R!==Te,d=F.size===0&&S.length>0;if(U||d||S.length===0){f.innerHTML="",F.clear();let c=document.createDocumentFragment();for(let m=0;m<S.length;m++){let k=xe(S[m],m,V,L,J,de,a,i);F.set(S[m].id,k),c.appendChild(k)}f.appendChild(c),Ee=A,Te=R,K=null}else{if(K!==null){let m=F.get(K);if(m&&m.parentNode===f){let k=S.findIndex(j=>j.id===K);if(k>=0){let j=xe(S[k],k,V,L,J,de,a,i);f.insertBefore(j,m),m.remove(),F.set(K,j)}}K=null}let c=new Set(S.map(m=>m.id));for(let[m,k]of F)c.has(m)||(k.remove(),F.delete(m));for(let m=0;m<S.length;m++){let k=S[m];if(!F.has(k.id)){let j=xe(k,m,V,L,J,de,a,i);F.set(k.id,j),f.appendChild(j)}}}E.isFollowing()&&(f.scrollTop=f.scrollHeight)}function nt(){if(Date.now()-ne>=dt){H!==null&&(cancelAnimationFrame(H),H=null),G();return}X||(X=!0,H=requestAnimationFrame(()=>{H=null,G()}))}let Le=(o,s)=>{if(!h)return;h.innerHTML="";let u=O(o,"12px","currentColor",1.5);u&&h.appendChild(u);let C=l("span","persona-text-xs");C.textContent="Copy All",h.appendChild(C),setTimeout(()=>{h.innerHTML="";let V=O(Ue,"12px","currentColor",1.5);V&&h.appendChild(V);let z=l("span","persona-text-xs");z.textContent="Copy All",h.appendChild(z),h.disabled=!1},s)},Me=async()=>{if(h){h.disabled=!0;try{let o;be()?o=S:n?(o=await n(),o.length===0&&(o=e.getAll())):o=e.getAll();let s=o.map(u=>{try{return JSON.parse(u.payload)}catch{return u.payload}});await navigator.clipboard.writeText(JSON.stringify(s,null,2)),Le(Je,1500)}catch{Le(je,1500)}}},Ae=()=>{v&&(A=v.value,ie(),G())},Ne=()=>{!b||!P||(P.style.display=b.value?"":"none",N&&clearTimeout(N),N=setTimeout(()=>{R=b.value,ie(),G()},150))},ye=()=>{!b||!P||(b.value="",R="",P.style.display="none",N&&clearTimeout(N),ie(),G())},Pe=()=>{if(Q)return;let o=f.scrollTop,{action:s,nextLastScrollTop:u}=$e({following:E.isFollowing(),currentScrollTop:o,lastScrollTop:Ce,nearBottom:Re(),userScrollThreshold:1,resumeRequiresDownwardScroll:!0});Ce=u,s==="resume"?(E.resume(),T=0,w.style.display="none"):s==="pause"&&(E.pause(),x&&(se.textContent=_,w.style.display=""))},Be=o=>{let s=Ve({following:E.isFollowing(),deltaY:o.deltaY,nearBottom:Re(),resumeWhenNearBottom:!0});s==="pause"?(E.pause(),x&&(se.textContent=_,w.style.display="")):s==="resume"&&(E.resume(),T=0,w.style.display="none")},De=()=>{x&&(f.scrollTop=f.scrollHeight,E.resume(),T=0,w.style.display="none")},He=o=>{let s=o.target;if(!s||s.closest("button"))return;let u=s.closest("[data-event-id]");if(!u)return;let C=u.getAttribute("data-event-id");C&&de(C)},Fe=o=>{if((o.metaKey||o.ctrlKey)&&o.key==="f"){o.preventDefault(),b?.focus(),b?.select();return}o.key==="Escape"&&(b&&document.activeElement===b?(ye(),b.blur(),D.focus()):r&&r())};h&&h.addEventListener("click",Me),v&&v.addEventListener("change",Ae),b&&b.addEventListener("input",Ne),P&&P.addEventListener("click",ye),f.addEventListener("scroll",Pe),f.addEventListener("wheel",Be,{passive:!0}),f.addEventListener("click",He),w.addEventListener("click",De),D.addEventListener("keydown",Fe);function rt(){N&&clearTimeout(N),H!==null&&(cancelAnimationFrame(H),H=null),X=!1,F.clear(),h&&h.removeEventListener("click",Me),v&&v.removeEventListener("change",Ae),b&&b.removeEventListener("input",Ne),P&&P.removeEventListener("click",ye),f.removeEventListener("scroll",Pe),f.removeEventListener("wheel",Be),f.removeEventListener("click",He),w.removeEventListener("click",De),D.removeEventListener("keydown",Fe)}return{element:D,update:nt,destroy:rt}}}var ce=class{constructor(e=2e3,n=null){this.head=0;this.count=0;this.totalCaptured=0;this.eventTypesSet=new Set;this.maxSize=e,this.buffer=new Array(e),this.store=n}push(e){this.buffer[this.head]=e,this.head=(this.head+1)%this.maxSize,this.count<this.maxSize&&this.count++,this.totalCaptured++,this.eventTypesSet.add(e.type),this.store?.put(e)}getAll(){return this.count===0?[]:this.count<this.maxSize?this.buffer.slice(0,this.count):[...this.buffer.slice(this.head,this.maxSize),...this.buffer.slice(0,this.head)]}async restore(){if(!this.store)return 0;let e=await this.store.getAll();if(e.length===0)return 0;let n=e.length>this.maxSize?e.slice(e.length-this.maxSize):e;for(let r of n)this.buffer[this.head]=r,this.head=(this.head+1)%this.maxSize,this.count<this.maxSize&&this.count++,this.eventTypesSet.add(r.type);return this.totalCaptured=e.length,n.length}getAllFromStore(){return this.store?this.store.getAll():Promise.resolve(this.getAll())}getRecent(e){let n=this.getAll();return e>=n.length?n:n.slice(n.length-e)}getSize(){return this.count}getTotalCaptured(){return this.totalCaptured}getEvictedCount(){return this.totalCaptured-this.count}clear(){this.buffer=new Array(this.maxSize),this.head=0,this.count=0,this.totalCaptured=0,this.eventTypesSet.clear(),this.store?.clear()}destroy(){this.buffer=[],this.head=0,this.count=0,this.totalCaptured=0,this.eventTypesSet.clear(),this.store?.destroy()}getEventTypes(){return Array.from(this.eventTypesSet)}};var fe=class{constructor(e="persona-event-stream",n="events"){this.db=null;this.pendingWrites=[];this.flushScheduled=!1;this.isDestroyed=!1;this.dbName=e,this.storeName=n}open(){return new Promise((e,n)=>{try{let r=indexedDB.open(this.dbName,1);r.onupgradeneeded=()=>{let i=r.result;i.objectStoreNames.contains(this.storeName)||i.createObjectStore(this.storeName,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1})},r.onsuccess=()=>{this.db=r.result,e()},r.onerror=()=>{n(r.error)}}catch(r){n(r)}})}put(e){!this.db||this.isDestroyed||(this.pendingWrites.push(e),this.flushScheduled||(this.flushScheduled=!0,queueMicrotask(()=>this.flushWrites())))}putBatch(e){if(!(!this.db||this.isDestroyed||e.length===0))try{let r=this.db.transaction(this.storeName,"readwrite").objectStore(this.storeName);for(let i of e)r.put(i)}catch{}}getAll(){return new Promise((e,n)=>{if(!this.db){e([]);return}try{let p=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).index("timestamp").getAll();p.onsuccess=()=>{e(p.result)},p.onerror=()=>{n(p.error)}}catch(r){n(r)}})}getCount(){return new Promise((e,n)=>{if(!this.db){e(0);return}try{let a=this.db.transaction(this.storeName,"readonly").objectStore(this.storeName).count();a.onsuccess=()=>{e(a.result)},a.onerror=()=>{n(a.error)}}catch(r){n(r)}})}clear(){return new Promise((e,n)=>{if(!this.db){e();return}this.pendingWrites=[];try{let a=this.db.transaction(this.storeName,"readwrite").objectStore(this.storeName).clear();a.onsuccess=()=>{e()},a.onerror=()=>{n(a.error)}}catch(r){n(r)}})}close(){this.db&&(this.db.close(),this.db=null)}destroy(){return this.isDestroyed=!0,this.pendingWrites=[],this.close(),new Promise((e,n)=>{try{let r=indexedDB.deleteDatabase(this.dbName);r.onsuccess=()=>{e()},r.onerror=()=>{n(r.error)}}catch(r){n(r)}})}flushWrites(){if(this.flushScheduled=!1,!this.db||this.isDestroyed||this.pendingWrites.length===0)return;let e=this.pendingWrites;this.pendingWrites=[];try{let r=this.db.transaction(this.storeName,"readwrite").objectStore(this.storeName);for(let i of e)r.put(i)}catch{}}};var Ct=new Set(["step_start","turn_start"]),Et=new Set(["step_complete","turn_complete"]),Xe=t=>typeof t=="object"&&t!==null&&!Array.isArray(t),Qe=t=>typeof t=="number"&&Number.isFinite(t)?t:void 0,Ke=(t,e)=>{let n=t[e];return Xe(n)?n:void 0};function Se(t){return t>0?Math.max(1,Math.ceil(t/4)):0}function me(t,e){if(!(t<=0||e===void 0||e<250))return t/(e/1e3)}function Tt(t,e){return typeof e.type=="string"?e.type:t}function Ye(t){let e=Ke(t,"tokens")??Ke(t,"totalTokens");return e?Qe(e.output):void 0}function wt(t){return Qe(t.durationMs)}function kt(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}var he=class{constructor(e=kt){this.metric={status:"idle"};this.run=null;this.now=e}getMetric(){let e=this.run;if(e&&this.metric.status==="running"&&e.firstDeltaAt!==void 0&&this.metric.outputTokens!==void 0){let n=this.now()-e.firstDeltaAt;return{...this.metric,durationMs:n,tokensPerSecond:me(this.metric.outputTokens,n)}}return this.metric}reset(){this.run=null,this.metric={status:"idle"}}startRun(e){this.run={startedAt:e,visibleCharCount:0,exactOutputTokens:0},this.metric={status:"running"}}processEvent(e,n){if(!Xe(n)){e==="execution_error"&&this.run&&(this.run=null,this.metric={status:"error"});return}let r=Tt(e,n),i=this.now();if(r==="execution_start"){this.startRun(i);return}if(Ct.has(r)){this.run||this.startRun(i);return}if(r==="text_delta"){let a=typeof n.delta=="string"?n.delta:"";if(!a)return;this.run||this.startRun(i);let p=this.run;p.firstDeltaAt??(p.firstDeltaAt=i),p.visibleCharCount+=a.length;let g=p.exactOutputTokens+Se(p.visibleCharCount),y=i-p.firstDeltaAt;this.metric={status:"running",tokensPerSecond:me(g,y),outputTokens:g,durationMs:y,source:p.exactOutputTokens>0?"usage":"estimate"};return}if(Et.has(r)){if(!this.run)return;let a=this.run,p=Ye(n);p!==void 0&&(a.exactOutputTokens+=p,a.visibleCharCount=0);let g=a.exactOutputTokens>0,y=a.exactOutputTokens+Se(a.visibleCharCount),x=this.resolveDuration(a,n,i);this.metric={status:"running",tokensPerSecond:me(y,x),outputTokens:y,durationMs:x,source:g?"usage":"estimate"};return}if(r==="execution_complete"){if(!this.run)return;let a=this.run,p=Ye(n),g=p??a.exactOutputTokens+Se(a.visibleCharCount),y=p!==void 0||a.exactOutputTokens>0?"usage":"estimate",x=this.resolveDuration(a,n,i);this.metric={status:"complete",tokensPerSecond:me(g,x),outputTokens:g,durationMs:x,source:y},this.run=null;return}if(r==="execution_error"||r==="error"&&n.recoverable===!1){if(!this.run)return;this.run=null,this.metric={status:"error"}}}resolveDuration(e,n,r){let i=e.firstDeltaAt!==void 0?r-e.firstDeltaAt:void 0;return i!==void 0&&i>=250?i:wt(n)??r-e.startedAt}};export{ce as EventStreamBuffer,fe as EventStreamStore,he as ThroughputTracker,Ge as createEventStreamView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as h}from"./chunk-5EIIHQLQ.js";function y(n){return n.replace(/\/+$/,"")}var p=class{constructor(e){this.opts=e;this.id="runtype-tts";this.supportsPause=!0;this.player=null;this.playerPromise=null;this.generation=0}ensurePlayer(){return this.playerPromise??(this.playerPromise=Promise.resolve(this.opts.createPlaybackEngine?this.opts.createPlaybackEngine():new h(24e3,{prebufferMs:this.opts.prebufferMs??200})).then(e=>this.player=e))}speak(e,r){let i=++this.generation;this.run(i,e,r)}async run(e,r,i){try{let t=await this.ensurePlayer();if(e!==this.generation)return;t.flush(),t.resume(),t.onStarted(()=>{e===this.generation&&i.onStart?.()}),t.onFinished(()=>{e===this.generation&&i.onEnd?.()});let a=`${y(this.opts.host)}/v1/agents/${encodeURIComponent(this.opts.agentId)}/speak`,o=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.opts.clientToken}`},body:JSON.stringify({text:r.text,voice:r.voice??this.opts.voice,format:"pcm"})});if(e!==this.generation)return;if(!o.ok||!o.body)throw new Error(await d(o));let l=o.body.getReader();for(;;){let{done:u,value:s}=await l.read();if(e!==this.generation){await l.cancel().catch(()=>{});return}if(u)break;s&&s.byteLength>0&&t.enqueue(s)}t.markStreamEnd()}catch(t){if(e!==this.generation)return;let a=t instanceof Error?t:new Error(String(t));this.opts.onError?.(a),i.onError?.(a)}}pause(){this.player?.pause()}resume(){this.player?.resume()}stop(){this.generation++,this.player?.flush()}destroy(){this.generation++,this.player?.destroy(),this.player=null,this.playerPromise=null}};async function d(n){try{let e=await n.json();return e.detail?`${e.error??`Runtype TTS ${n.status}`}: ${e.detail}`:e.error??`Runtype TTS request failed (${n.status})`}catch{return`Runtype TTS request failed (${n.status})`}}var c=class{constructor(e,r,i={}){this.primary=e;this.fallback=r;this.options=i;this.id="fallback";this.active=e}get supportsPause(){return this.active.supportsPause}speak(e,r){this.active=this.primary;let i=!1;this.primary.speak(e,{onStart:()=>{i=!0,r.onStart?.()},onEnd:()=>r.onEnd?.(),onError:t=>{if(i){r.onError?.(t);return}this.options.onFallback?.(t),this.active=this.fallback,this.fallback.speak(e,r)}})}pause(){this.active.pause()}resume(){this.active.resume()}stop(){this.active.stop()}destroy(){this.primary.destroy?.(),this.fallback.destroy?.()}};export{c as FallbackSpeechEngine,p as RuntypeSpeechEngine};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as v}from"./chunk-5EIIHQLQ.js";var g=16e3,k=24e3,S=4096,C=4,E=1380533830,A=3e4,M=5e3,P=3e4,T=3e4,V=6e5;function _(r){return r.byteLength>=44&&new DataView(r).getUint32(0,!1)===E?new Uint8Array(r,44):new Uint8Array(r)}function w(r){let t=r.replace(/\/+$/,"");return/^wss?:\/\//i.test(t)?t:/^https?:\/\//i.test(t)?t.replace(/^http/i,"ws"):`${typeof window<"u"&&window.location?.protocol==="https:"?"wss:":"ws:"}//${t}`}function R(r){return w(r).replace(/^ws/i,"http")}function L(r){return typeof r!="number"||!Number.isFinite(r)?P:Math.min(V,Math.max(T,Math.round(r)))}var f=class{constructor(t){this.config=t;this.type="runtype";this.ws=null;this.captureContext=null;this.levelCallbacks=[];this.mediaStream=null;this.sourceNode=null;this.processor=null;this.playback=null;this.callLive=!1;this.isSpeaking=!1;this.callGeneration=0;this.intentionalClose=!1;this.lastPrewarmAt=Number.NEGATIVE_INFINITY;this.attached=null;this.resultCallbacks=[];this.errorCallbacks=[];this.statusCallbacks=[];this.transcriptCallbacks=[];this.metricsCallbacks=[]}async connect(){}prewarm(){if(this.callLive||this.attached)return;let t=this.config?.agentId,e=this.config?.clientToken,i=this.config?.host;if(!t||!e||!i)return;let s=Date.now();if(!(s-this.lastPrewarmAt<A)){this.lastPrewarmAt=s;try{this.config?.prewarmMode==="attach"?this.attach(i,t,e):this.requestPrewarm(i,t,e)}catch{}}}requestPrewarm(t,e,i){if(typeof fetch!="function")return;let s=`${R(t)}/v1/client/agents/${encodeURIComponent(e)}/voice/prewarm`;fetch(s,{method:"POST",headers:{Authorization:`Bearer ${i}`},keepalive:!0}).catch(()=>{})}attach(t,e,i){let s=new URLSearchParams({clientCapabilities:"attach"}),o=this.config?.attachIdleMs,h=L(o);o!==void 0&&s.set("attachIdleMs",String(h));let c=new WebSocket(`${this.voiceSocketUrl(t,e)}?${s}`,["runtype.bearer","runtype.attach",i]);c.binaryType="arraybuffer";let u=()=>{},d=new Promise(n=>{u=n}),a={ws:c,state:"connecting",ready:d,settle:u,openedAt:0,idleTimer:void 0};this.attached=a,c.onopen=()=>{this.attached===a&&(a.state=c.protocol==="runtype.attach"?"attached":"live",a.openedAt=Date.now(),this.armAttachIdle(a,h),a.state==="attached"&&c.send('{"type":"ping"}'),a.settle())},c.onmessage=n=>{if(this.attached!==a||typeof n.data!="string")return;let l;try{l=JSON.parse(n.data)}catch{return}l.type==="attached"&&typeof l.idleMs=="number"&&this.armAttachIdle(a,l.idleMs-(Date.now()-a.openedAt))},c.onerror=()=>{},c.onclose=()=>{this.attached===a&&this.releaseAttached()}}armAttachIdle(t,e){clearTimeout(t.idleTimer),t.idleTimer=setTimeout(()=>{this.attached===t&&this.releaseAttached()},Math.max(0,e))}releaseAttached(){let t=this.attached;if(!t)return;this.attached=null,clearTimeout(t.idleTimer);let{ws:e}=t;if(e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,t.settle(),e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN)try{e.close(1e3,"prewarm released")}catch{}}async takeAttachedSocket(){let t=this.attached;if(!t)return null;if(t.state==="connecting"){let e;await Promise.race([t.ready,new Promise(i=>{e=setTimeout(i,M)})]),clearTimeout(e)}return this.attached!==t?null:t.state==="connecting"||t.ws.readyState!==WebSocket.OPEN?(this.releaseAttached(),null):(this.attached=null,clearTimeout(t.idleTimer),{ws:t.ws,live:t.state==="live"})}voiceSocketUrl(t,e){return`${w(t)}/ws/agents/${encodeURIComponent(e)}/voice`}async startListening(){if(this.callLive)return;let t=this.config?.agentId,e=this.config?.clientToken,i=this.config?.host;if(!t)throw new Error("Runtype voice requires an agentId");if(!e)throw new Error("Runtype voice requires a clientToken");if(!i)throw new Error("Runtype voice requires a host (or widget apiUrl)");let s=++this.callGeneration;this.intentionalClose=!1,this.callLive=!0;try{let o=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:g,channelCount:1,echoCancellation:!0}});if(s!==this.callGeneration){o.getTracks().forEach(n=>n.stop());return}this.mediaStream=o;let h=window.AudioContext||window.webkitAudioContext,c=new h({sampleRate:g});c.state==="suspended"&&await c.resume().catch(()=>{}),this.captureContext=c;let u=this.config?.createPlaybackEngine?await this.config.createPlaybackEngine():new v(k);if(s!==this.callGeneration){u.destroy(),o.getTracks().forEach(n=>n.stop()),c.close().catch(()=>{});return}this.playback=u,u.onFinished(()=>{s===this.callGeneration&&(this.isSpeaking=!1,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.emitStatus("listening"))});let d=await this.takeAttachedSocket();if(s!==this.callGeneration){d?.ws.close(1e3,"client ended call");return}if(d){let{ws:n}=d;this.ws=n,this.bindCallSocket(n,s),d.live||n.send('{"type":"start"}'),this.emitStatus("listening"),this.startCapture(c,o,n,s);return}let a=new WebSocket(this.voiceSocketUrl(i,t),["runtype.bearer",e]);a.binaryType="arraybuffer",this.ws=a,a.onopen=()=>{s===this.callGeneration&&(this.emitStatus("listening"),this.startCapture(c,o,a,s))},this.bindCallSocket(a,s)}catch(o){throw this.cleanup(),this.emitError(o),this.emitStatus("error"),o}}bindCallSocket(t,e){t.onmessage=i=>this.handleMessage(i,e),t.onerror=()=>{e===this.callGeneration&&(this.emitError(new Error("Voice connection failed")),this.emitStatus("error"),this.cleanup())},t.onclose=i=>{if(this.intentionalClose){this.intentionalClose=!1;return}if(e===this.callGeneration){if(i.code!==1e3){let s=i.code?` (code ${i.code})`:"";this.emitError(new Error(`Voice connection closed${s}`)),this.emitStatus("error")}else this.emitStatus("idle");this.cleanup()}}}async stopListening(){this.cleanup(),this.emitStatus("idle")}async disconnect(){this.cleanup(),this.emitStatus("disconnected"),this.resultCallbacks=[],this.errorCallbacks=[],this.statusCallbacks=[],this.transcriptCallbacks=[],this.metricsCallbacks=[]}stopPlayback(){this.playback&&this.playback.flush(),this.isSpeaking=!1,this.ws&&this.ws.readyState===WebSocket.OPEN&&this.emitStatus("listening")}getInterruptionMode(){return"barge-in"}isBargeInActive(){return this.callLive}onLevel(t){this.levelCallbacks.push(t)}async deactivateBargeIn(){this.cleanup(),this.emitStatus("idle")}startCapture(t,e,i,s){let o=t.createMediaStreamSource(e);this.sourceNode=o;let h=t.createScriptProcessor(S,1,1);this.processor=h,h.onaudioprocess=c=>{if(s!==this.callGeneration||i.readyState!==WebSocket.OPEN)return;let u=c.inputBuffer.getChannelData(0),d=new Int16Array(u.length),a=0;for(let n=0;n<u.length;n++){let l=Math.max(-1,Math.min(1,u[n]));a+=l*l,d[n]=l<0?l*32768:l*32767}if(i.send(d.buffer),this.levelCallbacks.length>0){let n=Math.sqrt(a/u.length),l=Math.max(0,Math.min(1,n*C));for(let b of this.levelCallbacks)b(l)}},o.connect(h),h.connect(t.destination)}handleMessage(t,e){if(e!==this.callGeneration)return;if(t.data instanceof ArrayBuffer){this.handleAudioFrame(t.data,e);return}let i;try{i=JSON.parse(t.data)}catch{return}switch(i.type){case"transcript_interim":this.emitStatus("listening"),this.emitTranscript("user",i.text??"",!1);break;case"transcript_final":{let s=i.role==="assistant"?"assistant":"user";this.emitStatus(s==="user"?"processing":"speaking"),this.emitTranscript(s,i.text??"",!0);break}case"audio_end":this.playback?this.playback.markStreamEnd():(this.isSpeaking=!1,this.emitStatus("listening"));break;case"metrics":this.emitMetrics({llmMs:i.llm_ms,ttsMs:i.tts_ms,firstAudioMs:i.first_audio_ms,totalMs:i.total_ms});break;case"error":this.emitError(new Error(i.error||"Voice error")),this.emitStatus("error");break}}handleAudioFrame(t,e){if(e!==this.callGeneration||!this.playback)return;let i=_(t);i.length!==0&&(this.isSpeaking||(this.isSpeaking=!0,this.emitStatus("speaking")),this.playback.enqueue(i))}cleanup(){if(this.callGeneration+=1,this.callLive=!1,this.isSpeaking=!1,this.releaseAttached(),this.processor&&(this.processor.onaudioprocess=null,this.processor.disconnect(),this.processor=null),this.sourceNode&&(this.sourceNode.disconnect(),this.sourceNode=null),this.mediaStream&&(this.mediaStream.getTracks().forEach(t=>t.stop()),this.mediaStream=null),this.captureContext&&(this.captureContext.close().catch(()=>{}),this.captureContext=null),this.playback&&(this.playback.destroy(),this.playback=null),this.ws){this.intentionalClose=!0;try{this.ws.close(1e3,"client ended call")}catch{}this.ws=null}}onResult(t){this.resultCallbacks.push(t)}onError(t){this.errorCallbacks.push(t)}onStatusChange(t){this.statusCallbacks.push(t)}onTranscript(t){this.transcriptCallbacks.push(t)}onMetrics(t){this.metricsCallbacks.push(t)}emitStatus(t){this.statusCallbacks.forEach(e=>e(t))}emitError(t){this.errorCallbacks.forEach(e=>e(t))}emitTranscript(t,e,i){this.transcriptCallbacks.forEach(s=>s(t,e,i))}emitMetrics(t){this.metricsCallbacks.forEach(e=>e(t))}};var p=class{constructor(t={}){this.config=t;this.type="browser";this.recognition=null;this.resultCallbacks=[];this.errorCallbacks=[];this.statusCallbacks=[];this.isListening=!1;this.w=typeof window<"u"?window:void 0}async connect(){this.statusCallbacks.forEach(t=>t("connected"))}async startListening(){try{if(this.isListening)throw new Error("Already listening");if(!this.w)throw new Error("Window object not available");let t=this.w.SpeechRecognition||this.w.webkitSpeechRecognition;if(!t)throw new Error("Browser speech recognition not supported");this.recognition=new t,this.recognition.lang=this.config?.language||"en-US",this.recognition.continuous=this.config?.continuous||!1,this.recognition.interimResults=!0,this.recognition.onresult=e=>{let i=Array.from(e.results).map(o=>o[0]).map(o=>o.transcript).join(""),s=e.results[e.results.length-1].isFinal;this.resultCallbacks.forEach(o=>o({text:i,confidence:s?.8:.5,provider:"browser"})),s&&!this.config?.continuous&&this.stopListening()},this.recognition.onerror=e=>{this.errorCallbacks.forEach(i=>i(new Error(e.error))),this.statusCallbacks.forEach(i=>i("error"))},this.recognition.onstart=()=>{this.isListening=!0,this.statusCallbacks.forEach(e=>e("listening"))},this.recognition.onend=()=>{this.isListening=!1,this.statusCallbacks.forEach(e=>e("idle"))},this.recognition.start()}catch(t){throw this.errorCallbacks.forEach(e=>e(t)),this.statusCallbacks.forEach(e=>e("error")),t}}async stopListening(){this.recognition&&(this.recognition.stop(),this.recognition=null),this.isListening=!1,this.statusCallbacks.forEach(t=>t("idle"))}onResult(t){this.resultCallbacks.push(t)}onError(t){this.errorCallbacks.push(t)}onStatusChange(t){this.statusCallbacks.push(t)}async disconnect(){await this.stopListening(),this.statusCallbacks.forEach(t=>t("disconnected"))}static isSupported(){return"SpeechRecognition"in window||"webkitSpeechRecognition"in window}};function m(r){switch(r.type){case"runtype":if(!r.runtype)throw new Error("Runtype voice provider requires configuration");return new f(r.runtype);case"browser":if(!p.isSupported())throw new Error("Browser speech recognition not supported");return new p(r.browser||{});case"custom":{let t=r.custom;if(!t)throw new Error("Custom voice provider requires a `custom` provider instance or factory");let e=typeof t=="function"?t():t;if(!e||typeof e.startListening!="function")throw new Error("Custom voice provider `custom` must be a VoiceProvider (or a factory returning one)");return e}default:throw new Error(`Unknown voice provider type: ${r.type}`)}}function y(r){if(r?.type==="custom"&&r.custom)return m({type:"custom",custom:r.custom});if(r?.type==="runtype"&&r.runtype)return m({type:"runtype",runtype:r.runtype});if(p.isSupported())return m({type:"browser",browser:r?.browser||{language:"en-US"}});throw new Error("No supported voice providers available")}function I(r){try{return y(r),!0}catch{return!1}}export{p as BrowserVoiceProvider,f as RuntypeVoiceProvider,y as createBestAvailableVoiceProvider,m as createVoiceProvider,I as isVoiceSupported};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
var C="webmcp:",T=t=>t.startsWith(C)?t.slice(C.length):t,d={warn(t,...e){typeof console<"u"&&typeof console.warn=="function"&&console.warn(`[Persona/WebMCP] ${t}`,...e)}},m=class{constructor(e,n){this.config=e;this.deps=n;this.installed=!1;this.readyPromise=null;this.incompatibleContextWarned=!1;this.confirmHandler=e.onConfirm??null,this.timeoutMs=3e4}setConfirmHandler(e){this.confirmHandler=e}isOperational(){return this.config.enabled!==!0||!this.installed?!1:this.getModelContext()!==null}async snapshotForDispatch(){if(await this.ensureReady(),this.config.enabled!==!0)return[];let e=this.getModelContext();if(!e)return[];let n;try{n=await e.getTools()}catch(i){return d.warn("getTools() threw: shipping an empty WebMCP snapshot.",i),[]}this.deps.recordToolDisplayTitles(n);let o=typeof location<"u"?location.origin:"";return n.filter(i=>this.passesClientAllowlist(i.name)).map(i=>{let l=W(i.annotations);return{name:i.name,description:i.description,parametersSchema:P(i.inputSchema),origin:"webmcp",...o?{pageOrigin:o}:{},...l?{annotations:l}:{},...l?.untrustedContentHint===!0?{untrustedContentHint:!0}:{}}})}async executeToolCall(e,n,o){if(await this.ensureReady(),this.config.enabled!==!0)return s("WebMCP is not enabled on this widget.");let i=this.getModelContext();if(!i){let r=typeof document<"u"&&!!document.modelContext;return s(r?"WebMCP is not operational: document.modelContext is present but does not expose the strict getTools()/executeTool() surface (likely a different or older WebMCP polyfill).":"WebMCP bridge is not operational on this page (document.modelContext not available).")}let l=T(e),a;try{a=await i.getTools()}catch(r){let p=r instanceof Error?r.message:String(r);return s(`Failed to read WebMCP registry: ${p}`)}this.deps.recordToolDisplayTitles(a);let f=a.find(r=>r.name===l);if(!f)return s(`WebMCP tool not registered on this page: ${l}`);if(!this.passesClientAllowlist(l))return s(`WebMCP tool not allowed by client allowlist: ${l}`);if(o?.aborted)return s("Aborted by cancel()");let b=this.deps.getToolDisplayTitle(l),h={toolName:l,args:n,description:f.description,...b?{title:b}:{},reason:"gate"};if(!await this.requestConfirm(h))return s("User declined the tool call.");if(o?.aborted)return s("Aborted by cancel()");let c=new AbortController,y=!1,M=setTimeout(()=>{y=!0,c.abort()},this.timeoutMs),g=()=>c.abort();o&&(o.aborted?c.abort():o.addEventListener("abort",g,{once:!0}));try{let r=await i.executeTool(f,O(n),{signal:c.signal});return w(r)}catch(r){if(y)return s(`WebMCP tool '${l}' timed out after ${this.timeoutMs}ms`);if(o?.aborted)return s("Aborted by cancel()");let p=r instanceof Error?r.message:String(r);return s(p)}finally{clearTimeout(M),o&&o.removeEventListener("abort",g)}}ensureReady(){return this.config.enabled!==!0?Promise.resolve():(this.readyPromise||(this.readyPromise=this.install()),this.readyPromise)}async install(){try{if(this.getModelContext()){this.installed=!0;return}(await this.deps.loadPolyfill()).initializeWebMCPPolyfill(),this.installed=!0}catch(e){d.warn("Failed to load @mcp-b/webmcp-polyfill: WebMCP consumption disabled.",e),this.installed=!1}}getModelContext(){if(typeof document>"u")return null;let e=document.modelContext;if(!e||typeof e!="object")return null;let n=e;return typeof n.getTools!="function"||typeof n.executeTool!="function"?(this.incompatibleContextWarned||(this.incompatibleContextWarned=!0,d.warn("document.modelContext is present but does not expose getTools()/executeTool(): WebMCP consumption is disabled. Another (incompatible or older) WebMCP polyfill likely installed document.modelContext before Persona. Remove it, or use a polyfill implementing the strict standard surface (e.g. @mcp-b/webmcp-polyfill).")),null):e}async requestConfirm(e){let n=this.confirmHandler??A;try{return await n(e)}catch(o){return d.warn(`Confirm handler threw for WebMCP tool '${e.toolName}'; declining.`,o),!1}}passesClientAllowlist(e){let n=this.config.allowlist;return!n||n.length===0?!0:n.some(o=>x(e,o))}},x=(t,e)=>{if(e==="*")return!0;let n=e.replace(/[.+?^${}()|[\]\\]/g,"\\$&");return new RegExp("^"+n.replace(/\*/g,".*")+"$").test(t)},u={type:"object",properties:{}},W=t=>{if(!t||typeof t!="object")return;let e={...typeof t.readOnlyHint=="boolean"?{readOnlyHint:t.readOnlyHint}:{},...typeof t.untrustedContentHint=="boolean"?{untrustedContentHint:t.untrustedContentHint}:{}};return Object.keys(e).length>0?e:void 0},P=t=>{if(t===void 0||t==="")return{...u};if(typeof t=="object")return t!==null&&!Array.isArray(t)?t:{...u};try{let e=JSON.parse(t);return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:{...u}}catch{return{...u}}},w=t=>{if(t==null)return{content:[{type:"text",text:""}]};let e;try{e=JSON.parse(t)}catch{return{content:[{type:"text",text:t}]}}return e!==null&&typeof e=="object"&&Array.isArray(e.content)?e:{content:[{type:"text",text:typeof e=="string"?e:k(e)}]}},s=t=>({isError:!0,content:[{type:"text",text:t}]}),A=async t=>{if(typeof window>"u"||typeof window.confirm!="function")return!1;let e=v(t.args),n=`Allow the AI to call ${t.toolName}`+(e?`
|
|
2
|
-
|
|
3
|
-
Arguments:
|
|
4
|
-
${e}`:"")+(t.description?`
|
|
5
|
-
|
|
6
|
-
${t.description}`:"");return window.confirm(n)},v=t=>{if(t==null)return"";try{let e=JSON.stringify(t,null,2);return e.length>500?e.slice(0,500)+"\u2026":e}catch{return String(t)}},O=t=>{if(t===void 0)return"{}";try{let e=JSON.stringify(t);return e===void 0?"{}":e}catch{return"{}"}},k=t=>{if(t===void 0)return"";try{return JSON.stringify(t)}catch{return String(t)}};export{m as WebMcpBridge};
|