@grackle-ai/web 0.48.0 → 0.49.0
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.
|
@@ -95,4 +95,4 @@ const grackle = await host.mcpServer({
|
|
|
95
95
|
url: env.vars.GRACKLE_MCP_URL,
|
|
96
96
|
});
|
|
97
97
|
|
|
98
|
-
$\`Summarize the current tasks.\`;`,rows:20,className:$e.scriptEditor,required:!0,"data-testid":"persona-script-editor"})]})]}),h.jsxs("div",{className:$e.formActions,children:[h.jsx("button",{type:"submit",className:$e.btnPrimary,children:u?"Save":"Create"}),h.jsx("button",{type:"button",onClick:q,className:$e.btnSecondary,children:"Cancel"})]})]});return h.jsxs("div",{className:$e.container,children:[h.jsxs("div",{className:$e.header,children:[h.jsx("h2",{children:"Personas"}),h.jsx("button",{onClick:te,className:$e.btnPrimary,children:"+ New Persona"})]}),(m||u)&&ue(),n.length===0&&!m?h.jsx("p",{className:$e.empty,children:"No personas yet. Create one to get started."}):h.jsx("div",{className:$e.list,children:n.map(K=>{const Ge=r===K.id,we=K.type==="script";return h.jsxs("div",{className:`${$e.card} ${(u==null?void 0:u.id)===K.id?$e.active:""}`,"data-testid":`persona-card-${K.id}`,children:[h.jsxs("div",{className:$e.cardHeader,children:[h.jsxs("span",{className:$e.cardTitle,children:[h.jsx("strong",{children:K.name}),h.jsx("span",{className:$e.typeBadge,"data-testid":`persona-type-badge-${K.id}`,children:we?"Script":"Agent"}),Ge&&h.jsx("span",{className:$e.defaultBadge,"data-testid":`persona-default-badge-${K.id}`,children:"App Default"})]}),h.jsxs("div",{className:$e.cardActions,children:[!Ge&&h.jsx("button",{onClick:()=>d(K.id),className:$e.btnSmall,"data-testid":`persona-set-default-${K.id}`,title:"Set as app default persona",children:"Set Default"}),h.jsx("button",{onClick:()=>pe(K),className:$e.btnSmall,children:"Edit"}),y===K.id?h.jsxs(h.Fragment,{children:[h.jsx("button",{onClick:()=>Q(K.id),className:$e.btnDanger,children:"Confirm"}),h.jsx("button",{onClick:()=>v(null),className:$e.btnSmall,children:"Cancel"})]}):h.jsx("button",{onClick:()=>v(K.id),className:$e.btnSmall,children:"Delete"})]})]}),K.description&&h.jsx("p",{className:$e.description,children:K.description}),h.jsxs("div",{className:$e.meta,children:[K.runtime&&h.jsxs("span",{children:["Runtime: ",K.runtime]}),K.model&&h.jsxs("span",{children:["Model: ",K.model]}),K.maxTurns>0&&h.jsxs("span",{children:["Max turns: ",K.maxTurns]})]}),we?h.jsxs("details",{className:$e.promptDetails,children:[h.jsx("summary",{children:"Script"}),h.jsx("pre",{className:$e.promptText,children:K.script})]}):h.jsxs("details",{className:$e.promptDetails,children:[h.jsx("summary",{children:"System Prompt"}),h.jsx("pre",{className:$e.promptText,children:K.systemPrompt})]})]},K.id)})})]})}function g6(){return h.jsx(m6,{})}function v6(){const{themeId:n,resolvedThemeId:a,setTheme:i,preferSystem:o,setPreferSystem:r}=W0();return h.jsxs("section",{className:re.section,children:[h.jsx("h3",{className:re.sectionTitle,children:"Appearance"}),h.jsx("p",{className:re.sectionDescription,children:"Choose how Grackle looks across the app."}),h.jsx("div",{className:re.themeOptions,children:ac.filter(d=>!d.hidden).map(d=>{const u=!!(d.variantLightId&&d.variantDarkId),p=u?n===d.id||n===d.variantLightId||n===d.variantDarkId:n===d.id,m=u&&a===d.variantLightId;return h.jsxs("button",{type:"button",className:`${re.themeOption} ${p?re.themeOptionSelected:""}`,"aria-pressed":p,onClick:()=>i(d.id),children:[h.jsxs("span",{className:re.themeOptionHeader,children:[h.jsxs("span",{children:[h.jsx("span",{className:re.themeOptionLabel,children:d.label}),h.jsx("span",{className:re.themeOptionDesc,children:d.description})]}),u&&h.jsxs("span",{className:re.variantToggle,children:[h.jsx("span",{role:"button",tabIndex:0,className:`${re.variantButton} ${p&&m?re.variantActive:""}`,onClick:g=>{g.stopPropagation(),r(!1),i(d.variantLightId)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.stopPropagation(),r(!1),i(d.variantLightId))},"aria-label":"Light variant","aria-pressed":p&&m,children:"☼"}),h.jsx("span",{role:"button",tabIndex:0,className:`${re.variantButton} ${p&&!m?re.variantActive:""}`,onClick:g=>{g.stopPropagation(),r(!1),i(d.variantDarkId)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.stopPropagation(),r(!1),i(d.variantDarkId))},"aria-label":"Dark variant","aria-pressed":p&&!m,children:"☾"})]})]}),d.swatches&&h.jsx("span",{className:re.themeSwatches,children:d.swatches.map((g,y)=>h.jsx("span",{className:re.themeSwatch,style:{background:g}},y))})]},d.id)})}),h.jsxs("label",{className:re.systemToggle,children:[h.jsx("input",{type:"checkbox",checked:o,onChange:d=>r(d.target.checked)}),h.jsx("span",{children:"Match system light/dark preference"})]}),h.jsx("p",{className:re.systemToggleHint,children:"Automatically switches between light and dark variants when available."}),h.jsxs("p",{className:re.themeActive,children:["Active theme: ",h.jsx("strong",{children:a})]})]})}function y6(){return h.jsx(v6,{})}function b6(){const{connected:n,environments:a,sessions:i}=Lt(),o=a.filter(u=>u.status==="connected").length,r=a.length,d=i.filter(u=>["running","idle"].includes(u.status)).length;return h.jsxs("section",{className:re.section,"data-testid":"about-panel",children:[h.jsx("h3",{className:re.sectionTitle,children:"About"}),h.jsx("p",{className:re.sectionDescription,children:"Connection status and application information."}),h.jsxs("div",{className:re.aboutGrid,children:[h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Connection"}),h.jsxs("span",{className:re.aboutValue,children:[h.jsx("span",{className:`${re.aboutDot} ${n?re.aboutDotConnected:re.aboutDotDisconnected}`}),n?"Connected":"Disconnected"]})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Environments"}),h.jsxs("span",{className:re.aboutValue,children:[o,"/",r," connected"]})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Active Sessions"}),h.jsx("span",{className:re.aboutValue,children:d})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Version"}),h.jsx("span",{className:re.aboutValue,children:"0.47.1"})]})]})]})}function S6(){return h.jsx(b6,{})}const x6="_wizard_1260s_1",_6="_container_1260s_10",T6="_stepContent_1260s_19",E6="_logoArea_1260s_28",C6="_logoImage_1260s_32",A6="_heading_1260s_41",k6="_tagline_1260s_49",w6="_subtitle_1260s_56",N6="_featureList_1260s_64",j6="_runtimeGrid_1260s_89",D6="_runtimeCard_1260s_101",M6="_runtimeName_1260s_133",R6="_runtimeDescription_1260s_139",O6="_buttonRow_1260s_144",B6="_primaryButton_1260s_151",L6="_ghostButton_1260s_185",I6="_dots_1260s_213",U6="_dot_1260s_213",st={wizard:x6,container:_6,stepContent:T6,logoArea:E6,logoImage:C6,heading:A6,tagline:k6,subtitle:w6,featureList:N6,runtimeGrid:j6,runtimeCard:D6,runtimeName:M6,runtimeDescription:R6,buttonRow:O6,primaryButton:B6,ghostButton:L6,dots:I6,dot:U6};function z6({onNext:n}){return h.jsxs("div",{className:st.stepContent,"data-testid":"setup-welcome",children:[h.jsx("div",{className:st.logoArea,children:h.jsx("img",{src:"/grackle-logo.png",alt:"Grackle",className:st.logoImage})}),h.jsx("h1",{className:st.heading,children:"Welcome to Grackle"}),h.jsx("p",{className:st.tagline,children:"Multi-agent orchestration for software teams"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:n,"data-testid":"setup-get-started",children:"Get Started"})]})}function V6({onNext:n,onBack:a}){return h.jsxs("div",{className:st.stepContent,"data-testid":"setup-about",children:[h.jsx("h2",{className:st.heading,children:"What is Grackle?"}),h.jsxs("ul",{className:st.featureList,children:[h.jsx("li",{children:"Run Claude, Copilot, and Codex agents side by side"}),h.jsx("li",{children:"Provision and control dev environments — SSH, Codespaces, or local"}),h.jsx("li",{children:"Organize work into workspaces with agent-executable tasks"}),h.jsx("li",{children:"Customize agent behavior with personas, tools, and MCP servers"}),h.jsx("li",{children:"Live-stream agent sessions with full terminal replay"})]}),h.jsxs("div",{className:st.buttonRow,children:[h.jsx("button",{type:"button",className:st.ghostButton,onClick:a,children:"Back"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:n,"data-testid":"setup-about-next",children:"Next"})]})]})}const H6=[{id:"claude-code",name:"Claude Code",description:"Anthropic's agentic coding tool"},{id:"copilot",name:"Copilot Coding Agent",description:"GitHub's AI pair programmer"},{id:"codex",name:"Codex CLI",description:"OpenAI's coding agent"}];function G6({currentRuntime:n,onFinish:a,onBack:i,finishDisabled:o}){const[r,d]=S.useState(n||"claude-code");return S.useEffect(()=>{n&&d(n)},[n]),h.jsxs("div",{className:st.stepContent,"data-testid":"setup-runtime",children:[h.jsx("h2",{className:st.heading,children:"Choose Your Runtime"}),h.jsx("p",{className:st.subtitle,children:"Select the primary agent runtime for your workspace. You can change this later."}),h.jsx("div",{className:st.runtimeGrid,children:H6.map(u=>h.jsxs("button",{type:"button",className:st.runtimeCard,"data-selected":r===u.id,"aria-pressed":r===u.id,"data-testid":`runtime-card-${u.id}`,onClick:()=>d(u.id),children:[h.jsx("span",{className:st.runtimeName,children:u.name}),h.jsx("span",{className:st.runtimeDescription,children:u.description})]},u.id))}),h.jsxs("div",{className:st.buttonRow,children:[h.jsx("button",{type:"button",className:st.ghostButton,onClick:i,children:"Back"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:()=>a(r),disabled:o,"data-testid":"setup-finish",children:"Finish"})]})]})}const P6=3,F6={"claude-code":"sonnet",copilot:"gpt-4o",codex:"o3"};function $6(){const{personas:n,updatePersona:a,completeOnboarding:i,onboardingCompleted:o}=Lt(),r=On(),[d,u]=S.useState(0),p=n.find(g=>g.id==="claude-code"),m=S.useCallback(g=>{if(p&&g!==p.runtime){const y=F6[g]??"sonnet";a(p.id,void 0,void 0,void 0,g,y)}i(),r("/",{replace:!0})},[p,a,i,r]);return o===!0?h.jsx(ji,{to:"/",replace:!0}):h.jsx("div",{className:st.wizard,"data-testid":"setup-wizard",children:h.jsxs("div",{className:st.container,children:[h.jsx(Mn,{mode:"wait",children:h.jsxs(qt.div,{initial:{opacity:0,x:40},animate:{opacity:1,x:0},exit:{opacity:0,x:-40},transition:{duration:.2,ease:"easeInOut"},children:[d===0&&h.jsx(z6,{onNext:()=>u(1)}),d===1&&h.jsx(V6,{onNext:()=>u(2),onBack:()=>u(0)}),d===2&&h.jsx(G6,{currentRuntime:(p==null?void 0:p.runtime)??"claude-code",onFinish:m,onBack:()=>u(1),finishDisabled:!p})]},d)}),h.jsx("div",{className:st.dots,children:Array.from({length:P6},(g,y)=>h.jsx("span",{className:st.dot,"data-active":y===d},y))})]})})}const q6="_root_h353j_1",Y6="_body_h353j_7",K6="_main_h353j_19",Z6="_sidebarWrapper_h353j_26",X6="_overlay_h353j_56",Il={root:q6,body:Y6,main:K6,sidebarWrapper:Z6,overlay:X6},Q6=typeof window<"u"&&new URLSearchParams(window.location.search).has("mock");function W6(){const{lastSpawnedId:n,environments:a,connected:i,onboardingCompleted:o}=Lt(),{showToast:r}=so();WD(a,r);const d=On(),u=Wt(),p=u.pathname.startsWith(Di),[m,g]=S.useState(!1),y=S.useCallback(()=>g(v=>!v),[]);return S.useEffect(()=>{g(!1)},[u.pathname]),S.useEffect(()=>{if(!m)return;const v=x=>{x.key==="Escape"&&g(!1)};return document.addEventListener("keydown",v),()=>{document.removeEventListener("keydown",v)}},[m]),S.useEffect(()=>{n&&!u.pathname.startsWith("/tasks/")&&d(F0(n),{replace:!0})},[n,d,u.pathname]),i&&o===!1?h.jsx(ji,{to:"/setup",replace:!0}):h.jsxs("div",{className:Il.root,children:[h.jsx(aC,{onToggleSidebar:p?void 0:y,sidebarOpen:m}),h.jsxs("div",{className:Il.body,children:[h.jsx("div",{className:Il.sidebarWrapper,"data-sidebar-open":m,"data-settings":p,children:p?h.jsx(SB,{}):h.jsx(bD,{})}),m&&!p&&h.jsx("div",{className:Il.overlay,"data-testid":"drawer-overlay",onClick:()=>g(!1)}),h.jsxs("div",{className:Il.main,children:[h.jsx(z0,{}),h.jsx(UD,{})]})]}),h.jsx(QD,{})]})}function J6(){return h.jsxs(TT,{children:[h.jsx(bt,{path:"setup",element:h.jsx($6,{})}),h.jsxs(bt,{element:h.jsx(W6,{}),children:[h.jsx(bt,{index:!0,element:h.jsx(IR,{})}),h.jsx(bt,{path:"sessions/new",element:h.jsx(FR,{})}),h.jsx(bt,{path:"sessions/:sessionId",element:h.jsx(i3,{})}),h.jsx(bt,{path:"workspaces/:workspaceId",element:h.jsx(EO,{})}),h.jsx(bt,{path:"tasks/new",element:h.jsx(qO,{})}),h.jsx(bt,{path:"tasks/:taskId",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/stream",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/findings",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/edit",element:h.jsx(YO,{})}),h.jsx(bt,{path:"environments/new",element:h.jsx(uB,{})}),h.jsxs(bt,{path:"settings",element:h.jsx(mB,{}),children:[h.jsx(bt,{index:!0,element:h.jsx(ji,{to:"environments",replace:!0})}),h.jsx(bt,{path:"environments",element:h.jsx(a4,{})}),h.jsx(bt,{path:"credentials",element:h.jsx(F4,{})}),h.jsx(bt,{path:"tokens",element:h.jsx(ji,{to:"../credentials",replace:!0})}),h.jsx(bt,{path:"personas",element:h.jsx(g6,{})}),h.jsx(bt,{path:"appearance",element:h.jsx(y6,{})}),h.jsx(bt,{path:"about",element:h.jsx(S6,{})})]}),h.jsx(bt,{path:"*",element:h.jsx(ji,{to:"/",replace:!0})})]})]})}const e5=1e4;function t5(){const{onboardingCompleted:n}=Lt(),[a,i]=S.useState(!1);S.useEffect(()=>{if(n!==void 0)return;const r=setTimeout(()=>i(!0),e5);return()=>clearTimeout(r)},[n]);const o=n===void 0&&!a;return h.jsx(Mn,{mode:"wait",children:o?h.jsx(qt.div,{initial:{opacity:1},exit:{opacity:0},transition:{duration:.25},children:h.jsx(vj,{})},"splash"):h.jsx(qt.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.25},style:{minHeight:"100vh"},children:h.jsx(KT,{children:h.jsx(J6,{})})},"app")})}function n5(){const n=Q6?HE:ME;return h.jsx(YE,{children:h.jsx(PE,{children:h.jsx(n,{children:h.jsx(t5,{})})})})}C_.createRoot(document.getElementById("root")).render(h.jsx(S.StrictMode,{children:h.jsx(n5,{})}));
|
|
98
|
+
$\`Summarize the current tasks.\`;`,rows:20,className:$e.scriptEditor,required:!0,"data-testid":"persona-script-editor"})]})]}),h.jsxs("div",{className:$e.formActions,children:[h.jsx("button",{type:"submit",className:$e.btnPrimary,children:u?"Save":"Create"}),h.jsx("button",{type:"button",onClick:q,className:$e.btnSecondary,children:"Cancel"})]})]});return h.jsxs("div",{className:$e.container,children:[h.jsxs("div",{className:$e.header,children:[h.jsx("h2",{children:"Personas"}),h.jsx("button",{onClick:te,className:$e.btnPrimary,children:"+ New Persona"})]}),(m||u)&&ue(),n.length===0&&!m?h.jsx("p",{className:$e.empty,children:"No personas yet. Create one to get started."}):h.jsx("div",{className:$e.list,children:n.map(K=>{const Ge=r===K.id,we=K.type==="script";return h.jsxs("div",{className:`${$e.card} ${(u==null?void 0:u.id)===K.id?$e.active:""}`,"data-testid":`persona-card-${K.id}`,children:[h.jsxs("div",{className:$e.cardHeader,children:[h.jsxs("span",{className:$e.cardTitle,children:[h.jsx("strong",{children:K.name}),h.jsx("span",{className:$e.typeBadge,"data-testid":`persona-type-badge-${K.id}`,children:we?"Script":"Agent"}),Ge&&h.jsx("span",{className:$e.defaultBadge,"data-testid":`persona-default-badge-${K.id}`,children:"App Default"})]}),h.jsxs("div",{className:$e.cardActions,children:[!Ge&&h.jsx("button",{onClick:()=>d(K.id),className:$e.btnSmall,"data-testid":`persona-set-default-${K.id}`,title:"Set as app default persona",children:"Set Default"}),h.jsx("button",{onClick:()=>pe(K),className:$e.btnSmall,children:"Edit"}),y===K.id?h.jsxs(h.Fragment,{children:[h.jsx("button",{onClick:()=>Q(K.id),className:$e.btnDanger,children:"Confirm"}),h.jsx("button",{onClick:()=>v(null),className:$e.btnSmall,children:"Cancel"})]}):h.jsx("button",{onClick:()=>v(K.id),className:$e.btnSmall,children:"Delete"})]})]}),K.description&&h.jsx("p",{className:$e.description,children:K.description}),h.jsxs("div",{className:$e.meta,children:[K.runtime&&h.jsxs("span",{children:["Runtime: ",K.runtime]}),K.model&&h.jsxs("span",{children:["Model: ",K.model]}),K.maxTurns>0&&h.jsxs("span",{children:["Max turns: ",K.maxTurns]})]}),we?h.jsxs("details",{className:$e.promptDetails,children:[h.jsx("summary",{children:"Script"}),h.jsx("pre",{className:$e.promptText,children:K.script})]}):h.jsxs("details",{className:$e.promptDetails,children:[h.jsx("summary",{children:"System Prompt"}),h.jsx("pre",{className:$e.promptText,children:K.systemPrompt})]})]},K.id)})})]})}function g6(){return h.jsx(m6,{})}function v6(){const{themeId:n,resolvedThemeId:a,setTheme:i,preferSystem:o,setPreferSystem:r}=W0();return h.jsxs("section",{className:re.section,children:[h.jsx("h3",{className:re.sectionTitle,children:"Appearance"}),h.jsx("p",{className:re.sectionDescription,children:"Choose how Grackle looks across the app."}),h.jsx("div",{className:re.themeOptions,children:ac.filter(d=>!d.hidden).map(d=>{const u=!!(d.variantLightId&&d.variantDarkId),p=u?n===d.id||n===d.variantLightId||n===d.variantDarkId:n===d.id,m=u&&a===d.variantLightId;return h.jsxs("button",{type:"button",className:`${re.themeOption} ${p?re.themeOptionSelected:""}`,"aria-pressed":p,onClick:()=>i(d.id),children:[h.jsxs("span",{className:re.themeOptionHeader,children:[h.jsxs("span",{children:[h.jsx("span",{className:re.themeOptionLabel,children:d.label}),h.jsx("span",{className:re.themeOptionDesc,children:d.description})]}),u&&h.jsxs("span",{className:re.variantToggle,children:[h.jsx("span",{role:"button",tabIndex:0,className:`${re.variantButton} ${p&&m?re.variantActive:""}`,onClick:g=>{g.stopPropagation(),r(!1),i(d.variantLightId)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.stopPropagation(),r(!1),i(d.variantLightId))},"aria-label":"Light variant","aria-pressed":p&&m,children:"☼"}),h.jsx("span",{role:"button",tabIndex:0,className:`${re.variantButton} ${p&&!m?re.variantActive:""}`,onClick:g=>{g.stopPropagation(),r(!1),i(d.variantDarkId)},onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),g.stopPropagation(),r(!1),i(d.variantDarkId))},"aria-label":"Dark variant","aria-pressed":p&&!m,children:"☾"})]})]}),d.swatches&&h.jsx("span",{className:re.themeSwatches,children:d.swatches.map((g,y)=>h.jsx("span",{className:re.themeSwatch,style:{background:g}},y))})]},d.id)})}),h.jsxs("label",{className:re.systemToggle,children:[h.jsx("input",{type:"checkbox",checked:o,onChange:d=>r(d.target.checked)}),h.jsx("span",{children:"Match system light/dark preference"})]}),h.jsx("p",{className:re.systemToggleHint,children:"Automatically switches between light and dark variants when available."}),h.jsxs("p",{className:re.themeActive,children:["Active theme: ",h.jsx("strong",{children:a})]})]})}function y6(){return h.jsx(v6,{})}function b6(){const{connected:n,environments:a,sessions:i}=Lt(),o=a.filter(u=>u.status==="connected").length,r=a.length,d=i.filter(u=>["running","idle"].includes(u.status)).length;return h.jsxs("section",{className:re.section,"data-testid":"about-panel",children:[h.jsx("h3",{className:re.sectionTitle,children:"About"}),h.jsx("p",{className:re.sectionDescription,children:"Connection status and application information."}),h.jsxs("div",{className:re.aboutGrid,children:[h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Connection"}),h.jsxs("span",{className:re.aboutValue,children:[h.jsx("span",{className:`${re.aboutDot} ${n?re.aboutDotConnected:re.aboutDotDisconnected}`}),n?"Connected":"Disconnected"]})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Environments"}),h.jsxs("span",{className:re.aboutValue,children:[o,"/",r," connected"]})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Active Sessions"}),h.jsx("span",{className:re.aboutValue,children:d})]}),h.jsxs("div",{className:re.aboutItem,children:[h.jsx("span",{className:re.aboutLabel,children:"Version"}),h.jsx("span",{className:re.aboutValue,children:"0.48.0"})]})]})]})}function S6(){return h.jsx(b6,{})}const x6="_wizard_1260s_1",_6="_container_1260s_10",T6="_stepContent_1260s_19",E6="_logoArea_1260s_28",C6="_logoImage_1260s_32",A6="_heading_1260s_41",k6="_tagline_1260s_49",w6="_subtitle_1260s_56",N6="_featureList_1260s_64",j6="_runtimeGrid_1260s_89",D6="_runtimeCard_1260s_101",M6="_runtimeName_1260s_133",R6="_runtimeDescription_1260s_139",O6="_buttonRow_1260s_144",B6="_primaryButton_1260s_151",L6="_ghostButton_1260s_185",I6="_dots_1260s_213",U6="_dot_1260s_213",st={wizard:x6,container:_6,stepContent:T6,logoArea:E6,logoImage:C6,heading:A6,tagline:k6,subtitle:w6,featureList:N6,runtimeGrid:j6,runtimeCard:D6,runtimeName:M6,runtimeDescription:R6,buttonRow:O6,primaryButton:B6,ghostButton:L6,dots:I6,dot:U6};function z6({onNext:n}){return h.jsxs("div",{className:st.stepContent,"data-testid":"setup-welcome",children:[h.jsx("div",{className:st.logoArea,children:h.jsx("img",{src:"/grackle-logo.png",alt:"Grackle",className:st.logoImage})}),h.jsx("h1",{className:st.heading,children:"Welcome to Grackle"}),h.jsx("p",{className:st.tagline,children:"Multi-agent orchestration for software teams"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:n,"data-testid":"setup-get-started",children:"Get Started"})]})}function V6({onNext:n,onBack:a}){return h.jsxs("div",{className:st.stepContent,"data-testid":"setup-about",children:[h.jsx("h2",{className:st.heading,children:"What is Grackle?"}),h.jsxs("ul",{className:st.featureList,children:[h.jsx("li",{children:"Run Claude, Copilot, and Codex agents side by side"}),h.jsx("li",{children:"Provision and control dev environments — SSH, Codespaces, or local"}),h.jsx("li",{children:"Organize work into workspaces with agent-executable tasks"}),h.jsx("li",{children:"Customize agent behavior with personas, tools, and MCP servers"}),h.jsx("li",{children:"Live-stream agent sessions with full terminal replay"})]}),h.jsxs("div",{className:st.buttonRow,children:[h.jsx("button",{type:"button",className:st.ghostButton,onClick:a,children:"Back"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:n,"data-testid":"setup-about-next",children:"Next"})]})]})}const H6=[{id:"claude-code",name:"Claude Code",description:"Anthropic's agentic coding tool"},{id:"copilot",name:"Copilot Coding Agent",description:"GitHub's AI pair programmer"},{id:"codex",name:"Codex CLI",description:"OpenAI's coding agent"}];function G6({currentRuntime:n,onFinish:a,onBack:i,finishDisabled:o}){const[r,d]=S.useState(n||"claude-code");return S.useEffect(()=>{n&&d(n)},[n]),h.jsxs("div",{className:st.stepContent,"data-testid":"setup-runtime",children:[h.jsx("h2",{className:st.heading,children:"Choose Your Runtime"}),h.jsx("p",{className:st.subtitle,children:"Select the primary agent runtime for your workspace. You can change this later."}),h.jsx("div",{className:st.runtimeGrid,children:H6.map(u=>h.jsxs("button",{type:"button",className:st.runtimeCard,"data-selected":r===u.id,"aria-pressed":r===u.id,"data-testid":`runtime-card-${u.id}`,onClick:()=>d(u.id),children:[h.jsx("span",{className:st.runtimeName,children:u.name}),h.jsx("span",{className:st.runtimeDescription,children:u.description})]},u.id))}),h.jsxs("div",{className:st.buttonRow,children:[h.jsx("button",{type:"button",className:st.ghostButton,onClick:i,children:"Back"}),h.jsx("button",{type:"button",className:st.primaryButton,onClick:()=>a(r),disabled:o,"data-testid":"setup-finish",children:"Finish"})]})]})}const P6=3,F6={"claude-code":"sonnet",copilot:"gpt-4o",codex:"o3"};function $6(){const{personas:n,updatePersona:a,completeOnboarding:i,onboardingCompleted:o}=Lt(),r=On(),[d,u]=S.useState(0),p=n.find(g=>g.id==="claude-code"),m=S.useCallback(g=>{if(p&&g!==p.runtime){const y=F6[g]??"sonnet";a(p.id,void 0,void 0,void 0,g,y)}i(),r("/",{replace:!0})},[p,a,i,r]);return o===!0?h.jsx(ji,{to:"/",replace:!0}):h.jsx("div",{className:st.wizard,"data-testid":"setup-wizard",children:h.jsxs("div",{className:st.container,children:[h.jsx(Mn,{mode:"wait",children:h.jsxs(qt.div,{initial:{opacity:0,x:40},animate:{opacity:1,x:0},exit:{opacity:0,x:-40},transition:{duration:.2,ease:"easeInOut"},children:[d===0&&h.jsx(z6,{onNext:()=>u(1)}),d===1&&h.jsx(V6,{onNext:()=>u(2),onBack:()=>u(0)}),d===2&&h.jsx(G6,{currentRuntime:(p==null?void 0:p.runtime)??"claude-code",onFinish:m,onBack:()=>u(1),finishDisabled:!p})]},d)}),h.jsx("div",{className:st.dots,children:Array.from({length:P6},(g,y)=>h.jsx("span",{className:st.dot,"data-active":y===d},y))})]})})}const q6="_root_h353j_1",Y6="_body_h353j_7",K6="_main_h353j_19",Z6="_sidebarWrapper_h353j_26",X6="_overlay_h353j_56",Il={root:q6,body:Y6,main:K6,sidebarWrapper:Z6,overlay:X6},Q6=typeof window<"u"&&new URLSearchParams(window.location.search).has("mock");function W6(){const{lastSpawnedId:n,environments:a,connected:i,onboardingCompleted:o}=Lt(),{showToast:r}=so();WD(a,r);const d=On(),u=Wt(),p=u.pathname.startsWith(Di),[m,g]=S.useState(!1),y=S.useCallback(()=>g(v=>!v),[]);return S.useEffect(()=>{g(!1)},[u.pathname]),S.useEffect(()=>{if(!m)return;const v=x=>{x.key==="Escape"&&g(!1)};return document.addEventListener("keydown",v),()=>{document.removeEventListener("keydown",v)}},[m]),S.useEffect(()=>{n&&!u.pathname.startsWith("/tasks/")&&d(F0(n),{replace:!0})},[n,d,u.pathname]),i&&o===!1?h.jsx(ji,{to:"/setup",replace:!0}):h.jsxs("div",{className:Il.root,children:[h.jsx(aC,{onToggleSidebar:p?void 0:y,sidebarOpen:m}),h.jsxs("div",{className:Il.body,children:[h.jsx("div",{className:Il.sidebarWrapper,"data-sidebar-open":m,"data-settings":p,children:p?h.jsx(SB,{}):h.jsx(bD,{})}),m&&!p&&h.jsx("div",{className:Il.overlay,"data-testid":"drawer-overlay",onClick:()=>g(!1)}),h.jsxs("div",{className:Il.main,children:[h.jsx(z0,{}),h.jsx(UD,{})]})]}),h.jsx(QD,{})]})}function J6(){return h.jsxs(TT,{children:[h.jsx(bt,{path:"setup",element:h.jsx($6,{})}),h.jsxs(bt,{element:h.jsx(W6,{}),children:[h.jsx(bt,{index:!0,element:h.jsx(IR,{})}),h.jsx(bt,{path:"sessions/new",element:h.jsx(FR,{})}),h.jsx(bt,{path:"sessions/:sessionId",element:h.jsx(i3,{})}),h.jsx(bt,{path:"workspaces/:workspaceId",element:h.jsx(EO,{})}),h.jsx(bt,{path:"tasks/new",element:h.jsx(qO,{})}),h.jsx(bt,{path:"tasks/:taskId",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/stream",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/findings",element:h.jsx(Xd,{})}),h.jsx(bt,{path:"tasks/:taskId/edit",element:h.jsx(YO,{})}),h.jsx(bt,{path:"environments/new",element:h.jsx(uB,{})}),h.jsxs(bt,{path:"settings",element:h.jsx(mB,{}),children:[h.jsx(bt,{index:!0,element:h.jsx(ji,{to:"environments",replace:!0})}),h.jsx(bt,{path:"environments",element:h.jsx(a4,{})}),h.jsx(bt,{path:"credentials",element:h.jsx(F4,{})}),h.jsx(bt,{path:"tokens",element:h.jsx(ji,{to:"../credentials",replace:!0})}),h.jsx(bt,{path:"personas",element:h.jsx(g6,{})}),h.jsx(bt,{path:"appearance",element:h.jsx(y6,{})}),h.jsx(bt,{path:"about",element:h.jsx(S6,{})})]}),h.jsx(bt,{path:"*",element:h.jsx(ji,{to:"/",replace:!0})})]})]})}const e5=1e4;function t5(){const{onboardingCompleted:n}=Lt(),[a,i]=S.useState(!1);S.useEffect(()=>{if(n!==void 0)return;const r=setTimeout(()=>i(!0),e5);return()=>clearTimeout(r)},[n]);const o=n===void 0&&!a;return h.jsx(Mn,{mode:"wait",children:o?h.jsx(qt.div,{initial:{opacity:1},exit:{opacity:0},transition:{duration:.25},children:h.jsx(vj,{})},"splash"):h.jsx(qt.div,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.25},style:{minHeight:"100vh"},children:h.jsx(KT,{children:h.jsx(J6,{})})},"app")})}function n5(){const n=Q6?HE:ME;return h.jsx(YE,{children:h.jsx(PE,{children:h.jsx(n,{children:h.jsx(t5,{})})})})}C_.createRoot(document.getElementById("root")).render(h.jsx(S.StrictMode,{children:h.jsx(n5,{})}));
|
package/dist/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Grackle</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-B8WEOTpH.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="/assets/markdown-gcy1Jmzi.js">
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/assets/dagview-EHk2VaeR.js">
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/assets/index-CjG_a24F.css">
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grackle-ai/web",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0",
|
|
4
4
|
"description": "React web UI for the Grackle multi-agent coordination platform",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"rehype-prism-plus": "^2.0.0",
|
|
32
32
|
"remark-gfm": "^4.0.0",
|
|
33
33
|
"react-router": "^7.0.0",
|
|
34
|
-
"@grackle-ai/common": "0.
|
|
34
|
+
"@grackle-ai/common": "0.49.0"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@rushstack/heft": "1.2.4",
|