agenttwin 0.3.13 → 0.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.js +472 -93
- package/dist/cli.js +126 -19
- package/dist/dashboard/assets/next/static/RRU6kOWIag8OaxBjl6DjU/_buildManifest.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/1255-d4ec8dbb0865c655.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/1482.e664aba77631265d.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/182-71d400a5d9e02879.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/3050-bac69e3c6734beee.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/3056.ffa9a4d44a274b29.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/{2442.9a266da6229b8ae0.js → 4055.1056568a41510e92.js} +1 -1
- package/dist/dashboard/assets/next/static/chunks/4343.023a18f52318dbad.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/4bd1b696-f785427dddbba9fb.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/{5490.0d5d8d5ea3577f20.js → 6751.613adb085c9a5b06.js} +1 -1
- package/dist/dashboard/assets/next/static/chunks/6787-c85d7f794360b672.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/7772-f2d773cd3e94eea6.js +67 -0
- package/dist/dashboard/assets/next/static/chunks/8093-90b99184c0a57c57.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/{3454.d29ee7a49c2a4fba.js → 8975.5be81ec8b09e3b45.js} +1 -1
- package/dist/dashboard/assets/next/static/chunks/{7280.01b3f749332bb075.js → 9013.0f2be1cc70029afa.js} +2 -2
- package/dist/dashboard/assets/next/static/chunks/9376.42da54b90ff9f2d9.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/9675.14739028910476e4.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/971-f01a5b1fb6756f6c.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/_not-found/page-43db8aef3fa81958.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/about/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/account/password/page-c2ce3c796c817ca1.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/api-policy/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/auth/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/agenttwin-vs-mockoon/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/agenttwin-vs-pact/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/agenttwin-vs-testcontainers/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/agenttwin-vs-wiremock/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/keploy-alternatives-for-database-and-payment-workflows/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/layout-563d8763d65d66b5.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/reset-test-environment-between-runs/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/blog/simulate-timeouts-and-duplicate-events/page-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/compare/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/contact/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/dashboard/layout-1afe915ed22ac5ed.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/dashboard/page-d91fa87fbf634bc9.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/demo/page-4dc63755e0013e7c.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/developers/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/docs/[[...slug]]/page-3c0d688140d910bd.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/guides/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/layout-993a96283a3ceb07.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/login/page-d6d4276397724d29.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/onboarding/page-bc480c9258e5cc4d.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/page-e4fe99bcc001a517.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/pricing/page-40f352fe5093a0ff.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/privacy/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/sandbox/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/signup/page-d6d4276397724d29.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/sitemap.xml/route-ba841d868e5d124a.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/layout-a5cf565e017886d3.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/page-ca68ba293cca7d75.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/layout-abbd9f3b8811f559.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/login/page-4f4a342a4c28f9de.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/onboarding/page-f04c0b236abaead3.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/page-3905446ec0206fb5.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/v2/signup/page-4f4a342a4c28f9de.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/app/what-is-agenttwin/page-3f5dbcdbf95bb2fc.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/{48a1527b.6d52e40c5e62d9d5.js → b468fba8.437b212aae4abcf8.js} +1 -1
- package/dist/dashboard/assets/next/static/chunks/framework-e54b663a2888b5de.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/main-5aa70aa3d6a46aa0.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/main-app-1ec13ceef4a34729.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/pages/_app-6c8c2371b16a04b8.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/pages/_error-94812ad32cad7365.js +1 -0
- package/dist/dashboard/assets/next/static/chunks/webpack-1ac08e31899efefb.js +1 -0
- package/dist/dashboard/assets/next/static/css/15b28a76469ea7e5.css +3 -0
- package/dist/dashboard/assets/next/static/css/{eea0966f05042bde.css → 18afa3e32331c41d.css} +1 -1
- package/dist/dashboard/assets/next/static/css/6695e0f2ae2e5aaf.css +1 -0
- package/dist/dashboard/assets/next/static/css/ced6baae4dc4cbab.css +1 -0
- package/dist/dashboard/assets/next/static/css/d35115cc1039cc68.css +1 -0
- package/dist/dashboard/assets/next/static/css/f27d5fbb1f484d9d.css +1 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/gateway.js +465 -86
- package/package.json +14 -2
- package/dist/dashboard/assets/next/static/BbTZs0rKnsmj45peSnlwJ/_buildManifest.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/1981-2ce2c5edd154524a.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/2529.07927d0600506985.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/3916-2698a1a3ecb8649f.js +0 -67
- package/dist/dashboard/assets/next/static/chunks/4705-a6d249b4a5dcde26.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/4816-45f42396ec2135cc.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/650-3092bf29ff938e12.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/6f3ce29d-af1469ba72f5d3e4.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/794.a624e6be9e42a62b.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/_not-found/page-471a6c74344187f9.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/account/password/page-aaee6711085b485d.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/dashboard/layout-09cb13657f62384f.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/dashboard/page-945c916b24f48675.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/demo/page-3cba0aab460c8677.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/docs/[[...slug]]/page-9f7b8dca8b973b15.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/enterprise/page-4986698442bddc6b.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/layout-09868e53e4f0541f.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/login/page-2e29d4b17645c34c.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/onboarding/page-af2c4768dc34ec92.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/page-507229409812cedd.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/pricing/page-c27282cd7bfb0fcf.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/signup/page-2e29d4b17645c34c.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/sitemap.xml/route-36bcc482b50fcb46.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/layout-77a57cd622171076.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/dashboard/page-df34bcef0394d10d.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/layout-d1d715b5b2dae3cd.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/login/page-4f60d050bf954194.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/onboarding/page-abfe2f36213848d7.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/page-df6a34eff716d18e.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/app/v2/signup/page-4f60d050bf954194.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/framework-cb37e134fe056fa5.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/main-app-c83f3671ad6b824a.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/main-b7d6352ee94d0dba.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/pages/_app-9dd167be58cf5cbd.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/pages/_error-5a8b1eb076dd7c95.js +0 -1
- package/dist/dashboard/assets/next/static/chunks/webpack-44457f45df749a89.js +0 -1
- package/dist/dashboard/assets/next/static/css/0856ee8c880d8b92.css +0 -1
- package/dist/dashboard/assets/next/static/css/0cf03e33b963e5cb.css +0 -1
- package/dist/dashboard/assets/next/static/css/81a1668ab34a36e8.css +0 -1
- package/dist/dashboard/assets/next/static/css/b15fa8a0e168d625.css +0 -1
- /package/dist/dashboard/assets/next/static/{BbTZs0rKnsmj45peSnlwJ → RRU6kOWIag8OaxBjl6DjU}/_ssgManifest.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@font-face{font-family:Docs Sans;src:url(../../../fonts/inter-var.woff2) format("woff2");font-weight:100 900;font-display:swap}.docs-frame{--docs-bg:#101113;--docs-panel:#16181b;--docs-fg:#f1f2f4;--docs-muted:#b0b4bc;--docs-dim:#858b96;--docs-border:#34373e;--docs-border-subtle:#ffffff13;--docs-accent:#9bb4f4;--docs-hover:#ffffff08;--docs-selected:#9bb4f413;min-height:100dvh;background:var(--docs-bg);color:var(--docs-fg);font-family:Docs Sans,system-ui,sans-serif;font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased}html[data-docs-theme=light] .docs-frame{--docs-bg:#fff;--docs-panel:#f8f9fb;--docs-fg:#1a1d24;--docs-muted:#535b68;--docs-dim:#707987;--docs-border:#d4d9e1;--docs-border-subtle:#e9ecf1;--docs-accent:#3566cc;--docs-hover:#f3f5f9;--docs-selected:#edf2fc}html[data-docs-theme=dark] body{background:#101113;color:#f1f2f4}html[data-docs-theme=light] body{background:#fff;color:#1a1d24}.docs-frame *{box-sizing:border-box}.docs-frame a{color:inherit;text-decoration:none}.docs-frame :is(h1,h2,h3,h4,p){margin:0}.docs-frame :is(ul,ol){padding:0;margin:0;list-style:none}.docs-frame button,.docs-frame input{font:inherit;color:inherit}.docs-frame button{cursor:pointer}.docs-frame :focus-visible{outline:2px solid var(--docs-accent);outline-offset:4px;border-radius:4px}.docs-frame svg{width:17px;height:17px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.docs-skip{position:fixed;left:20px;top:-100px;z-index:60;padding:10px 18px;background:var(--docs-bg);border:1px solid var(--docs-accent);border-radius:8px}.docs-skip:focus{top:12px}.docs-banner{position:relative;display:flex;align-items:center;justify-content:center;padding:8px 48px;border-bottom:1px solid var(--docs-border-subtle);background:var(--docs-panel);color:var(--docs-muted);font-size:12px;text-align:center}.docs-banner button{position:absolute;right:20px;display:grid;place-items:center;width:24px;height:24px;padding:0;background:transparent;border:0;color:var(--docs-dim)}.docs-banner button:hover{color:var(--docs-fg)}.docs-navbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:32px;height:76px;padding:0 max(32px,calc((100vw - 1360px)/2));background:color-mix(in srgb,var(--docs-bg) 94%,transparent);backdrop-filter:blur(16px);border-bottom:1px solid var(--docs-border-subtle)}.docs-brand{display:inline-flex;align-items:center;gap:10px;font-size:20px;font-weight:600;letter-spacing:-.6px;white-space:nowrap}.docs-brand img{border-radius:8px}html[data-docs-theme=light] .docs-brand img{filter:invert(1)}.docs-navbar-links{display:flex;align-items:center;gap:10px;flex:none}.docs-icon-link{display:grid;place-items:center;width:34px;height:34px;border:0;background:transparent;border-radius:7px;color:var(--docs-dim)}.docs-icon-link:hover{background:var(--docs-hover);color:var(--docs-fg)}.docs-navbar-primary{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 13px;border:1px solid var(--docs-border);border-radius:7px;font-size:12px;font-weight:500}.docs-navbar-primary:hover{background:var(--docs-hover)}.docs-navbar-primary svg{width:14px;height:14px}.docs-search-trigger{display:flex;align-items:center;gap:10px;width:100%;max-width:400px;padding:9px 12px;border:1px solid var(--docs-border);border-radius:8px;background:var(--docs-panel);color:var(--docs-dim)!important;font-size:13px!important;text-align:left}.docs-search-trigger:hover{border-color:var(--docs-dim)}.docs-search-trigger span{flex:1}.docs-frame kbd{font:11px/1.4 Docs Sans,sans-serif;border:1px solid var(--docs-border-subtle);border-radius:4px;padding:2px 5px;color:var(--docs-dim);white-space:nowrap}.docs-shell{display:grid;grid-template-columns:220px minmax(0,1fr) 176px;gap:44px;max-width:1360px;margin:0 auto;padding:0 32px 80px;align-items:start}.docs-sidebar{position:sticky;top:96px;max-height:calc(100dvh - 116px);overflow:auto;padding:30px 8px 24px 0;scrollbar-width:thin}.docs-sidebar-home{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:500;padding:0 10px 26px;color:var(--docs-fg)}.docs-sidebar-home span{margin-left:auto;color:var(--docs-dim)}.docs-sidebar section+section{margin-top:28px}.docs-sidebar h2{padding:0 10px;margin-bottom:10px;font-size:12px;font-weight:600;color:var(--docs-fg)}.docs-nav-link{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:7px;font-size:13px;color:var(--docs-muted)!important;line-height:1.5;transition:background .15s,color .15s}.docs-nav-link svg{width:16px;height:16px;color:var(--docs-dim)}.docs-nav-link:hover{background:var(--docs-hover);color:var(--docs-fg)!important}.docs-nav-link[aria-current=page]{background:var(--docs-selected);color:var(--docs-accent)!important;font-weight:550}.docs-nav-link[aria-current=page] svg{color:var(--docs-accent)}.docs-sidebar-bottom{border-top:1px solid var(--docs-border-subtle);margin:28px 10px 0;padding-top:20px}.docs-sidebar-bottom a{display:flex;align-items:center;gap:9px;font-size:12px;color:var(--docs-dim)}.docs-sidebar-bottom span{margin-left:auto}.docs-drawer-head,.docs-menu-toggle,.docs-nav-overlay{display:none}.docs-content{min-width:0;max-width:730px;padding-top:34px;color:var(--docs-muted);font-size:15px;line-height:1.85}.docs-content:focus{outline:none}.docs-breadcrumb{display:flex;align-items:center;gap:10px;margin-bottom:26px;font-size:12px;color:var(--docs-dim)}.docs-breadcrumb a:hover{color:var(--docs-accent)}.docs-content-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:30px}.docs-page-category{display:none}.docs-content h1{font-size:34px;font-weight:650;line-height:1.2;letter-spacing:-1.1px;color:var(--docs-fg);text-wrap:balance}.docs-content .docs-description{font-size:15px;line-height:1.7;margin:14px 0 0;color:var(--docs-dim)}.docs-copy-page{display:inline-flex;align-items:center;gap:7px;flex:none;padding:6px 9px;margin-top:4px;background:transparent;border:1px solid var(--docs-border);border-radius:7px;color:var(--docs-muted);font-size:11px!important;white-space:nowrap}.docs-copy-page svg{width:13px;height:13px}.docs-copy-page:hover{background:var(--docs-hover);color:var(--docs-fg)}.docs-content h2{font-size:23px;letter-spacing:-.5px;line-height:1.35;margin:42px 0 16px}.docs-content h2,.docs-content h3{font-weight:600;color:var(--docs-fg);scroll-margin-top:100px}.docs-content h3{font-size:18px;letter-spacing:-.2px;margin:28px 0 12px}.docs-content h4{font-size:15px;font-weight:600;color:var(--docs-fg);margin:20px 0 10px}.docs-content p{margin:16px 0}.docs-content strong{color:var(--docs-fg);font-weight:550}.docs-content a:not(.docs-card){text-decoration:underline;text-underline-offset:4px;text-decoration-color:var(--docs-border)}.docs-content a:hover{color:var(--docs-accent);text-decoration-color:var(--docs-accent)}.docs-content :is(ul,ol){margin:16px 0;padding-left:22px;list-style:revert}.docs-content li{margin:7px 0}.docs-content li::marker{color:var(--docs-dim)}.docs-content code{font:12.5px/1.7 IBM Plex Mono,ui-monospace,monospace;background:var(--docs-panel);border:1px solid var(--docs-border-subtle);border-radius:5px;padding:2px 5px;color:var(--docs-fg);overflow-wrap:anywhere}.docs-code-block{margin:20px 0;border:1px solid var(--docs-border);border-radius:10px;overflow:hidden;background:var(--docs-panel)}.docs-code-toolbar{justify-content:space-between;padding:8px 14px;border-bottom:1px solid var(--docs-border-subtle);color:var(--docs-dim)}.docs-code-toolbar,.docs-code-toolbar button{display:flex;align-items:center;font-size:11px}.docs-code-toolbar button{gap:6px;border:0;background:transparent;color:var(--docs-muted);padding:3px 0}.docs-code-toolbar button:hover{color:var(--docs-fg)}.docs-code-toolbar svg{width:13px;height:13px}.docs-content pre{margin:0;padding:18px;overflow:auto;line-height:1.75}.docs-content pre code{background:transparent;border:0;padding:0;font-size:13px;overflow-wrap:normal;color:var(--docs-fg)}.docs-content hr{border:0;border-top:1px solid var(--docs-border-subtle);margin:32px 0}.docs-content blockquote{margin:20px 0;padding-left:18px;border-left:2px solid var(--docs-border);color:var(--docs-dim)}.docs-content table{width:100%;display:block;overflow:auto;border-collapse:collapse;margin:22px 0;font-size:13px}.docs-content :is(td,th){padding:12px 14px;border-bottom:1px solid var(--docs-border-subtle);text-align:left;vertical-align:top}.docs-content th{background:var(--docs-panel);color:var(--docs-fg);font-weight:550}.docs-content img{max-width:100%;height:auto;border:1px solid var(--docs-border-subtle);border-radius:10px;margin:20px 0}.docs-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:26px 0}.docs-content .docs-card{display:flex;flex-direction:column;gap:9px;padding:20px;border:1px solid var(--docs-border);border-radius:10px;background:transparent;text-decoration:none;transition:background .16s,border-color .16s}.docs-content .docs-card:hover{border-color:var(--docs-dim);background:var(--docs-hover)}.docs-card strong{display:flex;justify-content:space-between;gap:12px;font-size:14px;line-height:1.5}.docs-card span{color:var(--docs-dim);font-size:13px;line-height:1.65}.docs-card .docs-card-arrow{font-size:16px;color:var(--docs-muted)}.docs-callout{margin:22px 0;padding:16px 18px;border:1px solid var(--docs-border);border-left:3px solid var(--docs-accent);border-radius:9px;background:var(--docs-panel);font-size:14px}.docs-callout.warning{border-left-color:#c49b59}.docs-callout.note{border-left-color:var(--docs-dim)}.docs-callout p:first-child{margin-top:0}.docs-callout p:last-child{margin-bottom:0}.docs-content ol.docs-steps{list-style:none;padding-left:12px;counter-reset:docs-step;margin:28px 0;display:grid;gap:4px}.docs-steps>li{counter-increment:docs-step;position:relative;padding:0 0 28px 32px;border-left:1px solid var(--docs-border)}.docs-steps>li:last-child{border-color:transparent}.docs-steps>li:before{content:counter(docs-step);position:absolute;left:-13px;top:0;display:grid;place-items:center;width:25px;height:25px;border:1px solid var(--docs-border);background:var(--docs-bg);border-radius:50%;color:var(--docs-fg);font-size:12px}.docs-steps h2{margin:0 0 10px;font-size:17px}.docs-contents{position:sticky;top:112px;padding-top:40px;max-height:calc(100dvh - 132px);overflow:auto;font-size:12px}.docs-contents>p{display:flex;align-items:center;gap:8px;color:var(--docs-fg);font-weight:550;margin-bottom:16px}.docs-contents svg{width:14px;height:14px}.docs-contents nav{display:grid;border-left:1px solid var(--docs-border-subtle)}.docs-contents nav a{padding:6px 0 6px 15px;color:var(--docs-dim);line-height:1.5;border-left:1px solid transparent;margin-left:-1px}.docs-contents nav a:hover{color:var(--docs-fg)}.docs-contents nav a.is-active{border-left-color:var(--docs-accent);color:var(--docs-accent)}.docs-contents nav a.depth-3{padding-left:25px}.docs-help-link{display:flex;justify-content:space-between;gap:12px;margin-top:24px;padding-top:18px;border-top:1px solid var(--docs-border-subtle);color:var(--docs-dim)!important}.docs-mobile-contents{display:none}.docs-pager{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:48px;padding-top:28px;border-top:1px solid var(--docs-border-subtle)}.docs-pager a{display:flex;flex-direction:column;gap:6px;padding:16px 18px;border:1px solid var(--docs-border);border-radius:9px;text-decoration:none!important;color:var(--docs-fg);font-size:13px;line-height:1.6}.docs-pager a:hover{background:var(--docs-hover)}.docs-pager a span{font-size:11px;color:var(--docs-dim)}.docs-pager a.next{grid-column:2;text-align:right}.docs-footer{display:flex;align-items:center;gap:24px;max-width:1360px;margin:0 auto;padding:24px 32px 36px;border-top:1px solid var(--docs-border-subtle);color:var(--docs-dim);font-size:12px}.docs-footer p{flex:1}.docs-footer nav{display:flex;gap:22px}.docs-footer a:hover,.docs-search-dialog{color:var(--docs-fg)}.docs-search-dialog{position:fixed;inset:0;top:14vh;bottom:auto;width:min(640px,calc(100vw - 32px));max-height:76dvh;margin:0 auto;padding:0;overflow:hidden;background:var(--docs-bg);border:1px solid var(--docs-border);border-radius:14px;box-shadow:0 24px 100px #0006}.docs-search-dialog::backdrop{background:#080a0eb3;backdrop-filter:blur(4px)}.docs-search-dialog-content{display:flex;flex-direction:column;max-height:76dvh}.docs-search-input{display:flex;align-items:center;gap:12px;padding:18px;border-bottom:1px solid var(--docs-border)}.docs-search-input input{width:100%;min-width:0;border:0;background:transparent;color:var(--docs-fg);outline:none;font-size:14px}.docs-search-input input::placeholder{color:var(--docs-dim)}.docs-search-input button{border:0;background:transparent;padding:0}.docs-search-list{padding:12px;overflow:auto;min-height:120px}.docs-search-caption{padding:4px 8px 10px;font-size:11px;color:var(--docs-dim)}.docs-search-list a{display:flex;align-items:flex-start;gap:12px;padding:13px 10px;border-radius:8px;text-decoration:none}.docs-search-list a.is-selected,.docs-search-list a:focus-visible,.docs-search-list a:hover{background:var(--docs-hover)}.docs-search-list a>svg{margin-top:3px;color:var(--docs-dim)}.docs-search-list a>div{flex:1;min-width:0}.docs-search-list strong{display:block;font-size:14px;font-weight:550}.docs-search-list a span{display:block;margin-top:4px;font-size:12px;line-height:1.6;color:var(--docs-dim)}.docs-search-empty{padding:20px;font-size:13px;color:var(--docs-muted)}.docs-search-help{display:flex;gap:20px;padding:12px 20px;border-top:1px solid var(--docs-border-subtle);font-size:11px;color:var(--docs-dim)}@media(max-width:1150px){.docs-shell{grid-template-columns:210px minmax(0,1fr);gap:40px}.docs-contents{display:none}.docs-content{max-width:760px}.docs-mobile-contents{display:block;margin:0 0 24px;padding:10px 14px;border:1px solid var(--docs-border-subtle);border-radius:8px;font-size:12px}.docs-mobile-contents summary{cursor:pointer;color:var(--docs-dim)}.docs-mobile-contents nav{display:grid;padding-top:10px}.docs-mobile-contents a{padding:5px 0}.docs-navbar{gap:24px}.docs-navbar-links>.docs-icon-link:not(.docs-theme-toggle){display:none}}@media(max-width:860px){.docs-navbar{height:64px;padding:0 20px;gap:16px}.docs-search-trigger{max-width:320px}.docs-navbar-primary{font-size:0;padding:0;width:34px;justify-content:center}.docs-brand{font-size:18px}.docs-shell{display:block;padding:0 24px 52px}.docs-menu-toggle{display:flex;align-items:center;gap:8px;margin-top:20px;padding:8px 0;border:0;background:transparent;color:var(--docs-muted);font-size:12px!important}.docs-sidebar{position:fixed;inset:0 auto 0 0;z-index:42;width:min(320px,86vw);height:100dvh;max-height:none;padding:22px 18px 40px;background:var(--docs-bg);border-right:1px solid var(--docs-border);transform:translateX(-101%);visibility:hidden;transition:transform .2s;overflow:auto}.docs-sidebar.is-open{transform:none;visibility:visible}.docs-drawer-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:30px}.docs-drawer-head button{display:grid;place-items:center;padding:6px;border:0;background:transparent}.docs-nav-overlay{display:block;position:fixed;inset:0;z-index:41;border:0;background:#080a0e99;backdrop-filter:blur(3px)}.docs-content{padding-top:16px}.docs-content-head{gap:14px}.docs-content h1{font-size:32px}.docs-breadcrumb{margin-bottom:18px}.docs-footer{padding:24px;flex-wrap:wrap}.docs-footer nav{flex-wrap:wrap;gap:16px}.docs-cards{gap:12px}}@media(max-width:560px){.docs-banner{font-size:11px;padding:8px 38px}.docs-navbar{padding:0 18px;gap:14px}.docs-navbar-links{gap:4px}.docs-search-trigger{margin-left:auto;width:34px;padding:8px;justify-content:center;background:transparent;border:0}.docs-search-trigger kbd,.docs-search-trigger span{display:none}.docs-shell{padding:0 20px 48px}.docs-content-head{display:block;position:relative}.docs-content h1{font-size:30px}.docs-content .docs-description{font-size:14px}.docs-copy-page{margin-top:16px}.docs-content{font-size:14px}.docs-content h2{font-size:21px;margin-top:32px}.docs-cards{grid-template-columns:1fr}.docs-content .docs-card{padding:18px}.docs-pager{gap:10px}.docs-pager a{padding:12px;font-size:12px}.docs-search-dialog{top:10vh}.docs-search-input{padding:14px}.docs-search-input input{font-size:13px}.docs-search-help{font-size:10px;gap:14px}.docs-footer p{flex-basis:100%}}@media(prefers-reduced-motion:reduce){.docs-frame *{animation:none!important;transition:none!important}}.docs-navbar-crumb{display:flex;align-items:center;gap:8px;min-width:0;flex:1;font-size:12px;color:var(--docs-dim);white-space:nowrap;overflow:hidden}.docs-navbar-crumb a{text-decoration:none;color:var(--docs-dim)}.docs-navbar-crumb a:hover{color:var(--docs-accent)}.docs-navbar-crumb .docs-crumb-sep{width:11px;height:11px;transform:rotate(90deg);opacity:.7;flex:none}.docs-crumb-here{color:var(--docs-muted);overflow:hidden;text-overflow:ellipsis}.docs-ask-trigger{display:inline-flex;align-items:center;gap:7px;height:36px;padding:0 11px;border:1px solid var(--docs-border);border-radius:7px;background:transparent;color:var(--docs-muted);font-size:12px;font-weight:500;white-space:nowrap}.docs-ask-trigger:hover{background:var(--docs-hover);color:var(--docs-fg)}.docs-ask-trigger svg{width:14px;height:14px;color:var(--docs-accent)}.docs-nav-group,.docs-nav-group-toggle{display:flex;align-items:center}.docs-nav-group-toggle{gap:9px;width:100%;padding:7px 10px;border:0;background:transparent;border-radius:7px;font-size:12px;font-weight:600;color:var(--docs-fg);text-align:left}.docs-nav-group-toggle:hover{background:var(--docs-hover)}.docs-nav-group-toggle svg{width:15px;height:15px;color:var(--docs-dim)}.docs-nav-group-toggle span{flex:1}.docs-nav-chevron{width:12px!important;height:12px!important;transform:rotate(90deg);transition:transform .15s;color:var(--docs-dim)}.docs-nav-group-toggle[aria-expanded=false] .docs-nav-chevron{transform:rotate(0deg)}.docs-sidebar section+section{margin-top:16px}.docs-search-dialog .docs-ask-submit svg,.docs-search-tabs button svg{width:13px;height:13px}.docs-spark{color:var(--docs-accent)}.docs-search-input{gap:10px}.docs-search-input textarea{width:100%;min-width:0;border:0;background:transparent;color:var(--docs-fg);outline:none;font-size:13px;line-height:1.5;resize:none;font-family:inherit}.docs-search-tabs{display:flex;flex:none;gap:2px;padding:3px;border:1px solid var(--docs-border-subtle);border-radius:8px;background:var(--docs-panel)}.docs-search-tabs button{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border:0;background:transparent;border-radius:6px;color:var(--docs-dim);font-size:11.5px;font-weight:500}.docs-search-tabs button[aria-selected=true]{background:var(--docs-hover);color:var(--docs-fg)}.docs-search-tabs button:hover{color:var(--docs-fg)}.docs-search-list mark{background:color-mix(in srgb,var(--docs-accent) 30%,transparent);color:var(--docs-fg);border-radius:3px;padding:0 1px}.docs-hit-heading{color:var(--docs-dim);font-weight:450;font-size:12px}.docs-hit-jump{visibility:hidden;margin-top:3px;color:var(--docs-dim);font-size:11px}.docs-search-list a.is-selected .docs-hit-jump{visibility:visible}.docs-search-caption code{padding:1px 4px;font-size:10.5px}.docs-recent,.docs-search-welcome{display:flex;flex-direction:column;gap:2px}.docs-recent{margin-bottom:14px}.docs-recent-item{display:flex;align-items:center;gap:10px;padding:9px 10px;border:0;background:transparent;border-radius:8px;color:var(--docs-muted);font-size:13px;text-align:left}.docs-recent-item:hover{background:var(--docs-hover);color:var(--docs-fg)}.docs-recent-item svg{width:13px;height:13px;color:var(--docs-dim)}.docs-recent-clear{display:inline-flex;align-items:center;gap:7px;align-self:flex-start;margin-top:6px;padding:4px 0;border:0;background:transparent;color:var(--docs-dim);font-size:11px}.docs-recent-clear:hover{color:var(--docs-fg)}.docs-recent-clear svg{width:11px;height:11px}.docs-search-empty button{border:0;background:transparent;padding:0;color:var(--docs-accent);text-decoration:underline;text-underline-offset:3px;font-size:inherit}.docs-ask-form{display:flex;align-items:center;gap:10px;padding:0 6px 12px}.docs-ask-submit{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 12px;border:1px solid var(--docs-border);border-radius:7px;background:var(--docs-accent);color:#0d0f13;font-size:12px;font-weight:600}.docs-ask-submit:disabled{opacity:.5;cursor:not-allowed}.docs-ask-submit:not(:disabled):hover{filter:brightness(1.08)}.docs-ask-hint{flex:1}.docs-ask-hint,.docs-ask-reset{font-size:11px;color:var(--docs-dim)}.docs-ask-reset{border:0;background:transparent;text-decoration:underline;text-underline-offset:3px}.docs-ask-reset:hover{color:var(--docs-fg)}.docs-ask-status{display:flex;align-items:center;gap:8px;padding:2px 6px 10px;font-size:12.5px;color:var(--docs-muted)}.docs-ask-loading .docs-ask-dots{width:4px;height:4px;margin-left:4px;border-radius:50%;background:var(--docs-dim);box-shadow:8px 0 0 var(--docs-dim),16px 0 0 var(--docs-dim);animation:docs-dots 1.2s steps(3) infinite}@keyframes docs-dots{0%{opacity:.4}50%{opacity:1}to{opacity:.4}}.docs-ask-answer{padding:2px 6px 6px;font-size:13px;line-height:1.7;color:var(--docs-muted)}.docs-ask-answer p{margin:10px 0}.docs-ask-answer :is(p,ul,ol):last-child{margin-bottom:10px}.docs-ask-answer ol,.docs-ask-answer ul{margin:10px 0;padding-left:20px;list-style:revert}.docs-ask-answer code{background:var(--docs-panel);border:1px solid var(--docs-border-subtle);border-radius:5px;padding:1px 5px;font-size:12px;color:var(--docs-fg)}.docs-ask-answer pre{padding:12px;background:var(--docs-panel);border:1px solid var(--docs-border-subtle);border-radius:8px;overflow:auto}.docs-ask-answer pre code{background:transparent;border:0;padding:0}.docs-ask-answer strong{color:var(--docs-fg)}.docs-ask-answer a[data-cite]{display:inline;color:var(--docs-accent);text-decoration:none;cursor:pointer;margin-left:1px}.docs-ask-answer a[data-cite] sup{font-size:9.5px;font-weight:600;line-height:1}.docs-ask-answer h2,.docs-ask-answer h3{margin:14px 0 8px;font-size:14px;color:var(--docs-fg)}.docs-ask-passages{list-style:none;margin:6px 0 0;padding:0}.docs-ask-passages li a{display:flex;flex-direction:column;gap:3px;padding:10px;border-radius:8px;text-decoration:none}.docs-ask-passages li a:hover{background:var(--docs-hover)}.docs-ask-passages strong{font-size:12.5px;font-weight:550;color:var(--docs-fg)}.docs-ask-passages span{font-size:11.5px;color:var(--docs-dim)}.docs-ask-passages .docs-passage-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;color:var(--docs-muted);line-height:1.55}.docs-ask-passages.is-pending{opacity:.65;pointer-events:none}.docs-passage-focus{background:var(--docs-selected);border-radius:8px}@keyframes docs-flash{0%{background:color-mix(in srgb,var(--docs-accent) 26%,transparent)}55%{background:color-mix(in srgb,var(--docs-accent) 26%,transparent)}to{background:transparent}}.docs-content :is(h2,h3):target,.docs-flash-target{animation:docs-flash 1.1s ease-out;border-radius:6px}.docs-callout.tip{border-left-color:#7fb58a}html:has(.docs-frame){scroll-behavior:smooth}@media(max-width:1150px){.docs-navbar-crumb{display:none}}@media(max-width:860px){.docs-ask-trigger{display:none}.docs-navbar{gap:14px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.article-byline-reviewed{flex-wrap:wrap}.article-reviewed{flex-basis:100%;color:#a5a5ac;margin-top:4px}.blog-frame{--reading-text:#c2c2c5;--reading-muted:#909095}.blog-frame a:focus-visible,.blog-frame summary:focus-visible{outline:2px solid #bbc4ff;outline-offset:5px}.blog-article-page,.blog-index{max-width:1140px;margin:auto;padding:130px 40px 0}.article-header{max-width:850px;padding:0 0 48px;margin-left:258px;border-bottom:1px solid #2b2b2d}.article-back{display:inline-flex;align-items:center;min-height:44px;font-size:13px;color:#a7a7ad;transition:color .2s}.article-back:hover{color:#fff}.article-kicker{display:flex;gap:16px;font-family:var(--mono);font-size:10px;line-height:1.6;letter-spacing:.07em;text-transform:uppercase;color:#a5a5ac}.article-header .article-kicker{margin:36px 0 20px}.article-kicker span+span{padding-left:16px;border-left:1px solid #444}.article-header h1{font-size:clamp(38px,4.6vw,62px);font-weight:500;line-height:1.07;letter-spacing:-.055em;text-wrap:balance;max-width:800px;margin:0 0 24px}.article-deck{font-size:clamp(20px,2vw,26px);line-height:1.5;color:#aaaab0;max-width:700px;text-wrap:pretty;margin:0}.article-byline{display:flex;align-items:center;gap:12px;margin-top:30px;font-size:12px;color:#b1b1b6}.article-byline img{opacity:.8}.byline-divider{color:#515157;margin-inline:4px}.article-layout{display:grid;grid-template-columns:210px minmax(0,1fr);gap:48px;padding-top:48px;align-items:start}.article-sidebar{align-self:stretch}.article-sidebar-inner{position:sticky;top:100px}.contents-label{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:#e0e0e5;margin-bottom:18px}.article-mobile-contents nav,.article-sidebar nav{display:flex;flex-direction:column;gap:0}.article-sidebar nav a{font-size:12px;line-height:1.5;padding:9px 0;color:#929299;transition:color .2s}.article-sidebar nav a:hover{color:#fafafa}.article-docs-link{display:flex;justify-content:space-between;border-top:1px solid #2b2b2d;margin-top:24px;padding-top:20px;font-size:12px;color:#d2d2d8}.article-mobile-contents{display:none}.article-prose{min-width:0;font-family:Arial,Helvetica,sans-serif;font-size:17px;line-height:1.9;color:var(--reading-text);padding-bottom:70px;overflow-wrap:break-word}.article-prose p{margin:0 0 24px}.article-prose>p:first-child{font-size:19px;line-height:1.85;color:#e0e0e3}.article-prose h2,.article-prose h3{font-family:var(--sans);font-weight:500;color:#f1f1f3;scroll-margin-top:100px;text-wrap:pretty}.article-prose h2{font-size:29px;line-height:1.3;letter-spacing:-.035em;margin:56px 0 24px}.article-prose h3{font-size:22px;line-height:1.4;letter-spacing:-.02em;margin:32px 0 20px}.article-prose strong{font-weight:600;color:#ededf0}.article-prose a{color:#dedee8;text-decoration:underline;text-decoration-color:#62626b;text-underline-offset:4px;transition:text-decoration-color .2s}.article-prose a:hover{text-decoration-color:#fff}.article-prose ol,.article-prose ul{padding-left:24px;margin:24px 0 32px}.article-prose li{padding-left:6px;margin:12px 0}.article-prose li::marker{color:#82828b}.article-prose hr{height:1px;border:0;background:#28282c;margin:48px 0}.article-prose hr+h2{margin-top:0}.article-prose table{display:block;width:100%;overflow-x:auto;border-collapse:collapse;margin:30px 0 36px;font-size:13px;line-height:1.7;border:1px solid #333338;border-radius:8px}.article-prose th{background:#1b1b1f;font-weight:600;color:#eee}.article-prose td,.article-prose th{text-align:left;padding:15px 18px;border-bottom:1px solid #303035;min-width:165px;vertical-align:top}.article-prose td+td,.article-prose th+th{border-left:1px solid #303035}.article-prose tbody tr:last-child td{border-bottom:0}.article-prose tbody tr:nth-child(2n){background:#131315}.article-prose code{font-family:var(--mono);font-size:.78em;background:#202024;color:#e1e1e8;border:1px solid #35353c;border-radius:4px;padding:3px 6px;overflow-wrap:anywhere}.article-prose pre{max-width:100%;overflow-x:auto;background:#17171a;border:1px solid #333338;border-radius:10px;padding:24px;margin:28px 0 32px;line-height:2}.article-prose pre code{border:0;background:transparent;padding:0;font-size:13px;white-space:pre;overflow-wrap:normal}.article-prose p:has(>em:only-child){font-size:13px;color:#94949c}.article-prose p:has(>strong:only-child){margin-top:28px;margin-bottom:8px}.article-end{margin-left:258px;padding:40px 0 72px;border-top:1px solid #333338}.article-end-label{font-family:var(--mono);font-size:10px;color:#aaaab2;text-transform:uppercase;letter-spacing:.06em}.article-end h2{font-size:32px;font-weight:500;letter-spacing:-.035em;line-height:1.25;margin:16px 0}.article-end p{font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.8;color:#aaaab0;max-width:570px;margin-bottom:24px}.article-end>.article-back{display:flex;width:fit-content;margin-top:26px}.blog-index{padding-bottom:110px}.blog-index-header{padding:35px 0 64px}.blog-index-header h1{font-size:clamp(40px,5.5vw,68px);font-weight:500;line-height:1.1;letter-spacing:-.05em;margin:24px 0}.blog-index-header>p:last-child{color:#a8a8af;font-size:18px;line-height:1.7}.blog-feature{display:grid;grid-template-columns:1fr 1fr;gap:64px;align-items:center;padding-top:40px;border-top:1px solid #303034}.blog-feature-art{aspect-ratio:16/9;overflow:hidden;background:#151518;border:1px solid #2a2a30;border-radius:12px;transition:border-color .2s}.blog-feature-art img{display:block;width:100%;height:100%;object-fit:cover}.blog-feature-copy h2{font-size:36px;font-weight:500;letter-spacing:-.04em;line-height:1.2;margin:22px 0}.blog-feature-copy>p{font-family:Arial,Helvetica,sans-serif;color:#a8a8b0;font-size:16px;line-height:1.8;margin-bottom:30px}.feature-read{display:flex;gap:24px;font-size:13px;color:#eee}.blog-feature:hover .blog-feature-art{border-color:#656570}.blog-feature:hover .feature-read{text-decoration:underline;text-underline-offset:5px}@media(max-width:1000px){.blog-article-page,.blog-index{padding-inline:28px}.article-end,.article-header{margin-left:218px}.article-layout{grid-template-columns:180px minmax(0,1fr);gap:38px}.blog-feature{gap:32px}}@media(max-width:760px){.blog-article-page,.blog-index{padding:100px 22px 0}.article-header{margin-left:0;padding-bottom:30px}.article-header .article-kicker{margin-top:24px}.article-header h1{font-size:42px}.article-deck{font-size:21px}.article-byline{font-size:11px;gap:10px}.article-layout{display:block;padding-top:0}.article-sidebar{display:none}.article-mobile-contents{display:block;border-bottom:1px solid #303034;margin-bottom:32px}.article-mobile-contents summary{cursor:pointer;font-size:13px;padding:20px 0;color:#c3c3ca}.article-mobile-contents nav{padding-bottom:18px}.article-mobile-contents nav a{font-size:13px;color:#aaaab2;padding:8px 0}.article-prose{font-size:16px;line-height:1.85;padding-bottom:40px}.article-prose>p:first-child{font-size:18px}.article-prose h2{font-size:26px;margin-top:40px}.article-prose h3{font-size:21px}.article-prose hr{margin:36px 0}.article-prose td,.article-prose th{min-width:150px;padding:12px}.article-end{margin-left:0;padding-bottom:55px}.article-end h2{font-size:29px}.blog-index{padding-bottom:65px}.blog-index-header{padding:20px 0 42px}.blog-index-header h1{font-size:44px}.blog-feature{grid-template-columns:1fr;gap:28px;padding-top:28px}.blog-feature-copy h2{font-size:31px}.blog-feature-copy>p{margin-bottom:22px}}@media(prefers-reduced-motion:reduce){.blog-feature-art,.blog-frame a{transition:none}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--RRU6kOWIag8OaxBjl6DjU--><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="assets/logo/mark-twin-rings.svg"/><link rel="preload" as="image" href="assets/icons/ui/plugs-connected.svg"/><link rel="stylesheet" href="assets/next/static/css/ced6baae4dc4cbab.css" data-precedence="next"/><link rel="stylesheet" href="assets/next/static/css/5d8899aaed08d7f2.css" data-precedence="next"/><link rel="stylesheet" href="assets/next/static/css/18afa3e32331c41d.css" data-precedence="next"/><link rel="stylesheet" href="assets/next/static/css/15b28a76469ea7e5.css" data-precedence="next"/><link rel="stylesheet" href="assets/next/static/css/11f70fd04660da57.css" data-precedence="next"/><link rel="stylesheet" href="assets/next/static/css/dd3fb06005e18149.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="assets/next/static/chunks/webpack-1ac08e31899efefb.js"/><script src="assets/next/static/chunks/4bd1b696-f785427dddbba9fb.js" async=""></script><script src="assets/next/static/chunks/1255-d4ec8dbb0865c655.js" async=""></script><script src="assets/next/static/chunks/main-app-1ec13ceef4a34729.js" async=""></script><script src="assets/next/static/chunks/app/layout-993a96283a3ceb07.js" async=""></script><script src="assets/next/static/chunks/7772-f2d773cd3e94eea6.js" async=""></script><script src="assets/next/static/chunks/182-71d400a5d9e02879.js" async=""></script><script src="assets/next/static/chunks/8093-90b99184c0a57c57.js" async=""></script><script src="assets/next/static/chunks/971-f01a5b1fb6756f6c.js" async=""></script><script src="assets/next/static/chunks/app/dashboard/page-d91fa87fbf634bc9.js" async=""></script><link rel="ard" href="/.well-known/ard.json"/><meta name="theme-color" content="#090909"/><link rel="icon" type="image/svg+xml" href="assets/logo/favicon.svg?v=white-rings"/><link rel="preload" href="assets/fonts/syne-400.ttf" as="font" type="font/ttf" crossorigin="anonymous"/><meta name="agenttwin-api-url" content="https://api.agenttwin.si"/><title>Workspace | AgentTwin</title><meta name="description" content="Discover your project, test workflows and inspect recorded results."/><link rel="manifest" href="/manifest.webmanifest"/><meta property="og:title" content="AgentTwin agent testing for Node.js and AI agents"/><meta property="og:description" content="AgentTwin is Node.js workflow testing for prepared applications and AI agents using synthetic service data and recorded outcomes."/><meta property="og:url" content="https://agenttwin.si/"/><meta property="og:site_name" content="AgentTwin"/><meta property="og:image" content="https://agenttwin.si/social-preview.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta property="og:image:alt" content="AgentTwin workflow testing workspace — scripted preview"/><meta property="og:type" content="website"/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="AgentTwin agent testing for Node.js and AI agents"/><meta name="twitter:description" content="AgentTwin is Node.js workflow testing for prepared applications and AI agents using synthetic service data and recorded outcomes."/><meta name="twitter:image" content="https://agenttwin.si/social-preview.png"/><link rel="apple-touch-icon" href="/apple-touch-icon.png" sizes="180x180" type="image/png"/><script>(function(){
|
|
2
2
|
var attribute='bis_skin_checked';
|
|
3
3
|
function clean(node){
|
|
4
4
|
if(node.nodeType!==1)return;
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
}else record.addedNodes.forEach(clean);
|
|
14
14
|
});
|
|
15
15
|
}).observe(document.documentElement,{subtree:true,childList:true,attributes:true,attributeFilter:[attribute]});
|
|
16
|
-
})();</script><script>(function(){try{if(location.pathname.indexOf('/docs')!==0)return;var s=localStorage.getItem('agenttwin:docs-theme');var t=s==='light'||s==='dark'?s:(window.matchMedia('(prefers-color-scheme: light)').matches?'light':'dark');var d=document.documentElement;d.dataset.docsTheme=t;d.style.colorScheme=t;}catch(e){}})();</script><script defer="" data-domain="agenttwin.si" src="https://analytics.hirealpha.chat/js/script.js"></script><script src="assets/next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><a class="skip" href="#main">Skip to content</a><div class="app-frame"><p class="announce-strip"><span class="record-dot"></span>AgentTwin / workflow testing</p><header class="topbar"><a class="brand" href="#home" aria-label="AgentTwin home"><img src="assets/logo/mark-twin-rings.svg" width="23" height="23" alt=""/>AgentTwin</a><button id="sidebar-toggle" class="sidebar-toggle" type="button" aria-label="Toggle sidebar" aria-expanded="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><rect x="3" y="4" width="18" height="16" rx="3"></rect><path d="M9 4v16"></path></svg></button><nav class="home-switcher" aria-label="Switch view"><button type="button" data-view="home" class="active" aria-current="page"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="m3 10.5 9-7.5 9 7.5"></path><path d="M5.5 9v10.5h13V9"></path></svg>Home<span class="pill-count" id="home-badge" hidden="">0</span></button><button type="button" data-view="environment"><img src="assets/icons/ui/stack-simple.svg" alt=""/>Environment</button><button type="button" data-view="configure"><img src="assets/icons/ui/git-branch.svg" alt=""/>Workflows</button><button type="button" data-view="history"><img src="assets/icons/ui/clock.svg" alt=""/>Runs</button><button type="button" data-view="settings"><img src="assets/icons/ui/stack-simple.svg" alt=""/>Settings</button></nav><div class="home-top-actions"><a href="/login/" data-auth-link="true" class="home-search">Sign in</a><button type="button" id="home-search" class="home-search" aria-label="Search"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><circle cx="11" cy="11" r="6.5"></circle><path d="m16 16 4.5 4.5"></path></svg><span class="hs-label">Search</span><kbd>⌘K</kbd></button><div class="home-bell-wrap"><button type="button" id="home-bell" class="home-icon-btn" aria-label="Notifications" aria-haspopup="true" aria-expanded="false" aria-controls="home-bell-menu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M18 9a6 6 0 1 0-12 0c0 6-2 7-2 7h16s-2-1-2-7"></path><path d="M10 20a2.2 2.2 0 0 0 4 0"></path></svg><span class="bell-badge" id="bell-badge" hidden="">0</span></button><div id="home-bell-menu" class="home-menu bell-menu" hidden=""><p class="menu-label">Notifications</p><div id="bell-items"></div></div></div><button type="button" id="home-expand" class="home-icon-btn" aria-label="Toggle full screen"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M9 3H3v6M15 3h6v6M9 21H3v-6M15 21h6v-6"></path></svg></button></div><div class="workspace-name"><span id="workspace-label">Workspace</span><span class="workspace-divider">/</span><span id="current-view">Environment</span></div><div class="account-control"><button type="button" id="account-toggle" class="workspace-avatar" aria-label="Open account menu" aria-expanded="false" aria-controls="account-menu">AT</button><div id="account-menu" class="account-menu" hidden=""><div class="account-menu-head"><span class="account-menu-avatar" aria-hidden="true">AT</span><span class="account-menu-identity"><strong id="account-user-name">Your name not set</strong><small id="account-workspace">My workspace</small></span></div><p id="account-menu-status" class="account-menu-status muted">Not connected</p><div class="account-menu-links"><a href="/login/" data-auth-link="true">Sign in</a><a href="/signup/" data-auth-link="true">Create an account</a><a href="/onboarding/">Connect a repository</a></div><div class="account-menu-actions"><button type="button" data-action="settings">Account & settings</button><button type="button" data-action="history">View runs</button></div><div class="account-menu-footer"><button type="button" id="account-disconnect" disabled="">Sign out</button></div></div></div></header><div class="app-layout"><nav class="project-tabs app-nav" aria-label="Project views"><div class="sidebar-primary"><button id="sidebar-discover" class="sidebar-create" type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M12 5v14M5 12h14"></path></svg>Connect project</button></div><div id="sidebar-projects" aria-label="Your repositories"></div><div class="sidebar-bottom"><a class="nav-item" href="https://agenttwin.si/docs/"><svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M12 5v15M12 5C9 3 5 3 2 4v15c3-1 7-1 10 1M12 5c3-2 7-2 10-1v15c-3-1-7-1-10 1"></path></svg>Documentation<span class="nav-external" aria-hidden="true">↗</span></a></div></nav><main id="main"><p id="api-message" class="coverage" role="status" aria-live="polite"></p><section id="home-view" hidden="" aria-label="Agent home"><div class="home-hero"><div id="home-sky" aria-hidden="true"></div><h1 class="home-overview-title">What should your agent test?</h1><section class="home-assistant-bottom" aria-label="Workflow assistant"><div class="assistant-entry"><button type="button" id="assistant-dock-toggle" aria-expanded="false" aria-controls="assistant-dock-panel"><span class="assistant-entry-label-desktop">Ask about a workflow or test result</span><span class="assistant-entry-label-mobile">Ask AgentTwin</span><span aria-hidden="true">↑</span></button><button type="button" id="assistant-voice-entry" class="voice-button" aria-label="Dictate a message" title="Dictate a message"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" aria-hidden="true"><rect x="9" y="3" width="6" height="12" rx="3"></rect><path d="M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8"></path></svg></button></div><div class="hero-content" id="assistant-dock-panel" hidden=""><button type="button" id="assistant-dock-close" aria-label="Minimize workflow assistant">Minimize ↓</button><div class="home-composer" role="form" aria-label="Workflow assistant"><div class="assistant-heading"><strong>Ask AgentTwin</strong><span id="assistant-project-context"></span></div><p id="assistant-connection-status" role="status"></p><button type="button" id="assistant-connect">Connect your account</button><label class="visually-hidden" for="composer-input">Ask about your workflow</label><textarea id="composer-input" rows="3" placeholder="What would you like to test?" spellCheck="false"></textarea><div class="composer-row"><span class="assistant-send-hint">Ask about your workflows or run results</span><button type="button" id="composer-voice" class="voice-button" aria-label="Dictate a message" title="Dictate a message"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" aria-hidden="true"><rect x="9" y="3" width="6" height="12" rx="3"></rect><path d="M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8"></path></svg></button><button type="button" class="composer-send" id="composer-send" aria-label="Send message">Send ↑</button></div><div id="chat-thread" class="chat-thread" aria-label="Workflow conversation" hidden=""></div><p id="composer-note" class="composer-note" role="status"></p></div></div></section></div><div class="home-body"><section id="home-next-step" class="next-step home-action" aria-label="Next step"></section><div class="home-grid-head"><span class="grid-hint">Your workspace</span><button type="button" id="home-customize" aria-expanded="false" aria-controls="home-widget-controls"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="6.5" height="6.5" rx="1.5"></rect><rect x="13.5" y="4" width="6.5" height="6.5" rx="1.5"></rect><rect x="4" y="13.5" width="6.5" height="6.5" rx="1.5"></rect><rect x="13.5" y="13.5" width="6.5" height="6.5" rx="1.5"></rect></svg>Customize</button></div><div id="home-widget-controls" class="home-widget-controls" role="region" aria-label="Customize home" hidden=""></div><div class="home-widgets"><div class="widget-column"><article class="widget area-project" id="widget-project"><header><h2>Project discovery</h2></header><div class="w-body" id="project-body"></div></article><article class="widget area-git" id="widget-git"><header><h2>Git activity</h2><span id="git-meta" class="w-head-meta"></span></header><div class="w-body" id="git-body"></div></article><article class="widget area-working" id="widget-working"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M6 3v12a3 3 0 0 0 3 3h9"></path><path d="M6 3 3 6m3-3 3 3"></path><path d="m15 15 3 3 3-3"></path></svg></span><h2>Working now</h2><span class="w-count" id="working-count"></span><span class="w-head-meta" id="working-meta"></span></header><div class="w-body" id="working-body"></div></article><article class="widget area-sandbox" id="widget-sandbox"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="5" width="18" height="14" rx="3"></rect><path d="M3 10h18M8 5v5"></path></svg></span><h2>Last execution</h2><span class="w-head-meta" id="sandbox-meta"></span></header><div class="w-body" id="sandbox-body"></div></article></div><div class="widget-column"><article class="widget area-receipts" id="widget-receipts"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M6 3h9l4 4v14H6Z"></path><path d="M15 3v4h4"></path><path d="M9 12h7M9 16h7"></path></svg></span><h2>Test results</h2><span class="w-count warn" id="receipts-count"></span><span class="w-head-spin" id="receipts-spin" hidden=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="spin"><path d="M12 3a9 9 0 1 0 9 9" stroke-linecap="round"></path></svg></span></header><div class="w-body" id="receipts-body"></div></article><article class="widget area-services" id="widget-services"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="9"></circle><circle cx="12" cy="12" r="2.5"></circle><path d="M5.5 5.5 10 10m4 4 4.5 4.5M18.5 5.5 14 10m-4 4-4.5 4.5"></path></svg></span><h2>Observed activities</h2></header><div class="w-body" id="services-body"></div></article><article class="widget area-failures" id="widget-failures"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="9"></circle><path d="m9 9 6 6M15 9l-6 6"></path></svg></span><h2>Needs attention</h2><span class="w-head-meta" id="failures-meta"></span></header><div class="w-body" id="failures-body"></div></article><article class="widget area-readiness" id="widget-readiness"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M8 4H5v17h14V4h-3"></path><rect x="8" y="2" width="8" height="4" rx="1"></rect><path d="m8 13 3 3 5-6"></path></svg></span><h2>Test readiness</h2></header><div class="w-body" id="readiness-body"></div></article></div></div></div></section><section id="environment-view"><div id="environment-project-actions" class="environment-project-actions" hidden=""><p id="environment-removal-message" role="status" aria-live="polite"></p><button id="environment-delete-project" type="button"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M3 6h18M9 6V3h6v3M5 6l1 15h12l1-15M10 10v7M14 10v7"></path></svg>Delete project</button></div><div class="heading"><div><p class="eyebrow">Project / environment</p><h1 id="environment-title">A test world for your agent.</h1><p id="environment-subtitle" class="muted">Discover your project. Test what your agent does before it touches production.</p></div><div class="actions"><label class="upload">Import discovery<input id="inventory-import" type="file" accept="application/json,.json"/></label><button id="configure-run" class="primary" type="button">Review workflows →</button></div></div><div class="discovery-onboarding"><aside class="terminal-panel"><div class="terminal-title"><h2>Connect your project</h2><span>From your terminal</span></div><div class="terminal-content"><div class="terminal-command"><span class="command-prompt" aria-hidden="true">❯</span><code>npx agenttwin init</code><button id="copy-init" type="button" aria-label="Copy discovery command">Copy command <span aria-hidden="true">↗</span></button></div><p class="terminal-comment">Run in your repository · Node.js 22.12+</p><div class="terminal-output" id="terminal-output"></div><details class="discovery-help"><summary>Analyze with a coding agent</summary><p>Init offers OpenCode when installed. To launch it directly, run <code>npx agenttwin init --agent opencode</code>. Other agents can use the generated <code>AGENT-TASK.md</code>.</p></details><details class="discovery-help"><summary>Send findings to this workspace</summary><p>Connect your account in Settings, configure <code>AGENTTWIN_TOKEN</code> in your terminal, then run <code>npx agenttwin sync</code>. This sends discovery metadata. Application files upload separately when you execute a reviewed bundle.</p><button type="button" data-action="settings">Open connection settings →</button></details></div></aside><section class="workflow-area"><div class="section-title"><h2 id="discovery-workflows-title">Discovery</h2><button id="discovery-workflows-link" type="button" data-action="configure">View workflows →</button></div><div id="environment-workflows"></div></section></div><div class="welcome-next"><ol class="welcome-steps"><li><span>01</span><div><strong>Discover</strong><p>Find tools and code paths.</p></div></li><li><span>02</span><div><strong>Review</strong><p>Choose what needs testing.</p></div></li><li><span>03</span><div><strong>Run safely</strong><p>Test through the CLI.</p></div></li></ol><button id="welcome-select-software" type="button">Or select your tools manually <span aria-hidden="true">→</span></button></div><div id="environment-coverage" class="coverage-strip"></div><div class="environment-grid"><section class="discovery-area"><div class="section-title"><h2>Selected resources</h2><div class="actions"><button id="add-app-toggle" type="button">Add custom software</button><button id="select-software" type="button">Select software</button></div></div><p id="inventory-context" class="coverage">No project connected. Import the inventory from your CLI to see its dependencies and workflow candidates.</p><form id="add-app" class="app-declaration" hidden=""><label>App or tool name<input id="app-name" required="" maxLength="80" placeholder="For example, Apple Mail"/></label><label>How the agent uses it<select id="app-interface"><option value="desktop">Desktop interface · no API required</option><option value="browser">Browser interface</option><option value="api">API / connector</option><option value="terminal">Terminal / command line</option></select></label><button type="submit">Add to environment</button></form><section class="topology-panel"><header class="topology-heading"><h3>Environment map</h3><span id="resource-count">0 resources</span><div class="map-controls"><button id="map-zoom-out" type="button" aria-label="Zoom out">−</button><span id="map-zoom-label">100%</span><button id="map-zoom-in" type="button" aria-label="Zoom in">+</button><button id="map-fit" type="button">Reset view</button><button id="map-arrange" type="button">Arrange</button></div></header><div class="map-workspace"><div id="map-canvas" class="topology-canvas" tabindex="0" aria-label="Environment map. Drag empty space to pan; drag cards to move them. Use arrow keys to pan."><p id="topology-label" class="topology-label">Selected resources</p><div id="map-scroll-space" class="map-scroll-space"><div id="map-stage" class="map-stage"><svg id="map-edges" class="map-edges" aria-hidden="true"></svg><div id="environment-project" class="environment-project" data-node="project" tabindex="0" aria-label="Move project card"></div><div id="environment-tools" class="resource-grid"></div></div></div><div id="map-empty" class="map-empty"><img src="assets/icons/ui/plugs-connected.svg" width="26" height="26" alt=""/><h3>No resources selected</h3><p>Run init in your project, then import .agenttwin/inventory.json. You can also declare a resource manually.</p><button id="map-select-tools" type="button">Browse resource catalog</button></div><span class="map-hint">Drag to pan · drag cards to arrange</span></div><aside class="map-resource-rail"><label>Selected resources <span id="map-list-count"></span><input id="map-resource-search" type="search" placeholder="Find a selected tool"/></label><div id="map-resource-list"></div><div id="map-resource-detail"><p>Select a resource to inspect coverage.</p></div></aside></div><div class="map-pagination"><span id="map-page-label"></span><span>Scroll to explore · select a name to locate its card</span></div></section><p id="environment-message" role="status" aria-live="polite"></p><div id="removed-resource" class="removal-notice" role="status" hidden=""><span id="removed-resource-message"></span><button id="undo-remove-resource" type="button">Undo</button></div></section></div><details class="catalog-drawer"><summary>Select software <span>choose what your workflow uses</span></summary><div class="catalog-body"><div id="catalog-slot"><div class="connector-toolbar"><label>Find a connector<input id="connector-search" type="search" placeholder="Search services"/></label><button id="select-connectors" type="button">Select all</button><button id="clear-connectors" type="button">Clear selection</button></div><p id="connector-status" role="status" aria-live="polite"></p><div id="connector-catalog" class="connector-catalog"></div><button id="export-connectors" type="button">Export selection ↓</button></div></div></details><details class="coverage-note"><summary>Runtime coverage</summary><p>Node workflows with custom HTTP collections and bounded Slack operations run through the CLI. PostgreSQL and Redis worlds can use an explicitly selected cloud runner. Other provider adapters and browser/desktop execution require implementation. Native macOS apps need a compatible macOS runtime. Production accounts are not copied.</p></details></section><section id="configure-view" hidden=""><div class="heading"><div><p class="eyebrow">Project / workflows</p><h1 id="workflows-title">Workflows</h1><p id="workflows-subtitle" class="muted">Choose a code path. Define the world it runs in. Check the outcome.</p></div></div><div id="workflow-workspace"></div></section><section id="settings-view" hidden=""><div class="heading"><div><h1>Settings</h1><p class="muted">Your account, projects and dashboard preferences.</p></div></div><form id="api-connect"></form><section class="settings-section"><div class="settings-section-heading"><h2>Sign-in methods</h2><p>Signed up with Google? Create a password to use email sign-in with the same workspace.</p></div><a href="/account/password/">Email and password →</a></section><form id="workspace-preferences" class="settings-preferences"><section class="settings-section"><div class="settings-section-heading"><h2>Account & company</h2><p>Your display details on this browser.</p></div><div class="setting-row"><div><label for="workspace-display-name">Company or workspace</label></div><input id="workspace-display-name" type="text" maxLength="40" required="" autoComplete="organization" value="My workspace"/></div><div class="setting-row"><div><label for="workspace-user-name">Your name</label></div><input id="workspace-user-name" type="text" maxLength="60" autoComplete="name"/></div><div class="settings-connection"><div class="settings-section-heading"><h3>Workspace connection</h3><p>Connect to see your synced projects and test results.</p></div><p id="account-connection-status" class="connection-status" role="status">Not connected</p><details class="settings-credentials"><summary>Connection details</summary><label for="api-url">Server address</label><input form="api-connect" id="api-url" type="url" required="" placeholder="https://your-agenttwin-api.example"/><label for="api-token">Account token</label><div class="token-input"><input form="api-connect" id="api-token" type="password" required="" autoComplete="off" placeholder="at_user_…"/><button id="toggle-token" type="button" aria-label="Show account token" aria-pressed="false">Show</button></div><p class="setup-note">Your token stays in this tab until you reload or disconnect.</p><button form="api-connect" type="submit" class="primary">Connect account</button></details><div class="actions"><button type="button" id="api-sync-settings" disabled="">Refresh projects</button><button type="button" id="api-disconnect" disabled="">Disconnect account</button></div><p id="settings-connection-message" role="status" aria-live="polite"></p><details class="settings-assistant-status"><summary>Assistant availability</summary><p id="settings-chat-status" role="status">Connect your account to check availability.</p></details></div></section><section class="settings-section"><div class="project-settings-heading"><div><h2>Projects</h2><p>Applications connected to this workspace.</p></div><a class="project-add" href="/onboarding/">Add project</a></div><div id="settings-repositories"><p class="muted">No projects connected.</p></div><p id="project-settings-message" role="status" aria-live="polite"></p></section><section class="settings-section"><div class="settings-section-heading"><h2>Testing</h2><p>Start locally. Choose a cloud machine only when a workflow needs one.</p></div><div class="settings-runtime"><span class="settings-default">Default</span><h3>Run in your repository</h3><p>Use <code>npx agenttwin run</code>, then <code>npx agenttwin sync</code> to see results here.</p></div><p class="setup-note">Execution limits, dependencies and cloud requirements belong to each workflow.</p><button type="button" data-goto="configure">Review workflows →</button></section><section class="settings-section"><div class="settings-section-heading"><h2>Preferences</h2><p>Make this dashboard comfortable for you.</p></div><div class="setting-row"><div><label for="dashboard-artwork">Home background</label><p>Automatic follows your local time.</p></div><select id="dashboard-artwork"><option value="auto" selected="">Automatic</option><option value="morning">Morning</option><option value="afternoon">Afternoon</option><option value="evening">Evening</option></select></div><div class="setting-row"><div><label for="auto-refresh">Live updates</label><p>Refresh project and run status while this tab is open.</p></div><input id="auto-refresh" type="checkbox" role="switch" checked=""/></div><div class="setting-row"><div><label for="compact-density">Compact layout</label><p>Fit more workflows and runs on screen.</p></div><input id="compact-density" type="checkbox" role="switch"/></div><div class="setting-row"><div><label for="reduce-motion">Reduce motion</label><p>Use fewer animations and transitions.</p></div><input id="reduce-motion" type="checkbox" role="switch"/></div></section><div class="settings-save"><p id="preferences-message" role="status" aria-live="polite">Changes save to this browser.</p><button type="button" id="reset-preferences">Reset preferences</button><button type="submit" class="primary">Save changes</button></div></form></section><section id="history-view" hidden=""><div class="heading"><div><p class="eyebrow">Project / runs</p><h1 id="runs-title">Runs</h1><p id="runs-subtitle" class="muted">See what was tested, what happened, and what to fix.</p></div><div class="actions"><button id="reload" type="button">Refresh</button><label class="primary upload">Import test results<input id="import" type="file" accept="application/json,.json" multiple=""/></label></div></div><section class="workflow-register submitted-jobs"><div class="section-title"><h2>Execution queue</h2><button id="refresh-api-jobs" type="button" disabled="">Refresh</button></div><div id="api-jobs"><p class="coverage">Connect your account in Settings to load submitted runs.</p></div></section><p id="message" role="status" aria-live="polite"></p><section class="stats" id="stats" aria-label="Run summary"></section><div class="workspace"><aside class="run-sidebar"><div class="list-heading"><h2>Test history</h2><span id="run-count"></span></div><label class="search-label">Filter runs<input id="search" type="search" placeholder="Find a workflow, revision or run"/></label><div class="run-filters"><label>Repository<select id="run-project"><option value="all" selected="">All repositories</option></select></label><label>Outcome<select id="run-status"><option value="all" selected="">All outcomes</option><option value="passed">Passed</option><option value="failed">Failed</option><option value="error">Execution error</option><option value="incomplete">Incomplete</option></select></label><label>Workflow<select id="run-workflow"><option value="all" selected="">All workflows</option></select></label></div><label class="mobile-run-picker">Select test<select id="run-picker"><option value="" selected="">No tests loaded</option></select></label><div id="runs" aria-label="Select a run"><p class="muted">Loading run evidence…</p></div></aside><article id="detail" class="detail" aria-live="polite"><div class="empty"><h2>Loading evidence</h2><p>Fetching recorded test results.</p></div></article></div></section></main><button type="button" class="workspace-tour-launcher"><span aria-hidden="true">✦</span> Take a tour</button></div></div><!--$--><!--/$--><script src="assets/next/static/chunks/webpack-44457f45df749a89.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[4522,[\"7177\",\"static/chunks/app/layout-09868e53e4f0541f.js\"],\"default\"]\n3:I[19,[],\"\"]\n4:I[7023,[],\"\"]\n5:I[9399,[\"3916\",\"static/chunks/3916-2698a1a3ecb8649f.js\",\"1981\",\"static/chunks/1981-2ce2c5edd154524a.js\",\"5105\",\"static/chunks/app/dashboard/page-945c916b24f48675.js\"],\"default\"]\n9:I[3977,[],\"\"]\n:HL[\"assets/next/static/css/81a1668ab34a36e8.css\",\"style\"]\n:HL[\"assets/next/static/css/5d8899aaed08d7f2.css\",\"style\"]\n:HL[\"assets/next/static/css/eea0966f05042bde.css\",\"style\"]\n:HL[\"assets/next/static/css/0cf03e33b963e5cb.css\",\"style\"]\n:HL[\"assets/next/static/css/11f70fd04660da57.css\",\"style\"]\n:HL[\"assets/next/static/css/dd3fb06005e18149.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"BbTZs0rKnsmj45peSnlwJ\",\"p\":\"\",\"c\":[\"\",\"dashboard\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"dashboard\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/81a1668ab34a36e8.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){\\n var attribute='bis_skin_checked';\\n function clean(node){\\n if(node.nodeType!==1)return;\\n if(node.hasAttribute(attribute))node.removeAttribute(attribute);\\n node.querySelectorAll('['+attribute+']').forEach(function(element){element.removeAttribute(attribute);});\\n }\\n clean(document.documentElement);\\n new MutationObserver(function(records){\\n records.forEach(function(record){\\n if(record.type==='attributes'){\\n if(record.target.hasAttribute(attribute))record.target.removeAttribute(attribute);\\n }else record.addedNodes.forEach(clean);\\n });\\n }).observe(document.documentElement,{subtree:true,childList:true,attributes:true,attributeFilter:[attribute]});\\n})();\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){try{if(location.pathname.indexOf('/docs')!==0)return;var s=localStorage.getItem('agenttwin:docs-theme');var t=s==='light'||s==='dark'?s:(window.matchMedia('(prefers-color-scheme: light)').matches?'light':'dark');var d=document.documentElement;d.dataset.docsTheme=t;d.style.colorScheme=t;}catch(e){}})();\"}}],[\"$\",\"script\",null,{\"defer\":true,\"data-domain\":\"agenttwin.si\",\"src\":\"https://analytics.hirealpha.chat/js/script.js\"}],[\"$\",\"$L2\",null,{}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#090909\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/svg+xml\",\"href\":\"assets/logo/favicon.svg?v=white-rings\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"href\":\"assets/fonts/syne-400.ttf\",\"as\":\"font\",\"type\":\"font/ttf\",\"crossOrigin\":\"anonymous\"}]]}],[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"dashboard\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/5d8899aaed08d7f2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/eea0966f05042bde.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/0cf03e33b963e5cb.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[[\"$\",\"meta\",null,{\"name\":\"agenttwin-api-url\",\"content\":\"https://api.agenttwin.si\"}],[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/11f70fd04660da57.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],\"$L6\"],\"$L7\"]}],{},null,false]},null,false]},null,false],\"$L8\",false]],\"m\":\"$undefined\",\"G\":[\"$9\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:I[9226,[],\"OutletBoundary\"]\nc:I[4943,[],\"AsyncMetadataOutlet\"]\ne:I[9226,[],\"ViewportBoundary\"]\n10:I[9226,[],\"MetadataBoundary\"]\n11:\"$Sreact.suspense\"\n6:[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/dd3fb06005e18149.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n7:[\"$\",\"$La\",null,{\"children\":[\"$Lb\",[\"$\",\"$Lc\",null,{\"promise\":\"$@d\"}]]}]\n8:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Le\",null,{\"children\":\"$Lf\"}],null],[\"$\",\"$L10\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$11\",null,{\"fallback\":null,\"children\":\"$L12\"}]}]}]]}]\n"])</script><script>self.__next_f.push([1,"f:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nb:null\n"])</script><script>self.__next_f.push([1,"d:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Workspace | AgentTwin\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Discover your project, test workflows and inspect recorded results.\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"12:\"$d:metadata\"\n"])</script></body></html>
|
|
16
|
+
})();</script><script defer="" data-domain="agenttwin.si" src="https://analytics.hirealpha.chat/js/script.js"></script><script defer="" src="https://analytics.agenttwin.si/script.js" data-website-id="00000000-0000-0000-0000-000000000000"></script><script src="assets/next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><a class="skip" href="#main">Skip to content</a><div data-slot="sidebar-wrapper" style="--sidebar-width:16rem;--sidebar-width-icon:3rem" class="group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar app-frame dashboard-workspace dark"><header class="topbar"><a class="brand dashboard-brand" data-dashboard-home="true" href="#home" aria-label="AgentTwin home"><img src="assets/logo/mark-twin-rings.svg" width="25" height="25" alt="" aria-hidden="true"/>AgentTwin</a><button data-slot="sidebar-trigger" data-variant="ghost" data-size="icon" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-7" aria-expanded="true" data-sidebar="trigger" id="sidebar-toggle" data-shadcn-sidebar="true" aria-label="Toggle sidebar"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left lucide-sidebar" aria-hidden="true"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path></svg><span class="sr-only">Toggle Sidebar</span></button><nav class="home-switcher workspace-navigation" aria-label="Main navigation"><button type="button" data-view="home"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-house lucide-home" aria-hidden="true"><path d="M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8"></path><path d="M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path></svg><span>Home</span><span id="home-badge" class="pill-count" hidden="">0</span></button><button type="button" data-view="environment"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layers lucide-layers-3" aria-hidden="true"><path d="M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z"></path><path d="M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12"></path><path d="M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17"></path></svg><span>Environment</span></button><button type="button" data-view="configure"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch" aria-hidden="true"><path d="M15 6a9 9 0 0 0-9 9V3"></path><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle></svg><span>Workflows</span></button><button type="button" data-view="history"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rotate-ccw-clock lucide-history" aria-hidden="true"><path d="M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8"></path><path d="M3 3v5h5"></path><path d="M12 7v5l4 2"></path></svg><span>Runs</span></button><button type="button" data-view="settings"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings" aria-hidden="true"><path d="M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915"></path><circle cx="12" cy="12" r="3"></circle></svg><span>Settings</span></button></nav><div class="home-top-actions"><a href="/login/" data-auth-link="true" class="home-search">Sign in</a><button type="button" id="home-search" class="home-search" aria-label="Search"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><circle cx="11" cy="11" r="6.5"></circle><path d="m16 16 4.5 4.5"></path></svg><span class="hs-label">Search</span><kbd>⌘K</kbd></button><div class="home-bell-wrap"><button type="button" id="home-bell" class="home-icon-btn" aria-label="Notifications" aria-haspopup="true" aria-expanded="false" aria-controls="home-bell-menu"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M18 9a6 6 0 1 0-12 0c0 6-2 7-2 7h16s-2-1-2-7"></path><path d="M10 20a2.2 2.2 0 0 0 4 0"></path></svg><span class="bell-badge" id="bell-badge" hidden="">0</span></button><div id="home-bell-menu" class="home-menu bell-menu" hidden=""><p class="menu-label">Notifications</p><div id="bell-items"></div></div></div><button type="button" id="home-expand" class="home-icon-btn" aria-label="Toggle full screen"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" aria-hidden="true"><path d="M9 3H3v6M15 3h6v6M9 21H3v-6M15 21h6v-6"></path></svg></button></div><div class="workspace-name" hidden=""><span id="workspace-label">Workspace</span><span class="workspace-divider">/</span><span id="current-view">Environment</span></div><div class="account-control"><button type="button" id="account-toggle" class="workspace-avatar" aria-label="Open account menu" aria-expanded="false" aria-controls="account-menu">AT</button><div id="account-menu" class="account-menu" hidden=""><div class="account-menu-head"><span class="account-menu-avatar" aria-hidden="true">AT</span><span class="account-menu-identity"><strong id="account-user-name">Your name not set</strong><small id="account-workspace">My workspace</small></span></div><p id="account-menu-status" class="account-menu-status muted">Not connected</p><div class="account-menu-links"><a href="/login/" data-auth-link="true">Sign in</a><a href="/signup/" data-auth-link="true">Create an account</a><a href="/onboarding/">Connect a repository</a></div><div class="account-menu-actions"><button type="button" data-action="settings">Account & settings</button><button type="button" data-action="history">View runs</button></div><div class="account-menu-footer"><button type="button" id="account-disconnect" disabled="">Sign out</button></div></div></div></header><div class="workspace-body"><div class="group peer hidden text-sidebar-foreground md:block" data-state="expanded" data-collapsible="" data-variant="floating" data-side="left" data-slot="sidebar"><div data-slot="sidebar-gap" class="relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]"></div><div data-slot="sidebar-container" class="fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)] workspace-sidebar"><div data-sidebar="sidebar" data-slot="sidebar-inner" class="flex h-full w-full flex-col bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border group-data-[variant=floating]:shadow-sm"><div data-slot="sidebar-header" data-sidebar="header" class="flex flex-col gap-2 p-2"><button data-slot="button" data-variant="outline" data-size="default" class="inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50 h-9 px-4 py-2 has-[>svg]:px-3" id="sidebar-discover"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus" aria-hidden="true"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg><span>Connect project</span></button></div><div data-slot="sidebar-content" data-sidebar="content" class="flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden"><div data-slot="sidebar-group" data-sidebar="group" class="relative flex w-full min-w-0 flex-col p-2 repository-group"><div id="sidebar-projects" aria-label="Your repositories"></div></div></div><div data-slot="sidebar-footer" data-sidebar="footer" class="flex flex-col gap-2 p-2"><ul data-slot="sidebar-menu" data-sidebar="menu" class="flex w-full min-w-0 flex-col gap-1"><li data-slot="sidebar-menu-item" data-sidebar="menu-item" class="group/menu-item relative"><a href="https://agenttwin.si/docs/" data-slot="sidebar-menu-button" data-sidebar="menu-button" data-size="default" data-active="false" class="peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground h-8 text-sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open" aria-hidden="true"><path d="M12 5v16"></path><path d="M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z"></path></svg><span>Documentation</span></a></li></ul></div></div></div></div><div data-slot="sidebar-inset" class="relative flex w-full flex-1 flex-col bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2 workspace-inset"><div class="app-layout"><main id="main"><p id="api-message" class="coverage" role="status" aria-live="polite"></p><section id="home-view" hidden="" aria-label="Agent home"><div class="home-hero"><div id="home-sky" aria-hidden="true"></div><h1 class="home-overview-title">What should your agent test?</h1><section class="home-assistant-bottom" aria-label="Workflow assistant"><div class="assistant-entry"><button type="button" id="assistant-dock-toggle" aria-expanded="false" aria-controls="assistant-dock-panel"><span class="assistant-entry-label-desktop">Ask about a workflow or test result</span><span class="assistant-entry-label-mobile">Ask AgentTwin</span><span aria-hidden="true">↑</span></button><button type="button" id="assistant-voice-entry" class="voice-button" aria-label="Dictate a message" title="Dictate a message"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" aria-hidden="true"><rect x="9" y="3" width="6" height="12" rx="3"></rect><path d="M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8"></path></svg></button></div><div class="hero-content" id="assistant-dock-panel" hidden=""><button type="button" id="assistant-dock-close" aria-label="Minimize workflow assistant">Minimize ↓</button><div class="home-composer" role="form" aria-label="Workflow assistant"><div class="assistant-heading"><strong>Ask AgentTwin</strong><span id="assistant-project-context"></span></div><p id="assistant-connection-status" role="status"></p><button type="button" id="assistant-connect">Connect your account</button><label class="visually-hidden" for="composer-input">Ask about your workflow</label><textarea id="composer-input" rows="3" placeholder="What would you like to test?" spellCheck="false"></textarea><div class="composer-row"><span class="assistant-send-hint">Ask about your workflows or run results</span><button type="button" id="composer-voice" class="voice-button" aria-label="Dictate a message" title="Dictate a message"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" aria-hidden="true"><rect x="9" y="3" width="6" height="12" rx="3"></rect><path d="M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8"></path></svg></button><button type="button" class="composer-send" id="composer-send" aria-label="Send message">Send ↑</button></div><div id="chat-thread" class="chat-thread" aria-label="Workflow conversation" hidden=""></div><p id="composer-note" class="composer-note" role="status"></p></div></div></section></div><div class="home-body"><section id="home-next-step" class="next-step home-action" aria-label="Next step"></section><div class="home-grid-head"><span class="grid-hint">Your workspace</span><button type="button" id="home-customize" aria-expanded="false" aria-controls="home-widget-controls"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><rect x="4" y="4" width="6.5" height="6.5" rx="1.5"></rect><rect x="13.5" y="4" width="6.5" height="6.5" rx="1.5"></rect><rect x="4" y="13.5" width="6.5" height="6.5" rx="1.5"></rect><rect x="13.5" y="13.5" width="6.5" height="6.5" rx="1.5"></rect></svg>Customize</button></div><div id="home-widget-controls" class="home-widget-controls" role="region" aria-label="Customize home" hidden=""></div><div class="home-widgets"><div class="widget-column"><article class="widget area-project" id="widget-project"><header><h2>Project discovery</h2></header><div class="w-body" id="project-body"></div></article><article class="widget area-git" id="widget-git"><header><h2>Git activity</h2><span id="git-meta" class="w-head-meta"></span></header><div class="w-body" id="git-body"></div></article><article class="widget area-services" id="widget-services"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="9"></circle><circle cx="12" cy="12" r="2.5"></circle><path d="M5.5 5.5 10 10m4 4 4.5 4.5M18.5 5.5 14 10m-4 4-4.5 4.5"></path></svg></span><h2>Observed activities</h2></header><div class="w-body" id="services-body"></div></article><article class="widget area-working" id="widget-working"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M6 3v12a3 3 0 0 0 3 3h9"></path><path d="M6 3 3 6m3-3 3 3"></path><path d="m15 15 3 3 3-3"></path></svg></span><h2>Working now</h2><span class="w-count" id="working-count"></span><span class="w-head-meta" id="working-meta"></span></header><div class="w-body" id="working-body"></div></article></div><div class="widget-column"><article class="widget area-receipts" id="widget-receipts"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M6 3h9l4 4v14H6Z"></path><path d="M15 3v4h4"></path><path d="M9 12h7M9 16h7"></path></svg></span><h2>Test results</h2><span class="w-count warn" id="receipts-count"></span><span class="w-head-spin" id="receipts-spin" hidden=""><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="spin"><path d="M12 3a9 9 0 1 0 9 9" stroke-linecap="round"></path></svg></span></header><div class="w-body" id="receipts-body"></div></article><article class="widget area-failures" id="widget-failures"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><circle cx="12" cy="12" r="9"></circle><path d="m9 9 6 6M15 9l-6 6"></path></svg></span><h2>Needs attention</h2><span class="w-head-meta" id="failures-meta"></span></header><div class="w-body" id="failures-body"></div></article><article class="widget area-readiness" id="widget-readiness"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M8 4H5v17h14V4h-3"></path><rect x="8" y="2" width="8" height="4" rx="1"></rect><path d="m8 13 3 3 5-6"></path></svg></span><h2>Test readiness</h2></header><div class="w-body" id="readiness-body"></div></article><article class="widget area-sandbox" id="widget-sandbox"><header><span class="w-ico" aria-hidden="true"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="5" width="18" height="14" rx="3"></rect><path d="M3 10h18M8 5v5"></path></svg></span><h2>Last execution</h2><span class="w-head-meta" id="sandbox-meta"></span></header><div class="w-body" id="sandbox-body"></div></article></div></div></div></section><section id="environment-view"><div id="environment-project-actions" class="environment-project-actions" hidden=""><p id="environment-removal-message" role="status" aria-live="polite"></p><button id="environment-delete-project" type="button"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" aria-hidden="true"><path d="M3 6h18M9 6V3h6v3M5 6l1 15h12l1-15M10 10v7M14 10v7"></path></svg>Delete project</button></div><div class="heading"><div><p class="eyebrow">Project / environment</p><h1 id="environment-title">Start by connecting your project</h1><p id="environment-subtitle" class="muted">Run one command in your repository — AgentTwin maps the tools and workflows your agent uses.</p></div><div class="actions"><label class="upload">Upload discovery file<input id="inventory-import" type="file" accept="application/json,.json"/></label><button id="configure-run" class="primary" type="button">Review workflows →</button></div></div><div class="discovery-onboarding"><aside class="terminal-panel"><div class="terminal-title"><h2>Connect your project</h2><span>From your terminal</span></div><div class="terminal-content"><div class="terminal-command"><span class="command-prompt" aria-hidden="true">❯</span><code>npx agenttwin init</code><button id="copy-init" type="button" aria-label="Copy discovery command">Copy command <span aria-hidden="true">↗</span></button></div><p class="terminal-comment">Run in your repository · Node.js 22.12+</p><div class="terminal-output" id="terminal-output"></div><details class="discovery-help"><summary>Analyze with a coding agent</summary><p>Init offers OpenCode when installed. To launch it directly, run <code>npx agenttwin init --agent opencode</code>. Other agents can use the generated <code>AGENT-TASK.md</code>.</p></details><details class="discovery-help"><summary>Send findings to this workspace</summary><p>Connect your account in Settings, configure <code>AGENTTWIN_TOKEN</code> in your terminal, then run <code>npx agenttwin sync</code>. This sends discovery metadata. Application files upload separately when you execute a reviewed bundle.</p><button type="button" data-action="settings">Open connection settings →</button></details></div></aside><section class="workflow-area"><div class="section-title"><h2 id="discovery-workflows-title">Discovery</h2><button id="discovery-workflows-link" type="button" data-action="configure">View workflows →</button></div><div id="environment-workflows"></div></section></div><div class="welcome-next"><ol class="welcome-steps"><li><span>01</span><div><strong>Discover</strong><p>Find tools and code paths.</p></div></li><li><span>02</span><div><strong>Review</strong><p>Choose what needs testing.</p></div></li><li><span>03</span><div><strong>Run safely</strong><p>Test through the CLI.</p></div></li></ol><button id="welcome-select-software" type="button">Or select your tools manually <span aria-hidden="true">→</span></button></div><div id="environment-coverage" class="coverage-strip"></div><div class="environment-grid"><section class="discovery-area"><div class="section-title"><h2>Selected resources</h2><div class="actions"><button id="add-app-toggle" type="button">Add custom software</button><button id="select-software" type="button">Select software</button></div></div><p id="inventory-context" class="coverage">No project connected. Import the inventory from your CLI to see its dependencies and workflow candidates.</p><form id="add-app" class="app-declaration" hidden=""><label>App or tool name<input id="app-name" required="" maxLength="80" placeholder="For example, Apple Mail"/></label><label>How the agent uses it<select id="app-interface"><option value="desktop">Desktop interface · no API required</option><option value="browser">Browser interface</option><option value="api">API / connector</option><option value="terminal">Terminal / command line</option></select></label><button type="submit">Add to environment</button></form><section class="topology-panel"><header class="topology-heading"><h3>Environment map</h3><span id="resource-count">0 resources</span><div class="map-controls"><button id="map-zoom-out" type="button" aria-label="Zoom out">−</button><span id="map-zoom-label">100%</span><button id="map-zoom-in" type="button" aria-label="Zoom in">+</button><button id="map-fit" type="button">Reset view</button><button id="map-arrange" type="button">Arrange</button></div></header><p class="topology-hint">Each card is a tool or service your agent uses — click one to see what its test needs.</p><div class="map-workspace"><div id="map-canvas" class="topology-canvas" tabindex="0" aria-label="Environment map. Drag empty space to pan; drag cards to move them. Use arrow keys to pan."><p id="topology-label" class="topology-label">Selected resources</p><div id="map-scroll-space" class="map-scroll-space"><div id="map-stage" class="map-stage"><svg id="map-edges" class="map-edges" aria-hidden="true"></svg><div id="environment-project" class="environment-project" data-node="project" tabindex="0" aria-label="Move project card"></div><div id="environment-tools" class="resource-grid"></div></div></div><div id="map-empty" class="map-empty"><img src="assets/icons/ui/plugs-connected.svg" width="26" height="26" alt=""/><h3>No resources selected</h3><p>Run init in your project, then import .agenttwin/inventory.json. You can also declare a resource manually.</p><button id="map-select-tools" type="button">Browse resource catalog</button></div><span class="map-hint">Drag to pan · drag cards to arrange</span></div><aside class="map-resource-rail"><label>Selected resources <span id="map-list-count"></span><input id="map-resource-search" type="search" placeholder="Find a selected tool"/></label><div id="map-resource-list"></div><div id="map-resource-detail"><p>Select a resource to inspect coverage.</p></div></aside></div><div class="map-pagination"><span id="map-page-label"></span><span>Scroll to explore · select a name to locate its card</span></div></section><p id="environment-message" role="status" aria-live="polite"></p><div id="removed-resource" class="removal-notice" role="status" hidden=""><span id="removed-resource-message"></span><button id="undo-remove-resource" type="button">Undo</button></div></section></div><details class="catalog-drawer"><summary>Select software <span>choose what your workflow uses</span></summary><div class="catalog-body"><div id="catalog-slot"><div class="connector-toolbar"><label>Find a connector<input id="connector-search" type="search" placeholder="Search services"/></label><button id="select-connectors" type="button">Select all</button><button id="clear-connectors" type="button">Clear selection</button></div><p id="connector-status" role="status" aria-live="polite"></p><div id="connector-catalog" class="connector-catalog"></div><button id="export-connectors" type="button">Export selection ↓</button></div></div></details><details class="coverage-note"><summary>Runtime coverage</summary><p>Node workflows with custom HTTP collections and bounded Slack operations run through the CLI. PostgreSQL and Redis worlds can use an explicitly selected cloud runner. Other provider adapters and browser/desktop execution require implementation. Native macOS apps need a compatible macOS runtime. Production accounts are not copied.</p></details></section><section id="configure-view" hidden=""><div class="heading"><div><p class="eyebrow">Project / workflows</p><h1 id="workflows-title">Workflows</h1><p id="workflows-subtitle" class="muted">Pick something your agent does. Prepare a safe test, run it, and see exactly what passed.</p></div></div><div id="workflow-workspace"></div></section><section id="settings-view" hidden=""><div class="heading"><div><h1>Settings</h1><p class="muted">Your account, projects and dashboard preferences.</p></div></div><form id="api-connect"></form><section class="settings-section"><div class="settings-section-heading"><h2>Sign-in methods</h2><p>Signed up with Google? Create a password to use email sign-in with the same workspace.</p></div><a href="/account/password/">Email and password →</a></section><form id="workspace-preferences" class="settings-preferences"><section class="settings-section"><div class="settings-section-heading"><h2>Account & company</h2><p>Your display details on this browser.</p></div><div class="setting-row"><div><label for="workspace-display-name">Company or workspace</label></div><input id="workspace-display-name" type="text" maxLength="40" required="" autoComplete="organization" value="My workspace"/></div><div class="setting-row"><div><label for="workspace-user-name">Your name</label></div><input id="workspace-user-name" type="text" maxLength="60" autoComplete="name"/></div><div class="settings-connection"><div class="settings-section-heading"><h3>Workspace connection</h3><p>Connect to see your synced projects and test results.</p></div><p id="account-connection-status" class="connection-status" role="status">Not connected</p><details class="settings-credentials"><summary>Connection details</summary><label for="api-url">Server address</label><input form="api-connect" id="api-url" type="url" required="" placeholder="https://your-agenttwin-api.example"/><label for="api-token">Account token</label><div class="token-input"><input form="api-connect" id="api-token" type="password" required="" autoComplete="off" placeholder="at_user_…"/><button id="toggle-token" type="button" aria-label="Show account token" aria-pressed="false">Show</button></div><p class="setup-note">Your token stays in this tab until you reload or disconnect.</p><button form="api-connect" type="submit" class="primary">Connect account</button></details><div class="actions"><button type="button" id="api-sync-settings" disabled="">Refresh projects</button><button type="button" id="api-disconnect" disabled="">Disconnect account</button></div><p id="settings-connection-message" role="status" aria-live="polite"></p><details class="settings-assistant-status"><summary>Assistant availability</summary><p id="settings-chat-status" role="status">Connect your account to check availability.</p></details></div></section><section class="settings-section"><div class="project-settings-heading"><div><h2>Projects</h2><p>Applications connected to this workspace.</p></div><a class="project-add" href="/onboarding/">Add project</a></div><div id="settings-repositories"><p class="muted">No projects connected.</p></div><p id="project-settings-message" role="status" aria-live="polite"></p></section><section class="settings-section"><div class="settings-section-heading"><h2>Testing</h2><p>Start locally. Choose a cloud machine only when a workflow needs one.</p></div><div class="settings-runtime"><span class="settings-default">Default</span><h3>Run in your repository</h3><p>Use <code>npx agenttwin run</code>, then <code>npx agenttwin sync</code> to see results here.</p></div><p class="setup-note">Execution limits, dependencies and cloud requirements belong to each workflow.</p><button type="button" data-goto="configure">Review workflows →</button></section><section class="settings-section"><div class="settings-section-heading"><h2>Preferences</h2><p>Make this dashboard comfortable for you.</p></div><div class="setting-row"><div><label for="dashboard-artwork">Home background</label><p>Automatic follows your local time.</p></div><select id="dashboard-artwork"><option value="auto" selected="">Automatic</option><option value="morning">Morning</option><option value="afternoon">Afternoon</option><option value="evening">Evening</option></select></div><div class="setting-row"><div><label for="auto-refresh">Live updates</label><p>Refresh project and run status while this tab is open.</p></div><input id="auto-refresh" type="checkbox" role="switch" checked=""/></div><div class="setting-row"><div><label for="compact-density">Compact layout</label><p>Fit more workflows and runs on screen.</p></div><input id="compact-density" type="checkbox" role="switch"/></div><div class="setting-row"><div><label for="reduce-motion">Reduce motion</label><p>Use fewer animations and transitions.</p></div><input id="reduce-motion" type="checkbox" role="switch"/></div></section><div class="settings-save"><p id="preferences-message" role="status" aria-live="polite">Changes save to this browser.</p><button type="button" id="reset-preferences">Reset preferences</button><button type="submit" class="primary">Save changes</button></div></form></section><section id="history-view" hidden=""><div class="heading"><div><p class="eyebrow">Project / runs</p><h1 id="runs-title">Test results</h1><p id="runs-subtitle" class="muted">Every test run lands here — what was tested, what passed, and what to fix.</p></div><div class="actions"><button id="reload" type="button">Refresh</button><label class="primary upload">Import test results<input id="import" type="file" accept="application/json,.json" multiple=""/></label></div></div><section class="workflow-register submitted-jobs"><div class="section-title"><h2>Execution queue</h2><button id="refresh-api-jobs" type="button" disabled="">Refresh</button></div><div id="api-jobs"><p class="coverage">Connect your account in Settings to load submitted runs.</p></div></section><p id="message" role="status" aria-live="polite"></p><section class="stats" id="stats" aria-label="Run summary"></section><div class="workspace"><aside class="run-sidebar"><div class="list-heading"><h2>Test history</h2><span id="run-count"></span></div><label class="search-label">Filter runs<input id="search" type="search" placeholder="Find a workflow, revision or run"/></label><div class="run-filters"><label>Repository<select id="run-project"><option value="all" selected="">All repositories</option></select></label><label>Outcome<select id="run-status"><option value="all" selected="">All outcomes</option><option value="passed">Passed</option><option value="failed">Failed</option><option value="error">Execution error</option><option value="incomplete">Incomplete</option></select></label><label>Workflow<select id="run-workflow"><option value="all" selected="">All workflows</option></select></label></div><label class="mobile-run-picker">Select test<select id="run-picker"><option value="" selected="">No tests loaded</option></select></label><div id="runs" aria-label="Select a run"><p class="muted">Loading run evidence…</p></div></aside><article id="detail" class="detail" aria-live="polite"><div class="empty"><h2>Loading evidence</h2><p>Fetching recorded test results.</p></div></article></div></section></main><button type="button" class="workspace-tour-launcher"><span aria-hidden="true">✦</span> Take a tour</button></div></div></div></div><!--$--><!--/$--><script src="assets/next/static/chunks/webpack-1ac08e31899efefb.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[1402,[\"7177\",\"static/chunks/app/layout-993a96283a3ceb07.js\"],\"\"]\n3:I[540,[\"7177\",\"static/chunks/app/layout-993a96283a3ceb07.js\"],\"default\"]\n4:I[9766,[],\"\"]\n5:I[8924,[],\"\"]\n9:I[7150,[],\"\"]\n:HL[\"assets/next/static/css/ced6baae4dc4cbab.css\",\"style\"]\n:HL[\"assets/next/static/css/5d8899aaed08d7f2.css\",\"style\"]\n:HL[\"assets/next/static/css/18afa3e32331c41d.css\",\"style\"]\n:HL[\"assets/next/static/css/15b28a76469ea7e5.css\",\"style\"]\n:HL[\"assets/next/static/css/11f70fd04660da57.css\",\"style\"]\n:HL[\"assets/next/static/css/dd3fb06005e18149.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"RRU6kOWIag8OaxBjl6DjU\",\"p\":\"\",\"c\":[\"\",\"dashboard\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"dashboard\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/ced6baae4dc4cbab.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"$L2\",null,{\"strategy\":\"lazyOnload\",\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-R96JDX5RCK\"}],[\"$\",\"$L2\",null,{\"id\":\"google-analytics-init\",\"strategy\":\"afterInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"window.dataLayer = window.dataLayer || [];\\nfunction gtag(){dataLayer.push(arguments);}\\ngtag('js', new Date());\\ngtag('config', 'G-R96JDX5RCK');\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"(function(){\\n var attribute='bis_skin_checked';\\n function clean(node){\\n if(node.nodeType!==1)return;\\n if(node.hasAttribute(attribute))node.removeAttribute(attribute);\\n node.querySelectorAll('['+attribute+']').forEach(function(element){element.removeAttribute(attribute);});\\n }\\n clean(document.documentElement);\\n new MutationObserver(function(records){\\n records.forEach(function(record){\\n if(record.type==='attributes'){\\n if(record.target.hasAttribute(attribute))record.target.removeAttribute(attribute);\\n }else record.addedNodes.forEach(clean);\\n });\\n }).observe(document.documentElement,{subtree:true,childList:true,attributes:true,attributeFilter:[attribute]});\\n})();\"}}],[\"$\",\"script\",null,{\"defer\":true,\"data-domain\":\"agenttwin.si\",\"src\":\"https://analytics.hirealpha.chat/js/script.js\"}],[\"$\",\"script\",null,{\"defer\":true,\"src\":\"https://analytics.agenttwin.si/script.js\",\"data-website-id\":\"00000000-0000-0000-0000-000000000000\"}],[\"$\",\"$L3\",null,{}],[\"$\",\"script\",null,{\"type\":\"module\",\"src\":\"/agent-tools.js\"}],[\"$\",\"link\",null,{\"rel\":\"ard\",\"href\":\"/.well-known/ard.json\"}],[\"$\",\"meta\",null,{\"name\":\"theme-color\",\"content\":\"#090909\"}],[\"$\",\"link\",null,{\"rel\":\"icon\",\"type\":\"image/svg+xml\",\"href\":\"assets/logo/favicon.svg?v=white-rings\"}],[\"$\",\"link\",null,{\"rel\":\"preload\",\"href\":\"assets/fonts/syne-400.ttf\",\"as\":\"font\",\"type\":\"font/ttf\",\"crossOrigin\":\"anonymous\"}]]}],[\"$\",\"body\",null,{\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"dashboard\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/5d8899aaed08d7f2.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/18afa3e32331c41d.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"2\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/15b28a76469ea7e5.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[[\"$\",\"meta\",null,{\"name\":\"agenttwin-api-url\",\"content\":\"https://api.agenttwin.si\"}],[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":\"$L6\",\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]]}],{\"children\":[\"__PAGE__\",\"$L7\",{},null,false]},null,false]},null,false],\"$L8\",false]],\"m\":\"$undefined\",\"G\":[\"$9\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:I[1286,[\"7772\",\"static/chunks/7772-f2d773cd3e94eea6.js\",\"182\",\"static/chunks/182-71d400a5d9e02879.js\",\"8093\",\"static/chunks/8093-90b99184c0a57c57.js\",\"971\",\"static/chunks/971-f01a5b1fb6756f6c.js\",\"5105\",\"static/chunks/app/dashboard/page-d91fa87fbf634bc9.js\"],\"default\"]\nb:I[4431,[],\"OutletBoundary\"]\nd:I[5278,[],\"AsyncMetadataOutlet\"]\nf:I[4431,[],\"ViewportBoundary\"]\n11:I[4431,[],\"MetadataBoundary\"]\n12:\"$Sreact.suspense\"\n6:[\"$\",\"$L5\",null,{}]\n7:[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$La\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/11f70fd04660da57.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"assets/next/static/css/dd3fb06005e18149.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$Lb\",null,{\"children\":[\"$Lc\",[\"$\",\"$Ld\",null,{\"promise\":\"$@e\"}]]}]]}]\n8:[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lf\",null,{\"children\":\"$L10\"}],null],[\"$\",\"$L11\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$12\",null,{\"fallback\":null,\"children\":\"$L13\"}]}]}]]}]\n"])</script><script>self.__next_f.push([1,"10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\nc:null\n"])</script><script>self.__next_f.push([1,"14:I[622,[],\"IconMark\"]\n"])</script><script>self.__next_f.push([1,"e:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Workspace | AgentTwin\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Discover your project, test workflows and inspect recorded results.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"/manifest.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"property\":\"og:title\",\"content\":\"AgentTwin agent testing for Node.js and AI agents\"}],[\"$\",\"meta\",\"4\",{\"property\":\"og:description\",\"content\":\"AgentTwin is Node.js workflow testing for prepared applications and AI agents using synthetic service data and recorded outcomes.\"}],[\"$\",\"meta\",\"5\",{\"property\":\"og:url\",\"content\":\"https://agenttwin.si/\"}],[\"$\",\"meta\",\"6\",{\"property\":\"og:site_name\",\"content\":\"AgentTwin\"}],[\"$\",\"meta\",\"7\",{\"property\":\"og:image\",\"content\":\"https://agenttwin.si/social-preview.png\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:image:alt\",\"content\":\"AgentTwin workflow testing workspace — scripted preview\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"12\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"13\",{\"name\":\"twitter:title\",\"content\":\"AgentTwin agent testing for Node.js and AI agents\"}],[\"$\",\"meta\",\"14\",{\"name\":\"twitter:description\",\"content\":\"AgentTwin is Node.js workflow testing for prepared applications and AI agents using synthetic service data and recorded outcomes.\"}],[\"$\",\"meta\",\"15\",{\"name\":\"twitter:image\",\"content\":\"https://agenttwin.si/social-preview.png\"}],[\"$\",\"link\",\"16\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L14\",\"17\",{}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"13:\"$e:metadata\"\n"])</script></body></html>
|