@theoremjs/studio 0.3.4-next.433.gf6b4da5 → 0.3.4-next.454.gaa3f549

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +4 -2
  2. package/example.d.ts +3 -1
  3. package/example.js +5 -2
  4. package/mod.d.ts +1 -1
  5. package/mod.js +1 -1
  6. package/package.json +6 -5
  7. package/page/assets/{Banner-DqFqeJx4.js → Banner-QCiHVb5K.js} +2 -2
  8. package/page/assets/{ConsoleFrame-CZvaA-nP.js → ConsoleFrame-DqN62wL7.js} +1 -1
  9. package/page/assets/{ContextMenu-DX9Xmroi.js → ContextMenu-DIzJdlQ5.js} +2 -2
  10. package/page/assets/{ToolResultCharts-142qwvoG.js → ToolResultCharts-CjuviquY.js} +1 -1
  11. package/page/assets/{TraceInspector-CiszHOn4.js → TraceInspector-CwGSe8Oe.js} +1 -1
  12. package/page/assets/{TraceOverview-DpGrlsvE.js → TraceOverview-isg4ubrd.js} +1 -1
  13. package/page/assets/{_virtual_studio-type-sources-Cwv7y4JN.js → _virtual_studio-type-sources-Bu1ywN-k.js} +7 -2
  14. package/page/assets/browser-engine-DA4ZywPN.js +11 -0
  15. package/page/assets/{browser-transport-CYmonEpj.js → browser-transport-B0zaH_Aw.js} +3 -3
  16. package/page/assets/{export-agent-DD3nkkXc.js → export-agent-vV5u7tzN.js} +1 -1
  17. package/page/assets/{guardrail-tester-CB_zfwu-.js → guardrail-tester-D70vg-Zv.js} +1 -1
  18. package/page/assets/{index-D3Myde0v.js → index-CvrD0wqP.js} +69 -68
  19. package/page/assets/{live-messages-CI-oP2dK.js → live-messages-dPuowG_o.js} +1 -1
  20. package/page/assets/{reader-CVFKFctz.js → reader-BB7aL5yX.js} +1 -1
  21. package/page/assets/{stub-Bf9DC2iQ.js → stub-DyzmGexy.js} +1 -1
  22. package/page/assets/{studio-code-pane-BEu6fsah.js → studio-code-pane-CPon5udY.js} +3 -3
  23. package/page/assets/{studio-console-C1aZk0Nc.js → studio-console-BSV-XHe9.js} +1 -1
  24. package/page/assets/{studio-decision-B4Xv1U6i.js → studio-decision-Dk1Tsfah.js} +1 -1
  25. package/page/assets/{studio-embedding-B88JqYyA.js → studio-embedding-BkBuVy1T.js} +1 -1
  26. package/page/assets/{studio-host-console-CV6UmZhm.js → studio-host-console-C6f389Xp.js} +2 -2
  27. package/page/assets/{studio-labels-W7ubfnI9.js → studio-labels-DEEMSKuk.js} +1 -1
  28. package/page/assets/{studio-live-DsZTO9nf.js → studio-live-uDkVyN2h.js} +1 -1
  29. package/page/assets/{studio-map-B8KLLT-0.js → studio-map-BVIl4fqd.js} +1 -1
  30. package/page/assets/{studio-trace-replay-CNI1i-QJ.js → studio-trace-replay-DG90ujMk.js} +1 -1
  31. package/page/assets/{studio-type-checker-xhy-9-yy.js → studio-type-checker-BaSH5B4-.js} +1 -1
  32. package/page/assets/{tool-schema-BlUbzOu9.js → tool-schema-E9NPuDcN.js} +1 -1
  33. package/page/assets/{tree-6F02tTxC.js → tree-2VeaKg0m.js} +1 -1
  34. package/page/assets/{turn-client-4GHmGV_4.js → turn-client-Dy9-U9_L.js} +1 -1
  35. package/page/assets/types-CMdljBjd.js +1 -0
  36. package/page/assets/{use-one-call-BDdS64oW.js → use-one-call-DIEEQ4qF.js} +1 -1
  37. package/page/assets/{workspace-MlrGUH2-.js → workspace-Cno6Ge26.js} +1 -1
  38. package/page/index.html +12 -12
  39. package/server/test-connection.js +2 -4
  40. package/ui/boot-mark.d.ts +10 -2
  41. package/ui/boot-mark.js +44 -8
  42. package/ui/brand-icons.js +20 -2
  43. package/ui/lib/boot-hold.d.ts +21 -0
  44. package/ui/lib/boot-hold.js +38 -0
  45. package/ui/lib/type-icons.d.ts +3 -1
  46. package/ui/lib/type-icons.js +4 -2
  47. package/ui/node-icon.d.ts +4 -0
  48. package/ui/node-icon.js +23 -0
  49. package/ui/profile-editor.d.ts +3 -0
  50. package/ui/profile-editor.js +5 -2
  51. package/ui/read-map.js +3 -3
  52. package/ui/studio-save.js +45 -2
  53. package/ui/studio-screen.d.ts +4 -1
  54. package/ui/studio-screen.js +25 -26
  55. package/ui/tree-map.css +15 -0
  56. package/ui/tree-map.d.ts +7 -0
  57. package/ui/tree-map.js +190 -0
  58. package/page/assets/browser-engine-DhWIzxGh.js +0 -11
  59. package/page/assets/types-DN_oZAOJ.js +0 -1
@@ -1,3 +1,3 @@
1
- import{C as e,Gt as t,Jn as n,M as r,ar as i,cr as a,er as o,h as ee,hr as s,j as c,ln as l,lr as u,mn as d,n as te,p as f,t as ne,vr as p,y as re,z as ie,zt as ae}from"./tool-schema-BlUbzOu9.js";import{En as m,Sn as h,qt as g,rn as _,tn as oe}from"./shaped-data-0GUF7Al3.js";import{a as se,r as v}from"./live-ingress-lDUGPwth.js";var ce=[{id:`identity`,profilePath:`identity`,role:`root`,optional:!1,editor:`structural`,label:`Identity`,ownsFields:[`profile.id`,`profile.type`]},{id:`models`,profilePath:`models`,role:`spine`,optional:!1,editor:`structural`,label:`Models`,ownsFields:[`profile.defaultModel`,`profile.allowModelSelect`,`profile.maxSteps`,`providerContinuation`]},{id:`modelBinding`,profilePath:`models.*`,role:`branch`,parent:`models`,optional:!1,editor:`structural`,label:`Model binding`},{id:`decision`,profilePath:`decision`,role:`spine`,optional:!1,editor:`structural`,label:`Decision`,ownsFields:[`inputs`]},{id:`image`,profilePath:`image`,role:`spine`,optional:!1,editor:`structural`,label:`Image`},{id:`speech`,profilePath:`speech`,role:`spine`,optional:!1,editor:`structural`,label:`Speech`},{id:`live`,profilePath:`live`,role:`spine`,optional:!1,editor:`structural`,label:`Live`},{id:`tools`,profilePath:`tools`,role:`spine`,optional:!1,editor:`structural`,label:`Tools`},{id:`toolSpec`,profilePath:`tools.allow`,role:`branch`,parent:`tools`,optional:!0,editor:`structural`,label:`Tool`},{id:`inputs`,profilePath:`inputs`,role:`spine`,optional:!1,editor:`structural`,label:`Inputs`},{id:`outputs`,profilePath:`outputs`,role:`spine`,optional:!0,editor:`structural`,label:`Outputs`},{id:`turnBehaviour`,profilePath:`turnBehaviour`,role:`spine`,optional:!0,editor:`structural`,label:`Turn behaviour`},{id:`guardrails`,profilePath:`guardrails`,role:`spine`,optional:!0,editor:`structural`,label:`Guardrails`},{id:`observability`,profilePath:`observability`,role:`spine`,optional:!0,editor:`structural`,label:`Observability`},{id:`labels`,profilePath:`labels`,role:`spine`,optional:!0,editor:`structural`,label:`Labels`}],le={identity:s,inputs:p(`inputs`).filter(e=>e!==`decision`)},y=ce.map(e=>({...e,profileTypes:le[e.id]??p(e.profilePath)}));function ue(e){return y.find(t=>t.id===e)}function de(e){return e.modelBindings.length>1}function fe(e){return e.modelBindings.some(t=>t.provider!==`local`&&!r(e.providers,t).keySlot)}function pe(e,t){let n={provider:t.provider,keySlot:t.keySlot||e.models.key,fallbackKeySlot:t.fallbackKeySlot||e.models.fallbackKey},i=r(e.providers,n);return{...i,given:{keySlot:!!i.keySlot&&!n.keySlot,fallbackKeySlot:!!i.fallbackKeySlot&&!n.fallbackKeySlot}}}function me(e){let t=e.efforts.map(({alias:e})=>e.trim()).filter(Boolean);return new Set(t).size>1}function he(e){return e.attachmentsAccept.length>0||e.voiceAccept.length>0}var ge=o,b={compactMaxTokens:32e3,compactAt:.75,compactKeep:4},x={"continue.instruction":`turnBehaviour`,"canary.bind_note":`guardrails`,"quota.exhausted":`guardrails`,"repair.default_guidance":`outputs`,"egress.default_repair_guidance":`guardrails`,"egress.refusal":`guardrails`};function S(e){return`${e}-${crypto.randomUUID().slice(0,8)}`}function C(e){return{key:S(`model`),modelId:`fast`,protocol:`openRouter`,provider:`openrouter`,apiId:``,options:{},timeoutMs:null,efforts:[],defaultEffort:``,allowEffortSelect:!1,summaries:null,maxOutputTokens:null,temperature:null,builtInTools:[],...e}}var w=`Studio stub tool — returns a fixed result.`;function T(e){return{key:S(`tool`),toolName:`my_tool`,toolType:`function`,description:w,category:`studio`,access:i[0],permission:u[0],loadTier:a[0],paths:[`*`],inputJson:ne,outputJson:te,...e}}function E(e,t,n){return(!e.description.trim()||e.description===w)&&n?{agentKey:t,description:`Asks ${n} and returns its answer.`}:{agentKey:t}}function D(){return{name:``,kind:`words`,pattern:``,flags:``,words:[]}}function O(){return{key:``,label:``,at:m(h,()=>`ignore`),patterns:[D()],hint:``}}function k(){let e=d(void 0);return{canaryBindNote:``,detect:m(g,t=>({...e.detect[t]})),sources:Object.fromEntries(oe.map(e=>[e,{theorem:!0,patterns:[],hint:``}])),own:[],quotaEnabled:!1,quotaPerDay:null,quotaMessage:``,allow:{ungiven_images:{hosts:[],fromTools:!0},ungiven_links:{hosts:[],fromTools:!0}},innocentNames:[],blockedReplyOnBlock:``,blockedReplyMaxRetries:null,egressRepairGuidance:``,egressRefusal:``,allowPrivateNetworks:!1,allowedHosts:[],allowedSchemes:[],taintAfterRemoteRead:``,taintRemoteDestination:``}}function A(){let e=se({});return{writeTo:f,destination:f,sampleRate:e.sampleRate,include:{...e.include},scrub:{sensitive:!!e.scrub.sensitive,injection:!!e.scrub.injection,canary:!!e.scrub.canary},retainForDays:null,rotateAfterMiB:null,resourceJson:``}}function j(e){return e.map(([e,t])=>({key:S(`criterion`),label:e,text:t}))}function M(){return{contract:`guardrails.tool_call.v1`,maxStateBytes:null,questions:[{key:S(`question`),id:`verdict`,type:`choice`,instructions:`Given what the user asked for and what the call would do, should it run?`,criteria:j([[`allow`,`Safe, and what the user asked for.`],[`flag`,`Probably fine, but unusual or sensitive enough for a person to look first.`],[`block`,`Harmful, or clearly beyond what the user asked for.`]])},{key:S(`question`),id:`risk`,type:`score`,instructions:`How much harm would this call do if it were wrong?`,criteria:j([[``,`Low: reversible, and affects only the user.`],[``,`High: hard to undo, or affects other people or money.`]])}],images:[]}}var N=JSON.stringify({context:`The user asked the agent to tidy up old screenshots on their desktop.`,tool_call:{name:`delete_files`,path:`~/Documents`,recursive:!0},outcome:`Would delete 1,284 files, including tax_return_2025.pdf.`},null,2),P=JSON.stringify(`The user asked to tidy screenshots. The proposed call recursively deletes 1,284 files, including a tax return.`),F=`To clear your desktop, select the screenshots and move them to the Trash. Empty the Trash to delete them for good.(Screen captures save to the desktop by default. You can change where they go in the Screenshot app's Options menu.(Press Command-Shift-5 to record the screen or capture a window. Recordings are saved as movie files next to your screenshots.(Stacks group desktop files by kind, date or tag, so a cluttered desktop folds into a few piles you can open one at a time.(Deleted files stay in the Trash for 30 days. Drag a file out of the Trash to put it back where it was.(When your disk is almost full, open Storage settings and review the largest files. Old downloads and installers are safe to remove.(Offloading unused apps frees space and keeps their documents. Reinstalling an app brings its data back.(Photos you have backed up can be optimised so the originals live in the cloud and smaller copies stay on the device.(Your plan renews on the same date each month. You can see the next charge under Billing, then Upcoming invoices.(To get a refund, open the invoice and choose Request refund. Charges from the last 14 days are refunded in full.(Update your card under Billing, then Payment methods. The new card is used for the next renewal, not for past invoices.(Annual plans cost two months less than paying monthly. Switching mid-term credits the unused months to the new plan.(Invoices are emailed as PDFs and list your company name and tax number. Edit those details before the invoice is issued.(Turn on two-step verification under Security. You will be asked for a code from your authenticator app each time you sign in on a new device.(If you forget your password, choose Forgot password on the sign-in page. The reset link expires after one hour.(Review signed-in devices under Security and sign out any you don't recognise. This ends their sessions immediately.(Passkeys replace your password with your fingerprint or face. Create one under Security, then Passkeys.(To close your account, export your data first. Closing deletes your workspace after a 30-day grace period.(Share a folder by choosing Share, then entering an email address. Viewers can read; editors can change and delete.(Public links work for anyone who has them. Set an expiry date, or turn the link off to stop sharing at once.(Transfer ownership of a folder before you leave a team, or its contents will be archived with your account.(Lisbon has mild, wet winters and warm, dry summers. Expect highs near 28 °C in August.(The best months for the Algarve coast are May, June and September, when the beaches are warm and the crowds are thin.(Trams in Lisbon climb the steep hills of Alfama and Graça. Line 28 is the famous one, and the busiest.(For a crisp pizza base, preheat the oven and the baking tray together at the highest setting for at least thirty minutes.(Rest steak for five minutes after cooking so the juices settle back into the meat instead of running onto the board.`.split(`(`).join(`
1
+ import{C as e,Gt as t,Jn as n,M as r,ar as i,cr as a,er as o,h as ee,hr as s,j as c,ln as l,lr as u,mn as d,n as te,p as f,t as ne,vr as p,y as re,z as ie,zt as ae}from"./tool-schema-E9NPuDcN.js";import{En as m,Sn as h,qt as g,rn as _,tn as oe}from"./shaped-data-0GUF7Al3.js";import{a as se,r as v}from"./live-ingress-lDUGPwth.js";var ce=[{id:`identity`,profilePath:`identity`,role:`root`,optional:!1,editor:`structural`,label:`Identity`,ownsFields:[`profile.id`,`profile.type`]},{id:`models`,profilePath:`models`,role:`spine`,optional:!1,editor:`structural`,label:`Models`,ownsFields:[`profile.defaultModel`,`profile.allowModelSelect`,`profile.maxSteps`,`providerContinuation`]},{id:`modelBinding`,profilePath:`models.*`,role:`branch`,parent:`models`,optional:!1,editor:`structural`,label:`Model binding`},{id:`decision`,profilePath:`decision`,role:`spine`,optional:!1,editor:`structural`,label:`Decision`,ownsFields:[`inputs`]},{id:`image`,profilePath:`image`,role:`spine`,optional:!1,editor:`structural`,label:`Image`},{id:`speech`,profilePath:`speech`,role:`spine`,optional:!1,editor:`structural`,label:`Speech`},{id:`live`,profilePath:`live`,role:`spine`,optional:!1,editor:`structural`,label:`Live`},{id:`tools`,profilePath:`tools`,role:`spine`,optional:!1,editor:`structural`,label:`Tools`},{id:`toolSpec`,profilePath:`tools.allow`,role:`branch`,parent:`tools`,optional:!0,editor:`structural`,label:`Tool`},{id:`inputs`,profilePath:`inputs`,role:`spine`,optional:!1,editor:`structural`,label:`Inputs`},{id:`outputs`,profilePath:`outputs`,role:`spine`,optional:!0,editor:`structural`,label:`Outputs`},{id:`turnBehaviour`,profilePath:`turnBehaviour`,role:`spine`,optional:!0,editor:`structural`,label:`Turn behaviour`},{id:`guardrails`,profilePath:`guardrails`,role:`spine`,optional:!0,editor:`structural`,label:`Guardrails`},{id:`observability`,profilePath:`observability`,role:`spine`,optional:!0,editor:`structural`,label:`Observability`},{id:`labels`,profilePath:`labels`,role:`spine`,optional:!0,editor:`structural`,label:`Labels`}],le={identity:s,inputs:p(`inputs`).filter(e=>e!==`decision`)},y=ce.map(e=>({...e,profileTypes:le[e.id]??p(e.profilePath)}));function ue(e){return y.find(t=>t.id===e)}function de(e){return e.modelBindings.length>1}function fe(e){return e.modelBindings.some(t=>t.provider!==`local`&&!r(e.providers,t).keySlot)}function pe(e,t){let n={provider:t.provider,keySlot:t.keySlot||e.models.key,fallbackKeySlot:t.fallbackKeySlot||e.models.fallbackKey},i=r(e.providers,n);return{...i,given:{keySlot:!!i.keySlot&&!n.keySlot,fallbackKeySlot:!!i.fallbackKeySlot&&!n.fallbackKeySlot}}}function me(e){let t=e.efforts.map(({alias:e})=>e.trim()).filter(Boolean);return new Set(t).size>1}function he(e){return e.attachmentsAccept.length>0||e.voiceAccept.length>0}var ge=o,b={compactMaxTokens:32e3,compactAt:.75,compactKeep:4},x={"continue.instruction":`turnBehaviour`,"canary.bind_note":`guardrails`,"quota.exhausted":`guardrails`,"repair.default_guidance":`outputs`,"egress.default_repair_guidance":`guardrails`,"egress.refusal":`guardrails`};function S(e){return`${e}-${crypto.randomUUID().slice(0,8)}`}function C(e){return{key:S(`model`),modelId:`fast`,protocol:`openRouter`,provider:`openrouter`,apiId:``,options:{},timeoutMs:null,efforts:[],defaultEffort:``,allowEffortSelect:!1,summaries:null,maxOutputTokens:null,temperature:null,builtInTools:[],...e}}var w=`Studio stub tool — returns a fixed result.`;function T(e){return{key:S(`tool`),toolName:`my_tool`,toolType:`function`,description:w,category:`studio`,access:i[0],permission:u[0],loadTier:a[0],paths:[`*`],inputJson:ne,outputJson:te,...e}}function E(e,t,n){return(!e.description.trim()||e.description===w)&&n?{agentKey:t,description:`Asks ${n} and returns its answer.`}:{agentKey:t}}function D(){return{name:``,kind:`words`,pattern:``,flags:``,words:[]}}function O(){return{key:``,label:``,at:m(h,()=>`ignore`),patterns:[D()],hint:``}}function k(){let e=d(void 0);return{canaryBindNote:``,detect:m(g,t=>({...e.detect[t]})),sources:Object.fromEntries(oe.map(e=>[e,{theorem:!0,patterns:[],hint:``}])),own:[],quotaEnabled:!1,quotaPerDay:null,quotaMessage:``,allow:{ungiven_images:{hosts:[],fromTools:!0},ungiven_links:{hosts:[],fromTools:!0}},innocentNames:[],blockedReplyOnBlock:``,blockedReplyMaxRetries:null,egressRepairGuidance:``,egressRefusal:``,allowPrivateNetworks:!1,allowedHosts:[],allowedSchemes:[],taintAfterRemoteRead:``,taintRemoteDestination:``}}function A(){let e=se({});return{writeTo:f,destination:f,sampleRate:e.sampleRate,include:{...e.include},scrub:{sensitive:!!e.scrub.sensitive,injection:!!e.scrub.injection,canary:!!e.scrub.canary},retainForDays:null,rotateAfterMiB:null,resourceJson:``}}function j(e){return e.map(([e,t])=>({key:S(`criterion`),label:e,text:t}))}function M(){return{contract:`guardrails.tool_call.v1`,maxStateBytes:null,questions:[{key:S(`question`),id:`verdict`,type:`choice`,instructions:`Given what the user asked for and what the call would do, should it run?`,criteria:j([[`allow`,`Safe, and what the user asked for.`],[`flag`,`Probably fine, but unusual or sensitive enough for a person to look first.`],[`block`,`Harmful, or clearly beyond what the user asked for.`]])},{key:S(`question`),id:`risk`,type:`score`,instructions:`How much harm would this call do if it were wrong?`,criteria:j([[``,`Low: reversible, and affects only the user.`],[``,`High: hard to undo, or affects other people or money.`]])}],images:[]}}var N=JSON.stringify({context:`The user asked the agent to tidy up old screenshots on their desktop.`,tool_call:{name:`delete_files`,path:`~/Documents`,recursive:!0},outcome:`Would delete 1,284 files, including tax_return_2025.pdf.`},null,2),P=JSON.stringify(`The user asked to tidy screenshots. The proposed call recursively deletes 1,284 files, including a tax return.`),F=`To clear your desktop, select the screenshots and move them to the Trash. Empty the Trash to delete them for good.(Screen captures save to the desktop by default. You can change where they go in the Screenshot app's Options menu.(Press Command-Shift-5 to record the screen or capture a window. Recordings are saved as movie files next to your screenshots.(Stacks group desktop files by kind, date or tag, so a cluttered desktop folds into a few piles you can open one at a time.(Deleted files stay in the Trash for 30 days. Drag a file out of the Trash to put it back where it was.(When your disk is almost full, open Storage settings and review the largest files. Old downloads and installers are safe to remove.(Offloading unused apps frees space and keeps their documents. Reinstalling an app brings its data back.(Photos you have backed up can be optimised so the originals live in the cloud and smaller copies stay on the device.(Your plan renews on the same date each month. You can see the next charge under Billing, then Upcoming invoices.(To get a refund, open the invoice and choose Request refund. Charges from the last 14 days are refunded in full.(Update your card under Billing, then Payment methods. The new card is used for the next renewal, not for past invoices.(Annual plans cost two months less than paying monthly. Switching mid-term credits the unused months to the new plan.(Invoices are emailed as PDFs and list your company name and tax number. Edit those details before the invoice is issued.(Turn on two-step verification under Security. You will be asked for a code from your authenticator app each time you sign in on a new device.(If you forget your password, choose Forgot password on the sign-in page. The reset link expires after one hour.(Review signed-in devices under Security and sign out any you don't recognise. This ends their sessions immediately.(Passkeys replace your password with your fingerprint or face. Create one under Security, then Passkeys.(To close your account, export your data first. Closing deletes your workspace after a 30-day grace period.(Share a folder by choosing Share, then entering an email address. Viewers can read; editors can change and delete.(Public links work for anyone who has them. Set an expiry date, or turn the link off to stop sharing at once.(Transfer ownership of a folder before you leave a team, or its contents will be archived with your account.(Lisbon has mild, wet winters and warm, dry summers. Expect highs near 28 °C in August.(The best months for the Algarve coast are May, June and September, when the beaches are warm and the crowds are thin.(Trams in Lisbon climb the steep hills of Alfama and Graça. Line 28 is the famous one, and the busiest.(For a crisp pizza base, preheat the oven and the baking tray together at the highest setting for at least thirty minutes.(Rest steak for five minutes after cooking so the juices settle back into the meat instead of running onto the board.`.split(`(`).join(`
2
2
 
3
3
  `),I=`How do I delete every screenshot on my desktop?`;function L(e,t=`choice`){let n=K(`question`,e.decision.questions.map(e=>e.id),e=>`question_${e}`);return{key:S(`question`),id:n,type:t,instructions:``,criteria:R(t)}}function _e(e,t,n){let r=t.replace(/\.[^.]*$/,``).toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_|_$/g,``)||`image`,i=K(r,e.decision.images.map(e=>e.name),e=>`${r}_${e}`);return{key:S(`image`),name:i,...n}}function R(e){return e===`noul`||e===`box`?[]:j(e===`choice`?[[`yes`,``],[`no`,``]]:[[``,``],[``,``]])}function ve(){return{identity:{agentId:``,profileType:``,handle:``,system:``,systemByRoleJson:``},included:[`observability`,`labels`],models:{defaultModel:``,allowModelSelect:!1,maxSteps:null,key:``},modelBindings:[],providers:[...e],tools:{t2Loader:``,parallel:!1},toolSpecs:[],inputs:{text:!0,attachmentsAccept:[],voiceAccept:[],maxFiles:null,maxBytes:null,maxTurnBytes:null,limitsByMimeJson:``,slotsJson:``,contextFrom:[],contextMaxChars:null},outputs:{mode:`text`,schemaId:``,schemaJson:``,streamMode:``,streamThoughts:!0,validationEnabled:!1,maxRetries:null,itemRules:{},repairGuidance:``},turnBehaviour:{resumeEnabled:!1,allowContinue:[],autoContinue:[],maxContinues:null,continueInstruction:``,allowSteering:t({type:`text`}),atStepLimit:`stop`},guardrails:k(),observability:A(),image:{aspectRatio:``,resolution:``,mimeType:``,quality:``,background:``,n:null,seed:null,outputCompression:null,includeText:!1,references:[]},speech:{voice:``,style:``,speed:null,format:``},live:{ingressAudio:v(`audio`),ingressVideo:v(`video`),ingressText:v(`text`),voice:``,sessionResumption:!1,greeting:``,resumedPrompt:``,resumedAfterMs:null,contextCompression:!1,compressionTriggerTokens:null,compressionTargetTokens:null,transcriptionInput:!1,transcriptionOutput:!1,vadActivityHandling:``,vadStartSensitivity:``,vadEndSensitivity:``,vadPrefixPaddingMs:null,vadSilenceDurationMs:null},decision:M(),labels:{}}}var ye=new Set([`guardrails`]);function z(e,t){return e.profileTypes.includes(t)&&!(t===`decision`&&ye.has(e.id))}function B(e){let t=e.identity.profileType;if(!t)return[`identity`];let n=new Set(e.included);return y.filter(e=>e.role!==`branch`&&z(e,t)&&(!e.optional||n.has(e.id))).map(e=>e.id)}function V(e,t){let n=e.identity.profileType;return n!==``&&p(t).includes(n)}function be(e){return V(e,`identity.system`)&&_(e.guardrails.detect,`canary_leak`)}function H(e){let t=e.identity.profileType;return t!==``&&ae.includes(t)}function U(e){let t=e.identity.profileType;return t?y.filter(n=>n.role===`spine`&&n.optional&&z(n,t)&&!e.included.includes(n.id)).map(e=>e.id):[]}function xe(e){return{...e,attachmentsAccept:e.attachmentsAccept.filter(e=>l(n,e)),voiceAccept:[]}}function Se(e,t,n){let r=e.modelBindings.find(e=>e.key===t);return r?{...e,models:n.modelId!==void 0&&e.models.defaultModel===r.modelId?{...e.models,defaultModel:n.modelId}:e.models,modelBindings:e.modelBindings.map(e=>e.key===t?{...e,...n}:e)}:e}function W(e,t){if(t.some(t=>t.modelId===e))return e;let[n,...r]=t;return n&&!r.length?n.modelId:``}function Ce(e,t){if(!e.modelBindings.find(e=>e.key===t))return e;let n=e.modelBindings.filter(e=>e.key!==t);return{...e,models:{...e.models,defaultModel:W(e.models.defaultModel,n)},modelBindings:n}}function G(e,t){let n=e.identity.profileType,r=n&&n!==`host`?n:`text`,i=e.modelBindings.map(e=>e.modelId),a=re(r,t),o=K(a.modelId,i,e=>`${a.modelId}${e}`);return C({...a,modelId:o})}function we(e){return T({toolName:K(`my_tool`,e.toolSpecs.map(e=>e.toolName),e=>`my_tool_${e}`)})}function K(e,t,n){let r=new Set(t),i=e;for(let e=2;r.has(i);e++)i=n(e);return i}function Te(e,t,n){if(t===`host`)return{...e,identity:{...e.identity,profileType:t}};let r=e.modelBindings.filter(r=>{let i=c(e.providers,t,r),a=e.providers.find(e=>e.id===r.provider);return ie(a,t,r.protocol)&&!Oe(n,t,i)}),i={...e,identity:{...e.identity,profileType:t},modelBindings:r},a=r.length?r:[G(i,n?.start)],o=!e.models.key&&fe({...i,modelBindings:a}),s=t===`speech`&&!e.speech.voice.trim()&&a.some(n=>ee(c(e.providers,t,n)));return{...i,inputs:t===`image`?xe(e.inputs):e.inputs,...s?{speech:{...e.speech,voice:Ee}}:{},models:{...e.models,defaultModel:W(e.models.defaultModel,a),key:o?ke:e.models.key},modelBindings:a}}var Ee=`Kore`,De=[`text`,`image`,`speech`,`live`,`decision`];function Oe(e,t,n){if(!e)return!1;let r=t=>e.models(t,n.definition).some(e=>e.id===n.apiId.trim());return!r(t)&&De.some(e=>e!==t&&r(e))}var ke=`slot_a`;function Ae(e,t){return U(e).includes(t)?{...e,included:[...e.included,t]}:e}function je(e,t){return{...e,included:e.included.filter(e=>e!==t)}}function q(e){return`modelBinding:${e}`}var J=`toolSpec:`;function Y(e){return`${J}${e}`}function X(e){return e.startsWith(J)?e.slice(9):void 0}var Z=`provider:`;function Me(e){return`${Z}${e}`}function Ne(e){return e.startsWith(Z)?e.slice(9):void 0}var Pe=new Map(y.map(e=>[e.id,e.label]));function Q(e){return Pe.get(e)??e}function Fe(e,t){let[n,r]=t.split(`:`,2);if(n===`modelBinding`&&r!==void 0)return e.modelBindings.some(e=>e.key===r)?{facet:n,key:r}:void 0;let i=X(t);if(i!==void 0)return e.toolSpecs.some(e=>e.key===i)?{facet:`toolSpec`,key:i}:void 0;let a=B(e);if(r===void 0&&a.includes(t))return{facet:t}}function Ie(e,t){return t===`models`?e.modelBindings.map(e=>({id:q(e.key),ref:{facet:`modelBinding`,key:e.key},label:e.modelId.trim()||Q(`modelBinding`),children:[]})):t===`tools`?$(e.toolSpecs):[]}function $(e){return e.map(e=>({id:Y(e.key),ref:{facet:`toolSpec`,key:e.key},label:e.toolName.trim()||Q(`toolSpec`),children:[]}))}function Le(e){let t=B(e).filter(e=>e!==`identity`).map(t=>({id:t,ref:{facet:t},label:Q(t),children:Ie(e,t)}));return{id:`identity`,ref:{facet:`identity`},label:e.identity.agentId.trim()||Q(`identity`),children:t}}export{G as A,me as B,je as C,R as D,Ae as E,Ce as F,he as H,Te as I,H as L,D as M,we as N,_e as O,be as P,Se as R,S,U as T,y as U,de as V,ue as W,ve as _,Le as a,V as b,$ as c,I as d,F as f,E as g,ge as h,Fe as i,O as j,L as k,b as l,x as m,Ne as n,X as o,P as p,Me as r,Y as s,q as t,N as u,C as v,K as w,B as x,T as y,pe as z};
@@ -1,2 +1,2 @@
1
- import{Lt as e,Mn as t}from"./tool-schema-BlUbzOu9.js";import{c as n}from"./host-patterns-C9RMP16Q.js";import{A as r,Mn as i,en as a}from"./shaped-data-0GUF7Al3.js";import{F as o,bt as s}from"./reader-CVFKFctz.js";import{r as c}from"./encode-files-DZ4tVtEQ.js";function l(e,t){let r=typeof t==`string`?t.trim():``;if(!r)throw new n(`request`,`A typed credential must be a non-empty string`);if(e===`bearer`)return{type:`bearer`,token:r};if(e===`api_key`)return{type:`api_key`,key:r};throw new n(`request`,`A '${e}' sign-in takes no typed credential; the host's callback saves it`)}function ee(e,t){if(!e)throw new n(`request`,`a typed credential answers only a sign-in gate`);return{slot:e.slot,credential:l(e.authType,t)}}var u=18e5;function te(e,t){let r=t??u;if(!Number.isFinite(r)||r<=0)throw new n(`config`,`${e} gateTtlMs must be a positive number of milliseconds; got ${r}.`);return r}function ne(e,t,n){return t-e>=n}var d=[`approve`,`deny`,`abandon`];function f(e,t=!1){return e.decision===`approve`?{granted:!0,...e.edited?{edited:e.edited}:{},...t?{signIn:t}:{}}:{granted:!1,cause:e.decision===`deny`?`declined`:`abandoned`,...t?{signIn:t}:{}}}function p(e,t,n){return n!==`session_consent`||e.includes(t)?[...e]:[...e,t]}function re(e,t,r){let{callId:i,decision:a,input:o,secret:s,page:c}=e;if((o!==void 0||s!==void 0||c!==void 0)&&a!==`approve`)throw new n(`request`,`only an approval takes edited input, a secret, or a page answer (call ${i})`);if(a!==`approve`)return{resume:f({decision:a},t.auth!==void 0),input:t.arguments,sessionPermissions:[...r]};let l=s===void 0?void 0:ee(t.auth,s);return{resume:{...f(o===void 0?{decision:a}:{decision:a,edited:{from:t.arguments}},t.auth!==void 0),...t.gateKind?{gateKind:t.gateKind}:{}},input:o??t.arguments,sessionPermissions:p(r,t.name,t.permission),...l?{typed:l}:{},...c?{page:c}:{}}}var m={'"':`"`,"\\":`\\`,"/":`/`,b:`\b`,f:`\f`,n:`
1
+ import{Lt as e,Mn as t}from"./tool-schema-E9NPuDcN.js";import{c as n}from"./host-patterns-C9RMP16Q.js";import{A as r,Mn as i,en as a}from"./shaped-data-0GUF7Al3.js";import{F as o,bt as s}from"./reader-BB7aL5yX.js";import{r as c}from"./encode-files-DZ4tVtEQ.js";function l(e,t){let r=typeof t==`string`?t.trim():``;if(!r)throw new n(`request`,`A typed credential must be a non-empty string`);if(e===`bearer`)return{type:`bearer`,token:r};if(e===`api_key`)return{type:`api_key`,key:r};throw new n(`request`,`A '${e}' sign-in takes no typed credential; the host's callback saves it`)}function ee(e,t){if(!e)throw new n(`request`,`a typed credential answers only a sign-in gate`);return{slot:e.slot,credential:l(e.authType,t)}}var u=18e5;function te(e,t){let r=t??u;if(!Number.isFinite(r)||r<=0)throw new n(`config`,`${e} gateTtlMs must be a positive number of milliseconds; got ${r}.`);return r}function ne(e,t,n){return t-e>=n}var d=[`approve`,`deny`,`abandon`];function f(e,t=!1){return e.decision===`approve`?{granted:!0,...e.edited?{edited:e.edited}:{},...t?{signIn:t}:{}}:{granted:!1,cause:e.decision===`deny`?`declined`:`abandoned`,...t?{signIn:t}:{}}}function p(e,t,n){return n!==`session_consent`||e.includes(t)?[...e]:[...e,t]}function re(e,t,r){let{callId:i,decision:a,input:o,secret:s,page:c}=e;if((o!==void 0||s!==void 0||c!==void 0)&&a!==`approve`)throw new n(`request`,`only an approval takes edited input, a secret, or a page answer (call ${i})`);if(a!==`approve`)return{resume:f({decision:a},t.auth!==void 0),input:t.arguments,sessionPermissions:[...r]};let l=s===void 0?void 0:ee(t.auth,s);return{resume:{...f(o===void 0?{decision:a}:{decision:a,edited:{from:t.arguments}},t.auth!==void 0),...t.gateKind?{gateKind:t.gateKind}:{}},input:o??t.arguments,sessionPermissions:p(r,t.name,t.permission),...l?{typed:l}:{},...c?{page:c}:{}}}var m={'"':`"`,"\\":`\\`,"/":`/`,b:`\b`,f:`\f`,n:`
2
2
  `,r:`\r`,t:` `};function h(e,t){let n=``,r=t+1;for(;r<e.length;){let t=e.charAt(r);if(t===`"`)return{text:n,end:r+1};if(t!==`\\`){n+=t,r++;continue}if(r+1>=e.length)break;let i=e.charAt(r+1);if(i===`u`){let t=e.slice(r+2,r+6);if(t.length<4)break;if(/^[0-9a-fA-F]{4}$/.test(t)){n+=String.fromCharCode(Number.parseInt(t,16)),r+=6;continue}}n+=m[i]??i,r+=2}return{text:n}}function g(e,t){let n=t;for(;/\s/.test(e.charAt(n));)n++;return n}function ie(e,t){if(e.charAt(t)===`"`){let n=h(e,t);return n.end===void 0?void 0:_(e,t,n.end)}let n=0;for(let r=t;r<e.length;r++){let i=e.charAt(r);if(i===`"`){let t=h(e,r).end;if(t===void 0)return;r=t-1}else if(i===`{`||i===`[`)n++;else if(i===`}`||i===`]`){if(n===0)return _(e,t,r);if(n--,n===0)return _(e,t,r+1)}else if(i===`,`&&n===0)return _(e,t,r)}}function _(e,t,n){try{return{value:JSON.parse(e.slice(t,n)),end:n}}catch{return}}function v(e){let t={},n=g(e,0);if(e.charAt(n)!==`{`)return t;for(n++;;){if(n=g(e,n),e.charAt(n)===`,`&&(n=g(e,n+1)),e.charAt(n)!==`"`)return t;let r=h(e,n);if(r.end===void 0||(n=g(e,r.end),e.charAt(n)!==`:`)||(n=g(e,n+1),n>=e.length))return t;let i=ie(e,n);if(!i)return e.charAt(n)===`"`&&(t[r.text]=h(e,n).text),t;t[r.text]=i.value,n=i.end}}function y(e,t){if(t.phase===void 0)return{name:t.name,callId:t.callId,...t.operationId?{operationId:t.operationId}:{},arguments:t.arguments,...t.reasoning?{reasoning:t.reasoning}:{},...t.stepId?{stepId:t.stepId}:{},artifacts:[]};if(e===void 0)throw new n(`bad_response`,`Tool event '${t.phase}' for call '${t.callId}' arrived before the call.`);if(e.callId!==t.callId||e.name!==t.name)throw new n(`bad_response`,i(`error.bad_response`));switch(t.phase){case`running`:{let{endedAt:n,outputDraft:r,...i}=e;return{...i,state:t,startedAt:t.at,...t.edited?{edited:t.edited}:{},...t.activity?{activity:t.activity}:{}}}case`complete`:return{...b(e),state:t,endedAt:t.at,...t.activityPast?{activityPast:t.activityPast}:{}};case`error`:return{...b(e),state:t,endedAt:t.at,...t.activityPast?{activityPast:t.activityPast}:{}};case`cancel`:case`gate`:return{...b(e),state:t,endedAt:t.at};case`draft`:return{...e,outputDraft:(e.outputDraft??``)+t.text};case`artifact`:return{...e,artifacts:[...e.artifacts,t.artifact]};case`dispatch`:case`progress`:case`trace`:case`warning`:return e}}function b(e){let{outputDraft:t,...n}=e;return n}function x(e,t){return{arguments:{},artifacts:[],...e,name:t.name,callId:t.callId,draft:(e?.draft??``)+t.text}}function ae(e){let t=new Map;for(let n of e){if(n.type===`tool_draft`){t.set(n.callId,x(t.get(n.callId),n));continue}if(n.type!==`tool`)continue;let{tool:e}=n,r=e.operationId??e.callId;e.phase===void 0&&t.get(e.callId)?.draft!==void 0&&t.delete(e.callId),t.set(r,y(t.get(r),e))}return[...t.values()]}function S(e){return(e.state?.phase===`gate`?e.state.gate.preparedArguments:void 0)??e.edited?.to??e.arguments}function C(e,t){return e.type!==`tool`||e.tool.callId!==t?!1:e.tool.phase===`complete`||e.tool.phase===`error`}var w={avif:`image/avif`,gif:`image/gif`,heic:`image/heic`,heif:`image/heif`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`,mp4:`video/mp4`,webm:`video/webm`,mov:`video/quicktime`,ogv:`video/ogg`,mp3:`audio/mpeg`,m4a:`audio/mp4`,ogg:`audio/ogg`,wav:`audio/wav`};function oe(e){let t=e.split(`/`).pop()??e,n=t.lastIndexOf(`.`);return n<=0||n===t.length-1?void 0:w[t.slice(n+1).toLowerCase()]}function se(e){let t=e.trim();if(t.length===0)return;let n;try{n=new URL(t)}catch{return}if(n.protocol!==`http:`&&n.protocol!==`https:`)return;let r=oe(n.pathname);if(r)return{url:n.href,mimeType:r}}var ce=/^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?$/i;function le(e){let t=new URL(e),n=t.hostname.split(`.`).slice(-2).join(`.`);for(let e of[...t.searchParams.keys()])e.startsWith(`utm_`)&&t.searchParams.delete(e);let r=ce.exec(t.pathname);return{key:`${n}${r?`${r[1]}${r[2]}`:t.pathname}${t.search}`,width:r?Number(r[4]):1/0}}function ue(e){let t=new Map,n=[],r=e=>{if(typeof e==`string`){let r=se(e);if(!r)return;let i=le(r.url),a=t.get(i.key);if(!a){t.set(i.key,{index:n.length,largest:i.width,smallest:i.width}),n.push(r);return}let o=n[a.index];i.width>a.largest?(a.largest=i.width,n[a.index]={...o,url:r.url,previewUrl:o.previewUrl??o.url}):i.width<a.smallest&&(a.smallest=i.width,n[a.index]={...o,previewUrl:r.url})}else if(Array.isArray(e))for(let t of e)r(t);else if(typeof e==`object`&&e)for(let t of Object.values(e))r(t)};return r(e),n}var T=0;function E(e){return e===`user`?`user-${globalThis.crypto.randomUUID()}`:(T+=1,`${e}-${String(T)}`)}function de(e,t){return e?.kind===t}function D(e,t,n,r){let i=e.at(-1);de(i,t)?i.text+=n:e.push({id:E(r),kind:t,text:n})}function O(e,t){let n=e.at(-1),r=n?.kind===`text`||n?.kind===`thought`;e.splice(r?e.length-1:e.length,0,t)}function k(e,t){return e.find(e=>e.kind===`tool`&&e.id===t)}function A(e,t){let n=`tool-${t.operationId??t.callId}`,r=k(e,n),i=y(r?.tool,t);if(r){r.tool=i;return}let a=t.phase===void 0?k(e,`tool-${t.callId}`):void 0;a?.tool.draft===void 0?e.push({id:n,kind:`tool`,tool:i}):(a.id=n,a.tool=i)}function j(e,t){let n=`tool-${t.callId}`,r=k(e,n),i=x(r?.tool,t);r?r.tool=i:e.push({id:n,kind:`tool`,tool:i})}function M(e){return e.findLast(e=>e.kind===`structured`&&e.draft!==void 0)}function N(e,t,n){let r=M(e),i=(r?.draft??``)+t;r?(r.draft=i,r.value=v(i)):e.push({id:E(n),kind:`structured`,value:v(i),draft:i})}function P(e,t,n){let r=M(e);r?(r.value=t,delete r.draft):e.push({id:E(n),kind:`structured`,value:t})}function F(e,t){return e.type===t.type?e.placeId&&t.placeId?e.placeId===t.placeId:e.uri===t.uri:!1}function I(e,t,n){let r=e.find(e=>e.kind===`citation`&&e.callId===t.callId),i=r?[...r.sources]:[];for(let e of t.sources)i.some(t=>F(t,e))||i.push(e);r?r.sources=i:e.push({id:E(n),kind:`citation`,sources:i,...t.callId===void 0?{}:{callId:t.callId}})}function L(e,t,n,r){if(t.phase===`complete`&&t.output!==void 0)for(let i of ue(t.output))r.has(i.url)||(r.add(i.url),e.push({id:E(n),kind:`media`,mimeType:i.mimeType,url:i.url,...i.previewUrl?{previewUrl:i.previewUrl}:{}}))}function R(e,t){return e.messages.flatMap(e=>{if(e.role!==`user`)return[];let n=e.parts??[],r=[e.content??``,...n.map(e=>`text`in e?e.text:``)].join(``).trim();return[...r?[{id:E(t),kind:`user-text`,text:r}]:[],...n.flatMap(e=>`text`in e?[]:[{id:E(t),kind:e.type===`audio`?`user-voice`:`user-attachment`,name:e.mimeType,mimeType:e.mimeType,...`data`in e?{sizeBytes:Math.floor(e.data.length*3/4),data:e.data}:{sizeBytes:0}}])]})}function z(e,t=`user`){let n=[],r=e.text?.trim();r&&n.push({id:E(t),kind:`user-text`,text:r});for(let r of e.attachments??[])n.push({id:E(t),kind:`user-attachment`,name:r.name,mimeType:r.mimeType,sizeBytes:r.sizeBytes,...r.data===void 0?{}:{data:r.data}});for(let r of e.voice??[])n.push({id:E(t),kind:`user-voice`,name:r.name,mimeType:r.mimeType,sizeBytes:r.sizeBytes,...r.data===void 0?{}:{data:r.data}});return n}function B(e,t){switch(e.type){case`media`:return e.media?{id:E(t),kind:`media`,mimeType:e.media.mimeType,data:e.media.data}:void 0;case`grounding`:return{id:E(t),kind:`grounding`,grounding:e.grounding};case`evidence`:return{id:E(t),kind:`evidence`,evidence:e.evidence};case`error`:return e.error?{id:E(t),kind:`error`,message:e.error}:void 0;case`done`:return{id:E(t),kind:`turn-done`,stop:e.stop,tokens:e.tokens,interactionId:e.interactionId,compaction:e.compaction!==void 0};default:return}}function V(e,n={}){let r=n.idPrefix??`turn`,i=n.showThoughts??!0;T=0;let a=[],o=new Set;for(let n of t(e))switch(n.type){case`thought`:i&&n.text&&D(a,`thought`,n.text,r);break;case`text`:n.text&&D(a,`text`,n.text,r);break;case`tool_draft`:j(a,n);break;case`tool`:A(a,n.tool),L(a,n.tool,r,o);break;case`structured_draft`:N(a,n.text,r);break;case`structured`:P(a,n.structured,r);break;case`citation`:I(a,n,r);break;case`guardrail`:O(a,{id:E(r),kind:`guardrail`,guardrail:n.guardrail});break;case`stage`:for(let e of n.injected??[])a.push(...R(e,r));break;default:{let e=B(n,r);e&&a.push(e)}}return a}function H(e,t,n={}){return[...z(e,`user`),...V(t,n)]}function fe(e){if(!e)return a;let{detect:t,patterns:n}=e;if(!n)return t;let r=Object.fromEntries(Object.entries(n).map(([e,{theorem:t}])=>[e,{theorem:t,matchers:[]}]));return{...t,sources:r}}function pe(e,t){if(e.text===void 0)return e;let n=r(e.text,`user`,fe(t));return{...e,text:n.text??e.text}}function U(e,t,n){let r=o(e,t);if(!r.ok)return{ok:!1,issues:r.issues};let i=pe(t,n);return{ok:!0,draft:i,blocks:z(i)}}function W(e,t){if(t)return e.models[t]}function G(e){return!!(e.allowModelSelect&&Object.keys(e.models).length>=2)}function K(e,t){let n=W(e,t);return n?.allowEffortSelect?Object.keys(n.efforts??{}).length>=2:!1}function q(e,t){let n=W(e,t);if(!n?.efforts)return;let r=n.defaultEffort?.trim();return r&&n.efforts[r]?r:Object.keys(n.efforts)[0]}function me(e){return G(e)?Object.entries(e.models).map(([e,t])=>({id:e,label:t.apiId})):[]}function he(e,t){if(!K(e,t))return[];let n=W(e,t);return n?.efforts?Object.entries(n.efforts).map(([e,t])=>({alias:e,level:t})):[]}function ge(e){let t=new Set;for(let n of e)if(n.type===`tool`&&n.tool.phase===`complete`)for(let e of s(n.tool.output)??[])t.add(e);return[...t]}function _e(t){let n=e(t,e=>e.type===`done`&&e.tools!==void 0);return n?.type===`done`?n.tools:void 0}function J(e){return e?.streaming?.streamThoughts!==!1}function Y(e){return e.defaultModel??Object.keys(e.models)[0]}function ve(e,t,n){let r=t.model!==void 0&&Object.hasOwn(e.models,t.model)&&(n===void 0||t.model!==Y(n))?t.model:Y(e),i=r===void 0?void 0:e.models[r]?.efforts;return{model:r,effort:r===t.model&&t.effort!==void 0&&i!==void 0&&Object.hasOwn(i,t.effort)&&(n===void 0||t.effort!==q(n,r))?t.effort:q(e,r)}}function X(e){if(!e.operationId)throw new n(`request`,i(`session.gate_expired`));return e.operationId}function ye(e,t){return t.selectedModel??Y(e)}function be(e,t,n){if(!n||!Object.hasOwn(e.models,n))return;let r=e.models[n];if(r.allowEffortSelect)return t.selectedEffort??r.defaultEffort}function Z(e,t){let n=ye(e,t),r=e.allowModelSelect?n:void 0,i=be(e,t,n);return{...r?{model:r}:{},...i?{effort:i}:{}}}function xe(e,t,n){return{name:n.name,input:n.input,...n.gateKind?{gateKind:n.gateKind}:{},sessionPermissions:n.sessionPermissions??t.sessionPermissions,...t.toolSnapshot?{snapshot:t.toolSnapshot}:{},...t.promotedToolIds.length?{promoted:[...t.promotedToolIds]}:{},...Z(e,t)}}function Q(e){return{...e.conversation?{conversation:e.conversation}:{},...e.turnId?{turnId:e.turnId}:{}}}function Se(e,t,n,r={}){let i=(r.walkAway?.calls??[]).map(e=>({callId:e.callId,operationId:X(e)}));return{...Q(r),...Z(e,t),input:n,...i.length?{abandon:i}:{},replay:{sessionPermissions:t.sessionPermissions}}}function Ce(e,t,n,r={}){return{...Q(r),gateId:n.gateId,operationId:n.operationId,decision:n.decision,...n.secret===void 0?{}:{secret:n.secret},...n.page===void 0?{}:{page:n.page},replay:xe(e,t,{...n,gateKind:n.gateKind??(t.gatedTool?.callId===n.gateId?t.gatedTool.gateKind:void 0)})}}function $(e,t){return U(e.inputs,t,e.guardrails)}function we(e,t,n,r=[]){return $(e,{...t.trim()?{text:t}:{},...n.length?{attachments:c(n)}:{},...r.length?{voice:c(r)}:{}})}function Te(e,t){return V(t,{showThoughts:J(e.outputs)})}export{d as C,f as D,te as E,p as O,ae as S,ne as T,H as _,we as a,C as b,J as c,q as d,K as f,U as g,G as h,X as i,ge as l,me as m,Se as n,$ as o,he as p,Te as r,ve as s,Ce as t,_e as u,V as v,re as w,S as x,y};
@@ -0,0 +1 @@
1
+ import{ur as e}from"./tool-schema-E9NPuDcN.js";var t=e.filter(e=>e!==`builtin`),n=`Tool type must be ${t.join(`, `).replace(/, ([^,]+)$/,`, or $1`)}.`;export{n,t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{t as r}from"./VStack-CkVMcNiK.js";import{n as i}from"./StackItem-CQviqAfM.js";import{N as a,U as o,c as s,l as c}from"./browser-transport-CYmonEpj.js";import{t as l}from"./Icon-ZfFwTt8n.js";import{t as u}from"./IconButton-CG5klqF1.js";import{t as d}from"./Text-BsiAsowd.js";import{n as f,o as p}from"./labels-provider-BSiD6Lrb.js";import{n as m}from"./Card-Ghe4ozhC.js";import{t as h}from"./Tooltip-CTEuMRLe.js";import{n as g,t as _}from"./arrive-DvbqpeRS.js";import{d as v}from"./reader-CVFKFctz.js";import{_ as y,b,g as x,y as S}from"./ConsoleFrame-CZvaA-nP.js";import{c as C,i as w}from"./trace-patterns-CS99kExN.js";import{t as T}from"./CardWall-CBRLdDZW.js";var E=e(n(),1),D=t(),O=`var(--duration-medium) var(--ease-standard)`,k=12;function A(){let e=m();return(0,E.useMemo)(()=>({percent:new Intl.NumberFormat(e,{style:`percent`,maximumFractionDigits:0}),decimal:new Intl.NumberFormat(e,{maximumFractionDigits:2}),usd:new Intl.NumberFormat(e,{style:`currency`,currency:`USD`,maximumSignificantDigits:2})}),[e])}function j(e){return C(e?`clear`:`shade2`)}function M({value:e,isLead:t}){return(0,D.jsx)(`div`,{style:{height:k,width:`${String(Math.max(e,.01)*100)}%`,borderRadius:4,background:j(t),transition:`width ${O}`}})}function N({title:e,aside:t,detail:n,answer:a}){let o=f(),s=A(),c=Object.entries(a.probabilities).sort(([,e],[,t])=>t-e);return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a.choice,note:o(`@theorem.decision.confidence`,{percent:s.percent.format(a.confidence)}),children:(0,D.jsx)(r,{gap:2,role:`list`,children:c.map(([e,t])=>(0,D.jsxs)(r,{gap:1,role:`listitem`,"aria-label":o(`@theorem.decision.option`,{label:e,percent:s.percent.format(t)}),children:[(0,D.jsxs)(i,{gap:2,hAlign:`between`,"aria-hidden":!0,children:[(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:e}),(0,D.jsx)(d,{type:`supporting`,hasTabularNumbers:!0,children:s.percent.format(t)})]}),(0,D.jsx)(M,{value:t,isLead:e===a.choice})]},e))})})}var P=56;function F(e){let t=e.split(/[:—–]\s/)[0]?.trim()??``;return t&&t.length<=32&&t!==e?t:e}function I({title:e,aside:t,detail:n,answer:i,labels:a}){let o=f(),s=A(),c=a.length,l=Math.min(c-1,Math.max(0,Math.round(i.score)));return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a[l]===void 0?s.decimal.format(i.score):F(a[l]),note:[o(`@theorem.decision.score_of`,{score:s.decimal.format(i.score),max:s.decimal.format(c-1)}),o(`@theorem.decision.confidence`,{percent:s.percent.format(i.confidence)})].join(` · `),children:(0,D.jsxs)(r,{gap:1,children:[(0,D.jsxs)(`div`,{"aria-hidden":!0,style:{position:`relative`,display:`flex`,alignItems:`flex-end`,gap:4,height:P},children:[a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,height:`${String(Math.max(.04,i.probabilities[String(t)]??0)*100)}%`,borderRadius:4,background:j(t===l),transition:`height ${O}`}},`${String(t)}:${e}`)),(0,D.jsx)(`div`,{style:{position:`absolute`,insetBlock:-4,left:`${String((i.score+.5)/c*100)}%`,width:0,borderInlineStart:`1.5px dashed var(--color-text-secondary)`,transition:`left ${O}`}})]}),(0,D.jsx)(`div`,{style:{display:`flex`,gap:4},children:a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,minWidth:0},title:e,children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:F(e)})},`${String(t)}:${e}`))}),(0,D.jsx)(`span`,{style:{position:`absolute`,width:1,height:1,overflow:`hidden`,clipPath:`inset(50%)`},children:a.map((e,t)=>o(`@theorem.decision.option`,{label:e,percent:s.percent.format(i.probabilities[String(t)]??0)})).join(`; `)})]})})}function L({title:e,aside:t,detail:n,answer:r}){let i=A();return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:i.decimal.format(r.noul)})}var R=72,z=168;function B(e){let[t,n]=(0,E.useState)(null);return(0,E.useEffect)(()=>{let t=new Image;t.onload=()=>{n({width:t.naturalWidth,height:t.naturalHeight})},t.src=e},[e]),t}function V(e,t){let n=e.style.color;e.style.color=`var(${t})`;let r=getComputedStyle(e).color;return e.style.color=n,r}function H({source:e,box:t,caption:n}){let r=f(),i=S(e),a=B(i),[o,l]=(0,E.useState)(null);if(!a)return null;let u=y(t),d=a.width*(t.right-t.left)/(a.height*(t.bottom-t.top)),p=r(`@theorem.decision.open_box`);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(h,{content:p,children:(0,D.jsx)(c,{label:p,padding:0,onClick:e=>{let n={outline:V(e.currentTarget,`--color-accent`),shade:V(e.currentTarget,`--color-overlay`)};b(i,t,n).then(l)},children:(0,D.jsx)(`div`,{role:`img`,"aria-label":r(`@theorem.decision.box_in`),style:{position:`relative`,overflow:`hidden`,aspectRatio:String(d),height:z,maxWidth:`100%`,borderRadius:4},children:(0,D.jsx)(`img`,{src:i,alt:``,style:{position:`absolute`,width:`${String(u.width)}%`,height:`${String(u.height)}%`,left:`${String(u.left)}%`,top:`${String(u.top)}%`,maxWidth:`none`}})})})}),(0,D.jsx)(s,{isOpen:o!==null,onOpenChange:e=>{e||l(null)},media:{src:o??i,alt:r(`@theorem.decision.box_marked`),caption:n},hasZoom:!0})]})}function U({title:e,aside:t,detail:n,answer:r,field:i,asked:a}){let o=f(),s=a&&x(a.images,a.state,i),c=A(),{top:l,bottom:u,left:d,right:p}=r.box,m=o(`@theorem.decision.box_edges`,{left:c.percent.format(d),top:c.percent.format(l),right:c.percent.format(p),bottom:c.percent.format(u)});return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:m,note:o(`@theorem.decision.confidence`,{percent:c.percent.format(r.confidence)}),children:s?(0,D.jsx)(H,{source:s,box:r.box,caption:`${e}: ${m}`}):(0,D.jsx)(`div`,{"aria-hidden":!0,style:{position:`relative`,height:R,borderRadius:4,border:`1px solid var(--color-border)`},children:(0,D.jsx)(`div`,{style:{position:`absolute`,insetInlineStart:`${String(d*100)}%`,insetBlockStart:`${String(l*100)}%`,width:`${String((p-d)*100)}%`,height:`${String((u-l)*100)}%`,borderRadius:2,background:j(!0),transition:`all ${O}`}})})})}function W({question:e,answer:t,asked:n,onQuestion:r,detail:i}){let a=f(),s=`${e.id} · ${a(`@theorem.decision.type.${e.type}`)}`;if(!t)return null;let c=a(`@theorem.decision.edit_question`,{question:e.id}),d={title:s,detail:i,aside:r?(0,D.jsx)(u,{label:c,tooltip:c,size:`sm`,variant:`ghost`,icon:(0,D.jsx)(l,{icon:o,size:`xsm`,color:`secondary`}),onClick:()=>{r(e.id)}}):void 0};return t.type===`choice`?(0,D.jsx)(N,{...d,answer:t}):t.type===`score`?(0,D.jsx)(I,{...d,answer:t,labels:e.labels}):t.type===`noul`?(0,D.jsx)(L,{...d,answer:t}):(0,D.jsx)(U,{...d,answer:t,field:e.field,asked:n})}function G({model:e,usage:t,elapsedMs:n,isStale:i,tokens:a,children:o}){let s=f(),c=A();return(0,D.jsx)(g,{children:(0,D.jsxs)(r,{gap:3,style:{opacity:i?.5:1,transition:`opacity ${O}`},"aria-busy":i,children:[o,(0,D.jsx)(_,{children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,hasTabularNumbers:!0,children:p(s,c.usd,{model:e,usage:t,elapsedMs:n,tokens:a})})})]},n??0)})}function K({iface:e,result:t,elapsedMs:n,isStale:r,asked:i,onQuestion:a,questionText:o}){let s=f();return(0,D.jsx)(G,{model:t.model,usage:t.usage,elapsedMs:n,isStale:r,tokens:e=>s(`@theorem.decision.tokens`,{count:e}),children:(0,D.jsx)(T,{minWidth:260,children:e.questions.map(e=>(0,D.jsx)(_,{children:(0,D.jsx)(W,{question:e,answer:t.answers[e.id],asked:i,onQuestion:a,detail:o?.[e.id]})},e.id))})})}var q={status:`idle`,result:null,elapsedMs:null,startedAt:null,failure:null};function J(e,t){for(let n of t??[])e.traces?.push(n)}function Y(e,t,n){let[r,i]=(0,E.useState)(q),o=(0,E.useRef)(null);(0,E.useEffect)(()=>()=>o.current?.abort(),[]);let s=(0,E.useCallback)(()=>{o.current?.abort(),o.current=null,i(e=>e.status===t?{...e,status:e.result?`done`:`idle`,startedAt:null}:e)},[t]),c=(0,E.useCallback)(async(...r)=>{o.current?.abort();let s=new AbortController;o.current=s,i(e=>({status:t,result:e.result,elapsedMs:e.elapsedMs,startedAt:Date.now(),failure:null}));let c=performance.now();try{let t=await n(e,s.signal,...r);if(s.signal.aborted)return;J(e,t.traces),i({status:`done`,result:t.result,elapsedMs:performance.now()-c,startedAt:null,failure:null})}catch(t){if(s.signal.aborted)return;J(e,v(t)),i(e=>({...e,status:`error`,startedAt:null,failure:a(t)}))}finally{o.current===s&&(o.current=null)}},[e,t,n]);return{...r,call:c,cancel:s}}export{A as a,K as i,G as n,M as r,Y as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{t as r}from"./VStack-CkVMcNiK.js";import{n as i}from"./StackItem-CQviqAfM.js";import{N as a,U as o,c as s,l as c}from"./browser-transport-B0zaH_Aw.js";import{t as l}from"./Icon-ZfFwTt8n.js";import{t as u}from"./IconButton-CG5klqF1.js";import{t as d}from"./Text-BsiAsowd.js";import{n as f,o as p}from"./labels-provider-BSiD6Lrb.js";import{n as m}from"./Card-Ghe4ozhC.js";import{t as h}from"./Tooltip-CTEuMRLe.js";import{n as g,t as _}from"./arrive-DvbqpeRS.js";import{d as v}from"./reader-BB7aL5yX.js";import{_ as y,b,g as x,y as S}from"./ConsoleFrame-DqN62wL7.js";import{c as C,i as w}from"./trace-patterns-CS99kExN.js";import{t as T}from"./CardWall-CBRLdDZW.js";var E=e(n(),1),D=t(),O=`var(--duration-medium) var(--ease-standard)`,k=12;function A(){let e=m();return(0,E.useMemo)(()=>({percent:new Intl.NumberFormat(e,{style:`percent`,maximumFractionDigits:0}),decimal:new Intl.NumberFormat(e,{maximumFractionDigits:2}),usd:new Intl.NumberFormat(e,{style:`currency`,currency:`USD`,maximumSignificantDigits:2})}),[e])}function j(e){return C(e?`clear`:`shade2`)}function M({value:e,isLead:t}){return(0,D.jsx)(`div`,{style:{height:k,width:`${String(Math.max(e,.01)*100)}%`,borderRadius:4,background:j(t),transition:`width ${O}`}})}function N({title:e,aside:t,detail:n,answer:a}){let o=f(),s=A(),c=Object.entries(a.probabilities).sort(([,e],[,t])=>t-e);return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a.choice,note:o(`@theorem.decision.confidence`,{percent:s.percent.format(a.confidence)}),children:(0,D.jsx)(r,{gap:2,role:`list`,children:c.map(([e,t])=>(0,D.jsxs)(r,{gap:1,role:`listitem`,"aria-label":o(`@theorem.decision.option`,{label:e,percent:s.percent.format(t)}),children:[(0,D.jsxs)(i,{gap:2,hAlign:`between`,"aria-hidden":!0,children:[(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:e}),(0,D.jsx)(d,{type:`supporting`,hasTabularNumbers:!0,children:s.percent.format(t)})]}),(0,D.jsx)(M,{value:t,isLead:e===a.choice})]},e))})})}var P=56;function F(e){let t=e.split(/[:—–]\s/)[0]?.trim()??``;return t&&t.length<=32&&t!==e?t:e}function I({title:e,aside:t,detail:n,answer:i,labels:a}){let o=f(),s=A(),c=a.length,l=Math.min(c-1,Math.max(0,Math.round(i.score)));return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a[l]===void 0?s.decimal.format(i.score):F(a[l]),note:[o(`@theorem.decision.score_of`,{score:s.decimal.format(i.score),max:s.decimal.format(c-1)}),o(`@theorem.decision.confidence`,{percent:s.percent.format(i.confidence)})].join(` · `),children:(0,D.jsxs)(r,{gap:1,children:[(0,D.jsxs)(`div`,{"aria-hidden":!0,style:{position:`relative`,display:`flex`,alignItems:`flex-end`,gap:4,height:P},children:[a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,height:`${String(Math.max(.04,i.probabilities[String(t)]??0)*100)}%`,borderRadius:4,background:j(t===l),transition:`height ${O}`}},`${String(t)}:${e}`)),(0,D.jsx)(`div`,{style:{position:`absolute`,insetBlock:-4,left:`${String((i.score+.5)/c*100)}%`,width:0,borderInlineStart:`1.5px dashed var(--color-text-secondary)`,transition:`left ${O}`}})]}),(0,D.jsx)(`div`,{style:{display:`flex`,gap:4},children:a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,minWidth:0},title:e,children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:F(e)})},`${String(t)}:${e}`))}),(0,D.jsx)(`span`,{style:{position:`absolute`,width:1,height:1,overflow:`hidden`,clipPath:`inset(50%)`},children:a.map((e,t)=>o(`@theorem.decision.option`,{label:e,percent:s.percent.format(i.probabilities[String(t)]??0)})).join(`; `)})]})})}function L({title:e,aside:t,detail:n,answer:r}){let i=A();return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:i.decimal.format(r.noul)})}var R=72,z=168;function B(e){let[t,n]=(0,E.useState)(null);return(0,E.useEffect)(()=>{let t=new Image;t.onload=()=>{n({width:t.naturalWidth,height:t.naturalHeight})},t.src=e},[e]),t}function V(e,t){let n=e.style.color;e.style.color=`var(${t})`;let r=getComputedStyle(e).color;return e.style.color=n,r}function H({source:e,box:t,caption:n}){let r=f(),i=S(e),a=B(i),[o,l]=(0,E.useState)(null);if(!a)return null;let u=y(t),d=a.width*(t.right-t.left)/(a.height*(t.bottom-t.top)),p=r(`@theorem.decision.open_box`);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(h,{content:p,children:(0,D.jsx)(c,{label:p,padding:0,onClick:e=>{let n={outline:V(e.currentTarget,`--color-accent`),shade:V(e.currentTarget,`--color-overlay`)};b(i,t,n).then(l)},children:(0,D.jsx)(`div`,{role:`img`,"aria-label":r(`@theorem.decision.box_in`),style:{position:`relative`,overflow:`hidden`,aspectRatio:String(d),height:z,maxWidth:`100%`,borderRadius:4},children:(0,D.jsx)(`img`,{src:i,alt:``,style:{position:`absolute`,width:`${String(u.width)}%`,height:`${String(u.height)}%`,left:`${String(u.left)}%`,top:`${String(u.top)}%`,maxWidth:`none`}})})})}),(0,D.jsx)(s,{isOpen:o!==null,onOpenChange:e=>{e||l(null)},media:{src:o??i,alt:r(`@theorem.decision.box_marked`),caption:n},hasZoom:!0})]})}function U({title:e,aside:t,detail:n,answer:r,field:i,asked:a}){let o=f(),s=a&&x(a.images,a.state,i),c=A(),{top:l,bottom:u,left:d,right:p}=r.box,m=o(`@theorem.decision.box_edges`,{left:c.percent.format(d),top:c.percent.format(l),right:c.percent.format(p),bottom:c.percent.format(u)});return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:m,note:o(`@theorem.decision.confidence`,{percent:c.percent.format(r.confidence)}),children:s?(0,D.jsx)(H,{source:s,box:r.box,caption:`${e}: ${m}`}):(0,D.jsx)(`div`,{"aria-hidden":!0,style:{position:`relative`,height:R,borderRadius:4,border:`1px solid var(--color-border)`},children:(0,D.jsx)(`div`,{style:{position:`absolute`,insetInlineStart:`${String(d*100)}%`,insetBlockStart:`${String(l*100)}%`,width:`${String((p-d)*100)}%`,height:`${String((u-l)*100)}%`,borderRadius:2,background:j(!0),transition:`all ${O}`}})})})}function W({question:e,answer:t,asked:n,onQuestion:r,detail:i}){let a=f(),s=`${e.id} · ${a(`@theorem.decision.type.${e.type}`)}`;if(!t)return null;let c=a(`@theorem.decision.edit_question`,{question:e.id}),d={title:s,detail:i,aside:r?(0,D.jsx)(u,{label:c,tooltip:c,size:`sm`,variant:`ghost`,icon:(0,D.jsx)(l,{icon:o,size:`xsm`,color:`secondary`}),onClick:()=>{r(e.id)}}):void 0};return t.type===`choice`?(0,D.jsx)(N,{...d,answer:t}):t.type===`score`?(0,D.jsx)(I,{...d,answer:t,labels:e.labels}):t.type===`noul`?(0,D.jsx)(L,{...d,answer:t}):(0,D.jsx)(U,{...d,answer:t,field:e.field,asked:n})}function G({model:e,usage:t,elapsedMs:n,isStale:i,tokens:a,children:o}){let s=f(),c=A();return(0,D.jsx)(g,{children:(0,D.jsxs)(r,{gap:3,style:{opacity:i?.5:1,transition:`opacity ${O}`},"aria-busy":i,children:[o,(0,D.jsx)(_,{children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,hasTabularNumbers:!0,children:p(s,c.usd,{model:e,usage:t,elapsedMs:n,tokens:a})})})]},n??0)})}function K({iface:e,result:t,elapsedMs:n,isStale:r,asked:i,onQuestion:a,questionText:o}){let s=f();return(0,D.jsx)(G,{model:t.model,usage:t.usage,elapsedMs:n,isStale:r,tokens:e=>s(`@theorem.decision.tokens`,{count:e}),children:(0,D.jsx)(T,{minWidth:260,children:e.questions.map(e=>(0,D.jsx)(_,{children:(0,D.jsx)(W,{question:e,answer:t.answers[e.id],asked:i,onQuestion:a,detail:o?.[e.id]})},e.id))})})}var q={status:`idle`,result:null,elapsedMs:null,startedAt:null,failure:null};function J(e,t){for(let n of t??[])e.traces?.push(n)}function Y(e,t,n){let[r,i]=(0,E.useState)(q),o=(0,E.useRef)(null);(0,E.useEffect)(()=>()=>o.current?.abort(),[]);let s=(0,E.useCallback)(()=>{o.current?.abort(),o.current=null,i(e=>e.status===t?{...e,status:e.result?`done`:`idle`,startedAt:null}:e)},[t]),c=(0,E.useCallback)(async(...r)=>{o.current?.abort();let s=new AbortController;o.current=s,i(e=>({status:t,result:e.result,elapsedMs:e.elapsedMs,startedAt:Date.now(),failure:null}));let c=performance.now();try{let t=await n(e,s.signal,...r);if(s.signal.aborted)return;J(e,t.traces),i({status:`done`,result:t.result,elapsedMs:performance.now()-c,startedAt:null,failure:null})}catch(t){if(s.signal.aborted)return;J(e,v(t)),i(e=>({...e,status:`error`,startedAt:null,failure:a(t)}))}finally{o.current===s&&(o.current=null)}},[e,t,n]);return{...r,call:c,cancel:s}}export{A as a,K as i,G as n,M as r,Y as t};
@@ -1 +1 @@
1
- import{S as e,_ as t,a as n,c as r,i,n as a,o,r as s,s as c,w as l}from"./tree-6F02tTxC.js";function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e){let t=e=>{if(Array.isArray(e))return e.map(t);if(!u(e))return e;let n=Object.keys(e).filter(t=>e[t]!==void 0).sort();return Object.fromEntries(n.map(n=>[n,t(e[n])]))};return JSON.stringify(t(e))??`undefined`}var f=`agent:`;function p(e,t=`identity`){return t===`identity`?`${f}${e}`:`${f}${e}/${t}`}function m(e){if(!e.startsWith(f))return;let t=e.slice(6),n=t.indexOf(`/`);return n<0?{key:t,inner:`identity`}:{key:t.slice(0,n),inner:t.slice(n+1)}}function h(e,t){return o(t)===void 0?p(e,t):t}function g(e,t){let n=o(t);if(n!==void 0)return e.toolSpecs.some(e=>e.key===n)?{tool:n}:void 0;let r=a(t);if(r!==void 0)return e.providers.some(e=>e.id===r)?{provider:r}:void 0;let s=m(t),c=s&&e.agents.find(e=>e.key===s.key);if(!s||!c||o(s.inner)!==void 0)return;let l=i(_(c,[],e.providers),s.inner);return l?{agent:c.key,ref:l}:void 0}function _(e,t,n){let{key:r,tools:{allow:i,...a},...o}=e,s=new Map(t.map(e=>[e.key,e]));return{...o,providers:n,tools:a,toolSpecs:i.flatMap(e=>s.get(e)??[])}}function ee(e,t){let n=e.agents.find(e=>e.key===t);return n&&_(n,e.toolSpecs,e.providers)}function v(t,n=e(`agent`)){let{toolSpecs:r,tools:i,providers:a,...o}=t;return{...o,key:n,tools:{...i,allow:r.map(e=>e.key)}}}function y(e,t){let n=new Map(t.map(e=>[e.key,e])),r=new Set(e.map(e=>e.key)),i=t.filter(e=>!r.has(e.key));return!e.some(e=>(n.get(e.key)??e)!==e)&&i.length===0?e:[...e.map(e=>n.get(e.key)??e),...i]}function b(e,t,n){return e.agents.map(e=>e.key===t?n(e):e)}var x=e=>e.key,S=e=>e.id;function C(e){let t=Object.fromEntries(e.agents.map(t=>[t.key,e.starts.agents[t.key]??t])),n=new Map(e.toolSpecs.map(e=>[e.key,e])),r=new Set([...n.keys(),...Object.values(t).flatMap(e=>e.tools.allow)]),i={};for(let t of r){let r=e.starts.tools[t]??n.get(t);r&&(i[t]=r)}let a=Object.fromEntries(e.providers.map(t=>[t.id,e.starts.providers[t.id]??t]));for(let n of Object.values(t).flatMap(w)){let t=e.starts.providers[n];t&&!(n in a)&&(a[n]=t)}return{...e,starts:{agents:t,tools:i,providers:a}}}var w=e=>e.modelBindings.map(e=>e.provider);function te(e,t){let n=new Set(e.providers.map(S)),r=[...new Set(t.flatMap(w))].flatMap(t=>{let r=e.starts.providers[t];return r&&!n.has(t)?[r]:[]});return r.length?[...e.providers,...r]:e.providers}function ne(e,t){let n=e.agents.find(e=>e.key===t);return n?C({...e,starts:{...e.starts,agents:{...e.starts.agents,[t]:n}}}):e}function T(e,t,n,r){if(!e.agents.some(e=>e.key===t))return e;let i=r?y(e.toolSpecs,[...r]):e.toolSpecs;return C({...e,toolSpecs:y(i,n.toolSpecs),agents:b(e,t,()=>v(n,t))})}function E(e,t){let n=e.agents.find(e=>e.key===t);return n&&{..._(n,[],e.providers),toolSpecs:e.toolSpecs}}function D(e,t,n){if(!e.agents.find(e=>e.key===t))return e;let r=new Set(n.toolSpecs.map(e=>e.key)),i=new Set(e.toolSpecs.map(e=>e.key)),a=n.toolSpecs.filter(e=>!i.has(e.key)).map(e=>e.key),o=e=>e.filter(e=>r.has(e)),{toolSpecs:s,providers:c,tools:l,...u}=n;return C({...e,toolSpecs:n.toolSpecs,agents:e.agents.map(e=>e.key===t?{...u,key:t,tools:{...l,allow:[...o(e.tools.allow),...a]}}:e.tools.allow.every(e=>r.has(e))?e:{...e,tools:{...e.tools,allow:o(e.tools.allow)}})})}function O(e,n=t()){let r=new Map(e.toolSpecs.map(e=>[e.toolName,e.key])),i=n.identity.agentId.trim(),a=e.agents.map(e=>e.identity.agentId),o=i&&l(i,a,e=>`${i}_${e}`),s=v({...n,identity:{...n.identity,agentId:o}});return s.tools.allow=n.toolSpecs.map(e=>r.get(e.toolName)??e.key),C({...e,agents:[...e.agents,s],toolSpecs:[...e.toolSpecs,...n.toolSpecs.filter(e=>!r.has(e.toolName))],selected:p(s.key)})}function re(t,n){let r=t.agents.findIndex(e=>e.key===n),i=t.agents[r];if(!i)return t;let a=i.identity.agentId.trim()||`agent`,o=t.agents.map(e=>e.identity.agentId),s={...structuredClone(i),key:e(`agent`)};s.identity.agentId=l(`${a}_copy`,o,e=>`${a}_copy${e}`);let c=[...t.agents];return c.splice(r+1,0,s),C({...t,agents:c,selected:p(s.key)})}function ie(e,t){let n=e.agents.findIndex(e=>e.key===t);if(n<0||e.agents.length===1)return e;let r=e.agents[n+1]??e.agents[n-1];if(!r)return e;let i=new Set(e.toolSpecs.filter(e=>e.toolType===`agent`&&e.agentKey===t).map(e=>e.key)),a=e.agents.filter(e=>e.key!==t).map(e=>({...e,tools:{...e.tools,allow:e.tools.allow.filter(e=>!i.has(e))},modelBindings:e.modelBindings.map(e=>e.compactWith===t?{...e,compactWith:void 0}:e)})),o=m(e.selected)?.key===t||[...i].some(t=>e.selected===c(t));return C({...e,agents:a,toolSpecs:e.toolSpecs.filter(e=>!i.has(e.key)),selected:o?p(r.key):e.selected,chatWith:e.chatWith===t?r.key:e.chatWith})}function ae(e,t,n,r){let i=e.agents.find(e=>e.key===t);if(!i||!e.toolSpecs.some(e=>e.key===n)||i.tools.allow.includes(n)===r)return e;let a=r?[...i.tools.allow,n]:i.tools.allow.filter(e=>e!==n);return{...e,agents:b(e,t,()=>({...i,tools:{...i.tools,allow:a}}))}}function oe(e,t){if(!e.toolSpecs.some(e=>e.key===t))return e;let n=e.agents.map(e=>e.tools.allow.includes(t)?{...e,tools:{...e.tools,allow:e.tools.allow.filter(e=>e!==t)}}:e);return C({...e,agents:n,toolSpecs:e.toolSpecs.filter(e=>e.key!==t),selected:e.selected===c(t)?p(e.agents[0]?.key??``):e.selected})}var k=(e,t)=>d(e)===d(t),A=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function se(e){let{agents:t,tools:n,providers:r}=e.starts;return e.agents.every(e=>k(e,t[e.key]))&&e.toolSpecs.every(e=>k(e,n[e.key]))&&e.providers.every(e=>k(e,r[e.id]))&&Object.keys(n).length===e.toolSpecs.length}function ce(e){return{...e,starts:{agents:Object.fromEntries(e.agents.map(e=>[e.key,e])),tools:Object.fromEntries(e.toolSpecs.map(e=>[e.key,e])),providers:Object.fromEntries(e.providers.map(e=>[e.id,e]))}}}function le(e,t,n,r){return{...e,identity:{...e.identity,agentId:t},tools:{...e.tools,allow:e.tools.allow.filter(e=>n.has(e))},modelBindings:e.modelBindings.map(e=>e.compactWith&&!r.has(e.compactWith)?{...e,compactWith:void 0}:e)}}function j(e,t){let n=e.starts.agents[t],r=e.agents.find(e=>e.key===t);if(!n||!r)return e;let i=new Set(e.agents.map(e=>e.key)),a=new Set(e.toolSpecs.map(e=>e.key)),o=e.toolSpecs.map(e=>e.toolName),s=[];for(let t of n.tools.allow){let n=e.starts.tools[t];if(a.has(t)||!n||n.toolType===`agent`&&!i.has(n.agentKey??``))continue;let r=l(n.toolName,o,e=>`${n.toolName}_${e}`);o.push(r),s.push({...n,toolName:r})}let c=s.length?[...e.toolSpecs,...s]:e.toolSpecs,u=new Set(c.map(e=>e.key)),d=n.identity.agentId,f=e.agents.filter(e=>e.key!==t).map(e=>e.identity.agentId),m=le(n,d&&l(d,f,e=>`${d}_${e}`),u,i);if(s.length===0&&k(m,r))return e;let h=te(e,[n]),_={...e,agents:b(e,t,()=>m),toolSpecs:c,providers:h};return g(_,_.selected)?_:{..._,selected:p(t)}}function ue(e,t,n){if(n.facet===`identity`)return j(e,t);if(n.facet===`toolSpec`)return Y(e,n.key);let r=j(e,t),i=r.agents.find(e=>e.key===t),a=e.agents.find(e=>e.key===t);if(r===e||!i||!a)return e;let o=de(a,i,n);return k(o,a)?e:{...e,agents:b(e,t,()=>o),toolSpecs:n.facet===`tools`?r.toolSpecs:e.toolSpecs,providers:n.facet===`models`||n.facet===`modelBinding`?r.providers:e.providers}}function de(e,t,n){if(n.facet===`models`)return{...e,models:t.models,modelBindings:t.modelBindings};if(n.facet===`modelBinding`){let r=t.modelBindings.find(e=>e.key===n.key);return r?{...e,modelBindings:e.modelBindings.map(e=>e.key===n.key?r:e)}:e}return n.facet===`toolSpec`?e:M(e,t,n.facet)}function M(e,t,n){return{...e,[n]:t[n]}}function N(e,t){let n=new Map(Object.values(t.starts.agents).map(e=>[e.identity.agentId,e.key])),r=new Map(Object.values(t.starts.tools).map(e=>[e.toolName,e.key])),i=JSON.stringify(e),a=(e,t)=>{t!==void 0&&t!==e&&(i=i.split(e).join(t))};for(let t of e.agents)a(t.key,n.get(t.identity.agentId));for(let t of e.toolSpecs)a(t.key,r.get(t.toolName));let o=JSON.parse(i);return{...o,selected:g(o,t.selected)?t.selected:o.selected,chatWith:o.agents.some(e=>e.key===t.chatWith)?t.chatWith:o.chatWith}}function P(e,t){let n=N(t,e),r=(e,t,n,r,i)=>{let a=new Map(r.map(t=>[e(t),t])),o=new Set([...t.map(e),...Object.keys(n)]),s=t.map(t=>k(t,n[e(t)])?a.get(e(t))??t:t),c=s.filter(t=>!(e(t)in i)).map(t=>[e(t),n[e(t)]??t]);return{held:[...s,...r.filter(t=>!o.has(e(t)))],starts:{...Object.fromEntries(c),...i}}},i=r(x,e.agents,e.starts.agents,n.agents,n.starts.agents),a=r(x,e.toolSpecs,e.starts.tools,n.toolSpecs,n.starts.tools),o=r(S,e.providers,e.starts.providers,n.providers,n.starts.providers);return{...e,agents:i.held,toolSpecs:a.held,providers:o.held,starts:{agents:i.starts,tools:a.starts,providers:o.starts}}}function F(e){let t=new Map,n=e=>{if(Array.isArray(e))for(let t of e)n(t);else if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))r!==`key`||typeof i!=`string`?n(i):t.has(i)||t.set(i,`#${t.size}`)},r=e=>typeof e==`string`?t.get(e)??e:Array.isArray(e)?e.map(r):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).map(([e,n])=>[t.get(e)??e,r(n)])),i={agents:e.agents,toolSpecs:e.toolSpecs,providers:e.providers};n(i);let a=JSON.stringify(r(i)),o=2166136261,s=16777619;for(let e=0;e<a.length;e+=1){let t=a.charCodeAt(e);o=Math.imul(o^t,16777619),s=Math.imul(s^t,2246822507)}return`${a.length.toString(36)}-${(o>>>0).toString(36)}${(s>>>0).toString(36)}`}function I(e,t){return F(e)!==t}var L=/^(agent|model|tool|question|criterion|reference)-[0-9a-f]{8}$/;function R(e){let t=new Map;return JSON.stringify(e).replace(/\b(agent|model|tool|question|criterion|reference)-[0-9a-f]{8}\b/g,e=>(t.has(e)||t.set(e,`#${t.size}`),t.get(e)??e))}function z(e,t){let n=t.map(R),r=new Set,i=[],a=[];for(let o of e){let e=R(o),s=n.findIndex((t,n)=>t===e&&!r.has(n));s<0?a.push(o):(r.add(s),i.push([o,t[s]]))}let o=t.filter((e,t)=>!r.has(t));for(let[e,t]of a.slice(0,o.length).entries())i.push([t,o[e]]);return i}function B(e,t){let n=JSON.stringify(e),r=(e,t,r,i)=>{let a=new Set(r.map(e=>e.key)),o=new Set(e.map(e=>e.key)),s=e.flatMap(e=>a.has(e.key)?[]:t[e.key]??[]),c=r.filter(e=>!o.has(e.key)&&!t[e.key]),[l,u]=[s[0],c[0]];s.length===1&&c.length===1&&l&&u&&R(i(l))===R(i(u))&&(n=n.split(u.key).join(l.key))};return r(t.agents,t.starts.agents,e.agents,e=>({...e,identity:{...e.identity,agentId:``}})),r(t.toolSpecs,t.starts.tools,e.toolSpecs,e=>({...e,toolName:``})),JSON.parse(n)}function V(e,t){let n=JSON.stringify(e);for(let e=0;e<4;e+=1){let e=JSON.parse(n),r=new Map,i=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))for(let[n,r]of z(e,t))i(n,r);else if(A(e)&&A(t))for(let[n,a]of Object.entries(e)){let e=t[n];n===`key`?typeof a==`string`&&typeof e==`string`&&a!==e&&L.test(a)&&L.test(e)&&r.set(e,a):i(a,e)}};for(let n of e.agents)i(t.agents[n.key],n);for(let n of e.toolSpecs)i(t.tools[n.key],n);if(r.size===0)return e;for(let[e,t]of r)n=n.split(e).join(t)}return JSON.parse(n)}var H=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`)&&new Set(e).size===e.length,U=e=>Array.isArray(e)&&e.every(e=>A(e)&&typeof e.key==`string`);function W(e,t,n,r,i){if(k(e,n)||k(t,n))return t;if(A(e)&&A(t)&&A(n)){let a={};for(let o of new Set([...Object.keys(n),...Object.keys(t),...Object.keys(e)])){let s=W(e[o],t[o],n[o],[...r,o],i);s!==void 0&&(a[o]=s)}return a}if(U(e)&&U(t)&&U(n)){let a=new Map(e.map(e=>[e.key,e])),o=new Map(n.map(e=>[e.key,e])),s=[];for(let e of t){let[t,n]=[a.get(e.key),o.get(e.key)],c=[...r,s.length];t?n?s.push(W(t,e,n,c,i)):k(e,t)?i.updated(c):(i.conflict(c,e,void 0),s.push(e)):s.push(e)}let c=new Set(t.map(e=>e.key)),l=s.length;for(let e of n){if(c.has(e.key))continue;let t=a.get(e.key);t?k(e,t)||i.conflict([...r,l++],void 0,e):(i.updated([...r,s.length]),s.push(e),l+=1)}return s}if(k(e,t))return i.updated(r),n;if(H(e)&&H(t)&&H(n)){let a=e.filter(e=>!n.includes(e)),o=n.filter(n=>!e.includes(n)&&!t.includes(n));return i.updated(r),[...t.filter(e=>!a.includes(e)),...o]}return i.conflict(r,t,n),t}function G(e){let t=new Set(e.agents.map(e=>e.key)),n=e.toolSpecs.filter(e=>e.toolType!==`agent`||t.has(e.agentKey??``)),r=new Set(n.map(e=>e.key)),i=e.agents.map(e=>{let n=e.tools.allow.filter(e=>r.has(e)),i=e.modelBindings.map(e=>e.compactWith&&!t.has(e.compactWith)?{...e,compactWith:void 0}:e),a={...e,tools:{...e.tools,allow:n},modelBindings:i};return k(a,e)?e:a}),a=C({...e,agents:i,toolSpecs:n}),o=i[0];return{...a,selected:g(a,a.selected)||!o?a.selected:p(o.key),chatWith:t.has(a.chatWith)||!o?a.chatWith:o.key}}function fe(e,t,n){let r=V(B(N(t,e),e),e.starts),i=[],a=[],o=(e,t,n,r,o,s,c,l)=>{let u=new Map(s.map(e=>[t(e),e])),d=new Set(r.map(e=>t(e))),f=new Set(r.map(e=>n(o[t(e)]??e))),p=new Set(l?.map(n)),m=[],h={...c};for(let s of r){let[r,c]=[o[t(s)],u.get(t(s))],l={kind:e,key:t(s),name:n(c??r??s)};!r||!c&&!p.has(n(r))?(m.push(s),h[t(s)]=r??s):c?m.push(W(r,s,c,[],{updated:e=>i.push({...l,path:e}),conflict:(e,t,n)=>a.push({...l,path:e,mine:t,theirs:n})})):k(s,r)?i.push({...l,path:[]}):(a.push({...l,path:[],mine:s,theirs:void 0}),m.push(s),h[t(s)]=r)}let g=e=>{let r=o[t(e)]??l?.find(t=>n(t)===n(e)&&!f.has(n(t)));if(r)return R(r)===R(e)?`unchanged`:`changed`};for(let r of s){if(d.has(t(r)))continue;let o={kind:e,key:t(r),name:n(r),path:[]},s=g(r);s===`changed`?a.push({...o,mine:void 0,theirs:r}):s===void 0&&(m.push(r),i.push(o))}return{held:m,starts:h}},s=o(`agent`,x,e=>e.identity.agentId,e.agents,e.starts.agents,r.agents,r.starts.agents,n?.agents),c=o(`tool`,x,e=>e.toolName,e.toolSpecs,e.starts.tools,r.toolSpecs,r.starts.tools,n?.toolSpecs),l=o(`provider`,S,S,e.providers,e.starts.providers,r.providers,r.starts.providers,n?.providers);return{workspace:G({...e,agents:s.held,toolSpecs:c.held,providers:l.held,starts:{agents:s.starts,tools:c.starts,providers:l.starts}}),updated:i,conflicts:a,files:r}}var K=Object.freeze({gone:!0});function q(e){if(Array.isArray(e))return e.filter(e=>e!==K).map(q);if(!A(e))return e;let t=Object.entries(e).map(([e,t])=>[e,q(t)]);return Object.fromEntries(t)}function J(e,t,n){let[r,...i]=t;if(r===void 0)return n;if(Array.isArray(e))return typeof r==`number`&&r>=e.length?n===void 0?e:[...e,n]:e.map((e,t)=>t===r?i.length===0&&n===void 0?K:J(e,i,n):e);let a={...A(e)?e:{}},o=J(a[r],i,n);return o===void 0?delete a[r]:a[r]=o,a}function pe(e,t){let{agents:n,toolSpecs:r,providers:i}=e.workspace,a={agents:{...e.workspace.starts.agents},tools:{...e.workspace.starts.tools},providers:{...e.workspace.starts.providers}},o=(e,t,n,r)=>r.path.length>0?t.map(t=>e(t)===r.key?J(t,r.path,r.theirs):t):r.theirs===void 0?(delete n[r.key],t.filter(t=>e(t)!==r.key)):(n[r.key]=r.theirs,[...t,r.theirs]);for(let s of new Set(t)){let t=e.conflicts[s];if(t){if(t.kind===`tool`)r=o(x,r,a.tools,t);else if(t.kind===`provider`)i=o(S,i,a.providers,t);else{if(n=o(x,n,a.agents,t),t.path.length>0||t.theirs===void 0)continue;let i=new Set(r.map(e=>e.key)),s=e.files.toolSpecs.filter(e=>e.toolType===`agent`&&e.agentKey===t.key&&!i.has(e.key));for(let e of s)a.tools[e.key]=e;r=[...r,...s],n=n.map(t=>{let n=e.files.agents.find(e=>e.key===t.key)?.tools.allow??[],r=s.map(e=>e.key).filter(e=>n.includes(e)&&!t.tools.allow.includes(e));return r.length?{...t,tools:{...t.tools,allow:[...t.tools.allow,...r]}}:t})}}}return[n,r]=[q(n),q(r)],G({...e.workspace,agents:n,toolSpecs:r,providers:i,starts:a})}function Y(e,t){let n=e.starts.tools[t],r=e.toolSpecs.find(e=>e.key===t);if(!n||!r)return e;let i=e.toolSpecs.filter(e=>e.key!==t).map(e=>e.toolName),a={...n,toolName:l(n.toolName,i,e=>`${n.toolName}_${e}`)};return k(a,r)?e:{...e,toolSpecs:e.toolSpecs.map(e=>e.key===t?a:e)}}function X(e,t){let n=e.providers.find(e=>e.id===t.id);return!n||k(n,t)?e:{...e,providers:e.providers.map(e=>e.id===t.id?t:e)}}function Z(e,t){let n=e.agents.map(e=>w(e).filter(e=>e===t).length);return{models:n.reduce((e,t)=>e+t,0),agents:n.filter(e=>e>0).length}}function me(e,t,n,r,i){let a=e=>e.provider===r&&e.apiId.trim()===i.trim();return{models:(e.agents.find(e=>e.key===t)?.modelBindings??[]).filter(e=>e.key!==n&&a(e)).map(e=>e.modelId.trim()||`new`),agents:e.agents.filter(e=>e.key!==t&&e.modelBindings.some(a)).map(e=>e.identity.agentId.trim()||`New agent`)}}function he(e,t){return{id:l(`provider`,e,e=>`provider_${e}`),definition:t,connection:{}}}function ge(e,t){return e.providers.some(e=>e.id===t.id)?e:C({...e,providers:[...e.providers,t],selected:s(t.id)})}function _e(e,t){return!e.providers.some(e=>e.id===t)||Z(e,t).models>0?e:C({...e,providers:e.providers.filter(e=>e.id!==t),selected:e.selected===s(t)?p(e.agents[0]?.key??``):e.selected})}function Q(e,t,n){let r=n.trim();if(!e.providers.some(e=>e.id===t)||!r||e.providers.some(e=>e.id===r))return e;let{[t]:i,...a}=e.starts.providers,o=e=>e.provider===t;return{...e,providers:e.providers.map(e=>e.id===t?{...e,id:r}:e),agents:e.agents.map(e=>e.modelBindings.some(o)?{...e,modelBindings:e.modelBindings.map(e=>o(e)?{...e,provider:r}:e)}:e),selected:e.selected===s(t)?s(r):e.selected,starts:{...e.starts,providers:i?{...a,[r]:{...i,id:r}}:a}}}function ve(e){return e.providers.flatMap(t=>{let n=e.starts.providers[t.id];return n&&k(n,t)?[t.id]:[]})}function ye(e,t){let n=e.starts.providers[t];return n?X(e,n):e}function $(e,t){return{...t,id:p(e,t.id),children:t.children.map(t=>$(e,t))}}function be(e,t){let r=$(e.key,n(_(e,[],t)));return e.identity.agentId.trim()?r:{...r,label:`New agent`}}function xe(e){return{agents:e.agents.map(t=>be(t,e.providers)),tools:r(e.toolSpecs)}}export{pe as A,ue as C,ae as D,h as E,d as F,X as M,g as N,ce as O,xe as P,j as S,ye as T,ie as _,se as a,Q as b,F as c,fe as d,me as f,P as g,ve as h,p as i,D as j,T as k,E as l,Z as m,ge as n,re as o,he as p,ee as r,I as s,O as t,ne as u,oe as v,Y as w,N as x,_e as y};
1
+ import{S as e,_ as t,a as n,c as r,i,n as a,o,r as s,s as c,w as l}from"./tree-2VeaKg0m.js";function u(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function d(e){let t=e=>{if(Array.isArray(e))return e.map(t);if(!u(e))return e;let n=Object.keys(e).filter(t=>e[t]!==void 0).sort();return Object.fromEntries(n.map(n=>[n,t(e[n])]))};return JSON.stringify(t(e))??`undefined`}var f=`agent:`;function p(e,t=`identity`){return t===`identity`?`${f}${e}`:`${f}${e}/${t}`}function m(e){if(!e.startsWith(f))return;let t=e.slice(6),n=t.indexOf(`/`);return n<0?{key:t,inner:`identity`}:{key:t.slice(0,n),inner:t.slice(n+1)}}function h(e,t){return o(t)===void 0?p(e,t):t}function g(e,t){let n=o(t);if(n!==void 0)return e.toolSpecs.some(e=>e.key===n)?{tool:n}:void 0;let r=a(t);if(r!==void 0)return e.providers.some(e=>e.id===r)?{provider:r}:void 0;let s=m(t),c=s&&e.agents.find(e=>e.key===s.key);if(!s||!c||o(s.inner)!==void 0)return;let l=i(_(c,[],e.providers),s.inner);return l?{agent:c.key,ref:l}:void 0}function _(e,t,n){let{key:r,tools:{allow:i,...a},...o}=e,s=new Map(t.map(e=>[e.key,e]));return{...o,providers:n,tools:a,toolSpecs:i.flatMap(e=>s.get(e)??[])}}function ee(e,t){let n=e.agents.find(e=>e.key===t);return n&&_(n,e.toolSpecs,e.providers)}function v(t,n=e(`agent`)){let{toolSpecs:r,tools:i,providers:a,...o}=t;return{...o,key:n,tools:{...i,allow:r.map(e=>e.key)}}}function y(e,t){let n=new Map(t.map(e=>[e.key,e])),r=new Set(e.map(e=>e.key)),i=t.filter(e=>!r.has(e.key));return!e.some(e=>(n.get(e.key)??e)!==e)&&i.length===0?e:[...e.map(e=>n.get(e.key)??e),...i]}function b(e,t,n){return e.agents.map(e=>e.key===t?n(e):e)}var x=e=>e.key,S=e=>e.id;function C(e){let t=Object.fromEntries(e.agents.map(t=>[t.key,e.starts.agents[t.key]??t])),n=new Map(e.toolSpecs.map(e=>[e.key,e])),r=new Set([...n.keys(),...Object.values(t).flatMap(e=>e.tools.allow)]),i={};for(let t of r){let r=e.starts.tools[t]??n.get(t);r&&(i[t]=r)}let a=Object.fromEntries(e.providers.map(t=>[t.id,e.starts.providers[t.id]??t]));for(let n of Object.values(t).flatMap(w)){let t=e.starts.providers[n];t&&!(n in a)&&(a[n]=t)}return{...e,starts:{agents:t,tools:i,providers:a}}}var w=e=>e.modelBindings.map(e=>e.provider);function te(e,t){let n=new Set(e.providers.map(S)),r=[...new Set(t.flatMap(w))].flatMap(t=>{let r=e.starts.providers[t];return r&&!n.has(t)?[r]:[]});return r.length?[...e.providers,...r]:e.providers}function ne(e,t){let n=e.agents.find(e=>e.key===t);return n?C({...e,starts:{...e.starts,agents:{...e.starts.agents,[t]:n}}}):e}function T(e,t,n,r){if(!e.agents.some(e=>e.key===t))return e;let i=r?y(e.toolSpecs,[...r]):e.toolSpecs;return C({...e,toolSpecs:y(i,n.toolSpecs),agents:b(e,t,()=>v(n,t))})}function E(e,t){let n=e.agents.find(e=>e.key===t);return n&&{..._(n,[],e.providers),toolSpecs:e.toolSpecs}}function D(e,t,n){if(!e.agents.find(e=>e.key===t))return e;let r=new Set(n.toolSpecs.map(e=>e.key)),i=new Set(e.toolSpecs.map(e=>e.key)),a=n.toolSpecs.filter(e=>!i.has(e.key)).map(e=>e.key),o=e=>e.filter(e=>r.has(e)),{toolSpecs:s,providers:c,tools:l,...u}=n;return C({...e,toolSpecs:n.toolSpecs,agents:e.agents.map(e=>e.key===t?{...u,key:t,tools:{...l,allow:[...o(e.tools.allow),...a]}}:e.tools.allow.every(e=>r.has(e))?e:{...e,tools:{...e.tools,allow:o(e.tools.allow)}})})}function O(e,n=t()){let r=new Map(e.toolSpecs.map(e=>[e.toolName,e.key])),i=n.identity.agentId.trim(),a=e.agents.map(e=>e.identity.agentId),o=i&&l(i,a,e=>`${i}_${e}`),s=v({...n,identity:{...n.identity,agentId:o}});return s.tools.allow=n.toolSpecs.map(e=>r.get(e.toolName)??e.key),C({...e,agents:[...e.agents,s],toolSpecs:[...e.toolSpecs,...n.toolSpecs.filter(e=>!r.has(e.toolName))],selected:p(s.key)})}function re(t,n){let r=t.agents.findIndex(e=>e.key===n),i=t.agents[r];if(!i)return t;let a=i.identity.agentId.trim()||`agent`,o=t.agents.map(e=>e.identity.agentId),s={...structuredClone(i),key:e(`agent`)};s.identity.agentId=l(`${a}_copy`,o,e=>`${a}_copy${e}`);let c=[...t.agents];return c.splice(r+1,0,s),C({...t,agents:c,selected:p(s.key)})}function ie(e,t){let n=e.agents.findIndex(e=>e.key===t);if(n<0||e.agents.length===1)return e;let r=e.agents[n+1]??e.agents[n-1];if(!r)return e;let i=new Set(e.toolSpecs.filter(e=>e.toolType===`agent`&&e.agentKey===t).map(e=>e.key)),a=e.agents.filter(e=>e.key!==t).map(e=>({...e,tools:{...e.tools,allow:e.tools.allow.filter(e=>!i.has(e))},modelBindings:e.modelBindings.map(e=>e.compactWith===t?{...e,compactWith:void 0}:e)})),o=m(e.selected)?.key===t||[...i].some(t=>e.selected===c(t));return C({...e,agents:a,toolSpecs:e.toolSpecs.filter(e=>!i.has(e.key)),selected:o?p(r.key):e.selected,chatWith:e.chatWith===t?r.key:e.chatWith})}function ae(e,t,n,r){let i=e.agents.find(e=>e.key===t);if(!i||!e.toolSpecs.some(e=>e.key===n)||i.tools.allow.includes(n)===r)return e;let a=r?[...i.tools.allow,n]:i.tools.allow.filter(e=>e!==n);return{...e,agents:b(e,t,()=>({...i,tools:{...i.tools,allow:a}}))}}function oe(e,t){if(!e.toolSpecs.some(e=>e.key===t))return e;let n=e.agents.map(e=>e.tools.allow.includes(t)?{...e,tools:{...e.tools,allow:e.tools.allow.filter(e=>e!==t)}}:e);return C({...e,agents:n,toolSpecs:e.toolSpecs.filter(e=>e.key!==t),selected:e.selected===c(t)?p(e.agents[0]?.key??``):e.selected})}var k=(e,t)=>d(e)===d(t),A=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function se(e){let{agents:t,tools:n,providers:r}=e.starts;return e.agents.every(e=>k(e,t[e.key]))&&e.toolSpecs.every(e=>k(e,n[e.key]))&&e.providers.every(e=>k(e,r[e.id]))&&Object.keys(n).length===e.toolSpecs.length}function ce(e){return{...e,starts:{agents:Object.fromEntries(e.agents.map(e=>[e.key,e])),tools:Object.fromEntries(e.toolSpecs.map(e=>[e.key,e])),providers:Object.fromEntries(e.providers.map(e=>[e.id,e]))}}}function le(e,t,n,r){return{...e,identity:{...e.identity,agentId:t},tools:{...e.tools,allow:e.tools.allow.filter(e=>n.has(e))},modelBindings:e.modelBindings.map(e=>e.compactWith&&!r.has(e.compactWith)?{...e,compactWith:void 0}:e)}}function j(e,t){let n=e.starts.agents[t],r=e.agents.find(e=>e.key===t);if(!n||!r)return e;let i=new Set(e.agents.map(e=>e.key)),a=new Set(e.toolSpecs.map(e=>e.key)),o=e.toolSpecs.map(e=>e.toolName),s=[];for(let t of n.tools.allow){let n=e.starts.tools[t];if(a.has(t)||!n||n.toolType===`agent`&&!i.has(n.agentKey??``))continue;let r=l(n.toolName,o,e=>`${n.toolName}_${e}`);o.push(r),s.push({...n,toolName:r})}let c=s.length?[...e.toolSpecs,...s]:e.toolSpecs,u=new Set(c.map(e=>e.key)),d=n.identity.agentId,f=e.agents.filter(e=>e.key!==t).map(e=>e.identity.agentId),m=le(n,d&&l(d,f,e=>`${d}_${e}`),u,i);if(s.length===0&&k(m,r))return e;let h=te(e,[n]),_={...e,agents:b(e,t,()=>m),toolSpecs:c,providers:h};return g(_,_.selected)?_:{..._,selected:p(t)}}function ue(e,t,n){if(n.facet===`identity`)return j(e,t);if(n.facet===`toolSpec`)return Y(e,n.key);let r=j(e,t),i=r.agents.find(e=>e.key===t),a=e.agents.find(e=>e.key===t);if(r===e||!i||!a)return e;let o=de(a,i,n);return k(o,a)?e:{...e,agents:b(e,t,()=>o),toolSpecs:n.facet===`tools`?r.toolSpecs:e.toolSpecs,providers:n.facet===`models`||n.facet===`modelBinding`?r.providers:e.providers}}function de(e,t,n){if(n.facet===`models`)return{...e,models:t.models,modelBindings:t.modelBindings};if(n.facet===`modelBinding`){let r=t.modelBindings.find(e=>e.key===n.key);return r?{...e,modelBindings:e.modelBindings.map(e=>e.key===n.key?r:e)}:e}return n.facet===`toolSpec`?e:M(e,t,n.facet)}function M(e,t,n){return{...e,[n]:t[n]}}function N(e,t){let n=new Map(Object.values(t.starts.agents).map(e=>[e.identity.agentId,e.key])),r=new Map(Object.values(t.starts.tools).map(e=>[e.toolName,e.key])),i=JSON.stringify(e),a=(e,t)=>{t!==void 0&&t!==e&&(i=i.split(e).join(t))};for(let t of e.agents)a(t.key,n.get(t.identity.agentId));for(let t of e.toolSpecs)a(t.key,r.get(t.toolName));let o=JSON.parse(i);return{...o,selected:g(o,t.selected)?t.selected:o.selected,chatWith:o.agents.some(e=>e.key===t.chatWith)?t.chatWith:o.chatWith}}function P(e,t){let n=N(t,e),r=(e,t,n,r,i)=>{let a=new Map(r.map(t=>[e(t),t])),o=new Set([...t.map(e),...Object.keys(n)]),s=t.map(t=>k(t,n[e(t)])?a.get(e(t))??t:t),c=s.filter(t=>!(e(t)in i)).map(t=>[e(t),n[e(t)]??t]);return{held:[...s,...r.filter(t=>!o.has(e(t)))],starts:{...Object.fromEntries(c),...i}}},i=r(x,e.agents,e.starts.agents,n.agents,n.starts.agents),a=r(x,e.toolSpecs,e.starts.tools,n.toolSpecs,n.starts.tools),o=r(S,e.providers,e.starts.providers,n.providers,n.starts.providers);return{...e,agents:i.held,toolSpecs:a.held,providers:o.held,starts:{agents:i.starts,tools:a.starts,providers:o.starts}}}function F(e){let t=new Map,n=e=>{if(Array.isArray(e))for(let t of e)n(t);else if(typeof e==`object`&&e)for(let[r,i]of Object.entries(e))r!==`key`||typeof i!=`string`?n(i):t.has(i)||t.set(i,`#${t.size}`)},r=e=>typeof e==`string`?t.get(e)??e:Array.isArray(e)?e.map(r):typeof e!=`object`||!e?e:Object.fromEntries(Object.entries(e).map(([e,n])=>[t.get(e)??e,r(n)])),i={agents:e.agents,toolSpecs:e.toolSpecs,providers:e.providers};n(i);let a=JSON.stringify(r(i)),o=2166136261,s=16777619;for(let e=0;e<a.length;e+=1){let t=a.charCodeAt(e);o=Math.imul(o^t,16777619),s=Math.imul(s^t,2246822507)}return`${a.length.toString(36)}-${(o>>>0).toString(36)}${(s>>>0).toString(36)}`}function I(e,t){return F(e)!==t}var L=/^(agent|model|tool|question|criterion|reference)-[0-9a-f]{8}$/;function R(e){let t=new Map;return JSON.stringify(e).replace(/\b(agent|model|tool|question|criterion|reference)-[0-9a-f]{8}\b/g,e=>(t.has(e)||t.set(e,`#${t.size}`),t.get(e)??e))}function z(e,t){let n=t.map(R),r=new Set,i=[],a=[];for(let o of e){let e=R(o),s=n.findIndex((t,n)=>t===e&&!r.has(n));s<0?a.push(o):(r.add(s),i.push([o,t[s]]))}let o=t.filter((e,t)=>!r.has(t));for(let[e,t]of a.slice(0,o.length).entries())i.push([t,o[e]]);return i}function B(e,t){let n=JSON.stringify(e),r=(e,t,r,i)=>{let a=new Set(r.map(e=>e.key)),o=new Set(e.map(e=>e.key)),s=e.flatMap(e=>a.has(e.key)?[]:t[e.key]??[]),c=r.filter(e=>!o.has(e.key)&&!t[e.key]),[l,u]=[s[0],c[0]];s.length===1&&c.length===1&&l&&u&&R(i(l))===R(i(u))&&(n=n.split(u.key).join(l.key))};return r(t.agents,t.starts.agents,e.agents,e=>({...e,identity:{...e.identity,agentId:``}})),r(t.toolSpecs,t.starts.tools,e.toolSpecs,e=>({...e,toolName:``})),JSON.parse(n)}function V(e,t){let n=JSON.stringify(e);for(let e=0;e<4;e+=1){let e=JSON.parse(n),r=new Map,i=(e,t)=>{if(Array.isArray(e)&&Array.isArray(t))for(let[n,r]of z(e,t))i(n,r);else if(A(e)&&A(t))for(let[n,a]of Object.entries(e)){let e=t[n];n===`key`?typeof a==`string`&&typeof e==`string`&&a!==e&&L.test(a)&&L.test(e)&&r.set(e,a):i(a,e)}};for(let n of e.agents)i(t.agents[n.key],n);for(let n of e.toolSpecs)i(t.tools[n.key],n);if(r.size===0)return e;for(let[e,t]of r)n=n.split(e).join(t)}return JSON.parse(n)}var H=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`)&&new Set(e).size===e.length,U=e=>Array.isArray(e)&&e.every(e=>A(e)&&typeof e.key==`string`);function W(e,t,n,r,i){if(k(e,n)||k(t,n))return t;if(A(e)&&A(t)&&A(n)){let a={};for(let o of new Set([...Object.keys(n),...Object.keys(t),...Object.keys(e)])){let s=W(e[o],t[o],n[o],[...r,o],i);s!==void 0&&(a[o]=s)}return a}if(U(e)&&U(t)&&U(n)){let a=new Map(e.map(e=>[e.key,e])),o=new Map(n.map(e=>[e.key,e])),s=[];for(let e of t){let[t,n]=[a.get(e.key),o.get(e.key)],c=[...r,s.length];t?n?s.push(W(t,e,n,c,i)):k(e,t)?i.updated(c):(i.conflict(c,e,void 0),s.push(e)):s.push(e)}let c=new Set(t.map(e=>e.key)),l=s.length;for(let e of n){if(c.has(e.key))continue;let t=a.get(e.key);t?k(e,t)||i.conflict([...r,l++],void 0,e):(i.updated([...r,s.length]),s.push(e),l+=1)}return s}if(k(e,t))return i.updated(r),n;if(H(e)&&H(t)&&H(n)){let a=e.filter(e=>!n.includes(e)),o=n.filter(n=>!e.includes(n)&&!t.includes(n));return i.updated(r),[...t.filter(e=>!a.includes(e)),...o]}return i.conflict(r,t,n),t}function G(e){let t=new Set(e.agents.map(e=>e.key)),n=e.toolSpecs.filter(e=>e.toolType!==`agent`||t.has(e.agentKey??``)),r=new Set(n.map(e=>e.key)),i=e.agents.map(e=>{let n=e.tools.allow.filter(e=>r.has(e)),i=e.modelBindings.map(e=>e.compactWith&&!t.has(e.compactWith)?{...e,compactWith:void 0}:e),a={...e,tools:{...e.tools,allow:n},modelBindings:i};return k(a,e)?e:a}),a=C({...e,agents:i,toolSpecs:n}),o=i[0];return{...a,selected:g(a,a.selected)||!o?a.selected:p(o.key),chatWith:t.has(a.chatWith)||!o?a.chatWith:o.key}}function fe(e,t,n){let r=V(B(N(t,e),e),e.starts),i=[],a=[],o=(e,t,n,r,o,s,c,l)=>{let u=new Map(s.map(e=>[t(e),e])),d=new Set(r.map(e=>t(e))),f=new Set(r.map(e=>n(o[t(e)]??e))),p=new Set(l?.map(n)),m=[],h={...c};for(let s of r){let[r,c]=[o[t(s)],u.get(t(s))],l={kind:e,key:t(s),name:n(c??r??s)};!r||!c&&!p.has(n(r))?(m.push(s),h[t(s)]=r??s):c?m.push(W(r,s,c,[],{updated:e=>i.push({...l,path:e}),conflict:(e,t,n)=>a.push({...l,path:e,mine:t,theirs:n})})):k(s,r)?i.push({...l,path:[]}):(a.push({...l,path:[],mine:s,theirs:void 0}),m.push(s),h[t(s)]=r)}let g=e=>{let r=o[t(e)]??l?.find(t=>n(t)===n(e)&&!f.has(n(t)));if(r)return R(r)===R(e)?`unchanged`:`changed`};for(let r of s){if(d.has(t(r)))continue;let o={kind:e,key:t(r),name:n(r),path:[]},s=g(r);s===`changed`?a.push({...o,mine:void 0,theirs:r}):s===void 0&&(m.push(r),i.push(o))}return{held:m,starts:h}},s=o(`agent`,x,e=>e.identity.agentId,e.agents,e.starts.agents,r.agents,r.starts.agents,n?.agents),c=o(`tool`,x,e=>e.toolName,e.toolSpecs,e.starts.tools,r.toolSpecs,r.starts.tools,n?.toolSpecs),l=o(`provider`,S,S,e.providers,e.starts.providers,r.providers,r.starts.providers,n?.providers);return{workspace:G({...e,agents:s.held,toolSpecs:c.held,providers:l.held,starts:{agents:s.starts,tools:c.starts,providers:l.starts}}),updated:i,conflicts:a,files:r}}var K=Object.freeze({gone:!0});function q(e){if(Array.isArray(e))return e.filter(e=>e!==K).map(q);if(!A(e))return e;let t=Object.entries(e).map(([e,t])=>[e,q(t)]);return Object.fromEntries(t)}function J(e,t,n){let[r,...i]=t;if(r===void 0)return n;if(Array.isArray(e))return typeof r==`number`&&r>=e.length?n===void 0?e:[...e,n]:e.map((e,t)=>t===r?i.length===0&&n===void 0?K:J(e,i,n):e);let a={...A(e)?e:{}},o=J(a[r],i,n);return o===void 0?delete a[r]:a[r]=o,a}function pe(e,t){let{agents:n,toolSpecs:r,providers:i}=e.workspace,a={agents:{...e.workspace.starts.agents},tools:{...e.workspace.starts.tools},providers:{...e.workspace.starts.providers}},o=(e,t,n,r)=>r.path.length>0?t.map(t=>e(t)===r.key?J(t,r.path,r.theirs):t):r.theirs===void 0?(delete n[r.key],t.filter(t=>e(t)!==r.key)):(n[r.key]=r.theirs,[...t,r.theirs]);for(let s of new Set(t)){let t=e.conflicts[s];if(t){if(t.kind===`tool`)r=o(x,r,a.tools,t);else if(t.kind===`provider`)i=o(S,i,a.providers,t);else{if(n=o(x,n,a.agents,t),t.path.length>0||t.theirs===void 0)continue;let i=new Set(r.map(e=>e.key)),s=e.files.toolSpecs.filter(e=>e.toolType===`agent`&&e.agentKey===t.key&&!i.has(e.key));for(let e of s)a.tools[e.key]=e;r=[...r,...s],n=n.map(t=>{let n=e.files.agents.find(e=>e.key===t.key)?.tools.allow??[],r=s.map(e=>e.key).filter(e=>n.includes(e)&&!t.tools.allow.includes(e));return r.length?{...t,tools:{...t.tools,allow:[...t.tools.allow,...r]}}:t})}}}return[n,r]=[q(n),q(r)],G({...e.workspace,agents:n,toolSpecs:r,providers:i,starts:a})}function Y(e,t){let n=e.starts.tools[t],r=e.toolSpecs.find(e=>e.key===t);if(!n||!r)return e;let i=e.toolSpecs.filter(e=>e.key!==t).map(e=>e.toolName),a={...n,toolName:l(n.toolName,i,e=>`${n.toolName}_${e}`)};return k(a,r)?e:{...e,toolSpecs:e.toolSpecs.map(e=>e.key===t?a:e)}}function X(e,t){let n=e.providers.find(e=>e.id===t.id);return!n||k(n,t)?e:{...e,providers:e.providers.map(e=>e.id===t.id?t:e)}}function Z(e,t){let n=e.agents.map(e=>w(e).filter(e=>e===t).length);return{models:n.reduce((e,t)=>e+t,0),agents:n.filter(e=>e>0).length}}function me(e,t,n,r,i){let a=e=>e.provider===r&&e.apiId.trim()===i.trim();return{models:(e.agents.find(e=>e.key===t)?.modelBindings??[]).filter(e=>e.key!==n&&a(e)).map(e=>e.modelId.trim()||`new`),agents:e.agents.filter(e=>e.key!==t&&e.modelBindings.some(a)).map(e=>e.identity.agentId.trim()||`New agent`)}}function he(e,t){return{id:l(`provider`,e,e=>`provider_${e}`),definition:t,connection:{}}}function ge(e,t){return e.providers.some(e=>e.id===t.id)?e:C({...e,providers:[...e.providers,t],selected:s(t.id)})}function _e(e,t){return!e.providers.some(e=>e.id===t)||Z(e,t).models>0?e:C({...e,providers:e.providers.filter(e=>e.id!==t),selected:e.selected===s(t)?p(e.agents[0]?.key??``):e.selected})}function Q(e,t,n){let r=n.trim();if(!e.providers.some(e=>e.id===t)||!r||e.providers.some(e=>e.id===r))return e;let{[t]:i,...a}=e.starts.providers,o=e=>e.provider===t;return{...e,providers:e.providers.map(e=>e.id===t?{...e,id:r}:e),agents:e.agents.map(e=>e.modelBindings.some(o)?{...e,modelBindings:e.modelBindings.map(e=>o(e)?{...e,provider:r}:e)}:e),selected:e.selected===s(t)?s(r):e.selected,starts:{...e.starts,providers:i?{...a,[r]:{...i,id:r}}:a}}}function ve(e){return e.providers.flatMap(t=>{let n=e.starts.providers[t.id];return n&&k(n,t)?[t.id]:[]})}function ye(e,t){let n=e.starts.providers[t];return n?X(e,n):e}function $(e,t){return{...t,id:p(e,t.id),children:t.children.map(t=>$(e,t))}}function be(e,t){let r=$(e.key,n(_(e,[],t)));return e.identity.agentId.trim()?r:{...r,label:`New agent`}}function xe(e){return{agents:e.agents.map(t=>be(t,e.providers)),tools:r(e.toolSpecs)}}export{pe as A,ue as C,ae as D,h as E,d as F,X as M,g as N,ce as O,xe as P,j as S,ye as T,ie as _,se as a,Q as b,F as c,fe as d,me as f,P as g,ve as h,p as i,D as j,T as k,E as l,Z as m,ge as n,re as o,he as p,ee as r,I as s,O as t,ne as u,oe as v,Y as w,N as x,_e as y};
package/page/index.html CHANGED
@@ -10,7 +10,7 @@
10
10
  href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%23000'/%3E%3Cg transform='translate(4 4)' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4.5 18.5c2 0 3-1.2 4.2-3.4l2.6-5c1-1.9 2.1-3.1 4.2-3.1'/%3E%3Cpath d='M5.5 8.2c1.6-.9 3.2-.4 3.8 1.6l2.3 6.6c.6 1.7 2.1 2.4 3.9 1.7'/%3E%3Ccircle cx='19.5' cy='4.5' r='1.6' fill='%23fff' stroke='none'/%3E%3C/g%3E%3C/svg%3E"
11
11
  />
12
12
  <title>theorem studio</title>
13
- <script type="module" crossorigin src="/studio/assets/index-D3Myde0v.js"></script>
13
+ <script type="module" crossorigin src="/studio/assets/index-CvrD0wqP.js"></script>
14
14
  <link rel="modulepreload" crossorigin href="/studio/assets/rolldown-runtime-hePW80VL.js">
15
15
  <link rel="modulepreload" crossorigin href="/studio/assets/themeProps-3IqahpCr.js">
16
16
  <link rel="modulepreload" crossorigin href="/studio/assets/tokens.stylex-DkHf0P9C.js">
@@ -43,23 +43,23 @@
43
43
  <link rel="modulepreload" crossorigin href="/studio/assets/use-trace-records-BkAYJz0M.js">
44
44
  <link rel="modulepreload" crossorigin href="/studio/assets/IconAlertTriangle-BqAEqqdU.js">
45
45
  <link rel="modulepreload" crossorigin href="/studio/assets/labels-provider-BSiD6Lrb.js">
46
- <link rel="modulepreload" crossorigin href="/studio/assets/Banner-DqFqeJx4.js">
46
+ <link rel="modulepreload" crossorigin href="/studio/assets/Banner-QCiHVb5K.js">
47
47
  <link rel="modulepreload" crossorigin href="/studio/assets/arrive-DvbqpeRS.js">
48
48
  <link rel="modulepreload" crossorigin href="/studio/assets/Center-nHS1JSux.js">
49
49
  <link rel="modulepreload" crossorigin href="/studio/assets/IconSearch-BTx66a40.js">
50
50
  <link rel="modulepreload" crossorigin href="/studio/assets/schemas-BQ9Jydzb.js">
51
51
  <link rel="modulepreload" crossorigin href="/studio/assets/host-patterns-C9RMP16Q.js">
52
52
  <link rel="modulepreload" crossorigin href="/studio/assets/shaped-data-0GUF7Al3.js">
53
- <link rel="modulepreload" crossorigin href="/studio/assets/tool-schema-BlUbzOu9.js">
53
+ <link rel="modulepreload" crossorigin href="/studio/assets/tool-schema-E9NPuDcN.js">
54
54
  <link rel="modulepreload" crossorigin href="/studio/assets/live-ingress-lDUGPwth.js">
55
55
  <link rel="modulepreload" crossorigin href="/studio/assets/trace-schema-9CdEyG6Q.js">
56
- <link rel="modulepreload" crossorigin href="/studio/assets/stub-Bf9DC2iQ.js">
57
- <link rel="modulepreload" crossorigin href="/studio/assets/reader-CVFKFctz.js">
58
- <link rel="modulepreload" crossorigin href="/studio/assets/tree-6F02tTxC.js">
59
- <link rel="modulepreload" crossorigin href="/studio/assets/types-DN_oZAOJ.js">
56
+ <link rel="modulepreload" crossorigin href="/studio/assets/stub-DyzmGexy.js">
57
+ <link rel="modulepreload" crossorigin href="/studio/assets/reader-BB7aL5yX.js">
58
+ <link rel="modulepreload" crossorigin href="/studio/assets/tree-2VeaKg0m.js">
59
+ <link rel="modulepreload" crossorigin href="/studio/assets/types-CMdljBjd.js">
60
60
  <link rel="modulepreload" crossorigin href="/studio/assets/useScrollLock-Dyf6PHJt.js">
61
61
  <link rel="modulepreload" crossorigin href="/studio/assets/useContainerReveal-BFy8N_QU.js">
62
- <link rel="modulepreload" crossorigin href="/studio/assets/browser-transport-CYmonEpj.js">
62
+ <link rel="modulepreload" crossorigin href="/studio/assets/browser-transport-B0zaH_Aw.js">
63
63
  <link rel="modulepreload" crossorigin href="/studio/assets/focusReturn-CTppP2k0.js">
64
64
  <link rel="modulepreload" crossorigin href="/studio/assets/chainEventHandlers-C6ttXGfW.js">
65
65
  <link rel="modulepreload" crossorigin href="/studio/assets/Dialog-BDUExlk_.js">
@@ -67,18 +67,18 @@
67
67
  <link rel="modulepreload" crossorigin href="/studio/assets/CheckboxInput-C9kbVyhK.js">
68
68
  <link rel="modulepreload" crossorigin href="/studio/assets/IconEye-BB5aY-wQ.js">
69
69
  <link rel="modulepreload" crossorigin href="/studio/assets/encode-files-DZ4tVtEQ.js">
70
- <link rel="modulepreload" crossorigin href="/studio/assets/turn-client-4GHmGV_4.js">
70
+ <link rel="modulepreload" crossorigin href="/studio/assets/turn-client-Dy9-U9_L.js">
71
71
  <link rel="modulepreload" crossorigin href="/studio/assets/CollapsibleGroup-PavPZ114.js">
72
- <link rel="modulepreload" crossorigin href="/studio/assets/studio-labels-W7ubfnI9.js">
72
+ <link rel="modulepreload" crossorigin href="/studio/assets/studio-labels-DEEMSKuk.js">
73
73
  <link rel="modulepreload" crossorigin href="/studio/assets/crypto-Boxudvjl.js">
74
- <link rel="modulepreload" crossorigin href="/studio/assets/workspace-MlrGUH2-.js">
74
+ <link rel="modulepreload" crossorigin href="/studio/assets/workspace-Cno6Ge26.js">
75
75
  <link rel="modulepreload" crossorigin href="/studio/assets/lent-keys-C32ems-I.js">
76
76
  <link rel="modulepreload" crossorigin href="/studio/assets/editors-BJX_S59A.js">
77
77
  <link rel="modulepreload" crossorigin href="/studio/assets/studio-session-yEqFQo5o.js">
78
78
  <link rel="modulepreload" crossorigin href="/studio/assets/EmptyState-C8W4JKBZ.js">
79
79
  <link rel="modulepreload" crossorigin href="/studio/assets/use-second-ticker-VX91zrxj.js">
80
80
  <link rel="modulepreload" crossorigin href="/studio/assets/useAdaptivePresentation-BY_zvjIp.js">
81
- <link rel="modulepreload" crossorigin href="/studio/assets/ContextMenu-DX9Xmroi.js">
81
+ <link rel="modulepreload" crossorigin href="/studio/assets/ContextMenu-DIzJdlQ5.js">
82
82
  <link rel="modulepreload" crossorigin href="/studio/assets/BottomSheet-BQPskY35.js">
83
83
  <link rel="modulepreload" crossorigin href="/studio/assets/Section-DJ97F7QE.js">
84
84
  <link rel="stylesheet" crossorigin href="/studio/assets/use-second-ticker-CnxaP3LD.css">
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @module
6
6
  */
7
- import { buildHttpToolTarget, credentialPlacement, errorKind, fetchGuarded, isUnsupportedMcpProtocolError, MCP_PROTOCOL_VERSIONS, parseMcpRpcResponse, TheoremError, withCredentialQuery, z, } from '@theoremjs/agents';
7
+ import { buildHttpToolTarget, credentialPlacement, errorKind, fetchGuarded, isUnsupportedMcpProtocolError, MCP_PROTOCOL_VERSIONS, mcpRequestMeta, parseMcpRpcResponse, TheoremError, withCredentialQuery, z, } from '@theoremjs/agents';
8
8
  import { caughtStatus, clientError } from '@theoremjs/agents/host';
9
9
  import { readBody } from '@theoremjs/web/server';
10
10
  /** A draft's network guardrail, as the screen sends it beside the test. */
@@ -205,9 +205,7 @@ function mcpToolsListRequest(baseHeaders, protocolVersion) {
205
205
  id: 'test-ping-1',
206
206
  method: 'tools/list',
207
207
  params: {
208
- _meta: {
209
- 'io.modelcontextprotocol/protocolVersion': protocolVersion,
210
- },
208
+ _meta: mcpRequestMeta(protocolVersion),
211
209
  },
212
210
  };
213
211
  return {
package/ui/boot-mark.d.ts CHANGED
@@ -1,10 +1,18 @@
1
1
  import type { Reading } from './lib/read-progress.ts';
2
2
  import { type ShellShape } from './shell-motion.ts';
3
+ /**
4
+ * Holds the mark until `work` settles: a piece of the screen the page opens on, so it is there when
5
+ * the mark gives way. Once the mark has given way, it does nothing.
6
+ */
7
+ export declare function holdBoot(work: Promise<unknown>): void;
8
+ /**
9
+ * Holds the mark from the first commit until `isShown`, or for `HOLD_CAP_MS` at most, when `holds`
10
+ * says this piece is on the screen the page opens on. `holds` is read once, at mount.
11
+ */
12
+ export declare function useBootHold(isShown: boolean, holds: () => boolean): void;
3
13
  export interface BootMarkProps {
4
14
  /** The shape the shell rests in for the page on screen, read when the mark gives way. */
5
15
  shape: () => ShellShape;
6
- /** Settles when the page under the mark is on screen. Left out, the page is ready with its fonts. */
7
- ready?: Promise<unknown>;
8
16
  /**
9
17
  * A project being read for the page. With it, the drawn mark gives way, the panel pulls in
10
18
  * beside the rail and the read is drawn there as a map. When the map has drawn all of it, the
package/ui/boot-mark.js CHANGED
@@ -6,6 +6,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
6
6
  * as it does.
7
7
  */
8
8
  import { useEffect, useRef, useState } from 'react';
9
+ import { bootHolds, HOLD_CAP_MS } from "./lib/boot-hold.js";
9
10
  import { runBoot } from "./lib/boot-sequence.js";
10
11
  import { ReadMap } from "./read-map.js";
11
12
  import { bootHasPlayed, HOLD_MS as FADE_MS, prefersReducedMotion, pullShellIn, revealShell, sleep, } from "./shell-motion.js";
@@ -50,6 +51,44 @@ function penHasStarted(root) {
50
51
  const delay = pen?.effect?.getTiming().delay ?? 0;
51
52
  return Number(pen?.currentTime ?? 0) > delay;
52
53
  }
54
+ /** Resolves after the page's first commit: its effects, where its screens hold the mark, have run. */
55
+ function pageCommitted() {
56
+ return new Promise((resolve) => {
57
+ requestAnimationFrame(() => {
58
+ globalThis.setTimeout(resolve, 0);
59
+ });
60
+ });
61
+ }
62
+ /**
63
+ * Holds the mark until `work` settles: a piece of the screen the page opens on, so it is there when
64
+ * the mark gives way. Once the mark has given way, it does nothing.
65
+ */
66
+ export function holdBoot(work) {
67
+ bootHolds.hold(work);
68
+ }
69
+ /**
70
+ * Holds the mark from the first commit until `isShown`, or for `HOLD_CAP_MS` at most, when `holds`
71
+ * says this piece is on the screen the page opens on. `holds` is read once, at mount.
72
+ */
73
+ export function useBootHold(isShown, holds) {
74
+ const release = useRef(undefined);
75
+ const decide = useRef(holds);
76
+ useEffect(() => {
77
+ if (bootHasPlayed() || !decide.current())
78
+ return;
79
+ const done = bootHolds.holdUntil();
80
+ const cap = globalThis.setTimeout(done, HOLD_CAP_MS);
81
+ release.current = done;
82
+ return () => {
83
+ globalThis.clearTimeout(cap);
84
+ done();
85
+ };
86
+ }, []);
87
+ useEffect(() => {
88
+ if (isShown)
89
+ release.current?.();
90
+ }, [isShown]);
91
+ }
53
92
  /** Resolves when the fonts are ready, or after the cap. */
54
93
  function fontsSettled() {
55
94
  return Promise.race([document.fonts.ready.then(() => undefined), sleep(FONT_CAP_MS)]);
@@ -58,12 +97,12 @@ function fontsSettled() {
58
97
  * The mark draws in the shell only when the page is still loading. When the dot lands, or at once
59
98
  * when the page was ready first, that same panel pulls in over the page.
60
99
  */
61
- function useBootPhase({ shape, ready, reading }) {
100
+ function useBootPhase({ shape, reading }) {
62
101
  const [phase, setPhase] = useState(() => (bootHasPlayed() ? 'done' : 'draw'));
63
102
  const mapDrawn = useRef(() => { });
64
103
  const rootRef = useRef(null);
65
- const latest = useRef({ shape, ready, reading });
66
- latest.current = { shape, ready, reading };
104
+ const latest = useRef({ shape, reading });
105
+ latest.current = { shape, reading };
67
106
  useEffect(() => {
68
107
  const root = rootRef.current;
69
108
  if (!root || bootHasPlayed())
@@ -73,11 +112,8 @@ function useBootPhase({ shape, ready, reading }) {
73
112
  reads: !reduced && Boolean(latest.current.reading),
74
113
  reduced,
75
114
  fadeMs: FADE_MS,
76
- // A page that failed to load is still a page to show.
77
- settled: Promise.all([
78
- fontsSettled(),
79
- Promise.resolve(latest.current.ready).catch(() => undefined),
80
- ]),
115
+ // The page is there with its fonts and everything its opening screen holds the mark for.
116
+ settled: Promise.all([fontsSettled(), bootHolds.settled(pageCommitted())]),
81
117
  mapDrawn: new Promise((resolve) => {
82
118
  mapDrawn.current = resolve;
83
119
  }),
package/ui/brand-icons.js CHANGED
@@ -137,10 +137,28 @@ const FAMILY_MARK = {
137
137
  microsoft: IconMicrosoft,
138
138
  openrouter: IconOpenRouter,
139
139
  };
140
+ /**
141
+ * The vendor of a model id a provider serves under its own name, with no vendor before it
142
+ * (`gemini-3.1-flash-lite` on Gemini's API), by the name it starts with.
143
+ */
144
+ const BARE_FAMILY = {
145
+ gemini: 'google',
146
+ gemma: 'google',
147
+ claude: 'anthropic',
148
+ gpt: 'openai',
149
+ mistral: 'mistralai',
150
+ llama: 'meta',
151
+ qwen: 'qwen',
152
+ deepseek: 'deepseek',
153
+ grok: 'x-ai',
154
+ };
140
155
  /** The family's mark for a model id, or undefined when the family has no mark. */
141
156
  export function modelFamilyMark(modelId) {
142
- const vendor = modelId.split('/')[0]?.replace(/^~/, '') ?? '';
143
- return Object.hasOwn(FAMILY_MARK, vendor) ? FAMILY_MARK[vendor] : undefined;
157
+ const id = modelId.trim().replace(/^~/, '').toLowerCase();
158
+ const slash = id.indexOf('/');
159
+ const bare = id.split(/[-.:\d]/, 1)[0] ?? '';
160
+ const vendor = slash >= 0 ? id.slice(0, slash) : Object.hasOwn(BARE_FAMILY, bare) ? BARE_FAMILY[bare] : '';
161
+ return vendor && Object.hasOwn(FAMILY_MARK, vendor) ? FAMILY_MARK[vendor] : undefined;
144
162
  }
145
163
  /** TypeSafe mark, from its vector logo, centred in a square. */
146
164
  export function IconTypeSafe(props) {
@@ -0,0 +1,21 @@
1
+ /**
2
+ * What the page under the loading mark is still bringing in. A piece of the screen the page opens on
3
+ * holds the mark until it is on screen, and the mark gives way once every hold has settled. Once
4
+ * they have, a new hold does nothing: the page is already shown.
5
+ */
6
+ /** The longest a piece of a screen holds the mark. A hung piece must not keep the page from showing. */
7
+ export declare const HOLD_CAP_MS = 6000;
8
+ export interface BootHolds {
9
+ /** Holds the mark until `work` settles. A failed piece still lets the page show. */
10
+ hold(work: Promise<unknown>): void;
11
+ /** Holds the mark until the returned function is called. */
12
+ holdUntil(): () => void;
13
+ /**
14
+ * Settles once the page's holds have. It waits for `gathered` first, so the page has had its
15
+ * turn to hold; a hold made while it waits is waited on too.
16
+ */
17
+ settled(gathered: Promise<unknown>): Promise<void>;
18
+ }
19
+ export declare function createBootHolds(): BootHolds;
20
+ /** The page's holds: the website's screens and the studio's page both hold the one mark. */
21
+ export declare const bootHolds: BootHolds;
@@ -0,0 +1,38 @@
1
+ /**
2
+ * What the page under the loading mark is still bringing in. A piece of the screen the page opens on
3
+ * holds the mark until it is on screen, and the mark gives way once every hold has settled. Once
4
+ * they have, a new hold does nothing: the page is already shown.
5
+ */
6
+ /** The longest a piece of a screen holds the mark. A hung piece must not keep the page from showing. */
7
+ export const HOLD_CAP_MS = 6000;
8
+ export function createBootHolds() {
9
+ const holds = [];
10
+ let open = true;
11
+ const hold = (work) => {
12
+ if (!open)
13
+ return;
14
+ holds.push(work.then(() => undefined, () => undefined));
15
+ };
16
+ return {
17
+ hold,
18
+ holdUntil() {
19
+ let release = () => { };
20
+ hold(new Promise((resolve) => {
21
+ release = resolve;
22
+ }));
23
+ return () => release();
24
+ },
25
+ async settled(gathered) {
26
+ await gathered;
27
+ let seen = -1;
28
+ while (holds.length > seen) {
29
+ seen = holds.length;
30
+ await Promise.all(holds);
31
+ }
32
+ open = false;
33
+ holds.length = 0;
34
+ },
35
+ };
36
+ }
37
+ /** The page's holds: the website's screens and the studio's page both hold the one mark. */
38
+ export const bootHolds = createBootHolds();
@@ -5,6 +5,8 @@
5
5
  */
6
6
  import type { IconType } from '@astryxdesign/core/Icon';
7
7
  import { IconMcp } from '../mcp-icon.tsx';
8
+ /** An agent's icon, wherever one shows: the workspace's Agents list, an agent tool, a profile file. */
9
+ export declare const AGENT_ICON: IconType;
8
10
  /** Each profile type's icon: the Type control's segments and the tree's Identity row. */
9
11
  export declare const PROFILE_TYPE_ICON: {
10
12
  text: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
@@ -22,7 +24,7 @@ export declare const TOOL_TYPE_ICON: {
22
24
  function: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
23
25
  http: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
24
26
  mcp: typeof IconMcp;
25
- agent: import("react").ForwardRefExoticComponent<import("@tabler/icons-react").IconProps & import("react").RefAttributes<SVGSVGElement>>;
27
+ agent: import("react").FunctionComponent<import("react").SVGProps<SVGSVGElement>>;
26
28
  };
27
29
  /** Each decision question type's icon: the Answer control's segments and the question list. */
28
30
  export declare const QUESTION_TYPE_ICON: {
@@ -1,5 +1,7 @@
1
- import { IconChartBar, IconChartScatter3d, IconGavel, IconHeadset, IconLetterT, IconListCheck, IconMathFunction, IconMessageForward, IconNumber, IconPhoto, IconServer, IconSquareDashed, IconTool, IconVolume, IconWorld, } from '@tabler/icons-react';
1
+ import { IconChartBar, IconChartScatter3d, IconFileSmile, IconGavel, IconHeadset, IconLetterT, IconListCheck, IconMathFunction, IconNumber, IconPhoto, IconServer, IconSquareDashed, IconTool, IconVolume, IconWorld, } from '@tabler/icons-react';
2
2
  import { IconMcp } from "../mcp-icon.js";
3
+ /** An agent's icon, wherever one shows: the workspace's Agents list, an agent tool, a profile file. */
4
+ export const AGENT_ICON = IconFileSmile;
3
5
  /** Each profile type's icon: the Type control's segments and the tree's Identity row. */
4
6
  export const PROFILE_TYPE_ICON = {
5
7
  text: IconLetterT,
@@ -21,7 +23,7 @@ export const TOOL_TYPE_ICON = {
21
23
  function: IconMathFunction,
22
24
  http: IconWorld,
23
25
  mcp: IconMcp,
24
- agent: IconMessageForward,
26
+ agent: AGENT_ICON,
25
27
  };
26
28
  /** Each decision question type's icon: the Answer control's segments and the question list. */
27
29
  export const QUESTION_TYPE_ICON = {
@@ -0,0 +1,4 @@
1
+ import type { IconType } from '@astryxdesign/core/Icon';
2
+ import type { StudioDraft, StudioNodeRef } from '../mod.ts';
3
+ /** A node's icon; Identity shows the profile type's once one is picked. */
4
+ export declare function nodeIcon(draft: StudioDraft, ref: StudioNodeRef): IconType;
@@ -0,0 +1,23 @@
1
+ import { IconTool } from '@tabler/icons-react';
2
+ import { IconTypeSafe, modelFamilyMark } from "./brand-icons.js";
3
+ import { FACET_ICON } from "./lib/facet-icons.js";
4
+ import { PROFILE_TYPE_ICON, toolTypeIcon } from "./lib/type-icons.js";
5
+ /** A node's icon; Identity shows the profile type's once one is picked. */
6
+ export function nodeIcon(draft, ref) {
7
+ const type = draft.identity.profileType;
8
+ if (ref.facet === 'identity' && type)
9
+ return PROFILE_TYPE_ICON[type];
10
+ if (ref.facet === 'modelBinding') {
11
+ const binding = draft.modelBindings.find((each) => each.key === ref.key);
12
+ if (!binding)
13
+ return FACET_ICON.modelBinding;
14
+ const definition = draft.providers.find((each) => each.id === binding.provider)?.definition;
15
+ if (definition === 'typesafe')
16
+ return IconTypeSafe;
17
+ return modelFamilyMark(binding.apiId) ?? FACET_ICON.modelBinding;
18
+ }
19
+ if (ref.facet !== 'toolSpec')
20
+ return FACET_ICON[ref.facet];
21
+ const tool = draft.toolSpecs.find((spec) => spec.key === ref.key);
22
+ return tool ? toolTypeIcon(tool.toolType) : IconTool;
23
+ }
@@ -1,5 +1,6 @@
1
1
  import { type Dispatch, type SetStateAction } from 'react';
2
2
  import { type StudioDraft, type StudioIssue } from '../mod.ts';
3
+ import { type ProbeResult } from './lib/tool-probe.ts';
3
4
  export type SetDraft = Dispatch<SetStateAction<StudioDraft>>;
4
5
  /** A key slot, chosen from the slots the keys panel holds; each says which service its key is for. */
5
6
  export declare function SlotRow({ label, path, field, value, isRequired, given, onChange, }: {
@@ -14,6 +15,8 @@ export declare function SlotRow({ label, path, field, value, isRequired, given,
14
15
  }): import("react").JSX.Element;
15
16
  /** Adds a new tool to the draft and opens it. */
16
17
  export declare function addToolSpec(draft: StudioDraft, setDraft: SetDraft, onSelect: (id: string) => void): void;
18
+ /** A test already run, which a still preview of the editor shows done. */
19
+ export declare const ShownProbe: import("react").Context<ProbeResult | undefined>;
17
20
  /** A node's issues that name no field of it, over its rows. */
18
21
  export declare function IssueBanners({ issues }: {
19
22
  issues: readonly StudioIssue[];