adam-agent-server 1.5.0 → 1.6.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.
Files changed (127) hide show
  1. package/dist/App-WJMHK5EO.js +13 -0
  2. package/dist/adam-automator-skills-UFW5TXCC.js +18 -0
  3. package/dist/adam-tools-IAZSLWYB.js +1 -0
  4. package/dist/approval-handler-HQO62WK2.js +1 -0
  5. package/dist/audit-manager-LC5EQXCI.js +1 -0
  6. package/dist/bree-engine-M5CZ6A62.js +1 -0
  7. package/dist/channels-5TFYQN5Z.js +1 -0
  8. package/dist/{channels-HYSB2EEK.js → channels-J4STJ4X2.js} +1 -1
  9. package/dist/{chunk-BR2JY5X2.js → chunk-2H7UOW4P.js} +1 -1
  10. package/dist/{chunk-VRJ7R766.js → chunk-3LY6PD6A.js} +1 -1
  11. package/dist/{chunk-YVS565QY.js → chunk-4C5ITATX.js} +1 -1
  12. package/dist/{chunk-R4GIIQ7G.js → chunk-52PR7XTN.js} +1 -1
  13. package/dist/chunk-5OQZPUBV.js +79 -0
  14. package/dist/{chunk-Y3AMO6WC.js → chunk-7446ZS6D.js} +1 -1
  15. package/dist/{chunk-GBTG5B5R.js → chunk-7ZGSJCX5.js} +1 -1
  16. package/dist/{chunk-QWCRZDZS.js → chunk-DBP7GPWG.js} +2 -2
  17. package/dist/{chunk-5XUR3M23.js → chunk-DWRYIN5N.js} +1 -1
  18. package/dist/{chunk-RAW263MQ.js → chunk-FIN36WAP.js} +4 -4
  19. package/dist/{chunk-2DLVAKH7.js → chunk-FXQAUQTI.js} +1 -1
  20. package/dist/{chunk-6FXNB7NE.js → chunk-FZCNYKNT.js} +1 -1
  21. package/dist/{chunk-7L2WQM7N.js → chunk-G5ESQEXN.js} +1 -1
  22. package/dist/chunk-GGIHDFRW.js +6 -0
  23. package/dist/{chunk-HDP7A4XY.js → chunk-GMMWA5EG.js} +1 -1
  24. package/dist/chunk-HWLSHTVX.js +27 -0
  25. package/dist/{chunk-ISZJV72D.js → chunk-I7ZZKPHE.js} +1 -1
  26. package/dist/{chunk-5V36ACKZ.js → chunk-IZNEOYRP.js} +1 -1
  27. package/dist/{chunk-6775OYXA.js → chunk-MDBVKBC7.js} +1 -1
  28. package/dist/chunk-MJSSCKMB.js +23 -0
  29. package/dist/{chunk-INNDBLZE.js → chunk-MRTJFYPR.js} +1 -1
  30. package/dist/{chunk-YHVFZB6Q.js → chunk-N4ES7TCL.js} +1 -1
  31. package/dist/{chunk-JAS3TUZX.js → chunk-NCFVJCNQ.js} +26 -7
  32. package/dist/{chunk-H7VDC6FY.js → chunk-P5ZXNBNV.js} +1 -1
  33. package/dist/{chunk-7K4AQBDD.js → chunk-PG6LMSX6.js} +1 -1
  34. package/dist/{chunk-QVKI7H7W.js → chunk-RLJYEEQC.js} +1 -1
  35. package/dist/{chunk-2CMR5AG7.js → chunk-SWP2JC54.js} +1 -1
  36. package/dist/{chunk-H54ZXA26.js → chunk-TNL2LZB7.js} +1 -1
  37. package/dist/{chunk-5S6BMWD2.js → chunk-TSPQ44HT.js} +1 -1
  38. package/dist/{chunk-Z4D3L2HR.js → chunk-V32YF3J5.js} +1 -1
  39. package/dist/{chunk-XL46AGRZ.js → chunk-VVSZZK5T.js} +2 -2
  40. package/dist/{chunk-HTPUEIFT.js → chunk-WAG3MNMC.js} +5 -5
  41. package/dist/{chunk-VRP4LTHY.js → chunk-YDVTWPNA.js} +1 -1
  42. package/dist/{chunk-C6BOQJJF.js → chunk-YHVYX3F4.js} +1 -1
  43. package/dist/{chunk-23VZKIB6.js → chunk-YXYIA24D.js} +1 -1
  44. package/dist/chunk-ZL5JXLAX.js +49 -0
  45. package/dist/cli.js +2 -2
  46. package/dist/{config-EMNKHR3W.js → config-KFPS7IEH.js} +1 -1
  47. package/dist/config-ZBNGRASI.js +1 -0
  48. package/dist/db-PZ2V7UCK.js +1 -0
  49. package/dist/delivery-log-ACNJ66RD.js +1 -0
  50. package/dist/engine-5DHYHDAP.js +1 -0
  51. package/dist/{evolution-audit-LZSQPDHH.js → evolution-audit-OQDGPKYI.js} +1 -1
  52. package/dist/{external-api-7XV2PXPC.js → external-api-V74YTLBY.js} +1 -1
  53. package/dist/index.js +16 -13
  54. package/dist/{learner-IJN6B7KV.js → learner-QCD6BH2J.js} +1 -1
  55. package/dist/{logger-QCJUU7GV.js → logger-WEXZORHP.js} +1 -1
  56. package/dist/{memories-ZII5QSTJ.js → memories-QGMRSBJJ.js} +1 -1
  57. package/dist/{memory-extractor-DIYJFBCI.js → memory-extractor-3MRK43A2.js} +2 -2
  58. package/dist/memory-service-M5ADGITG.js +1 -0
  59. package/dist/outbound-gateway-QRL36F7K.js +1 -0
  60. package/dist/role-presets-DLO3XS54.js +1 -0
  61. package/dist/role-workspace-URSOBCDH.js +1 -0
  62. package/dist/roles-KYXNMO5H.js +1 -0
  63. package/dist/session-manager-LZ77OT7A.js +1 -0
  64. package/dist/task-templates-YPNWJOVV.js +1 -0
  65. package/dist/workflow-executor-3WMS2WV3.js +1 -0
  66. package/package.json +1 -1
  67. package/web/dist/assets/{AlertDialog-r3y6IhpW.js → AlertDialog-CfeiyMrc.js} +1 -1
  68. package/web/dist/assets/{Button-BjXgrQ95.js → Button-DuQctNms.js} +1 -1
  69. package/web/dist/assets/{Card-C153tGfJ.js → Card-rKfViPS2.js} +1 -1
  70. package/web/dist/assets/{ChannelDetail-C2uAZv1u.js → ChannelDetail-DHT8fW0C.js} +1 -1
  71. package/web/dist/assets/{Channels-C62Qrg-n.js → Channels-YHGNXcRu.js} +2 -2
  72. package/web/dist/assets/{Chat-kH2owmB_.js → Chat-Dv_Izjx3.js} +1 -1
  73. package/web/dist/assets/{Dashboard-BhD8SpFb.js → Dashboard-DsHC5W4C.js} +1 -1
  74. package/web/dist/assets/{EmptyState-CXwJFCDQ.js → EmptyState-CIdIlMbn.js} +1 -1
  75. package/web/dist/assets/{EnvVarEditor-GSapLD96.js → EnvVarEditor-Dxy1Kz1Z.js} +1 -1
  76. package/web/dist/assets/EventDefDetail-CwprP2ch.js +1 -0
  77. package/web/dist/assets/Events-B19a8cEG.js +1 -0
  78. package/web/dist/assets/{Evolution-BO5hysLD.js → Evolution-DT6iZvil.js} +1 -1
  79. package/web/dist/assets/{GoalDetail-cxa8OvEi.js → GoalDetail-BALsnPQl.js} +1 -1
  80. package/web/dist/assets/{Goals-Dz3qqp_l.js → Goals-BJIsKgfH.js} +1 -1
  81. package/web/dist/assets/{Logs-Ckp3-hYV.js → Logs-Cv15aV3l.js} +1 -1
  82. package/web/dist/assets/{Memories-DEuSRoP3.js → Memories-CKAXhAso.js} +1 -1
  83. package/web/dist/assets/{NotFound-Bvn39vSk.js → NotFound-DitXhq_y.js} +1 -1
  84. package/web/dist/assets/{PageHeader-BMvN0xiB.js → PageHeader-CHSgtxPw.js} +1 -1
  85. package/web/dist/assets/Plugins-NO0S2spH.js +1 -0
  86. package/web/dist/assets/{RoleDetail-BWMjP9aZ.js → RoleDetail-1FNyCD4u.js} +2 -2
  87. package/web/dist/assets/{Roles-DD7NBDku.js → Roles-grfjw2zy.js} +1 -1
  88. package/web/dist/assets/{SectionHeader-CiCj3Is0.js → SectionHeader-C2WpiwJ5.js} +1 -1
  89. package/web/dist/assets/{Settings-BlU19KuR.js → Settings-9LRLfa_4.js} +1 -1
  90. package/web/dist/assets/{Strategies-CJ_q94-v.js → Strategies-BMyd_7_5.js} +1 -1
  91. package/web/dist/assets/{Switch-CoUUy5jr.js → Switch-CULsD-kC.js} +1 -1
  92. package/web/dist/assets/{Table-CaFJieh_.js → Table-DuOLbyJQ.js} +1 -1
  93. package/web/dist/assets/{TaskDetail-DVrjU-E6.js → TaskDetail-C2yXy8gE.js} +2 -2
  94. package/web/dist/assets/Work-dftf35Me.js +1 -0
  95. package/web/dist/assets/index-D4IubNPI.css +2 -0
  96. package/web/dist/assets/index-qYKJGoIB.js +2 -0
  97. package/web/dist/assets/{useIsMobileLayout-Bwrm84kJ.js → useIsMobileLayout-C6KIQjuh.js} +1 -1
  98. package/web/dist/assets/{vendor-icons-BlMaTTx3.js → vendor-icons-Dk0hMuJz.js} +1 -1
  99. package/web/dist/assets/{vendor-react-7e01TWy7.js → vendor-react-C6faO6LO.js} +1 -1
  100. package/web/dist/assets/{vendor-state-Bj70wnRm.js → vendor-state-DahK0J-G.js} +1 -1
  101. package/web/dist/index.html +7 -7
  102. package/dist/App-JGH6G5US.js +0 -13
  103. package/dist/adam-tools-W5AOIGEQ.js +0 -1
  104. package/dist/approval-handler-ORD4MUVM.js +0 -1
  105. package/dist/audit-manager-YCJT2WP5.js +0 -1
  106. package/dist/bree-engine-R5YLSDCL.js +0 -1
  107. package/dist/channels-JCMPPQED.js +0 -1
  108. package/dist/chunk-2YAP4YJV.js +0 -57
  109. package/dist/chunk-DZEVMYPB.js +0 -19
  110. package/dist/chunk-GY52JA5I.js +0 -10
  111. package/dist/chunk-MTWLLE26.js +0 -49
  112. package/dist/chunk-S3BAIZ4Q.js +0 -6
  113. package/dist/config-XMQS2NPT.js +0 -1
  114. package/dist/db-YUYXVV3A.js +0 -1
  115. package/dist/delivery-log-VKONLSVD.js +0 -1
  116. package/dist/engine-BM5BMPIC.js +0 -1
  117. package/dist/memory-service-QMYJPBAE.js +0 -1
  118. package/dist/outbound-gateway-6K6P2BEH.js +0 -1
  119. package/dist/role-presets-K2BDRZBS.js +0 -1
  120. package/dist/roles-L34L5MK3.js +0 -1
  121. package/dist/session-manager-GRJ3FV3L.js +0 -1
  122. package/dist/task-templates-23YOAF3E.js +0 -1
  123. package/dist/workflow-executor-JTUWX5DC.js +0 -1
  124. package/web/dist/assets/Plugins-CRym22JF.js +0 -1
  125. package/web/dist/assets/Work-BMl61RRi.js +0 -1
  126. package/web/dist/assets/index-DcXMQByM.css +0 -2
  127. package/web/dist/assets/index-pF--tN9F.js +0 -2
@@ -1,49 +0,0 @@
1
- import{d as _}from"./chunk-GY52JA5I.js";import{i as v,j as y,q as b}from"./chunk-6775OYXA.js";import{b as k}from"./chunk-ISZJV72D.js";import{a as d}from"./chunk-L7JP7DUO.js";import{p as I}from"./chunk-C6BOQJJF.js";import{a as x,b as c,d as u,f as C}from"./chunk-S3BAIZ4Q.js";import{d as w}from"./chunk-7K4AQBDD.js";import{o as T,r as O}from"./chunk-GBTG5B5R.js";import{c as h,h as E}from"./chunk-INNDBLZE.js";E();O();import{v4 as l}from"uuid";import{CronExpressionParser as W}from"cron-parser";var n=h("scheduler"),m="ai-hourly-digest";function D(){if(c(m)){n.debug({templateId:m},"Built-in template already exists");return}let e={id:m,name:"AI Hourly Digest",description:"\u6BCF\u5C0F\u65F6\u641C\u7D22 AI \u524D\u6CBF\u6587\u7AE0\uFF0C\u603B\u7ED3\u540E\u4FDD\u5B58\u5230 Omnifocus",trigger:{type:"cron",cron:"0 * * * *"},enabled:!0,steps:[{id:"search_ai_news",prompt:`\u641C\u7D22\u8FC7\u53BB 24 \u5C0F\u65F6\u5185\u5173\u4E8E AI/\u4EBA\u5DE5\u667A\u80FD\u7684\u6700\u65B0\u524D\u6CBF\u6587\u7AE0\u3002
2
-
3
- \u641C\u7D22\u6765\u6E90:
4
- 1. Hacker News AI \u677F\u5757 (https://news.ycombinator.com/front?day=1)
5
- 2. ArXiv cs.AI \u6700\u65B0\u8BBA\u6587 (https://arxiv.org/list/cs.AI/recent)
6
- 3. Reddit r/MachineLearning \u70ED\u95E8\u5E16\u5B50
7
-
8
- \u627E\u51FA\u4E00\u7BC7\u6700\u6709\u4EF7\u503C\u3001\u6700\u6709\u6280\u672F\u6DF1\u5EA6\u7684\u6587\u7AE0\u3002
9
-
10
- \u8F93\u51FA\u683C\u5F0F:
11
- - \u6807\u9898\uFF1A[\u6587\u7AE0\u6807\u9898]
12
- - \u6765\u6E90\uFF1A[\u7F51\u7AD9/\u5E73\u53F0\u540D\u79F0]
13
- - \u94FE\u63A5\uFF1A[\u5B8C\u6574 URL]
14
- - \u6838\u5FC3\u4EF7\u503C\uFF1A[1-2 \u53E5\u8BDD\u8BF4\u660E\u4E3A\u4EC0\u4E48\u8FD9\u7BC7\u6587\u7AE0\u503C\u5F97\u770B]`},{id:"summarize_article",dependsOn:["search_ai_news"],prompt:`\u9605\u8BFB\u5E76\u603B\u7ED3\u8FD9\u7BC7\u6587\u7AE0\u3002
15
-
16
- \u6587\u7AE0\u4FE1\u606F:
17
- {{search_ai_news.result}}
18
-
19
- \u8BF7:
20
- 1. \u7528 WebFetch \u83B7\u53D6\u6587\u7AE0\u5B8C\u6574\u5185\u5BB9
21
- 2. \u63D0\u53D6\u6838\u5FC3\u89C2\u70B9\u548C\u6280\u672F\u7EC6\u8282
22
- 3. \u7528\u4E2D\u6587\u5199\u51FA 300-500 \u5B57\u7684\u603B\u7ED3
23
-
24
- \u603B\u7ED3\u7ED3\u6784:
25
- ## \u6838\u5FC3\u53D1\u73B0
26
- [\u6587\u7AE0\u6700\u91CD\u8981\u7684\u53D1\u73B0/\u521B\u65B0\u70B9]
27
-
28
- ## \u6280\u672F\u7EC6\u8282
29
- [\u5173\u952E\u7684\u6280\u672F\u65B9\u6CD5/\u5B9E\u73B0\u7EC6\u8282]
30
-
31
- ## \u5F71\u54CD/\u610F\u4E49
32
- [\u8FD9\u9879\u5DE5\u4F5C\u7684\u610F\u4E49\u6216\u5BF9\u884C\u4E1A\u7684\u5F71\u54CD]
33
-
34
- ## \u539F\u6587\u94FE\u63A5
35
- [\u6587\u7AE0 URL]`},{id:"save_to_omnifocus",dependsOn:["summarize_article"],prompt:`\u5C06\u6587\u7AE0\u603B\u7ED3\u4FDD\u5B58\u5230 Omnifocus\u3002
36
-
37
- \u603B\u7ED3\u5185\u5BB9:
38
- {{summarize_article.result}}
39
-
40
- \u63D0\u53D6\u6587\u7AE0\u6807\u9898\u548C\u5B8C\u6574\u603B\u7ED3\uFF0C\u7136\u540E\u6267\u884C\u4EE5\u4E0B\u547D\u4EE4\u6DFB\u52A0\u5230 Omnifocus Inbox\uFF1A
41
-
42
- osascript /Users/norvyn/Code/Projects/Adam/scripts/add-to-omnifocus.applescript "[\u6587\u7AE0\u6807\u9898] AI \u524D\u6CBF\u901F\u9012" "[\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9]"
43
-
44
- \u6CE8\u610F\uFF1A
45
- - \u5C06 [\u6587\u7AE0\u6807\u9898] \u66FF\u6362\u4E3A\u5B9E\u9645\u6807\u9898
46
- - \u5C06 [\u5B8C\u6574\u603B\u7ED3\u5185\u5BB9] \u66FF\u6362\u4E3A\u5B8C\u6574\u7684\u603B\u7ED3\u6587\u672C\uFF08\u5305\u542B\u6838\u5FC3\u53D1\u73B0\u3001\u6280\u672F\u7EC6\u8282\u3001\u5F71\u54CD/\u610F\u4E49\u548C\u539F\u6587\u94FE\u63A5\uFF09
47
- - \u603B\u7ED3\u5185\u5BB9\u4F7F\u7528\u6362\u884C\u7B26\u5206\u9694\u5404\u90E8\u5206
48
-
49
- \u5B8C\u6210\u540E\u8F93\u51FA\uFF1A\u5DF2\u4FDD\u5B58\u5230 Omnifocus\uFF1A[\u4EFB\u52A1\u6807\u9898]`}],config:{timeout:300},tags:["ai","digest","hourly","automation"],createdAt:Date.now()};x(e),n.info({templateId:m,cron:"0 * * * *"},"Registered built-in AI Hourly Digest template")}var A=class{cronJobs=new Map;workflowExecutor=new _;started=!1;taskCompletionHandler=null;workflowCompletionHandler=null;async start(){if(this.started)return;this.started=!0,D();let e=u(!0),t=0;for(let r of e)r.trigger.type==="cron"&&r.trigger.cron&&(this.scheduleCronJob(r),t++);let s=0;for(let r of e)r.trigger.type==="once"&&r.trigger.runAt&&(this.scheduleOnceJob(r.id),s++);this.taskCompletionHandler=r=>{r.newStatus==="completed"&&this.checkEventTriggers(r.taskId).catch(o=>{n.error({taskId:r.taskId,error:o},"Event trigger check failed")})},d.on("task_status_change",this.taskCompletionHandler),this.workflowCompletionHandler=r=>{(r.status==="completed"||r.status==="partial")&&this.checkWorkflowEventTriggers(r.templateId).catch(o=>{n.error({templateId:r.templateId,error:o},"Workflow event trigger check failed")})},d.on("workflow_status_change",this.workflowCompletionHandler),this.cronJobs.set("memory-cleanup",setInterval(()=>{this.runMemoryCleanup()},36e5)),n.info({cronCount:t,onceCount:s},"Bree engine started with cron jobs + memory cleanup")}runMemoryCleanup(){try{let e=T(void 0,1e3,0),t=0;for(let s of e)t+=I(s.id);t>0&&n.info({totalCleaned:t},"Memory cleanup completed")}catch(e){n.warn({error:e},"Memory cleanup failed")}}async stop(){for(let[,e]of this.cronJobs)clearTimeout(e),clearInterval(e);this.cronJobs.clear(),this.taskCompletionHandler&&(d.off("task_status_change",this.taskCompletionHandler),this.taskCompletionHandler=null),this.workflowCompletionHandler&&(d.off("workflow_status_change",this.workflowCompletionHandler),this.workflowCompletionHandler=null),this.started=!1,n.info("Bree engine stopped")}scheduleCronJob(e){let t=`template-${e.id}`;this.cronJobs.has(t)&&(clearTimeout(this.cronJobs.get(t)),this.cronJobs.delete(t));let s;try{s=W.parse(e.trigger.cron)}catch{n.warn({templateId:e.id,cron:e.trigger.cron},"Invalid cron expression");return}let r=()=>{let p=s.next().getTime()-Date.now();return Math.max(p,1e3)},o=()=>{this.executeCronTrigger(e.id).catch(p=>{n.error({templateId:e.id,error:p},"Cron trigger failed")});let f=setTimeout(o,r());this.cronJobs.set(t,f)},i=r(),a=setTimeout(o,i);this.cronJobs.set(t,a),n.debug({jobName:t,nextRun:new Date(Date.now()+i).toISOString()},"Scheduled cron job")}async executeCronTrigger(e){let t=c(e);!t||!t.enabled||(n.info({templateName:t.name},"Cron triggered"),await this.executeWorkflow(t,l()))}async scheduleJob(e){let t=c(e);t&&t.trigger.type==="cron"&&t.trigger.cron&&this.scheduleCronJob(t)}async unscheduleJob(e){let t=`template-${e}`,s=this.cronJobs.get(t);s&&(clearTimeout(s),this.cronJobs.delete(t))}async runNow(e){let t=c(e);if(!t)throw new Error(`Template ${e} not found`);let s=l();return this.executeWorkflow(t,s).catch(r=>{n.error({templateId:e,error:r},"Workflow execution failed")}),s}async checkEventTriggers(e){let t=k(e);if(!t)return;let s=u(!0),r=s.filter(o=>o.trigger.type==="event"&&o.trigger.event==="task_complete");for(let o of r)n.debug({templateName:o.name},"Event trigger matched"),await this.executeWorkflow(o,l());if(t.templateId){let o=s.filter(i=>i.trigger.type!=="event"||!i.trigger.event?!1:i.trigger.event===`template_complete:${t.templateId}`);for(let i of o)n.info({templateName:i.name,sourceTemplateId:t.templateId},"Template complete trigger matched"),await this.executeWorkflow(i,l())}}async executeWorkflow(e,t){if(n.info({templateName:e.name,executionId:t},"Executing workflow"),e.goalIds&&e.goalIds.length>0){for(let r of e.goalIds){let o=y(r);if(!o){n.warn({goalId:r,templateId:e.id},"Goal reference not found, skipping");continue}let i=l();v({id:i,name:o.name,description:o.description,roleId:o.roleId,metricType:o.metricType,targetValue:o.targetValue,currentValue:0,deadline:o.deadline,budgetUsd:o.budgetUsd,status:"active",createdAt:Date.now(),sourceSessionId:e.sourceSessionId,deliverTo:e.deliverTo,reportTo:e.reportTo});let a=await b({prompt:`Decompose and execute goal: ${o.name}. ${o.description??""}`,roleId:e.rolePreference??o.roleId,config:{...w()},deliverTo:e.deliverTo,reportTo:e.reportTo,sourceSessionId:e.sourceSessionId,parentId:i,templateId:e.id});if(!a.ok){n.error({templateId:e.id,sourceGoalId:r,newGoalId:i,code:a.code,reason:a.reason},"Decomposition task admission failed");continue}n.info({templateId:e.id,sourceGoalId:r,newGoalId:i,taskId:a.taskId},"Goal reference triggered, dispatched decomposition task")}return}let s=await this.workflowExecutor.execute(e,t);n.info({templateName:e.name,executionId:t,status:s.status,steps:s.stepResults.size},"Workflow execution finished")}async checkWorkflowEventTriggers(e){let s=u(!0).filter(r=>r.trigger.type!=="event"||!r.trigger.event?!1:r.trigger.event===`workflow_complete:${e}`);for(let r of s)n.info({templateName:r.name,sourceTemplateId:e},"Workflow complete trigger matched"),await this.executeWorkflow(r,l())}scheduleOnceJob(e){let t=c(e);if(!t||!t.enabled||t.trigger.type!=="once")return;let r=(t.trigger.runAt?new Date(t.trigger.runAt).getTime():0)-Date.now();if(r<=0){n.info({templateId:e,runAt:t.trigger.runAt},"Once-shot template past due, executing immediately"),this.executeOnceTrigger(e).catch(a=>{n.error({templateId:e,error:a},"Once trigger execution failed")});return}let o=`template-${e}`;this.cronJobs.has(o)&&clearTimeout(this.cronJobs.get(o));let i=setTimeout(()=>{this.cronJobs.delete(o),this.executeOnceTrigger(e).catch(a=>{n.error({templateId:e,error:a},"Once trigger execution failed")})},r);this.cronJobs.set(o,i),n.info({templateId:e,runAt:t.trigger.runAt,delayMs:r},"Scheduled once-shot job")}async executeOnceTrigger(e){let t=c(e);!t||!t.enabled||(n.info({templateName:t.name},"Once-shot triggered"),await this.executeWorkflow(t,l()),C(e),n.info({templateId:e},"Once-shot template auto-disabled after execution"))}},J=null;function V(){return J}function F(g){J=g}export{A as a,V as b,F as c};
@@ -1,6 +0,0 @@
1
- import{b as s,d as l}from"./chunk-JAS3TUZX.js";l();function o(e){let n={type:e.trigger_type,cron:e.trigger_type==="once"?void 0:e.trigger_cron??void 0,event:e.trigger_event??void 0,runAt:e.trigger_type==="once"?e.trigger_cron??void 0:void 0};return{id:e.id,name:e.name,description:e.description??void 0,trigger:n,steps:JSON.parse(e.steps),rolePreference:e.role_preference??void 0,config:e.config?JSON.parse(e.config):void 0,tags:e.tags?JSON.parse(e.tags):void 0,enabled:e.enabled===1,createdAt:e.created_at,updatedAt:e.updated_at??void 0,sourceSessionId:e.source_session_id??void 0,deliverTo:e.deliver_to?JSON.parse(e.deliver_to):void 0,reportTo:e.report_to?JSON.parse(e.report_to):void 0,goalIds:e.goal_ids?JSON.parse(e.goal_ids):void 0}}function u(e){s().prepare(`
2
- INSERT INTO task_templates (id, name, description, trigger_type, trigger_cron,
3
- trigger_event, steps, role_preference, config, tags, enabled, created_at, updated_at,
4
- source_session_id, deliver_to, report_to, goal_ids)
5
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
6
- `).run(e.id,e.name,e.description??null,e.trigger.type,e.trigger.type==="once"?e.trigger.runAt??null:e.trigger.cron??null,e.trigger.event??null,JSON.stringify(e.steps),e.rolePreference??null,e.config?JSON.stringify(e.config):null,e.tags?JSON.stringify(e.tags):null,e.enabled?1:0,e.createdAt??Date.now(),e.updatedAt??null,e.sourceSessionId??null,e.deliverTo?JSON.stringify(e.deliverTo):null,e.reportTo?JSON.stringify(e.reportTo):null,e.goalIds?JSON.stringify(e.goalIds):null)}function p(e){let t=s().prepare("SELECT * FROM task_templates WHERE id = ?").get(e);return t?o(t):void 0}function f(e,n){let t=s(),i=[],r=[];"name"in n&&(i.push("name = ?"),r.push(n.name)),"description"in n&&(i.push("description = ?"),r.push(n.description??null)),"trigger"in n&&n.trigger&&(i.push("trigger_type = ?"),r.push(n.trigger.type),i.push("trigger_cron = ?"),r.push(n.trigger.type==="once"?n.trigger.runAt??null:n.trigger.cron??null),i.push("trigger_event = ?"),r.push(n.trigger.event??null)),"steps"in n&&(i.push("steps = ?"),r.push(JSON.stringify(n.steps))),"rolePreference"in n&&(i.push("role_preference = ?"),r.push(n.rolePreference??null)),"config"in n&&(i.push("config = ?"),r.push(n.config?JSON.stringify(n.config):null)),"tags"in n&&(i.push("tags = ?"),r.push(n.tags?JSON.stringify(n.tags):null)),"enabled"in n&&(i.push("enabled = ?"),r.push(n.enabled?1:0)),"sourceSessionId"in n&&(i.push("source_session_id = ?"),r.push(n.sourceSessionId??null)),"deliverTo"in n&&(i.push("deliver_to = ?"),r.push(n.deliverTo?JSON.stringify(n.deliverTo):null)),"reportTo"in n&&(i.push("report_to = ?"),r.push(n.reportTo?JSON.stringify(n.reportTo):null)),"goalIds"in n&&(i.push("goal_ids = ?"),r.push(n.goalIds?JSON.stringify(n.goalIds):null)),i.length!==0&&(i.push("updated_at = ?"),r.push(Date.now()),r.push(e),t.prepare(`UPDATE task_templates SET ${i.join(", ")} WHERE id = ?`).run(...r))}function c(e=!1,n,t=0){let i=s(),r="SELECT * FROM task_templates",g=[];return e&&(r+=" WHERE enabled = 1"),r+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof n=="number"&&(r+=" LIMIT ? OFFSET ?",g.push(n,t)),i.prepare(r).all(...g).map(o)}function T(e){s().prepare("UPDATE task_templates SET enabled = 1, updated_at = ? WHERE id = ?").run(Date.now(),e)}function _(e){s().prepare("UPDATE task_templates SET enabled = 0, updated_at = ? WHERE id = ?").run(Date.now(),e)}function h(e){s().prepare("DELETE FROM task_templates WHERE id = ?").run(e)}export{u as a,p as b,f as c,c as d,T as e,_ as f,h as g};
@@ -1 +0,0 @@
1
- import{a as b,b as c,d,e}from"./chunk-7K4AQBDD.js";import{a}from"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as DEFAULT_CONFIG,e as getChatConfig,d as getDefaults,b as loadConfig,c as loadDefaultConfig};
@@ -1 +0,0 @@
1
- import{a,b,c,d}from"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";d();export{c as closeDb,b as getDb,a as runMigrations};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i}from"./chunk-QVKI7H7W.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as TTL_MS,g as cleanupExpired,b as createDeliveryLog,i as getDeliveryLogByRule,h as getDeliveryLogByTask,f as getFailedDeliveries,e as getPendingDeliveries,d as markDelivered,c as updateDeliveryLogStatus};
@@ -1 +0,0 @@
1
- import{a,b,c,d}from"./chunk-H7VDC6FY.js";import"./chunk-BR2JY5X2.js";import"./chunk-YVS565QY.js";import"./chunk-ISZJV72D.js";import"./chunk-XL46AGRZ.js";import"./chunk-23VZKIB6.js";import"./chunk-2DLVAKH7.js";import"./chunk-HDP7A4XY.js";import"./chunk-L7JP7DUO.js";import"./chunk-QVKI7H7W.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as DeliveryEngine,b as getDeliveryEngine,c as initDeliveryEngine,d as stopDeliveryEngine};
@@ -1 +0,0 @@
1
- import{a,b,c}from"./chunk-R4GIIQ7G.js";import"./chunk-2CMR5AG7.js";import"./chunk-C6BOQJJF.js";import"./chunk-GBTG5B5R.js";import"./chunk-7L2WQM7N.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{b as getRelevantMemoryContext,a as queryMemory,c as queryMemoryByTier};
@@ -1 +0,0 @@
1
- import{a,b,c}from"./chunk-XL46AGRZ.js";import"./chunk-23VZKIB6.js";import"./chunk-L7JP7DUO.js";import"./chunk-QVKI7H7W.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as OutboundGateway,b as getOutboundGateway,c as isRecentlySent};
@@ -1 +0,0 @@
1
- import{a,b}from"./chunk-DZEVMYPB.js";import"./chunk-QWCRZDZS.js";import"./chunk-GBTG5B5R.js";import"./chunk-7L2WQM7N.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as CHAT_MANAGER_ROLE_ID,b as initializeDefaultRoles};
@@ -1 +0,0 @@
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-GBTG5B5R.js";import"./chunk-7L2WQM7N.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.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};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}from"./chunk-Z4D3L2HR.js";import"./chunk-2DLVAKH7.js";import"./chunk-HDP7A4XY.js";import"./chunk-L7JP7DUO.js";import"./chunk-2CMR5AG7.js";import"./chunk-C6BOQJJF.js";import"./chunk-7K4AQBDD.js";import"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-GBTG5B5R.js";import"./chunk-7L2WQM7N.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.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};
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g}from"./chunk-S3BAIZ4Q.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as createTaskTemplate,g as deleteTaskTemplate,f as disableTaskTemplate,e as enableTaskTemplate,b as getTaskTemplate,d as listTaskTemplates,c as updateTaskTemplate};
@@ -1 +0,0 @@
1
- import{d as a}from"./chunk-GY52JA5I.js";import"./chunk-6775OYXA.js";import"./chunk-5V36ACKZ.js";import"./chunk-YHVFZB6Q.js";import"./chunk-VRJ7R766.js";import"./chunk-Y3AMO6WC.js";import"./chunk-ISZJV72D.js";import"./chunk-XL46AGRZ.js";import"./chunk-23VZKIB6.js";import"./chunk-QWCRZDZS.js";import"./chunk-L7JP7DUO.js";import"./chunk-QVKI7H7W.js";import"./chunk-7K4AQBDD.js";import"./chunk-UQJZU3R5.js";import"./chunk-7IFLU3CY.js";import"./chunk-GSMC3VUM.js";import"./chunk-GBTG5B5R.js";import"./chunk-7L2WQM7N.js";import"./chunk-JAS3TUZX.js";import"./chunk-WBAPIPST.js";import"./chunk-INNDBLZE.js";import"./chunk-FCV2DPZQ.js";export{a as WorkflowExecutor};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{$ as t,L as n,Q as r,W as i,b as a,h as o,j as s,l as c,o as l,st as u,t as ee,tt as te,v as ne,x as re}from"./vendor-icons-BlMaTTx3.js";import{t as d}from"./vendor-react-7e01TWy7.js";import{n as f}from"./dist-Bdqp1ixJ.js";import{t as p}from"./Button-BjXgrQ95.js";import{i as m,t as h}from"./index-pF--tN9F.js";import{t as g}from"./Card-C153tGfJ.js";import{t as ie}from"./PageHeader-BMvN0xiB.js";import{t as ae}from"./SectionHeader-CiCj3Is0.js";import{a as oe}from"./format-CHfBBLog.js";import{t as se}from"./EmptyState-CXwJFCDQ.js";import{t as _}from"./ui-B_uMx2Fy.js";import{t as ce}from"./useIsMobileLayout-Bwrm84kJ.js";import{a as v,i as y,n as b,o as x,r as S,t as C}from"./Table-CaFJieh_.js";var w=e(u(),1),T=d();function E({manifest:e}){if(!e)return null;let t=[];return e.skills.length>0&&t.push({label:`Skill(${e.skills.length})`,variant:`info`}),e.agents.length>0&&t.push({label:`Agent(${e.agents.length})`,variant:`success`}),e.mcpServers.length>0&&t.push({label:`MCP(${e.mcpServers.length})`,variant:`warning`}),e.hooks.length>0&&t.push({label:`Hook(${e.hooks.length})`,variant:`default`}),e.lspServers.length>0&&t.push({label:`LSP(${e.lspServers.length})`,variant:`default`}),(0,T.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:t.map(e=>(0,T.jsx)(h,{variant:e.variant,children:e.label},e.label))})}function D({label:e,value:t}){return(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 px-3 py-2`,children:[(0,T.jsx)(`p`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:e}),(0,T.jsx)(`p`,{className:`mt-1 text-sm font-medium text-[var(--app-text)]`,children:t})]})}function O({plugin:e,roles:t,operatingId:n,onInstallToRole:r}){return e.manifest?(0,T.jsxs)(`div`,{className:`space-y-4 text-xs`,children:[e.manifest.description?(0,T.jsx)(`p`,{className:`text-[var(--app-text-muted)]`,children:e.manifest.description}):null,(0,T.jsxs)(`div`,{className:`grid gap-2 md:grid-cols-4`,children:[(0,T.jsx)(D,{label:`Version`,value:e.version?`v${e.version}`:`—`}),(0,T.jsx)(D,{label:`Scope`,value:e.scope}),(0,T.jsx)(D,{label:`Capability Count`,value:e.manifest.skills.length+e.manifest.agents.length+e.manifest.mcpServers.length+e.manifest.hooks.length+e.manifest.lspServers.length}),(0,T.jsx)(D,{label:`Activation`,value:e.globalEnabled?`User On`:`User Off`})]}),(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 px-3 py-2`,children:[(0,T.jsx)(`p`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:`Install Path`}),(0,T.jsx)(`p`,{className:`mt-1 truncate font-mono text-[11px] text-[var(--app-text-muted)]`,title:e.installPath,children:e.installPath})]}),(0,T.jsxs)(`div`,{className:`grid gap-3 md:grid-cols-2`,children:[e.manifest.skills.length>0&&(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`div`,{className:`mb-2 font-semibold text-[var(--app-text)]`,children:`Skills`}),e.manifest.skills.map(e=>(0,T.jsxs)(`div`,{className:`inline-flex items-baseline gap-1 text-[var(--app-text-muted)]`,children:[(0,T.jsx)(`span`,{className:`text-[var(--app-text)]`,children:e.name}),e.description?(0,T.jsxs)(`span`,{className:`text-[var(--app-text-subtle)]`,children:[`; `,e.description]}):null]},e.name))]}),e.manifest.agents.length>0&&(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`div`,{className:`mb-2 font-semibold text-[var(--app-text)]`,children:`Agents`}),e.manifest.agents.map(e=>(0,T.jsxs)(`div`,{className:`inline-flex items-baseline gap-1 text-[var(--app-text-muted)]`,children:[(0,T.jsx)(`span`,{className:`text-[var(--app-text)]`,children:e.name}),e.description?(0,T.jsxs)(`span`,{className:`text-[var(--app-text-subtle)]`,children:[`; `,e.description]}):null]},e.name))]}),e.manifest.mcpServers.length>0&&(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`div`,{className:`mb-2 font-semibold text-[var(--app-text)]`,children:`MCP Servers`}),e.manifest.mcpServers.map(e=>(0,T.jsx)(`div`,{className:`text-[var(--app-text-muted)]`,children:e},e))]}),e.manifest.hooks.length>0&&(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`div`,{className:`mb-2 font-semibold text-[var(--app-text)]`,children:`Hooks`}),e.manifest.hooks.map(e=>(0,T.jsx)(`div`,{className:`text-[var(--app-text-muted)]`,children:e},e))]}),e.manifest.lspServers.length>0&&(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`div`,{className:`mb-2 font-semibold text-[var(--app-text)]`,children:`LSP Servers`}),e.manifest.lspServers.map(e=>(0,T.jsx)(`div`,{className:`text-[var(--app-text-muted)]`,children:e},e))]})]}),t.length>0&&e.scope===`user`?(0,T.jsxs)(`div`,{className:`rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:[(0,T.jsx)(`p`,{className:`mb-2 text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:`Install to Role`}),(0,T.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:t.map(t=>(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-2 text-[10px]`,disabled:n===e.id,onClick:()=>void r(e.id,t.id,t.workspacePath),children:t.name},t.id))})]}):null]}):(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`Loading manifest...`})}function k(){let[e,u]=(0,w.useState)([]),[d,D]=(0,w.useState)([]),[k,le]=(0,w.useState)([]),[ue,de]=(0,w.useState)(new Set),[fe,A]=(0,w.useState)(!0),[j,M]=(0,w.useState)(!1),[N,P]=(0,w.useState)(null),[F,pe]=(0,w.useState)(!1),[I,me]=(0,w.useState)(``),[L,R]=(0,w.useState)(null),[z,B]=(0,w.useState)(!1),[V,H]=(0,w.useState)(``),[U,he]=(0,w.useState)([]),[W,ge]=(0,w.useState)(!1),[G,_e]=(0,w.useState)(new Set),[K,q]=(0,w.useState)(`all`),[J,ve]=(0,w.useState)([]),ye=ce(),Y=(0,w.useCallback)(async()=>{A(!0);try{u((await f(`/plugins`)).plugins)}catch(e){m.error(e instanceof Error?e.message:`Failed to load plugins`)}finally{A(!1)}},[]),X=(0,w.useCallback)(async()=>{M(!0),P(null);try{let[e,t]=await Promise.all([f(`/plugins/marketplace`).catch(()=>({available:[],installed:[]})),f(`/plugins/marketplaces`)]);le(e.available),de(new Set(e.installed.map(e=>e.id))),D(t.sources)}catch(e){P(e instanceof Error?e.message:`Failed to load marketplace`)}finally{M(!1)}},[]),be=(0,w.useCallback)(async()=>{try{he((await f(`/plugins/stats?limit=20`)).stats)}catch{}},[]),Z=(0,w.useCallback)(async()=>{try{ve((await f(`/roles`)).roles)}catch{}},[]);(0,w.useEffect)(()=>{Y(),X(),Z()},[Y,X,Z]);let xe=async(e,t)=>{R(e);try{await f(`/plugins/${encodeURIComponent(e)}/${t?`enable`:`disable`}`,{method:`POST`}),m.success(`${e} ${t?`enabled`:`disabled`} globally`),u(n=>n.map(n=>n.id===e?{...n,globalEnabled:t}:n))}catch(e){m.error(e instanceof Error?e.message:`Failed to ${t?`enable`:`disable`} plugin`)}finally{R(null)}},Se=async e=>{R(e);try{await f(`/plugins/uninstall/${encodeURIComponent(e)}`,{method:`POST`}),m.success(`Plugin uninstalled`),await Promise.all([Y(),X()])}catch(e){m.error(e instanceof Error?e.message:`Uninstall failed`)}finally{R(null)}},Ce=async(e,t,n)=>{R(e);try{await f(`/plugins/install/${encodeURIComponent(e)}`,{method:`POST`,body:JSON.stringify({scope:`project`,cwd:n})});let r=J.find(e=>e.id===t)?.name??t;m.success(`Installed ${e.split(`@`)[0]} for ${r}`),await Y()}catch(e){m.error(e instanceof Error?e.message:`Install to role failed`)}finally{R(null)}},we=async()=>{if(V.trim())try{await f(`/plugins/install/${encodeURIComponent(V.trim())}`,{method:`POST`,body:JSON.stringify({})}),m.success(`Source added`),H(``),B(!1),await X()}catch(e){m.error(e instanceof Error?e.message:`Failed to add source`)}},Q=async(e,t=`user`,n)=>{R(e);try{await f(`/plugins/install/${encodeURIComponent(e)}`,{method:`POST`,body:JSON.stringify({scope:t,cwd:n})});let r=t===`project`&&n?`${e.split(`@`)[0]} for ${n.split(`/`).pop()}`:e.split(`@`)[0];m.success(`Installed ${r}`),await Promise.all([Y(),X()])}catch(e){m.error(e instanceof Error?e.message:`Install failed`)}finally{R(null)}},Te=e=>{_e(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},$=K===`all`?e:e.filter(e=>e.scope===K),Ee=I?k.filter(e=>e.name.toLowerCase().includes(I.toLowerCase())||e.description.toLowerCase().includes(I.toLowerCase())):k;return(0,T.jsxs)(`div`,{className:`space-y-5`,children:[(0,T.jsx)(ie,{eyebrow:`Capabilities`,title:`Plugins`,compact:!0,description:`Installed capabilities, scope, and activation.`,metrics:[{label:`Total`,value:e.length},{label:`Project Scope`,value:e.filter(e=>e.scope===`project`).length},{label:`Catalog`,value:k.length}],actions:(0,T.jsx)(p,{variant:`ghost`,size:`sm`,onClick:()=>void Y(),children:(0,T.jsx)(ne,{size:14})})}),(0,T.jsx)(ae,{title:`Installed Plugins`,compact:!0,description:`Filter by scope, inspect manifests, and keep every activation path reachable from one place.`}),(0,T.jsxs)(g,{children:[(0,T.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,T.jsx)(n,{size:14,className:`text-[var(--app-text-muted)] flex-shrink-0`}),(0,T.jsx)(`button`,{className:`rounded-full px-2 py-0.5 text-xs transition-colors ${K===`all`?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-muted)] hover:bg-[var(--app-panel-muted)]`}`,onClick:()=>q(`all`),children:`All`}),(0,T.jsx)(`button`,{className:`rounded-full px-2 py-0.5 text-xs transition-colors ${K===`user`?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-muted)] hover:bg-[var(--app-panel-muted)]`}`,onClick:()=>q(`user`),children:`User`}),(0,T.jsx)(`button`,{className:`rounded-full px-2 py-0.5 text-xs transition-colors ${K===`project`?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-muted)] hover:bg-[var(--app-panel-muted)]`}`,onClick:()=>q(`project`),children:`Project`}),(0,T.jsx)(`span`,{className:`h-4 w-px bg-[var(--app-panel-muted)] mx-1`}),d.map(e=>(0,T.jsx)(h,{variant:`muted`,className:`text-xs`,children:e.name},e.name)),(0,T.jsxs)(`span`,{className:`ml-auto flex items-center gap-2`,children:[j&&(0,T.jsx)(s,{size:12,className:`animate-spin text-[var(--app-text-subtle)]`}),j?null:(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-2 text-xs`,onClick:()=>B(!z),children:z?(0,T.jsx)(ee,{size:12}):(0,T.jsx)(re,{size:12})})]})]}),z&&(0,T.jsxs)(`div`,{className:`mt-2 flex gap-2`,children:[(0,T.jsx)(`input`,{className:`flex-1 rounded border border-[var(--app-border)] bg-[var(--app-panel)] px-2 py-1.5 text-sm text-[var(--app-text)] focus:border-[var(--app-accent)] focus:outline-none`,value:V,onChange:e=>H(e.target.value),placeholder:`https://github.com/org/marketplace-repo`,onKeyDown:e=>{e.key===`Enter`&&we()}}),(0,T.jsx)(p,{size:`sm`,onClick:()=>void we(),disabled:!V.trim(),children:`Add`})]})]}),fe?(0,T.jsx)(g,{children:(0,T.jsx)(`div`,{className:`py-8 text-center text-sm text-[var(--app-text-subtle)]`,children:`Loading...`})}):$.length===0?(0,T.jsx)(g,{children:(0,T.jsx)(se,{icon:(0,T.jsx)(a,{size:32}),title:`No plugins`,description:K===`all`?`No plugins installed. Browse the marketplace or install from a URL.`:`No ${K}-scope plugins installed.`,className:`py-8`})}):ye?(0,T.jsx)(`div`,{className:`space-y-3`,children:$.map((e,n)=>{let i=G.has(e.id),a=e.id.split(`@`)[0],o=L===e.id,c=e.projectPath?`${e.id}:${e.projectPath}`:`${e.id}:${n}`;return(0,T.jsxs)(g,{children:[(0,T.jsx)(`div`,{className:`flex items-start justify-between gap-3`,children:(0,T.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2`,children:[(0,T.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,T.jsx)(`button`,{onClick:()=>Te(e.id),className:`text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`,children:i?(0,T.jsx)(t,{size:14}):(0,T.jsx)(r,{size:14})}),(0,T.jsxs)(`div`,{className:`min-w-0`,children:[(0,T.jsx)(`p`,{className:`truncate text-sm font-medium text-[var(--app-text)]`,children:a}),(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-text-muted)]`,children:e.version?`v${e.version}`:`—`})]})]}),(0,T.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,T.jsx)(h,{variant:e.scope===`user`?`info`:`warning`,children:e.scope}),(0,T.jsx)(h,{variant:e.globalEnabled?`success`:`destructive`,children:e.globalEnabled?`User On`:`User Off`})]}),e.scope===`project`&&e.projectPath?(0,T.jsx)(`p`,{className:`truncate text-[11px] text-[var(--app-text-subtle)]`,title:e.projectPath,children:e.projectPath}):null,(0,T.jsx)(E,{manifest:e.manifest})]})}),(0,T.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs`,disabled:o,onClick:()=>void xe(e.id,!e.globalEnabled),children:o?(0,T.jsx)(s,{size:_.xs,className:`animate-spin`}):e.globalEnabled?`Disable`:`Enable`}),(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-7 px-2 text-xs text-[var(--app-danger)]`,disabled:o,onClick:()=>void Se(e.id),children:(0,T.jsx)(l,{size:_.xs})})]}),i?(0,T.jsx)(`div`,{className:`mt-4 rounded-xl border border-[var(--app-border)] bg-black/10 p-3`,children:(0,T.jsx)(O,{plugin:e,roles:J,operatingId:L,onInstallToRole:Ce})}):null]},c)})}):(0,T.jsx)(g,{padding:!1,children:(0,T.jsxs)(C,{children:[(0,T.jsx)(v,{children:(0,T.jsxs)(x,{children:[(0,T.jsx)(y,{className:`w-8`}),(0,T.jsx)(y,{children:`Name`}),(0,T.jsx)(y,{children:`Version`}),(0,T.jsx)(y,{children:`Scope`}),(0,T.jsx)(y,{children:`Type`}),(0,T.jsx)(y,{children:`Activation`}),(0,T.jsx)(y,{children:`Actions`})]})}),(0,T.jsx)(b,{children:$.map((e,n)=>{let i=G.has(e.id),a=e.id.split(`@`)[0],o=L===e.id,c=e.projectPath?`${e.id}:${e.projectPath}`:`${e.id}:${n}`;return(0,T.jsxs)(w.Fragment,{children:[(0,T.jsxs)(x,{className:`group`,children:[(0,T.jsx)(S,{children:(0,T.jsx)(`button`,{onClick:()=>Te(e.id),className:`text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`,children:i?(0,T.jsx)(t,{size:_.xs}):(0,T.jsx)(r,{size:_.xs})})}),(0,T.jsx)(S,{className:`font-medium text-[var(--app-text)]`,children:a}),(0,T.jsx)(S,{className:`text-xs text-[var(--app-text-muted)]`,children:e.version?`v${e.version}`:`—`}),(0,T.jsxs)(S,{children:[(0,T.jsx)(h,{variant:e.scope===`user`?`info`:`warning`,children:e.scope}),e.scope===`project`&&e.projectPath&&(0,T.jsx)(`div`,{className:`text-[10px] text-[var(--app-text-subtle)] truncate max-w-[120px]`,title:e.projectPath,children:e.projectPath.split(`/`).pop()})]}),(0,T.jsx)(S,{children:(0,T.jsx)(E,{manifest:e.manifest})}),(0,T.jsx)(S,{children:(0,T.jsx)(h,{variant:e.globalEnabled?`success`:`destructive`,children:e.globalEnabled?`User On`:`User Off`})}),(0,T.jsx)(S,{children:(0,T.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:o,onClick:()=>void xe(e.id,!e.globalEnabled),children:o?(0,T.jsx)(s,{size:_.xs,className:`animate-spin`}):e.globalEnabled?`Disable`:`Enable`}),(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs text-[var(--app-danger)]`,disabled:o,onClick:()=>void Se(e.id),children:(0,T.jsx)(l,{size:_.xs})})]})})]}),i&&(0,T.jsx)(x,{className:`bg-[var(--app-panel)]/50`,children:(0,T.jsx)(S,{colSpan:7,className:`px-6 py-3`,children:(0,T.jsx)(O,{plugin:e,roles:J,operatingId:L,onInstallToRole:Ce})})},`${e.id}-detail`)]},c)})})]})}),(0,T.jsxs)(g,{children:[(0,T.jsxs)(`button`,{className:`flex w-full items-center gap-2 text-sm font-semibold text-[var(--app-text)]`,onClick:()=>pe(!F),children:[(0,T.jsx)(c,{size:_.sm,className:`text-[var(--app-text-muted)]`}),`Marketplace (`,k.length,`)`,F?(0,T.jsx)(t,{size:_.xs,className:`ml-auto`}):(0,T.jsx)(r,{size:_.xs,className:`ml-auto`})]}),F&&(0,T.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,T.jsxs)(`div`,{className:`relative`,children:[(0,T.jsx)(o,{size:_.sm,className:`absolute left-2.5 top-2 text-[var(--app-text-subtle)]`}),(0,T.jsx)(`input`,{className:`w-full rounded border border-[var(--app-border)] bg-[var(--app-panel)] pl-8 pr-3 py-1.5 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`,value:I,onChange:e=>me(e.target.value),placeholder:`Search available plugins...`})]}),j?(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)] text-center py-2`,children:`Loading marketplace...`}):N?(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-danger)] text-center py-2`,children:N}):Ee.length===0?(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)] text-center py-2`,children:I?`No plugins match your search`:`No marketplace plugins available`}):(0,T.jsxs)(C,{children:[(0,T.jsx)(v,{children:(0,T.jsxs)(x,{children:[(0,T.jsx)(y,{children:`Name`}),(0,T.jsx)(y,{children:`Description`}),(0,T.jsx)(y,{children:`Source`}),(0,T.jsx)(y,{children:`Action`})]})}),(0,T.jsx)(b,{children:Ee.map(e=>{let n=ue.has(e.pluginId),r=L===e.pluginId;return(0,T.jsxs)(x,{children:[(0,T.jsx)(S,{className:`font-medium text-[var(--app-text)] text-xs`,children:e.name}),(0,T.jsx)(S,{className:`text-xs text-[var(--app-text-muted)] max-w-[300px] truncate`,title:e.description,children:e.description}),(0,T.jsx)(S,{children:(0,T.jsx)(h,{variant:`muted`,className:`text-[10px]`,children:e.marketplaceName})}),(0,T.jsx)(S,{children:n?(0,T.jsx)(h,{variant:`success`,className:`text-[10px]`,children:`Installed`}):(0,T.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-2 text-xs`,disabled:r,onClick:()=>void Q(e.pluginId),children:r?(0,T.jsx)(s,{size:_.xs,className:`animate-spin`}):(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(i,{size:_.xs}),` Install`]})}),J.length>0&&(0,T.jsxs)(`div`,{className:`relative group/install`,children:[(0,T.jsx)(p,{variant:`ghost`,size:`sm`,className:`h-6 px-1 text-xs text-[var(--app-text-subtle)]`,children:(0,T.jsx)(t,{size:_.xs})}),(0,T.jsx)(`div`,{className:`absolute right-0 top-full mt-1 z-10 hidden group-hover/install:block bg-[var(--app-panel-elevated)] border border-[var(--app-border)] rounded shadow-lg py-1 min-w-[140px]`,children:J.map(t=>(0,T.jsx)(`button`,{className:`block w-full text-left px-3 py-1 text-xs text-[var(--app-text)] hover:bg-[var(--app-panel-muted)]`,disabled:r,onClick:()=>void Q(e.pluginId,`project`,t.workspacePath),children:t.name},t.id))})]})]})})]},e.pluginId)})})]})]})]}),(0,T.jsxs)(g,{children:[(0,T.jsxs)(`button`,{className:`flex w-full items-center gap-2 text-sm font-semibold text-[var(--app-text)]`,onClick:()=>{!W&&U.length===0&&be(),ge(!W)},children:[(0,T.jsx)(te,{size:14,className:`text-[var(--app-text-muted)]`}),`Usage Stats`,W?(0,T.jsx)(t,{size:12,className:`ml-auto`}):(0,T.jsx)(r,{size:12,className:`ml-auto`})]}),W&&(0,T.jsx)(`div`,{className:`mt-3`,children:U.length===0?(0,T.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)] text-center py-2`,children:`No usage data yet`}):(0,T.jsxs)(C,{children:[(0,T.jsx)(v,{children:(0,T.jsxs)(x,{children:[(0,T.jsx)(y,{children:`Plugin`}),(0,T.jsx)(y,{children:`Usage Count`}),(0,T.jsx)(y,{children:`Last Used`})]})}),(0,T.jsx)(b,{children:U.map(e=>(0,T.jsxs)(x,{children:[(0,T.jsx)(S,{className:`font-medium text-[var(--app-text)] text-xs`,children:e.pluginName}),(0,T.jsx)(S,{className:`font-mono text-xs text-[var(--app-text-muted)]`,children:e.usageCount}),(0,T.jsx)(S,{className:`text-xs text-[var(--app-text-muted)]`,children:e.lastUsed?oe(e.lastUsed):`—`})]},e.pluginPath))})]})})]})]})}export{k as Plugins};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-Dw2cE7zH.js";import{$ as t,B as n,M as r,Q as i,T as a,et as o,o as s,rt as c,st as l,v as u,w as d,x as f}from"./vendor-icons-BlMaTTx3.js";import{r as p,t as m}from"./vendor-react-7e01TWy7.js";import{i as h,n as g}from"./dist-Bdqp1ixJ.js";import{_,a as v,b as y,c as b,d as x,g as ee,i as S,n as C,o as w,p as T,r as E,s as te,t as ne,u as re,v as D,x as O}from"./AlertDialog-r3y6IhpW.js";import{i as k,t as A}from"./Button-BjXgrQ95.js";import{t as j}from"./vendor-state-Bj70wnRm.js";import{i as M,n as ie,r as N,t as P}from"./index-pF--tN9F.js";import{t as F}from"./Card-C153tGfJ.js";import{t as ae}from"./PageHeader-BMvN0xiB.js";import{t as oe}from"./SectionHeader-CiCj3Is0.js";import{a as se,o as ce,t as le}from"./format-CHfBBLog.js";import{t as ue}from"./EmptyState-CXwJFCDQ.js";import{t as de}from"./ui-B_uMx2Fy.js";import{t as fe}from"./useIsMobileLayout-Bwrm84kJ.js";import{Goals as pe,t as me}from"./Goals-Dz3qqp_l.js";import{a as he,i as I,n as ge,o as L,r as R,t as _e}from"./Table-CaFJieh_.js";import{t as ve}from"./Switch-CoUUy5jr.js";var z=e(l(),1),B=m();function ye(e){let t=e+`CollectionProvider`,[n,r]=y(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=z.useRef(null),a=z.useRef(new Map).current;return(0,B.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let s=e+`CollectionSlot`,c=D(s),l=z.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,B.jsx)(c,{ref:k(t,a(s,n).collectionRef),children:r})});l.displayName=s;let u=e+`CollectionItemSlot`,d=`data-radix-collection-item`,f=D(u),p=z.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=z.useRef(null),s=k(t,o),c=a(u,n);return z.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,B.jsx)(f,{[d]:``,ref:s,children:r})});p.displayName=u;function m(t){let n=a(e+`CollectionConsumer`,t);return z.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${d}]`));return Array.from(n.itemMap.values()).sort((e,n)=>t.indexOf(e.ref.current)-t.indexOf(n.ref.current))},[n.collectionRef,n.itemMap])}return[{Provider:o,Slot:l,ItemSlot:p},m,r]}var V=z.createContext(void 0);function H(e){let t=z.useContext(V);return e||t||`ltr`}var U=`rovingFocusGroup.onEntryFocus`,be={bubbles:!1,cancelable:!0},W=`RovingFocusGroup`,[G,K,xe]=ye(W),[Se,Ce]=y(W,[xe]),[we,Te]=Se(W),q=z.forwardRef((e,t)=>(0,B.jsx)(G.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(G.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,B.jsx)(J,{...e,ref:t})})}));q.displayName=W;var J=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:l,preventScrollOnEntryFocus:u=!1,...d}=e,f=z.useRef(null),p=k(t,f),m=H(a),[h,g]=re({prop:o,defaultProp:s??null,onChange:c,caller:W}),[v,y]=z.useState(!1),b=ee(l),x=K(n),S=z.useRef(!1),[C,w]=z.useState(0);return z.useEffect(()=>{let e=f.current;if(e)return e.addEventListener(U,b),()=>e.removeEventListener(U,b)},[b]),(0,B.jsx)(we,{scope:n,orientation:r,dir:m,loop:i,currentTabStopId:h,onItemFocus:z.useCallback(e=>g(e),[g]),onItemShiftTab:z.useCallback(()=>y(!0),[]),onFocusableItemAdd:z.useCallback(()=>w(e=>e+1),[]),onFocusableItemRemove:z.useCallback(()=>w(e=>e-1),[]),children:(0,B.jsx)(_.div,{tabIndex:v||C===0?-1:0,"data-orientation":r,...d,ref:p,style:{outline:`none`,...e.style},onMouseDown:O(e.onMouseDown,()=>{S.current=!0}),onFocus:O(e.onFocus,e=>{let t=!S.current;if(e.target===e.currentTarget&&t&&!v){let t=new CustomEvent(U,be);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=x().filter(e=>e.focusable);Ae([e.find(e=>e.active),e.find(e=>e.id===h),...e].filter(Boolean).map(e=>e.ref.current),u)}}S.current=!1}),onBlur:O(e.onBlur,()=>y(!1))})})}),Ee=`RovingFocusGroupItem`,De=z.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=T(),l=a||c,u=Te(Ee,n),d=u.currentTabStopId===l,f=K(n),{onFocusableItemAdd:p,onFocusableItemRemove:m,currentTabStopId:h}=u;return z.useEffect(()=>{if(r)return p(),()=>m()},[r,p,m]),(0,B.jsx)(G.ItemSlot,{scope:n,id:l,focusable:r,active:i,children:(0,B.jsx)(_.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...s,ref:t,onMouseDown:O(e.onMouseDown,e=>{r?u.onItemFocus(l):e.preventDefault()}),onFocus:O(e.onFocus,()=>u.onItemFocus(l)),onKeyDown:O(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){u.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=Y(e,u.orientation,u.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=f().filter(e=>e.focusable).map(e=>e.ref.current);if(t===`last`)n.reverse();else if(t===`prev`||t===`next`){t===`prev`&&n.reverse();let r=n.indexOf(e.currentTarget);n=u.loop?X(n,r+1):n.slice(r+1)}setTimeout(()=>Ae(n))}}),children:typeof o==`function`?o({isCurrentTabStop:d,hasTabStop:h!=null}):o})})});De.displayName=Ee;var Oe={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function ke(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function Y(e,t,n){let r=ke(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return Oe[r]}function Ae(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function X(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var je=q,Me=De,Z=`Tabs`,[Ne,Pe]=y(Z,[Ce]),Q=Ce(),[Fe,Ie]=Ne(Z),Le=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,onValueChange:i,defaultValue:a,orientation:o=`horizontal`,dir:s,activationMode:c=`automatic`,...l}=e,u=H(s),[d,f]=re({prop:r,onChange:i,defaultProp:a??``,caller:Z});return(0,B.jsx)(Fe,{scope:n,baseId:T(),value:d,onValueChange:f,orientation:o,dir:u,activationMode:c,children:(0,B.jsx)(_.div,{dir:u,"data-orientation":o,...l,ref:t})})});Le.displayName=Z;var Re=`TabsList`,ze=z.forwardRef((e,t)=>{let{__scopeTabs:n,loop:r=!0,...i}=e,a=Ie(Re,n),o=Q(n);return(0,B.jsx)(je,{asChild:!0,...o,orientation:a.orientation,dir:a.dir,loop:r,children:(0,B.jsx)(_.div,{role:`tablist`,"aria-orientation":a.orientation,...i,ref:t})})});ze.displayName=Re;var Be=`TabsTrigger`,Ve=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,disabled:i=!1,...a}=e,o=Ie(Be,n),s=Q(n),c=We(o.baseId,r),l=Ge(o.baseId,r),u=r===o.value;return(0,B.jsx)(Me,{asChild:!0,...s,focusable:!i,active:u,children:(0,B.jsx)(_.button,{type:`button`,role:`tab`,"aria-selected":u,"aria-controls":l,"data-state":u?`active`:`inactive`,"data-disabled":i?``:void 0,disabled:i,id:c,...a,ref:t,onMouseDown:O(e.onMouseDown,e=>{!i&&e.button===0&&e.ctrlKey===!1?o.onValueChange(r):e.preventDefault()}),onKeyDown:O(e.onKeyDown,e=>{[` `,`Enter`].includes(e.key)&&o.onValueChange(r)}),onFocus:O(e.onFocus,()=>{let e=o.activationMode!==`manual`;!u&&!i&&e&&o.onValueChange(r)})})})});Ve.displayName=Be;var He=`TabsContent`,Ue=z.forwardRef((e,t)=>{let{__scopeTabs:n,value:r,forceMount:i,children:a,...o}=e,s=Ie(He,n),c=We(s.baseId,r),l=Ge(s.baseId,r),u=r===s.value,d=z.useRef(u);return z.useEffect(()=>{let e=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(e)},[]),(0,B.jsx)(x,{present:i||u,children:({present:n})=>(0,B.jsx)(_.div,{"data-state":u?`active`:`inactive`,"data-orientation":s.orientation,role:`tabpanel`,"aria-labelledby":c,hidden:!n,id:l,tabIndex:0,...o,ref:t,style:{...e.style,animationDuration:d.current?`0s`:void 0},children:n&&a})})});Ue.displayName=He;function We(e,t){return`${e}-trigger-${t}`}function Ge(e,t){return`${e}-content-${t}`}var Ke=Le,qe=ze,Je=Ve,Ye=Ue,Xe=Ke,Ze=z.forwardRef(({className:e,...t},n)=>(0,B.jsx)(qe,{ref:n,className:h(`surface-panel-muted inline-flex min-h-11 items-center justify-center gap-1 rounded-full p-1 text-[var(--app-text-muted)]`,e),...t}));Ze.displayName=qe.displayName;var Qe=z.forwardRef(({className:e,...t},n)=>(0,B.jsx)(Je,{ref:n,className:h(`inline-flex items-center justify-center whitespace-nowrap rounded-full px-4 py-2 text-sm font-medium ring-offset-[var(--app-canvas)] transition-[background-color,color,box-shadow] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:surface-panel data-[state=active]:text-[var(--app-text)] data-[state=active]:shadow-[var(--app-shadow-sm)]`,e),...t}));Qe.displayName=Je.displayName;var $e=z.forwardRef(({className:e,...t},n)=>(0,B.jsx)(Ye,{ref:n,className:h(`mt-4 ring-offset-[var(--app-canvas)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2`,e),...t}));$e.displayName=Ye.displayName;var et=[{label:`All`,value:`all`},{label:`Running`,value:`running`},{label:`Pending`,value:`pending`},{label:`Completed`,value:`completed`},{label:`Failed`,value:`failed`},{label:`Cancelled`,value:`cancelled`}],$=new Set([`pending`,`queued`,`running`,`paused`]);function tt(){let e=N(e=>e.tasks),t=N(e=>e.fetchTasks),[n,i]=(0,z.useState)(`all`),[a,s]=(0,z.useState)(!1),[l,d]=(0,z.useState)(``),[m,h]=(0,z.useState)(!1),[_,v]=(0,z.useState)(new Set),[y,b]=(0,z.useState)(!1),x=fe();(0,z.useEffect)(()=>{let e=n===`all`?void 0:n;t(e);let r=setInterval(()=>void t(e),5e3);return()=>clearInterval(r)},[t,n]),(0,z.useEffect)(()=>{v(new Set)},[n]);let ee=async()=>{if(l.trim()){h(!0);try{await g(`/tasks`,{method:`POST`,body:JSON.stringify({prompt:l.trim()})}),d(``),s(!1),t(n===`all`?void 0:n)}finally{h(!1)}}},S=e=>{v(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},C=()=>{let e=T.filter(e=>$.has(e.status)).map(e=>e.id);v(new Set(e))},w=async()=>{if(_.size!==0){b(!0);try{await g(`/tasks/batch-cancel`,{method:`POST`,body:JSON.stringify({taskIds:Array.from(_)})}),v(new Set),t(n===`all`?void 0:n)}finally{b(!1)}}},T=[...e].sort((e,t)=>t.createdAt-e.createdAt),E=Array.from(_).filter(t=>{let n=e.find(e=>e.id===t);return n&&$.has(n.status)});return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsx)(oe,{title:`Tasks`,description:`Review active execution, cancel work, or create the next task.`,compact:!0,action:(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[_.size>0&&(0,B.jsxs)(A,{variant:`destructive`,size:`sm`,onClick:()=>void w(),disabled:y||E.length===0,children:[(0,B.jsx)(c,{size:de.sm}),y?`Cancelling...`:`Cancel ${E.length} task${E.length===1?``:`s`}`]}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>void t(n===`all`?void 0:n),children:(0,B.jsx)(u,{size:de.sm})}),(0,B.jsxs)(A,{size:`sm`,onClick:()=>s(!a),children:[(0,B.jsx)(f,{size:de.sm}),`New Task`]})]})}),a&&(0,B.jsxs)(F,{className:`flex gap-2`,children:[(0,B.jsx)(`input`,{className:`flex-1 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`,placeholder:`Enter task prompt...`,value:l,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&ee()}}),(0,B.jsx)(A,{onClick:()=>void ee(),disabled:m||!l.trim(),children:m?`Creating...`:`Create`}),(0,B.jsx)(A,{variant:`ghost`,onClick:()=>s(!1),children:`Cancel`})]}),(0,B.jsxs)(`div`,{className:`flex flex-col gap-2 md:flex-row md:items-center md:justify-between`,children:[(0,B.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:et.map(e=>(0,B.jsx)(`button`,{onClick:()=>i(e.value),className:`rounded-md px-2.5 py-1 text-xs font-medium transition-colors ${n===e.value?`bg-[var(--app-panel-elevated)] text-[var(--app-text)]`:`text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`}`,children:e.label},e.value))}),(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1`,children:[T.some(e=>$.has(e.status))&&(0,B.jsx)(`button`,{onClick:C,className:`text-xs text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`,children:`Select all cancellable`}),_.size>0&&(0,B.jsxs)(`button`,{onClick:()=>v(new Set),className:`text-xs text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`,children:[`Clear selection (`,_.size,`)`]})]})]}),T.length===0?(0,B.jsx)(F,{padding:!1,children:(0,B.jsx)(ue,{icon:(0,B.jsx)(r,{size:32}),title:`No tasks found`,description:n===`all`?`Create a task to get started`:`No tasks with status "${n}"`})}):x?(0,B.jsx)(`div`,{className:`space-y-3`,children:T.map(e=>(0,B.jsx)(F,{className:_.has(e.id)?`border-[var(--app-accent)]/40 bg-[var(--app-accent)]/8`:``,children:(0,B.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,B.jsx)(`div`,{className:`pt-1`,children:$.has(e.status)?(0,B.jsx)(`button`,{onClick:()=>S(e.id),className:`flex h-4 w-4 items-center justify-center rounded border transition-colors ${_.has(e.id)?`border-[var(--app-accent-strong)] bg-[var(--app-accent)] text-white`:`border-[var(--app-border-strong)] bg-transparent hover:border-[var(--app-text-muted)]`}`,children:_.has(e.id)&&(0,B.jsx)(o,{size:12})}):(0,B.jsx)(`span`,{className:`inline-block h-4 w-4`})}),(0,B.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-3`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-2`,children:[(0,B.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,B.jsx)(p,{to:`/tasks/${e.id}`,className:`break-all font-mono text-xs text-[var(--app-accent)] hover:text-[var(--app-accent)]`,children:e.id.slice(0,8)}),(0,B.jsx)(`p`,{className:`break-words text-sm font-medium leading-6 text-[var(--app-text)]`,children:ce(e.prompt,140)})]}),(0,B.jsx)(P,{variant:ie(e.status),children:e.status})]}),(0,B.jsxs)(`div`,{className:`grid gap-2 text-xs text-[var(--app-text-subtle)] sm:grid-cols-3`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:`Role`}),(0,B.jsx)(`div`,{className:`mt-1 font-mono text-[var(--app-text)]`,children:e.roleId?e.roleId.slice(0,12):`—`})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:`Cost`}),(0,B.jsx)(`div`,{className:`mt-1 font-mono text-[var(--app-text)]`,children:e.costUsd==null?`—`:le(e.costUsd)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`text-[10px] uppercase tracking-[0.14em] text-[var(--app-text-subtle)]`,children:`Created`}),(0,B.jsx)(`div`,{className:`mt-1 text-[var(--app-text)]`,children:se(e.createdAt)})]})]})]})]})},e.id))}):(0,B.jsx)(F,{padding:!1,children:(0,B.jsxs)(_e,{children:[(0,B.jsx)(he,{children:(0,B.jsxs)(L,{children:[(0,B.jsx)(I,{className:`w-8`,children:(0,B.jsx)(`button`,{onClick:()=>{_.size>0&&_.size===T.filter(e=>$.has(e.status)).length?v(new Set):C()},className:`flex h-4 w-4 items-center justify-center rounded border transition-colors ${_.size>0&&_.size===T.filter(e=>$.has(e.status)).length?`border-[var(--app-accent-strong)] bg-[var(--app-accent)] text-white`:`border-[var(--app-border-strong)] bg-transparent hover:border-[var(--app-text-muted)]`}`,children:_.size>0&&_.size===T.filter(e=>$.has(e.status)).length&&(0,B.jsx)(o,{size:12})})}),(0,B.jsx)(I,{children:`ID`}),(0,B.jsx)(I,{children:`Prompt`}),(0,B.jsx)(I,{children:`Status`}),(0,B.jsx)(I,{children:`Role`}),(0,B.jsx)(I,{children:`Cost`}),(0,B.jsx)(I,{children:`Created`})]})}),(0,B.jsx)(ge,{children:T.map(e=>(0,B.jsxs)(L,{className:_.has(e.id)?`bg-[var(--app-panel-elevated)]/50`:``,children:[(0,B.jsx)(R,{children:$.has(e.status)?(0,B.jsx)(`button`,{onClick:()=>S(e.id),className:`flex h-4 w-4 items-center justify-center rounded border transition-colors ${_.has(e.id)?`border-[var(--app-accent-strong)] bg-[var(--app-accent)] text-white`:`border-[var(--app-border-strong)] bg-transparent hover:border-[var(--app-text-muted)]`}`,children:_.has(e.id)&&(0,B.jsx)(o,{size:12})}):(0,B.jsx)(`span`,{className:`inline-block w-4`})}),(0,B.jsx)(R,{children:(0,B.jsx)(p,{to:`/tasks/${e.id}`,className:`font-mono text-xs text-[var(--app-accent)] hover:text-[var(--app-accent)]`,children:e.id.slice(0,8)})}),(0,B.jsx)(R,{children:(0,B.jsxs)(`div`,{className:`space-y-1`,children:[(0,B.jsx)(`div`,{className:`break-words font-medium text-[var(--app-text)]`,children:ce(e.prompt,120)}),(0,B.jsxs)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:[e.totalDurationMs?le(e.costUsd??0):`Awaiting completion`,` · `,se(e.createdAt)]})]})}),(0,B.jsx)(R,{children:(0,B.jsx)(P,{variant:ie(e.status),children:e.status})}),(0,B.jsx)(R,{children:(0,B.jsx)(`span`,{className:`font-mono text-xs text-[var(--app-text-subtle)]`,children:e.roleId?e.roleId.slice(0,12):`—`})}),(0,B.jsx)(R,{className:`font-mono text-xs`,children:e.costUsd==null?`—`:le(e.costUsd)}),(0,B.jsx)(R,{className:`text-xs text-[var(--app-text-subtle)]`,children:se(e.createdAt)})]},e.id))})]})})]})}function nt(e){return`step-${e+1}`}function rt(){let e=N(e=>e.templates),r=N(e=>e.fetchTemplates),o=N(e=>e.goals),c=N(e=>e.fetchGoals),l=N(e=>e.roles),p=N(e=>e.fetchRoles),[m,h]=(0,z.useState)(!1),[_,y]=(0,z.useState)(``),[x,ee]=(0,z.useState)(`manual`),[T,re]=(0,z.useState)(``),[D,O]=(0,z.useState)(``),[k,j]=(0,z.useState)([{id:`step-1`,prompt:``}]),[ie,ae]=(0,z.useState)(!1),[ce,le]=(0,z.useState)(!1),[de,fe]=(0,z.useState)(null),[pe,ye]=(0,z.useState)(null),[V,H]=(0,z.useState)(null),[U,be]=(0,z.useState)(null),[W,G]=(0,z.useState)(``),[K,xe]=(0,z.useState)(`manual`),[Se,Ce]=(0,z.useState)(``),[we,Te]=(0,z.useState)(``),[q,J]=(0,z.useState)([]),[Ee,De]=(0,z.useState)(!1),[Oe,ke]=(0,z.useState)(!1),[Y,Ae]=(0,z.useState)(`prompt`),[X,je]=(0,z.useState)([]),[Me,Z]=(0,z.useState)([]),[Ne,Pe]=(0,z.useState)([]),[Q,Fe]=(0,z.useState)(null),[Ie,Le]=(0,z.useState)([]),[Re,ze]=(0,z.useState)(!1),Be=(0,z.useCallback)(async e=>{ze(!0);try{let t=await g(`/workflow-executions?templateId=${e}&limit=5`);Le(await Promise.all(t.executions.map(async e=>{try{let t=await g(`/workflow-executions/${e.id}`);return{...t.execution,stepTasks:t.stepTasks}}catch{return{...e,stepTasks:[]}}})))}catch{Le([])}finally{ze(!1)}},[]),Ve=(0,z.useCallback)(e=>{Q===e?(Fe(null),Le([])):(Fe(e),Be(e))},[Q,Be]);(0,z.useEffect)(()=>{r(),c(),p()},[r,c,p]);let He=async()=>{if(_.trim()&&!(Y===`prompt`&&k.every(e=>!e.prompt.trim()))&&!(Y===`goal`&&X.length===0)){le(!0);try{let e={name:_.trim(),trigger:{type:x,...x===`cron`&&T?{cron:T}:{},...x===`once`&&D?{runAt:new Date(D).toISOString()}:{}},enabled:!0,...Me.length>0?{deliverTo:Me}:{},...ie?{config:{continueOnError:!0}}:{}};Y===`prompt`?e.steps=k.filter(e=>e.prompt.trim()).map((e,t)=>({id:e.id||nt(t),prompt:e.prompt.trim(),...e.roleId?{roleId:e.roleId}:{},...e.dependsOn&&e.dependsOn.length>0?{dependsOn:e.dependsOn}:{},...e.config&&(e.config.timeout!==void 0||e.config.maxTurns!==void 0)?{config:e.config}:{}})):(e.goalIds=X,e.steps=[]),await g(`/task-templates`,{method:`POST`,body:JSON.stringify(e)}),y(``),j([{id:`step-1`,prompt:``}]),re(``),O(``),je([]),Z([]),h(!1),r()}finally{le(!1)}}},Ue=async t=>{let n=e.find(e=>e.id===t);fe(t);try{await g(`/task-templates/${t}/run`,{method:`POST`}),M.success(`Triggered: ${n?.name??t}`)}catch(e){let t=e instanceof Error?e.message:`Failed to trigger template`;M.error(`Trigger failed: ${t}`)}finally{fe(null)}},We=async t=>{let n=e.find(e=>e.id===t);try{await g(`/task-templates/${t}`,{method:`DELETE`}),M.success(`Deleted: ${n?.name??t}`),r()}catch(e){let t=e instanceof Error?e.message:`Failed to delete template`;M.error(`Delete failed: ${t}`)}},Ge=async t=>{let n=e.find(e=>e.id===t);if(!n)return;if(n.trigger.type!==`cron`&&n.trigger.type!==`event`&&n.trigger.type!==`once`){M.error(`Toggle not applicable for manual triggers`);return}let i=!n.enabled;try{await g(`/task-templates/${t}`,{method:`PATCH`,body:JSON.stringify({enabled:i})}),M.success(`${n.name} ${i?`enabled`:`disabled`}`),r()}catch(e){let t=e instanceof Error?e.message:`Failed to toggle template`;M.error(`Toggle failed: ${t}`)}},Ke=e=>{be(e.id),G(e.name),xe(e.trigger.type),Ce(e.trigger.cron??``),Te(e.trigger.runAt?new Date(e.trigger.runAt).toISOString().slice(0,16):``),J(e.steps.map(e=>({id:e.id,prompt:e.prompt,roleId:e.roleId,dependsOn:e.dependsOn,config:e.config}))),De(e.config?.continueOnError??!1),Pe(e.deliverTo??[])},qe=async()=>{if(!(!U||!W.trim()||q.every(e=>!e.prompt.trim()))){ke(!0);try{await g(`/task-templates/${U}`,{method:`PATCH`,body:JSON.stringify({name:W.trim(),trigger:{type:K,...K===`cron`&&Se?{cron:Se}:{},...K===`once`&&we?{runAt:new Date(we).toISOString()}:{}},steps:q.filter(e=>e.prompt.trim()).map((e,t)=>({id:e.id||nt(t),prompt:e.prompt.trim(),...e.roleId?{roleId:e.roleId}:{},...e.dependsOn&&e.dependsOn.length>0?{dependsOn:e.dependsOn}:{},...e.config&&(e.config.timeout!==void 0||e.config.maxTurns!==void 0)?{config:e.config}:{}})),enabled:e.find(e=>e.id===U)?.enabled??!0,...Ee?{config:{continueOnError:!0}}:{config:{}},deliverTo:Ne.length>0?Ne:void 0})}),be(null),r(),M.success(`Template updated`)}catch(e){let t=e instanceof Error?e.message:`Failed to update template`;M.error(t)}finally{ke(!1)}}},Je=e.find(e=>e.id===pe),Ye=e.find(e=>e.id===V);return(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsx)(oe,{title:`Automations`,description:`Reusable workflows, manual triggers, and recent workflow runs.`,compact:!0,action:(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>void r(),children:(0,B.jsx)(u,{size:14})}),(0,B.jsxs)(A,{size:`sm`,onClick:()=>h(!m),children:[(0,B.jsx)(f,{size:14}),`New Automation`]})]})}),m&&(0,B.jsxs)(F,{className:`space-y-3`,children:[(0,B.jsx)(`input`,{className:`w-full 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`,placeholder:`Template name`,value:_,onChange:e=>y(e.target.value)}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsxs)(`select`,{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`,value:x,onChange:e=>ee(e.target.value),children:[(0,B.jsx)(`option`,{value:`manual`,children:`Manual`}),(0,B.jsx)(`option`,{value:`cron`,children:`Cron`}),(0,B.jsx)(`option`,{value:`event`,children:`Event`}),(0,B.jsx)(`option`,{value:`once`,children:`Once`})]}),x===`cron`&&(0,B.jsx)(`input`,{className:`flex-1 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`,placeholder:`Cron expression (e.g. */5 * * * *)`,value:T,onChange:e=>re(e.target.value)}),x===`once`&&(0,B.jsx)(`input`,{type:`datetime-local`,className:`flex-1 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`,value:D,onChange:e=>O(e.target.value)})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,B.jsx)(`span`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Action type:`}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:()=>Ae(`prompt`),className:`rounded px-2 py-1 text-xs ${Y===`prompt`?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-muted)] hover:text-[var(--app-text)]`}`,children:`Custom Prompt`}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>Ae(`goal`),className:`rounded px-2 py-1 text-xs ${Y===`goal`?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-muted)] hover:text-[var(--app-text)]`}`,children:`Goal Reference`})]})]}),Y===`prompt`?(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Steps`}),(0,B.jsxs)(A,{variant:`ghost`,size:`sm`,onClick:()=>j([...k,{id:nt(k.length),prompt:``}]),children:[(0,B.jsx)(f,{size:12}),` Add Step`]})]}),k.map((e,t)=>(0,B.jsxs)(`div`,{className:`rounded-md border border-[var(--app-border)] p-2 space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--app-text-subtle)]`,children:e.id}),(0,B.jsxs)(`select`,{className:`flex-1 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-2 py-1 text-xs text-[var(--app-text)]`,value:e.roleId??``,onChange:n=>{let r=[...k];r[t]={...e,roleId:n.target.value||void 0},j(r)},children:[(0,B.jsx)(`option`,{value:``,children:`Role (template default)`}),l.filter(e=>e.source!==`system`).map(e=>(0,B.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),k.length>1&&(0,B.jsx)(`button`,{type:`button`,onClick:()=>j(k.filter((e,n)=>n!==t)),className:`text-[var(--app-danger)] hover:text-[var(--app-danger-soft-text)]`,children:(0,B.jsx)(s,{size:12})})]}),(0,B.jsx)(`textarea`,{className:`w-full rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-2 py-1.5 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`,placeholder:`Step ${t+1} prompt${t>0?` (use {{`+k[t-1].id+`.result}} for prev output)`:``}`,rows:2,value:e.prompt,onChange:n=>{let r=[...k];r[t]={...e,prompt:n.target.value},j(r)}}),t>0&&(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)(`span`,{className:`text-[10px] text-[var(--app-text-subtle)]`,children:`depends on:`}),k.slice(0,t).map(n=>(0,B.jsx)(`button`,{type:`button`,onClick:()=>{let r=e.dependsOn??[],i=[...k];i[t]={...e,dependsOn:r.includes(n.id)?r.filter(e=>e!==n.id):[...r,n.id]},j(i)},className:`rounded px-1.5 py-0.5 text-[10px] ${(e.dependsOn??[]).includes(n.id)?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`}`,children:n.id},n.id))]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsxs)(`label`,{className:`flex items-center gap-1 text-[10px] text-[var(--app-text-subtle)]`,children:[`timeout(s):`,(0,B.jsx)(`input`,{type:`number`,min:0,placeholder:`default`,className:`w-20 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-1.5 py-0.5 text-xs text-[var(--app-text)]`,value:e.config?.timeout??``,onChange:n=>{let r=[...k],i=n.target.value===``?void 0:Number(n.target.value);r[t]={...e,config:{...e.config,timeout:i}},j(r)}})]}),(0,B.jsxs)(`label`,{className:`flex items-center gap-1 text-[10px] text-[var(--app-text-subtle)]`,children:[`max turns:`,(0,B.jsx)(`input`,{type:`number`,min:0,placeholder:`default`,className:`w-20 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-1.5 py-0.5 text-xs text-[var(--app-text)]`,value:e.config?.maxTurns??``,onChange:n=>{let r=[...k],i=n.target.value===``?void 0:Number(n.target.value);r[t]={...e,config:{...e.config,maxTurns:i}},j(r)}})]})]})]},e.id))]}):(0,B.jsx)(`div`,{className:`space-y-1`,children:o.length===0?(0,B.jsx)(`p`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`No goals available`}):o.map(e=>(0,B.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-[var(--app-text)] hover:text-[var(--app-text)] cursor-pointer`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:X.includes(e.id),onChange:t=>{t.target.checked?je([...X,e.id]):je(X.filter(t=>t!==e.id))},className:`rounded border-[var(--app-border-strong)] bg-[var(--app-panel-elevated)]`}),(0,B.jsx)(`span`,{className:`truncate`,children:e.name}),(0,B.jsx)(P,{variant:`muted`,className:`text-[10px]`,children:e.status})]},e.id))}),k.length>1&&(0,B.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-[var(--app-text)] cursor-pointer`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:ie,onChange:e=>ae(e.target.checked),className:`rounded border-[var(--app-border-strong)] bg-[var(--app-panel-elevated)]`}),`Continue on error (skip failed step dependents, run independent steps)`]}),(0,B.jsx)(me,{value:Me,onChange:Z}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(A,{onClick:()=>void He(),disabled:ce||!_.trim()||Y===`prompt`&&k.every(e=>!e.prompt.trim())||Y===`goal`&&X.length===0,children:ce?`Creating...`:`Create`}),(0,B.jsx)(A,{variant:`ghost`,onClick:()=>h(!1),children:`Cancel`})]})]}),U!==null&&(0,B.jsxs)(F,{className:`space-y-3`,children:[(0,B.jsx)(`span`,{className:`text-sm font-medium text-[var(--app-text)]`,children:`Edit Automation`}),(0,B.jsx)(`input`,{className:`w-full 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`,placeholder:`Template name`,value:W,onChange:e=>G(e.target.value)}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsxs)(`select`,{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`,value:K,onChange:e=>xe(e.target.value),children:[(0,B.jsx)(`option`,{value:`manual`,children:`Manual`}),(0,B.jsx)(`option`,{value:`cron`,children:`Cron`}),(0,B.jsx)(`option`,{value:`event`,children:`Event`}),(0,B.jsx)(`option`,{value:`once`,children:`Once`})]}),K===`cron`&&(0,B.jsx)(`input`,{className:`flex-1 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`,placeholder:`Cron expression`,value:Se,onChange:e=>Ce(e.target.value)}),K===`once`&&(0,B.jsx)(`input`,{type:`datetime-local`,className:`flex-1 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`,value:we,onChange:e=>Te(e.target.value)})]}),(0,B.jsxs)(`div`,{className:`space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsx)(`span`,{className:`text-xs text-[var(--app-text-muted)]`,children:`Steps`}),(0,B.jsxs)(A,{variant:`ghost`,size:`sm`,onClick:()=>J([...q,{id:nt(q.length),prompt:``}]),children:[(0,B.jsx)(f,{size:12}),` Add Step`]})]}),q.map((e,t)=>(0,B.jsxs)(`div`,{className:`rounded-md border border-[var(--app-border)] p-2 space-y-1.5`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`span`,{className:`text-[10px] font-mono text-[var(--app-text-subtle)]`,children:e.id}),(0,B.jsxs)(`select`,{className:`flex-1 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-2 py-1 text-xs text-[var(--app-text)]`,value:e.roleId??``,onChange:n=>{let r=[...q];r[t]={...e,roleId:n.target.value||void 0},J(r)},children:[(0,B.jsx)(`option`,{value:``,children:`Role (template default)`}),l.filter(e=>e.source!==`system`).map(e=>(0,B.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),q.length>1&&(0,B.jsx)(`button`,{type:`button`,onClick:()=>J(q.filter((e,n)=>n!==t)),className:`text-[var(--app-danger)] hover:text-[var(--app-danger-soft-text)]`,children:(0,B.jsx)(s,{size:12})})]}),(0,B.jsx)(`textarea`,{className:`w-full rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-2 py-1.5 text-sm text-[var(--app-text)] placeholder:text-[var(--app-text-subtle)] focus:border-[var(--app-accent)] focus:outline-none`,placeholder:`Step ${t+1} prompt`,rows:2,value:e.prompt,onChange:n=>{let r=[...q];r[t]={...e,prompt:n.target.value},J(r)}}),t>0&&(0,B.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,B.jsx)(`span`,{className:`text-[10px] text-[var(--app-text-subtle)]`,children:`depends on:`}),q.slice(0,t).map(n=>(0,B.jsx)(`button`,{type:`button`,onClick:()=>{let r=e.dependsOn??[],i=[...q];i[t]={...e,dependsOn:r.includes(n.id)?r.filter(e=>e!==n.id):[...r,n.id]},J(i)},className:`rounded px-1.5 py-0.5 text-[10px] ${(e.dependsOn??[]).includes(n.id)?`bg-[var(--app-accent)] text-white`:`bg-[var(--app-panel-elevated)] text-[var(--app-text-subtle)] hover:text-[var(--app-text)]`}`,children:n.id},n.id))]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsxs)(`label`,{className:`flex items-center gap-1 text-[10px] text-[var(--app-text-subtle)]`,children:[`timeout(s):`,(0,B.jsx)(`input`,{type:`number`,min:0,placeholder:`default`,className:`w-20 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-1.5 py-0.5 text-xs text-[var(--app-text)]`,value:e.config?.timeout??``,onChange:n=>{let r=[...q],i=n.target.value===``?void 0:Number(n.target.value);r[t]={...e,config:{...e.config,timeout:i}},J(r)}})]}),(0,B.jsxs)(`label`,{className:`flex items-center gap-1 text-[10px] text-[var(--app-text-subtle)]`,children:[`max turns:`,(0,B.jsx)(`input`,{type:`number`,min:0,placeholder:`default`,className:`w-20 rounded border border-[var(--app-border)] bg-[var(--app-panel-elevated)] px-1.5 py-0.5 text-xs text-[var(--app-text)]`,value:e.config?.maxTurns??``,onChange:n=>{let r=[...q],i=n.target.value===``?void 0:Number(n.target.value);r[t]={...e,config:{...e.config,maxTurns:i}},J(r)}})]})]})]},e.id))]}),q.length>1&&(0,B.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-[var(--app-text)] cursor-pointer`,children:[(0,B.jsx)(`input`,{type:`checkbox`,checked:Ee,onChange:e=>De(e.target.checked),className:`rounded border-[var(--app-border-strong)] bg-[var(--app-panel-elevated)]`}),`Continue on error`]}),(0,B.jsx)(me,{value:Ne,onChange:Pe}),(0,B.jsxs)(`div`,{className:`flex gap-2`,children:[(0,B.jsx)(A,{onClick:()=>void qe(),disabled:Oe||!W.trim()||q.every(e=>!e.prompt.trim()),children:Oe?`Saving...`:`Save`}),(0,B.jsx)(A,{variant:`ghost`,onClick:()=>be(null),children:`Cancel`})]})]}),(0,B.jsx)(F,{padding:!1,children:e.length===0?(0,B.jsx)(ue,{icon:(0,B.jsx)(n,{size:32}),title:`No automations`,description:`Create an automation to run recurring tasks`}):(0,B.jsxs)(_e,{children:[(0,B.jsx)(he,{children:(0,B.jsxs)(L,{children:[(0,B.jsx)(I,{children:`Name`}),(0,B.jsx)(I,{children:`Trigger`}),(0,B.jsx)(I,{children:`Schedule`}),(0,B.jsx)(I,{children:`Steps`}),(0,B.jsx)(I,{children:`Enabled`}),(0,B.jsx)(I,{children:`Created`}),(0,B.jsx)(I,{children:`Webhook URL`}),(0,B.jsx)(I,{children:`Actions`})]})}),(0,B.jsx)(ge,{children:e.map(e=>(0,B.jsxs)(z.Fragment,{children:[(0,B.jsxs)(L,{children:[(0,B.jsx)(R,{className:`font-medium text-[var(--app-text)]`,children:(0,B.jsxs)(`button`,{type:`button`,onClick:()=>Ve(e.id),className:`flex items-center gap-1 hover:text-[var(--app-accent)] transition-colors`,children:[Q===e.id?(0,B.jsx)(t,{size:12}):(0,B.jsx)(i,{size:12}),e.name]})}),(0,B.jsx)(R,{children:(0,B.jsx)(P,{variant:e.trigger.type===`cron`?`info`:e.trigger.type===`event`?`warning`:(e.trigger.type,`muted`),children:e.trigger.type})}),(0,B.jsx)(R,{className:`font-mono text-xs`,children:e.trigger.type===`once`&&e.trigger.runAt?new Date(e.trigger.runAt).toLocaleString():e.trigger.cron??`—`}),(0,B.jsx)(R,{className:`font-mono text-xs`,children:e.goalIds&&e.goalIds.length>0?`Goals: ${e.goalIds.length}`:(()=>{let t=new Set(e.steps.filter(e=>e.roleId).map(e=>e.roleId));return t.size>0?`${e.steps.length} steps / ${t.size} roles`:String(e.steps.length)})()}),(0,B.jsx)(R,{children:e.trigger.type!==`cron`&&e.trigger.type!==`event`&&e.trigger.type!==`once`?(0,B.jsx)(`span`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`—`}):(0,B.jsx)(ve,{checked:e.enabled,onCheckedChange:()=>void Ge(e.id),"aria-label":`Toggle ${e.name}`})}),(0,B.jsx)(R,{className:`text-xs text-[var(--app-text-subtle)]`,children:e.createdAt?se(e.createdAt):`—`}),(0,B.jsx)(R,{className:`font-mono text-xs text-[var(--app-text-muted)]`,children:e.enabled?`POST /webhooks/${e.id}`:`—`}),(0,B.jsx)(R,{children:(0,B.jsxs)(`div`,{className:`flex gap-1`,children:[(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>Ke(e),title:`Edit`,children:(0,B.jsx)(a,{size:12})}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,onClick:()=>ye(e.id),disabled:de===e.id,title:`Run now`,children:(0,B.jsx)(d,{size:12})}),(0,B.jsx)(A,{variant:`ghost`,size:`sm`,className:`text-[var(--app-danger)] hover:text-[var(--app-danger-soft-text)]`,onClick:()=>H(e.id),title:`Delete`,children:(0,B.jsx)(s,{size:12})})]})})]}),Q===e.id&&(0,B.jsx)(L,{children:(0,B.jsxs)(R,{colSpan:8,className:`bg-[var(--app-panel)]/50 p-3`,children:[(0,B.jsx)(`div`,{className:`text-xs text-[var(--app-text-muted)] mb-2 font-medium`,children:`Recent Executions`}),Re?(0,B.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`Loading...`}):Ie.length===0?(0,B.jsx)(`div`,{className:`text-xs text-[var(--app-text-subtle)]`,children:`No executions yet`}):(0,B.jsx)(`div`,{className:`space-y-1.5`,children:Ie.map(t=>{let n=Object.entries(t.stepStatuses),r=n.filter(([,e])=>e.status===`completed`).length,i=n.filter(([,e])=>e.status===`failed`).length,a=n.filter(([,e])=>e.status===`skipped`).length,o=n.filter(([,e])=>e.status===`cancelled`).length,s=n.length,c=new Map(t.stepTasks.filter(e=>e.stepId).map(e=>[e.stepId,e])),u=[...e.steps.map(e=>e.id),...Object.keys(t.stepStatuses).filter(t=>!e.steps.some(e=>e.id===t))];return(0,B.jsxs)(`div`,{className:`rounded border border-[var(--app-border)] bg-[var(--app-canvas)]/50 p-2.5 space-y-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3 text-xs`,children:[(0,B.jsx)(P,{variant:t.status===`completed`?`success`:t.status===`failed`?`destructive`:t.status===`partial`?`warning`:t.status===`cancelled`?`secondary`:`muted`,children:t.status}),(0,B.jsx)(`span`,{className:`text-[var(--app-text-subtle)]`,children:new Date(t.startedAt).toLocaleString()}),s>0&&(0,B.jsxs)(`span`,{className:`text-[var(--app-text-muted)]`,children:[r,`/`,s,` steps`,(0,B.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[i>0&&(0,B.jsxs)(`span`,{className:`text-[var(--app-danger)]`,children:[i,` failed`]}),a>0&&(0,B.jsxs)(`span`,{className:`text-[var(--app-warning)]`,children:[a,` skipped`]}),o>0&&(0,B.jsxs)(`span`,{className:`text-[var(--app-text)]`,children:[o,` cancelled`]})]})]}),t.completedAt&&(0,B.jsxs)(`span`,{className:`text-[var(--app-text-subtle)]`,children:[Math.round((t.completedAt-t.startedAt)/1e3),`s`]}),(0,B.jsx)(`span`,{className:`font-mono text-[var(--app-text-subtle)] truncate max-w-[120px]`,children:t.id.slice(0,8)})]}),(0,B.jsx)(`div`,{className:`space-y-1.5`,children:u.map(n=>{let r=t.stepStatuses[n];if(!r)return null;let i=e.steps.find(e=>e.id===n),a=c.get(n),o=a?.roleId??r.roleId??i?.roleId,s=l.find(e=>e.id===o)?.name??o,u=a?.error??r.error??a?.result??r.result;return(0,B.jsxs)(`div`,{className:`grid grid-cols-[minmax(0,1fr)_auto_auto] gap-2 rounded bg-[var(--app-panel)]/60 px-2 py-1.5 text-xs`,children:[(0,B.jsxs)(`div`,{className:`min-w-0`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`span`,{className:`font-mono text-[var(--app-text)]`,children:n}),s&&(0,B.jsxs)(`span`,{className:`text-[var(--app-warning-soft-text)]`,children:[`@`,s]}),i?.dependsOn&&i.dependsOn.length>0&&(0,B.jsxs)(`span`,{className:`text-[var(--app-text-subtle)]`,children:[`after `,i.dependsOn.join(`, `)]})]}),u&&(0,B.jsx)(`div`,{className:`mt-1 truncate ${r.status===`failed`?`text-[var(--app-danger-soft-text)]`:r.status===`skipped`?`text-[var(--app-warning-soft-text)]`:r.status===`cancelled`?`text-[var(--app-text)]`:`text-[var(--app-text-muted)]`}`,children:u})]}),(0,B.jsx)(P,{variant:r.status===`completed`?`success`:r.status===`failed`?`destructive`:r.status===`skipped`?`warning`:r.status===`cancelled`?`secondary`:`muted`,children:r.status}),(0,B.jsxs)(`div`,{className:`text-right text-[var(--app-text-subtle)]`,children:[a?.completedAt&&(0,B.jsxs)(`div`,{children:[Math.max(0,Math.round((a.completedAt-a.createdAt)/1e3)),`s`]}),a?.id&&(0,B.jsx)(`div`,{className:`font-mono`,children:a.id.slice(0,8)})]})]},`${t.id}-${n}`)})})]},t.id)})})]})})]},e.id))})]})}),(0,B.jsx)(ne,{open:pe!==null,onOpenChange:e=>{e||ye(null)},children:(0,B.jsxs)(S,{children:[(0,B.jsxs)(te,{children:[(0,B.jsx)(b,{children:`Run Template`}),(0,B.jsxs)(v,{children:[`Run “`,Je?.name,`” now? This will execute the template immediately.`]})]}),(0,B.jsxs)(w,{children:[(0,B.jsx)(E,{children:`Cancel`}),(0,B.jsx)(C,{onClick:()=>{pe&&Ue(pe),ye(null)},children:`Run Now`})]})]})}),(0,B.jsx)(ne,{open:V!==null,onOpenChange:e=>{e||H(null)},children:(0,B.jsxs)(S,{children:[(0,B.jsxs)(te,{children:[(0,B.jsx)(b,{children:`Delete Template`}),(0,B.jsxs)(v,{children:[`Delete “`,Ye?.name,`”? This action cannot be undone.`]})]}),(0,B.jsxs)(w,{children:[(0,B.jsx)(E,{children:`Cancel`}),(0,B.jsx)(C,{className:`bg-[var(--app-danger)] hover:bg-[var(--app-danger)]`,onClick:()=>{V&&We(V),H(null)},children:`Delete`})]})]})})]})}function it(){let{tasks:e,templates:t,goals:n}=N(j(e=>({tasks:e.tasks,templates:e.templates,goals:e.goals}))),r=N(e=>e.fetchTasks),i=N(e=>e.fetchTemplates),a=N(e=>e.fetchGoals);return(0,z.useEffect)(()=>{r(),i(),a()},[r,i,a]),(0,B.jsxs)(`div`,{className:`space-y-4`,children:[(0,B.jsx)(ae,{eyebrow:`Operations`,title:`Work`,description:`Tasks, automations, and goals in one place.`,metrics:[{label:`Running`,value:e.filter(e=>e.status===`running`).length},{label:`Automations`,value:t.length},{label:`Goals`,value:n.length}],compact:!0}),(0,B.jsxs)(Xe,{defaultValue:`tasks`,children:[(0,B.jsxs)(Ze,{children:[(0,B.jsx)(Qe,{value:`tasks`,children:`Tasks`}),(0,B.jsx)(Qe,{value:`automations`,children:`Automations`}),(0,B.jsx)(Qe,{value:`goals`,children:`Goals`})]}),(0,B.jsx)($e,{value:`tasks`,children:(0,B.jsx)(tt,{})}),(0,B.jsx)($e,{value:`automations`,children:(0,B.jsx)(rt,{})}),(0,B.jsx)($e,{value:`goals`,children:(0,B.jsx)(pe,{})})]})]})}export{it as Work};
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-space-x-reverse:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-amber-500:oklch(76.9% .188 70.08);--color-emerald-500:oklch(69.6% .17 162.48);--color-blue-500:oklch(62.3% .214 259.815);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-4xl:56rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-6xl:3.75rem;--text-6xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-widest:.1em;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-\[50\%\]{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-1\.5{margin-inline:calc(var(--spacing) * 1.5)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-64{height:calc(var(--spacing) * 64)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[calc\(100vh-280px\)\]{max-height:calc(100vh - 280px)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-\[10rem\]{min-height:10rem}.min-h-\[24rem\]{min-height:24rem}.w-0\.5{width:calc(var(--spacing) * .5)}.w-2{width:calc(var(--spacing) * 2)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-28{width:calc(var(--spacing) * 28)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[70\%\]{max-width:70%}.max-w-\[85\%\]{max-width:85%}.max-w-\[120px\]{max-width:120px}.max-w-\[280px\]{max-width:280px}.max-w-\[300px\]{max-width:300px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[8rem\]{min-width:8rem}.min-w-\[140px\]{min-width:140px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-75{--tw-scale-x:75%;--tw-scale-y:75%;--tw-scale-z:75%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[minmax\(0\,1fr\)_auto_auto\]{grid-template-columns:minmax(0,1fr) auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-\[var\(--app-border\)\]>:not(:last-child)){border-color:var(--app-border)}.self-end{align-self:flex-end}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:1rem}.rounded-md{border-radius:.75rem}.rounded-sm{border-radius:.5rem}.rounded-xl{border-radius:1.4rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-\[var\(--app-accent\)\]\/40{border-color:var(--app-accent)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--app-accent\)\]\/40{border-color:color-mix(in oklab, var(--app-accent) 40%, transparent)}}.border-\[var\(--app-accent-soft-border\)\]{border-color:var(--app-accent-soft-border)}.border-\[var\(--app-accent-strong\)\]{border-color:var(--app-accent-strong)}.border-\[var\(--app-border\)\]{border-color:var(--app-border)}.border-\[var\(--app-border-strong\)\]{border-color:var(--app-border-strong)}.border-\[var\(--app-danger\)\],.border-\[var\(--app-danger\)\]\/40{border-color:var(--app-danger)}@supports (color:color-mix(in lab, red, red)){.border-\[var\(--app-danger\)\]\/40{border-color:color-mix(in oklab, var(--app-danger) 40%, transparent)}}.border-\[var\(--app-danger-soft-border\)\]{border-color:var(--app-danger-soft-border)}.border-\[var\(--app-success-soft-border\)\]{border-color:var(--app-success-soft-border)}.border-\[var\(--app-warning-soft-border\)\]{border-color:var(--app-warning-soft-border)}.border-transparent{border-color:#0000}.border-white\/12{border-color:#ffffff1f}@supports (color:color-mix(in lab, red, red)){.border-white\/12{border-color:color-mix(in oklab, var(--color-white) 12%, transparent)}}.border-white\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\/20{border-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.border-t-\[var\(--app-accent\)\]{border-top-color:var(--app-accent)}.bg-\[color-mix\(in_oklch\,var\(--app-canvas\)_88\%\,transparent\)\]{background-color:var(--app-canvas)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklch\,var\(--app-canvas\)_88\%\,transparent\)\]{background-color:color-mix(in oklch,var(--app-canvas) 88%,transparent)}}.bg-\[color-mix\(in_oklch\,var\(--app-canvas\)_90\%\,transparent\)\]{background-color:var(--app-canvas)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_oklch\,var\(--app-canvas\)_90\%\,transparent\)\]{background-color:color-mix(in oklch,var(--app-canvas) 90%,transparent)}}.bg-\[var\(--app-accent\)\],.bg-\[var\(--app-accent\)\]\/8{background-color:var(--app-accent)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-accent\)\]\/8{background-color:color-mix(in oklab, var(--app-accent) 8%, transparent)}}.bg-\[var\(--app-accent-soft-bg\)\]{background-color:var(--app-accent-soft-bg)}.bg-\[var\(--app-border\)\]{background-color:var(--app-border)}.bg-\[var\(--app-canvas\)\],.bg-\[var\(--app-canvas\)\]\/40{background-color:var(--app-canvas)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-canvas\)\]\/40{background-color:color-mix(in oklab, var(--app-canvas) 40%, transparent)}}.bg-\[var\(--app-canvas\)\]\/50{background-color:var(--app-canvas)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-canvas\)\]\/50{background-color:color-mix(in oklab, var(--app-canvas) 50%, transparent)}}.bg-\[var\(--app-danger\)\],.bg-\[var\(--app-danger\)\]\/10{background-color:var(--app-danger)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-danger\)\]\/10{background-color:color-mix(in oklab, var(--app-danger) 10%, transparent)}}.bg-\[var\(--app-danger-soft-bg\)\]{background-color:var(--app-danger-soft-bg)}.bg-\[var\(--app-danger-soft-bg-subtle\)\]{background-color:var(--app-danger-soft-bg-subtle)}.bg-\[var\(--app-header-bg\)\]{background-color:var(--app-header-bg)}.bg-\[var\(--app-panel\)\],.bg-\[var\(--app-panel\)\]\/50{background-color:var(--app-panel)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-panel\)\]\/50{background-color:color-mix(in oklab, var(--app-panel) 50%, transparent)}}.bg-\[var\(--app-panel\)\]\/60{background-color:var(--app-panel)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-panel\)\]\/60{background-color:color-mix(in oklab, var(--app-panel) 60%, transparent)}}.bg-\[var\(--app-panel-elevated\)\],.bg-\[var\(--app-panel-elevated\)\]\/50{background-color:var(--app-panel-elevated)}@supports (color:color-mix(in lab, red, red)){.bg-\[var\(--app-panel-elevated\)\]\/50{background-color:color-mix(in oklab, var(--app-panel-elevated) 50%, transparent)}}.bg-\[var\(--app-panel-muted\)\]{background-color:var(--app-panel-muted)}.bg-\[var\(--app-sidebar-bg\)\]{background-color:var(--app-sidebar-bg)}.bg-\[var\(--app-success\)\]{background-color:var(--app-success)}.bg-\[var\(--app-success-soft-bg\)\]{background-color:var(--app-success-soft-bg)}.bg-\[var\(--app-warning-soft-bg\)\]{background-color:var(--app-warning-soft-bg)}.bg-\[var\(--app-warning-soft-bg-subtle\)\]{background-color:var(--app-warning-soft-bg-subtle)}.bg-black{background-color:var(--color-black)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab, red, red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab, var(--color-white) 3%, transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab, red, red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab, var(--color-white) 4%, transparent)}}.bg-white\/\[0\.05\]{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.bg-white\/\[0\.05\]{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab, red, red)){.bg-white\/\[0\.06\]{background-color:color-mix(in oklab, var(--color-white) 6%, transparent)}}.bg-white\/\[0\.08\]{background-color:#ffffff14}@supports (color:color-mix(in lab, red, red)){.bg-white\/\[0\.08\]{background-color:color-mix(in oklab, var(--color-white) 8%, transparent)}}.fill-\[var\(--app-danger\)\]{fill:var(--app-danger)}.fill-\[var\(--app-success\)\]{fill:var(--app-success)}.fill-current{fill:currentColor}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-\[var\(--app-tracking-micro\)\]{--tw-tracking:var(--app-tracking-micro);letter-spacing:var(--app-tracking-micro)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--app-accent\)\]{color:var(--app-accent)}.text-\[var\(--app-accent-strong\)\]{color:var(--app-accent-strong)}.text-\[var\(--app-danger\)\]{color:var(--app-danger)}.text-\[var\(--app-danger-soft-text\)\]{color:var(--app-danger-soft-text)}.text-\[var\(--app-indicator-alert\)\]{color:var(--app-indicator-alert)}.text-\[var\(--app-kicker\)\]{color:var(--app-kicker)}.text-\[var\(--app-log-adam\)\]{color:var(--app-log-adam)}.text-\[var\(--app-log-embedding\)\]{color:var(--app-log-embedding)}.text-\[var\(--app-log-manager\)\]{color:var(--app-log-manager)}.text-\[var\(--app-log-scheduler\)\]{color:var(--app-log-scheduler)}.text-\[var\(--app-log-store\)\]{color:var(--app-log-store)}.text-\[var\(--app-log-ws\)\]{color:var(--app-log-ws)}.text-\[var\(--app-success\)\]{color:var(--app-success)}.text-\[var\(--app-success-soft-text\)\]{color:var(--app-success-soft-text)}.text-\[var\(--app-text\)\]{color:var(--app-text)}.text-\[var\(--app-text-muted\)\]{color:var(--app-text-muted)}.text-\[var\(--app-text-subtle\)\]{color:var(--app-text-subtle)}.text-\[var\(--app-warning\)\]{color:var(--app-warning)}.text-\[var\(--app-warning-soft-text\)\]{color:var(--app-warning-soft-text)}.text-\[var\(--app-warning-strong\)\]{color:var(--app-warning-strong)}.text-blue-500{color:var(--color-blue-500)}.text-red-500{color:var(--color-red-500)}.text-slate-100{color:var(--color-slate-100)}.text-white{color:var(--color-white)}.text-white\/45{color:#ffffff73}@supports (color:color-mix(in lab, red, red)){.text-white\/45{color:color-mix(in oklab, var(--color-white) 45%, transparent)}}.text-white\/62{color:#ffffff9e}@supports (color:color-mix(in lab, red, red)){.text-white\/62{color:color-mix(in oklab, var(--color-white) 62%, transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.text-white\/76{color:#ffffffc2}@supports (color:color-mix(in lab, red, red)){.text-white\/76{color:color-mix(in oklab, var(--color-white) 76%, transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.placeholder-slate-500::placeholder{color:var(--color-slate-500)}.placeholder-slate-600::placeholder{color:var(--color-slate-600)}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-\[var\(--app-shadow-accent\)\]{--tw-shadow:var(--app-shadow-accent);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--app-shadow-danger\)\]{--tw-shadow:var(--app-shadow-danger);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--app-shadow-lg\)\]{--tw-shadow:var(--app-shadow-lg);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[var\(--app-shadow-md\)\]{--tw-shadow:var(--app-shadow-md);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-0{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-\[var\(--app-danger\)\]{--tw-ring-color:var(--app-danger)}.ring-offset-\[var\(--app-canvas\)\]{--tw-ring-offset-color:var(--app-canvas)}.ring-offset-slate-950{--tw-ring-offset-color:var(--color-slate-950)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-\[background-color\,border-color\,color\,box-shadow\]{transition-property:background-color,border-color,color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[background-color\,color\,box-shadow\]{transition-property:background-color,color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.animate-in{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.duration-200{animation-duration:.2s}.fade-in-0{--tw-enter-opacity:0}.paused{animation-play-state:paused}.running{animation-play-state:running}.slide-in-from-left-1\/2{--tw-enter-translate-x:-50%}.slide-in-from-top-\[48\%\]{--tw-enter-translate-y:-48%}.slide-out-to-left-1\/2{--tw-exit-translate-x:-50%}.slide-out-to-top-\[48\%\]{--tw-exit-translate-y:-48%}.zoom-in-95{--tw-enter-scale:.95}@media (hover:hover){.group-hover\/install\:block:is(:where(.group\/install):hover *){display:block}}.group-\[\.toast\]\:bg-\[var\(--app-accent\)\]:is(:where(.group).toast *){background-color:var(--app-accent)}.group-\[\.toast\]\:bg-\[var\(--app-panel-elevated\)\]:is(:where(.group).toast *){background-color:var(--app-panel-elevated)}.group-\[\.toast\]\:text-\[var\(--app-text\)\]:is(:where(.group).toast *){color:var(--app-text)}.group-\[\.toast\]\:text-\[var\(--app-text-muted\)\]:is(:where(.group).toast *){color:var(--app-text-muted)}.group-\[\.toast\]\:text-white:is(:where(.group).toast *){color:var(--color-white)}.group-\[\.toaster\]\:border-\[var\(--app-border\)\]:is(:where(.group).toaster *){border-color:var(--app-border)}.group-\[\.toaster\]\:bg-\[var\(--app-panel\)\]:is(:where(.group).toaster *){background-color:var(--app-panel)}.group-\[\.toaster\]\:text-\[var\(--app-text\)\]:is(:where(.group).toaster *){color:var(--app-text)}.group-\[\.toaster\]\:shadow-lg:is(:where(.group).toaster *){--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.placeholder\:text-\[var\(--app-text-subtle\)\]::placeholder{color:var(--app-text-subtle)}@media (hover:hover){.hover\:border-\[var\(--app-border\)\]:hover{border-color:var(--app-border)}.hover\:border-\[var\(--app-border-strong\)\]:hover{border-color:var(--app-border-strong)}.hover\:border-\[var\(--app-text-muted\)\]:hover{border-color:var(--app-text-muted)}.hover\:bg-\[var\(--app-accent\)\]:hover{background-color:var(--app-accent)}.hover\:bg-\[var\(--app-accent-strong\)\]:hover{background-color:var(--app-accent-strong)}.hover\:bg-\[var\(--app-danger\)\]:hover{background-color:var(--app-danger)}.hover\:bg-\[var\(--app-danger-strong\)\]:hover{background-color:var(--app-danger-strong)}.hover\:bg-\[var\(--app-panel-elevated\)\]:hover,.hover\:bg-\[var\(--app-panel-elevated\)\]\/30:hover{background-color:var(--app-panel-elevated)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[var\(--app-panel-elevated\)\]\/30:hover{background-color:color-mix(in oklab, var(--app-panel-elevated) 30%, transparent)}}.hover\:bg-\[var\(--app-panel-muted\)\]:hover{background-color:var(--app-panel-muted)}.hover\:bg-\[var\(--app-success-soft-bg-subtle\)\]:hover{background-color:var(--app-success-soft-bg-subtle)}.hover\:bg-\[var\(--app-warning-soft-bg-subtle\)\]:hover{background-color:var(--app-warning-soft-bg-subtle)}.hover\:bg-white\/14:hover{background-color:#ffffff24}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/14:hover{background-color:color-mix(in oklab, var(--color-white) 14%, transparent)}}.hover\:bg-white\/\[0\.1\]:hover{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/\[0\.1\]:hover{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/\[0\.04\]:hover{background-color:color-mix(in oklab, var(--color-white) 4%, transparent)}}.hover\:bg-white\/\[0\.05\]:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/\[0\.05\]:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:bg-white\/\[0\.06\]:hover{background-color:#ffffff0f}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/\[0\.06\]:hover{background-color:color-mix(in oklab, var(--color-white) 6%, transparent)}}.hover\:text-\[var\(--app-accent\)\]:hover{color:var(--app-accent)}.hover\:text-\[var\(--app-danger\)\]:hover{color:var(--app-danger)}.hover\:text-\[var\(--app-danger-soft-text\)\]:hover{color:var(--app-danger-soft-text)}.hover\:text-\[var\(--app-success\)\]:hover{color:var(--app-success)}.hover\:text-\[var\(--app-success-soft-text\)\]:hover{color:var(--app-success-soft-text)}.hover\:text-\[var\(--app-text\)\]:hover{color:var(--app-text)}.hover\:text-\[var\(--app-warning\)\]:hover{color:var(--app-warning)}.hover\:text-\[var\(--app-warning-soft-text\)\]:hover{color:var(--app-warning-soft-text)}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-\[var\(--app-shadow-lg\)\]:hover{--tw-shadow:var(--app-shadow-lg);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}.focus\:not-sr-only:focus{clip-path:none;white-space:normal;width:auto;height:auto;margin:0;padding:0;position:static;overflow:visible}.focus\:fixed:focus{position:fixed}.focus\:top-4:focus{top:calc(var(--spacing) * 4)}.focus\:left-4:focus{left:calc(var(--spacing) * 4)}.focus\:z-50:focus{z-index:50}.focus\:rounded-md:focus{border-radius:.75rem}.focus\:border-\[var\(--app-accent\)\]:focus{border-color:var(--app-accent)}.focus\:border-\[var\(--app-border-strong\)\]:focus{border-color:var(--app-border-strong)}.focus\:bg-\[var\(--app-accent\)\]:focus{background-color:var(--app-accent)}.focus\:bg-\[var\(--app-panel-elevated\)\]:focus{background-color:var(--app-panel-elevated)}.focus\:px-4:focus{padding-inline:calc(var(--spacing) * 4)}.focus\:py-2:focus{padding-block:calc(var(--spacing) * 2)}.focus\:text-sm:focus{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.focus\:font-medium:focus{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.focus\:text-\[var\(--app-text\)\]:focus{color:var(--app-text)}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-\[var\(--app-accent\)\]:focus{--tw-ring-color:var(--app-accent)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:ring-offset-\[var\(--app-canvas\)\]:focus{--tw-ring-offset-color:var(--app-canvas)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-blue-500:focus-visible{--tw-ring-color:var(--color-blue-500)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-\[var\(--app-canvas\)\]:focus-visible{--tw-ring-offset-color:var(--app-canvas)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:.5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:.5rem}.data-\[state\=active\]\:text-\[var\(--app-text\)\][data-state=active]{color:var(--app-text)}.data-\[state\=active\]\:shadow-\[var\(--app-shadow-sm\)\][data-state=active]{--tw-shadow:var(--app-shadow-sm);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-\[var\(--app-accent\)\][data-state=checked]{background-color:var(--app-accent)}.data-\[state\=closed\]\:animate-out[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-name:exit;animation-duration:.15s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=open\]\:bg-\[var\(--app-panel-elevated\)\][data-state=open]{background-color:var(--app-panel-elevated)}.data-\[state\=open\]\:animate-in[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-name:enter;animation-duration:.15s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y:-48%}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-\[var\(--app-panel-muted\)\][data-state=unchecked]{background-color:var(--app-panel-muted)}@media (width>=40rem){.sm\:mt-0{margin-top:calc(var(--spacing) * 0)}.sm\:inline{display:inline}.sm\:max-w-\[180px\]{max-width:180px}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[repeat\(3\,minmax\(0\,1fr\)\)_auto\]{grid-template-columns:repeat(3,minmax(0,1fr)) auto}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}:where(.sm\:space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:1rem}.sm\:text-left{text-align:left}}@media (width>=48rem){.md\:inline{display:inline}.md\:w-16{width:calc(var(--spacing) * 16)}.md\:w-48{width:calc(var(--spacing) * 48)}.md\:w-56{width:calc(var(--spacing) * 56)}.md\:shrink-0{flex-shrink:0}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:items-start{align-items:flex-start}.md\:justify-between{justify-content:space-between}.md\:justify-end{justify-content:flex-end}.md\:gap-3{gap:calc(var(--spacing) * 3)}.md\:self-auto{align-self:auto}.md\:text-right{text-align:right}}@media (width>=64rem){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:w-auto{width:auto}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:flex-row{flex-direction:row}.lg\:items-end{align-items:flex-end}.lg\:items-start{align-items:flex-start}.lg\:justify-between{justify-content:space-between}.lg\:justify-end{justify-content:flex-end}.lg\:p-5{padding:calc(var(--spacing) * 5)}.lg\:px-4{padding-inline:calc(var(--spacing) * 4)}.lg\:px-5{padding-inline:calc(var(--spacing) * 5)}.lg\:px-6{padding-inline:calc(var(--spacing) * 6)}.lg\:py-3{padding-block:calc(var(--spacing) * 3)}.lg\:py-5{padding-block:calc(var(--spacing) * 5)}.lg\:py-6{padding-block:calc(var(--spacing) * 6)}.lg\:opacity-0{opacity:0}.lg\:group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.lg\:group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}}@media (width>=80rem){.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(87% 0 0);--chart-2:oklch(55.6% 0 0);--chart-3:oklch(43.9% 0 0);--chart-4:oklch(37.1% 0 0);--chart-5:oklch(26.9% 0 0);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0);--app-canvas:oklch(19% .012 258);--app-panel:oklch(24.8% .015 258);--app-panel-elevated:oklch(28.4% .021 258);--app-panel-muted:oklch(22.4% .011 258);--app-accent-surface:oklch(34% .055 247);--app-critical-surface:oklch(31% .07 23);--app-border:oklch(38% .018 258/.82);--app-border-strong:oklch(47% .025 258/.95);--app-text:oklch(96% .01 258);--app-text-muted:oklch(76% .018 258);--app-text-subtle:oklch(63% .016 258);--app-kicker:oklch(78% .07 229);--app-accent:oklch(71% .16 235);--app-accent-strong:oklch(76% .18 232);--app-success:oklch(76% .15 158);--app-warning:oklch(83% .16 85);--app-danger:oklch(72% .18 28);--app-header-bg:oklch(22% .014 258);--app-sidebar-bg:oklch(20% .014 258);--app-shadow-sm:0 1px 2px #0206172e, 0 1px 1px #0206171f;--app-shadow-md:0 8px 24px #0206173d;--app-shadow-lg:0 16px 40px #02061742;--app-shadow-accent:0 8px 24px var(--app-accent)}@supports (color:color-mix(in lab, red, red)){.dark{--app-shadow-accent:0 8px 24px color-mix(in oklch, var(--app-accent) 26%, transparent)}}.dark{--app-shadow-danger:0 8px 24px var(--app-danger)}@supports (color:color-mix(in lab, red, red)){.dark{--app-shadow-danger:0 8px 24px color-mix(in oklch, var(--app-danger) 24%, transparent)}}.dark{--app-tracking-micro:.16em;--app-tracking-kicker:.18em;--app-accent-strong-hover:oklch(70% .19 232);--app-danger-strong:oklch(65% .2 26);--app-warning-strong:oklch(76% .17 85);--app-danger-soft-bg:oklch(28% .06 26);--app-danger-soft-bg-subtle:oklch(24% .035 26);--app-danger-soft-border:oklch(42% .09 26);--app-danger-soft-text:oklch(85% .12 26);--app-success-soft-bg:oklch(28% .04 158);--app-success-soft-bg-subtle:oklch(24% .025 158);--app-success-soft-border:oklch(42% .06 158);--app-success-soft-text:oklch(85% .11 158);--app-warning-soft-bg:oklch(28% .035 85);--app-warning-soft-bg-subtle:oklch(24% .02 85);--app-warning-soft-border:oklch(44% .06 85);--app-warning-soft-text:oklch(87% .13 85);--app-accent-soft-bg:oklch(30% .08 235);--app-accent-soft-border:oklch(45% .11 235);--app-indicator-alert:oklch(72% .16 55);--app-log-adam:oklch(72% .16 295);--app-log-manager:oklch(78% .14 210);--app-log-scheduler:oklch(78% .14 60);--app-log-ws:oklch(76% .13 190);--app-log-store:oklch(86% .14 95);--app-log-embedding:oklch(78% .14 340)}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:radial-gradient(80% 55% at 18% -8%, var(--app-accent) 0%, transparent 52%), var(--app-canvas);min-height:100vh;font-family:IBM Plex Sans,Avenir Next,Segoe UI,system-ui,sans-serif}@supports (color:color-mix(in lab, red, red)){body{background:radial-gradient(80% 55% at 18% -8%, color-mix(in oklch, var(--app-accent) 10%, transparent) 0%, transparent 52%), var(--app-canvas)}}body{color:var(--app-text);background-attachment:fixed}#root{min-height:100vh}.surface-panel{background:var(--app-panel);border:1px solid var(--app-border);box-shadow:var(--app-shadow-md)}.surface-panel-elevated{background:linear-gradient(180deg, oklch(96% 0 0/.06) 0%, transparent 28%), var(--app-panel-elevated);border:1px solid var(--app-border-strong);box-shadow:var(--app-shadow-lg)}.surface-panel-muted{background:var(--app-panel-muted);border:1px solid var(--app-border)}.surface-accent{background:linear-gradient(135deg,oklch(42% .1 232/.7),#0000 58%),oklch(34% .048 247);border:1px solid oklch(50% .12 235/.85)}.surface-critical{background:linear-gradient(135deg,oklch(52% .18 26/.62),#0000 58%),oklch(31% .06 23);border:1px solid oklch(54% .16 26/.82)}.text-kicker{color:var(--app-kicker);letter-spacing:var(--app-tracking-kicker);text-transform:uppercase;font-size:.7rem;font-weight:600}.text-title{color:var(--app-text);font-size:clamp(1.5rem,1.8vw,2rem);font-weight:600;line-height:1.05}.text-section-label{color:var(--app-text);letter-spacing:var(--app-tracking-micro);text-transform:uppercase;font-size:.92rem;font-weight:600}.surface-focus-metric{background:oklch(96% 0 0/.05);border:1px solid oklch(100% 0 0/.08)}.text-meta{color:var(--app-text-subtle);font-size:.78rem}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-slate-700);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-slate-600)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0), var(--tw-enter-translate-y,0), 0) scale3d(var(--tw-enter-scale,1), var(--tw-enter-scale,1), var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0), var(--tw-exit-translate-y,0), 0) scale3d(var(--tw-exit-scale,1), var(--tw-exit-scale,1), var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}