@theoremjs/studio 0.3.4-next.482.g7e608f2 → 0.3.4-next.508.geda6db0
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/README.md +3 -3
- package/compile.d.ts +1 -1
- package/draft.d.ts +1 -1
- package/example.js +5 -2
- package/map-line.d.ts +12 -0
- package/map-line.js +98 -0
- package/map.d.ts +1 -1
- package/map.js +0 -1
- package/package.json +4 -4
- package/page/assets/{Banner-CrUhb26_.js → Banner-BcHZFaJb.js} +2 -2
- package/page/assets/{ConsoleFrame-6cEEvO4i.js → ConsoleFrame-Byq_hSpu.js} +3 -3
- package/page/assets/{ContextMenu-WnsgC14_.js → ContextMenu-C6S-GYrc.js} +2 -2
- package/page/assets/{ToolResultCharts-BEhuo0Z4.js → ToolResultCharts-CkEf5ub5.js} +1 -1
- package/page/assets/{TraceInspector-k1w1q0XO.js → TraceInspector-BsYHHhGv.js} +1 -1
- package/page/assets/{TraceOverview-Crxd-sTS.js → TraceOverview-CMFfbfGM.js} +2 -2
- package/page/assets/{_virtual_studio-type-sources-DAabvYbE.js → _virtual_studio-type-sources-CTIGQ210.js} +56 -48
- package/page/assets/browser-engine-DjYv346h.js +11 -0
- package/page/assets/browser-transport-Bm3uY9Fj.js +47 -0
- package/page/assets/{crypto-iT_LZ8Et.js → crypto-DAIn4qnM.js} +1 -1
- package/page/assets/{egress-automata-B5ZGE1mT.js → egress-automata-SiHQTP1i.js} +1 -1
- package/page/assets/{encode-files-8AFMw7Er.js → encode-files-oYzzs_iG.js} +1 -1
- package/page/assets/{export-agent-BedkRp13.js → export-agent-BeUTYowB.js} +3 -3
- package/page/assets/{guardrail-tester-XwnZWNsg.js → guardrail-tester-DLT99rnO.js} +2 -2
- package/page/assets/index-C9rhrCGT.css +1 -0
- package/page/assets/{index-BVHT-9mR.js → index-DNA-Y8Mp.js} +69 -69
- package/page/assets/{labels-provider-BSiD6Lrb.js → labels-provider-Gus3heEH.js} +1 -1
- package/page/assets/{live-messages-B65rUlNM.js → live-messages-BnBioidx.js} +1 -1
- package/page/assets/reader-BFYIhA73.js +7 -0
- package/page/assets/shaped-data-1Qn2111E.js +16 -0
- package/page/assets/{stub-DG5wxM-A.js → stub-B3GersQP.js} +2 -2
- package/page/assets/{studio-code-pane-p4fjtQhL.js → studio-code-pane-CCi7-lyE.js} +3 -3
- package/page/assets/{studio-console-BtZY4aUM.js → studio-console-CJT5FkWm.js} +1 -1
- package/page/assets/{studio-decision-BovTBIwV.js → studio-decision-DhHdHb7Z.js} +1 -1
- package/page/assets/{studio-embedding-BY6UQk0k.js → studio-embedding-B8vBhuZU.js} +1 -1
- package/page/assets/studio-host-console-CE_5_tEn.js +2 -0
- package/page/assets/{studio-labels-C3yQoEd0.js → studio-labels-C2SI_T2p.js} +1 -1
- package/page/assets/{studio-live-B_cVDiqs.js → studio-live-CKSSyYZj.js} +3 -3
- package/page/assets/studio-map-CKm_FCd9.js +1 -0
- package/page/assets/studio-trace-replay-BRMD6pex.js +2 -0
- package/page/assets/{studio-type-checker-Bljo3amv.js → studio-type-checker-DoaPHYNy.js} +1 -1
- package/page/assets/tool-schema-DXYwL5aE.js +18 -0
- package/page/assets/{trace-record-D4xAUHLZ.js → trace-record-DWxIfO7D.js} +1 -1
- package/page/assets/tree-Chi6mqzx.js +3 -0
- package/page/assets/{turn-client-CBWNoFgo.js → turn-client-DF0ije7A.js} +2 -2
- package/page/assets/types-2I4NfLiS.js +1 -0
- package/page/assets/{use-one-call-rh-5EjBB.js → use-one-call-Bhnpve1Y.js} +1 -1
- package/page/assets/{workspace-kAEf4Zn4.js → workspace-U3w2ELtN.js} +1 -1
- package/page/index.html +17 -17
- package/run-payload.d.ts +1 -1
- package/runtime.d.ts +1 -1
- package/runtime.js +1 -1
- package/server/draft-decide.d.ts +1 -4
- package/server/draft-decide.js +1 -1
- package/server/draft-replies.js +2 -2
- package/source.js +1 -1
- package/ui/brand-icons.d.ts +2 -2
- package/ui/brand-icons.js +6 -4
- package/ui/lib/tree-map-layout.d.ts +120 -18
- package/ui/lib/tree-map-layout.js +1292 -190
- package/ui/map-token.css +25 -0
- package/ui/node-icon.js +1 -4
- package/ui/profile-editor.js +1 -1
- package/ui/read-map.css +1 -24
- package/ui/read-map.js +52 -4
- package/ui/studio-map.js +1 -3
- package/ui/tree-map.css +9 -0
- package/ui/tree-map.d.ts +27 -6
- package/ui/tree-map.js +215 -75
- package/page/assets/browser-engine-C78edv3x.js +0 -11
- package/page/assets/browser-transport-mGxdvtBL.js +0 -47
- package/page/assets/index-Cbs7B46A.css +0 -1
- package/page/assets/reader-XebgyCzF.js +0 -7
- package/page/assets/shaped-data-Bc6u4pow.js +0 -16
- package/page/assets/studio-host-console-D9NFWXxV.js +0 -2
- package/page/assets/studio-map-iN6-MOzK.js +0 -1
- package/page/assets/studio-trace-replay-B3k21TSg.js +0 -2
- package/page/assets/tool-schema-BmScISma.js +0 -18
- package/page/assets/tree-BiZScKs7.js +0 -3
- package/page/assets/types-zRlFhC9U.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{g as r}from"./fieldParts-Cs6Amprh.js";import{t as i}from"./Icon-ZfFwTt8n.js";import{r as a,t as o}from"./IconButton-CG5klqF1.js";import{t as s}from"./Text-BsiAsowd.js";import{t as c}from"./createReactComponent-CZwsv6DD.js";import{n as l,t as u}from"./ScrollableArea-C8AVuqnt.js";import{n as d,t as f}from"./Center-nHS1JSux.js";import{t as p}from"./IconEye-BB5aY-wQ.js";import{t as m}from"./IconSearch-BTx66a40.js";import{r as h,s as g,t as _}from"./tree-BiZScKs7.js";import{P as v,i as y}from"./workspace-kAEf4Zn4.js";import{a as b,n as x,r as S}from"./studio-session-yEqFQo5o.js";import{t as C}from"./EmptyState-C8W4JKBZ.js";import{t as ee}from"./ContextMenu-WnsgC14_.js";import{Dt as w,Et as T,K as E,d as D,dt as O,ft as k,ht as A,lt as j,mt as M,n as N,pt as P,u as F,ut as I,z as L}from"./index-BVHT-9mR.js";var R=c(`outline`,`arrows-maximize`,`ArrowsMaximize`,[[`path`,{d:`M16 4l4 0l0 4`,key:`svg-0`}],[`path`,{d:`M14 10l6 -6`,key:`svg-1`}],[`path`,{d:`M8 20l-4 0l0 -4`,key:`svg-2`}],[`path`,{d:`M4 20l6 -6`,key:`svg-3`}],[`path`,{d:`M16 20l4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M14 14l6 6`,key:`svg-5`}],[`path`,{d:`M8 4l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M4 4l6 6`,key:`svg-7`}]]),z=c(`outline`,`arrows-minimize`,`ArrowsMinimize`,[[`path`,{d:`M5 9l4 0l0 -4`,key:`svg-0`}],[`path`,{d:`M3 3l6 6`,key:`svg-1`}],[`path`,{d:`M5 15l4 0l0 4`,key:`svg-2`}],[`path`,{d:`M3 21l6 -6`,key:`svg-3`}],[`path`,{d:`M19 9l-4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M15 9l6 -6`,key:`svg-5`}],[`path`,{d:`M19 15l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M15 15l6 6`,key:`svg-7`}]]),B=c(`outline`,`focus-2`,`Focus2`,[[`path`,{d:`M11.5 12a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0`,fill:`currentColor`,key:`svg-0`}],[`path`,{d:`M5 12a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`,key:`svg-1`}],[`path`,{d:`M12 3l0 2`,key:`svg-2`}],[`path`,{d:`M3 12l2 0`,key:`svg-3`}],[`path`,{d:`M12 19l0 2`,key:`svg-4`}],[`path`,{d:`M19 12l2 0`,key:`svg-5`}]]),V=c(`outline`,`layout-grid`,`LayoutGrid`,[[`path`,{d:`M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-0`}],[`path`,{d:`M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-1`}],[`path`,{d:`M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-2`}],[`path`,{d:`M14 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-3`}]]);function H(e,t,n){let r=e=>{let r=t.flatMap(({from:t,to:n})=>t===e.id?[n]:n===e.id?[t]:[]).flatMap(e=>n.get(e)??[]);return r.length===0?1/0:r.reduce((e,t)=>e+t,0)/r.length},i=new Map(e.map(e=>[e.id,r(e)])),a=e=>i.get(e.id)??1/0;return[...e].sort((e,t)=>a(e)===a(t)?0:a(e)-a(t))}function U(e,t,n){return t===`models`?e.modelBindings.map(e=>e.modelId||`New model`).join(`, `):t===`tools`?String(e.tools.allow.filter(e=>n.has(e)).length):t===`outputs`?e.outputs.mode:``}function W(e,t=[]){let n=[],r=new Map(e.agents.map(e=>[e.key,y(e.key)])),i=new Map(e.toolSpecs.map(e=>[e.key,g(e.key)])),a=v(e),o=e.agents.map((e,t)=>{let{agentId:n,profileType:r,handle:o}=e.identity,s=r||`text`;return{id:y(e.key),kind:`agent`,label:n||`New agent`,note:o?`${s} · ${o}`:s,opens:y(e.key),type:s,rows:(a.agents[t]?.children??[]).map(t=>({id:t.id,label:t.label,note:U(e,t.ref.facet,i),opens:t.id,type:t.ref.facet}))}}),s=new Set(o.flatMap(e=>e.rows??[]).map(e=>e.id)),c=(e,t)=>{let n=y(e,t);return s.has(n)?n:y(e)},l=new Map,u=new Map(e.providers.map(e=>[e.id,e.definition])),d=new Map;for(let t of e.agents){let e=c(t.key,`models`);for(let i of t.modelBindings){let a=`model:${i.provider}:${i.apiId}:${i.modelId}`,o=h(i.provider);l.has(o)||l.set(o,{id:o,kind:`provider`,label:i.provider,note:``,opens:u.has(i.provider)?o:y(t.key,_(i.key))});let s=y(t.key,_(i.key)),c=d.get(a);c?c.holds?.push(s):(d.set(a,{id:a,kind:`model`,label:i.modelId||`New model`,note:i.apiId,type:u.get(i.provider),opens:s,holds:[s]}),n.push({from:o,to:a,kind:`serves`})),n.some(t=>t.from===a&&t.to===e)||n.push({from:a,to:e,kind:`runs`});let f=i.compactWith?r.get(i.compactWith):void 0,p=n.some(t=>t.kind===`summarised`&&t.from===e);f&&f!==y(t.key)&&!p&&n.push({from:e,to:f,kind:`summarised`})}for(let e of t.tools.allow){let r=i.get(e);r&&n.push({from:c(t.key,`tools`),to:r,kind:`allows`})}}let f=e.toolSpecs.map(e=>{let t=g(e.key),i=e.toolType===`agent`?r.get(e.agentKey??``):void 0;return i&&n.push({from:t,to:i,kind:`asks`}),{id:t,kind:`tool`,label:e.toolName||`New tool`,note:e.description,opens:t,type:e.toolType}}),p=t.map(t=>{let{setting:i,facet:a}=t,o=`shared:${i.file}:${i.name}`,s=t.agents.filter(e=>r.has(e)),l=i.tools.flatMap(t=>{let n=e.toolSpecs.find(e=>e.toolName===t);return n?[g(n.key)]:[]});for(let e of s)n.push({from:o,to:a?c(e,a):y(e),kind:`sets`});for(let e of l)n.push({from:o,to:e,kind:`sets`});return{id:o,kind:`shared`,label:i.label,note:`${i.name} · ${i.file}:${String(i.line)}`,opens:E(t)??l[0],type:a}}),m=new Map(o.flatMap((e,t)=>[e.id,...(e.rows??[]).map(e=>e.id)].map(e=>[e,t])));for(let e of d.values())[...d.values()].some(t=>t!==e&&t.label===e.label)&&e.note&&(e.long=`${e.label} · ${e.note}`);let b=H([...d.values()],n,m),x=new Map(b.map((e,t)=>[e.id,t])),S=(...e)=>e.filter(e=>e.nodes.length>0);return{columns:[S({label:`Providers`,nodes:H([...l.values()],n,x)}),S({label:`Shared settings`,nodes:H(p,n,m)},{label:`Models`,nodes:b}),S({label:`Profiles`,nodes:o}),S({label:`Tools`,nodes:H(f,n,m)})].filter(e=>e.length>0),links:n}}function G(e){let t=e.columns.flat().flatMap(e=>e.nodes);return new Map(t.flatMap(e=>[e.id,...(e.rows??[]).map(e=>e.id)].map(t=>[t,e])))}function K(e){let t=G(e);return e.links.flatMap(e=>{let n=t.get(e.from)?.id,r=t.get(e.to)?.id;return n!==void 0&&r!==void 0?[{link:e,from:n,to:r}]:[]})}function te(e,t){let n=t.trim().toLowerCase();return n===``?[]:e.columns.flat().flatMap(e=>e.nodes).filter(e=>[e.label,e.long??``,e.note].some(e=>e.toLowerCase().includes(n))).map(e=>e.id)}function ne(e,t){let n=typeof t==`string`?[t]:t,r=K(e),i=(e,t)=>{let i=new Set(n),a=[...n];for(let n=a.pop();n!==void 0;n=a.pop())for(let o of r)o[e]!==n||i.has(o[t])||(i.add(o[t]),a.push(o[t]));return i},a=new Set([...i(`to`,`from`),...i(`from`,`to`)]),o=e.columns.map(e=>e.map(e=>({...e,nodes:e.nodes.filter(e=>a.has(e.id))})).filter(e=>e.nodes.length>0)).filter(e=>e.length>0),s=new Set(r.filter(({from:e,to:t})=>a.has(e)&&a.has(t)).map(({link:e})=>e));return{columns:o,links:e.links.filter(e=>s.has(e))}}var re={serves:[`Serves`,`Served by`],sets:[`Sets`,`Set by`],runs:[`Runs`,`Runs on`],allows:[`Allows`,`Allowed by`],asks:[`Asks`,`Asked by`],summarised:[`Summarised by`,`Summarises for`]};function ie(e,t){let n=G(e),r=new Map;for(let{link:i,from:a,to:o}of K(e)){if(a!==t&&o!==t)continue;let e=re[i.kind][a===t?0:1],s=n.get(a===t?o:a)?.label;s!==void 0&&r.set(e,[...r.get(e)??[],s])}return[...r].map(([e,t])=>`${e} ${t.join(`, `)}.`).join(` `)}function ae(e){return e.kind===`tool`||e.kind===`shared`?2:1}var oe=24,q=8,J=16;function se(e,t,n){let r=new Map,i=(e,t)=>`${e}:${String(t)}`;return K(e).flatMap(({link:e})=>{let[a,o]=[t(e.from),t(e.to)];if(a===void 0||o===void 0||Math.abs(a-o)<n)return[];let s=a<o?1:-1;for(let t of[i(e.from,s),i(e.to,-s)])r.set(t,(r.get(t)??0)+1);return[{link:e,way:s}]}).map(({link:e,way:t})=>{let[n,a]=[i(e.from,t),i(e.to,-t)],o=(r.get(n)??0)>=(r.get(a)??0);return{link:e,way:t,leaves:o,hub:o?n:a}})}function ce(e,t,n={}){let{node:r,card:i,columnGap:a,rowGap:o,heading:s,groupGap:c,padding:l,lineGap:u}=t,{moved:d={},widths:f={},detail:p=!1}=n,m=new Map;e.columns.forEach((e,t)=>{for(let n of e)for(let e of n.nodes)if(!Object.hasOwn(d,e.id))for(let n of[e.id,...(e.rows??[]).map(e=>e.id)])m.set(n,t)});let h=t=>{let n={},a=[],u=[],m=new Map,h=0,g=0;return e.columns.forEach((e,_)=>{let v=t[_]??l,y=l;e.forEach((e,t)=>{t>0&&(y+=c),a.push({label:e.label,x:v,y}),u.push({id:`heading:${_}:${t}`,x:v,y,width:r.width,height:s}),y+=s;for(let t of e.nodes){let e=p?t.rows??[]:[],a=e.length>0||t.note!==``,s=p&&(e.length>0||ae(t)===1)?i.head:r.height,c=p&&!a?i.row:s,l=e.length>0?i.head+e.length*i.row+i.foot:c,_=Math.min(f[t.id]??r.width,r.width),b=Object.hasOwn(d,t.id)?d[t.id]:void 0,x=b?{x:Math.max(b.x,0),y:Math.max(b.y,0)}:{x:v,y};n[t.id]={...x,height:l},u.push({id:t.id,...x,width:_,height:l});let S={left:x.x,right:x.x+_,y:x.y+(p?i.row:c)/2};m.set(t.id,S);for(let[e,n]of(t.rows??[]).entries())m.set(n.id,p?{...S,y:x.y+i.head+e*i.row+i.row/2}:S);h=Math.max(h,x.x+r.width),g=Math.max(g,x.y+l),y+=l+o}y-=o})}),{nodes:n,headings:a,boxes:u,ports:m,right:h,bottom:g}},g=(e,t,n)=>{let{way:i,leaves:a}=e,o={x:i>0?t.right+u:t.left-u,y:t.y},s={x:i>0?n.left-u:n.right+u,y:n.y},c=i>0?Math.max(t.left+r.width,t.right)+u:o.x,l=i>0?s.x:Math.max(n.left+r.width,n.right)+u,d=a?l:c,f=a?-i:i;return{start:o,end:s,side:d,into:f,room:Math.abs(l-c),strip:`${String(d)}:${String(f)}`}},_=t=>{let n=new Map(se(e,e=>t.get(e)?.left,r.width).map(e=>[e.link,e])),i=new Map;for(let e of n.values()){let n=t.get(e.link.from),r=t.get(e.link.to);if(!n||!r||n.y===r.y)continue;let{strip:a}=g(e,n,r),o=i.get(a)??new Map,s=e.leaves?e.link.to:e.link.from,c=o.get(e.hub)??{y:e.leaves?n.y:r.y,joins:[],beside:s};c.joins.push(e.leaves?r.y:n.y),i.set(a,o.set(e.hub,c))}let a=new Map,o=new Map;for(let[e,t]of i){let n=e=>e.reduce((e,t)=>e+t,0)/e.length,r=[...t.values()],i=n(r.flatMap(e=>e.joins))>=n(r.map(e=>e.y)),s=[];for(let[n,r]of[...t].sort(([,e],[,t])=>i?e.y-t.y:t.y-e.y)){let t=Math.min(r.y,...r.joins)-q,i=Math.max(r.y,...r.joins)+q,o=s.findIndex(e=>e.every(e=>i<e.low||t>e.high)),c=o<0?s.length:o;s[c]=[...s[c]??[],{low:t,high:i}],a.set(`${e}:${n}`,c)}let[c]=r;c&&o.set(e,{count:s.length,beside:c.beside,into:Number(e.split(`:`)[1])})}return{spans:n,rails:a,held:o}},v=e.columns.map((e,t)=>l+t*(r.width+a)),y=e.columns.map(()=>0);for(let{count:e,beside:t,into:n}of _(h(v).ports).held.values()){let r=m.get(t);if(r===void 0)continue;let i=n>0?r:r-1;i>=0&&i<y.length&&(y[i]=(y[i]??0)+e+1)}let b=[l];for(let[e,t]of y.entries())b.push((b[e]??l)+r.width+Math.max(a,t*J));let x=h(b),{nodes:S,headings:C,boxes:ee,ports:w}=x,{right:T,bottom:E}=x,{spans:D,rails:O}=_(w),k=a/2,j=Math.max(o/2,u),N=[],P=new Map,F=Math.max(a,...y.map(e=>e*J)),I=K(e).flatMap(({link:e,from:t,to:n})=>{let i=w.get(e.from),o=w.get(e.to);if(!i||!o)return[];let s=ee.filter(e=>e.id!==t&&e.id!==n);if(Math.abs(i.left-o.left)<r.width){let r=i.right+u,a=o.right+u,c=s.filter(e=>e.y<Math.max(i.y,o.y)&&e.y+e.height>Math.min(i.y,o.y)&&e.x<Math.max(r,a)+k&&e.x+e.width>Math.min(i.left,o.left)),l=Math.max(r,a,...c.map(e=>e.x+e.width))+k;return T=Math.max(T,l),[{link:e,from:t,to:n,d:M({x:r,y:i.y},{x:a,y:o.y},l).d}]}let c=D.get(e);if(!c)return[];let{way:l,leaves:d,hub:f}=c,{start:p,end:m,side:h,into:_,room:v,strip:y}=g(c,i,o),b=h+_*Math.min((1+(O.get(`${y}:${f}`)??0))*J,Math.max(v-J,0)),x=v<32?M(p,m):A(p,m,b,q),S=(e,t)=>t>e.y-j&&t<e.y+e.height+j,C=Math.abs(m.x-p.x)<F+a?[]:s.filter(e=>Array.from({length:23},(e,t)=>x.at((t+1)/oe)).some(t=>t.x>e.x&&t.x<e.x+e.width&&S(e,t.y)));if(C.length===0)return[{link:e,from:t,to:n,d:x.d}];let[I,L]=[Math.min(p.x,m.x),Math.max(p.x,m.x)],R=e=>{let t=[...C];for(;;){let n=e<0?Math.min(...t.map(e=>e.y))-j:Math.max(...t.map(e=>e.y+e.height))+j,r=[...s,...N].filter(e=>!t.includes(e)&&e.x<L&&e.x+e.width>I&&S(e,n));if(r.length===0)return n;t.push(...r)}},z=e=>Math.abs(i.y-e)+Math.abs(o.y-e),B=`${f}:${y}`,V=P.get(B)??(()=>{let[e,t]=[R(-1),R(1)],n=e>=0&&z(e)<=z(t)?e:t;return N.push({id:``,x:I,y:n-q+j,width:L-I,height:2*(q-j)}),P.set(B,n),n})();E=Math.max(E,V);let H=d?p.x+l*J:b,U=d?b:m.x-l*J,W={x:(H+U)/2,y:V};return[{link:e,from:t,to:n,d:A(p,W,H,q).d+A(W,m,U,q).d.replace(/^M \S+ \S+/,``)}]});return{width:Math.max((b[Math.max(e.columns.length-1,0)]??l)+r.width,T)+l,height:Math.max(E,l)+l,nodes:S,headings:C,lines:I}}var Y=e(n(),1),le={tokens:{},detail:{},expanded:!1},X=e=>e===void 0?`${x}.map`:`${x}.map.project:${e}`;function ue(e){if(!S(e))return{};let t={};for(let[n,r]of Object.entries(e))S(r)&&typeof r.x==`number`&&typeof r.y==`number`&&(t[n]={x:r.x,y:r.y});return t}function de(e){try{let t=JSON.parse(b()?.getItem(X(e))??`null`);return S(t)?{tokens:ue(t.tokens),detail:ue(t.detail),expanded:t.expanded===!0,...typeof t.family==`string`?{family:t.family}:{}}:le}catch{return le}}function fe(e,t){let{tokens:n,detail:r,expanded:i,family:a}=t,o=Object.keys(n).length===0&&Object.keys(r).length===0&&!i&&a===void 0;try{o?b()?.removeItem(X(e)):b()?.setItem(X(e),JSON.stringify(t))}catch{}}function pe(e){for(let t=e.parentElement;t;t=t.parentElement){let{overflowX:e,overflowY:n}=getComputedStyle(t);if(/auto|scroll/.test(`${e} ${n}`))return t}}function me(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return{left:n.left-r.left+t.scrollLeft,top:n.top-r.top+t.scrollTop}}var he=(e,t)=>Math.min(Math.max(e,0),Math.max(t,0));function ge(e,t){let n=0,r=120,i=()=>{--r;let a=pe(e);if(a&&a.scrollWidth>a.clientWidth){let e=t(a),n=he(e.left,a.scrollWidth-a.clientWidth),r=he(e.top,a.scrollHeight-a.clientHeight);if(a.scrollTo({left:n,top:r,behavior:`instant`}),Math.abs(a.scrollLeft-n)<1&&Math.abs(a.scrollTop-r)<1)return}r>0&&(n=requestAnimationFrame(i))};return i(),()=>{cancelAnimationFrame(n)}}var _e=e=>e.button===0&&e.pointerType!==`touch`;function ve(e,t,n){let{pointerId:r,clientX:i,clientY:a}=e,o=e=>{e.pointerId===r&&t(e.clientX-i,e.clientY-a)},s=e=>{e.pointerId===r&&(globalThis.removeEventListener(`pointermove`,o),globalThis.removeEventListener(`pointerup`,s),globalThis.removeEventListener(`pointercancel`,s),n(e.type===`pointerup`))};globalThis.addEventListener(`pointermove`,o),globalThis.addEventListener(`pointerup`,s),globalThis.addEventListener(`pointercancel`,s)}function ye(e){let[t,n]=(0,Y.useState)(!1);return{panning:t,pan:t=>{if(!_e(t)||t.target.closest(e))return;let r=pe(t.currentTarget);if(!r)return;let{scrollLeft:i,scrollTop:a}=r;n(!0),ve(t,(e,t)=>{r.scrollTo({left:i-e,top:a-t,behavior:`instant`})},()=>{n(!1)})}}}var Z=t(),be={node:{width:240,height:24},card:{head:60,row:28,foot:4},columnGap:96,rowGap:6,heading:24,groupGap:16,padding:24,lineGap:8},xe={...be,node:{width:240,height:84}},Se=28;function Ce(e){return e.length>Se?`${e.slice(0,27)}…`:e}function we({kind:e,type:t,note:n}){return(e===`agent`?k(t):void 0)||(e===`tool`?P(t??``):e===`model`&&t===`typesafe`?F:e===`model`?D(n)??N.modelBinding:e===`provider`?w:e===`shared`&&t&&Object.hasOwn(N,t)?N[t]:e===`agent`?O.text:T)}function Te(e){return Object.hasOwn(N,e)?N[e]:T}function Q(e,t){return e.kind===`agent`?t===e.id||t.startsWith(`${e.id}/`):e.kind===`model`?e.holds?.includes(t)??!1:e.kind===`tool`&&t===e.id}var Ee=4,De=24,Oe={ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0},ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1}};function ke(e){let t=L()?.name,[n,r]=(0,Y.useState)(()=>de(t)),i=e=>{r(e),fe(t,e)},{expanded:a}=n,o=e.columns.flat().some(e=>e.nodes.some(e=>e.id===n.family))?n.family:void 0,s=(0,Y.useMemo)(()=>o===void 0?e:ne(e,o),[e,o]),[c,l]=(0,Y.useState)({}),u=a?`detail`:`tokens`;return{expanded:a,family:o,map:s,moved:o===void 0?n[u]:c,put(e,t){o===void 0?t?i({...n,[u]:e}):r({...n,[u]:e}):l(e)},showFamily(e){l({});let{tokens:t,detail:r}=n;i({tokens:t,detail:r,expanded:a,...e===void 0?{}:{family:e}})},expand(){i({...n,expanded:!a})}}}function Ae(e,t,n){let r=(0,Y.useRef)(!1),[i,a]=(0,Y.useState)();return{dragging:i,draggable:i=>({onPointerDown:o=>{r.current=!1;let s=e.nodes[i];if(!s||!_e(o))return;let c;ve(o,(e,r)=>{!c&&Math.hypot(e,r)<Ee||(c||a(i),c={...t,[i]:{x:Math.max(s.x+e,0),y:Math.max(s.y+r,0)}},n(c,!1))},e=>{c&&(r.current=e,globalThis.setTimeout(()=>{r.current=!1},0),a(void 0),n(c,!0))})},onClickCapture:e=>{r.current&&(r.current=!1,e.stopPropagation(),e.preventDefault())},onKeyDown:r=>{let a=r.altKey?Oe[r.key]:void 0,o=e.nodes[i];if(!a||!o)return;r.preventDefault();let s=Math.max(o.x+a.x*De,0),c=Math.max(o.y+a.y*De,0);n({...t,[i]:{x:s,y:c}},!0)}})}}function je(e){let[t,n]=(0,Y.useState)(),[r,i]=(0,Y.useMemo)(()=>{let n=new Set,r=new Set;if(t===void 0)return[n,r];n.add(t);for(let{link:i,from:a,to:o}of e.lines)if([i.from,i.to,a,o].includes(t)){r.add(i);for(let e of[i.from,i.to,a,o])n.add(e)}return[n,r]},[e,t]);return{lit:t,on:r,onLines:i,lights:e=>({onPointerEnter:()=>{n(e)},onPointerLeave:()=>{n(void 0)},onFocus:()=>{n(e)},onBlur:()=>{n(void 0)}})}}function Me(e,t,n){let r=(0,Y.useRef)(n.place);r.current=n.place;let{sizes:i}=n;(0,Y.useEffect)(()=>{let n=e.current;if(!n)return;let a=r.current,o=t===void 0?a:void 0;return ge(n,e=>{let{left:t,top:r}=me(n,e);return o===void 0?{left:t,top:r}:{left:t+o.x+i.node.width/2-e.clientWidth/2,top:r+o.y+o.height/2-e.clientHeight/2}})},[e,t,i])}function Ne(e,t,n){let{family:r,expanded:i,isMoved:a,showFamily:o,expand:s,tidy:c}=n,l=[];e&&e.id!==r&&l.push({label:`Show only its family`,icon:B,onClick:()=>{o(e.id)}});let u=e?.opens;u!==void 0&&l.push({label:`Open`,icon:d,onClick:()=>{t(u)}}),e&&l.push({type:`divider`});let f={label:`Show everything`,icon:p,onClick:()=>{o(void 0)}};return[...l,...r===void 0?[]:[f],{label:i?`Collapse`:`Expand`,icon:i?z:R,onClick:s},{label:`Tidy`,icon:V,isDisabled:!a,onClick:c}]}function Pe({actions:e,query:t,onQuery:n,onClose:s}){let{family:c,expanded:u,isMoved:d,showFamily:f,expand:h,tidy:g}=e;return(0,Z.jsxs)(`div`,{className:`studio-map-tools`,children:[(0,Z.jsx)(l,{label:`Search the map`,isLabelHidden:!0,size:`sm`,width:200,placeholder:`Search`,startIcon:m,hasClear:!0,value:t,onChange:n}),c!==void 0&&(0,Z.jsx)(a,{label:`Show everything`,variant:`ghost`,size:`sm`,icon:(0,Z.jsx)(i,{icon:p,size:`sm`}),onClick:()=>{f(void 0)}}),d&&(0,Z.jsx)(a,{label:`Tidy`,variant:`ghost`,size:`sm`,icon:(0,Z.jsx)(i,{icon:V,size:`sm`}),onClick:g}),(0,Z.jsx)(o,{label:u?`Collapse`:`Expand`,variant:`ghost`,size:`sm`,icon:(0,Z.jsx)(i,{icon:u?z:R,size:`sm`}),tooltip:u?`Show each node as a token`:`Show sections and descriptions`,onClick:h}),(0,Z.jsx)(o,{label:`Close map`,variant:`ghost`,size:`sm`,icon:(0,Z.jsx)(i,{icon:r,size:`sm`}),tooltip:`Close the map`,onClick:s})]})}function $({node:e,on:t,isFound:n,isDragging:r}){let i=t.has(e.id)||(e.rows??[]).some(e=>t.has(e.id));return{"data-map-node":e.id,"data-on":i?``:void 0,"data-found":n?``:void 0,"data-dragging":r?``:void 0}}function Fe(e){let{node:t,place:n,joins:r,selected:i,onOpen:a,lights:o,drag:s}=e,{opens:c}=t,l=Q(t,i);return(0,Z.jsx)(j,{id:t.id,label:Ce(t.long??t.label),icon:we(t),x:n.x,y:n.y+n.height/2,color:l?`blue`:void 0,description:[t.note,r].filter(Boolean).join(`. `)||void 0,onOpen:c===void 0?void 0:()=>{a(c)},title:(t.long??t.label).length>Se?t.long??t.label:void 0,"aria-current":l?`true`:void 0,...$(e),...o(t.id),...s})}function Ie(e){let{node:t,place:n,joins:r,selected:a,on:o,onOpen:c,lights:l,drag:u}=e,{opens:d}=t,f=t.rows??[],p={left:n.x,top:n.y,height:n.height},m=(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`span`,{className:`studio-map-name`,children:[(0,Z.jsx)(i,{icon:we(t),size:`sm`}),(0,Z.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:t.label})]}),t.note&&(0,Z.jsx)(s,{type:`supporting`,maxLines:f.length>0?1:ae(t),hasTruncateTooltip:!1,className:`studio-map-note`,children:t.note})]}),h={type:`button`,title:t.note||void 0,"aria-description":r||void 0,disabled:d===void 0,onClick:()=>{d!==void 0&&c(d)},...l(t.id)};return f.length===0?(0,Z.jsx)(`button`,{...h,...u,...$(e),className:`studio-map-node`,"data-map-token":t.id,style:p,"aria-current":Q(t,a)?`true`:void 0,children:m}):(0,Z.jsxs)(`div`,{className:`studio-map-card`,"data-map-token":t.id,style:p,"data-open":Q(t,a)?``:void 0,...$(e),...u,children:[(0,Z.jsx)(`button`,{...h,className:`studio-map-head`,"aria-current":a===t.id?`true`:void 0,children:m}),f.map(e=>(0,Z.jsxs)(`button`,{type:`button`,className:`studio-map-row`,"aria-current":a===e.id?`true`:void 0,"data-on":o.has(e.id)?``:void 0,onClick:()=>{c(e.opens)},...l(e.id),children:[(0,Z.jsx)(i,{icon:Te(e.type),size:`sm`}),(0,Z.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:e.label}),e.note&&(0,Z.jsx)(s,{type:`supporting`,maxLines:1,justify:`end`,hasTruncateTooltip:!1,className:`studio-map-row-note`,children:e.note})]},e.id))]})}function Le({workspace:e,shared:t,selected:n,onOpen:r,onClose:a}){let{expanded:o,family:c,map:l,moved:d,put:p,showFamily:h,expand:g}=ke((0,Y.useMemo)(()=>W(e,t),[e,t])),[_,v]=(0,Y.useState)(``),y=(0,Y.useMemo)(()=>te(l,_),[l,_]),b=(0,Y.useMemo)(()=>_.trim()===``?l:ne(l,y),[l,_,y]),x=_.trim()!==``&&y.length===0,S=(0,Y.useRef)(null),w=o?xe:be,T=(0,Y.useMemo)(()=>({map:b,expanded:o}),[b,o]),E=I(S,T),D=(0,Y.useMemo)(()=>ce(b,w,{moved:d,widths:E,detail:o}),[b,w,o,d,E]),O=b.columns.flat().flatMap(e=>e.nodes),k=O.find(e=>Q(e,n))?.id;Me(S,c,{place:k===void 0?void 0:D.nodes[k],sizes:w});let{dragging:A,draggable:j}=Ae(D,d,p),{panning:M,pan:N}=ye(`[data-map-node]`),{lit:P,on:F,onLines:L,lights:R}=je(D),z={family:c,expanded:o,isMoved:O.some(e=>Object.hasOwn(d,e.id)),showFamily:h,expand:g,tidy:()=>{p({},!0)}},[B,V]=(0,Y.useState)(),H=Ne(O.find(e=>e.id===B),r,z),U=o?Ie:Fe,G=O.find(e=>Q(e,n))?.id,K=e=>L.has(e.link)?2:+(e.from===G||e.to===G),re=[...D.lines].sort((e,t)=>K(e)-K(t));return(0,Z.jsxs)(`div`,{className:`studio-map-frame`,role:`none`,onKeyDown:e=>{e.key===`Escape`&&c!==void 0&&(e.target.closest(`[role="menu"]`)||(e.stopPropagation(),h(void 0)))},children:[(0,Z.jsx)(u,{className:`studio-map-scroll`,axis:`both`,role:`region`,label:`Map`,height:`100%`,overscroll:`allow`,children:(0,Z.jsx)(ee,{items:H,label:`Map actions`,"data-map-field":``,children:(0,Z.jsxs)(`div`,{ref:S,className:`studio-map`,"data-lit":P===void 0||A!==void 0?void 0:``,"data-panning":M?``:void 0,onPointerDown:N,onContextMenuCapture:e=>{V(e.target.closest(`[data-map-node]`)?.dataset.mapNode)},style:{"--map-width":`${String(D.width)}px`,"--map-height":`${String(D.height)}px`,"--map-slot":`${String(w.node.width)}px`,"--map-line":`${String(w.card.row)}px`},children:[(0,Z.jsx)(`svg`,{className:`studio-map-lines`,width:D.width,height:D.height,"aria-hidden":`true`,children:re.map(({link:e,from:t,to:n,d:r})=>(0,Z.jsx)(`path`,{className:`map-line`,d:r,"data-kind":e.kind,"data-on":L.has(e)?``:void 0,"data-open":t===G||n===G?``:void 0},`${e.kind}:${e.from}:${e.to}`))}),D.headings.map(({label:e,x:t,y:n})=>(0,Z.jsx)(`div`,{className:`studio-map-heading`,style:{left:t,top:n},children:(0,Z.jsx)(s,{type:`supporting`,color:`secondary`,weight:`semibold`,children:e})},e)),O.map(e=>{let t=D.nodes[e.id];return t&&(0,Z.jsx)(U,{node:e,place:t,joins:ie(b,e.id),selected:n,on:F,isFound:y.includes(e.id),isDragging:A===e.id,onOpen:r,lights:R,drag:j(e.id)},e.id)})]})})}),x&&(0,Z.jsx)(f,{className:`studio-map-nothing`,children:(0,Z.jsx)(C,{headingLevel:2,icon:(0,Z.jsx)(i,{icon:m,size:`lg`}),title:`Nothing matches`})}),(0,Z.jsx)(Pe,{actions:z,query:_,onQuery:v,onClose:a})]})}export{Le as StudioMap};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{n as r,t as i}from"./SegmentedControlItem-BLuJOusN.js";import{t as a}from"./VStack-CkVMcNiK.js";import{A as o,_ as s,a as c,o as l,s as u,v as d}from"./browser-transport-mGxdvtBL.js";import{r as f}from"./IconButton-CG5klqF1.js";import{t as p}from"./Text-BsiAsowd.js";import{n as m,t as h}from"./labels-provider-BSiD6Lrb.js";import{a as g,t as _}from"./Banner-CrUhb26_.js";import{t as v,v as ee}from"./studio-labels-C3yQoEd0.js";import{c as y}from"./host-patterns-C9RMP16Q.js";import{w as b}from"./shaped-data-Bc6u4pow.js";import{n as x}from"./trace-record-D4xAUHLZ.js";import{n as S}from"./trace-schema-9CdEyG6Q.js";import{_ as C}from"./turn-client-CBWNoFgo.js";import{a as w,i as T,o as E,t as D}from"./ConsoleFrame-6cEEvO4i.js";import{C as te,a as O,b as ne,g as re,x as ie}from"./index-BVHT-9mR.js";var k=e=>typeof e==`object`&&!!e&&!Array.isArray(e),A=(e,t)=>e.attributes[t],j=(e,t)=>{let n=A(e,t);return typeof n==`string`?n:void 0};function M(e,t,n){let r=A(t,n);return r===void 0?void 0:x(e,r)}function N(e,t,n){let r=M(e,t,n);return r===void 0?``:typeof r==`string`?r:JSON.stringify(r)}function P(e,t,n){let r=M(e,t,n);return Array.isArray(r)?r.filter(k):[]}var F=e=>Array.isArray(e.parts)?e.parts.filter(k):[],I=e=>BigInt(String(e.startTimeUnixNano)),L=(e,t)=>{let n=I(e)-I(t);return n===0n?0:n<0n?-1:1},ae=e=>`content_sha256`in e||`json_sha256`in e;function R(e){let t=e.arguments;if(k(t))return t;if(typeof t!=`string`)return{};try{let e=JSON.parse(t);return k(e)?e:{}}catch{return{}}}function z(e){if(typeof e.content==`string`){if(e.type===`reasoning`)return{type:`thought`,text:e.content};if(e.type===`text`)return{type:`text`,text:e.content}}}function oe(e){let t=[],n=[],r=!1;for(let i of e){let e=F(i),a=e.some(e=>e.type===`text`);for(let i of e){let e=z(i);ae(i)?r=!0:e?t.push(e):i.type===`structured`&&!a?t.push({type:`text`,text:JSON.stringify(i.content)}):i.type===`tool_call`&&typeof i.name==`string`?(n.push(i.name),t.push({type:`tool`,tool:{name:i.name,callId:typeof i.id==`string`?i.id:`replay-${String(n.length)}`,arguments:R(i)}})):(i.type===`blob`||i.type===`uri`)&&(r=!0)}}return{events:t,calls:n,missing:r}}function se(e,t){for(let n=e;n;n=t.get(n.parentSpanId??``)){let e=j(n,`gen_ai.agent.name`);if(j(n,`gen_ai.operation.name`)===`invoke_agent`&&e)return e}return``}var B=e=>j(e,`gen_ai.operation.name`);function ce(e){let t=new Map(e.spans.map(e=>[e.spanId,e]));return e.spans.filter(e=>B(e)===`chat`).toSorted(L).map(n=>{let r=oe(P(e,n,`gen_ai.output.messages`)),i=j(n,`theorem.stop.kind`)??`completed`;return{agent:se(n,t),...r,events:[...r.events,{type:`done`,stop:{kind:i}}]}})}function le(e){return e.spans.filter(e=>B(e)===`execute_tool`).toSorted(L).map(t=>({name:j(t,`gen_ai.tool.name`)??``,result:N(e,t,`gen_ai.tool.call.result`),failed:j(t,`theorem.tool.outcome`)===`error`}))}function ue(e,t){let n=P(e,t,`gen_ai.input.messages`).findLast(e=>e.role===`user`),r=n?F(n):[];return{text:r.flatMap(e=>e.type===`text`&&typeof e.content==`string`?[e.content]:[]).join(`
|
|
2
|
-
`),attachments:r.filter(e=>e.type===`blob`||e.type===`uri`).length}}function de(e,t){let n=e.spans.filter(e=>B(e)===`execute_tool`).toSorted(L),r=new Set,i=(e,t)=>{let i=n.find(t=>j(t,`gen_ai.tool.call.id`)===e)??n.find(e=>!r.has(e)&&j(e,`gen_ai.tool.name`)===t);return i&&r.add(i),i},a=[];for(let n of P(e,t,`gen_ai.output.messages`))for(let t of F(n)){let n=z(t);if(n)a.push(n);else if(t.type===`tool_call`&&typeof t.name==`string`){let n=typeof t.id==`string`?t.id:`call-${String(a.length)}`;a.push(...V(e,t.name,n,R(t),i))}}let o=N(e,t,`theorem.error.public`);t.status.code===`ERROR`&&a.push({type:`error`,errorKind:`internal`,error:o||t.status.message});let s=j(t,`theorem.stop.kind`)??`completed`;return a.push({type:`done`,stop:{kind:s}}),a}function V(e,t,n,r,i){let a=i(n,t),o={type:`tool`,tool:{name:t,callId:n,arguments:r}};if(!a)return[o];let s=Number(I(a)/1000000n),c=N(e,a,`gen_ai.tool.call.result`);return[o,{type:`tool`,tool:{name:t,callId:n,at:s,...j(a,`theorem.tool.outcome`)===`error`?{phase:`error`,failure:{code:j(a,`theorem.tool.failure.code`)??`failed`,kind:`internal`,message:c}}:{phase:`complete`,output:H(c)}}}]}function H(e){try{return JSON.parse(e)}catch{return e}}function fe(e){let t=``,n,r=[];return e.forEach((e,i)=>{let a=b(e);if(!a||B(a)!==`invoke_agent`)return;let o=j(a,`gen_ai.agent.name`)??``;t||=o;let s=ce(e),c=le(e),l=r.at(-1);if(o!==t&&l){l.calls.push(...s),l.results.push(...c);return}n??=Number(I(a)/1000000n);let u=ue(e,a);r.push({...u,calls:s,results:c,blocks:C({text:u.text},de(e,a),{idPrefix:`recorded-${String(i)}`})})}),{agent:t,turns:r,...n===void 0?{}:{recordedAt:n}}}function pe(e){if(e.failed)throw Error(e.result);let t=H(e.result);return k(t)?t:{result:t}}var me=e=>{let t=e%100,n=t>=11&&t<=13?`th`:{1:`st`,2:`nd`,3:`rd`}[e%10]??`th`;return`${String(e)}${n}`};function he(e,t,n){if(!e)return`The profile asked the model a ${me(t+1)} time this turn; the recording answered ${String(t)}.`;if(e.missing)return`The recording does not hold all of this reply.`;let r=new Set((n.wireTools??[]).map(e=>e.name)),i=e.calls.find(e=>!r.has(e));return i&&`The recording calls ${i}, which the profile no longer offers.`}function ge(e,t,n){let r=0,i=new Map,a=new Map,o=t=>{let n=a.get(t);if(!n){n=new Map;for(let r of e.turns[t]?.results??[])n.set(r.name,[...n.get(r.name)??[],r]);a.set(t,n)}return n},s=t=>({async*complete(a){let o=e.turns[r]?.calls.filter(e=>e.agent===t)??[],s=`${String(r)} ${t}`,c=i.get(s)??0;i.set(s,c+1);let l=he(o[c],o.length,a);if(l)throw n({turn:r,call:c+1,reason:l}),new y(`request`,`Replay stopped: ${l}`);yield*o[c]?.events??[]}}),c=e=>()=>{let t=o(r).get(e)?.shift();if(!t)throw Error(`The recording has no further result for ${e}.`);return pe(t)},l=new Set(e.turns.flatMap(e=>e.results.map(e=>e.name)));return{provider:n=>s(n.id===t?e.agent:n.id),toolHandlers:Object.fromEntries([...l].map(e=>[e,c(e)])),startTurn:e=>{r=e}}}function U(e){return e.map(e=>{if(e.type===`agent`)return e;let{name:t,description:n,category:r,access:i,permission:a,loadTier:o,paths:s}=e;return{type:`function`,name:t,description:n,category:r,access:i,permission:a,loadTier:o,paths:s,inputSchema:e.inputSchema,outputSchema:e.outputSchema,...e.labels?{labels:e.labels}:{}}})}function _e(e){return{...e,customTools:U(e.customTools),...e.dependencies?{dependencies:e.dependencies.map(e=>({...e,customTools:U(e.customTools)}))}:{}}}function W(e){return e.turns.flatMap(e=>e.blocks)}function ve(e){let t;try{t=JSON.parse(e)}catch{throw new y(`request`,`This file is not JSON.`)}let n=Array.isArray(t)?t:[t];return n.map((e,t)=>{let r=S.safeParse(e);if(r.success)return r.data;let i=n.length>1?` (record ${String(t+1)})`:``;throw new y(`request`,`This file is not a Theorem trace${i}.`)})}var G=e(n(),1),K=t();function ye(e,t,n){return t?l(e,t,{conversationKey:O(),blocks:n}):s(e,n)}var q=e=>`turn ${String(e+1)}`;function J({iface:e,feed:t,trace:n,card:r,conversation:i}){let a=g(e,t,n);return(0,K.jsxs)(D,{inspector:a,maxWidth:`960px`,requestLabel:`Trace`,children:[r,i]})}function Y({iface:e,blocks:t,banner:n,chat:r}){let i=m();return(0,K.jsxs)(w,{label:`Conversation`,children:[n,(0,K.jsx)(te,{blocks:t,handle:i(`@theorem.agent.handle`,{handle:e.identity.handle}),labels:e.labels,streaming:r?.streaming,delivery:r?.delivery,answering:r?.answering,onToolDecision:r&&((e,t)=>{r.handleToolDecision(e,t)}),onAuthenticated:r&&((e,t)=>{r.handleAuthenticated(e,t)})})]})}function be({onImport:e}){let[t,n]=(0,G.useState)(),[r,i]=(0,G.useState)(!1);return(0,K.jsxs)(a,{gap:2,children:[(0,K.jsx)(ie,{label:`Trace file`,isLabelHidden:!0,mode:`dropzone`,accept:`application/json,.json`,isLoading:r,placeholder:`Drop a trace (.json) or choose a file`,value:null,changeAction:async t=>{let r=Array.isArray(t)?t[0]:t;if(r){i(!0);try{e({name:r.name,records:ve(await r.text())}),n(void 0)}catch(e){n(e instanceof Error?e.message:String(e))}finally{i(!1)}}},onChange:()=>void 0}),t?(0,K.jsx)(_,{status:`error`,title:t}):null]})}var xe=e=>e.recordedAt===void 0?void 0:new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(e.recordedAt);function Se({shown:e,onShown:t}){return(0,K.jsxs)(r,{label:`Show`,size:`sm`,value:e,onChange:e=>{t(e===`replayed`?`replayed`:`recorded`)},children:[(0,K.jsx)(i,{value:`recorded`,label:`Recorded`}),(0,K.jsx)(i,{value:`replayed`,label:`Replayed`})]})}function X({controls:e}){let{script:t,payload:n}=e,r=t.turns.length,i=[t.agent||`No agent`,`${String(r)} ${r===1?`turn`:`turns`}`,xe(t)];return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(a,{gap:0,children:[(0,K.jsx)(p,{type:`label`,maxLines:1,children:e.opened.name}),(0,K.jsx)(p,{type:`supporting`,color:`secondary`,maxLines:1,children:i.filter(Boolean).join(` · `)})]}),t.agent&&t.agent!==n.profile.id?(0,K.jsx)(_,{status:`info`,title:`Recorded with ${t.agent}; a replay runs through ${n.profile.id}.`}):null,r===0?(0,K.jsx)(_,{status:`info`,title:`This trace holds no conversation to replay.`}):null,(0,K.jsx)(ne,{label:`Live tools`,description:`Run the profile's tools instead of answering them from the recording.`,value:e.liveTools,onChange:e.onLiveTools})]})}var Z=()=>void 0;function Q({onImport:e,controls:t}){let n=t?.onReplay??Z;return(0,K.jsxs)(T,{title:`Trace`,onRun:n,actions:t?.shown?(0,K.jsx)(Se,{shown:t.shown,onShown:t.onShown}):null,children:[(0,K.jsx)(be,{onImport:e}),t?(0,K.jsx)(X,{controls:t}):null,(0,K.jsx)(E,{note:t?`Answers each model call from the recording, so it needs no keys.`:null,isReady:(t?.script.turns.length??0)>0,isRunning:t?.isRunning??!1,runLabel:t?.shown?`Replay again`:`Replay`,runningLabel:`Replaying`,stopLabel:`Stop`,onRun:n,onStop:t?.onStop??Z})]})}function Ce({status:e,turns:t,onContinue:n,onLive:r}){let[i,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(),l=e=>(0,K.jsx)(f,{label:`Continue live`,variant:`secondary`,size:`sm`,isLoading:i,onClick:async()=>{o(!0),c(void 0);try{await r(e)}catch(e){c(e instanceof Error?e.message:String(e)),o(!1)}}}),u=(()=>{switch(e.kind){case`running`:return(0,K.jsx)(_,{status:`info`,title:`Replaying ${q(e.turn)} of ${String(t)}`});case`waiting`:return(0,K.jsx)(_,{status:`info`,title:`${q(e.turn-1)} waits on you`,description:`Answer it in the conversation, then continue the replay.`,endContent:(0,K.jsx)(f,{label:`Continue replay`,variant:`secondary`,size:`sm`,onClick:()=>{n(e.turn)}})});case`missing`:return(0,K.jsx)(_,{status:`warning`,title:`Replay stopped before ${q(e.turn)}`,description:`It was sent with files, and a trace never holds a file's bytes. Continue live to send it again with yours.`,endContent:l(e.turn)});case`diverged`:{let{turn:t,call:n,reason:r}=e.divergence;return(0,K.jsx)(_,{status:`warning`,title:`Replay stopped at ${q(t)}, model call ${String(n)}`,description:r,endContent:l(t)})}case`failed`:return(0,K.jsx)(_,{status:`error`,title:`Replay stopped at ${q(e.turn)}`,description:e.message,endContent:l(e.turn)});case`done`:return(0,K.jsx)(_,{status:`success`,title:`Replayed ${String(t)} ${t===1?`turn`:`turns`}`,description:`Every model call this profile made was one the recording answered.`})}})();return(0,K.jsxs)(a,{gap:1,children:[u,s?(0,K.jsx)(_,{status:`error`,title:s}):null]})}function $(e){let t=o();for(let n of e)t.push(n);return t}function we({payload:e,iface:t,trace:n,card:r,opened:i,script:a,shown:s,liveTools:l,runtime:u,onLive:d}){let f=(0,G.useRef)(void 0),[p,m]=(0,G.useState)({kind:`running`,turn:0}),[h]=(0,G.useState)(o),g=(0,G.useMemo)(()=>$(i.records),[i.records]),_=(0,G.useMemo)(()=>ge(a,e.profile.id,e=>{f.current??=e}),[a,e.profile.id]),v=(0,G.useMemo)(()=>c(l?e:_e(e),{mode:`byok`,provider:_.provider,...l?{}:{toolHandlers:_.toolHandlers}},{conversationKey:O(),traces:h}),[e,_,l,h]),y=(0,G.useMemo)(()=>l?ee(e):void 0,[l,e]),b=re({transport:v,iface:t,pageTools:y}),{sendText:x,handleStop:S}=b,C=(0,G.useRef)(b.phase);C.current=b.phase;let[w,T]=(0,G.useState)(0);(0,G.useEffect)(()=>{let e=!1,t=async()=>{for(;!e&&C.current===`streaming`;)await new Promise(e=>requestAnimationFrame(e))};return(async()=>{for(let n=w;n<a.turns.length;n+=1){if(await t(),e)return;if(C.current===`gated`)return _.startTurn(n-1),m({kind:`waiting`,turn:n});let{text:r,attachments:i}=a.turns[n];if(i>0)return m({kind:`missing`,turn:n});_.startTurn(n),m({kind:`running`,turn:n});try{let t=await x(r);if(e)return;if(f.current)return m({kind:`diverged`,divergence:f.current});t||--n}catch(e){let t=e instanceof Error?e.message:String(e);return m({kind:`failed`,turn:n,message:t})}}m({kind:`done`})})(),()=>{e=!0,S()}},[w,_,a,x,S]);let E=async t=>{d({...await ye(e,u,a.turns.slice(0,t).flatMap(e=>e.blocks)),text:a.turns[t]?.text??``})},D=s===`replayed`;return(0,K.jsx)(J,{iface:t,feed:D?h:g,trace:n,card:r({isRunning:p.kind===`running`,onStop:()=>{S(),m({kind:`done`})}}),conversation:(0,K.jsx)(Y,{iface:t,blocks:D?[...b.blocks,...b.streamBlocks]:W(a),chat:D?b:void 0,banner:D?(0,K.jsx)(Ce,{status:p,turns:a.turns.length,onContinue:T,onLive:E}):void 0})})}function Te(e){return(0,K.jsx)(u,{children:(0,K.jsx)(h,{labels:v,children:(0,K.jsx)(Ee,{...e})})})}function Ee({payload:e,trace:t,runtime:n,onLive:r}){let i=(0,G.useMemo)(()=>d(e),[e]),[a,o]=(0,G.useState)(),s=(0,G.useMemo)(()=>a&&fe(a.records),[a]),c=(0,G.useMemo)(()=>$(a?.records??[]),[a]),[l,u]=(0,G.useState)(0),[f,p]=(0,G.useState)(`recorded`),[m,h]=(0,G.useState)(!1),g=e=>{o(e),u(0),p(`recorded`)},_=()=>{u(e=>e+1),p(`replayed`)};if(i.type===`live`)return null;if(!a||!s)return(0,K.jsx)(J,{iface:i,feed:c,trace:t,card:(0,K.jsx)(Q,{onImport:g}),conversation:null});let v=({isRunning:t,onStop:n})=>(0,K.jsx)(Q,{onImport:g,controls:{opened:a,script:s,payload:e,shown:l>0?f:null,onShown:p,liveTools:m,onLiveTools:e=>{h(e),l>0&&_()},isRunning:t,onReplay:_,onStop:n}});return l===0?(0,K.jsx)(J,{iface:i,feed:c,trace:t,card:v({isRunning:!1,onStop:()=>void 0}),conversation:(0,K.jsx)(Y,{iface:i,blocks:W(s)})}):(0,K.jsx)(we,{payload:e,iface:i,trace:t,card:v,opened:a,script:s,shown:f,liveTools:m,runtime:n,onLive:r},l)}export{Te as TraceReplay};
|