PageSourceSearch

https://proofagent.ai/assets/WorkshopsIndex-DLe9-mu8.js

js proofagent.ai collected 2026-10-05 12:26:56 UTC 16,991 bytes, 44 lines download raw bytes

1import{c as N,u as H,r as l,j as e,e as M,d as D,P as t,A as q,L as y,C as F}from"./index-CB5zgalJ.js";import{w as B,S as K,R as W,W as I,a as S,b as A,c as O,d as G,K as V,e as U}from"./workshopUi-BeMAzhnP.js";import{c as X,i as b,W as J,d as Q,e as Y,a as Z,g as ee,f as te}from"./workshopsApi-D1r2NPEJ.js";import{R as se}from"./refresh-cw-CInY00Mx.js";import{A as j}from"./arrow-right-Bm9BzHcR.js";import{G as ne}from"./globe-DVEfl28g.js";import{M as ae}from"./map-pin-BqIZxSr-.js";import{T as ie}from"./ticket-CI9RhIIE.js";const oe=N("GraduationCap",[["path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z",key:"j76jl0"}],["path",{d:"M22 10v6",key:"1lu8f3"}],["path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5",key:"1r8lef"}]]);const re=N("Presentation",[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]]),le=["all","workshop","training","talk","meetup"];function ke(){const n=H(),[i,o]=l.useState([]),[d,g]=l.useState(!0),[x,m]=l.useState(null),[T,P]=l.useState(0),[u,$]=l.useState("all"),[p,C]=l.useState("all"),_=l.useCallback(()=>P(s=>s+1),[]);l.useEffect(()=>{let s=!1;return g(!0),(async()=>{try{const a=await X();if(s)return;o(a.workshops),m(a.failed?a.error??"Could not load the calendar.":null)}catch(a){if(s)return;o([]),m(a instanceof Error?a.message:"Could not load the calendar.")}finally{s||g(!1)}})(),()=>{s=!0}},[T]);const v=l.useMemo(()=>{let s=i;return u!=="all"&&(s=s.filter(a=>a.kind===u)),p==="online"&&(s=s.filter(a=>a.is_online)),p==="in-person"&&(s=s.filter(a=>!a.is_online)),s},[i,u,p]),{upcoming:k,past:z}=l.useMemo(()=>{const s=[],a=[];for(const r of v)(b(r)?a:s).push(r);return s.sort((r,h)=>c(r.starts_at)-c(h.starts_at)),a.sort((r,h)=>c(h.starts_at)-c(r.starts_at)),{upcoming:s,past:a}},[v]),f=l.useMemo(()=>{const s=i.filter(r=>!b(r)).sort((r,h)=>c(r.starts_at)-c(h.starts_at));return s.length?s[0]:i.filter(r=>b(r)).sort((r,h)=>c(h.starts_at)-c(r.starts_at))[0]??null},[i]),R=l.useMemo(()=>k.filter(s=>s.id!==f?.id),[k,f]),w=l.useMemo(()=>z.filter(s=>s.id!==f?.id),[z,f]),L=u!=="all"||p!=="all",E=l.useMemo(()=>({"@context":"https://schema.org","@type":"ItemList",name:"ProofAgent workshops, talks and training",description:"Workshops, conference talks, meetups and private training on AI agent governance, adversarial evaluation, and the ProofAgent Index (PAI).",url:"https://www.proofagent.ai/workshops",itemListElement:i.filter(a=>!b(a)).slice(0,20).map((a,r)=>({"@type":"ListItem",position:r+1,item:B(a)}))}),[i]);return e.jsxs(M,{topBand:!1,children:[e.jsx(D,{title:"AI agent governance workshops & talks · ProofAgent",description:"Hands-on workshops, talks and private training on AI agent governance: the ProofAgent Index, adversarial evaluation, and compliance mapping. Request a session for your team.",canonicalPath:"/workshops",ogImage:"/og-workshops.png",keywords:"AI agent governance workshop, AI agent evaluation training, PAI ProofAgent Index workshop, adversarial AI testing training, AI agent readiness workshop, private AI governance training",breadcrumbs:[["Home","/"],["Workshops","/workshops"]],jsonLd:E}),e.jsxs("div",{style:{background:t.bg,color:t.ink,minHeight:"100vh"},children:[e.jsx("style",{children:`
2          ${K}
3          /* ── Featured hero ──
4             The page opens on the next session's photo, edge to edge, with the
5             facts on a card riding up over it. The old opener was a two-line
6             marketing headline above a wall of filters: it said nothing a
7             visitor came here to learn (what is on, when, where). */
8          /* ── Featured hero ──
9             The band's height comes from its own copy, not from a clamp(). It
10             used to be a fixed-height box with the title absolutely positioned
11             inside it: on a phone the lead wrapped to three lines, outgrew the
12             box, and the featured card — which rides up over the band by design
13             — landed on top of the text. Content sets the height, the padding
14             leaves room for the overlap, and nothing can collide. */
15          .pa-ws-top { position: relative; width: 100%; background: ${t.soft};
16                       padding: clamp(104px, 12vw, 140px) 0 clamp(116px, 12vw, 150px); }
17          .pa-ws-top-img { position: absolute; inset: 0; width: 100%; height: 100%;
18                           object-fit: cover; display: block; }
19          .pa-ws-top-scrim { position: absolute; inset: 0; pointer-events: none;
20                             background: linear-gradient(180deg,
21                               rgba(8, 20, 30, .40) 0%, rgba(8, 20, 30, .08) 28%,
22                               ${t.bg}00 74%, ${t.bg} 100%); }
23          /* The page title lives ON the teal, in white — the backdrop was a
24             large empty green field otherwise, and a visitor landing here had
25             to read a card to find out what the page was. */
26          .pa-ws-top-copy { position: relative; z-index: 1; }
27          .pa-ws-top-copy > div { max-width: ${t.max}px; margin: 0 auto; padding: 0 24px; }
28          .pa-ws-top-copy h1 { margin: 0; color: #ffffff; font-size: clamp(30px, 4.2vw, 46px);
29                               line-height: 1.06; letter-spacing: -0.025em; font-weight: 800; }
30          .pa-ws-top-copy p { margin: 12px 0 0; max-width: 620px; color: rgba(220, 240, 238, .84);
31                              font-size: clamp(15px, 1.5vw, 17px); line-height: 1.55; font-weight: 500; }
32          .pa-ws-feature { position: relative; z-index: 1; margin-top: -104px;
33                           background: ${t.card}; border: 1px solid ${t.line};
34                           border-radius: 22px; box-shadow: ${t.shadow}; padding: 30px 34px 32px; }
35          .pa-ws-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; }
36          @media (max-width: 1000px) { .pa-ws-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
37          @media (max-width: 660px)  { .pa-ws-grid { grid-template-columns: 1fr; gap: 18px; } }
38          @media (max-width: 540px) {
39            .pa-ws-top { padding: 96px 0 84px; }
40            .pa-ws-top-copy > div { padding: 0 16px; }
41            .pa-ws-index { padding: 0 16px 64px !important; }
42            .pa-ws-feature { margin-top: -48px; border-radius: 18px; padding: 22px 18px 24px; }
43          }
44        `}),e.jsx(de,{workshop:f,loading:d}),e.jsxs("div",{className:"pa-ws-index",style:{maxWidth:t.max,margin:"0 auto",padding:"0 24px 96px"},children:[e.jsxs("p",{style:{margin:"26px 0 34px",color:t.muted,fontSize:16.5,lineHeight:1.65,maxWidth:820},children:["Workshops, conference talks and private training on AI agent governance: the four axes of the"," ",e.jsx("a",{href:"https://arxiv.org/abs/2607.27677",target:"_blank",rel:"noopener noreferrer",style:{color:t.cyanDeep,fontWeight:600},children:"ProofAgent Index (PAI)"}),", adversarial evaluation on the open-source Harness, and how to turn a compliance obligation into a test that either passes or fails."]}),e.jsxs("div",{id:"upcoming",style:{display:"flex",gap:12,marginBottom:26,flexWrap:"wrap",alignItems:"center",justifyContent:"space-between"},children:[e.jsx("div",{style:{display:"flex",gap:8,flexWrap:"wrap"},children:le.map(s=>e.jsx(ce,{active:u===s,onClick:()=>$(s),label:s==="all"?"All formats":`${J[s]}s`},s))}),e.jsx("div",{style:{display:"inline-flex",padding:3,borderRadius:999,background:t.soft,border:`1px solid ${t.line}`},children:[["all","Anywhere"],["online","Online"],["in-person","In person"]].map(([s,a])=>e.jsx("button",{onClick:()=>C(s),style:{padding:"6px 14px",borderRadius:999,border:"none",cursor:"pointer",fontSize:13,fontWeight:p===s?700:500,background:p===s?t.card:"transparent",color:p===s?t.ink:t.muted,boxShadow:p===s?"0 1px 3px rgba(15,23,42,.10)":"none"},children:a},s))})]}),d?e.jsxs(e.Fragment,{children:[e.jsx(W,{title:"Upcoming",count:0,hint:"loading"}),e.jsxs("div",{className:"pa-ws-grid",children:[e.jsx(I,{}),e.jsx(I,{}),e.jsx(I,{})]})]}):x?e.jsxs("div",{role:"alert",style:{border:`1px solid ${t.line}`,borderRadius:18,background:t.card,padding:"48px 32px",textAlign:"center"},children:[e.jsx("div",{style:{width:46,height:46,borderRadius:14,margin:"0 auto 18px",display:"grid",placeItems:"center",background:`${t.orange}14`,color:t.orange},children:e.jsx(q,{size:22})}),e.jsx("h3",{style:{margin:0,fontSize:21,fontWeight:800,color:t.ink}
44,children:"The calendar did not load"}),e.jsxs("p",{style:{margin:"10px auto 0",color:t.muted,fontSize:15.5,lineHeight:1.6,maxWidth:520},children:[x," Sessions may well be scheduled — this is a loading problem, not an empty calendar."]}),e.jsxs("div",{style:{marginTop:22,display:"flex",gap:10,justifyContent:"center",flexWrap:"wrap"},children:[e.jsxs("button",{onClick:_,style:{display:"inline-flex",alignItems:"center",gap:7,padding:"11px 20px",borderRadius:999,border:"none",cursor:"pointer",background:t.ink,color:"#fff",fontWeight:700,fontSize:14},children:[e.jsx(se,{size:14})," Try again"]}),e.jsxs(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:6,padding:"11px 20px",borderRadius:999,background:"transparent",color:t.ink,fontWeight:700,fontSize:14,textDecoration:"none",border:`1px solid ${t.line}`},children:["Request a private session ",e.jsx(j,{size:14})]})]})]}):i.length===0?e.jsx(S,{title:"No sessions on the public calendar yet",body:"Dates get announced here as they are confirmed. Private workshops and internal training are booked directly — that path is open today.",primary:{label:"Request a private session",href:"/workshops/request"},secondary:{label:"Read the PAI paper",href:"https://arxiv.org/abs/2607.27677",external:!0}}):v.length===0?e.jsx(S,{title:"Nothing matches those filters",body:`There ${i.length===1?"is 1 published session":`are ${i.length} published sessions`}, but none in this format or location. Clear the filters to see everything.`,icon:e.jsx(re,{size:22}),primary:{label:"Clear filters",href:"/workshops"}}):e.jsxs(e.Fragment,{children:[e.jsxs("section",{style:{marginBottom:w.length?56:0},children:[e.jsx(W,{title:"Upcoming",count:k.length,hint:L?"filtered":void 0}),k.length===0?e.jsx(S,{title:"Nothing scheduled right now",body:"The next public date has not been announced. Past sessions are below, and private workshops can be booked any time.",primary:{label:"Request a private session",href:"/workshops/request"}}):R.length===0?e.jsx("p",{style:{margin:0,color:t.muted,fontSize:15,lineHeight:1.6},children:"That is the only session currently scheduled — it is featured at the top of this page."}):e.jsx("div",{className:"pa-ws-grid",children:R.map(s=>e.jsx(A,{workshop:s},s.id))})]}),w.length>0&&e.jsxs("section",{children:[e.jsx(W,{title:"Past sessions",count:w.length,hint:"recordings and slides where available"}),e.jsx("div",{className:"pa-ws-grid",children:w.map(s=>e.jsx(A,{workshop:s},s.id))})]})]}),e.jsxs("div",{style:{marginTop:64,padding:"32px 28px",background:t.card,border:`1px solid ${t.line}`,borderRadius:16,boxShadow:t.shadow,display:"flex",gap:18,alignItems:"center",justifyContent:"space-between",flexWrap:"wrap"},children:[e.jsxs("div",{style:{maxWidth:640},children:[e.jsx("h3",{style:{margin:0,fontSize:20,fontWeight:800,color:t.ink},children:"Want this run inside your company?"}),e.jsx("p",{style:{marginTop:8,marginBottom:0,color:t.muted,fontSize:14.5,lineHeight:1.6},children:"Sessions are delivered on site or remote, shaped around your agents and your regulatory scope. Tell us the team, the timeframe and the topics and you get a concrete agenda back — not a brochure."})]}),e.jsxs("button",{onClick:()=>n("/workshops/request"),style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,border:"none",cursor:"pointer",background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5},children:["Start a request ",e.jsx(j,{size:15})]})]})]})]})]})}function de({workshop:n,loading:i}){const o=n?Q(n):!1,d=n?b(n):!1,g=n?O[n.kind]:t.cyanDeep,x=n?Y(n):"",m=n?pe(n):null;return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"pa-ws-top",children:[i?e.jsx("div",{className:"pa-ws-shimmer pa-ws-top-img"}):e.jsx(G,{accent:g,className:"pa-ws-top-img"}),e.jsx("div",{className:"pa-ws-top-scrim"}),e.jsx("div",{className:"pa-ws-top-copy",children:e.jsxs("div",{children:[e.jsx("h1",{children:"Workshops & events"}),e.jsx("p",{children:"Hands-on sessions on evaluating and governing AI agents: conference talks, meetups, and private training for your team."})]})})]}),e.jsx("div",{style:{maxWidth:t.max,margin:"0 auto",padding:"0 24px"},children:e.jsxs("div",{className:"pa-ws-feature",children:[e.jsxs("div",{style:{margin:"0 0 14px",display:"inline-flex",alignItems:"center",gap:7,fontSize:12,fontWeight:800,letterSpacing:.9,textTransform:"uppercase",color:t.cyanDeep},children:[e.jsx(oe,{size:14})," Next on the calendar"]}),i?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"pa-ws-shimmer",style:{width:"70%",height:34,borderRadius:8,marginBottom:14}}),e.jsx("div",{className:"pa-ws-shimmer",style:{width:"50%",height:16,borderRadius:6}})]}
44):n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{style:{display:"flex",gap:8,flexWrap:"wrap",alignItems:"center",marginBottom:12},children:[e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6,padding:"4px 11px",borderRadius:999,background:o?`${t.green}14`:d?`${t.muted}14`:`${g}14`,color:o?t.green:d?t.muted:g,fontSize:11,fontWeight:800,letterSpacing:.5,textTransform:"uppercase"},children:[o?"Happening now":d?"Most recent session":"Next up",!o&&!d&&m?` · ${m}`:""]}),e.jsx(V,{kind:n.kind}),n.is_online&&e.jsx(U,{label:"Online",color:t.blue})]}),e.jsx("h2",{style:{margin:0,fontSize:"clamp(26px, 3.4vw, 40px)",fontWeight:800,color:t.ink,letterSpacing:-.5,lineHeight:1.15,maxWidth:900},children:e.jsx(y,{to:`/workshops/${n.slug}`,style:{color:"inherit",textDecoration:"none"},children:n.title})}),(n.summary||n.subtitle)&&e.jsx("p",{style:{margin:"12px 0 0",color:t.muted,fontSize:16.5,lineHeight:1.6,maxWidth:780,display:"-webkit-box",WebkitLineClamp:3,WebkitBoxOrient:"vertical",overflow:"hidden"},children:n.summary||n.subtitle}),e.jsxs("div",{style:{marginTop:18,display:"flex",gap:"10px 22px",flexWrap:"wrap",color:t.ink,fontSize:14,fontWeight:600},children:[e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[e.jsx(F,{size:15,color:t.muted}),Z(n),x?` · ${x}`:""]}),e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[n.is_online?e.jsx(ne,{size:15,color:t.muted}):e.jsx(ae,{size:15,color:t.muted}),ee(n)]}),e.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:7},children:[e.jsx(ie,{size:15,color:t.muted}),te(n)]})]}),e.jsxs("div",{style:{marginTop:24,display:"flex",gap:10,flexWrap:"wrap"},children:[e.jsxs(y,{to:`/workshops/${n.slug}`,style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5,textDecoration:"none"},children:[d?"View the recap":"Details & registration"," ",e.jsx(j,{size:15})]}),e.jsx(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:"transparent",color:t.ink,fontWeight:700,fontSize:14.5,textDecoration:"none",border:`1px solid ${t.line}`},children:"Request a session for your team"})]})]}):e.jsxs(e.Fragment,{children:[e.jsx("h2",{style:{margin:0,fontSize:"clamp(26px, 3.4vw, 40px)",fontWeight:800,color:t.ink,letterSpacing:-.5,lineHeight:1.15,maxWidth:860},children:"Learn to prove an AI agent is ready, not just that it works."}),e.jsx("p",{style:{margin:"12px 0 0",color:t.muted,fontSize:16.5,lineHeight:1.6,maxWidth:780},children:"No public date is on the calendar right now. Private workshops, talks and team training are booked directly and that path is open today."}),e.jsx("div",{style:{marginTop:24},children:e.jsxs(y,{to:"/workshops/request",style:{display:"inline-flex",alignItems:"center",gap:7,padding:"12px 22px",borderRadius:999,background:t.ink,color:"#fff",fontWeight:700,fontSize:14.5,textDecoration:"none"},children:["Request a session for your team ",e.jsx(j,{size:15})]})})]})]})})]})}function pe(n){if(!n.starts_at)return null;const i=new Date(n.starts_at).getTime();if(Number.isNaN(i))return null;const o=Math.ceil((i-Date.now())/864e5);return o<=0?"Today":o===1?"Tomorrow":o<15?`In ${o} days`:o<61?`In ${Math.round(o/7)} weeks`:null}function ce({active:n,onClick:i,label:o}){return e.jsx("button",{onClick:i,style:{cursor:"pointer",borderRadius:999,padding:"6px 14px",fontSize:13,fontWeight:n?700:500,border:`1px solid ${n?t.ink:t.line}`,background:n?t.ink:t.card,color:n?"#fff":t.ink,transition:"all .15s ease"},children:o})}function c(n){if(!n)return Number.MAX_SAFE_INTEGER;const i=new Date(n).getTime();return Number.isNaN(i)?Number.MAX_SAFE_INTEGER:i}export{ke as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.