adam-agent-server 1.5.0 → 1.7.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.
- package/dist/App-ZRCRM7WR.js +13 -0
- package/dist/adam-automator-skills-EZGBICHT.js +18 -0
- package/dist/adam-tools-V5LPU47X.js +1 -0
- package/dist/approval-handler-PB7PSLUS.js +1 -0
- package/dist/audit-manager-BSBBDUER.js +1 -0
- package/dist/bree-engine-7S33CWS7.js +1 -0
- package/dist/channels-SITUUC4J.js +1 -0
- package/dist/{channels-HYSB2EEK.js → channels-ULFUCUUZ.js} +1 -1
- package/dist/{chunk-Y3AMO6WC.js → chunk-2L2347UQ.js} +1 -1
- package/dist/{chunk-2DLVAKH7.js → chunk-2YTDCR6A.js} +1 -1
- package/dist/chunk-4PQHGLZH.js +99 -0
- package/dist/{chunk-JAS3TUZX.js → chunk-5EPG2US5.js} +26 -7
- package/dist/{chunk-BR2JY5X2.js → chunk-5QZXYKMS.js} +1 -1
- package/dist/chunk-5XOTPEAK.js +6 -0
- package/dist/{chunk-6775OYXA.js → chunk-6KF7OO2B.js} +1 -1
- package/dist/{chunk-5S6BMWD2.js → chunk-A5OCDYTW.js} +1 -1
- package/dist/{chunk-5XUR3M23.js → chunk-AQ3ASS4B.js} +1 -1
- package/dist/{chunk-HDP7A4XY.js → chunk-B6LOT5CG.js} +1 -1
- package/dist/chunk-BCH2HAIM.js +23 -0
- package/dist/{chunk-YVS565QY.js → chunk-BQ3ZAYHC.js} +1 -1
- package/dist/{chunk-C6BOQJJF.js → chunk-DVN3BFPP.js} +1 -1
- package/dist/{chunk-H7VDC6FY.js → chunk-EQZFOBAJ.js} +1 -1
- package/dist/{chunk-7L2WQM7N.js → chunk-FPZEZYUB.js} +1 -1
- package/dist/{chunk-23VZKIB6.js → chunk-GSFLLRS7.js} +1 -1
- package/dist/{chunk-GBTG5B5R.js → chunk-HQRUJQN7.js} +1 -1
- package/dist/{chunk-R4GIIQ7G.js → chunk-IKPYPZ64.js} +1 -1
- package/dist/{chunk-5V36ACKZ.js → chunk-IZNEOYRP.js} +1 -1
- package/dist/{chunk-6FXNB7NE.js → chunk-JJH2RCVC.js} +1 -1
- package/dist/chunk-K4C43YDD.js +7 -0
- package/dist/{chunk-Z4D3L2HR.js → chunk-M4YI4WVX.js} +1 -1
- package/dist/{chunk-INNDBLZE.js → chunk-MRTJFYPR.js} +1 -1
- package/dist/{chunk-YHVFZB6Q.js → chunk-N4ES7TCL.js} +1 -1
- package/dist/{chunk-HTPUEIFT.js → chunk-NASJH4NT.js} +5 -5
- package/dist/{chunk-H54ZXA26.js → chunk-NUITL62I.js} +1 -1
- package/dist/{chunk-VRJ7R766.js → chunk-NWMOV23A.js} +1 -1
- package/dist/{chunk-7K4AQBDD.js → chunk-PG6LMSX6.js} +1 -1
- package/dist/chunk-PHT24MOV.js +1 -0
- package/dist/chunk-QGYDGZSC.js +49 -0
- package/dist/{chunk-XL46AGRZ.js → chunk-RI3V72RP.js} +2 -2
- package/dist/{chunk-QVKI7H7W.js → chunk-RZ7LCZVK.js} +1 -1
- package/dist/{chunk-2CMR5AG7.js → chunk-SWP2JC54.js} +1 -1
- package/dist/chunk-TAF2DBBC.js +79 -0
- package/dist/chunk-ULTK7RD6.js +27 -0
- package/dist/{chunk-QWCRZDZS.js → chunk-WMB7P64J.js} +2 -2
- package/dist/cli.js +2 -2
- package/dist/{config-EMNKHR3W.js → config-HBQPBIWL.js} +1 -1
- package/dist/config-ZBNGRASI.js +1 -0
- package/dist/db-QEWTZGU3.js +1 -0
- package/dist/delivery-log-AC476GX7.js +1 -0
- package/dist/engine-6K4RG644.js +1 -0
- package/dist/{evolution-audit-LZSQPDHH.js → evolution-audit-XMBDUN3T.js} +1 -1
- package/dist/{external-api-7XV2PXPC.js → external-api-V74YTLBY.js} +1 -1
- package/dist/index.js +19 -13
- package/dist/{learner-IJN6B7KV.js → learner-VCS3Q7BR.js} +1 -1
- package/dist/{logger-QCJUU7GV.js → logger-WEXZORHP.js} +1 -1
- package/dist/{memories-ZII5QSTJ.js → memories-VMOGFVPU.js} +1 -1
- package/dist/{memory-extractor-DIYJFBCI.js → memory-extractor-4WJNHYWR.js} +2 -2
- package/dist/memory-service-ZS6MBUIC.js +1 -0
- package/dist/outbound-gateway-H7RFG6D2.js +1 -0
- package/dist/role-presets-XAEOYEAW.js +1 -0
- package/dist/role-workspace-NKGAH6J6.js +1 -0
- package/dist/roles-ZYCFQMAY.js +1 -0
- package/dist/session-manager-COLCNIB7.js +1 -0
- package/dist/task-templates-4KCZOUN5.js +1 -0
- package/dist/workflow-executor-Z7JFMR56.js +1 -0
- package/package.json +25 -25
- package/web/dist/assets/{AlertDialog-r3y6IhpW.js → AlertDialog-CfeiyMrc.js} +1 -1
- package/web/dist/assets/{Button-BjXgrQ95.js → Button-DuQctNms.js} +1 -1
- package/web/dist/assets/{Card-C153tGfJ.js → Card-rKfViPS2.js} +1 -1
- package/web/dist/assets/{ChannelDetail-C2uAZv1u.js → ChannelDetail-DnL0_h8q.js} +1 -1
- package/web/dist/assets/{Channels-C62Qrg-n.js → Channels-dod8Q4oq.js} +2 -2
- package/web/dist/assets/{Chat-kH2owmB_.js → Chat-Dv_Izjx3.js} +1 -1
- package/web/dist/assets/{Dashboard-BhD8SpFb.js → Dashboard-Dl0vA6Ky.js} +1 -1
- package/web/dist/assets/{EmptyState-CXwJFCDQ.js → EmptyState-CIdIlMbn.js} +1 -1
- package/web/dist/assets/{EnvVarEditor-GSapLD96.js → EnvVarEditor-C-gErAzC.js} +1 -1
- package/web/dist/assets/EventDefDetail-BhJZGNlX.js +1 -0
- package/web/dist/assets/Events-DnNZ9-BN.js +1 -0
- package/web/dist/assets/{Evolution-BO5hysLD.js → Evolution-BBWmrrnr.js} +1 -1
- package/web/dist/assets/{GoalDetail-cxa8OvEi.js → GoalDetail-uqWQCOj3.js} +1 -1
- package/web/dist/assets/{Goals-Dz3qqp_l.js → Goals-CylKmR9j.js} +1 -1
- package/web/dist/assets/{Logs-Ckp3-hYV.js → Logs-6rf0KT0z.js} +1 -1
- package/web/dist/assets/{Memories-DEuSRoP3.js → Memories-CrBTujU7.js} +1 -1
- package/web/dist/assets/{NotFound-Bvn39vSk.js → NotFound-DitXhq_y.js} +1 -1
- package/web/dist/assets/{PageHeader-BMvN0xiB.js → PageHeader-CHSgtxPw.js} +1 -1
- package/web/dist/assets/Plugins-VKUSUcSE.js +1 -0
- package/web/dist/assets/{RoleDetail-BWMjP9aZ.js → RoleDetail-DJc4CWFN.js} +2 -2
- package/web/dist/assets/{Roles-DD7NBDku.js → Roles-6pmjn04G.js} +1 -1
- package/web/dist/assets/{SectionHeader-CiCj3Is0.js → SectionHeader-C2WpiwJ5.js} +1 -1
- package/web/dist/assets/{Settings-BlU19KuR.js → Settings-DW1jmrNj.js} +1 -1
- package/web/dist/assets/{Strategies-CJ_q94-v.js → Strategies-Bmke6qZo.js} +1 -1
- package/web/dist/assets/{Switch-CoUUy5jr.js → Switch-CfTpXW9_.js} +1 -1
- package/web/dist/assets/{Table-CaFJieh_.js → Table-DuOLbyJQ.js} +1 -1
- package/web/dist/assets/{TaskDetail-DVrjU-E6.js → TaskDetail-CwJ_UKgt.js} +2 -2
- package/web/dist/assets/Work-DVdWNBEm.js +1 -0
- package/web/dist/assets/index-D4IubNPI.css +2 -0
- package/web/dist/assets/index-DYsO5Awn.js +2 -0
- package/web/dist/assets/{useIsMobileLayout-Bwrm84kJ.js → useIsMobileLayout-C6KIQjuh.js} +1 -1
- package/web/dist/assets/{vendor-icons-BlMaTTx3.js → vendor-icons-Dk0hMuJz.js} +1 -1
- package/web/dist/assets/{vendor-react-7e01TWy7.js → vendor-react-C6faO6LO.js} +1 -1
- package/web/dist/assets/{vendor-state-Bj70wnRm.js → vendor-state-DahK0J-G.js} +1 -1
- package/web/dist/index.html +7 -7
- package/dist/App-JGH6G5US.js +0 -13
- package/dist/adam-tools-W5AOIGEQ.js +0 -1
- package/dist/approval-handler-ORD4MUVM.js +0 -1
- package/dist/audit-manager-YCJT2WP5.js +0 -1
- package/dist/bree-engine-R5YLSDCL.js +0 -1
- package/dist/channels-JCMPPQED.js +0 -1
- package/dist/chunk-2YAP4YJV.js +0 -57
- package/dist/chunk-DZEVMYPB.js +0 -19
- package/dist/chunk-GY52JA5I.js +0 -10
- package/dist/chunk-ISZJV72D.js +0 -7
- package/dist/chunk-MTWLLE26.js +0 -49
- package/dist/chunk-RAW263MQ.js +0 -99
- package/dist/chunk-S3BAIZ4Q.js +0 -6
- package/dist/chunk-VRP4LTHY.js +0 -1
- package/dist/config-XMQS2NPT.js +0 -1
- package/dist/db-YUYXVV3A.js +0 -1
- package/dist/delivery-log-VKONLSVD.js +0 -1
- package/dist/engine-BM5BMPIC.js +0 -1
- package/dist/memory-service-QMYJPBAE.js +0 -1
- package/dist/outbound-gateway-6K6P2BEH.js +0 -1
- package/dist/role-presets-K2BDRZBS.js +0 -1
- package/dist/roles-L34L5MK3.js +0 -1
- package/dist/session-manager-GRJ3FV3L.js +0 -1
- package/dist/task-templates-23YOAF3E.js +0 -1
- package/dist/workflow-executor-JTUWX5DC.js +0 -1
- package/web/dist/assets/Plugins-CRym22JF.js +0 -1
- package/web/dist/assets/Work-BMl61RRi.js +0 -1
- package/web/dist/assets/index-DcXMQByM.css +0 -2
- package/web/dist/assets/index-pF--tN9F.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as l,e as D,f as S,g as $}from"./chunk-
|
|
1
|
+
import{d as l,e as D,f as S,g as $}from"./chunk-NUITL62I.js";import{b as h}from"./chunk-2L2347UQ.js";import{b as u}from"./chunk-K4C43YDD.js";import{e as R,g as T,j as C}from"./chunk-WMB7P64J.js";import{l as k,n as x,r as N}from"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import{c as d,h as y}from"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";y();var w=d("agent");function I(n){let o=l(n);if(!o){w.debug({taskId:n},"No plan found for task, skipping review");return}let i=h(n,1e3),s=o.plan.steps,a=i.filter(e=>e.type==="tool_result"||e.type==="permission_denied").map(e=>({toolName:e.toolName??"unknown",output:e.content,planStepIndex:e.planStepIndex,permissionDenied:e.type==="permission_denied"})),t=[],r=new Set(a.map(e=>e.planStepIndex).filter(e=>e!==void 0));for(let e of s)r.has(e.index)||t.push({stepIndex:e.index,planned:e.description,actual:"Not executed",deviationType:"skipped"});let c=a.filter(e=>e.planStepIndex===void 0);for(let e of c)t.push({stepIndex:-1,planned:"",actual:`${e.toolName}: ${e.output.slice(0,200)}`,deviationType:"added"});let b=a.filter(e=>e.permissionDenied);for(let e of b)t.push({stepIndex:e.planStepIndex??-1,planned:e.planStepIndex!==void 0?s.find(E=>E.index===e.planStepIndex)?.description??"Unknown":"",actual:`PERMISSION DENIED: ${e.toolName}`,deviationType:"failed"});let p=s.length,m=a.length,g=p>0?Math.max(0,1-t.filter(e=>e.deviationType!=="added").length/p):1,v={stepsPlanned:p,stepsExecuted:m,deviations:t,overallAccuracy:g};return S(o.id,v),w.info({taskId:n,planId:o.id,stepsPlanned:p,stepsExecuted:m,deviationCount:t.length,accuracy:g},"Deviation report generated"),v}function P(n){return n.deviations.filter(i=>i.deviationType==="failed"||i.deviationType==="skipped").length===0&&n.overallAccuracy>=.7}N();C();y();var f=d("agent");function L(n,o){let i=[],a=u(n)?.prompt.slice(0,100)??"unknown task";P(o)&&i.push(`[+] Task "${a}" completed successfully with ${o.overallAccuracy*100}% plan accuracy (${o.stepsExecuted} steps). [sourceTaskId:${n}]`);for(let t of o.deviations)switch(t.deviationType){case"skipped":i.push(`[-] Planned step "${t.planned}" was skipped during "${a}". Consider if this step is necessary for similar tasks. [sourceTaskId:${n}]`);break;case"failed":i.push(`[-] Step failed: "${t.actual}" during "${a}". Check permissions and tool availability. [sourceTaskId:${n}]`);break;case"added":i.push(`[~] Unplanned action: "${t.actual}" during "${a}". Consider adding to plan for similar tasks. [sourceTaskId:${n}]`);break;case"modified":i.push(`[~] Step modified: planned "${t.planned}" but did "${t.actual}" during "${a}". [sourceTaskId:${n}]`);break}return i}async function z(n){let o=l(n);if(!o){f.debug({taskId:n},"No plan for task, skipping review/learn");return}let i=I(n);if(!i)return;let s=L(n,i);if(s.length===0)return;$(o.id,s);let a=u(n);if(a?.roleId){let t=k(a.roleId);if(t){let r=[...t.learnedRules,...s];x(a.roleId,{learnedRules:r});let c=R(t.name);T(c,{...t,learnedRules:r}),f.info({roleId:a.roleId,newRulesCount:s.length},"Role learnedRules updated and CLAUDE.md written")}}D(o.id,"completed"),f.info({taskId:n,planId:o.id,rulesExtracted:s.length,accuracy:i.overallAccuracy},"Task review and learning completed")}export{L as extractRulesFromDeviation,z as processTaskReview};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h}from"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";h();export{g as getComponentFilter,e as getLogLevel,c as getLogger,b as logger,a as onLogEvent,f as setComponentFilter,d as setLogLevel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q}from"./chunk-
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q}from"./chunk-DVN3BFPP.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{o as DEFAULT_HYBRID_CONFIG,k as DEFAULT_SCORING_WEIGHTS,l as calculateRecency,m as calculateSmallvilleScore,p as cleanupMemories,f as countMemoriesByRole,a as createMemory,j as deleteMemory,b as getMemory,n as getRoleScoringWeights,g as listMemoriesByRole,e as markSuperseded,i as searchByBM25,h as searchByVector,q as searchHybrid,c as updateMemory,d as updateMemoryRetrievalCount};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as v}from"./chunk-A5OCDYTW.js";import{a as p}from"./chunk-SWP2JC54.js";import{a as h}from"./chunk-IZNEOYRP.js";import{b as g}from"./chunk-2L2347UQ.js";import{a as l,g as w}from"./chunk-DVN3BFPP.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import{b as u,d as M}from"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import{c as y,h as b}from"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";b();M();import{v4 as $}from"uuid";var x=y("manager"),d=150,C=50;function N(e){return u().prepare("SELECT importance_trigger_curr FROM roles WHERE id = ?").get(e)?.importance_trigger_curr??d}function f(e,t){u().prepare("UPDATE roles SET importance_trigger_curr = ? WHERE id = ?").run(t,e)}function _(e,t){let r=N(e)-t;return f(e,r),r<=0}async function S(e){let t=w(e,C,0);if(t.length===0){f(e,d);return}let r=`Based on these recent experiences, what are the key insights and patterns?
|
|
2
2
|
|
|
3
3
|
${t.slice(0,20).map((c,m)=>`${m+1}. [${c.type}] (importance: ${c.importance}) ${c.content}`).join(`
|
|
4
4
|
`)}
|
|
5
5
|
|
|
6
|
-
Provide 1-3 high-level insights.`,o;try{o=(await h(r,"You are an agent self-reflection system. Analyze the experiences and produce concise, actionable insights. Respond with 1-3 high-level insights, each on its own line.")).trim()||E(t)}catch{o=E(t)}let i;try{i=await p(o)}catch{}let a=o.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(c=>c.length>2),s={id:$(),roleId:e,type:"reflection",content:o,embedding:i,keywords:[...new Set(a)].slice(0,20),importance:5,sourceType:"reflection",evidence:t.slice(0,10).map(c=>c.id),createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"semantic"};l(s);try{let{markSuperseded:c}=await import("./memories-
|
|
6
|
+
Provide 1-3 high-level insights.`,o;try{o=(await h(r,"You are an agent self-reflection system. Analyze the experiences and produce concise, actionable insights. Respond with 1-3 high-level insights, each on its own line.")).trim()||E(t)}catch{o=E(t)}let i;try{i=await p(o)}catch{}let a=o.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(c=>c.length>2),s={id:$(),roleId:e,type:"reflection",content:o,embedding:i,keywords:[...new Set(a)].slice(0,20),importance:5,sourceType:"reflection",evidence:t.slice(0,10).map(c=>c.id),createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"semantic"};l(s);try{let{markSuperseded:c}=await import("./memories-VMOGFVPU.js"),m=t.slice(0,10).map(T=>T.id);c(m,s.id)}catch{}try{v({timestamp:Date.now(),oldRules:"",newRules:o,diff:o,roleId:e,source:"reflection"})}catch{}f(e,d),x.info({roleId:e,preview:o.slice(0,100)},"Generated reflection")}function E(e){let t=e.filter(i=>i.type==="event"),n=t.filter(i=>i.content.includes("Error")||i.content.includes("failed")),r=t.filter(i=>i.content.includes("Modified file")),o=[];return r.length>0&&o.push(`Made ${r.length} file modifications in recent tasks.`),n.length>0&&o.push(`Encountered ${n.length} errors.`),t.length>0&&o.push(`Total ${t.length} significant events observed.`),o.length>0?`Reflection: ${o.join(" ")}`:"Reflection: No significant patterns observed in recent activity."}async function R(e,t){_(e,t)&&await S(e)}import{v4 as A}from"uuid";function L(e){let t=e.toolName,n=e.toolOutput||e.content;if(t==="Write"||t==="Edit")return{content:`Modified file via ${t}: ${n.slice(0,400)}`,importance:4,type:"event"};if(t==="Bash"){let r=e.toolInput?.command?.slice(0,100)||"Bash";return n.includes("FAIL")||n.includes("error:")||n.includes("Error:")?{content:`Command failed: ${r} ${n.slice(0,300)}`,importance:4,type:"event"}:n.includes("success")||n.includes("done")||n.includes("OK")?{content:`Command succeeded: ${r}`,importance:2,type:"event"}:{content:`Executed: ${r}`,importance:1,type:"event"}}return t==="Read"?{content:`Read file: ${e.toolInput?.file_path||e.toolInput?.path||"unknown"}`,importance:1,type:"thought"}:t==="Glob"||t==="Grep"?{content:`Searched: ${t} - ${e.toolInput?.pattern||"query"}`,importance:2,type:"thought"}:null}function F(e){let t=g(e,500,0),n=[];for(let r of t)if((r.type==="tool_result"||r.type==="tool_call")&&r.toolName){let o=L(r);o&&n.push(o)}else r.type==="error"&&n.push({content:`Error occurred: ${r.content.slice(0,400)}`,importance:4,type:"event"});return{facts:n}}function k(e){let t=e.toLowerCase().replace(/[^\w\s]/g," ").split(/\s+/).filter(n=>n.length>2);return[...new Set(t)].slice(0,20)}async function V(e,t){let n=!1;try{let{searchByBM25:i}=await import("./memories-VMOGFVPU.js");n=i(t,e,5).filter(s=>s.sourceTaskId===e).some(s=>s.type==="thought")}catch{}let{facts:r}=F(e),o=0;for(let i of r){if(n&&i.importance<=2)continue;let a=i.content.slice(0,500),s;try{s=await p(a)}catch{}let c=k(a),m={id:A(),roleId:t,type:i.type,content:a,embedding:s,keywords:c,importance:i.importance,sourceType:"task_complete",sourceTaskId:e,createdAt:Date.now(),lastAccessed:Date.now(),retrievedCount:0,tier:"episodic"};l(m),o++,await R(t,i.importance)}return o}export{F as extractKeyFacts,V as processTaskCompletion};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c}from"./chunk-IKPYPZ64.js";import"./chunk-SWP2JC54.js";import"./chunk-DVN3BFPP.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{b as getRelevantMemoryContext,a as queryMemory,c as queryMemoryByTier};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c}from"./chunk-RI3V72RP.js";import"./chunk-GSFLLRS7.js";import"./chunk-L7JP7DUO.js";import"./chunk-RZ7LCZVK.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as OutboundGateway,b as getOutboundGateway,c as isRecentlySent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e}from"./chunk-BCH2HAIM.js";import"./chunk-WMB7P64J.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as CHAT_MANAGER_ROLE_ID,b as PRESET_ROLE_NAMES,e as ensureAdamAutomatorRole,d as initializeDefaultRoles,c as isPresetRole};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as a,f as b,g as c,h as d,j as e}from"./chunk-WMB7P64J.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";e();export{b as ensureRoleWorkspace,a as getRoleWorkspacePath,d as syncRoleSettings,c as writeRoleCLAUDEmd};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as a,k as b,l as c,m as d,n as e,o as f,p as g,r as h}from"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";h();export{b as createRole,g as deleteRole,c as getRole,d as getRoleByName,f as listRoles,e as updateRole,a as validateAdditionalDirectories};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}from"./chunk-M4YI4WVX.js";import"./chunk-2YTDCR6A.js";import"./chunk-SWP2JC54.js";import"./chunk-B6LOT5CG.js";import"./chunk-L7JP7DUO.js";import"./chunk-DVN3BFPP.js";import"./chunk-PG6LMSX6.js";import"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{p as _resetForTest,e as archiveSession,b as createSession,g as deleteSession,c as getActiveSession,d as getSession,m as getTimeoutPollerInterval,i as incrementMessageCount,n as initSessionManager,j as listSessions,f as restoreSession,o as shutdownSessionManager,k as startTimeoutPoller,l as stopTimeoutPoller,h as touchSession,a as warmCache};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a,b,c,d,e,f,g,h,i,j}from"./chunk-5XOTPEAK.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as TemplateRoleConfigError,c as createTaskTemplate,j as deleteTaskTemplate,h as disableTaskTemplate,g as enableTaskTemplate,d as getTaskTemplate,i as getTaskTemplateDependents,f as listTaskTemplates,e as updateTaskTemplate,b as validateTemplateRoleConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as a}from"./chunk-ULTK7RD6.js";import"./chunk-6KF7OO2B.js";import"./chunk-IZNEOYRP.js";import"./chunk-N4ES7TCL.js";import"./chunk-NWMOV23A.js";import"./chunk-2L2347UQ.js";import"./chunk-K4C43YDD.js";import"./chunk-RI3V72RP.js";import"./chunk-GSFLLRS7.js";import"./chunk-WMB7P64J.js";import"./chunk-L7JP7DUO.js";import"./chunk-RZ7LCZVK.js";import"./chunk-PG6LMSX6.js";import"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-HQRUJQN7.js";import"./chunk-FPZEZYUB.js";import"./chunk-5EPG2US5.js";import"./chunk-WBAPIPST.js";import"./chunk-MRTJFYPR.js";import"./chunk-FCV2DPZQ.js";export{a as WorkflowExecutor};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adam-agent-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "Goal-driven AI agent orchestration server with Role+Skill model, real-time streaming, and multi-channel delivery",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -17,48 +17,48 @@
|
|
|
17
17
|
"onnxruntime-node": "^1.24.3"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@anthropic-ai/claude-agent-sdk": "^0.2.
|
|
20
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.112",
|
|
21
21
|
"@anthropic-ai/sdk": "^0.80.0",
|
|
22
|
-
"@fastify/cors": "^10.
|
|
23
|
-
"@fastify/static": "^9.
|
|
22
|
+
"@fastify/cors": "^10.1.0",
|
|
23
|
+
"@fastify/static": "^9.1.1",
|
|
24
24
|
"@fastify/swagger": "^9.7.0",
|
|
25
25
|
"@fastify/swagger-ui": "^5.2.5",
|
|
26
|
-
"@fastify/websocket": "^11.
|
|
27
|
-
"better-sqlite3": "^11.
|
|
26
|
+
"@fastify/websocket": "^11.2.0",
|
|
27
|
+
"better-sqlite3": "^11.10.0",
|
|
28
28
|
"bree": "^9.2.9",
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"commander": "^13.0.0",
|
|
29
|
+
"chalk": "^5.6.2",
|
|
30
|
+
"commander": "^13.1.0",
|
|
32
31
|
"cron-parser": "^5.5.0",
|
|
33
|
-
"
|
|
34
|
-
"
|
|
32
|
+
"discord.js": "^14.26.3",
|
|
33
|
+
"fastify": "^5.8.5",
|
|
34
|
+
"ink": "^5.2.1",
|
|
35
35
|
"ink-spinner": "^5.0.0",
|
|
36
36
|
"ink-text-input": "^6.0.0",
|
|
37
37
|
"pino": "^10.3.1",
|
|
38
38
|
"pino-pretty": "^13.1.3",
|
|
39
|
-
"react": "^18.
|
|
40
|
-
"uuid": "^11.
|
|
41
|
-
"yaml": "^2.
|
|
39
|
+
"react": "^18.3.1",
|
|
40
|
+
"uuid": "^11.1.0",
|
|
41
|
+
"yaml": "^2.8.3",
|
|
42
42
|
"zod": "^4.3.6"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"conventional-commits-parser": "^3.0.0",
|
|
46
45
|
"@testing-library/react": "^16.3.2",
|
|
47
|
-
"@types/better-sqlite3": "^7.6.
|
|
48
|
-
"@types/node": "^22.
|
|
49
|
-
"@types/react": "^18.
|
|
46
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
47
|
+
"@types/node": "^22.19.17",
|
|
48
|
+
"@types/react": "^18.3.28",
|
|
50
49
|
"@types/react-dom": "^19.2.3",
|
|
51
50
|
"@types/uuid": "^10.0.0",
|
|
52
51
|
"@types/ws": "^8.18.1",
|
|
53
|
-
"@vitest/coverage-v8": "^4.1.
|
|
54
|
-
"
|
|
52
|
+
"@vitest/coverage-v8": "^4.1.4",
|
|
53
|
+
"conventional-commits-parser": "^3.2.4",
|
|
54
|
+
"happy-dom": "^20.9.0",
|
|
55
55
|
"ink-testing-library": "^4.0.0",
|
|
56
56
|
"react-dom": "^18.3.1",
|
|
57
|
-
"tsup": "^8.
|
|
58
|
-
"tsx": "^4.
|
|
59
|
-
"typescript": "^5.
|
|
60
|
-
"vitest": "^4.1.
|
|
61
|
-
"ws": "^8.
|
|
57
|
+
"tsup": "^8.5.1",
|
|
58
|
+
"tsx": "^4.21.0",
|
|
59
|
+
"typescript": "^5.9.3",
|
|
60
|
+
"vitest": "^4.1.4",
|
|
61
|
+
"ws": "^8.20.0"
|
|
62
62
|
},
|
|
63
63
|
"engines": {
|
|
64
64
|
"node": ">=20.0.0"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{st as t}from"./vendor-icons-BlMaTTx3.js";import{h as n,t as r}from"./vendor-react-7e01TWy7.js";import{i}from"./dist-Bdqp1ixJ.js";import{i as a,n as o,r as s}from"./Button-BjXgrQ95.js";typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var l=e(t(),1),u=r();function d(e,t){let n=l.createContext(t),r=e=>{let{children:t,...r}=e,i=l.useMemo(()=>r,Object.values(r));return(0,u.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=l.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function f(e,t=[]){let n=[];function r(t,r){let i=l.createContext(r),a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=l.useMemo(()=>o,Object.values(o));return(0,u.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=l.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>l.createContext(e));return function(n){let r=n?.[e]||t;return l.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,p(i,...t)]}function p(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function m(e){let t=h(e),n=l.forwardRef((e,n)=>{let{children:r,...i}=e,a=l.Children.toArray(r),o=a.find(v);if(o){let e=o.props.children,r=a.map(t=>t===o?l.Children.count(e)>1?l.Children.only(null):l.isValidElement(e)?e.props.children:null:t);return(0,u.jsx)(t,{...i,ref:n,children:l.isValidElement(e)?l.cloneElement(e,void 0,r):null})}return(0,u.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function h(e){let t=l.forwardRef((e,t)=>{let{children:n,...r}=e;if(l.isValidElement(n)){let e=b(n),i=y(r,n.props);return n.type!==l.Fragment&&(i.ref=t?s(t,e):e),l.cloneElement(n,i)}return l.Children.count(n)>1?l.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var g=Symbol(`radix.slottable`);function _(e){let t=({children:e})=>(0,u.jsx)(u.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=g,t}function v(e){return l.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===g}function y(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function b(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var x=e(n(),1),S=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=m(`Primitive.${t}`),r=l.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,u.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function C(e,t){e&&x.flushSync(()=>e.dispatchEvent(t))}function w(e){let t=l.useRef(e);return l.useEffect(()=>{t.current=e}),l.useMemo(()=>(...e)=>t.current?.(...e),[])}function ee(e,t=globalThis?.document){let n=w(e);l.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var T=`DismissableLayer`,te=`dismissableLayer.update`,ne=`dismissableLayer.pointerDownOutside`,re=`dismissableLayer.focusOutside`,ie,ae=l.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),oe=l.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:o,onInteractOutside:s,onDismiss:d,...f}=e,p=l.useContext(ae),[m,h]=l.useState(null),g=m?.ownerDocument??globalThis?.document,[,_]=l.useState({}),v=a(t,e=>h(e)),y=Array.from(p.layers),[b]=[...p.layersWithOutsidePointerEventsDisabled].slice(-1),x=y.indexOf(b),C=m?y.indexOf(m):-1,w=p.layersWithOutsidePointerEventsDisabled.size>0,T=C>=x,ne=le(e=>{let t=e.target,n=[...p.branches].some(e=>e.contains(t));!T||n||(i?.(e),s?.(e),e.defaultPrevented||d?.())},g),re=ue(e=>{let t=e.target;[...p.branches].some(e=>e.contains(t))||(o?.(e),s?.(e),e.defaultPrevented||d?.())},g);return ee(e=>{C===p.layers.size-1&&(r?.(e),!e.defaultPrevented&&d&&(e.preventDefault(),d()))},g),l.useEffect(()=>{if(m)return n&&(p.layersWithOutsidePointerEventsDisabled.size===0&&(ie=g.body.style.pointerEvents,g.body.style.pointerEvents=`none`),p.layersWithOutsidePointerEventsDisabled.add(m)),p.layers.add(m),de(),()=>{n&&p.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=ie)}},[m,g,n,p]),l.useEffect(()=>()=>{m&&(p.layers.delete(m),p.layersWithOutsidePointerEventsDisabled.delete(m),de())},[m,p]),l.useEffect(()=>{let e=()=>_({});return document.addEventListener(te,e),()=>document.removeEventListener(te,e)},[]),(0,u.jsx)(S.div,{...f,ref:v,style:{pointerEvents:w?T?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,re.onFocusCapture),onBlurCapture:c(e.onBlurCapture,re.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,ne.onPointerDownCapture)})});oe.displayName=T;var se=`DismissableLayerBranch`,ce=l.forwardRef((e,t)=>{let n=l.useContext(ae),r=l.useRef(null),i=a(t,r);return l.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,u.jsx)(S.div,{...e,ref:i})});ce.displayName=se;function le(e,t=globalThis?.document){let n=w(e),r=l.useRef(!1),i=l.useRef(()=>{});return l.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){fe(ne,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function ue(e,t=globalThis?.document){let n=w(e),r=l.useRef(!1);return l.useEffect(()=>{let e=e=>{e.target&&!r.current&&fe(re,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function de(){let e=new CustomEvent(te);document.dispatchEvent(e)}function fe(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?C(i,a):i.dispatchEvent(a)}var E=globalThis?.document?l.useLayoutEffect:()=>{},pe=l.useId||(()=>void 0),me=0;function D(e){let[t,n]=l.useState(pe());return E(()=>{e||n(e=>e??String(me++))},[e]),e||(t?`radix-${t}`:``)}var he=`Portal`,ge=l.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=l.useState(!1);E(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?x.createPortal((0,u.jsx)(S.div,{...r,ref:t}),o):null});ge.displayName=he;function _e(e,t){return l.useReducer((e,n)=>t[e][n]??e,e)}var O=e=>{let{present:t,children:n}=e,r=ve(t),i=typeof n==`function`?n({present:r.isPresent}):l.Children.only(n),o=a(r.ref,ye(i));return typeof n==`function`||r.isPresent?l.cloneElement(i,{ref:o}):null};O.displayName=`Presence`;function ve(e){let[t,n]=l.useState(),r=l.useRef(null),i=l.useRef(e),a=l.useRef(`none`),[o,s]=_e(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return l.useEffect(()=>{let e=k(r.current);a.current=o===`mounted`?e:`none`},[o]),E(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=k(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),E(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=k(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=k(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:l.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function k(e){return e?.animationName||`none`}function ye(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var be=l.useInsertionEffect||E;function xe({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=Se({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=l.useRef(e!==void 0);l.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,l.useCallback(t=>{if(s){let n=Ce(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function Se({defaultProp:e,onChange:t}){let[n,r]=l.useState(e),i=l.useRef(n),a=l.useRef(t);return be(()=>{a.current=t},[t]),l.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function Ce(e){return typeof e==`function`}var we=`focusScope.autoFocusOnMount`,A=`focusScope.autoFocusOnUnmount`,Te={bubbles:!1,cancelable:!0},Ee=`FocusScope`,De=l.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...s}=e,[c,d]=l.useState(null),f=w(i),p=w(o),m=l.useRef(null),h=a(t,e=>d(e)),g=l.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;l.useEffect(()=>{if(r){let e=function(e){if(g.paused||!c)return;let t=e.target;c.contains(t)?m.current=t:j(m.current,{select:!0})},t=function(e){if(g.paused||!c)return;let t=e.relatedTarget;t!==null&&(c.contains(t)||j(m.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&j(c)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return c&&r.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,c,g.paused]),l.useEffect(()=>{if(c){Pe.add(g);let e=document.activeElement;if(!c.contains(e)){let t=new CustomEvent(we,Te);c.addEventListener(we,f),c.dispatchEvent(t),t.defaultPrevented||(Oe(Le(Ae(c)),{select:!0}),document.activeElement===e&&j(c))}return()=>{c.removeEventListener(we,f),setTimeout(()=>{let t=new CustomEvent(A,Te);c.addEventListener(A,p),c.dispatchEvent(t),t.defaultPrevented||j(e??document.body,{select:!0}),c.removeEventListener(A,p),Pe.remove(g)},0)}}},[c,f,p,g]);let _=l.useCallback(e=>{if(!n&&!r||g.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=ke(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&j(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&j(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,g.paused]);return(0,u.jsx)(S.div,{tabIndex:-1,...s,ref:h,onKeyDown:_})});De.displayName=Ee;function Oe(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(j(r,{select:t}),document.activeElement!==n)return}function ke(e){let t=Ae(e);return[je(t,e),je(t.reverse(),e)]}function Ae(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function je(e,t){for(let n of e)if(!Me(n,{upTo:t}))return n}function Me(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function Ne(e){return e instanceof HTMLInputElement&&`select`in e}function j(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Ne(e)&&t&&e.select()}}var Pe=Fe();function Fe(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Ie(e,t),e.unshift(t)},remove(t){e=Ie(e,t),e[0]?.resume()}}}function Ie(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Le(e){return e.filter(e=>e.tagName!==`A`)}var M=0;function Re(){l.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??ze()),document.body.insertAdjacentElement(`beforeend`,e[1]??ze()),M++,()=>{M===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),M--}},[])}function ze(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var N=function(){return N=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},N.apply(this,arguments)};function Be(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function Ve(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var P=`right-scroll-bar-position`,F=`width-before-scroll-bar`,He=`with-scroll-bars-hidden`,Ue=`--removed-body-scroll-bar-size`;function I(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function We(e,t){var n=(0,l.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var Ge=typeof window<`u`?l.useLayoutEffect:l.useEffect,Ke=new WeakMap;function qe(e,t){var n=We(t||null,function(t){return e.forEach(function(e){return I(e,t)})});return Ge(function(){var t=Ke.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||I(e,null)}),i.forEach(function(e){r.has(e)||I(e,a)})}Ke.set(n,e)},[e]),n}function Je(e){return e}function Ye(e,t){t===void 0&&(t=Je);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Xe(e){e===void 0&&(e={});var t=Ye(null);return t.options=N({async:!0,ssr:!1},e),t}var Ze=function(e){var t=e.sideCar,n=Be(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return l.createElement(r,N({},n))};Ze.isSideCarExport=!0;function Qe(e,t){return e.useMedium(t),Ze}var $e=Xe(),L=function(){},R=l.forwardRef(function(e,t){var n=l.useRef(null),r=l.useState({onScrollCapture:L,onWheelCapture:L,onTouchMoveCapture:L}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,u=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=Be(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=qe([n,t]),w=N(N({},x),i);return l.createElement(l.Fragment,null,d&&l.createElement(S,{sideCar:$e,removeScrollBar:u,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?l.cloneElement(l.Children.only(s),N(N({},w),{ref:C})):l.createElement(y,N({},w,{className:c,ref:C}),s))});R.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},R.classNames={fullWidth:F,zeroRight:P};var et,tt=function(){if(et)return et;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function nt(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=tt();return t&&e.setAttribute(`nonce`,t),e}function rt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function it(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var at=function(){var e=0,t=null;return{add:function(n){e==0&&(t=nt())&&(rt(t,n),it(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},ot=function(){var e=at();return function(t,n){l.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},st=function(){var e=ot();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},ct={left:0,top:0,right:0,gap:0},z=function(e){return parseInt(e||``,10)||0},lt=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[z(n),z(r),z(i)]},ut=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return ct;var t=lt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},dt=st(),B=`data-scroll-locked`,ft=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{ct as t}from"./vendor-icons-Dk0hMuJz.js";import{h as n,t as r}from"./vendor-react-C6faO6LO.js";import{i}from"./dist-Bdqp1ixJ.js";import{i as a,n as o,r as s}from"./Button-DuQctNms.js";typeof window<`u`&&window.document&&window.document.createElement;function c(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}var l=e(t(),1),u=r();function d(e,t){let n=l.createContext(t),r=e=>{let{children:t,...r}=e,i=l.useMemo(()=>r,Object.values(r));return(0,u.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=l.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function f(e,t=[]){let n=[];function r(t,r){let i=l.createContext(r),a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=l.useMemo(()=>o,Object.values(o));return(0,u.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=l.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>l.createContext(e));return function(n){let r=n?.[e]||t;return l.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,p(i,...t)]}function p(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return l.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function m(e){let t=h(e),n=l.forwardRef((e,n)=>{let{children:r,...i}=e,a=l.Children.toArray(r),o=a.find(v);if(o){let e=o.props.children,r=a.map(t=>t===o?l.Children.count(e)>1?l.Children.only(null):l.isValidElement(e)?e.props.children:null:t);return(0,u.jsx)(t,{...i,ref:n,children:l.isValidElement(e)?l.cloneElement(e,void 0,r):null})}return(0,u.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function h(e){let t=l.forwardRef((e,t)=>{let{children:n,...r}=e;if(l.isValidElement(n)){let e=b(n),i=y(r,n.props);return n.type!==l.Fragment&&(i.ref=t?s(t,e):e),l.cloneElement(n,i)}return l.Children.count(n)>1?l.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var g=Symbol(`radix.slottable`);function _(e){let t=({children:e})=>(0,u.jsx)(u.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=g,t}function v(e){return l.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===g}function y(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function b(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var x=e(n(),1),S=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=m(`Primitive.${t}`),r=l.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,u.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function C(e,t){e&&x.flushSync(()=>e.dispatchEvent(t))}function w(e){let t=l.useRef(e);return l.useEffect(()=>{t.current=e}),l.useMemo(()=>(...e)=>t.current?.(...e),[])}function ee(e,t=globalThis?.document){let n=w(e);l.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var T=`DismissableLayer`,te=`dismissableLayer.update`,ne=`dismissableLayer.pointerDownOutside`,re=`dismissableLayer.focusOutside`,ie,ae=l.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),oe=l.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:o,onInteractOutside:s,onDismiss:d,...f}=e,p=l.useContext(ae),[m,h]=l.useState(null),g=m?.ownerDocument??globalThis?.document,[,_]=l.useState({}),v=a(t,e=>h(e)),y=Array.from(p.layers),[b]=[...p.layersWithOutsidePointerEventsDisabled].slice(-1),x=y.indexOf(b),C=m?y.indexOf(m):-1,w=p.layersWithOutsidePointerEventsDisabled.size>0,T=C>=x,ne=le(e=>{let t=e.target,n=[...p.branches].some(e=>e.contains(t));!T||n||(i?.(e),s?.(e),e.defaultPrevented||d?.())},g),re=ue(e=>{let t=e.target;[...p.branches].some(e=>e.contains(t))||(o?.(e),s?.(e),e.defaultPrevented||d?.())},g);return ee(e=>{C===p.layers.size-1&&(r?.(e),!e.defaultPrevented&&d&&(e.preventDefault(),d()))},g),l.useEffect(()=>{if(m)return n&&(p.layersWithOutsidePointerEventsDisabled.size===0&&(ie=g.body.style.pointerEvents,g.body.style.pointerEvents=`none`),p.layersWithOutsidePointerEventsDisabled.add(m)),p.layers.add(m),de(),()=>{n&&p.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=ie)}},[m,g,n,p]),l.useEffect(()=>()=>{m&&(p.layers.delete(m),p.layersWithOutsidePointerEventsDisabled.delete(m),de())},[m,p]),l.useEffect(()=>{let e=()=>_({});return document.addEventListener(te,e),()=>document.removeEventListener(te,e)},[]),(0,u.jsx)(S.div,{...f,ref:v,style:{pointerEvents:w?T?`auto`:`none`:void 0,...e.style},onFocusCapture:c(e.onFocusCapture,re.onFocusCapture),onBlurCapture:c(e.onBlurCapture,re.onBlurCapture),onPointerDownCapture:c(e.onPointerDownCapture,ne.onPointerDownCapture)})});oe.displayName=T;var se=`DismissableLayerBranch`,ce=l.forwardRef((e,t)=>{let n=l.useContext(ae),r=l.useRef(null),i=a(t,r);return l.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,u.jsx)(S.div,{...e,ref:i})});ce.displayName=se;function le(e,t=globalThis?.document){let n=w(e),r=l.useRef(!1),i=l.useRef(()=>{});return l.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){fe(ne,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function ue(e,t=globalThis?.document){let n=w(e),r=l.useRef(!1);return l.useEffect(()=>{let e=e=>{e.target&&!r.current&&fe(re,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function de(){let e=new CustomEvent(te);document.dispatchEvent(e)}function fe(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?C(i,a):i.dispatchEvent(a)}var E=globalThis?.document?l.useLayoutEffect:()=>{},pe=l.useId||(()=>void 0),me=0;function D(e){let[t,n]=l.useState(pe());return E(()=>{e||n(e=>e??String(me++))},[e]),e||(t?`radix-${t}`:``)}var he=`Portal`,ge=l.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=l.useState(!1);E(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?x.createPortal((0,u.jsx)(S.div,{...r,ref:t}),o):null});ge.displayName=he;function _e(e,t){return l.useReducer((e,n)=>t[e][n]??e,e)}var O=e=>{let{present:t,children:n}=e,r=ve(t),i=typeof n==`function`?n({present:r.isPresent}):l.Children.only(n),o=a(r.ref,ye(i));return typeof n==`function`||r.isPresent?l.cloneElement(i,{ref:o}):null};O.displayName=`Presence`;function ve(e){let[t,n]=l.useState(),r=l.useRef(null),i=l.useRef(e),a=l.useRef(`none`),[o,s]=_e(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return l.useEffect(()=>{let e=k(r.current);a.current=o===`mounted`?e:`none`},[o]),E(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=k(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),E(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=k(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=k(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:l.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function k(e){return e?.animationName||`none`}function ye(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var be=l.useInsertionEffect||E;function xe({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=Se({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=l.useRef(e!==void 0);l.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,l.useCallback(t=>{if(s){let n=Ce(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function Se({defaultProp:e,onChange:t}){let[n,r]=l.useState(e),i=l.useRef(n),a=l.useRef(t);return be(()=>{a.current=t},[t]),l.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function Ce(e){return typeof e==`function`}var we=`focusScope.autoFocusOnMount`,A=`focusScope.autoFocusOnUnmount`,Te={bubbles:!1,cancelable:!0},Ee=`FocusScope`,De=l.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:o,...s}=e,[c,d]=l.useState(null),f=w(i),p=w(o),m=l.useRef(null),h=a(t,e=>d(e)),g=l.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;l.useEffect(()=>{if(r){let e=function(e){if(g.paused||!c)return;let t=e.target;c.contains(t)?m.current=t:j(m.current,{select:!0})},t=function(e){if(g.paused||!c)return;let t=e.relatedTarget;t!==null&&(c.contains(t)||j(m.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&j(c)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return c&&r.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,c,g.paused]),l.useEffect(()=>{if(c){Pe.add(g);let e=document.activeElement;if(!c.contains(e)){let t=new CustomEvent(we,Te);c.addEventListener(we,f),c.dispatchEvent(t),t.defaultPrevented||(Oe(Le(Ae(c)),{select:!0}),document.activeElement===e&&j(c))}return()=>{c.removeEventListener(we,f),setTimeout(()=>{let t=new CustomEvent(A,Te);c.addEventListener(A,p),c.dispatchEvent(t),t.defaultPrevented||j(e??document.body,{select:!0}),c.removeEventListener(A,p),Pe.remove(g)},0)}}},[c,f,p,g]);let _=l.useCallback(e=>{if(!n&&!r||g.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=ke(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&j(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&j(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,g.paused]);return(0,u.jsx)(S.div,{tabIndex:-1,...s,ref:h,onKeyDown:_})});De.displayName=Ee;function Oe(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(j(r,{select:t}),document.activeElement!==n)return}function ke(e){let t=Ae(e);return[je(t,e),je(t.reverse(),e)]}function Ae(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function je(e,t){for(let n of e)if(!Me(n,{upTo:t}))return n}function Me(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function Ne(e){return e instanceof HTMLInputElement&&`select`in e}function j(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Ne(e)&&t&&e.select()}}var Pe=Fe();function Fe(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Ie(e,t),e.unshift(t)},remove(t){e=Ie(e,t),e[0]?.resume()}}}function Ie(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Le(e){return e.filter(e=>e.tagName!==`A`)}var M=0;function Re(){l.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??ze()),document.body.insertAdjacentElement(`beforeend`,e[1]??ze()),M++,()=>{M===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),M--}},[])}function ze(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var N=function(){return N=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},N.apply(this,arguments)};function Be(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function Ve(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var P=`right-scroll-bar-position`,F=`width-before-scroll-bar`,He=`with-scroll-bars-hidden`,Ue=`--removed-body-scroll-bar-size`;function I(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function We(e,t){var n=(0,l.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var Ge=typeof window<`u`?l.useLayoutEffect:l.useEffect,Ke=new WeakMap;function qe(e,t){var n=We(t||null,function(t){return e.forEach(function(e){return I(e,t)})});return Ge(function(){var t=Ke.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||I(e,null)}),i.forEach(function(e){r.has(e)||I(e,a)})}Ke.set(n,e)},[e]),n}function Je(e){return e}function Ye(e,t){t===void 0&&(t=Je);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Xe(e){e===void 0&&(e={});var t=Ye(null);return t.options=N({async:!0,ssr:!1},e),t}var Ze=function(e){var t=e.sideCar,n=Be(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return l.createElement(r,N({},n))};Ze.isSideCarExport=!0;function Qe(e,t){return e.useMedium(t),Ze}var $e=Xe(),L=function(){},R=l.forwardRef(function(e,t){var n=l.useRef(null),r=l.useState({onScrollCapture:L,onWheelCapture:L,onTouchMoveCapture:L}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,u=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=Be(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=qe([n,t]),w=N(N({},x),i);return l.createElement(l.Fragment,null,d&&l.createElement(S,{sideCar:$e,removeScrollBar:u,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?l.cloneElement(l.Children.only(s),N(N({},w),{ref:C})):l.createElement(y,N({},w,{className:c,ref:C}),s))});R.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},R.classNames={fullWidth:F,zeroRight:P};var et,tt=function(){if(et)return et;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function nt(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=tt();return t&&e.setAttribute(`nonce`,t),e}function rt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function it(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var at=function(){var e=0,t=null;return{add:function(n){e==0&&(t=nt())&&(rt(t,n),it(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},ot=function(){var e=at();return function(t,n){l.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},st=function(){var e=ot();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},ct={left:0,top:0,right:0,gap:0},z=function(e){return parseInt(e||``,10)||0},lt=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[z(n),z(r),z(i)]},ut=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return ct;var t=lt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},dt=st(),B=`data-scroll-locked`,ft=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
2
|
.${He} {
|
|
3
3
|
overflow: hidden ${r};
|
|
4
4
|
padding-right: ${s}px ${r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{ct as t}from"./vendor-icons-Dk0hMuJz.js";import{t as n}from"./vendor-react-C6faO6LO.js";import{i as r,t as i}from"./dist-Bdqp1ixJ.js";var a=e(t(),1);function o(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function s(...e){return t=>{let n=!1,r=e.map(e=>{let r=o(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():o(e[t],null)}}}}function c(...e){return a.useCallback(s(...e),e)}var l=n(),u=Symbol.for(`react.lazy`),d=a.use;function f(e){return typeof e==`object`&&!!e&&`then`in e}function p(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===u&&`_payload`in e&&f(e._payload)}function m(e){let t=g(e),n=a.forwardRef((e,n)=>{let{children:r,...i}=e;p(r)&&typeof d==`function`&&(r=d(r._payload));let o=a.Children.toArray(r),s=o.find(v);if(s){let e=s.props.children,r=o.map(t=>t===s?a.Children.count(e)>1?a.Children.only(null):a.isValidElement(e)?e.props.children:null:t);return(0,l.jsx)(t,{...i,ref:n,children:a.isValidElement(e)?a.cloneElement(e,void 0,r):null})}return(0,l.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}var h=m(`Slot`);function g(e){let t=a.forwardRef((e,t)=>{let{children:n,...r}=e;if(p(n)&&typeof d==`function`&&(n=d(n._payload)),a.isValidElement(n)){let e=b(n),i=y(r,n.props);return n.type!==a.Fragment&&(i.ref=t?s(t,e):e),a.cloneElement(n,i)}return a.Children.count(n)>1?a.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var _=Symbol(`radix.slottable`);function v(e){return a.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===_}function y(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function b(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var x=i(`inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md text-sm font-medium transition-[background-color,border-color,color,box-shadow] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--app-canvas)] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0`,{variants:{variant:{default:`bg-[var(--app-accent)] text-white shadow-[var(--app-shadow-accent)] hover:bg-[var(--app-accent-strong)] hover:shadow-[var(--app-shadow-lg)]`,secondary:`border border-[var(--app-border)] bg-white/[0.06] text-[var(--app-text)] hover:border-[var(--app-border-strong)] hover:bg-white/[0.1]`,destructive:`bg-[var(--app-danger)] text-white shadow-[var(--app-shadow-danger)] hover:bg-[var(--app-danger-strong)]`,ghost:`text-[var(--app-text-muted)] hover:text-[var(--app-text)] hover:bg-white/[0.06]`,outline:`border border-[var(--app-border)] bg-transparent text-[var(--app-text)] hover:border-[var(--app-border-strong)] hover:bg-white/[0.04]`,link:`text-[var(--app-accent-strong)] underline-offset-4 hover:underline`},size:{default:`px-3.5 py-1.5`,sm:`px-3 py-1.5 text-xs`,lg:`px-5 py-2.5`,icon:`h-8 w-8`}},defaultVariants:{variant:`default`,size:`default`}}),S=a.forwardRef(({className:e,variant:t,size:n,asChild:i=!1,...a},o)=>(0,l.jsx)(i?h:`button`,{className:r(x({variant:t,size:n,className:e})),ref:o,...a}));S.displayName=`Button`;export{c as i,x as n,s as r,S as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{ct as t}from"./vendor-icons-Dk0hMuJz.js";import{t as n}from"./vendor-react-C6faO6LO.js";import{i as r}from"./dist-Bdqp1ixJ.js";var i=e(t(),1),a=n(),o=i.forwardRef(({className:e,padding:t=!0,...n},i)=>(0,a.jsx)(`div`,{ref:i,className:r(`surface-panel rounded-xl text-[var(--app-text)]`,t&&`p-4`,e),...n}));o.displayName=`Card`;var s=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(`mb-4 flex items-start justify-between gap-3`,e),...t}));s.displayName=`CardHeader`;var c=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`h3`,{ref:n,className:r(`text-base font-semibold text-[var(--app-text)]`,e),...t}));c.displayName=`CardTitle`;var l=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`p`,{ref:n,className:r(`text-sm leading-6 text-[var(--app-text-muted)]`,e),...t}));l.displayName=`CardDescription`;var u=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(`space-y-3`,e),...t}));u.displayName=`CardContent`;var d=i.forwardRef(({className:e,...t},n)=>(0,a.jsx)(`div`,{ref:n,className:r(`flex items-center pt-3`,e),...t}));d.displayName=`CardFooter`;export{c as i,l as n,s as r,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{C as t,L as n,O as r,at as i,ct as a,q as o}from"./vendor-icons-Dk0hMuJz.js";import{f as s,r as c,t as l}from"./vendor-react-C6faO6LO.js";import{n as u}from"./dist-Bdqp1ixJ.js";import{t as d}from"./index-DYsO5Awn.js";import{i as f,r as p,t as m}from"./Card-rKfViPS2.js";import{t as h}from"./PageHeader-CHSgtxPw.js";import{t as g}from"./SectionHeader-C2WpiwJ5.js";import{n as _}from"./format-CHfBBLog.js";var v=e(a(),1),y=l();function b(){let{id:e}=s(),[a,l]=(0,v.useState)(null),[b,S]=(0,v.useState)([]),[C,w]=(0,v.useState)([]),[T,E]=(0,v.useState)(null);if((0,v.useEffect)(()=>{e&&((async()=>{try{l((await u(`/channels/${e}`)).channel),E(null)}catch(e){E(e instanceof Error?e.message:`Failed to load channel`)}})(),u(`/delivery-rules`).then(t=>S(t.filter(t=>t.target.type===`channel`&&t.target.channelId===e))).catch(()=>S([])),u(`/delivery-rules`).then(async t=>{let n=t.filter(t=>t.target.type===`channel`&&t.target.channelId===e),r=[];for(let e of n.slice(0,3))try{let t=await u(`/delivery-rules/${e.id}/log`);r.push(...t.log??[])}catch{}r.sort((e,t)=>t.createdAt-e.createdAt),w(r.slice(0,20))}).catch(()=>w([])))},[e]),T)return(0,y.jsxs)(`div`,{className:`space-y-4`,children:[(0,y.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-[var(--app-text-muted)] hover:text-[var(--app-text)]`,children:[(0,y.jsx)(i,{size:14}),` Back to Channels`]}),(0,y.jsx)(m,{className:`text-center text-[var(--app-danger)]`,children:T})]});if(!a)return(0,y.jsxs)(`div`,{className:`space-y-4`,children:[(0,y.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-[var(--app-text-muted)] hover:text-[var(--app-text)]`,children:[(0,y.jsx)(i,{size:14}),` Back to Channels`]}),(0,y.jsx)(m,{className:`text-center text-[var(--app-text-subtle)]`,children:`Loading...`})]});let D=e=>e===`connected`?`success`:e===`connecting`?`warning`:e===`error`?`destructive`:`secondary`,O=e=>{switch(e){case`wechat`:return`WeChat`;case`telegram`:return`Telegram`;case`slack`:return`Slack`;case`discord`:return`Discord`;default:return e.charAt(0).toUpperCase()+e.slice(1)}},k={...a.config};for(let e of[`botToken`,`apiKey`,`secret`,`password`,`token`])e in k&&(k[e]=`********`);return(0,y.jsxs)(`div`,{className:`space-y-5`,children:[(0,y.jsxs)(c,{to:`/channels`,className:`flex items-center gap-1.5 text-sm text-[var(--app-text-muted)] hover:text-[var(--app-text)]`,children:[(0,y.jsx)(i,{size:14}),` Back to Channels`]}),(0,y.jsx)(h,{eyebrow:`Channel`,title:a.name,compact:!0,description:`Connectivity, delivery policy, and recent outbound activity.`,metrics:[{label:`Status`,value:(0,y.jsx)(d,{variant:D(a.status),children:a.status})},{label:`Platform`,value:O(a.platform)},{label:`Enabled`,value:a.enabled?`Yes`:`No`},{label:`Messages`,value:a.messageCount}]}),(0,y.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-4`,children:[(0,y.jsxs)(m,{className:`surface-panel-muted`,children:[(0,y.jsx)(`p`,{className:`text-section-label`,children:`Channel ID`}),(0,y.jsx)(`p`,{className:`mt-2 truncate font-mono text-sm text-[var(--app-text)]`,children:a.id})]}),(0,y.jsxs)(m,{className:`surface-panel-muted`,children:[(0,y.jsx)(`p`,{className:`text-section-label`,children:`Linked role`}),(0,y.jsx)(`p`,{className:`mt-2 text-sm font-medium text-[var(--app-text)]`,children:a.linkedRoleId?`${a.linkedRoleId.slice(0,8)}...`:`None`})]}),(0,y.jsxs)(m,{className:`surface-panel-muted`,children:[(0,y.jsx)(`p`,{className:`text-section-label`,children:`Delivery rules`}),(0,y.jsx)(`p`,{className:`mt-2 text-2xl font-semibold text-[var(--app-text)]`,children:b.length})]}),(0,y.jsxs)(m,{className:`surface-panel-muted`,children:[(0,y.jsx)(`p`,{className:`text-section-label`,children:`Recent delivery events`}),(0,y.jsx)(`p`,{className:`mt-2 text-2xl font-semibold text-[var(--app-text)]`,children:C.length})]})]}),(0,y.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,children:[(0,y.jsx)(x,{icon:o,label:`Created`,value:_(a.createdAt),mono:!0}),(0,y.jsx)(x,{icon:r,label:`Messages`,value:String(a.messageCount),mono:!0}),a.lastMessageAt&&(0,y.jsx)(x,{icon:o,label:`Last Message`,value:_(a.lastMessageAt),mono:!0}),a.linkedRoleId&&(0,y.jsx)(x,{icon:t,label:`Linked Role`,value:a.linkedRoleId.slice(0,8)+`...`,mono:!0})]}),(0,y.jsx)(g,{title:`Configuration`,compact:!0,description:`Raw config stays available below, but status and traffic stay first.`}),(0,y.jsxs)(m,{children:[(0,y.jsx)(p,{children:(0,y.jsx)(f,{children:`Configuration`})}),Object.keys(k).length>0&&(0,y.jsx)(`div`,{className:`mb-4 grid gap-2 sm:grid-cols-2 lg:grid-cols-3`,children:Object.entries(k).slice(0,6).map(([e,t])=>(0,y.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 px-3 py-2`,children:[(0,y.jsx)(`p`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:e}),(0,y.jsx)(`p`,{className:`mt-1 truncate text-sm text-[var(--app-text)]`,children:String(t)})]},e))}),(0,y.jsx)(`pre`,{className:`max-h-64 overflow-auto whitespace-pre-wrap rounded-md bg-[var(--app-panel-elevated)] p-3 font-mono text-xs text-[var(--app-text)]`,children:JSON.stringify(k,null,2)})]}),(0,y.jsx)(g,{title:`Delivery Activity`,compact:!0,description:`Rules and log entries stay grouped as one operational block.`}),b.length>0&&(0,y.jsxs)(m,{children:[(0,y.jsx)(p,{children:(0,y.jsxs)(f,{className:`flex items-center gap-2`,children:[(0,y.jsx)(n,{size:14}),` Delivery Rules (`,b.length,`)`]})}),(0,y.jsx)(`div`,{className:`space-y-2`,children:b.map(e=>(0,y.jsxs)(`div`,{className:`rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)]/50 p-2`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,y.jsx)(d,{variant:`outline`,children:e.eventType}),e.enabled?(0,y.jsx)(d,{variant:`success`,children:`active`}):(0,y.jsx)(d,{variant:`secondary`,children:`disabled`}),(0,y.jsxs)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:[`max `,e.maxPerMinute,`/min`]})]}),(0,y.jsxs)(`p`,{className:`mt-1 text-xs text-[var(--app-text-muted)] font-mono`,children:[`Rule: `,e.id]})]},e.id))})]}),C.length>0&&(0,y.jsxs)(m,{children:[(0,y.jsx)(p,{children:(0,y.jsxs)(f,{className:`flex items-center gap-2`,children:[(0,y.jsx)(r,{size:14}),` Delivery Log (`,C.length,`)`]})}),(0,y.jsx)(`div`,{className:`space-y-2`,children:C.slice(0,10).map(e=>(0,y.jsxs)(`div`,{className:`flex items-center justify-between rounded-md border border-[var(--app-border)] p-2`,children:[(0,y.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-baseline gap-2`,children:[(0,y.jsx)(`span`,{className:`text-sm text-[var(--app-text)] font-mono`,children:e.taskId.slice(0,8)}),(0,y.jsx)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:_(e.createdAt)})]}),(0,y.jsx)(d,{variant:e.status===`delivered`?`default`:e.status===`failed`?`destructive`:`outline`,children:e.status})]},e.id))})]})]})}function x({icon:e,label:t,value:n,mono:r}){return(0,y.jsxs)(m,{className:`flex flex-col gap-1`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[var(--app-text-subtle)]`,children:[(0,y.jsx)(e,{size:12}),(0,y.jsx)(`span`,{className:`text-xs`,children:t})]}),(0,y.jsx)(`span`,{className:`text-sm text-[var(--app-text)] truncate ${r?`font-mono text-xs`:``}`,children:n})]})}export{b as ChannelDetail};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{C as t,
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{C as t,E as n,O as r,S as i,b as a,ct as o,n as s,s as c,w as l}from"./vendor-icons-Dk0hMuJz.js";import{t as u}from"./vendor-react-C6faO6LO.js";import{n as d}from"./dist-Bdqp1ixJ.js";import{t as f}from"./Button-DuQctNms.js";import{t as p}from"./index-DYsO5Awn.js";import{i as m,r as h,t as g}from"./Card-rKfViPS2.js";import{t as _}from"./PageHeader-CHSgtxPw.js";import{t as v}from"./SectionHeader-C2WpiwJ5.js";import{t as y}from"./EmptyState-CIdIlMbn.js";import{t as b}from"./ui-B_uMx2Fy.js";var x=e(o(),1),S=u(),C=[`telegram`,`slack`,`discord`,`openclaw`,`wechat`,`whatsapp`],w={telegram:`{
|
|
2
2
|
"botToken": ""
|
|
3
3
|
}`,slack:`{
|
|
4
4
|
"botToken": "",
|
|
@@ -9,4 +9,4 @@ import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{C as t,D as n,S as r,T
|
|
|
9
9
|
"gatewayUrl": "ws://127.0.0.1:18789"
|
|
10
10
|
}`,wechat:`{
|
|
11
11
|
"baseUrl": "https://ilinkai.weixin.qq.com"
|
|
12
|
-
}`,whatsapp:`{}`},T=e=>{switch(e){case`connected`:return`success`;case`connecting`:return`warning`;case`degraded`:return`warning`;case`error`:return`destructive`;default:return`secondary`}};function E({initial:e,onSubmit:t,onCancel:n}){let[r,i]=(0,x.useState)(e?.name??``),[a,o]=(0,x.useState)(e?.platform??`telegram`),[c,l]=(0,x.useState)(e?.config?JSON.stringify(e.config,null,2):w[e?.platform??`telegram`]??`{}`),[u,d]=(0,x.useState)(e?.enabled??!0),[p,h]=(0,x.useState)(``);function _(e){if(e.preventDefault(),!r.trim()){h(`Name is required`);return}let n;try{n=JSON.parse(c)}catch{h(`Invalid JSON in config`);return}h(``),t({name:r.trim(),platform:a,config:n,enabled:u})}return(0,S.jsx)(g,{children:(0,S.jsxs)(`form`,{onSubmit:_,className:`space-y-3`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsx)(m,{className:`text-[var(--app-text)]`,children:e?`Edit Channel`:`New Channel`}),(0,S.jsx)(f,{variant:`ghost`,size:`icon`,type:`button`,onClick:n,children:(0,S.jsx)(s,{size:14})})]}),p&&(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-danger)]`,children:p}),(0,S.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Name`}),(0,S.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`My Telegram Bot`,className:`rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`})]}),(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Platform`}),(0,S.jsx)(`select`,{value:a,onChange:t=>{o(t.target.value),e||l(w[t.target.value]??`{}`)},className:`rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 text-sm text-[var(--app-text)] focus:border-[var(--app-accent)] focus:outline-none`,children:C.map(e=>(0,S.jsx)(`option`,{value:e,children:e},e))})]})]}),(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Config (JSON)`}),(0,S.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),rows:4,className:`resize-none rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 font-mono text-xs text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(`input`,{type:`checkbox`,id:`ch-enabled`,checked:u,onChange:e=>d(e.target.checked),className:`rounded border-[var(--app-border)] bg-[var(--app-panel-elevated)]`}),(0,S.jsx)(`label`,{htmlFor:`ch-enabled`,className:`text-xs text-[var(--app-text-muted)]`,children:`Enabled`})]}),!e&&a===`wechat`&&(0,S.jsx)(`div`,{className:`rounded bg-[var(--app-accent-soft-bg)] border border-[var(--app-accent-soft-border)] px-3 py-2 text-xs text-[var(--app-accent)]`,children:`Creating a WeChat channel will start a QR code scan. Have your WeChat app ready.`}),(0,S.jsxs)(`div`,{className:`flex gap-2`,children:[(0,S.jsx)(f,{type:`submit`,size:`sm`,children:e?`Save`:a===`wechat`&&!e?`Create & Connect`:`Create`}),(0,S.jsx)(f,{type:`button`,variant:`ghost`,size:`sm`,onClick:n,children:`Cancel`})]})]})})}function D({channelId:e,onClose:t}){let[n,r]=(0,x.useState)([]),[i,a]=(0,x.useState)(!0);return(0,x.useEffect)(()=>{(async()=>{try{r((await d(`/channels/${e}/messages`)).messages)}catch{}a(!1)})()},[e]),(0,S.jsxs)(g,{children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,S.jsx)(m,{children:`Channel Messages`}),(0,S.jsx)(f,{variant:`ghost`,size:`icon`,onClick:t,children:(0,S.jsx)(s,{size:14})})]}),i?(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`Loading...`}):n.length===0?(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`No messages yet`}):(0,S.jsx)(`div`,{className:`max-h-64 overflow-y-auto space-y-2`,children:n.map(e=>(0,S.jsxs)(`div`,{className:`rounded bg-[var(--app-panel-elevated)]/50 px-3 py-2 text-xs`,children:[(0,S.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,S.jsx)(`span`,{className:e.role===`user`?`text-[var(--app-accent)]`:`text-[var(--app-success)]`,children:e.role}),(0,S.jsx)(`span`,{className:`text-[var(--app-text-subtle)]`,children:new Date(e.createdAt).toLocaleTimeString()})]}),(0,S.jsx)(`div`,{className:`mt-1 text-[var(--app-text)]`,children:e.content})]},e.id))})]})}function O(){let[e,o]=(0,x.useState)([]),[s,u]=(0,x.useState)(!0),[C,w]=(0,x.useState)(!1),[O,k]=(0,x.useState)(null),[A,j]=(0,x.useState)(null),[M,N]=(0,x.useState)(null),[P,F]=(0,x.useState)(!1);(0,x.useEffect)(()=>{I()},[]);async function I(){try{o((await d(`/channels`)).channels)}catch{}u(!1)}async function L(e){try{let t=await d(`/channels`,{method:`POST`,body:JSON.stringify(e)});w(!1),I(),e.platform===`wechat`&&t.channel?.id&&z(t.channel.id)}catch{}}async function R(e){if(O)try{await d(`/channels/${O.id}`,{method:`PATCH`,body:JSON.stringify(e)}),k(null),I()}catch{}}async function z(t){if(e.find(e=>e.id===t)?.platform===`wechat`)try{let e=await d(`/channels/${t}/wechat/qr-start`,{method:`POST`});if(e.qrcodeUrl&&e.sessionKey){N({channelId:t,qrcodeUrl:e.qrcodeUrl,sessionKey:e.sessionKey}),F(!0);try{(await d(`/channels/${t}/wechat/qr-wait`,{method:`POST`,body:JSON.stringify({sessionKey:e.sessionKey,timeoutMs:12e4})})).connected&&I()}catch{}N(null),F(!1)}}catch{}else try{await d(`/channels/${t}/connect`,{method:`POST`}),I()}catch{}}async function B(e){try{await d(`/channels/${e}/disconnect`,{method:`POST`}),I()}catch{}}async function V(e){try{await d(`/channels/${e}`,{method:`DELETE`}),o(t=>t.filter(t=>t.id!==e))}catch{}}return s?(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,S.jsx)(`div`,{className:`h-8 w-8 animate-spin rounded-full border-2 border-[var(--app-border)] border-t-[var(--app-accent)]`})}):(0,S.jsxs)(`div`,{className:`space-y-6`,children:[(0,S.jsx)(_,{eyebrow:`Delivery`,title:`Channels`,description:`Connection status, volume, and edit access for every delivery endpoint.`,metrics:[{label:`Connected`,value:e.filter(e=>e.status===`connected`).length},{label:`Enabled`,value:e.filter(e=>e.enabled).length},{label:`Messages`,value:e.reduce((e,t)=>e+t.messageCount,0)}],compact:!0,actions:(0,S.jsxs)(f,{size:`sm`,onClick:()=>{w(!0),k(null)},children:[(0,S.jsx)(
|
|
12
|
+
}`,whatsapp:`{}`},T=e=>{switch(e){case`connected`:return`success`;case`connecting`:return`warning`;case`degraded`:return`warning`;case`error`:return`destructive`;default:return`secondary`}};function E({initial:e,onSubmit:t,onCancel:n}){let[r,i]=(0,x.useState)(e?.name??``),[a,o]=(0,x.useState)(e?.platform??`telegram`),[c,l]=(0,x.useState)(e?.config?JSON.stringify(e.config,null,2):w[e?.platform??`telegram`]??`{}`),[u,d]=(0,x.useState)(e?.enabled??!0),[p,h]=(0,x.useState)(``);function _(e){if(e.preventDefault(),!r.trim()){h(`Name is required`);return}let n;try{n=JSON.parse(c)}catch{h(`Invalid JSON in config`);return}h(``),t({name:r.trim(),platform:a,config:n,enabled:u})}return(0,S.jsx)(g,{children:(0,S.jsxs)(`form`,{onSubmit:_,className:`space-y-3`,children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,S.jsx)(m,{className:`text-[var(--app-text)]`,children:e?`Edit Channel`:`New Channel`}),(0,S.jsx)(f,{variant:`ghost`,size:`icon`,type:`button`,onClick:n,children:(0,S.jsx)(s,{size:14})})]}),p&&(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-danger)]`,children:p}),(0,S.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Name`}),(0,S.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`My Telegram Bot`,className:`rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`})]}),(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Platform`}),(0,S.jsx)(`select`,{value:a,onChange:t=>{o(t.target.value),e||l(w[t.target.value]??`{}`)},className:`rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 text-sm text-[var(--app-text)] focus:border-[var(--app-accent)] focus:outline-none`,children:C.map(e=>(0,S.jsx)(`option`,{value:e,children:e},e))})]})]}),(0,S.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,S.jsx)(`label`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Config (JSON)`}),(0,S.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),rows:4,className:`resize-none rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1.5 font-mono text-xs text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`})]}),(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(`input`,{type:`checkbox`,id:`ch-enabled`,checked:u,onChange:e=>d(e.target.checked),className:`rounded border-[var(--app-border)] bg-[var(--app-panel-elevated)]`}),(0,S.jsx)(`label`,{htmlFor:`ch-enabled`,className:`text-xs text-[var(--app-text-muted)]`,children:`Enabled`})]}),!e&&a===`wechat`&&(0,S.jsx)(`div`,{className:`rounded bg-[var(--app-accent-soft-bg)] border border-[var(--app-accent-soft-border)] px-3 py-2 text-xs text-[var(--app-accent)]`,children:`Creating a WeChat channel will start a QR code scan. Have your WeChat app ready.`}),(0,S.jsxs)(`div`,{className:`flex gap-2`,children:[(0,S.jsx)(f,{type:`submit`,size:`sm`,children:e?`Save`:a===`wechat`&&!e?`Create & Connect`:`Create`}),(0,S.jsx)(f,{type:`button`,variant:`ghost`,size:`sm`,onClick:n,children:`Cancel`})]})]})})}function D({channelId:e,onClose:t}){let[n,r]=(0,x.useState)([]),[i,a]=(0,x.useState)(!0);return(0,x.useEffect)(()=>{(async()=>{try{r((await d(`/channels/${e}/messages`)).messages)}catch{}a(!1)})()},[e]),(0,S.jsxs)(g,{children:[(0,S.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,S.jsx)(m,{children:`Channel Messages`}),(0,S.jsx)(f,{variant:`ghost`,size:`icon`,onClick:t,children:(0,S.jsx)(s,{size:14})})]}),i?(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`Loading...`}):n.length===0?(0,S.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`No messages yet`}):(0,S.jsx)(`div`,{className:`max-h-64 overflow-y-auto space-y-2`,children:n.map(e=>(0,S.jsxs)(`div`,{className:`rounded bg-[var(--app-panel-elevated)]/50 px-3 py-2 text-xs`,children:[(0,S.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,S.jsx)(`span`,{className:e.role===`user`?`text-[var(--app-accent)]`:`text-[var(--app-success)]`,children:e.role}),(0,S.jsx)(`span`,{className:`text-[var(--app-text-subtle)]`,children:new Date(e.createdAt).toLocaleTimeString()})]}),(0,S.jsx)(`div`,{className:`mt-1 text-[var(--app-text)]`,children:e.content})]},e.id))})]})}function O(){let[e,o]=(0,x.useState)([]),[s,u]=(0,x.useState)(!0),[C,w]=(0,x.useState)(!1),[O,k]=(0,x.useState)(null),[A,j]=(0,x.useState)(null),[M,N]=(0,x.useState)(null),[P,F]=(0,x.useState)(!1);(0,x.useEffect)(()=>{I()},[]);async function I(){try{o((await d(`/channels`)).channels)}catch{}u(!1)}async function L(e){try{let t=await d(`/channels`,{method:`POST`,body:JSON.stringify(e)});w(!1),I(),e.platform===`wechat`&&t.channel?.id&&z(t.channel.id)}catch{}}async function R(e){if(O)try{await d(`/channels/${O.id}`,{method:`PATCH`,body:JSON.stringify(e)}),k(null),I()}catch{}}async function z(t){if(e.find(e=>e.id===t)?.platform===`wechat`)try{let e=await d(`/channels/${t}/wechat/qr-start`,{method:`POST`});if(e.qrcodeUrl&&e.sessionKey){N({channelId:t,qrcodeUrl:e.qrcodeUrl,sessionKey:e.sessionKey}),F(!0);try{(await d(`/channels/${t}/wechat/qr-wait`,{method:`POST`,body:JSON.stringify({sessionKey:e.sessionKey,timeoutMs:12e4})})).connected&&I()}catch{}N(null),F(!1)}}catch{}else try{await d(`/channels/${t}/connect`,{method:`POST`}),I()}catch{}}async function B(e){try{await d(`/channels/${e}/disconnect`,{method:`POST`}),I()}catch{}}async function V(e){try{await d(`/channels/${e}`,{method:`DELETE`}),o(t=>t.filter(t=>t.id!==e))}catch{}}return s?(0,S.jsx)(`div`,{className:`flex h-full items-center justify-center`,children:(0,S.jsx)(`div`,{className:`h-8 w-8 animate-spin rounded-full border-2 border-[var(--app-border)] border-t-[var(--app-accent)]`})}):(0,S.jsxs)(`div`,{className:`space-y-6`,children:[(0,S.jsx)(_,{eyebrow:`Delivery`,title:`Channels`,description:`Connection status, volume, and edit access for every delivery endpoint.`,metrics:[{label:`Connected`,value:e.filter(e=>e.status===`connected`).length},{label:`Enabled`,value:e.filter(e=>e.enabled).length},{label:`Messages`,value:e.reduce((e,t)=>e+t.messageCount,0)}],compact:!0,actions:(0,S.jsxs)(f,{size:`sm`,onClick:()=>{w(!0),k(null)},children:[(0,S.jsx)(i,{size:14}),`Add Channel`]})}),(0,S.jsx)(v,{title:`Endpoints`,description:`Connect, disconnect, edit, inspect messages, or add a new endpoint.`,compact:!0,action:(0,S.jsxs)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:[e.length,` channel`,e.length===1?``:`s`]})}),C&&!O&&(0,S.jsx)(E,{onSubmit:L,onCancel:()=>w(!1)}),O&&(0,S.jsx)(E,{initial:O,onSubmit:R,onCancel:()=>k(null)}),A&&(0,S.jsx)(D,{channelId:A,onClose:()=>j(null)}),M&&(0,S.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/60`,children:(0,S.jsxs)(g,{className:`max-w-sm text-center`,children:[(0,S.jsx)(m,{className:`mb-3 text-[var(--app-text)]`,children:`Scan QR Code with WeChat`}),(0,S.jsx)(`img`,{src:`https://api.qrserver.com/v1/create-qr-code/?size=256x256&data=${encodeURIComponent(M.qrcodeUrl)}`,alt:`WeChat QR Code`,className:`mx-auto h-64 w-64 rounded bg-white p-2`}),(0,S.jsx)(`p`,{className:`mt-3 text-xs text-[var(--app-text-muted)]`,children:P?`Waiting for scan...`:`Open WeChat and scan the QR code`}),(0,S.jsx)(`a`,{href:M.qrcodeUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 block text-[10px] text-[var(--app-accent)] hover:text-[var(--app-accent)] truncate max-w-[280px] mx-auto`,children:M.qrcodeUrl}),(0,S.jsx)(f,{variant:`ghost`,size:`sm`,className:`mt-3`,onClick:()=>{N(null),F(!1)},children:`Cancel`})]})}),e.length===0&&!C?(0,S.jsx)(g,{children:(0,S.jsx)(y,{icon:(0,S.jsx)(a,{size:b.hero}),title:`No channels`,description:`Add a channel to connect Adam to messaging platforms like Telegram, Slack, or Discord.`})}):(0,S.jsx)(`div`,{className:`grid gap-4 md:grid-cols-2 lg:grid-cols-3`,children:e.map(e=>(0,S.jsxs)(g,{children:[(0,S.jsxs)(h,{children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,S.jsx)(a,{size:16,className:`text-[var(--app-text-muted)]`}),(0,S.jsx)(m,{className:`text-[var(--app-text)]`,children:e.name})]}),(0,S.jsx)(p,{variant:T(e.status),children:e.status})]}),(0,S.jsxs)(`div`,{className:`space-y-2 text-xs text-[var(--app-text-muted)]`,children:[(0,S.jsxs)(`div`,{className:`flex justify-between`,children:[(0,S.jsx)(`span`,{children:`Platform`}),(0,S.jsx)(`span`,{className:`text-[var(--app-text)]`,children:e.platform})]}),(0,S.jsxs)(`div`,{className:`flex justify-between`,children:[(0,S.jsx)(`span`,{children:`Messages`}),(0,S.jsx)(`span`,{className:`text-[var(--app-text)]`,children:e.messageCount})]}),(0,S.jsxs)(`div`,{className:`flex justify-between`,children:[(0,S.jsx)(`span`,{children:`Enabled`}),(0,S.jsx)(`span`,{className:e.enabled?`text-[var(--app-success)]`:`text-[var(--app-text-subtle)]`,children:e.enabled?`Yes`:`No`})]})]}),(0,S.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-2 border-t border-[var(--app-border)] pt-3`,children:[e.status===`connected`?(0,S.jsxs)(f,{variant:`secondary`,size:`sm`,onClick:()=>void B(e.id),children:[(0,S.jsx)(l,{size:12}),` Disconnect`]}):(0,S.jsxs)(f,{variant:`secondary`,size:`sm`,onClick:()=>void z(e.id),children:[(0,S.jsx)(t,{size:12}),` Connect`]}),(0,S.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>{k(e),w(!1)},children:(0,S.jsx)(n,{size:12})}),(0,S.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>j(e.id),children:(0,S.jsx)(r,{size:12})}),(0,S.jsx)(f,{variant:`ghost`,size:`sm`,onClick:()=>void V(e.id),children:(0,S.jsx)(c,{size:12})})]})]},e.id))})]})}export{O as Channels};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{O as t,_ as n,at as r,d as i,k as a,m as o,o as s,q as c,st as l,t as u,u as d,x as f}from"./vendor-icons-BlMaTTx3.js";import{t as p}from"./vendor-react-7e01TWy7.js";import{a as m,n as h}from"./dist-Bdqp1ixJ.js";import{t as g}from"./Button-BjXgrQ95.js";import{n as _}from"./vendor-state-Bj70wnRm.js";import{t as v}from"./PageHeader-BMvN0xiB.js";import{a as y}from"./format-CHfBBLog.js";import{t as b}from"./EmptyState-CXwJFCDQ.js";import{t as x}from"./ui-B_uMx2Fy.js";import{t as S}from"./useIsMobileLayout-Bwrm84kJ.js";var C=e(l(),1),w=_((e,t)=>({sessions:[],activeSessionId:null,messages:[],loading:!1,sending:!1,_chatWs:null,_chatWsReconnectDelay:1e3,fetchSessions:async()=>{try{e({sessions:(await h(`/chat/sessions`)).sessions})}catch{}},fetchMessages:async t=>{e({loading:!0});try{e({messages:(await h(`/chat/sessions/${t}`)).messages,loading:!1})}catch{e({messages:[],loading:!1})}},sendMessage:async n=>{if(t().sending)return null;e({sending:!0});try{let r=await h(`/chat/messages`,{method:`POST`,body:JSON.stringify({content:n,source:{type:`web`},sessionId:t().activeSessionId??void 0})});return e({activeSessionId:r.sessionId,sending:!1}),t().fetchSessions(),r}catch{return e({sending:!1}),null}},createSession:async()=>{try{let t=await h(`/chat/sessions`,{method:`POST`,body:JSON.stringify({source:{type:`web`}})});return e(e=>({sessions:[t.session,...e.sessions],activeSessionId:t.session.id,messages:[]})),t.session}catch{return null}},archiveSession:async t=>{try{await h(`/chat/sessions/${t}/archive`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`archived`}:e),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},restoreSession:async t=>{try{await h(`/chat/sessions/${t}/restore`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`active`}:e)}))}catch{}},deleteSession:async t=>{try{await h(`/chat/sessions/${t}`,{method:`DELETE`}),e(e=>({sessions:e.sessions.filter(e=>e.id!==t),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},setActiveSession:n=>{e({activeSessionId:n,messages:[]}),n&&t().fetchMessages(n)},connectChatStream:()=>{let n=t()._chatWs;if(n&&n.readyState<=1)return;let r=window.location.protocol===`https:`?`wss:`:`ws:`,i=localStorage.getItem(`adam_api_key`),a=new URL(`${r}//${window.location.host}/chat/stream`);i&&a.searchParams.set(`api_key`,i);let o=new WebSocket(a.toString());o.onopen=()=>{e({_chatWs:o,_chatWsReconnectDelay:1e3})},o.onclose=()=>{let n=t()._chatWsReconnectDelay;e({_chatWs:null,_chatWsReconnectDelay:Math.min(n*2,1e4)}),setTimeout(()=>{t().connectChatStream()},n)},o.onerror=()=>{o.close()},o.onmessage=n=>{try{let r=JSON.parse(n.data);if(r.type===`chat_message`&&r.message){let n=r.message,{activeSessionId:i,messages:a}=t();if(n.sessionId!==i||a.some(e=>e.id===n.id))return;e(e=>({messages:[...e.messages,n]}))}else r.type===`session_created`&&t().fetchSessions()}catch{}},e({_chatWs:o})},disconnectChatStream:()=>{let n=t()._chatWs;n&&(n.onclose=null,n.onerror=null,n.onmessage=null,n.close(),e({_chatWs:null}))}})),T=p();function E({message:e}){let t=e.role===`user`,n=t?`You`:e.taskId?`Adam · execution`:`Adam`;return(0,T.jsx)(`div`,{className:m(`flex`,t?`justify-end`:`justify-start`),children:(0,T.jsxs)(`div`,{className:m(`max-w-[85%] rounded-lg px-4 py-3 text-sm leading-7 shadow-[var(--app-shadow-md)]`,t?`surface-accent text-white`:`surface-panel text-[var(--app-text)]`),children:[(0,T.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-[11px] uppercase tracking-[0.16em]`,children:[(0,T.jsx)(`span`,{className:t?`text-white/70`:`text-[var(--app-kicker)]`,children:n}),(0,T.jsx)(`span`,{className:t?`text-white/45`:`text-[var(--app-text-subtle)]`,children:y(typeof e.createdAt==`number`?e.createdAt:new Date(e.createdAt).getTime())})]}),(0,T.jsx)(`div`,{className:`whitespace-pre-wrap break-words`,children:e.content})]})})}function D({onSend:e,disabled:t,placeholder:n=`Type a message...`,starterActions:r=[],showStarterActions:i=!0,compact:a=!1}){let[s,c]=(0,C.useState)(``),l=(0,C.useRef)(null),u=()=>{let n=s.trim();!n||t||(e(n),c(``),l.current&&(l.current.style.height=`auto`))},d=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),u())},f=()=>{let e=l.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)};return(0,T.jsxs)(`div`,{className:a?`rounded-xl border border-[var(--app-border)] bg-white/[0.03] p-3`:`surface-panel-elevated rounded-xl p-3`,children:[i&&r.length>0?(0,T.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-2`,children:r.map(e=>(0,T.jsx)(`button`,{type:`button`,onClick:()=>{c(e.value),requestAnimationFrame(()=>l.current?.focus())},className:`rounded-full border border-[var(--app-border)] bg-white/[0.04] px-3 py-1.5 text-xs font-medium text-[var(--app-text-muted)] transition-colors hover:border-[var(--app-border-strong)] hover:text-[var(--app-text)]`,children:e.label},e.label))}):null,(0,T.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,T.jsx)(`textarea`,{ref:l,value:s,onChange:e=>{c(e.target.value),f()},onKeyDown:d,placeholder:n,disabled:t,rows:1,className:`min-h-12 flex-1 resize-none rounded-lg border border-[var(--app-border)] bg-white/[0.04] px-4 py-3 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-border-strong)] focus:outline-none focus:ring-1 focus:ring-[var(--app-accent)] disabled:opacity-50`}),(0,T.jsxs)(g,{onClick:u,disabled:t||!s.trim(),size:`default`,"aria-label":`Send message`,children:[(0,T.jsx)(o,{size:16}),`Send`]})]}),(0,T.jsx)(`div`,{className:`mt-2 text-xs text-[var(--app-text-subtle)]`,children:`Enter to send; Shift+Enter for a new line.`})]})}function O({session:e,isActive:t,onSelect:i,onArchive:a,onRestore:o,onDelete:c}){let l=e.status===`archived`,u=(e,t)=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),t())};return(0,T.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:i,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),i())},className:m(`group flex w-full flex-col gap-1 rounded-lg border px-3 py-3 text-left transition-colors`,t?`border-[var(--app-border-strong)] bg-white/[0.08] text-[var(--app-text)]`:`border-transparent text-[var(--app-text-muted)] hover:border-[var(--app-border)] hover:bg-white/[0.04] hover:text-[var(--app-text)]`,l&&`opacity-60`),"aria-label":e.title??e.id.slice(0,8),children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,T.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.title??e.id.slice(0,8)}),(0,T.jsxs)(`div`,{className:m(`flex gap-0.5 transition-opacity`,t?`opacity-100`:`opacity-100 lg:opacity-0 lg:group-hover:opacity-100 lg:group-focus-within:opacity-100`),children:[l?(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-success)]`,onClick:e=>{e.stopPropagation(),o()},onKeyDown:e=>u(e,o),title:`Restore session`,"aria-label":`Restore session`,children:(0,T.jsx)(n,{size:x.xs})}):(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-warning)]`,onClick:e=>{e.stopPropagation(),a()},onKeyDown:e=>u(e,a),title:`Archive session`,"aria-label":`Archive session`,children:(0,T.jsx)(r,{size:x.xs})}),(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-danger)]`,onClick:e=>{e.stopPropagation(),c()},onKeyDown:e=>u(e,c),title:`Delete session`,"aria-label":`Delete session`,children:(0,T.jsx)(s,{size:x.xs})})]})]}),(0,T.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] text-[var(--app-text-subtle)]`,children:[(0,T.jsxs)(`span`,{children:[e.messageCount,` turns`]}),(0,T.jsx)(`span`,{children:y(e.lastActiveAt)}),l&&(0,T.jsx)(`span`,{className:`rounded-full border border-[var(--app-border)] bg-white/[0.04] px-1.5 py-0.5 text-[9px] uppercase tracking-[0.16em]`,children:`archived`})]})]})}function k({sessions:e,activeSessionId:t,onSelectSession:n,onNewSession:r,onArchiveSession:i,onRestoreSession:a,onDeleteSession:o,onClose:s}){let{recentSessions:c,earlierSessions:l,archivedSessions:u,activeSessions:d}=(0,C.useMemo)(()=>{let t=Date.now(),n=1440*60*1e3,r=e.filter(e=>e.status===`active`);return{recentSessions:r.filter(e=>t-e.lastActiveAt<n),earlierSessions:r.filter(e=>t-e.lastActiveAt>=n),archivedSessions:e.filter(e=>e.status===`archived`),activeSessions:r}},[e]);return(0,T.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between border-b border-[var(--app-border)] px-4 py-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`span`,{className:`text-section-label`,children:`Sessions`}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-[var(--app-text-subtle)]`,children:`Switch context or reopen archived work.`})]}),(0,T.jsxs)(g,{variant:`ghost`,size:`sm`,onClick:r,"aria-label":`New session`,children:[(0,T.jsx)(f,{size:14}),(0,T.jsx)(`span`,{className:`hidden sm:inline`,children:`New`})]})]}),(0,T.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-2 py-2`,children:[d.length===0&&u.length===0&&(0,T.jsx)(`div`,{className:`px-2 py-6 text-center text-xs text-[var(--app-text-subtle)]`,children:`No sessions yet`}),c.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Today`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:c.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),s?.()},onArchive:()=>i(e.id),onRestore:()=>a(e.id),onDelete:()=>o(e.id)},e.id))})]}),l.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 mt-4 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Earlier`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:l.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),s?.()},onArchive:()=>i(e.id),onRestore:()=>a(e.id),onDelete:()=>o(e.id)},e.id))})]}),u.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 mt-4 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Archived`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:u.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),s?.()},onArchive:()=>i(e.id),onRestore:()=>a(e.id),onDelete:()=>o(e.id)},e.id))})]})]})]})}var A=[{label:`Debug a failure`,value:`Review the most recent failed task and explain the next fix.`},{label:`Summarize status`,value:`Summarize the current system status, blockers, and active work.`},{label:`Plan a task`,value:`Break down the next implementation task into a concrete execution plan.`}];function j(){let e=w(e=>e.sessions),n=w(e=>e.activeSessionId),r=w(e=>e.messages),o=w(e=>e.sending),s=w(e=>e.fetchSessions),l=w(e=>e.sendMessage),p=w(e=>e.createSession),m=w(e=>e.archiveSession),h=w(e=>e.restoreSession),_=w(e=>e.deleteSession),y=w(e=>e.setActiveSession),O=w(e=>e.connectChatStream),j=w(e=>e.disconnectChatStream),N=(0,C.useRef)(null),[P,F]=(0,C.useState)(!1),I=S(1024),L=e.filter(e=>e.status===`active`),R=e.filter(e=>e.status===`archived`),z=e.length>0,B=r.length>0,V=e.find(e=>e.id===n)??null;(0,C.useEffect)(()=>{s()},[s]),(0,C.useEffect)(()=>(O(),()=>j()),[O,j]),(0,C.useEffect)(()=>{N.current?.scrollIntoView?.({behavior:`smooth`})},[r]),(0,C.useEffect)(()=>{I||F(!1)},[I]),(0,C.useEffect)(()=>{if(n||e.length===0)return;let t=[...e].filter(e=>e.status===`active`).sort((e,t)=>t.lastActiveAt-e.lastActiveAt)[0]??[...e].sort((e,t)=>t.lastActiveAt-e.lastActiveAt)[0];t&&y(t.id)},[n,e,y]);let H=async e=>{await l(e)};return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-5`,children:[(0,T.jsx)(v,{title:`Chat`,description:z?`Resume the latest session, inspect context, and keep the composer in view.`:`Start the first session and use Adam as the working surface for review, debugging, and planning.`,compact:!0,className:`px-4 py-3 lg:px-4 lg:py-3`,actions:(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,T.jsxs)(g,{variant:`secondary`,size:`sm`,onClick:()=>void p(),children:[(0,T.jsx)(f,{size:14}),`New Session`]}),(0,T.jsxs)(g,{variant:`secondary`,size:`sm`,className:`lg:hidden`,onClick:()=>F(!0),"aria-label":`Manage sessions`,children:[(0,T.jsx)(a,{size:16}),`Sessions`]})]})}),P?(0,T.jsxs)(`div`,{className:`fixed inset-0 z-40 lg:hidden`,role:`dialog`,"aria-modal":`true`,"aria-label":`Session manager`,children:[(0,T.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:()=>F(!1)}),(0,T.jsxs)(`div`,{className:`relative z-50 h-full w-full max-w-sm border-r border-[var(--app-border)] bg-[var(--app-canvas)] shadow-[var(--app-shadow-lg)]`,children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between border-b border-[var(--app-border)] px-4 py-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`p`,{className:`text-section-label`,children:`Sessions`}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-[var(--app-text-subtle)]`,children:`Switch, archive, restore, or start a new conversation.`})]}),(0,T.jsx)(g,{variant:`ghost`,size:`icon`,onClick:()=>F(!1),"aria-label":`Close session manager`,children:(0,T.jsx)(u,{size:16})})]}),(0,T.jsx)(k,{sessions:e,activeSessionId:n,onSelectSession:y,onNewSession:()=>{p(),F(!1)},onArchiveSession:e=>void m(e),onRestoreSession:e=>void h(e),onDeleteSession:e=>void _(e),onClose:()=>F(!1)})]})]}):null,(0,T.jsxs)(`div`,{className:`flex min-h-0 flex-1 overflow-hidden rounded-xl border border-[var(--app-border)] bg-[color-mix(in_oklch,var(--app-canvas)_88%,transparent)] shadow-[var(--app-shadow-lg)]`,children:[(0,T.jsx)(`div`,{className:`hidden w-72 flex-shrink-0 border-r border-[var(--app-border)] bg-[color-mix(in_oklch,var(--app-canvas)_90%,transparent)] lg:block`,children:(0,T.jsx)(k,{sessions:e,activeSessionId:n,onSelectSession:y,onNewSession:()=>void p(),onArchiveSession:e=>void m(e),onRestoreSession:e=>void h(e),onDeleteSession:e=>void _(e)})}),(0,T.jsxs)(`div`,{className:`flex flex-1 flex-col`,children:[(0,T.jsx)(`div`,{className:`flex-1 overflow-y-auto px-4 py-4 lg:px-6`,children:B?(0,T.jsxs)(`div`,{className:`mx-auto max-w-4xl space-y-3`,children:[r.map(e=>(0,T.jsx)(E,{message:e},e.id)),(0,T.jsx)(`div`,{ref:N})]}):z?(0,T.jsx)(`div`,{className:`mx-auto flex h-full w-full max-w-4xl items-start`,children:(0,T.jsxs)(`div`,{className:`surface-panel-muted flex w-full flex-col gap-4 rounded-xl p-5`,children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,T.jsxs)(`div`,{className:`space-y-1`,children:[(0,T.jsx)(`p`,{className:`text-kicker`,children:`Working Surface`}),(0,T.jsx)(`h2`,{className:`text-xl font-semibold text-[var(--app-text)]`,children:V?`Session ${V.title??V.id.slice(0,8)}`:`Pick a session to continue`}),(0,T.jsx)(`p`,{className:`max-w-2xl text-sm leading-6 text-[var(--app-text-muted)]`,children:V?`This session has no loaded transcript yet. Continue here or start a new thread without leaving the page.`:`Archived history exists, but no session is active. Select one from the rail or start a new conversation.`})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-[var(--app-text-subtle)]`,children:[(0,T.jsxs)(`span`,{children:[L.length,` active`]}),(0,T.jsxs)(`span`,{children:[R.length,` archived`]})]})]}),(0,T.jsx)(`div`,{className:`grid gap-3 md:grid-cols-3`,children:A.map(e=>(0,T.jsxs)(`button`,{type:`button`,onClick:()=>void H(e.value),className:`rounded-xl border border-[var(--app-border)] bg-white/[0.03] p-4 text-left transition-colors hover:border-[var(--app-border-strong)] hover:bg-white/[0.05]`,children:[(0,T.jsx)(`div`,{className:`text-sm font-semibold text-[var(--app-text)]`,children:e.label}),(0,T.jsx)(`div`,{className:`mt-1 text-sm leading-6 text-[var(--app-text-muted)]`,children:e.value})]},e.label))})]})}):(0,T.jsx)(b,{icon:(0,T.jsx)(t,{size:x.hero}),title:`Start a conversation with Adam`,description:`Use the starter prompts below to inspect recent work, diagnose failures, or create an execution plan.`,className:`h-full min-h-[24rem]`,action:(0,T.jsxs)(`div`,{className:`grid gap-3 text-left sm:grid-cols-3`,children:[(0,T.jsx)(M,{icon:i,title:`Inspect live status`,description:`Summarize active work, risk, and recent changes.`}),(0,T.jsx)(M,{icon:d,title:`Dig into a task`,description:`Review recent execution output and the next concrete step.`}),(0,T.jsx)(M,{icon:c,title:`Recover context`,description:`Continue from the latest session without losing history.`})]})})}),(0,T.jsx)(`div`,{className:`mx-auto w-full max-w-4xl px-4 pb-4 lg:px-6`,children:(0,T.jsx)(D,{onSend:H,disabled:o,starterActions:A,showStarterActions:!z&&!B,compact:z})})]})]})]})}function M({icon:e,title:t,description:n}){return(0,T.jsxs)(`div`,{className:`surface-panel-muted rounded-lg p-4`,children:[(0,T.jsx)(`div`,{className:`mb-3 flex h-10 w-10 items-center justify-center rounded-lg bg-white/[0.05] text-[var(--app-kicker)]`,children:(0,T.jsx)(e,{size:x.lg})}),(0,T.jsx)(`div`,{className:`text-sm font-semibold text-[var(--app-text)]`,children:t}),(0,T.jsx)(`div`,{className:`mt-1 text-sm leading-6 text-[var(--app-text-muted)]`,children:n})]})}export{j as Chat};
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{A as t,J as n,S as r,ct as i,d as a,f as o,h as s,k as c,n as l,ot as u,s as d,v as f}from"./vendor-icons-Dk0hMuJz.js";import{t as p}from"./vendor-react-C6faO6LO.js";import{a as m,n as h}from"./dist-Bdqp1ixJ.js";import{t as g}from"./Button-DuQctNms.js";import{n as _}from"./vendor-state-DahK0J-G.js";import{t as v}from"./PageHeader-CHSgtxPw.js";import{a as y}from"./format-CHfBBLog.js";import{t as b}from"./EmptyState-CIdIlMbn.js";import{t as x}from"./ui-B_uMx2Fy.js";import{t as S}from"./useIsMobileLayout-C6KIQjuh.js";var C=e(i(),1),w=_((e,t)=>({sessions:[],activeSessionId:null,messages:[],loading:!1,sending:!1,_chatWs:null,_chatWsReconnectDelay:1e3,fetchSessions:async()=>{try{e({sessions:(await h(`/chat/sessions`)).sessions})}catch{}},fetchMessages:async t=>{e({loading:!0});try{e({messages:(await h(`/chat/sessions/${t}`)).messages,loading:!1})}catch{e({messages:[],loading:!1})}},sendMessage:async n=>{if(t().sending)return null;e({sending:!0});try{let r=await h(`/chat/messages`,{method:`POST`,body:JSON.stringify({content:n,source:{type:`web`},sessionId:t().activeSessionId??void 0})});return e({activeSessionId:r.sessionId,sending:!1}),t().fetchSessions(),r}catch{return e({sending:!1}),null}},createSession:async()=>{try{let t=await h(`/chat/sessions`,{method:`POST`,body:JSON.stringify({source:{type:`web`}})});return e(e=>({sessions:[t.session,...e.sessions],activeSessionId:t.session.id,messages:[]})),t.session}catch{return null}},archiveSession:async t=>{try{await h(`/chat/sessions/${t}/archive`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`archived`}:e),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},restoreSession:async t=>{try{await h(`/chat/sessions/${t}/restore`,{method:`POST`}),e(e=>({sessions:e.sessions.map(e=>e.id===t?{...e,status:`active`}:e)}))}catch{}},deleteSession:async t=>{try{await h(`/chat/sessions/${t}`,{method:`DELETE`}),e(e=>({sessions:e.sessions.filter(e=>e.id!==t),activeSessionId:e.activeSessionId===t?null:e.activeSessionId,messages:e.activeSessionId===t?[]:e.messages}))}catch{}},setActiveSession:n=>{e({activeSessionId:n,messages:[]}),n&&t().fetchMessages(n)},connectChatStream:()=>{let n=t()._chatWs;if(n&&n.readyState<=1)return;let r=window.location.protocol===`https:`?`wss:`:`ws:`,i=localStorage.getItem(`adam_api_key`),a=new URL(`${r}//${window.location.host}/chat/stream`);i&&a.searchParams.set(`api_key`,i);let o=new WebSocket(a.toString());o.onopen=()=>{e({_chatWs:o,_chatWsReconnectDelay:1e3})},o.onclose=()=>{let n=t()._chatWsReconnectDelay;e({_chatWs:null,_chatWsReconnectDelay:Math.min(n*2,1e4)}),setTimeout(()=>{t().connectChatStream()},n)},o.onerror=()=>{o.close()},o.onmessage=n=>{try{let r=JSON.parse(n.data);if(r.type===`chat_message`&&r.message){let n=r.message,{activeSessionId:i,messages:a}=t();if(n.sessionId!==i||a.some(e=>e.id===n.id))return;e(e=>({messages:[...e.messages,n]}))}else r.type===`session_created`&&t().fetchSessions()}catch{}},e({_chatWs:o})},disconnectChatStream:()=>{let n=t()._chatWs;n&&(n.onclose=null,n.onerror=null,n.onmessage=null,n.close(),e({_chatWs:null}))}})),T=p();function E({message:e}){let t=e.role===`user`,n=t?`You`:e.taskId?`Adam · execution`:`Adam`;return(0,T.jsx)(`div`,{className:m(`flex`,t?`justify-end`:`justify-start`),children:(0,T.jsxs)(`div`,{className:m(`max-w-[85%] rounded-lg px-4 py-3 text-sm leading-7 shadow-[var(--app-shadow-md)]`,t?`surface-accent text-white`:`surface-panel text-[var(--app-text)]`),children:[(0,T.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 text-[11px] uppercase tracking-[0.16em]`,children:[(0,T.jsx)(`span`,{className:t?`text-white/70`:`text-[var(--app-kicker)]`,children:n}),(0,T.jsx)(`span`,{className:t?`text-white/45`:`text-[var(--app-text-subtle)]`,children:y(typeof e.createdAt==`number`?e.createdAt:new Date(e.createdAt).getTime())})]}),(0,T.jsx)(`div`,{className:`whitespace-pre-wrap break-words`,children:e.content})]})})}function D({onSend:e,disabled:t,placeholder:n=`Type a message...`,starterActions:r=[],showStarterActions:i=!0,compact:a=!1}){let[o,c]=(0,C.useState)(``),l=(0,C.useRef)(null),u=()=>{let n=o.trim();!n||t||(e(n),c(``),l.current&&(l.current.style.height=`auto`))},d=e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),u())},f=()=>{let e=l.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)};return(0,T.jsxs)(`div`,{className:a?`rounded-xl border border-[var(--app-border)] bg-white/[0.03] p-3`:`surface-panel-elevated rounded-xl p-3`,children:[i&&r.length>0?(0,T.jsx)(`div`,{className:`mb-3 flex flex-wrap gap-2`,children:r.map(e=>(0,T.jsx)(`button`,{type:`button`,onClick:()=>{c(e.value),requestAnimationFrame(()=>l.current?.focus())},className:`rounded-full border border-[var(--app-border)] bg-white/[0.04] px-3 py-1.5 text-xs font-medium text-[var(--app-text-muted)] transition-colors hover:border-[var(--app-border-strong)] hover:text-[var(--app-text)]`,children:e.label},e.label))}):null,(0,T.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,T.jsx)(`textarea`,{ref:l,value:o,onChange:e=>{c(e.target.value),f()},onKeyDown:d,placeholder:n,disabled:t,rows:1,className:`min-h-12 flex-1 resize-none rounded-lg border border-[var(--app-border)] bg-white/[0.04] px-4 py-3 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-border-strong)] focus:outline-none focus:ring-1 focus:ring-[var(--app-accent)] disabled:opacity-50`}),(0,T.jsxs)(g,{onClick:u,disabled:t||!o.trim(),size:`default`,"aria-label":`Send message`,children:[(0,T.jsx)(s,{size:16}),`Send`]})]}),(0,T.jsx)(`div`,{className:`mt-2 text-xs text-[var(--app-text-subtle)]`,children:`Enter to send; Shift+Enter for a new line.`})]})}function O({session:e,isActive:t,onSelect:n,onArchive:r,onRestore:i,onDelete:a}){let o=e.status===`archived`,s=(e,t)=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),t())};return(0,T.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:n,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())},className:m(`group flex w-full flex-col gap-1 rounded-lg border px-3 py-3 text-left transition-colors`,t?`border-[var(--app-border-strong)] bg-white/[0.08] text-[var(--app-text)]`:`border-transparent text-[var(--app-text-muted)] hover:border-[var(--app-border)] hover:bg-white/[0.04] hover:text-[var(--app-text)]`,o&&`opacity-60`),"aria-label":e.title??e.id.slice(0,8),children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,T.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.title??e.id.slice(0,8)}),(0,T.jsxs)(`div`,{className:m(`flex gap-0.5 transition-opacity`,t?`opacity-100`:`opacity-100 lg:opacity-0 lg:group-hover:opacity-100 lg:group-focus-within:opacity-100`),children:[o?(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-success)]`,onClick:e=>{e.stopPropagation(),i()},onKeyDown:e=>s(e,i),title:`Restore session`,"aria-label":`Restore session`,children:(0,T.jsx)(f,{size:x.xs})}):(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-warning)]`,onClick:e=>{e.stopPropagation(),r()},onKeyDown:e=>s(e,r),title:`Archive session`,"aria-label":`Archive session`,children:(0,T.jsx)(u,{size:x.xs})}),(0,T.jsx)(g,{variant:`ghost`,size:`icon`,className:`h-6 w-6 text-[var(--app-text-subtle)] hover:text-[var(--app-danger)]`,onClick:e=>{e.stopPropagation(),a()},onKeyDown:e=>s(e,a),title:`Delete session`,"aria-label":`Delete session`,children:(0,T.jsx)(d,{size:x.xs})})]})]}),(0,T.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] text-[var(--app-text-subtle)]`,children:[(0,T.jsxs)(`span`,{children:[e.messageCount,` turns`]}),(0,T.jsx)(`span`,{children:y(e.lastActiveAt)}),o&&(0,T.jsx)(`span`,{className:`rounded-full border border-[var(--app-border)] bg-white/[0.04] px-1.5 py-0.5 text-[9px] uppercase tracking-[0.16em]`,children:`archived`})]})]})}function k({sessions:e,activeSessionId:t,onSelectSession:n,onNewSession:i,onArchiveSession:a,onRestoreSession:o,onDeleteSession:s,onClose:c}){let{recentSessions:l,earlierSessions:u,archivedSessions:d,activeSessions:f}=(0,C.useMemo)(()=>{let t=Date.now(),n=1440*60*1e3,r=e.filter(e=>e.status===`active`);return{recentSessions:r.filter(e=>t-e.lastActiveAt<n),earlierSessions:r.filter(e=>t-e.lastActiveAt>=n),archivedSessions:e.filter(e=>e.status===`archived`),activeSessions:r}},[e]);return(0,T.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between border-b border-[var(--app-border)] px-4 py-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`span`,{className:`text-section-label`,children:`Sessions`}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-[var(--app-text-subtle)]`,children:`Switch context or reopen archived work.`})]}),(0,T.jsxs)(g,{variant:`ghost`,size:`sm`,onClick:i,"aria-label":`New session`,children:[(0,T.jsx)(r,{size:14}),(0,T.jsx)(`span`,{className:`hidden sm:inline`,children:`New`})]})]}),(0,T.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-2 py-2`,children:[f.length===0&&d.length===0&&(0,T.jsx)(`div`,{className:`px-2 py-6 text-center text-xs text-[var(--app-text-subtle)]`,children:`No sessions yet`}),l.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Today`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:l.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),c?.()},onArchive:()=>a(e.id),onRestore:()=>o(e.id),onDelete:()=>s(e.id)},e.id))})]}),u.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 mt-4 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Earlier`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:u.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),c?.()},onArchive:()=>a(e.id),onRestore:()=>o(e.id),onDelete:()=>s(e.id)},e.id))})]}),d.length>0&&(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`div`,{className:`mb-2 mt-4 px-2 text-[10px] font-semibold uppercase tracking-[0.18em] text-[var(--app-text-subtle)]`,children:`Archived`}),(0,T.jsx)(`div`,{className:`space-y-1`,children:d.map(e=>(0,T.jsx)(O,{session:e,isActive:e.id===t,onSelect:()=>{n(e.id),c?.()},onArchive:()=>a(e.id),onRestore:()=>o(e.id),onDelete:()=>s(e.id)},e.id))})]})]})]})}var A=[{label:`Debug a failure`,value:`Review the most recent failed task and explain the next fix.`},{label:`Summarize status`,value:`Summarize the current system status, blockers, and active work.`},{label:`Plan a task`,value:`Break down the next implementation task into a concrete execution plan.`}];function j(){let e=w(e=>e.sessions),i=w(e=>e.activeSessionId),s=w(e=>e.messages),u=w(e=>e.sending),d=w(e=>e.fetchSessions),f=w(e=>e.sendMessage),p=w(e=>e.createSession),m=w(e=>e.archiveSession),h=w(e=>e.restoreSession),_=w(e=>e.deleteSession),y=w(e=>e.setActiveSession),O=w(e=>e.connectChatStream),j=w(e=>e.disconnectChatStream),N=(0,C.useRef)(null),[P,F]=(0,C.useState)(!1),I=S(1024),L=e.filter(e=>e.status===`active`),R=e.filter(e=>e.status===`archived`),z=e.length>0,B=s.length>0,V=e.find(e=>e.id===i)??null;(0,C.useEffect)(()=>{d()},[d]),(0,C.useEffect)(()=>(O(),()=>j()),[O,j]),(0,C.useEffect)(()=>{N.current?.scrollIntoView?.({behavior:`smooth`})},[s]),(0,C.useEffect)(()=>{I||F(!1)},[I]),(0,C.useEffect)(()=>{if(i||e.length===0)return;let t=[...e].filter(e=>e.status===`active`).sort((e,t)=>t.lastActiveAt-e.lastActiveAt)[0]??[...e].sort((e,t)=>t.lastActiveAt-e.lastActiveAt)[0];t&&y(t.id)},[i,e,y]);let H=async e=>{await f(e)};return(0,T.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col gap-5`,children:[(0,T.jsx)(v,{title:`Chat`,description:z?`Resume the latest session, inspect context, and keep the composer in view.`:`Start the first session and use Adam as the working surface for review, debugging, and planning.`,compact:!0,className:`px-4 py-3 lg:px-4 lg:py-3`,actions:(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,T.jsxs)(g,{variant:`secondary`,size:`sm`,onClick:()=>void p(),children:[(0,T.jsx)(r,{size:14}),`New Session`]}),(0,T.jsxs)(g,{variant:`secondary`,size:`sm`,className:`lg:hidden`,onClick:()=>F(!0),"aria-label":`Manage sessions`,children:[(0,T.jsx)(t,{size:16}),`Sessions`]})]})}),P?(0,T.jsxs)(`div`,{className:`fixed inset-0 z-40 lg:hidden`,role:`dialog`,"aria-modal":`true`,"aria-label":`Session manager`,children:[(0,T.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:()=>F(!1)}),(0,T.jsxs)(`div`,{className:`relative z-50 h-full w-full max-w-sm border-r border-[var(--app-border)] bg-[var(--app-canvas)] shadow-[var(--app-shadow-lg)]`,children:[(0,T.jsxs)(`div`,{className:`flex items-center justify-between border-b border-[var(--app-border)] px-4 py-3`,children:[(0,T.jsxs)(`div`,{children:[(0,T.jsx)(`p`,{className:`text-section-label`,children:`Sessions`}),(0,T.jsx)(`p`,{className:`mt-1 text-xs text-[var(--app-text-subtle)]`,children:`Switch, archive, restore, or start a new conversation.`})]}),(0,T.jsx)(g,{variant:`ghost`,size:`icon`,onClick:()=>F(!1),"aria-label":`Close session manager`,children:(0,T.jsx)(l,{size:16})})]}),(0,T.jsx)(k,{sessions:e,activeSessionId:i,onSelectSession:y,onNewSession:()=>{p(),F(!1)},onArchiveSession:e=>void m(e),onRestoreSession:e=>void h(e),onDeleteSession:e=>void _(e),onClose:()=>F(!1)})]})]}):null,(0,T.jsxs)(`div`,{className:`flex min-h-0 flex-1 overflow-hidden rounded-xl border border-[var(--app-border)] bg-[color-mix(in_oklch,var(--app-canvas)_88%,transparent)] shadow-[var(--app-shadow-lg)]`,children:[(0,T.jsx)(`div`,{className:`hidden w-72 flex-shrink-0 border-r border-[var(--app-border)] bg-[color-mix(in_oklch,var(--app-canvas)_90%,transparent)] lg:block`,children:(0,T.jsx)(k,{sessions:e,activeSessionId:i,onSelectSession:y,onNewSession:()=>void p(),onArchiveSession:e=>void m(e),onRestoreSession:e=>void h(e),onDeleteSession:e=>void _(e)})}),(0,T.jsxs)(`div`,{className:`flex flex-1 flex-col`,children:[(0,T.jsx)(`div`,{className:`flex-1 overflow-y-auto px-4 py-4 lg:px-6`,children:B?(0,T.jsxs)(`div`,{className:`mx-auto max-w-4xl space-y-3`,children:[s.map(e=>(0,T.jsx)(E,{message:e},e.id)),(0,T.jsx)(`div`,{ref:N})]}):z?(0,T.jsx)(`div`,{className:`mx-auto flex h-full w-full max-w-4xl items-start`,children:(0,T.jsxs)(`div`,{className:`surface-panel-muted flex w-full flex-col gap-4 rounded-xl p-5`,children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-3`,children:[(0,T.jsxs)(`div`,{className:`space-y-1`,children:[(0,T.jsx)(`p`,{className:`text-kicker`,children:`Working Surface`}),(0,T.jsx)(`h2`,{className:`text-xl font-semibold text-[var(--app-text)]`,children:V?`Session ${V.title??V.id.slice(0,8)}`:`Pick a session to continue`}),(0,T.jsx)(`p`,{className:`max-w-2xl text-sm leading-6 text-[var(--app-text-muted)]`,children:V?`This session has no loaded transcript yet. Continue here or start a new thread without leaving the page.`:`Archived history exists, but no session is active. Select one from the rail or start a new conversation.`})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-[var(--app-text-subtle)]`,children:[(0,T.jsxs)(`span`,{children:[L.length,` active`]}),(0,T.jsxs)(`span`,{children:[R.length,` archived`]})]})]}),(0,T.jsx)(`div`,{className:`grid gap-3 md:grid-cols-3`,children:A.map(e=>(0,T.jsxs)(`button`,{type:`button`,onClick:()=>void H(e.value),className:`rounded-xl border border-[var(--app-border)] bg-white/[0.03] p-4 text-left transition-colors hover:border-[var(--app-border-strong)] hover:bg-white/[0.05]`,children:[(0,T.jsx)(`div`,{className:`text-sm font-semibold text-[var(--app-text)]`,children:e.label}),(0,T.jsx)(`div`,{className:`mt-1 text-sm leading-6 text-[var(--app-text-muted)]`,children:e.value})]},e.label))})]})}):(0,T.jsx)(b,{icon:(0,T.jsx)(c,{size:x.hero}),title:`Start a conversation with Adam`,description:`Use the starter prompts below to inspect recent work, diagnose failures, or create an execution plan.`,className:`h-full min-h-[24rem]`,action:(0,T.jsxs)(`div`,{className:`grid gap-3 text-left sm:grid-cols-3`,children:[(0,T.jsx)(M,{icon:o,title:`Inspect live status`,description:`Summarize active work, risk, and recent changes.`}),(0,T.jsx)(M,{icon:a,title:`Dig into a task`,description:`Review recent execution output and the next concrete step.`}),(0,T.jsx)(M,{icon:n,title:`Recover context`,description:`Continue from the latest session without losing history.`})]})})}),(0,T.jsx)(`div`,{className:`mx-auto w-full max-w-4xl px-4 pb-4 lg:px-6`,children:(0,T.jsx)(D,{onSend:H,disabled:u,starterActions:A,showStarterActions:!z&&!B,compact:z})})]})]})]})}function M({icon:e,title:t,description:n}){return(0,T.jsxs)(`div`,{className:`surface-panel-muted rounded-lg p-4`,children:[(0,T.jsx)(`div`,{className:`mb-3 flex h-10 w-10 items-center justify-center rounded-lg bg-white/[0.05] text-[var(--app-kicker)]`,children:(0,T.jsx)(e,{size:x.lg})}),(0,T.jsx)(`div`,{className:`text-sm font-semibold text-[var(--app-text)]`,children:t}),(0,T.jsx)(`div`,{className:`mt-1 text-sm leading-6 text-[var(--app-text-muted)]`,children:n})]})}export{j as Chat};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{N as t,Q as n,Y as r,Z as i,ct as a,st as o}from"./vendor-icons-Dk0hMuJz.js";import{r as s,t as c}from"./vendor-react-C6faO6LO.js";import{t as l}from"./vendor-state-DahK0J-G.js";import{n as u,r as d,t as f}from"./index-DYsO5Awn.js";import{i as p,n as m,r as h,t as g}from"./Card-rKfViPS2.js";import{t as _}from"./PageHeader-CHSgtxPw.js";import{t as v}from"./SectionHeader-C2WpiwJ5.js";import{a as y,o as b,t as x}from"./format-CHfBBLog.js";var S=e(a(),1),C=c();function w(){let{tasks:e,goals:a,roles:c,stats:w,readiness:D,executionPool:O}=d(l(e=>({tasks:e.tasks,goals:e.goals,roles:e.roles,stats:e.stats,readiness:e.readiness,executionPool:e.executionPool}))),k=d(e=>e.fetchTasks),A=d(e=>e.fetchGoals),j=d(e=>e.fetchRoles),M=d(e=>e.fetchExecutionPool);(0,S.useEffect)(()=>{k(),A(),j(),M();let e=setInterval(()=>{k(),M()},5e3);return()=>clearInterval(e)},[k,A,j,M]);let N=e.filter(e=>e.status===`running`).length,P=e.filter(e=>e.status===`queued`||e.status===`pending`).length,F=e.filter(e=>e.status===`failed`).length,I=(0,S.useMemo)(()=>[...e].sort((e,t)=>t.createdAt-e.createdAt),[e]),L=(0,S.useMemo)(()=>I.slice(0,4),[I]),R=(0,S.useMemo)(()=>I.find(e=>e.status===`failed`)||I.find(e=>e.status===`running`)||I[0],[I]),z=(0,S.useMemo)(()=>D?Object.entries(D.checks):[],[D]),B=(0,S.useMemo)(()=>z.filter(([,e])=>e).length,[z]),V=R?.roleId?c.find(e=>e.id===R.roleId)?.name??R.roleId.slice(0,8):`Unassigned`,H=R?`/tasks/${R.id}`:`/work`,U=R?`Open task`:`Open work`,W=R?R.status===`failed`?`Review the failed task before queueing more work.`:R.status===`running`?`Track this active run and its next result.`:`Use the latest completed run as the starting point for follow-up work.`:`Queue work, review recent runs, or launch an automation.`,G=R?R.status===`failed`?`surface-critical`:R.status===`running`?`surface-accent`:`surface-panel-elevated`:`surface-panel-muted`,K=G===`surface-critical`?`critical`:G===`surface-accent`?`accent`:`neutral`,q=K===`accent`||K===`critical`,J=q?`text-white`:`text-[var(--app-text)]`,Y=q?`text-white/70`:`text-[var(--app-text-subtle)]`,X=q?`text-white/76`:`text-[var(--app-text-muted)]`;return(0,C.jsxs)(`div`,{className:`space-y-6`,children:[(0,C.jsx)(_,{title:`Dashboard`,description:`Queue health, execution readiness, and the next task that needs attention.`,metrics:[{label:`Server`,value:D?.status===`ready`?`Ready`:`Attention`},{label:`Running`,value:w.activeTasks||N},{label:`Queued`,value:w.queuedTasks||P},{label:`Goals`,value:a.length},{label:`Execution Pool`,value:`${O.active}/${O.max} | ${O.queued} queued`}],compact:!0,className:`px-4 py-3 lg:px-4 lg:py-3`,actions:D?(0,C.jsx)(`span`,{role:`status`,"aria-live":`polite`,children:(0,C.jsx)(f,{variant:D.status===`ready`?`success`:`destructive`,children:D.status===`ready`?`Server Ready`:`Not Ready`})}):null}),(0,C.jsxs)(`div`,{className:`grid items-start gap-4 xl:grid-cols-2`,children:[(0,C.jsxs)(g,{className:`${G} self-start ${q?`text-white`:``}`,children:[(0,C.jsxs)(h,{className:`mb-2`,children:[(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`p`,{className:`text-kicker ${Y}`,children:`Current Focus`}),(0,C.jsx)(p,{className:`mt-2 ${J}`,children:R?b(R.prompt,92):`No active blockers`})]}),R?(0,C.jsx)(f,{variant:u(R.status),children:R.status}):null]}),(0,C.jsx)(m,{className:X,children:W}),(0,C.jsxs)(`div`,{className:`mt-4 grid gap-3 sm:grid-cols-[repeat(3,minmax(0,1fr))_auto]`,children:[(0,C.jsx)(E,{tone:K,label:`Created`,value:R?y(R.createdAt):`Idle`}),(0,C.jsx)(E,{tone:K,label:`Cost`,value:R?.costUsd==null?`No cost`:x(R.costUsd)}),(0,C.jsx)(E,{tone:K,label:`Role`,value:V}),(0,C.jsx)(s,{to:H,className:`inline-flex items-center justify-center rounded-lg border px-3 py-2 text-sm font-medium transition-colors ${q?`border-white/20 bg-white/10 text-white hover:bg-white/14`:`border-[var(--app-border)] bg-white/[0.05] text-[var(--app-text)] hover:border-[var(--app-border-strong)]`}`,children:U})]})]}),(0,C.jsxs)(g,{className:`surface-panel-elevated self-start`,children:[(0,C.jsx)(v,{title:`System Checks`,description:`${B}/${z.length||0} checks passing`,compact:!0}),D?(0,C.jsx)(`div`,{className:`mt-4 grid gap-2 sm:grid-cols-2`,children:Object.entries(D.checks).map(([e,t])=>(0,C.jsxs)(`div`,{className:`surface-panel-muted flex items-center justify-between rounded-lg px-3 py-3`,children:[(0,C.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,C.jsx)(r,{size:10,className:t?`fill-[var(--app-success)] text-[var(--app-success)]`:`fill-[var(--app-danger)] text-[var(--app-danger)]`}),(0,C.jsx)(`span`,{className:`text-sm capitalize text-[var(--app-text)]`,children:e})]}),(0,C.jsx)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:t?`healthy`:`attention`})]},e))}):(0,C.jsx)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`Loading...`})]})]}),(0,C.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 lg:grid-cols-4`,role:`region`,"aria-label":`Server statistics`,children:[(0,C.jsx)(T,{icon:t,label:`Active Tasks`,value:w.activeTasks||N,color:`text-[var(--app-accent)]`}),(()=>{let e=c.filter(e=>e.status===`active`).length,t=c.length,n=c.filter(e=>e.status===`probation`).length,r=c.filter(e=>e.status===`retired`).length,i=[n>0?`${n} probation`:``,r>0?`${r} retired`:``].filter(Boolean).join(` · `);return(0,C.jsx)(T,{icon:o,label:`Role Health`,value:i?`${e}/${t} | ${i}`:`${e}/${t}`,color:r>0?`text-[var(--app-danger)]`:n>0?`text-[var(--app-warning)]`:`text-[var(--app-success)]`})})(),(0,C.jsx)(T,{icon:n,label:`Failed`,value:F,color:`text-[var(--app-danger)]`}),(0,C.jsx)(T,{icon:i,label:`Cost Today`,value:x(w.totalCostToday),color:`text-[var(--app-accent-strong)]`})]}),(0,C.jsxs)(g,{padding:!1,children:[(0,C.jsx)(`div`,{className:`px-4 pt-4`,children:(0,C.jsx)(v,{title:`Recent Tasks`,description:`Latest executions across the control plane.`,action:(0,C.jsx)(s,{to:`/work`,className:`text-sm font-medium text-[var(--app-accent-strong)] hover:underline`,children:`View all`})})}),(0,C.jsx)(`div`,{className:`mt-4 space-y-3 px-4 pb-4`,children:L.length===0?(0,C.jsx)(`div`,{className:`surface-panel-muted rounded-lg px-4 py-6 text-sm text-[var(--app-text-subtle)]`,children:`No tasks yet`}):L.map(e=>(0,C.jsxs)(s,{to:`/tasks/${e.id}`,className:`surface-panel-muted flex flex-col gap-3 rounded-lg px-4 py-4 transition-colors hover:border-[var(--app-border-strong)] hover:bg-white/[0.05] lg:flex-row lg:items-start lg:justify-between`,children:[(0,C.jsxs)(`div`,{className:`space-y-2`,children:[(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,C.jsx)(f,{variant:u(e.status),children:e.status}),(0,C.jsx)(`span`,{className:`font-mono text-xs text-[var(--app-text-subtle)]`,children:e.id.slice(0,8)}),e.roleId?(0,C.jsxs)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:[`role `,e.roleId.slice(0,12)]}):null]}),(0,C.jsx)(`div`,{className:`text-sm font-medium text-[var(--app-text)]`,children:b(e.prompt,128)})]}),(0,C.jsxs)(`div`,{className:`flex flex-wrap items-center gap-4 text-xs text-[var(--app-text-subtle)]`,children:[(0,C.jsx)(`span`,{children:y(e.createdAt)}),(0,C.jsx)(`span`,{children:e.costUsd==null?`no cost`:x(e.costUsd)})]})]},e.id))})]})]})}function T({icon:e,label:t,value:n,color:r}){return(0,C.jsxs)(g,{className:`surface-panel-muted flex items-center gap-3`,children:[(0,C.jsx)(`div`,{className:`rounded-lg bg-white/[0.05] p-3 ${r}`,children:(0,C.jsx)(e,{size:16})}),(0,C.jsxs)(`div`,{children:[(0,C.jsx)(`div`,{className:`text-xl font-semibold text-[var(--app-text)]`,children:n}),(0,C.jsx)(`div`,{className:`text-xs uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:t})]})]})}function E({label:e,value:t,tone:n=`accent`}){let r=n===`accent`||n===`critical`;return(0,C.jsxs)(`div`,{className:r?`rounded-lg border border-white/12 bg-black/10 px-3 py-3`:`surface-focus-metric rounded-lg px-3 py-3`,children:[(0,C.jsx)(`div`,{className:r?`text-[10px] uppercase tracking-[0.16em] text-white/62`:`text-[10px] uppercase tracking-[0.16em] text-[var(--app-text-subtle)]`,children:e}),(0,C.jsx)(`div`,{className:r?`mt-1 text-lg font-semibold text-white`:`mt-1 text-lg font-semibold text-[var(--app-text)]`,children:t})]})}export{w as Dashboard};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./vendor-react-
|
|
1
|
+
import{t as e}from"./vendor-react-C6faO6LO.js";import{i as t}from"./dist-Bdqp1ixJ.js";var n=e();function r({icon:e,title:r,description:i,action:a,compact:o=!1,className:s}){return(0,n.jsxs)(`div`,{className:t(`surface-panel-muted flex flex-col items-center justify-center rounded-xl text-center`,o?`px-5 py-6`:`px-6 py-10`,s),children:[e&&(0,n.jsx)(`div`,{className:t(`text-[var(--app-text-subtle)]`,o?`mb-3`:`mb-4`),children:e}),(0,n.jsx)(`h3`,{className:`text-base font-semibold text-[var(--app-text)]`,children:r}),i&&(0,n.jsx)(`p`,{className:t(`max-w-md text-sm text-[var(--app-text-muted)]`,o?`mt-1.5 leading-5`:`mt-2 leading-6`),children:i}),a&&(0,n.jsx)(`div`,{className:t(o?`mt-3`:`mt-4`),children:a})]})}export{r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{H as t,
|
|
1
|
+
import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{H as t,S as n,U as r,ct as i,o as a,s as o}from"./vendor-icons-Dk0hMuJz.js";import{t as s}from"./vendor-react-C6faO6LO.js";import{i as c,n as l}from"./dist-Bdqp1ixJ.js";import{t as u}from"./Button-DuQctNms.js";import{i as d}from"./index-DYsO5Awn.js";import{i as f,r as p,t as m}from"./Card-rKfViPS2.js";import{t as h}from"./ui-B_uMx2Fy.js";var g=e(i(),1),_=s(),v=g.forwardRef(({className:e,type:t,...n},r)=>(0,_.jsx)(`input`,{type:t,className:c(`flex h-8 w-full rounded-md border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-3 py-1 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none focus:ring-1 focus:ring-blue-500 disabled:cursor-not-allowed disabled:opacity-50`,e),ref:r,...n}));v.displayName=`Input`;var y=/^[A-Za-z_][A-Za-z0-9_]*$/,b=/key|token|secret|password|credential/i;function x({envVars:e,onSave:i,mode:s,roleId:c,title:x=`Environment Variables`}){let[S,C]=(0,g.useState)([]),[w,T]=(0,g.useState)(!1),[E,D]=(0,g.useState)(new Set),[O,k]=(0,g.useState)([]),[A,j]=(0,g.useState)(!1);(0,g.useEffect)(()=>{C(Object.entries(e??{}).map(([e,t])=>({key:e,value:t,isNew:!1})))},[e]);let M=(0,g.useCallback)(async()=>{try{let e=await l(s===`global`?`/config/env-diff`:`/roles/${c}/env-diff`);k(s===`global`?e.diffs.filter(e=>e.configPath?.startsWith(`defaults.env.`)):e.diffs),j(e.envFileExists)}catch{}},[s,c]);(0,g.useEffect)(()=>{M()},[M]);let N=()=>{let t=Object.fromEntries(S.filter(e=>e.key.trim()).map(e=>[e.key,e.value]));return JSON.stringify(t)!==JSON.stringify(e)},P=()=>{C(e=>[...e,{key:``,value:``,isNew:!0}])},F=e=>{C(t=>t.filter((t,n)=>n!==e))},I=(e,t,n)=>{C(r=>r.map((r,i)=>i===e?{...r,[t]:n}:r))},L=e=>{D(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},R=()=>{let e=new Set;for(let t of S){let n=t.key.trim();if(n){if(!y.test(n))return`Invalid key format: "${n}"`;if(n.startsWith(`ANTHROPIC_`))return`ANTHROPIC_* keys are managed in the Anthropic section`;if(e.has(n))return`Duplicate key: "${n}"`;e.add(n)}}return e.size>100?`Maximum 100 environment variables`:null},z=async()=>{let e=R();if(e){d.error(e);return}T(!0);try{let e={};for(let t of S){let n=t.key.trim();n&&(e[n]=t.value)}s===`global`?await l(`/config/env`,{method:`PUT`,body:JSON.stringify(e)}):await l(`/roles/${c}`,{method:`PATCH`,body:JSON.stringify({envVars:e})}),d.success(`Environment variables saved`),i(),M()}catch(e){d.error(e instanceof Error?e.message:`Failed to save`)}finally{T(!1)}},B=async()=>{try{await l(s===`global`?`/config/sync-to-env`:`/roles/${c}/sync-to-env`,{method:`POST`}),d.success(`Synced DB to .env`),M()}catch(e){d.error(e instanceof Error?e.message:`Sync failed`)}},V=async()=>{try{await l(s===`global`?`/config/load-from-env`:`/roles/${c}/load-from-env`,{method:`POST`}),d.success(`Loaded .env to DB`),i(),M()}catch(e){d.error(e instanceof Error?e.message:`Load failed`)}};return(0,_.jsxs)(m,{children:[(0,_.jsxs)(p,{children:[(0,_.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,_.jsx)(f,{className:`text-sm`,children:x}),(0,_.jsxs)(`div`,{className:`flex flex-wrap justify-end gap-2`,children:[(0,_.jsxs)(u,{variant:`ghost`,size:`sm`,onClick:P,children:[(0,_.jsx)(n,{size:h.sm}),`Add`]}),N()&&(0,_.jsx)(u,{size:`sm`,onClick:()=>void z(),disabled:w,children:w?`Saving...`:`Save`})]})]}),s===`global`&&(0,_.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)] mt-1`,children:`ANTHROPIC_* variables are managed in the Anthropic section above.`})]}),O.length>0&&A&&(0,_.jsx)(`div`,{className:`mx-4 mb-3 rounded border border-[var(--app-warning-soft-border)] bg-[var(--app-warning-soft-bg)] p-3`,children:(0,_.jsxs)(`div`,{className:`flex flex-col gap-3 md:flex-row md:items-start md:justify-between`,children:[(0,_.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,_.jsx)(a,{size:14,className:`text-[var(--app-warning)]`}),(0,_.jsxs)(`span`,{className:`text-xs text-[var(--app-warning)]`,children:[`.env and DB differ on `,O.length,` key(s): `,O.map(e=>e.envKey).join(`, `)]})]}),(0,_.jsxs)(`div`,{className:`flex flex-wrap gap-2 md:justify-end`,children:[(0,_.jsx)(u,{variant:`ghost`,size:`sm`,className:`text-xs`,onClick:()=>void B(),children:`DB → .env`}),(0,_.jsx)(u,{variant:`ghost`,size:`sm`,className:`text-xs`,onClick:()=>void V(),children:`.env → DB`})]})]})}),(0,_.jsxs)(`div`,{className:`px-4 pb-4 space-y-2`,children:[S.length===0&&(0,_.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)] py-2`,children:`No environment variables configured.`}),S.map((e,n)=>{let i=b.test(e.key),a=E.has(e.key)||e.isNew;return(0,_.jsxs)(`div`,{className:`flex flex-col gap-2 md:flex-row md:items-center`,children:[(0,_.jsx)(v,{className:`w-full font-mono text-xs md:w-48`,placeholder:`KEY_NAME`,value:e.key,onChange:e=>I(n,`key`,e.target.value)}),(0,_.jsx)(`span`,{className:`hidden text-[var(--app-text-subtle)] md:inline`,children:`=`}),(0,_.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,_.jsx)(v,{className:`font-mono text-xs pr-8`,type:i&&!a?`password`:`text`,placeholder:`value`,value:e.value,onChange:e=>I(n,`value`,e.target.value)}),i&&(0,_.jsx)(`button`,{type:`button`,className:`absolute right-2 top-1/2 -translate-y-1/2 text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`,onClick:()=>L(e.key),children:a?(0,_.jsx)(r,{size:12}):(0,_.jsx)(t,{size:12})})]}),(0,_.jsx)(u,{variant:`ghost`,size:`sm`,className:`self-end text-[var(--app-danger)] hover:text-[var(--app-danger-soft-text)] md:self-auto`,onClick:()=>F(n),children:(0,_.jsx)(o,{size:14})})]},n)})]})]})}export{x as t};
|