agenttwin 0.3.13 → 0.3.14

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 (34) hide show
  1. package/dist/api.js +11 -1
  2. package/dist/cli.js +113 -18
  3. package/dist/dashboard/assets/next/static/chunks/app/account/password/{page-aaee6711085b485d.js → page-ebb8ab25df1b808e.js} +1 -1
  4. package/dist/dashboard/assets/next/static/chunks/app/dashboard/{layout-09cb13657f62384f.js → layout-f7cd10740b90145d.js} +1 -1
  5. package/dist/dashboard/assets/next/static/chunks/app/dashboard/{page-945c916b24f48675.js → page-a5ad912a1f481008.js} +1 -1
  6. package/dist/dashboard/assets/next/static/chunks/app/demo/{page-3cba0aab460c8677.js → page-5495d9cb9a3e1431.js} +1 -1
  7. package/dist/dashboard/assets/next/static/chunks/app/docs/[[...slug]]/{page-9f7b8dca8b973b15.js → page-9130f219b4b02112.js} +1 -1
  8. package/dist/dashboard/assets/next/static/chunks/app/enterprise/{page-4986698442bddc6b.js → page-b7e323d45eaf4952.js} +1 -1
  9. package/dist/dashboard/assets/next/static/chunks/app/{layout-09868e53e4f0541f.js → layout-ed5b209cd1b17365.js} +1 -1
  10. package/dist/dashboard/assets/next/static/chunks/app/login/page-3887863343ffce8c.js +1 -0
  11. package/dist/dashboard/assets/next/static/chunks/app/onboarding/{page-af2c4768dc34ec92.js → page-35795509a58cbc9c.js} +1 -1
  12. package/dist/dashboard/assets/next/static/chunks/app/{page-507229409812cedd.js → page-4d150b91a7a1abcc.js} +1 -1
  13. package/dist/dashboard/assets/next/static/chunks/app/pricing/page-388c0afb0ac51384.js +1 -0
  14. package/dist/dashboard/assets/next/static/chunks/app/signup/page-3887863343ffce8c.js +1 -0
  15. package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/{layout-77a57cd622171076.js → layout-1430f20bea23253f.js} +1 -1
  16. package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/page-12a8d96f5c18b411.js +1 -0
  17. package/dist/dashboard/assets/next/static/chunks/app/v2/layout-fb241571c2a60362.js +1 -0
  18. package/dist/dashboard/assets/next/static/chunks/app/v2/login/page-7ac4be578a219d6e.js +1 -0
  19. package/dist/dashboard/assets/next/static/chunks/app/v2/onboarding/{page-abfe2f36213848d7.js → page-16d9efad4103fb58.js} +1 -1
  20. package/dist/dashboard/assets/next/static/chunks/app/v2/{page-df6a34eff716d18e.js → page-1d465878abb57f0f.js} +1 -1
  21. package/dist/dashboard/assets/next/static/chunks/app/v2/signup/page-7ac4be578a219d6e.js +1 -0
  22. package/dist/dashboard/assets/next/static/chunks/{webpack-44457f45df749a89.js → webpack-9ed8651d8c2c40a2.js} +1 -1
  23. package/dist/dashboard/index.html +2 -2
  24. package/dist/gateway.js +11 -1
  25. package/package.json +1 -1
  26. package/dist/dashboard/assets/next/static/chunks/app/login/page-2e29d4b17645c34c.js +0 -1
  27. package/dist/dashboard/assets/next/static/chunks/app/pricing/page-c27282cd7bfb0fcf.js +0 -1
  28. package/dist/dashboard/assets/next/static/chunks/app/signup/page-2e29d4b17645c34c.js +0 -1
  29. package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/page-df34bcef0394d10d.js +0 -1
  30. package/dist/dashboard/assets/next/static/chunks/app/v2/layout-d1d715b5b2dae3cd.js +0 -1
  31. package/dist/dashboard/assets/next/static/chunks/app/v2/login/page-4f60d050bf954194.js +0 -1
  32. package/dist/dashboard/assets/next/static/chunks/app/v2/signup/page-4f60d050bf954194.js +0 -1
  33. /package/dist/dashboard/assets/next/static/{BbTZs0rKnsmj45peSnlwJ → O8JeB5KAl7-h1hCNIyUY7}/_buildManifest.js +0 -0
  34. /package/dist/dashboard/assets/next/static/{BbTZs0rKnsmj45peSnlwJ → O8JeB5KAl7-h1hCNIyUY7}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9352],{3277:()=>{},9022:(e,n,a)=>{Promise.resolve().then(a.bind(a,9525)),Promise.resolve().then(a.t.bind(a,3277,23))},9525:(e,n,a)=>{"use strict";a.d(n,{default:()=>l});var s=a(1778),r=a(5226);let i=[{href:"/#worlds",label:"Worlds"},{href:"/#how",label:"How it works"},{href:"/#failures",label:"Failures"},{href:"/#pricing",label:"Pricing"},{href:"/enterprise/",label:"Enterprise"},{href:"/docs/",label:"Docs"}];function l(){let[e,n]=(0,r.useState)(!1),a=(0,r.useRef)(null),l=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{var s,r;"Escape"===e.key&&(null==(s=l.current)?void 0:s.querySelector("#navlinks.is-open"))&&(n(!1),null==(r=a.current)||r.focus())},s=e=>{var a;(null==(a=l.current)?void 0:a.contains(e.target))||n(!1)},r=matchMedia("(min-width: 1024px)"),i=()=>n(!1);return document.addEventListener("keydown",e),document.addEventListener("click",s),r.addEventListener("change",i),()=>{document.removeEventListener("keydown",e),document.removeEventListener("click",s),r.removeEventListener("change",i)}},[]),(0,s.jsxs)("header",{className:"site-header",ref:l,children:[(0,s.jsxs)("a",{className:"brand",href:"/","aria-label":"AgentTwin home",children:[(0,s.jsx)("img",{src:"assets/logo/mark-twin-rings.svg?v=white-rings",alt:"",width:29,height:29}),"AgentTwin"]}),(0,s.jsxs)("nav",{className:"main-nav".concat(e?" is-open":""),id:"navlinks","aria-label":"Main navigation",children:[i.map(e=>(0,s.jsx)("a",{href:e.href,onClick:()=>n(!1),children:e.label},e.href)),(0,s.jsx)("a",{className:"nav-mobile-dashboard",href:"/dashboard/",onClick:()=>n(!1),children:"Open dashboard"})]}),(0,s.jsxs)("div",{className:"nav-actions",children:[(0,s.jsx)("a",{href:"/login/",children:"Sign in"}),(0,s.jsxs)("a",{className:"button button-white button-small",href:"/signup/",children:["Get started ",(0,s.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]})]}),(0,s.jsxs)("button",{className:"menu-toggle",ref:a,type:"button","aria-label":e?"Close menu":"Open menu","aria-expanded":e,"aria-controls":"navlinks",onClick:()=>n(!e),children:[(0,s.jsx)("span",{}),(0,s.jsx)("span",{})]})]})}}},e=>{e.O(0,[9774,7903,4816,7358],()=>e(e.s=9022)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9352],{3277:()=>{},3374:(e,n,a)=>{Promise.resolve().then(a.bind(a,9525)),Promise.resolve().then(a.t.bind(a,3277,23))},9525:(e,n,a)=>{"use strict";a.d(n,{default:()=>l});var s=a(1778),r=a(5226);let i=[{href:"/#worlds",label:"Worlds"},{href:"/#how",label:"How it works"},{href:"/#failures",label:"Failures"},{href:"/#pricing",label:"Pricing"},{href:"/enterprise/",label:"Enterprise"},{href:"/docs/",label:"Docs"}];function l(){let[e,n]=(0,r.useState)(!1),a=(0,r.useRef)(null),l=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{var s,r;"Escape"===e.key&&(null==(s=l.current)?void 0:s.querySelector("#navlinks.is-open"))&&(n(!1),null==(r=a.current)||r.focus())},s=e=>{var a;(null==(a=l.current)?void 0:a.contains(e.target))||n(!1)},r=matchMedia("(min-width: 1024px)"),i=()=>n(!1);return document.addEventListener("keydown",e),document.addEventListener("click",s),r.addEventListener("change",i),()=>{document.removeEventListener("keydown",e),document.removeEventListener("click",s),r.removeEventListener("change",i)}},[]),(0,s.jsxs)("header",{className:"site-header",ref:l,children:[(0,s.jsxs)("a",{className:"brand",href:"/","aria-label":"AgentTwin home",children:[(0,s.jsx)("img",{src:"assets/logo/mark-twin-rings.svg?v=white-rings",alt:"",width:29,height:29}),"AgentTwin"]}),(0,s.jsxs)("nav",{className:"main-nav".concat(e?" is-open":""),id:"navlinks","aria-label":"Main navigation",children:[i.map(e=>(0,s.jsx)("a",{href:e.href,onClick:()=>n(!1),children:e.label},e.href)),(0,s.jsx)("a",{className:"nav-mobile-dashboard",href:"/dashboard/",onClick:()=>n(!1),children:"Open dashboard"})]}),(0,s.jsxs)("div",{className:"nav-actions",children:[(0,s.jsx)("a",{href:"/login/",children:"Sign in"}),(0,s.jsxs)("a",{className:"button button-white button-small",href:"/signup/",children:["Get started ",(0,s.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]})]}),(0,s.jsxs)("button",{className:"menu-toggle",ref:a,type:"button","aria-label":e?"Close menu":"Open menu","aria-expanded":e,"aria-controls":"navlinks",onClick:()=>n(!e),children:[(0,s.jsx)("span",{}),(0,s.jsx)("span",{})]})]})}}},e=>{e.O(0,[9774,7903,4816,7358],()=>e(e.s=3374)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{4522:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var s=n(5226),a=n(949);function i(){return(0,s.useEffect)(()=>{let e=a.env.NEXT_PUBLIC_POSTHOG_KEY;if(!e)return;let t=!1;return(async()=>{let{default:s}=await n.e(911).then(n.bind(n,2156));t||s.init(e,{api_host:a.env.NEXT_PUBLIC_POSTHOG_HOST||"https://analytics.agenttwin.si",capture_pageview:!0,autocapture:!0,persistence:"localStorage+cookie",disable_session_recording:!0,advanced_disable_toolbar_metrics:!0})})(),()=>{t=!0}},[]),null}},8854:()=>{},9961:(e,t,n)=>{Promise.resolve().then(n.bind(n,4522)),Promise.resolve().then(n.t.bind(n,8854,23))}},e=>{e.O(0,[3802,7903,4816,7358],()=>e(e.s=9961)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{4522:(e,t,n)=>{"use strict";n.d(t,{default:()=>i});var s=n(5226),a=n(949);function i(){return(0,s.useEffect)(()=>{let e=a.env.NEXT_PUBLIC_POSTHOG_KEY;if(!e)return;let t=!1;return(async()=>{let{default:s}=await n.e(911).then(n.bind(n,2156));t||s.init(e,{api_host:a.env.NEXT_PUBLIC_POSTHOG_HOST||"https://analytics.agenttwin.si",capture_pageview:!0,autocapture:!0,persistence:"localStorage+cookie",disable_session_recording:!0,advanced_disable_toolbar_metrics:!0})})(),()=>{t=!0}},[]),null}},7941:(e,t,n)=>{Promise.resolve().then(n.bind(n,4522)),Promise.resolve().then(n.t.bind(n,8854,23))},8854:()=>{}},e=>{e.O(0,[3802,7903,4816,7358],()=>e(e.s=7941)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[879,4520],{9334:(e,s,_)=>{Promise.resolve().then(_.bind(_,650))}},e=>{e.O(0,[1839,650,7903,4816,7358],()=>e(e.s=9334)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9566],{2652:(e,t,s)=>{"use strict";s.d(t,{default:()=>j});var n=s(1778),a=s(5226),r=s(650);function i(e){var t,s,n,a,r;return{company:null!=(t=null==e?void 0:e.company)?t:"",website:null!=(s=null==e?void 0:e.website)?s:"",role:null!=(n=null==e?void 0:e.role)?n:"",teamSize:null!=(a=null==e?void 0:e.teamSize)?a:"",useCase:null!=(r=null==e?void 0:e.useCase)?r:""}}s(3525),s(4640),s(6262);let o={company:"",website:"",role:"",teamSize:"",useCase:""},l="agenttwin:pending-terminal:v1",c="agenttwin:workspace-preferences:v1",d={morning:"bay-morning.png",afternoon:"golden-gate-afternoon.png",evening:"moonlit-coast.png"},u=["Your profile","Your workspace","Connect your application"],p={artwork:"afternoon",compact:!1,autoRefresh:!0,reduceMotion:!1};function h(){return(0,n.jsx)("span",{"aria-hidden":"true",children:"→"})}function m(){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:(0,n.jsx)("path",{d:"m4 8 2.5 2.5L12 5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})}function j(){var e;let[t,s]=(0,a.useState)(null),[j,x]=(0,a.useState)(""),[g,v]=(0,a.useState)(0),[y,w]=(0,a.useState)(0),[f,b]=(0,a.useState)(0),[k,C]=(0,a.useState)(p),[N,S]=(0,a.useState)(""),[A,T]=(0,a.useState)(""),[O,E]=(0,a.useState)(""),[L,F]=(0,a.useState)(o),[P,R]=(0,a.useState)(!1),I=(e,t)=>F(s=>({...s,[e]:t})),[W,z]=(0,a.useState)(""),[M,Y]=(0,a.useState)(!1),[J,D]=(0,a.useState)(!1),[U,_]=(0,a.useState)(!1),[B,q]=(0,a.useState)(""),[H,K]=(0,a.useState)(!1),[V,$]=(0,a.useState)(""),[G,Q]=(0,a.useState)([]),[X,Z]=(0,a.useState)(!1),[ee,et]=(0,a.useState)(""),[es,en]=(0,a.useState)(!1),ea=(0,a.useRef)(null),er="auto"===k.artwork?"afternoon":k.artwork;function ei(e){w(e),b(t=>Math.max(t,e)),S(""),requestAnimationFrame(()=>{var e;return null==(e=ea.current)?void 0:e.focus({preventScroll:!0})})}function eo(){try{let e={};try{let t=JSON.parse(localStorage.getItem(c)||"{}");t&&"object"==typeof t&&!Array.isArray(t)&&(e=t)}catch(e){}return localStorage.setItem(c,JSON.stringify({...e,...k,name:O.slice(0,40),userName:A.slice(0,60)})),en(!1),!0}catch(e){return en(!0),S("Browser storage is unavailable. Your preferences could not be saved."),!1}}async function el(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!t||P)return!1;R(!0),S("");try{let t=await fetch(r.n+"/v1/auth/profile",{method:"POST",credentials:"include",headers:{"content-type":"application/json"},body:JSON.stringify({name:A,workspace:O,...i(L),complete:e}),signal:AbortSignal.timeout(15e3)}),n=await t.json();if(!t.ok)throw Error(404===t.status?"Account setup is not available on this API yet. Please try again after the API is updated.":n.error||"Could not save your details. Try again.");return s(n.user),!0}catch(e){return S(e instanceof Error?e.message:"Could not save your details. Try again."),!1}finally{R(!1)}}async function ec(){!t||M||H||P||await el(!0)&&(eo(),location.assign(G.length?"/dashboard/#environment":"/dashboard/#home"))}async function ed(e){if(e.preventDefault(),!M&&!J&&t){Y(!0),q("");try{let e=await fetch(r.n+"/v1/auth/device/approve",{method:"POST",credentials:"include",headers:{"content-type":"application/json"},body:JSON.stringify({userCode:W.trim().toUpperCase()}),signal:AbortSignal.timeout(15e3)}),t=await e.json();if(!e.ok)throw Error(t.error||"Could not connect your terminal. Try again.");try{sessionStorage.removeItem(l)}catch(e){}D(!0),z(""),q("Terminal connected. Keep init running; it will sync your project automatically.")}catch(e){q(e instanceof Error?e.message:"Could not connect your terminal.")}finally{Y(!1)}}}async function eu(){if(!H&&t){K(!0),$("");try{let e=await fetch(r.n+"/v1/projects",{credentials:"include",signal:AbortSignal.timeout(15e3)});if(!e.ok)throw Error("Could not check your projects. Try again.");let t=await e.json();if(!Array.isArray(t.projects))throw Error("Could not load your projects. Try again.");Q(t.projects),Z(!0),$(t.projects.length?"Your project is in your workspace.":"Running init discovers files locally. Connect this terminal and keep init running until it confirms the project is synced.")}catch(e){$(e instanceof Error?e.message:"Could not check your projects.")}finally{K(!1)}}}async function ep(e){try{await navigator.clipboard.writeText(e),et(e),S("Command copied. Run it in your project’s terminal.")}catch(e){S("Select the command and copy it into your terminal.")}}return(0,a.useEffect)(()=>{let e=new URLSearchParams(location.hash.slice(1)).get("user_code"),t=null;try{e&&/^[A-F0-9]{10}$/.test(e)?(t={code:e,expires:Date.now()+6e5},sessionStorage.setItem(l,JSON.stringify(t))):t=JSON.parse(sessionStorage.getItem(l)||"null")}catch(s){e&&(t={code:e,expires:Date.now()+6e5})}if(t&&/^[A-F0-9]{10}$/.test(t.code||"")&&Number(t.expires)>Date.now())z(t.code),_(!0),w(2),b(2);else try{sessionStorage.removeItem(l)}catch(e){}e&&history.replaceState(null,"",location.pathname+location.search)},[]),(0,a.useEffect)(()=>{try{let e=JSON.parse(localStorage.getItem(c)||"null");e&&C({artwork:"afternoon",compact:!0===e.compact,autoRefresh:!1!==e.autoRefresh,reduceMotion:!0===e.reduceMotion})}catch(e){}},[]),(0,a.useEffect)(()=>{let e=new AbortController;return x(""),fetch(r.n+"/v1/auth/me",{credentials:"include",signal:AbortSignal.any([e.signal,AbortSignal.timeout(15e3)])}).then(async e=>{var t;if(401===e.status)return void location.replace("/login/?next=onboarding");if(!e.ok)throw Error();let n=(await e.json()).user;s(n),T(n.name),E(n.workspace),F(i(n.workspaceProfile)),(null==(t=n.workspaceProfile)?void 0:t.completedAt)&&(w(2),b(2))}).catch(()=>{e.signal.aborted||x("Your account could not be loaded. Try again to continue setup.")}),()=>e.abort()},[g]),(0,a.useEffect)(()=>{if(!t)return;let e=new AbortController,s=!1,n=async()=>{if("hidden"!==document.visibilityState&&!s){s=!0;try{let t=await fetch(r.n+"/v1/projects",{credentials:"include",signal:AbortSignal.any([e.signal,AbortSignal.timeout(1e4)])});if(!t.ok)return;let s=await t.json();!e.signal.aborted&&Array.isArray(s.projects)&&(Q(s.projects),Z(!0),s.projects.length&&$("Your project is in your workspace."))}catch(e){}finally{s=!1}}};n();let a=2===y?setInterval(()=>{n()},3e3):void 0;return document.addEventListener("visibilitychange",n),()=>{e.abort(),clearInterval(a),document.removeEventListener("visibilitychange",n)}},[y,null==t?void 0:t.email]),(0,n.jsxs)("main",{className:"onboarding-page onboarding-san-francisco".concat(k.reduceMotion?" onboarding-still":""),style:{"--setup-scene":"url('assets/dashboard/".concat(d[er],"')")},children:[(0,n.jsx)("div",{className:"onboarding-backdrop","aria-hidden":"true"}),(0,n.jsxs)("section",{className:"onboarding-shell","aria-labelledby":"onboarding-title",children:[(0,n.jsxs)("header",{className:"onboarding-header",children:[(0,n.jsxs)("a",{className:"auth-brand",href:"/","aria-label":"AgentTwin home",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg",width:"26",height:"26",alt:""}),"AgentTwin"]}),(0,n.jsxs)("a",{href:"/docs/workflow/",children:["Need a hand? ",(0,n.jsx)(h,{})]})]}),(0,n.jsxs)("div",{className:"onboarding-content".concat(0===y?" onboarding-welcome":""),children:[(0,n.jsxs)("div",{className:"onboarding-controls",children:[(0,n.jsxs)("div",{className:"onboarding-greeting",children:[(0,n.jsx)("p",{children:O||"Your workspace"}),(0,n.jsx)("h1",{id:"onboarding-title",children:t?"Welcome, ".concat(t.name.trim().split(/\s+/)[0],"."):"Set up your workspace."})]}),!t&&!j&&(0,n.jsx)("p",{className:"setup-help",role:"status",children:"Loading your account…"}),j&&(0,n.jsxs)("div",{className:"onboarding-account-error",role:"alert",children:[(0,n.jsx)("p",{children:j}),(0,n.jsx)("button",{type:"button",onClick:()=>v(e=>e+1),children:"Try again"})]}),(0,n.jsx)("ol",{className:"setup-steps","aria-label":"Workspace setup",children:u.map((e,s)=>{var a,r;return(0,n.jsxs)("li",{className:"setup-step".concat(y===s?" active":"").concat(s<f?" visited":""),children:[(0,n.jsx)("h2",{children:(0,n.jsxs)("button",{type:"button",ref:y===s?ea:void 0,className:"setup-step-heading",onClick:()=>ei(s),disabled:s>f||M||H||P||!t,"aria-expanded":y===s,"aria-controls":"setup-panel-".concat(s),"aria-current":y===s?"step":void 0,children:[(0,n.jsx)("span",{className:"setup-step-number",children:s<f&&s!==y?(0,n.jsx)(m,{}):s+1}),e,s<f&&s!==y&&(0,n.jsx)("span",{className:"setup-edit",children:"Edit"})]})}),(0,n.jsxs)("div",{id:"setup-panel-".concat(s),className:"setup-step-panel",hidden:y!==s,children:[0===s&&(0,n.jsxs)("form",{className:"setup-profile-form",onSubmit:async e=>{e.preventDefault(),await el()&&ei(1)},children:[(0,n.jsx)("p",{children:"Tell your team who you are."}),(0,n.jsxs)("label",{htmlFor:"setup-name",children:["Full name",(0,n.jsx)("input",{id:"setup-name",autoComplete:"name",value:A,onChange:e=>T(e.target.value),maxLength:100,required:!0,disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-email",children:["Account email",(0,n.jsx)("input",{id:"setup-email",type:"email",value:(null==t?void 0:t.email)||"",readOnly:!0,autoComplete:"email"})]}),(0,n.jsxs)("label",{htmlFor:"setup-role",children:["Job title ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-role",autoComplete:"organization-title",value:L.role,onChange:e=>I("role",e.target.value),maxLength:100,disabled:!t||P,placeholder:"e.g. Platform engineer"})]}),(0,n.jsxs)("button",{type:"submit",className:"setup-primary",disabled:!t||P,children:[P?"Saving…":"Continue"," ",(0,n.jsx)(h,{})]})]}),1===s&&(0,n.jsxs)("form",{className:"setup-profile-form",onSubmit:async e=>{e.preventDefault(),await el()&&(eo(),ei(2))},children:[(0,n.jsx)("p",{children:"Name the workspace for your application and test results."}),(0,n.jsxs)("label",{htmlFor:"setup-workspace",children:["Workspace name",(0,n.jsx)("input",{id:"setup-workspace",value:O,onChange:e=>E(e.target.value),required:!0,maxLength:100,disabled:!t||P,placeholder:"e.g. Acme engineering"})]}),(0,n.jsxs)("label",{htmlFor:"setup-company",children:["Organization ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-company",autoComplete:"organization",value:L.company,onChange:e=>I("company",e.target.value),maxLength:100,disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-website",children:["Company website ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-website",type:"url",autoComplete:"url",value:L.website,onChange:e=>I("website",e.target.value),maxLength:254,placeholder:"https://example.com",disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-size",children:["Team size ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsxs)("select",{id:"setup-size",value:L.teamSize,onChange:e=>I("teamSize",e.target.value),disabled:!t||P,children:[(0,n.jsx)("option",{value:"",children:"Select team size"}),["1","2–10","11–50","51–200","201–1000","1000+"].map(e=>(0,n.jsx)("option",{value:e,children:"1"===e?"Just me":e+" people"},e))]})]}),(0,n.jsxs)("label",{htmlFor:"setup-use",children:["What do you want to test? ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("textarea",{id:"setup-use",rows:2,value:L.useCase,onChange:e=>I("useCase",e.target.value),maxLength:500,placeholder:"e.g. Payment retries before every release",disabled:!t||P})]}),(0,n.jsx)("p",{className:"setup-help",children:"These details describe your team. This setup does not invite teammates or enforce SSO."}),(0,n.jsxs)("details",{className:"setup-appearance",children:[(0,n.jsx)("summary",{children:"Appearance and accessibility"}),(0,n.jsxs)("fieldset",{className:"setup-choice",children:[(0,n.jsx)("legend",{children:"Layout"}),(0,n.jsx)("div",{className:"setup-segmented",children:[{label:"Comfortable",value:!1},{label:"Compact",value:!0}].map(e=>(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"setup-density",checked:k.compact===e.value,onChange:()=>C(t=>({...t,compact:e.value}))}),(0,n.jsx)("span",{children:e.label})]},e.label))})]}),(0,n.jsxs)("fieldset",{className:"setup-choice",children:[(0,n.jsx)("legend",{children:"Background"}),(0,n.jsx)("div",{className:"setup-scenes",children:["auto","morning","afternoon","evening"].map(e=>(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"setup-artwork",checked:k.artwork===e,onChange:()=>C(t=>({...t,artwork:e}))}),(0,n.jsx)("span",{className:"setup-scene-swatch".concat("auto"===e?" automatic":""),style:"auto"!==e?{backgroundImage:"url('assets/dashboard/".concat(d[e],"')")}:void 0,children:"auto"===e&&(0,n.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[(0,n.jsx)("circle",{cx:"12",cy:"12",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),(0,n.jsx)("path",{d:"M12 8v4l3 2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}),(0,n.jsx)("span",{children:"auto"===e?"Automatic":e[0].toUpperCase()+e.slice(1)})]},e))}),(0,n.jsx)("p",{className:"setup-help",children:"auto"===k.artwork?"Changes with your local time.":"Keep this scene throughout the day."})]}),(0,n.jsxs)("div",{className:"setup-toggle-list",children:[(0,n.jsxs)("label",{children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("strong",{children:"Live updates"}),(0,n.jsx)("small",{children:"Keep projects and test results up to date."})]}),(0,n.jsx)("input",{type:"checkbox",role:"switch",checked:k.autoRefresh,onChange:e=>C(t=>({...t,autoRefresh:e.target.checked}))})]}),(0,n.jsxs)("label",{children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("strong",{children:"Reduce motion"}),(0,n.jsx)("small",{children:"Use fewer animations and transitions."})]}),(0,n.jsx)("input",{type:"checkbox",role:"switch",checked:k.reduceMotion,onChange:e=>C(t=>({...t,reduceMotion:e.target.checked}))})]})]})]}),(0,n.jsxs)("button",{type:"submit",className:"setup-primary",disabled:!t||P,children:[P?"Saving…":"Save workspace"," ",(0,n.jsx)(h,{})]})]}),2===s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"setup-connect-intro",children:"Start in your repository’s terminal."}),(0,n.jsxs)("div",{className:"setup-terminal",children:[(0,n.jsxs)("div",{className:"setup-command-label",children:[(0,n.jsx)("span",{children:"01"}),(0,n.jsx)("strong",{children:"Connect your terminal"}),J&&(0,n.jsxs)("span",{className:"setup-connected",children:[(0,n.jsx)(m,{}),"Connected"]})]}),(r="npx agenttwin init",(0,n.jsxs)("div",{className:"setup-command",children:[(0,n.jsx)("code",{children:r}),(0,n.jsx)("button",{type:"button",onClick:()=>ep(r),"aria-label":"Copy ".concat(r),children:ee===r?(0,n.jsx)(m,{}):(0,n.jsxs)("svg",{viewBox:"0 0 20 20",fill:"none","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"7",y:"7",width:"9",height:"10",rx:"2",stroke:"currentColor",strokeWidth:"1.4"}),(0,n.jsx)("path",{d:"M12 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",stroke:"currentColor",strokeWidth:"1.4"})]})})]})),(0,n.jsx)("p",{className:"setup-help",children:"Run this inside your application repository. AgentTwin detects the project and its services, then guides you through connecting and sharing. Approve the terminal connection in this browser once. Init then syncs your project automatically; future runs use the saved connection."}),!J&&(0,n.jsxs)("details",{className:"setup-pairing",open:U||!!(null==t||null==(a=t.workspaceProfile)?void 0:a.completedAt),children:[(0,n.jsx)("summary",{children:U?"Confirm your terminal connection":"I have a terminal code"}),(0,n.jsxs)("form",{onSubmit:ed,children:[(0,n.jsxs)("label",{htmlFor:"setup-terminal-code",children:["Connection code",(0,n.jsx)("input",{id:"setup-terminal-code",name:"userCode",value:W,onChange:e=>z(e.target.value.toUpperCase()),autoComplete:"off",autoCapitalize:"characters",spellCheck:!1,placeholder:"10-character code",minLength:10,maxLength:10,pattern:"[A-Fa-f0-9]{10}",required:!0,disabled:!t||M})]}),(0,n.jsx)("button",{type:"submit",className:"setup-secondary",disabled:!t||M,children:M?"Connecting…":"Connect terminal"})]}),(0,n.jsx)("p",{className:"setup-help",children:"Compare this code with your terminal before approving. Connecting lets it sync project discovery and test evidence to your workspace. Application source and credentials stay local."})]}),B&&(0,n.jsx)("p",{className:"setup-feedback",role:"status",children:B})]}),(0,n.jsx)("p",{className:"setup-help",role:"status",children:G.length?"Project connected.":J?"Terminal connected. Waiting for init to finish syncing your project…":"Enter the code from your terminal to connect this project."}),(0,n.jsxs)("button",{type:"button",className:"setup-secondary setup-check",onClick:eu,disabled:!t||H,children:[H?"Checking…":G.length?"Check again":"Check for my project",!H&&(0,n.jsx)(h,{})]}),V&&(0,n.jsx)("p",{className:"setup-feedback",role:"status",children:V}),G.map(e=>(0,n.jsxs)("div",{className:"setup-project",children:[(0,n.jsx)(m,{}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e.name}),(0,n.jsxs)("span",{children:[e.tools," resource",1===e.tools?"":"s"," \xb7 ",e.workflows," workflow candidate",1===e.workflows?"":"s"]})]})]},e.name)),(0,n.jsxs)("div",{className:"setup-finish",children:[(0,n.jsxs)("button",{type:"button",className:"setup-primary",onClick:ec,disabled:!t||H||M||P,children:[P?"Saving…":G.length?"Open my workspace":"Connect later"," ",(0,n.jsx)(h,{})]}),!G.length&&(0,n.jsx)("p",{children:"Connect a project later from your workspace."}),es&&(0,n.jsx)("a",{href:"/dashboard/#home",children:"Open workspace without saving"})]})]})]})]},e)})}),(0,n.jsx)("p",{className:"setup-notice",role:"status","aria-live":"polite",children:N})]}),(0,n.jsxs)("aside",{className:"setup-preview".concat(k.compact?" compact":""),"aria-label":"Live workspace preview",children:[(0,n.jsxs)("div",{className:"setup-preview-heading",children:[(0,n.jsx)("span",{children:"Workspace preview"}),(0,n.jsx)("span",{className:"setup-preview-scene",children:er[0].toUpperCase()+er.slice(1)})]}),(0,n.jsxs)("div",{className:"setup-preview-window dashboard-preview",children:[(0,n.jsxs)("div",{className:"setup-preview-nav",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg",width:"18",height:"18",alt:""}),(0,n.jsx)("strong",{children:"AgentTwin"}),(0,n.jsx)("span",{className:"setup-preview-avatar",children:A?A[0].toUpperCase():"A"})]}),(0,n.jsx)("div",{className:"preview-navigation","aria-label":"Dashboard navigation preview",children:["Home","Environment","Workflows","Runs","Settings"].map(e=>(0,n.jsx)("span",{className:"Home"===e?"selected":void 0,children:e},e))}),(0,n.jsxs)("div",{className:"setup-preview-hero",children:[(0,n.jsx)("h3",{children:"What should your agent test?"}),(0,n.jsxs)("div",{className:"setup-preview-composer",children:[(0,n.jsx)("span",{children:"Ask about a workflow or test result"}),(0,n.jsx)("span",{"aria-hidden":"true",children:"↑"}),(0,n.jsx)("span",{className:"preview-microphone","aria-hidden":"true",children:(0,n.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[(0,n.jsx)("rect",{x:"9",y:"3",width:"6",height:"12",rx:"3"}),(0,n.jsx)("path",{d:"M5 10v2a7 7 0 0 0 14 0v-2M12 19v3"})]})})]})]}),(0,n.jsxs)("div",{className:"preview-dashboard-body",children:[(0,n.jsxs)("div",{className:"preview-connect-banner",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:(null==(e=G[0])?void 0:e.name)||"Connect your project"}),(0,n.jsx)("p",{children:G[0]?"".concat(G[0].tools," resources \xb7 ").concat(G[0].workflows," workflow candidates"):"Start in your repository with npx agenttwin init."})]}),(0,n.jsxs)("span",{className:"preview-action",children:[G.length?"View project":"Connect project"," ",(0,n.jsx)(h,{})]})]}),(0,n.jsxs)("div",{className:"preview-workspace-heading",children:[(0,n.jsx)("span",{children:O||"Your workspace"}),(0,n.jsx)("span",{children:"⊞ Customize"})]}),(0,n.jsxs)("div",{className:"preview-widget-grid",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Project discovery"}),(0,n.jsx)("p",{children:G[0]?"".concat(G[0].name,": ").concat(G[0].tools," detected resources."):"Connect and sync your project to see its resources and workflow candidates."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Test results"}),(0,n.jsx)("p",{children:"Run receipts, assertions and recorded state changes appear here after a test."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Git activity"}),(0,n.jsx)("p",{children:"Repository commits and workflow changes."}),(0,n.jsx)("code",{children:"npx agenttwin init"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Observed activities"}),(0,n.jsx)("p",{children:"Reads, writes, retries and injected failures recorded during a run."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Working now"}),(0,n.jsx)("p",{children:"Follow the progress of running workflow tests."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Needs attention"}),(0,n.jsx)("p",{children:"Inspect failed checks and the evidence behind them."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Last execution"}),(0,n.jsx)("p",{children:"The tested revision, runtime and outcome of your latest run."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Test readiness"}),(0,n.jsx)("p",{children:"Review dependencies, inputs and required outcomes."})]})]})]})]}),(0,n.jsx)("p",{className:"setup-preview-caption",children:2===y?G.length?"Project found. You can start reviewing workflows.":X?"Your project appears here after its first sync.":"Connect your own project when you’re ready.":"Your application, its test world and the evidence from each run."})]})]}),(0,n.jsxs)("footer",{className:"onboarding-footer",children:[(0,n.jsxs)("span",{children:[y+1," of 3"]}),(0,n.jsx)("span",{children:"Profile and workspace save to your account."})]})]})]})}},4640:()=>{},6262:()=>{},7607:(e,t,s)=>{Promise.resolve().then(s.bind(s,2652))}},e=>{e.O(0,[1839,6295,641,650,7903,4816,7358],()=>e(e.s=7607)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9566],{2652:(e,t,s)=>{"use strict";s.d(t,{default:()=>j});var n=s(1778),a=s(5226),r=s(650);function i(e){var t,s,n,a,r;return{company:null!=(t=null==e?void 0:e.company)?t:"",website:null!=(s=null==e?void 0:e.website)?s:"",role:null!=(n=null==e?void 0:e.role)?n:"",teamSize:null!=(a=null==e?void 0:e.teamSize)?a:"",useCase:null!=(r=null==e?void 0:e.useCase)?r:""}}s(3525),s(4640),s(6262);let o={company:"",website:"",role:"",teamSize:"",useCase:""},l="agenttwin:pending-terminal:v1",c="agenttwin:workspace-preferences:v1",d={morning:"bay-morning.png",afternoon:"golden-gate-afternoon.png",evening:"moonlit-coast.png"},u=["Your profile","Your workspace","Connect your application"],p={artwork:"afternoon",compact:!1,autoRefresh:!0,reduceMotion:!1};function h(){return(0,n.jsx)("span",{"aria-hidden":"true",children:"→"})}function m(){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",children:(0,n.jsx)("path",{d:"m4 8 2.5 2.5L12 5",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})})}function j(){var e;let[t,s]=(0,a.useState)(null),[j,x]=(0,a.useState)(""),[g,v]=(0,a.useState)(0),[y,w]=(0,a.useState)(0),[f,b]=(0,a.useState)(0),[k,C]=(0,a.useState)(p),[N,S]=(0,a.useState)(""),[A,T]=(0,a.useState)(""),[O,E]=(0,a.useState)(""),[L,F]=(0,a.useState)(o),[P,R]=(0,a.useState)(!1),I=(e,t)=>F(s=>({...s,[e]:t})),[W,z]=(0,a.useState)(""),[M,Y]=(0,a.useState)(!1),[J,D]=(0,a.useState)(!1),[U,_]=(0,a.useState)(!1),[B,q]=(0,a.useState)(""),[H,K]=(0,a.useState)(!1),[V,$]=(0,a.useState)(""),[G,Q]=(0,a.useState)([]),[X,Z]=(0,a.useState)(!1),[ee,et]=(0,a.useState)(""),[es,en]=(0,a.useState)(!1),ea=(0,a.useRef)(null),er="auto"===k.artwork?"afternoon":k.artwork;function ei(e){w(e),b(t=>Math.max(t,e)),S(""),requestAnimationFrame(()=>{var e;return null==(e=ea.current)?void 0:e.focus({preventScroll:!0})})}function eo(){try{let e={};try{let t=JSON.parse(localStorage.getItem(c)||"{}");t&&"object"==typeof t&&!Array.isArray(t)&&(e=t)}catch(e){}return localStorage.setItem(c,JSON.stringify({...e,...k,name:O.slice(0,40),userName:A.slice(0,60)})),en(!1),!0}catch(e){return en(!0),S("Browser storage is unavailable. Your preferences could not be saved."),!1}}async function el(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!t||P)return!1;R(!0),S("");try{let t=await fetch(r.n+"/v1/auth/profile",{method:"POST",credentials:"include",headers:{"content-type":"application/json"},body:JSON.stringify({name:A,workspace:O,...i(L),complete:e}),signal:AbortSignal.timeout(15e3)}),n=await t.json();if(!t.ok)throw Error(404===t.status?"Account setup is not available on this API yet. Please try again after the API is updated.":n.error||"Could not save your details. Try again.");return s(n.user),!0}catch(e){return S(e instanceof Error?e.message:"Could not save your details. Try again."),!1}finally{R(!1)}}async function ec(){!t||M||H||P||await el(!0)&&(eo(),location.assign(G.length?"/dashboard/#environment":"/dashboard/#home"))}async function ed(e){if(e.preventDefault(),!M&&!J&&t){Y(!0),q("");try{let e=await fetch(r.n+"/v1/auth/device/approve",{method:"POST",credentials:"include",headers:{"content-type":"application/json"},body:JSON.stringify({userCode:W.trim().toUpperCase()}),signal:AbortSignal.timeout(15e3)}),t=await e.json();if(!e.ok)throw Error(t.error||"Could not connect your terminal. Try again.");try{sessionStorage.removeItem(l)}catch(e){}D(!0),z(""),q("Terminal connected. Keep init running; it will sync your project automatically.")}catch(e){q(e instanceof Error?e.message:"Could not connect your terminal.")}finally{Y(!1)}}}async function eu(){if(!H&&t){K(!0),$("");try{let e=await fetch(r.n+"/v1/projects",{credentials:"include",signal:AbortSignal.timeout(15e3)});if(!e.ok)throw Error("Could not check your projects. Try again.");let t=await e.json();if(!Array.isArray(t.projects))throw Error("Could not load your projects. Try again.");Q(t.projects),Z(!0),$(t.projects.length?"Your project is in your workspace.":"Running init discovers files locally. Connect this terminal and keep init running until it confirms the project is synced.")}catch(e){$(e instanceof Error?e.message:"Could not check your projects.")}finally{K(!1)}}}async function ep(e){try{await navigator.clipboard.writeText(e),et(e),S("Command copied. Run it in your project’s terminal.")}catch(e){S("Select the command and copy it into your terminal.")}}return(0,a.useEffect)(()=>{let e=new URLSearchParams(location.hash.slice(1)).get("user_code"),t=null;try{e&&/^[A-F0-9]{10}$/.test(e)?(t={code:e,expires:Date.now()+6e5},sessionStorage.setItem(l,JSON.stringify(t))):t=JSON.parse(sessionStorage.getItem(l)||"null")}catch(s){e&&(t={code:e,expires:Date.now()+6e5})}if(t&&/^[A-F0-9]{10}$/.test(t.code||"")&&Number(t.expires)>Date.now())z(t.code),_(!0),w(2),b(2);else try{sessionStorage.removeItem(l)}catch(e){}e&&history.replaceState(null,"",location.pathname+location.search)},[]),(0,a.useEffect)(()=>{try{let e=JSON.parse(localStorage.getItem(c)||"null");e&&C({artwork:"afternoon",compact:!0===e.compact,autoRefresh:!1!==e.autoRefresh,reduceMotion:!0===e.reduceMotion})}catch(e){}},[]),(0,a.useEffect)(()=>{let e=new AbortController;return x(""),fetch(r.n+"/v1/auth/me",{credentials:"include",signal:AbortSignal.any([e.signal,AbortSignal.timeout(15e3)])}).then(async e=>{var t;if(401===e.status)return void location.replace("/login/?next=onboarding");if(!e.ok)throw Error();let n=(await e.json()).user;s(n),T(n.name),E(n.workspace),F(i(n.workspaceProfile)),(null==(t=n.workspaceProfile)?void 0:t.completedAt)&&(w(2),b(2))}).catch(()=>{e.signal.aborted||x("Your account could not be loaded. Try again to continue setup.")}),()=>e.abort()},[g]),(0,a.useEffect)(()=>{if(!t)return;let e=new AbortController,s=!1,n=async()=>{if("hidden"!==document.visibilityState&&!s){s=!0;try{let t=await fetch(r.n+"/v1/projects",{credentials:"include",signal:AbortSignal.any([e.signal,AbortSignal.timeout(1e4)])});if(!t.ok)return;let s=await t.json();!e.signal.aborted&&Array.isArray(s.projects)&&(Q(s.projects),Z(!0),s.projects.length&&$("Your project is in your workspace."))}catch(e){}finally{s=!1}}};n();let a=2===y?setInterval(()=>{n()},3e3):void 0;return document.addEventListener("visibilitychange",n),()=>{e.abort(),clearInterval(a),document.removeEventListener("visibilitychange",n)}},[y,null==t?void 0:t.email]),(0,n.jsxs)("main",{className:"onboarding-page onboarding-san-francisco".concat(k.reduceMotion?" onboarding-still":""),style:{"--setup-scene":"url('assets/dashboard/".concat(d[er],"')")},children:[(0,n.jsx)("div",{className:"onboarding-backdrop","aria-hidden":"true"}),(0,n.jsxs)("section",{className:"onboarding-shell","aria-labelledby":"onboarding-title",children:[(0,n.jsxs)("header",{className:"onboarding-header",children:[(0,n.jsxs)("a",{className:"auth-brand",href:"/","aria-label":"AgentTwin home",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg",width:"26",height:"26",alt:""}),"AgentTwin"]}),(0,n.jsxs)("a",{href:"/docs/workflow/",children:["Need a hand? ",(0,n.jsx)(h,{})]})]}),(0,n.jsxs)("div",{className:"onboarding-content".concat(0===y?" onboarding-welcome":""),children:[(0,n.jsxs)("div",{className:"onboarding-controls",children:[(0,n.jsxs)("div",{className:"onboarding-greeting",children:[(0,n.jsx)("p",{children:O||"Your workspace"}),(0,n.jsx)("h1",{id:"onboarding-title",children:t?"Welcome, ".concat(t.name.trim().split(/\s+/)[0],"."):"Set up your workspace."})]}),!t&&!j&&(0,n.jsx)("p",{className:"setup-help",role:"status",children:"Loading your account…"}),j&&(0,n.jsxs)("div",{className:"onboarding-account-error",role:"alert",children:[(0,n.jsx)("p",{children:j}),(0,n.jsx)("button",{type:"button",onClick:()=>v(e=>e+1),children:"Try again"})]}),(0,n.jsx)("ol",{className:"setup-steps","aria-label":"Workspace setup",children:u.map((e,s)=>{var a,r;return(0,n.jsxs)("li",{className:"setup-step".concat(y===s?" active":"").concat(s<f?" visited":""),children:[(0,n.jsx)("h2",{children:(0,n.jsxs)("button",{type:"button",ref:y===s?ea:void 0,className:"setup-step-heading",onClick:()=>ei(s),disabled:s>f||M||H||P||!t,"aria-expanded":y===s,"aria-controls":"setup-panel-".concat(s),"aria-current":y===s?"step":void 0,children:[(0,n.jsx)("span",{className:"setup-step-number",children:s<f&&s!==y?(0,n.jsx)(m,{}):s+1}),e,s<f&&s!==y&&(0,n.jsx)("span",{className:"setup-edit",children:"Edit"})]})}),(0,n.jsxs)("div",{id:"setup-panel-".concat(s),className:"setup-step-panel",hidden:y!==s,children:[0===s&&(0,n.jsxs)("form",{className:"setup-profile-form",onSubmit:async e=>{e.preventDefault(),await el()&&ei(1)},children:[(0,n.jsx)("p",{children:"Tell your team who you are."}),(0,n.jsxs)("label",{htmlFor:"setup-name",children:["Full name",(0,n.jsx)("input",{id:"setup-name",autoComplete:"name",value:A,onChange:e=>T(e.target.value),maxLength:100,required:!0,disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-email",children:["Account email",(0,n.jsx)("input",{id:"setup-email",type:"email",value:(null==t?void 0:t.email)||"",readOnly:!0,autoComplete:"email"})]}),(0,n.jsxs)("label",{htmlFor:"setup-role",children:["Job title ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-role",autoComplete:"organization-title",value:L.role,onChange:e=>I("role",e.target.value),maxLength:100,disabled:!t||P,placeholder:"e.g. Platform engineer"})]}),(0,n.jsxs)("button",{type:"submit",className:"setup-primary",disabled:!t||P,children:[P?"Saving…":"Continue"," ",(0,n.jsx)(h,{})]})]}),1===s&&(0,n.jsxs)("form",{className:"setup-profile-form",onSubmit:async e=>{e.preventDefault(),await el()&&(eo(),ei(2))},children:[(0,n.jsx)("p",{children:"Name the workspace for your application and test results."}),(0,n.jsxs)("label",{htmlFor:"setup-workspace",children:["Workspace name",(0,n.jsx)("input",{id:"setup-workspace",value:O,onChange:e=>E(e.target.value),required:!0,maxLength:100,disabled:!t||P,placeholder:"e.g. Acme engineering"})]}),(0,n.jsxs)("label",{htmlFor:"setup-company",children:["Organization ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-company",autoComplete:"organization",value:L.company,onChange:e=>I("company",e.target.value),maxLength:100,disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-website",children:["Company website ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("input",{id:"setup-website",type:"url",autoComplete:"url",value:L.website,onChange:e=>I("website",e.target.value),maxLength:254,placeholder:"https://example.com",disabled:!t||P})]}),(0,n.jsxs)("label",{htmlFor:"setup-size",children:["Team size ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsxs)("select",{id:"setup-size",value:L.teamSize,onChange:e=>I("teamSize",e.target.value),disabled:!t||P,children:[(0,n.jsx)("option",{value:"",children:"Select team size"}),["1","2–10","11–50","51–200","201–1000","1000+"].map(e=>(0,n.jsx)("option",{value:e,children:"1"===e?"Just me":e+" people"},e))]})]}),(0,n.jsxs)("label",{htmlFor:"setup-use",children:["What do you want to test? ",(0,n.jsx)("span",{children:"Optional"}),(0,n.jsx)("textarea",{id:"setup-use",rows:2,value:L.useCase,onChange:e=>I("useCase",e.target.value),maxLength:500,placeholder:"e.g. Payment retries before every release",disabled:!t||P})]}),(0,n.jsx)("p",{className:"setup-help",children:"These details describe your team. This setup does not invite teammates or enforce SSO."}),(0,n.jsxs)("details",{className:"setup-appearance",children:[(0,n.jsx)("summary",{children:"Appearance and accessibility"}),(0,n.jsxs)("fieldset",{className:"setup-choice",children:[(0,n.jsx)("legend",{children:"Layout"}),(0,n.jsx)("div",{className:"setup-segmented",children:[{label:"Comfortable",value:!1},{label:"Compact",value:!0}].map(e=>(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"setup-density",checked:k.compact===e.value,onChange:()=>C(t=>({...t,compact:e.value}))}),(0,n.jsx)("span",{children:e.label})]},e.label))})]}),(0,n.jsxs)("fieldset",{className:"setup-choice",children:[(0,n.jsx)("legend",{children:"Background"}),(0,n.jsx)("div",{className:"setup-scenes",children:["auto","morning","afternoon","evening"].map(e=>(0,n.jsxs)("label",{children:[(0,n.jsx)("input",{type:"radio",name:"setup-artwork",checked:k.artwork===e,onChange:()=>C(t=>({...t,artwork:e}))}),(0,n.jsx)("span",{className:"setup-scene-swatch".concat("auto"===e?" automatic":""),style:"auto"!==e?{backgroundImage:"url('assets/dashboard/".concat(d[e],"')")}:void 0,children:"auto"===e&&(0,n.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[(0,n.jsx)("circle",{cx:"12",cy:"12",r:"7",stroke:"currentColor",strokeWidth:"1.5"}),(0,n.jsx)("path",{d:"M12 8v4l3 2",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})}),(0,n.jsx)("span",{children:"auto"===e?"Automatic":e[0].toUpperCase()+e.slice(1)})]},e))}),(0,n.jsx)("p",{className:"setup-help",children:"auto"===k.artwork?"Changes with your local time.":"Keep this scene throughout the day."})]}),(0,n.jsxs)("div",{className:"setup-toggle-list",children:[(0,n.jsxs)("label",{children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("strong",{children:"Live updates"}),(0,n.jsx)("small",{children:"Keep projects and test results up to date."})]}),(0,n.jsx)("input",{type:"checkbox",role:"switch",checked:k.autoRefresh,onChange:e=>C(t=>({...t,autoRefresh:e.target.checked}))})]}),(0,n.jsxs)("label",{children:[(0,n.jsxs)("span",{children:[(0,n.jsx)("strong",{children:"Reduce motion"}),(0,n.jsx)("small",{children:"Use fewer animations and transitions."})]}),(0,n.jsx)("input",{type:"checkbox",role:"switch",checked:k.reduceMotion,onChange:e=>C(t=>({...t,reduceMotion:e.target.checked}))})]})]})]}),(0,n.jsxs)("button",{type:"submit",className:"setup-primary",disabled:!t||P,children:[P?"Saving…":"Save workspace"," ",(0,n.jsx)(h,{})]})]}),2===s&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("p",{className:"setup-connect-intro",children:"Start in your repository’s terminal."}),(0,n.jsxs)("div",{className:"setup-terminal",children:[(0,n.jsxs)("div",{className:"setup-command-label",children:[(0,n.jsx)("span",{children:"01"}),(0,n.jsx)("strong",{children:"Connect your terminal"}),J&&(0,n.jsxs)("span",{className:"setup-connected",children:[(0,n.jsx)(m,{}),"Connected"]})]}),(r="npx agenttwin init",(0,n.jsxs)("div",{className:"setup-command",children:[(0,n.jsx)("code",{children:r}),(0,n.jsx)("button",{type:"button",onClick:()=>ep(r),"aria-label":"Copy ".concat(r),children:ee===r?(0,n.jsx)(m,{}):(0,n.jsxs)("svg",{viewBox:"0 0 20 20",fill:"none","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"7",y:"7",width:"9",height:"10",rx:"2",stroke:"currentColor",strokeWidth:"1.4"}),(0,n.jsx)("path",{d:"M12 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",stroke:"currentColor",strokeWidth:"1.4"})]})})]})),(0,n.jsx)("p",{className:"setup-help",children:"Run this inside your application repository. AgentTwin detects the project and its services, then guides you through connecting and sharing. Approve the terminal connection in this browser once. Init then syncs your project automatically; future runs use the saved connection."}),!J&&(0,n.jsxs)("details",{className:"setup-pairing",open:U||!!(null==t||null==(a=t.workspaceProfile)?void 0:a.completedAt),children:[(0,n.jsx)("summary",{children:U?"Confirm your terminal connection":"I have a terminal code"}),(0,n.jsxs)("form",{onSubmit:ed,children:[(0,n.jsxs)("label",{htmlFor:"setup-terminal-code",children:["Connection code",(0,n.jsx)("input",{id:"setup-terminal-code",name:"userCode",value:W,onChange:e=>z(e.target.value.toUpperCase()),autoComplete:"off",autoCapitalize:"characters",spellCheck:!1,placeholder:"10-character code",minLength:10,maxLength:10,pattern:"[A-Fa-f0-9]{10}",required:!0,disabled:!t||M})]}),(0,n.jsx)("button",{type:"submit",className:"setup-secondary",disabled:!t||M,children:M?"Connecting…":"Connect terminal"})]}),(0,n.jsx)("p",{className:"setup-help",children:"Compare this code with your terminal before approving. Connecting lets it sync project discovery and test evidence to your workspace. Application source and credentials stay local."})]}),B&&(0,n.jsx)("p",{className:"setup-feedback",role:"status",children:B})]}),(0,n.jsx)("p",{className:"setup-help",role:"status",children:G.length?"Project connected.":J?"Terminal connected. Waiting for init to finish syncing your project…":"Enter the code from your terminal to connect this project."}),(0,n.jsxs)("button",{type:"button",className:"setup-secondary setup-check",onClick:eu,disabled:!t||H,children:[H?"Checking…":G.length?"Check again":"Check for my project",!H&&(0,n.jsx)(h,{})]}),V&&(0,n.jsx)("p",{className:"setup-feedback",role:"status",children:V}),G.map(e=>(0,n.jsxs)("div",{className:"setup-project",children:[(0,n.jsx)(m,{}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:e.name}),(0,n.jsxs)("span",{children:[e.tools," resource",1===e.tools?"":"s"," \xb7 ",e.workflows," workflow candidate",1===e.workflows?"":"s"]})]})]},e.name)),(0,n.jsxs)("div",{className:"setup-finish",children:[(0,n.jsxs)("button",{type:"button",className:"setup-primary",onClick:ec,disabled:!t||H||M||P,children:[P?"Saving…":G.length?"Open my workspace":"Connect later"," ",(0,n.jsx)(h,{})]}),!G.length&&(0,n.jsx)("p",{children:"Connect a project later from your workspace."}),es&&(0,n.jsx)("a",{href:"/dashboard/#home",children:"Open workspace without saving"})]})]})]})]},e)})}),(0,n.jsx)("p",{className:"setup-notice",role:"status","aria-live":"polite",children:N})]}),(0,n.jsxs)("aside",{className:"setup-preview".concat(k.compact?" compact":""),"aria-label":"Live workspace preview",children:[(0,n.jsxs)("div",{className:"setup-preview-heading",children:[(0,n.jsx)("span",{children:"Workspace preview"}),(0,n.jsx)("span",{className:"setup-preview-scene",children:er[0].toUpperCase()+er.slice(1)})]}),(0,n.jsxs)("div",{className:"setup-preview-window dashboard-preview",children:[(0,n.jsxs)("div",{className:"setup-preview-nav",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg",width:"18",height:"18",alt:""}),(0,n.jsx)("strong",{children:"AgentTwin"}),(0,n.jsx)("span",{className:"setup-preview-avatar",children:A?A[0].toUpperCase():"A"})]}),(0,n.jsx)("div",{className:"preview-navigation","aria-label":"Dashboard navigation preview",children:["Home","Environment","Workflows","Runs","Settings"].map(e=>(0,n.jsx)("span",{className:"Home"===e?"selected":void 0,children:e},e))}),(0,n.jsxs)("div",{className:"setup-preview-hero",children:[(0,n.jsx)("h3",{children:"What should your agent test?"}),(0,n.jsxs)("div",{className:"setup-preview-composer",children:[(0,n.jsx)("span",{children:"Ask about a workflow or test result"}),(0,n.jsx)("span",{"aria-hidden":"true",children:"↑"}),(0,n.jsx)("span",{className:"preview-microphone","aria-hidden":"true",children:(0,n.jsxs)("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",children:[(0,n.jsx)("rect",{x:"9",y:"3",width:"6",height:"12",rx:"3"}),(0,n.jsx)("path",{d:"M5 10v2a7 7 0 0 0 14 0v-2M12 19v3"})]})})]})]}),(0,n.jsxs)("div",{className:"preview-dashboard-body",children:[(0,n.jsxs)("div",{className:"preview-connect-banner",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:(null==(e=G[0])?void 0:e.name)||"Connect your project"}),(0,n.jsx)("p",{children:G[0]?"".concat(G[0].tools," resources \xb7 ").concat(G[0].workflows," workflow candidates"):"Start in your repository with npx agenttwin init."})]}),(0,n.jsxs)("span",{className:"preview-action",children:[G.length?"View project":"Connect project"," ",(0,n.jsx)(h,{})]})]}),(0,n.jsxs)("div",{className:"preview-workspace-heading",children:[(0,n.jsx)("span",{children:O||"Your workspace"}),(0,n.jsx)("span",{children:"⊞ Customize"})]}),(0,n.jsxs)("div",{className:"preview-widget-grid",children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Project discovery"}),(0,n.jsx)("p",{children:G[0]?"".concat(G[0].name,": ").concat(G[0].tools," detected resources."):"Connect and sync your project to see its resources and workflow candidates."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Test results"}),(0,n.jsx)("p",{children:"Run receipts, assertions and recorded state changes appear here after a test."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Git activity"}),(0,n.jsx)("p",{children:"Repository commits and workflow changes."}),(0,n.jsx)("code",{children:"npx agenttwin init"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Observed activities"}),(0,n.jsx)("p",{children:"Reads, writes, retries and injected failures recorded during a run."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Working now"}),(0,n.jsx)("p",{children:"Follow the progress of running workflow tests."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Needs attention"}),(0,n.jsx)("p",{children:"Inspect failed checks and the evidence behind them."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Last execution"}),(0,n.jsx)("p",{children:"The tested revision, runtime and outcome of your latest run."})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Test readiness"}),(0,n.jsx)("p",{children:"Review dependencies, inputs and required outcomes."})]})]})]})]}),(0,n.jsx)("p",{className:"setup-preview-caption",children:2===y?G.length?"Project found. You can start reviewing workflows.":X?"Your project appears here after its first sync.":"Connect your own project when you’re ready.":"Your application, its test world and the evidence from each run."})]})]}),(0,n.jsxs)("footer",{className:"onboarding-footer",children:[(0,n.jsxs)("span",{children:[y+1," of 3"]}),(0,n.jsx)("span",{children:"Profile and workspace save to your account."})]})]})]})}},4640:()=>{},6262:()=>{},9405:(e,t,s)=>{Promise.resolve().then(s.bind(s,2652))}},e=>{e.O(0,[1839,6295,641,650,7903,4816,7358],()=>e(e.s=9405)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{3069:(e,t,a)=>{"use strict";a.d(t,{default:()=>l});var n=a(1778),r=a(5226);let s={replica:{src:"assets/img/hero-replica-desktop.png",mobile:"assets/img/hero-replica-mobile.png",alt:"AgentTwin workspace showing a synthetic Pylon environment and replica settings"},faults:{src:"assets/img/step-4-faults.png",mobile:"assets/img/current-faults.png",alt:"AgentTwin prototype with failure conditions selected for a scripted test run"},result:{src:"assets/img/step-5-fail.png",mobile:"assets/img/current-result.png",alt:"AgentTwin prototype showing a failed assertion and the resulting state changes"}},i=[{id:"preview-tab-replica",key:"replica",label:"Create a replica"},{id:"preview-tab-faults",key:"faults",label:"Introduce failures"},{id:"preview-tab-result",key:"result",label:"Inspect the result"},{id:"preview-tab-explain",key:"explain",label:"Explain the result"}];function l(){let[e,t]=(0,r.useState)(0),a="explain"===i[e].key,l=s[i[e].key],o=(0,r.useRef)(null),c=e=>{var a;t(e),null==(a=o.current)||a.setAttribute("aria-labelledby",i[e].id)};return(0,n.jsxs)("div",{className:"workspace-preview reveal",children:[(0,n.jsx)("div",{className:"preview-tabs",role:"tablist","aria-label":"Product preview",children:i.map((t,a)=>(0,n.jsx)("button",{id:t.id,type:"button",role:"tab","aria-selected":a===e,"aria-controls":"preview-panel",tabIndex:a===e?0:-1,onClick:()=>c(a),onKeyDown:e=>{var t,n;let r;return t=i.length,void("ArrowRight"===e.key&&(r=(a+1)%t),"ArrowLeft"===e.key&&(r=(a-1+t)%t),"Home"===e.key&&(r=0),"End"===e.key&&(r=t-1),void 0!==r&&(e.preventDefault(),c(r),null==(n=document.getElementById(i[r].id))||n.focus()))},children:t.label},t.id))}),(0,n.jsxs)("div",{id:"preview-panel",role:"tabpanel","aria-labelledby":i[e].id,"data-preview":i[e].key,tabIndex:0,ref:o,children:[(0,n.jsxs)("picture",{id:"preview-picture",hidden:a,children:[(0,n.jsx)("source",{media:"(max-width: 600px)",srcSet:null==l?void 0:l.mobile}),(0,n.jsx)("img",{id:"preview-image",src:null==l?void 0:l.src,alt:null==l?void 0:l.alt,width:1360,height:608,loading:"lazy",decoding:"async"})]}),(0,n.jsxs)("article",{id:"preview-explanation",hidden:!a,children:[(0,n.jsxs)("div",{className:"explanation-heading",children:[(0,n.jsx)("span",{children:"Why this run failed"}),(0,n.jsx)("span",{className:"explanation-badge",children:"Scripted example"})]}),(0,n.jsx)("h3",{children:"Issue created. On-call never notified."}),(0,n.jsxs)("div",{className:"explanation-grid",children:[(0,n.jsxs)("section",{className:"explanation-cause","aria-labelledby":"explanation-cause-title",children:[(0,n.jsx)("h4",{id:"explanation-cause-title",children:"What happened"}),(0,n.jsxs)("ol",{className:"explanation-trace",children:[(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"01"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"The agent opened an issue"}),(0,n.jsx)("p",{children:"A support agent created a P1 escalation in Linear."})]})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"02"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Slack was unavailable"}),(0,n.jsx)("p",{children:"The alert to the on-call engineer failed to send."})]})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"03"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"The alert was lost"}),(0,n.jsx)("p",{children:"No pending alert was saved, so the engineer was never notified."})]})]})]})]}),(0,n.jsxs)("section",{className:"explanation-fix","aria-labelledby":"explanation-fix-title",children:[(0,n.jsx)("h4",{id:"explanation-fix-title",children:"Change to try"}),(0,n.jsxs)("p",{children:["Keep the created issue. ",(0,n.jsx)("strong",{children:"Save the pending alert"})," and retry its delivery when Slack recovers."]}),(0,n.jsxs)("div",{className:"explanation-expected",children:[(0,n.jsx)("span",{children:"Expected after recovery"}),(0,n.jsx)("strong",{children:"1 issue \xb7 1 alert"})]}),(0,n.jsx)("p",{className:"explanation-rerun",children:"Rerun the outage. Verify the alert arrives after recovery and no second issue is created."})]})]}),(0,n.jsxs)("a",{className:"explanation-link",href:"/demo/",children:["Explore diagnosis in the demo ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]})]})]})}},3982:(e,t,a)=>{Promise.resolve().then(a.bind(a,8474)),Promise.resolve().then(a.bind(a,9443)),Promise.resolve().then(a.bind(a,7619)),Promise.resolve().then(a.bind(a,5614)),Promise.resolve().then(a.bind(a,3069)),Promise.resolve().then(a.bind(a,5343)),Promise.resolve().then(a.bind(a,9525)),Promise.resolve().then(a.bind(a,7938)),Promise.resolve().then(a.bind(a,4921))},4921:(e,t,a)=>{"use strict";a.d(t,{default:()=>i});var n=a(1778),r=a(5226);let s=[{id:"support",logo:"co-pylon.png",company:"Pylon",tag:"B2B support agent",badge:"SUPPORT",world:"pylon-support-twin",blurb:"A B2B SaaS company runs support through an agent: look up the account, decide the credit, file the engineering escalation, and answer the customer once. The stack below is the one a team like this actually runs.",tools:[{n:"Slack",i:"slack.svg"},{n:"HubSpot",i:"hubspot.svg"},{n:"Stripe",i:"stripe.svg"},{n:"Linear",i:"linear.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Notion",i:"notion.svg"},{n:"GitHub",i:"github.svg"},{n:"Datadog",i:"datadog.svg"},{n:"Okta",i:"okta.svg"}],runs:["Issue billing credit \xb7 account #8841","Escalate P1 \xb7 SLA at risk \xb7 ticket #4412","Summarize 40-message thread \xb7 enterprise account"]},{id:"ecom",logo:"co-intercom.svg",company:"Intercom",tag:"E-commerce support agent",badge:"SUPPORT",world:"intercom-returns-twin",blurb:"A Shopify brand lets a support agent resolve post-purchase conversations: find the order, approve the return or exchange, process the refund, and message the shopper in the brand voice.",tools:[{n:"Shopify",i:"shopify.svg"},{n:"Intercom",i:"intercom.svg"},{n:"Stripe",i:"stripe.svg"},{n:"Klaviyo",i:"klaviyo.png"},{n:"Slack",i:"slack.svg"},{n:"Notion",i:"notion.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"}],runs:["Resolve post-purchase return \xb7 order #2210","Change delivery address \xb7 order #88231","Refund damaged item \xb7 order #40117"]},{id:"finance",logo:"co-ramp.png",company:"Ramp",tag:"Accounts payable agent",badge:"FINANCE",world:"ramp-ap-twin",blurb:"A finance team runs an AP agent: read the vendor invoice out of the inbox, code the line items against the ledger, check for duplicates, route the approval, and schedule the payment.",tools:[{n:"Gmail",i:"gmail.svg"},{n:"NetSuite",i:"netsuite.png"},{n:"Slack",i:"slack.svg"},{n:"Bank rail",i:"bank.svg"},{n:"Snowflake",i:"snowflake.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Okta",i:"okta.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Process vendor invoice \xb7 INV-40981","Approval escalation \xb7 bill #7712 over threshold","Duplicate vendor onboarding \xb7 ACME Corp"]},{id:"gtm",logo:"co-clay.png",company:"Clay",tag:"GTM agent",badge:"GTM",world:"clay-gtm-twin",blurb:"A revenue team runs an agent that enriches each inbound lead, scores it against the ICP, routes it to the right rep, and writes the result back to the CRM without duplicating records.",tools:[{n:"Salesforce",i:"salesforce.svg"},{n:"HubSpot",i:"hubspot.svg"},{n:"Slack",i:"slack.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Snowflake",i:"snowflake.svg"},{n:"Mixpanel",i:"mixpanel.svg"},{n:"Notion",i:"notion.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Enrich inbound lead \xb7 acme.io","Round-robin routing \xb7 14 leads \xb7 3 territories","Write enrichment back to CRM \xb7 320 records"]},{id:"coding",logo:"co-cognition.png",company:"Cognition",tag:"Coding agent",badge:"ENGINEERING",world:"cognition-coding-twin",blurb:"An engineering team lets a coding agent pick up tickets: reproduce the failure, write the patch, run the migration, and roll back the release when the checks disagree.",tools:[{n:"GitHub",i:"github.svg"},{n:"npm registry",i:"npm.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Datadog",i:"datadog.svg"},{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"Linear",i:"linear.svg"}],runs:["Fix failing CI on main \xb7 PR #1842","Migrate users table \xb7 12,340 rows","Roll back bad deploy \xb7 svc-api release 4.18.2"]},{id:"oncall",logo:"co-sentry.png",company:"Sentry",tag:"On-call agent",badge:"ON-CALL",world:"sentry-oncall-twin",blurb:"An on-call agent watches the error stream: group the new issue, open the incident, page the right responder, and write the root cause summary once the error rate settles.",tools:[{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"GitHub",i:"github.svg"},{n:"Linear",i:"linear.svg"},{n:"Datadog",i:"datadog.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Okta",i:"okta.svg"},{n:"Postgres",i:"postgres.svg"}],runs:["Triage new issue \xb7 checkout-api","Page on-call \xb7 error spike 5x baseline","Root cause summary \xb7 47 events after resolution"]},{id:"healthcare",logo:"co-abridge.png",company:"Abridge",tag:"Clinical documentation agent",badge:"HEALTHCARE",world:"abridge-clinical-twin",blurb:"A health system runs a documentation agent: draft the encounter note from the visit, apply coding flags for review, and reconcile the orders against the medication list before sign-off.",tools:[{n:"EHR",i:"ehr.svg"},{n:"Clinical notes",i:"notes.svg"},{n:"Coding rules",i:"codes.svg"},{n:"Slack",i:"slack.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Okta",i:"okta.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Draft encounter note \xb7 visit #8821","Apply coding flags \xb7 12 claims for review","Reconcile orders vs medications \xb7 9 orders"]},{id:"security",logo:"co-paloalto.png",company:"Palo Alto Networks",tag:"Security triage agent",badge:"SECURITY",world:"paloalto-triage-twin",blurb:"A security operations team runs a triage agent: open the case from the SIEM alert, correlate the surrounding events, isolate the affected host, and hand the responder a complete picture.",tools:[{n:"SIEM",i:"siem.svg"},{n:"EDR",i:"edr.svg"},{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"GitHub",i:"github.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Okta",i:"okta.svg"},{n:"Datadog",i:"datadog.svg"}],runs:["Triage endpoint alert \xb7 host web-14","Correlate 5 events \xb7 suspicious egress","Isolate compromised host \xb7 laptop-207"]}];function i(){let[e,t]=(0,r.useState)(0),a=s[e],i=e=>t(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"world-tabs",id:"world-tabs",role:"tablist","aria-label":"Example company worlds",children:s.map((t,a)=>(0,n.jsxs)("button",{type:"button",id:"world-tab-".concat(t.id),role:"tab","aria-controls":"world-panel","aria-selected":a===e,tabIndex:a===e?0:-1,onClick:()=>i(a),onKeyDown:e=>{var t,n;let r;return t=s.length,void("ArrowRight"===e.key&&(r=(a+1)%t),"ArrowLeft"===e.key&&(r=(a-1+t)%t),"Home"===e.key&&(r=0),"End"===e.key&&(r=t-1),void 0!==r&&(e.preventDefault(),i(r),null==(n=document.getElementById("world-tab-".concat(s[r].id)))||n.focus()))},children:[(0,n.jsx)("img",{src:"assets/icons/".concat(t.logo),alt:"",width:21,height:21}),t.company]},t.id))}),(0,n.jsxs)("div",{className:"world-panel",id:"world-panel",role:"tabpanel","aria-labelledby":"world-tab-".concat(a.id),tabIndex:0,children:[(0,n.jsxs)("div",{className:"world-copy",children:[(0,n.jsxs)("div",{className:"world-heading",children:[(0,n.jsx)("img",{id:"world-logo",src:"assets/icons/".concat(a.logo),alt:"",width:44,height:44}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{id:"world-name",children:a.company}),(0,n.jsx)("span",{id:"world-tag",children:a.tag})]}),(0,n.jsx)("span",{className:"outline-label",children:"Illustrative"})]}),(0,n.jsx)("p",{id:"world-description",children:a.blurb.replace("The stack below is the one a team like this actually runs.","The stack below is illustrative.")}),(0,n.jsxs)("a",{className:"text-link",href:"/demo/",children:["Explore the world in the prototype ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]}),(0,n.jsxs)("div",{className:"world-detail",children:[(0,n.jsx)("h4",{children:"Example dependencies"}),(0,n.jsx)("ul",{id:"world-tools",children:a.tools.map(e=>(0,n.jsxs)("li",{children:[(0,n.jsx)("img",{src:"assets/icons/".concat(e.i),alt:"",width:21,height:21}),e.n]},e.n))}),(0,n.jsx)("h4",{children:"Workflows to exercise"}),(0,n.jsx)("ul",{id:"world-runs",className:"world-runs",children:a.runs.map(e=>(0,n.jsx)("li",{children:e},e))})]})]})]})}},5343:(e,t,a)=>{"use strict";a.d(t,{default:()=>r});var n=a(5226);function r(){return(0,n.useEffect)(()=>{if(matchMedia("(prefers-reduced-motion: reduce)").matches)return;let e=document.querySelectorAll(".reveal");e.forEach(e=>e.classList.add("is-pending"));let t=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(e.target.classList.remove("is-pending"),t.unobserve(e.target))})},{threshold:.08});return e.forEach(e=>t.observe(e)),()=>t.disconnect()},[]),null}},5614:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(e){let{children:t}=e,a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=a.current;if(!e||e.children.length>1)return;let t=e.firstElementChild;if(!t)return;let n=t.cloneNode(!0);n.setAttribute("aria-hidden","true"),n.querySelectorAll("img").forEach(e=>{e.alt=""}),e.append(n),e.classList.add("is-ready")},[]),(0,n.jsx)("div",{className:"logo-marquee","aria-label":"Potential service coverage",children:(0,n.jsx)("div",{className:"logo-track",ref:a,children:t})})}},7619:(e,t,a)=>{"use strict";a.d(t,{default:()=>o});var n=a(1778),r=a(5226);function s(e){let{text:t}=e,a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=a.current;if(!e)return;let n=document.createElement("div");n.className="arc-track";let r=[..."".concat(t," \xb7 ")];for(let e=0;e<6;e++)r.forEach((t,a)=>{let s=document.createElement("span");s.textContent=t;let i=(a-(r.length-1)/2)*60/r.length+60*e;s.style.transform="translateX(-50%) rotate(".concat(i,"deg)"),n.append(s)});return e.append(n),()=>n.remove()},[t]),(0,n.jsx)("div",{className:"arc-label","aria-hidden":"true","data-arc":t,ref:a})}async function i(e){var t;if(null==(t=navigator.clipboard)?void 0:t.writeText)try{await navigator.clipboard.writeText(e);return}catch(e){}let a=document.createElement("textarea");a.value=e,a.readOnly=!0,a.tabIndex=-1,a.style.cssText="position:fixed;top:0;left:0;opacity:0;pointer-events:none",document.body.append(a),a.select();try{if(!document.execCommand("copy"))throw Error("Copy unavailable")}finally{a.remove()}}function l(){let[e,t]=(0,r.useState)("idle"),a=(0,r.useRef)(!1),s=(0,r.useRef)(void 0),l=(0,r.useCallback)(async e=>{let n=e.currentTarget;if(!a.current){a.current=!0,clearTimeout(s.current),t("idle");try{await i(n.querySelector("code").textContent.trim()),t("success"),s.current=setTimeout(()=>t("idle"),3e3)}catch(e){t("error")}finally{a.current=!1}}},[]);return(0,n.jsxs)("div",{className:"command-action",children:[(0,n.jsxs)("button",{className:"button button-outline button-command",type:"button","aria-label":"Copy npx agenttwin init",title:"Copy command","data-copy-state":"idle"===e?void 0:e,onClick:l,children:[(0,n.jsxs)("span",{className:"pearl-spark","aria-hidden":"true",children:[(0,n.jsx)("span",{children:"✧"}),(0,n.jsx)("span",{children:"✦"})]}),(0,n.jsx)("code",{children:"npx agenttwin init"}),(0,n.jsxs)("svg",{className:"copy-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"8",y:"8",width:"12",height:"12",rx:"2"}),(0,n.jsx)("path",{d:"M16 8V4a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h4"})]}),(0,n.jsx)("svg",{className:"copy-done",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"m5 12 4 4L19 6"})})]}),(0,n.jsx)("span",{className:"copy-feedback",role:"status","aria-live":"polite","aria-atomic":"true",children:"success"===e?"Copied!":"error"===e?"Copy unavailable. Select the command to copy it.":""})]})}function o(){let e=(0,r.useRef)(null),t=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let a=e.current,n=t.current,r=null==a?void 0:a.getContext("2d");if(!a||!n||!r)return;let s=matchMedia("(prefers-reduced-motion: reduce)"),i=(e,t)=>{let a=document.createElement("canvas");return a.width=a.height=e,t(a.getContext("2d"),e),a},l=i(64,(e,t)=>{let a=e.createRadialGradient(t/2,t/2,0,t/2,t/2,t/2);a.addColorStop(0,"rgba(255,255,255,.85)"),a.addColorStop(.16,"rgba(255,255,255,.32)"),a.addColorStop(.45,"rgba(255,255,255,.08)"),a.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=a,e.fillRect(0,0,t,t)}),o=i(64,(e,t)=>{let a=t/2;for(let n of[0,Math.PI/2]){e.save(),e.translate(a,a),e.rotate(n);let r=e.createLinearGradient(-a,0,a,0);r.addColorStop(0,"rgba(255,255,255,0)"),r.addColorStop(.5,"rgba(255,255,255,.9)"),r.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=r,e.fillRect(-a,-.75,t,1.5),e.restore()}e.globalCompositeOperation="destination-in";let n=e.createRadialGradient(a,a,0,a,a,a);n.addColorStop(0,"rgba(0,0,0,1)"),n.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=n,e.fillRect(0,0,t,t)}),c=0,d=0,h=0,u=!0,g=0,p=[],m=e=>{for(let t of(r.clearRect(0,0,c,d),r.globalCompositeOperation="lighter",p)){let a=s.matches?.6:.5+.5*Math.sin(e*t.speed+t.phase),n=a*a*(3-2*a),i=t.opacity*(.55+.45*n);if(t.bright){let e=18+26*n;r.globalAlpha=Math.min(1,1.2*i),r.drawImage(l,t.x-e/2,t.y-e/2,e,e);let a=20+32*n;r.globalAlpha=.85*i,r.drawImage(o,t.x-a/2,t.y-a/2,a,a)}else if(t.size>1.3){let e=10+10*n;r.globalAlpha=i,r.drawImage(l,t.x-e/2,t.y-e/2,e,e)}r.globalAlpha=Math.min(1,1.25*i),r.fillStyle="#fff",r.fillRect(t.x,t.y,t.size,t.size)}r.globalAlpha=1,r.globalCompositeOperation="source-over"},v=()=>{let e=a.getBoundingClientRect();c=e.width,d=e.height;let t=Math.min(devicePixelRatio||1,2);a.width=Math.round(c*t),a.height=Math.round(d*t),r.setTransform(t,0,0,t,0,0),p=[];for(let e=3;e<d;e+=8)for(let t=3;t<c;t+=8){let a=Math.max(0,Math.min(1,(1-Math.hypot(Math.min(t,c-t)/(.48*c),e/(1.3*d)))/1.25)),n=a*a*(3-2*a);if(n<=0)continue;let r=Math.abs(43758.5453*Math.sin(12.9898*t+78.233*e)%1);p.push({x:t,y:e,opacity:n*(.5+.5*r),size:r>.985?2.4:r>.9?1.6:1.1,bright:r>.985,phase:r*Math.PI*2,speed:8e-4+7*r%1*.0017})}m(0)},x=e=>{e-g>33&&(m(e),g=e),h=requestAnimationFrame(x)},b=n.querySelector("[data-arc]"),f=()=>{if(null==b||b.classList.toggle("is-paused",!u||document.hidden),cancelAnimationFrame(h),s.matches||!u||document.hidden)return void m(0);h=requestAnimationFrame(x)},w=new ResizeObserver(v);w.observe(a);let y=new IntersectionObserver(e=>{u=e[0].isIntersecting,f()});y.observe(n),document.addEventListener("visibilitychange",f);let j=()=>f();return s.addEventListener("change",j),v(),()=>{cancelAnimationFrame(h),w.disconnect(),y.disconnect(),document.removeEventListener("visibilitychange",f),s.removeEventListener("change",j)}},[e,t]),(0,n.jsxs)("section",{className:"hero","aria-labelledby":"hero-title",ref:t,children:[(0,n.jsxs)("div",{className:"hero-light","aria-hidden":"true",children:[(0,n.jsx)("div",{className:"hero-wash"}),(0,n.jsx)("div",{className:"hero-bloom"}),(0,n.jsx)("div",{className:"hero-halo"}),(0,n.jsx)("div",{className:"hero-horizon"})]}),(0,n.jsx)("canvas",{className:"hero-particles","aria-hidden":"true",ref:e}),(0,n.jsx)("div",{className:"hero-floor","aria-hidden":"true",children:(0,n.jsx)("div",{})}),(0,n.jsxs)("div",{className:"hero-content",children:[(0,n.jsx)(s,{text:"Production conditions \xb7 A safe test world"}),(0,n.jsxs)("h1",{id:"hero-title",children:[(0,n.jsx)("span",{children:"Test production conditions."})," ",(0,n.jsx)("span",{children:"Find what breaks before you ship."})]}),(0,n.jsxs)("p",{children:["Give your application or AI agent a safe replica.",(0,n.jsx)("br",{className:"mobile-break"})," Run the workflow, introduce failures, and inspect the result."]}),(0,n.jsxs)("div",{className:"actions hero-actions",children:[(0,n.jsxs)("a",{className:"button button-outline",href:"/demo/",children:["Explore the demo ",(0,n.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]}),(0,n.jsx)("a",{className:"button button-white",href:"https://cal.com/sashanksingh",target:"_blank",rel:"noopener noreferrer",children:"Book a call"}),(0,n.jsx)(l,{})]})]}),(0,n.jsx)("a",{className:"hero-capture",href:"/demo/","aria-label":"Explore the AgentTwin workspace in the interactive demo",children:(0,n.jsx)("img",{src:"assets/img/hero-replica-desktop.png",width:1360,height:608,alt:"AgentTwin workspace showing connected services, synthetic data, and safe replica settings",fetchPriority:"high",decoding:"async"})})]})}},7938:(e,t,a)=>{"use strict";a.d(t,{default:()=>r});var n=a(5226);function r(){return(0,n.useEffect)(()=>{let e=[...document.querySelectorAll(".workflow-nav a")],t=new IntersectionObserver(t=>{t.forEach(t=>{t.isIntersecting&&e.forEach(e=>{e.hash==="#".concat(t.target.id)?e.setAttribute("aria-current","step"):e.removeAttribute("aria-current")})})},{rootMargin:"-15% 0px -55% 0px"});return document.querySelectorAll(".workflow-chapter").forEach(e=>t.observe(e)),()=>t.disconnect()},[]),null}},8474:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(e){let{children:t}=e,a=(0,r.useRef)(null);return(0,n.jsx)("div",{className:"faq-items",ref:a,onToggle:e=>{var t;let n=e.target;n.open&&(null==(t=a.current)||t.querySelectorAll("details").forEach(e=>{e!==n&&(e.open=!1)}))},children:t})}},9443:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(){let[e,t]=(0,r.useState)(!1);return(0,n.jsxs)("article",{className:"visual-card reveal",children:[(0,n.jsx)("div",{className:"card-visual grid-pattern",children:(0,n.jsxs)("div",{className:"trace-preview".concat(e?" is-failed":""),"aria-live":"polite",children:[(0,n.jsx)("span",{className:"mini-label",children:"Illustrative refund scenario"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:["Refund created",(0,n.jsx)("small",{children:"Provider commits the write"})]}),(0,n.jsx)("span",{className:"trace-tag",children:"200"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:[e?"Response lost":"Response received",(0,n.jsx)("small",{children:e?"Worker retries the request":"Worker records the result"})]}),(0,n.jsx)("span",{className:"trace-tag",children:e?"TIMEOUT":"OK"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:[e?"Two refunds exist":"One refund exists",(0,n.jsx)("small",{children:e?"Illustrative unsafe retry outcome":"Expected final state"})]})]})]})}),(0,n.jsxs)("div",{className:"visual-card-copy",children:[(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"Retries with consequences."})," A write can succeed even when its response never arrives."]}),(0,n.jsxs)("button",{className:"text-link",type:"button",onClick:()=>t(!e),children:[e?"Reset the scenario ":"Introduce a timeout ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]})]})}},9525:(e,t,a)=>{"use strict";a.d(t,{default:()=>i});var n=a(1778),r=a(5226);let s=[{href:"/#worlds",label:"Worlds"},{href:"/#how",label:"How it works"},{href:"/#failures",label:"Failures"},{href:"/#pricing",label:"Pricing"},{href:"/enterprise/",label:"Enterprise"},{href:"/docs/",label:"Docs"}];function i(){let[e,t]=(0,r.useState)(!1),a=(0,r.useRef)(null),i=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{var n,r;"Escape"===e.key&&(null==(n=i.current)?void 0:n.querySelector("#navlinks.is-open"))&&(t(!1),null==(r=a.current)||r.focus())},n=e=>{var a;(null==(a=i.current)?void 0:a.contains(e.target))||t(!1)},r=matchMedia("(min-width: 1024px)"),s=()=>t(!1);return document.addEventListener("keydown",e),document.addEventListener("click",n),r.addEventListener("change",s),()=>{document.removeEventListener("keydown",e),document.removeEventListener("click",n),r.removeEventListener("change",s)}},[]),(0,n.jsxs)("header",{className:"site-header",ref:i,children:[(0,n.jsxs)("a",{className:"brand",href:"/","aria-label":"AgentTwin home",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg?v=white-rings",alt:"",width:29,height:29}),"AgentTwin"]}),(0,n.jsxs)("nav",{className:"main-nav".concat(e?" is-open":""),id:"navlinks","aria-label":"Main navigation",children:[s.map(e=>(0,n.jsx)("a",{href:e.href,onClick:()=>t(!1),children:e.label},e.href)),(0,n.jsx)("a",{className:"nav-mobile-dashboard",href:"/dashboard/",onClick:()=>t(!1),children:"Open dashboard"})]}),(0,n.jsxs)("div",{className:"nav-actions",children:[(0,n.jsx)("a",{href:"/login/",children:"Sign in"}),(0,n.jsxs)("a",{className:"button button-white button-small",href:"/signup/",children:["Get started ",(0,n.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]})]}),(0,n.jsxs)("button",{className:"menu-toggle",ref:a,type:"button","aria-label":e?"Close menu":"Open menu","aria-expanded":e,"aria-controls":"navlinks",onClick:()=>t(!e),children:[(0,n.jsx)("span",{}),(0,n.jsx)("span",{})]})]})}}},e=>{e.O(0,[7903,4816,7358],()=>e(e.s=3982)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{3069:(e,t,a)=>{"use strict";a.d(t,{default:()=>l});var n=a(1778),r=a(5226);let s={replica:{src:"assets/img/hero-replica-desktop.png",mobile:"assets/img/hero-replica-mobile.png",alt:"AgentTwin workspace showing a synthetic Pylon environment and replica settings"},faults:{src:"assets/img/step-4-faults.png",mobile:"assets/img/current-faults.png",alt:"AgentTwin prototype with failure conditions selected for a scripted test run"},result:{src:"assets/img/step-5-fail.png",mobile:"assets/img/current-result.png",alt:"AgentTwin prototype showing a failed assertion and the resulting state changes"}},i=[{id:"preview-tab-replica",key:"replica",label:"Create a replica"},{id:"preview-tab-faults",key:"faults",label:"Introduce failures"},{id:"preview-tab-result",key:"result",label:"Inspect the result"},{id:"preview-tab-explain",key:"explain",label:"Explain the result"}];function l(){let[e,t]=(0,r.useState)(0),a="explain"===i[e].key,l=s[i[e].key],o=(0,r.useRef)(null),c=e=>{var a;t(e),null==(a=o.current)||a.setAttribute("aria-labelledby",i[e].id)};return(0,n.jsxs)("div",{className:"workspace-preview reveal",children:[(0,n.jsx)("div",{className:"preview-tabs",role:"tablist","aria-label":"Product preview",children:i.map((t,a)=>(0,n.jsx)("button",{id:t.id,type:"button",role:"tab","aria-selected":a===e,"aria-controls":"preview-panel",tabIndex:a===e?0:-1,onClick:()=>c(a),onKeyDown:e=>{var t,n;let r;return t=i.length,void("ArrowRight"===e.key&&(r=(a+1)%t),"ArrowLeft"===e.key&&(r=(a-1+t)%t),"Home"===e.key&&(r=0),"End"===e.key&&(r=t-1),void 0!==r&&(e.preventDefault(),c(r),null==(n=document.getElementById(i[r].id))||n.focus()))},children:t.label},t.id))}),(0,n.jsxs)("div",{id:"preview-panel",role:"tabpanel","aria-labelledby":i[e].id,"data-preview":i[e].key,tabIndex:0,ref:o,children:[(0,n.jsxs)("picture",{id:"preview-picture",hidden:a,children:[(0,n.jsx)("source",{media:"(max-width: 600px)",srcSet:null==l?void 0:l.mobile}),(0,n.jsx)("img",{id:"preview-image",src:null==l?void 0:l.src,alt:null==l?void 0:l.alt,width:1360,height:608,loading:"lazy",decoding:"async"})]}),(0,n.jsxs)("article",{id:"preview-explanation",hidden:!a,children:[(0,n.jsxs)("div",{className:"explanation-heading",children:[(0,n.jsx)("span",{children:"Why this run failed"}),(0,n.jsx)("span",{className:"explanation-badge",children:"Scripted example"})]}),(0,n.jsx)("h3",{children:"Issue created. On-call never notified."}),(0,n.jsxs)("div",{className:"explanation-grid",children:[(0,n.jsxs)("section",{className:"explanation-cause","aria-labelledby":"explanation-cause-title",children:[(0,n.jsx)("h4",{id:"explanation-cause-title",children:"What happened"}),(0,n.jsxs)("ol",{className:"explanation-trace",children:[(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"01"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"The agent opened an issue"}),(0,n.jsx)("p",{children:"A support agent created a P1 escalation in Linear."})]})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"02"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"Slack was unavailable"}),(0,n.jsx)("p",{children:"The alert to the on-call engineer failed to send."})]})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("span",{"aria-hidden":"true",children:"03"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("strong",{children:"The alert was lost"}),(0,n.jsx)("p",{children:"No pending alert was saved, so the engineer was never notified."})]})]})]})]}),(0,n.jsxs)("section",{className:"explanation-fix","aria-labelledby":"explanation-fix-title",children:[(0,n.jsx)("h4",{id:"explanation-fix-title",children:"Change to try"}),(0,n.jsxs)("p",{children:["Keep the created issue. ",(0,n.jsx)("strong",{children:"Save the pending alert"})," and retry its delivery when Slack recovers."]}),(0,n.jsxs)("div",{className:"explanation-expected",children:[(0,n.jsx)("span",{children:"Expected after recovery"}),(0,n.jsx)("strong",{children:"1 issue \xb7 1 alert"})]}),(0,n.jsx)("p",{className:"explanation-rerun",children:"Rerun the outage. Verify the alert arrives after recovery and no second issue is created."})]})]}),(0,n.jsxs)("a",{className:"explanation-link",href:"/demo/",children:["Explore diagnosis in the demo ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]})]})]})}},4921:(e,t,a)=>{"use strict";a.d(t,{default:()=>i});var n=a(1778),r=a(5226);let s=[{id:"support",logo:"co-pylon.png",company:"Pylon",tag:"B2B support agent",badge:"SUPPORT",world:"pylon-support-twin",blurb:"A B2B SaaS company runs support through an agent: look up the account, decide the credit, file the engineering escalation, and answer the customer once. The stack below is the one a team like this actually runs.",tools:[{n:"Slack",i:"slack.svg"},{n:"HubSpot",i:"hubspot.svg"},{n:"Stripe",i:"stripe.svg"},{n:"Linear",i:"linear.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Notion",i:"notion.svg"},{n:"GitHub",i:"github.svg"},{n:"Datadog",i:"datadog.svg"},{n:"Okta",i:"okta.svg"}],runs:["Issue billing credit \xb7 account #8841","Escalate P1 \xb7 SLA at risk \xb7 ticket #4412","Summarize 40-message thread \xb7 enterprise account"]},{id:"ecom",logo:"co-intercom.svg",company:"Intercom",tag:"E-commerce support agent",badge:"SUPPORT",world:"intercom-returns-twin",blurb:"A Shopify brand lets a support agent resolve post-purchase conversations: find the order, approve the return or exchange, process the refund, and message the shopper in the brand voice.",tools:[{n:"Shopify",i:"shopify.svg"},{n:"Intercom",i:"intercom.svg"},{n:"Stripe",i:"stripe.svg"},{n:"Klaviyo",i:"klaviyo.png"},{n:"Slack",i:"slack.svg"},{n:"Notion",i:"notion.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"}],runs:["Resolve post-purchase return \xb7 order #2210","Change delivery address \xb7 order #88231","Refund damaged item \xb7 order #40117"]},{id:"finance",logo:"co-ramp.png",company:"Ramp",tag:"Accounts payable agent",badge:"FINANCE",world:"ramp-ap-twin",blurb:"A finance team runs an AP agent: read the vendor invoice out of the inbox, code the line items against the ledger, check for duplicates, route the approval, and schedule the payment.",tools:[{n:"Gmail",i:"gmail.svg"},{n:"NetSuite",i:"netsuite.png"},{n:"Slack",i:"slack.svg"},{n:"Bank rail",i:"bank.svg"},{n:"Snowflake",i:"snowflake.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Okta",i:"okta.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Process vendor invoice \xb7 INV-40981","Approval escalation \xb7 bill #7712 over threshold","Duplicate vendor onboarding \xb7 ACME Corp"]},{id:"gtm",logo:"co-clay.png",company:"Clay",tag:"GTM agent",badge:"GTM",world:"clay-gtm-twin",blurb:"A revenue team runs an agent that enriches each inbound lead, scores it against the ICP, routes it to the right rep, and writes the result back to the CRM without duplicating records.",tools:[{n:"Salesforce",i:"salesforce.svg"},{n:"HubSpot",i:"hubspot.svg"},{n:"Slack",i:"slack.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Snowflake",i:"snowflake.svg"},{n:"Mixpanel",i:"mixpanel.svg"},{n:"Notion",i:"notion.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Enrich inbound lead \xb7 acme.io","Round-robin routing \xb7 14 leads \xb7 3 territories","Write enrichment back to CRM \xb7 320 records"]},{id:"coding",logo:"co-cognition.png",company:"Cognition",tag:"Coding agent",badge:"ENGINEERING",world:"cognition-coding-twin",blurb:"An engineering team lets a coding agent pick up tickets: reproduce the failure, write the patch, run the migration, and roll back the release when the checks disagree.",tools:[{n:"GitHub",i:"github.svg"},{n:"npm registry",i:"npm.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Datadog",i:"datadog.svg"},{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"Linear",i:"linear.svg"}],runs:["Fix failing CI on main \xb7 PR #1842","Migrate users table \xb7 12,340 rows","Roll back bad deploy \xb7 svc-api release 4.18.2"]},{id:"oncall",logo:"co-sentry.png",company:"Sentry",tag:"On-call agent",badge:"ON-CALL",world:"sentry-oncall-twin",blurb:"An on-call agent watches the error stream: group the new issue, open the incident, page the right responder, and write the root cause summary once the error rate settles.",tools:[{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"GitHub",i:"github.svg"},{n:"Linear",i:"linear.svg"},{n:"Datadog",i:"datadog.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Okta",i:"okta.svg"},{n:"Postgres",i:"postgres.svg"}],runs:["Triage new issue \xb7 checkout-api","Page on-call \xb7 error spike 5x baseline","Root cause summary \xb7 47 events after resolution"]},{id:"healthcare",logo:"co-abridge.png",company:"Abridge",tag:"Clinical documentation agent",badge:"HEALTHCARE",world:"abridge-clinical-twin",blurb:"A health system runs a documentation agent: draft the encounter note from the visit, apply coding flags for review, and reconcile the orders against the medication list before sign-off.",tools:[{n:"EHR",i:"ehr.svg"},{n:"Clinical notes",i:"notes.svg"},{n:"Coding rules",i:"codes.svg"},{n:"Slack",i:"slack.svg"},{n:"Gmail",i:"gmail.svg"},{n:"Postgres",i:"postgres.svg"},{n:"Okta",i:"okta.svg"},{n:"Calendar",i:"google-calendar.svg"}],runs:["Draft encounter note \xb7 visit #8821","Apply coding flags \xb7 12 claims for review","Reconcile orders vs medications \xb7 9 orders"]},{id:"security",logo:"co-paloalto.png",company:"Palo Alto Networks",tag:"Security triage agent",badge:"SECURITY",world:"paloalto-triage-twin",blurb:"A security operations team runs a triage agent: open the case from the SIEM alert, correlate the surrounding events, isolate the affected host, and hand the responder a complete picture.",tools:[{n:"SIEM",i:"siem.svg"},{n:"EDR",i:"edr.svg"},{n:"PagerDuty",i:"pagerduty.svg"},{n:"Slack",i:"slack.svg"},{n:"GitHub",i:"github.svg"},{n:"AWS EC2",i:"aws.svg"},{n:"Terraform",i:"terraform.svg"},{n:"Okta",i:"okta.svg"},{n:"Datadog",i:"datadog.svg"}],runs:["Triage endpoint alert \xb7 host web-14","Correlate 5 events \xb7 suspicious egress","Isolate compromised host \xb7 laptop-207"]}];function i(){let[e,t]=(0,r.useState)(0),a=s[e],i=e=>t(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"world-tabs",id:"world-tabs",role:"tablist","aria-label":"Example company worlds",children:s.map((t,a)=>(0,n.jsxs)("button",{type:"button",id:"world-tab-".concat(t.id),role:"tab","aria-controls":"world-panel","aria-selected":a===e,tabIndex:a===e?0:-1,onClick:()=>i(a),onKeyDown:e=>{var t,n;let r;return t=s.length,void("ArrowRight"===e.key&&(r=(a+1)%t),"ArrowLeft"===e.key&&(r=(a-1+t)%t),"Home"===e.key&&(r=0),"End"===e.key&&(r=t-1),void 0!==r&&(e.preventDefault(),i(r),null==(n=document.getElementById("world-tab-".concat(s[r].id)))||n.focus()))},children:[(0,n.jsx)("img",{src:"assets/icons/".concat(t.logo),alt:"",width:21,height:21}),t.company]},t.id))}),(0,n.jsxs)("div",{className:"world-panel",id:"world-panel",role:"tabpanel","aria-labelledby":"world-tab-".concat(a.id),tabIndex:0,children:[(0,n.jsxs)("div",{className:"world-copy",children:[(0,n.jsxs)("div",{className:"world-heading",children:[(0,n.jsx)("img",{id:"world-logo",src:"assets/icons/".concat(a.logo),alt:"",width:44,height:44}),(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{id:"world-name",children:a.company}),(0,n.jsx)("span",{id:"world-tag",children:a.tag})]}),(0,n.jsx)("span",{className:"outline-label",children:"Illustrative"})]}),(0,n.jsx)("p",{id:"world-description",children:a.blurb.replace("The stack below is the one a team like this actually runs.","The stack below is illustrative.")}),(0,n.jsxs)("a",{className:"text-link",href:"/demo/",children:["Explore the world in the prototype ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]}),(0,n.jsxs)("div",{className:"world-detail",children:[(0,n.jsx)("h4",{children:"Example dependencies"}),(0,n.jsx)("ul",{id:"world-tools",children:a.tools.map(e=>(0,n.jsxs)("li",{children:[(0,n.jsx)("img",{src:"assets/icons/".concat(e.i),alt:"",width:21,height:21}),e.n]},e.n))}),(0,n.jsx)("h4",{children:"Workflows to exercise"}),(0,n.jsx)("ul",{id:"world-runs",className:"world-runs",children:a.runs.map(e=>(0,n.jsx)("li",{children:e},e))})]})]})]})}},5343:(e,t,a)=>{"use strict";a.d(t,{default:()=>r});var n=a(5226);function r(){return(0,n.useEffect)(()=>{if(matchMedia("(prefers-reduced-motion: reduce)").matches)return;let e=document.querySelectorAll(".reveal");e.forEach(e=>e.classList.add("is-pending"));let t=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&(e.target.classList.remove("is-pending"),t.unobserve(e.target))})},{threshold:.08});return e.forEach(e=>t.observe(e)),()=>t.disconnect()},[]),null}},5614:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(e){let{children:t}=e,a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=a.current;if(!e||e.children.length>1)return;let t=e.firstElementChild;if(!t)return;let n=t.cloneNode(!0);n.setAttribute("aria-hidden","true"),n.querySelectorAll("img").forEach(e=>{e.alt=""}),e.append(n),e.classList.add("is-ready")},[]),(0,n.jsx)("div",{className:"logo-marquee","aria-label":"Potential service coverage",children:(0,n.jsx)("div",{className:"logo-track",ref:a,children:t})})}},7128:(e,t,a)=>{Promise.resolve().then(a.bind(a,8474)),Promise.resolve().then(a.bind(a,9443)),Promise.resolve().then(a.bind(a,7619)),Promise.resolve().then(a.bind(a,5614)),Promise.resolve().then(a.bind(a,3069)),Promise.resolve().then(a.bind(a,5343)),Promise.resolve().then(a.bind(a,9525)),Promise.resolve().then(a.bind(a,7938)),Promise.resolve().then(a.bind(a,4921))},7619:(e,t,a)=>{"use strict";a.d(t,{default:()=>o});var n=a(1778),r=a(5226);function s(e){let{text:t}=e,a=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=a.current;if(!e)return;let n=document.createElement("div");n.className="arc-track";let r=[..."".concat(t," \xb7 ")];for(let e=0;e<6;e++)r.forEach((t,a)=>{let s=document.createElement("span");s.textContent=t;let i=(a-(r.length-1)/2)*60/r.length+60*e;s.style.transform="translateX(-50%) rotate(".concat(i,"deg)"),n.append(s)});return e.append(n),()=>n.remove()},[t]),(0,n.jsx)("div",{className:"arc-label","aria-hidden":"true","data-arc":t,ref:a})}async function i(e){var t;if(null==(t=navigator.clipboard)?void 0:t.writeText)try{await navigator.clipboard.writeText(e);return}catch(e){}let a=document.createElement("textarea");a.value=e,a.readOnly=!0,a.tabIndex=-1,a.style.cssText="position:fixed;top:0;left:0;opacity:0;pointer-events:none",document.body.append(a),a.select();try{if(!document.execCommand("copy"))throw Error("Copy unavailable")}finally{a.remove()}}function l(){let[e,t]=(0,r.useState)("idle"),a=(0,r.useRef)(!1),s=(0,r.useRef)(void 0),l=(0,r.useCallback)(async e=>{let n=e.currentTarget;if(!a.current){a.current=!0,clearTimeout(s.current),t("idle");try{await i(n.querySelector("code").textContent.trim()),t("success"),s.current=setTimeout(()=>t("idle"),3e3)}catch(e){t("error")}finally{a.current=!1}}},[]);return(0,n.jsxs)("div",{className:"command-action",children:[(0,n.jsxs)("button",{className:"button button-outline button-command",type:"button","aria-label":"Copy npx agenttwin init",title:"Copy command","data-copy-state":"idle"===e?void 0:e,onClick:l,children:[(0,n.jsxs)("span",{className:"pearl-spark","aria-hidden":"true",children:[(0,n.jsx)("span",{children:"✧"}),(0,n.jsx)("span",{children:"✦"})]}),(0,n.jsx)("code",{children:"npx agenttwin init"}),(0,n.jsxs)("svg",{className:"copy-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[(0,n.jsx)("rect",{x:"8",y:"8",width:"12",height:"12",rx:"2"}),(0,n.jsx)("path",{d:"M16 8V4a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v11a1 1 0 0 0 1 1h4"})]}),(0,n.jsx)("svg",{className:"copy-done",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:(0,n.jsx)("path",{d:"m5 12 4 4L19 6"})})]}),(0,n.jsx)("span",{className:"copy-feedback",role:"status","aria-live":"polite","aria-atomic":"true",children:"success"===e?"Copied!":"error"===e?"Copy unavailable. Select the command to copy it.":""})]})}function o(){let e=(0,r.useRef)(null),t=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let a=e.current,n=t.current,r=null==a?void 0:a.getContext("2d");if(!a||!n||!r)return;let s=matchMedia("(prefers-reduced-motion: reduce)"),i=(e,t)=>{let a=document.createElement("canvas");return a.width=a.height=e,t(a.getContext("2d"),e),a},l=i(64,(e,t)=>{let a=e.createRadialGradient(t/2,t/2,0,t/2,t/2,t/2);a.addColorStop(0,"rgba(255,255,255,.85)"),a.addColorStop(.16,"rgba(255,255,255,.32)"),a.addColorStop(.45,"rgba(255,255,255,.08)"),a.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=a,e.fillRect(0,0,t,t)}),o=i(64,(e,t)=>{let a=t/2;for(let n of[0,Math.PI/2]){e.save(),e.translate(a,a),e.rotate(n);let r=e.createLinearGradient(-a,0,a,0);r.addColorStop(0,"rgba(255,255,255,0)"),r.addColorStop(.5,"rgba(255,255,255,.9)"),r.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=r,e.fillRect(-a,-.75,t,1.5),e.restore()}e.globalCompositeOperation="destination-in";let n=e.createRadialGradient(a,a,0,a,a,a);n.addColorStop(0,"rgba(0,0,0,1)"),n.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=n,e.fillRect(0,0,t,t)}),c=0,d=0,h=0,u=!0,g=0,p=[],m=e=>{for(let t of(r.clearRect(0,0,c,d),r.globalCompositeOperation="lighter",p)){let a=s.matches?.6:.5+.5*Math.sin(e*t.speed+t.phase),n=a*a*(3-2*a),i=t.opacity*(.55+.45*n);if(t.bright){let e=18+26*n;r.globalAlpha=Math.min(1,1.2*i),r.drawImage(l,t.x-e/2,t.y-e/2,e,e);let a=20+32*n;r.globalAlpha=.85*i,r.drawImage(o,t.x-a/2,t.y-a/2,a,a)}else if(t.size>1.3){let e=10+10*n;r.globalAlpha=i,r.drawImage(l,t.x-e/2,t.y-e/2,e,e)}r.globalAlpha=Math.min(1,1.25*i),r.fillStyle="#fff",r.fillRect(t.x,t.y,t.size,t.size)}r.globalAlpha=1,r.globalCompositeOperation="source-over"},v=()=>{let e=a.getBoundingClientRect();c=e.width,d=e.height;let t=Math.min(devicePixelRatio||1,2);a.width=Math.round(c*t),a.height=Math.round(d*t),r.setTransform(t,0,0,t,0,0),p=[];for(let e=3;e<d;e+=8)for(let t=3;t<c;t+=8){let a=Math.max(0,Math.min(1,(1-Math.hypot(Math.min(t,c-t)/(.48*c),e/(1.3*d)))/1.25)),n=a*a*(3-2*a);if(n<=0)continue;let r=Math.abs(43758.5453*Math.sin(12.9898*t+78.233*e)%1);p.push({x:t,y:e,opacity:n*(.5+.5*r),size:r>.985?2.4:r>.9?1.6:1.1,bright:r>.985,phase:r*Math.PI*2,speed:8e-4+7*r%1*.0017})}m(0)},x=e=>{e-g>33&&(m(e),g=e),h=requestAnimationFrame(x)},b=n.querySelector("[data-arc]"),f=()=>{if(null==b||b.classList.toggle("is-paused",!u||document.hidden),cancelAnimationFrame(h),s.matches||!u||document.hidden)return void m(0);h=requestAnimationFrame(x)},w=new ResizeObserver(v);w.observe(a);let y=new IntersectionObserver(e=>{u=e[0].isIntersecting,f()});y.observe(n),document.addEventListener("visibilitychange",f);let j=()=>f();return s.addEventListener("change",j),v(),()=>{cancelAnimationFrame(h),w.disconnect(),y.disconnect(),document.removeEventListener("visibilitychange",f),s.removeEventListener("change",j)}},[e,t]),(0,n.jsxs)("section",{className:"hero","aria-labelledby":"hero-title",ref:t,children:[(0,n.jsxs)("div",{className:"hero-light","aria-hidden":"true",children:[(0,n.jsx)("div",{className:"hero-wash"}),(0,n.jsx)("div",{className:"hero-bloom"}),(0,n.jsx)("div",{className:"hero-halo"}),(0,n.jsx)("div",{className:"hero-horizon"})]}),(0,n.jsx)("canvas",{className:"hero-particles","aria-hidden":"true",ref:e}),(0,n.jsx)("div",{className:"hero-floor","aria-hidden":"true",children:(0,n.jsx)("div",{})}),(0,n.jsxs)("div",{className:"hero-content",children:[(0,n.jsx)(s,{text:"Production conditions \xb7 A safe test world"}),(0,n.jsxs)("h1",{id:"hero-title",children:[(0,n.jsx)("span",{children:"Test production conditions."})," ",(0,n.jsx)("span",{children:"Find what breaks before you ship."})]}),(0,n.jsxs)("p",{children:["Give your application or AI agent a safe replica.",(0,n.jsx)("br",{className:"mobile-break"})," Run the workflow, introduce failures, and inspect the result."]}),(0,n.jsxs)("div",{className:"actions hero-actions",children:[(0,n.jsxs)("a",{className:"button button-outline",href:"/demo/",children:["Explore the demo ",(0,n.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]}),(0,n.jsx)("a",{className:"button button-white",href:"https://cal.com/sashanksingh",target:"_blank",rel:"noopener noreferrer",children:"Book a call"}),(0,n.jsx)(l,{})]})]}),(0,n.jsx)("a",{className:"hero-capture",href:"/demo/","aria-label":"Explore the AgentTwin workspace in the interactive demo",children:(0,n.jsx)("img",{src:"assets/img/hero-replica-desktop.png",width:1360,height:608,alt:"AgentTwin workspace showing connected services, synthetic data, and safe replica settings",fetchPriority:"high",decoding:"async"})})]})}},7938:(e,t,a)=>{"use strict";a.d(t,{default:()=>r});var n=a(5226);function r(){return(0,n.useEffect)(()=>{let e=[...document.querySelectorAll(".workflow-nav a")],t=new IntersectionObserver(t=>{t.forEach(t=>{t.isIntersecting&&e.forEach(e=>{e.hash==="#".concat(t.target.id)?e.setAttribute("aria-current","step"):e.removeAttribute("aria-current")})})},{rootMargin:"-15% 0px -55% 0px"});return document.querySelectorAll(".workflow-chapter").forEach(e=>t.observe(e)),()=>t.disconnect()},[]),null}},8474:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(e){let{children:t}=e,a=(0,r.useRef)(null);return(0,n.jsx)("div",{className:"faq-items",ref:a,onToggle:e=>{var t;let n=e.target;n.open&&(null==(t=a.current)||t.querySelectorAll("details").forEach(e=>{e!==n&&(e.open=!1)}))},children:t})}},9443:(e,t,a)=>{"use strict";a.d(t,{default:()=>s});var n=a(1778),r=a(5226);function s(){let[e,t]=(0,r.useState)(!1);return(0,n.jsxs)("article",{className:"visual-card reveal",children:[(0,n.jsx)("div",{className:"card-visual grid-pattern",children:(0,n.jsxs)("div",{className:"trace-preview".concat(e?" is-failed":""),"aria-live":"polite",children:[(0,n.jsx)("span",{className:"mini-label",children:"Illustrative refund scenario"}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:["Refund created",(0,n.jsx)("small",{children:"Provider commits the write"})]}),(0,n.jsx)("span",{className:"trace-tag",children:"200"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:[e?"Response lost":"Response received",(0,n.jsx)("small",{children:e?"Worker retries the request":"Worker records the result"})]}),(0,n.jsx)("span",{className:"trace-tag",children:e?"TIMEOUT":"OK"})]}),(0,n.jsxs)("div",{children:[(0,n.jsx)("span",{className:"trace-point"}),(0,n.jsxs)("p",{children:[e?"Two refunds exist":"One refund exists",(0,n.jsx)("small",{children:e?"Illustrative unsafe retry outcome":"Expected final state"})]})]})]})}),(0,n.jsxs)("div",{className:"visual-card-copy",children:[(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"Retries with consequences."})," A write can succeed even when its response never arrives."]}),(0,n.jsxs)("button",{className:"text-link",type:"button",onClick:()=>t(!e),children:[e?"Reset the scenario ":"Introduce a timeout ",(0,n.jsx)("span",{"aria-hidden":"true",children:"↗"})]})]})]})}},9525:(e,t,a)=>{"use strict";a.d(t,{default:()=>i});var n=a(1778),r=a(5226);let s=[{href:"/#worlds",label:"Worlds"},{href:"/#how",label:"How it works"},{href:"/#failures",label:"Failures"},{href:"/#pricing",label:"Pricing"},{href:"/enterprise/",label:"Enterprise"},{href:"/docs/",label:"Docs"}];function i(){let[e,t]=(0,r.useState)(!1),a=(0,r.useRef)(null),i=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{var n,r;"Escape"===e.key&&(null==(n=i.current)?void 0:n.querySelector("#navlinks.is-open"))&&(t(!1),null==(r=a.current)||r.focus())},n=e=>{var a;(null==(a=i.current)?void 0:a.contains(e.target))||t(!1)},r=matchMedia("(min-width: 1024px)"),s=()=>t(!1);return document.addEventListener("keydown",e),document.addEventListener("click",n),r.addEventListener("change",s),()=>{document.removeEventListener("keydown",e),document.removeEventListener("click",n),r.removeEventListener("change",s)}},[]),(0,n.jsxs)("header",{className:"site-header",ref:i,children:[(0,n.jsxs)("a",{className:"brand",href:"/","aria-label":"AgentTwin home",children:[(0,n.jsx)("img",{src:"assets/logo/mark-twin-rings.svg?v=white-rings",alt:"",width:29,height:29}),"AgentTwin"]}),(0,n.jsxs)("nav",{className:"main-nav".concat(e?" is-open":""),id:"navlinks","aria-label":"Main navigation",children:[s.map(e=>(0,n.jsx)("a",{href:e.href,onClick:()=>t(!1),children:e.label},e.href)),(0,n.jsx)("a",{className:"nav-mobile-dashboard",href:"/dashboard/",onClick:()=>t(!1),children:"Open dashboard"})]}),(0,n.jsxs)("div",{className:"nav-actions",children:[(0,n.jsx)("a",{href:"/login/",children:"Sign in"}),(0,n.jsxs)("a",{className:"button button-white button-small",href:"/signup/",children:["Get started ",(0,n.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]})]}),(0,n.jsxs)("button",{className:"menu-toggle",ref:a,type:"button","aria-label":e?"Close menu":"Open menu","aria-expanded":e,"aria-controls":"navlinks",onClick:()=>t(!e),children:[(0,n.jsx)("span",{}),(0,n.jsx)("span",{})]})]})}}},e=>{e.O(0,[7903,4816,7358],()=>e(e.s=7128)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6907],{313:(e,n,a)=>{Promise.resolve().then(a.bind(a,9525)),Promise.resolve().then(a.t.bind(a,3645,23))},3645:()=>{},9525:(e,n,a)=>{"use strict";a.d(n,{default:()=>l});var s=a(1778),r=a(5226);let i=[{href:"/#worlds",label:"Worlds"},{href:"/#how",label:"How it works"},{href:"/#failures",label:"Failures"},{href:"/#pricing",label:"Pricing"},{href:"/enterprise/",label:"Enterprise"},{href:"/docs/",label:"Docs"}];function l(){let[e,n]=(0,r.useState)(!1),a=(0,r.useRef)(null),l=(0,r.useRef)(null);return(0,r.useEffect)(()=>{let e=e=>{var s,r;"Escape"===e.key&&(null==(s=l.current)?void 0:s.querySelector("#navlinks.is-open"))&&(n(!1),null==(r=a.current)||r.focus())},s=e=>{var a;(null==(a=l.current)?void 0:a.contains(e.target))||n(!1)},r=matchMedia("(min-width: 1024px)"),i=()=>n(!1);return document.addEventListener("keydown",e),document.addEventListener("click",s),r.addEventListener("change",i),()=>{document.removeEventListener("keydown",e),document.removeEventListener("click",s),r.removeEventListener("change",i)}},[]),(0,s.jsxs)("header",{className:"site-header",ref:l,children:[(0,s.jsxs)("a",{className:"brand",href:"/","aria-label":"AgentTwin home",children:[(0,s.jsx)("img",{src:"assets/logo/mark-twin-rings.svg?v=white-rings",alt:"",width:29,height:29}),"AgentTwin"]}),(0,s.jsxs)("nav",{className:"main-nav".concat(e?" is-open":""),id:"navlinks","aria-label":"Main navigation",children:[i.map(e=>(0,s.jsx)("a",{href:e.href,onClick:()=>n(!1),children:e.label},e.href)),(0,s.jsx)("a",{className:"nav-mobile-dashboard",href:"/dashboard/",onClick:()=>n(!1),children:"Open dashboard"})]}),(0,s.jsxs)("div",{className:"nav-actions",children:[(0,s.jsx)("a",{href:"/login/",children:"Sign in"}),(0,s.jsxs)("a",{className:"button button-white button-small",href:"/signup/",children:["Get started ",(0,s.jsx)("span",{"aria-hidden":"true",children:"\xbb"})]})]}),(0,s.jsxs)("button",{className:"menu-toggle",ref:a,type:"button","aria-label":e?"Close menu":"Open menu","aria-expanded":e,"aria-controls":"navlinks",onClick:()=>n(!e),children:[(0,s.jsx)("span",{}),(0,s.jsx)("span",{})]})]})}}},e=>{e.O(0,[4481,7903,4816,7358],()=>e(e.s=313)),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[879,4520],{9334:(e,s,_)=>{Promise.resolve().then(_.bind(_,650))}},e=>{e.O(0,[1839,650,7903,4816,7358],()=>e(e.s=9334)),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2723],{1059:()=>{},1127:()=>{},1470:()=>{},1685:()=>{},2569:()=>{},2853:()=>{},5845:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,1059,23)),Promise.resolve().then(n.t.bind(n,2569,23)),Promise.resolve().then(n.t.bind(n,1470,23)),Promise.resolve().then(n.t.bind(n,8866,23)),Promise.resolve().then(n.t.bind(n,1685,23)),Promise.resolve().then(n.t.bind(n,8244,23)),Promise.resolve().then(n.t.bind(n,1127,23)),Promise.resolve().then(n.t.bind(n,2853,23))},8244:()=>{},8866:()=>{}},e=>{e.O(0,[8605,4469,7651,9446,7903,4816,7358],()=>e(e.s=5845)),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2723],{1059:()=>{},1127:()=>{},1470:()=>{},1685:()=>{},2569:()=>{},2853:()=>{},5853:(e,s,n)=>{Promise.resolve().then(n.t.bind(n,1059,23)),Promise.resolve().then(n.t.bind(n,2569,23)),Promise.resolve().then(n.t.bind(n,1470,23)),Promise.resolve().then(n.t.bind(n,8866,23)),Promise.resolve().then(n.t.bind(n,1685,23)),Promise.resolve().then(n.t.bind(n,8244,23)),Promise.resolve().then(n.t.bind(n,1127,23)),Promise.resolve().then(n.t.bind(n,2853,23))},8244:()=>{},8866:()=>{}},e=>{e.O(0,[8605,4469,7651,9446,7903,4816,7358],()=>e(e.s=5853)),_N_E=e.O()}]);