@xopcai/xopc 0.0.24 → 0.0.26

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 (109) hide show
  1. package/dist/extensions/feishu/xopc.extension.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/agents-Clv9i1Kb.js +216 -0
  4. package/dist/gateway/static/root/assets/agents-Clv9i1Kb.js.map +1 -0
  5. package/dist/gateway/static/root/assets/{apps-page-tZz69XM3.js → apps-page-DqclV-PP.js} +2 -2
  6. package/dist/gateway/static/root/assets/{apps-page-tZz69XM3.js.map → apps-page-DqclV-PP.js.map} +1 -1
  7. package/dist/gateway/static/root/assets/{channels-settings-BAvk9-aK.js → channels-settings-CLyTYjrz.js} +3 -3
  8. package/dist/gateway/static/root/assets/{channels-settings-BAvk9-aK.js.map → channels-settings-CLyTYjrz.js.map} +1 -1
  9. package/dist/gateway/static/root/assets/cron-page-CU8lutMt.js +2 -0
  10. package/dist/gateway/static/root/assets/{cron-page-CANqvhK7.js.map → cron-page-CU8lutMt.js.map} +1 -1
  11. package/dist/gateway/static/root/assets/{cron-utils-DyOO6TdN.js → cron-utils-_UjiWax6.js} +2 -2
  12. package/dist/gateway/static/root/assets/{cron-utils-DyOO6TdN.js.map → cron-utils-_UjiWax6.js.map} +1 -1
  13. package/dist/gateway/static/root/assets/dist-Xqb4IGWC.js +2 -0
  14. package/dist/gateway/static/root/assets/{dist-Brod9LF3.js.map → dist-Xqb4IGWC.js.map} +1 -1
  15. package/dist/gateway/static/root/assets/{extension-debug-page-CDD7ozsC.js → extension-debug-page-CtTUkAmw.js} +2 -2
  16. package/dist/gateway/static/root/assets/{extension-debug-page-CDD7ozsC.js.map → extension-debug-page-CtTUkAmw.js.map} +1 -1
  17. package/dist/gateway/static/root/assets/{extension-page-UUFMjoWf.js → extension-page-C-aQU8qR.js} +2 -2
  18. package/dist/gateway/static/root/assets/{extension-page-UUFMjoWf.js.map → extension-page-C-aQU8qR.js.map} +1 -1
  19. package/dist/gateway/static/root/assets/{extension-settings-page-CP9JNc4m.js → extension-settings-page-b0y9aY-q.js} +2 -2
  20. package/dist/gateway/static/root/assets/extension-settings-page-b0y9aY-q.js.map +1 -0
  21. package/dist/gateway/static/root/assets/index-DhSFfSNN.css +1 -0
  22. package/dist/gateway/static/root/assets/index-Gr2HWo-G.js +4734 -0
  23. package/dist/gateway/static/root/assets/index-Gr2HWo-G.js.map +1 -0
  24. package/dist/gateway/static/root/assets/logs-page-DRI33XK4.js +2 -0
  25. package/dist/gateway/static/root/assets/{logs-page-Cr0eCGb4.js.map → logs-page-DRI33XK4.js.map} +1 -1
  26. package/dist/gateway/static/root/assets/sessions-page-Cryg-36Z.js +2 -0
  27. package/dist/gateway/static/root/assets/{sessions-page-DwLHN5GJ.js.map → sessions-page-Cryg-36Z.js.map} +1 -1
  28. package/dist/gateway/static/root/assets/settings-page-DFNKT9yg.js +2 -0
  29. package/dist/gateway/static/root/assets/settings-page-DFNKT9yg.js.map +1 -0
  30. package/dist/gateway/static/root/assets/skills-page-D4gfh0Ih.js +3 -0
  31. package/dist/gateway/static/root/assets/{skills-page-DgBYvH6B.js.map → skills-page-D4gfh0Ih.js.map} +1 -1
  32. package/dist/gateway/static/root/index.html +2 -2
  33. package/dist/package.js +1 -1
  34. package/dist/src/agent/memory/dreaming/config.d.ts +48 -0
  35. package/dist/src/agent/memory/dreaming/config.js +86 -0
  36. package/dist/src/agent/memory/dreaming/config.js.map +1 -0
  37. package/dist/src/agent/memory/dreaming/constants.d.ts +29 -0
  38. package/dist/src/agent/memory/dreaming/constants.js +38 -0
  39. package/dist/src/agent/memory/dreaming/constants.js.map +1 -0
  40. package/dist/src/agent/memory/dreaming/deep-promotion.d.ts +21 -0
  41. package/dist/src/agent/memory/dreaming/deep-promotion.js +271 -0
  42. package/dist/src/agent/memory/dreaming/deep-promotion.js.map +1 -0
  43. package/dist/src/agent/memory/dreaming/events.d.ts +36 -0
  44. package/dist/src/agent/memory/dreaming/events.js +44 -0
  45. package/dist/src/agent/memory/dreaming/events.js.map +1 -0
  46. package/dist/src/agent/memory/dreaming/last-run.d.ts +80 -0
  47. package/dist/src/agent/memory/dreaming/last-run.js +98 -0
  48. package/dist/src/agent/memory/dreaming/last-run.js.map +1 -0
  49. package/dist/src/agent/memory/dreaming/light-sweep.d.ts +19 -0
  50. package/dist/src/agent/memory/dreaming/light-sweep.js +328 -0
  51. package/dist/src/agent/memory/dreaming/light-sweep.js.map +1 -0
  52. package/dist/src/agent/memory/dreaming/preview.d.ts +28 -0
  53. package/dist/src/agent/memory/dreaming/preview.js +97 -0
  54. package/dist/src/agent/memory/dreaming/preview.js.map +1 -0
  55. package/dist/src/agent/memory/dreaming/rem-patterns.d.ts +21 -0
  56. package/dist/src/agent/memory/dreaming/rem-patterns.js +286 -0
  57. package/dist/src/agent/memory/dreaming/rem-patterns.js.map +1 -0
  58. package/dist/src/agent/memory/dreaming/short-term-store.d.ts +65 -0
  59. package/dist/src/agent/memory/dreaming/short-term-store.js +197 -0
  60. package/dist/src/agent/memory/dreaming/short-term-store.js.map +1 -0
  61. package/dist/src/agent/memory/dreaming/utils.d.ts +42 -0
  62. package/dist/src/agent/memory/dreaming/utils.js +141 -0
  63. package/dist/src/agent/memory/dreaming/utils.js.map +1 -0
  64. package/dist/src/agent/orchestration/agent-orchestrator.js +59 -0
  65. package/dist/src/agent/orchestration/agent-orchestrator.js.map +1 -1
  66. package/dist/src/agent/service.d.ts +6 -0
  67. package/dist/src/agent/service.js +78 -0
  68. package/dist/src/agent/service.js.map +1 -1
  69. package/dist/src/agent/tools/dreaming-tool.d.ts +7 -0
  70. package/dist/src/agent/tools/dreaming-tool.js +102 -0
  71. package/dist/src/agent/tools/dreaming-tool.js.map +1 -0
  72. package/dist/src/agent/tools/factory.js +5 -0
  73. package/dist/src/agent/tools/factory.js.map +1 -1
  74. package/dist/src/agent/tools/index.d.ts +1 -0
  75. package/dist/src/agent/tools/index.js +2 -1
  76. package/dist/src/agent/tools/memory-tool.js +9 -2
  77. package/dist/src/agent/tools/memory-tool.js.map +1 -1
  78. package/dist/src/config/schema.d.ts +93 -0
  79. package/dist/src/config/schema.js +42 -1
  80. package/dist/src/config/schema.js.map +1 -1
  81. package/dist/src/gateway/hono/lib/config-payload.d.ts +31 -0
  82. package/dist/src/gateway/hono/routes/config.js +48 -0
  83. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  84. package/dist/src/gateway/hono/routes/dreaming.d.ts +3 -0
  85. package/dist/src/gateway/hono/routes/dreaming.js +288 -0
  86. package/dist/src/gateway/hono/routes/dreaming.js.map +1 -0
  87. package/dist/src/gateway/hono/routes/index.js +2 -0
  88. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  89. package/dist/src/gateway/hono/routes/models.js +26 -1
  90. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  91. package/dist/src/gateway/hono/routes/public-gateway.js +1 -0
  92. package/dist/src/gateway/hono/routes/public-gateway.js.map +1 -1
  93. package/dist/src/gateway/lock.js +1 -1
  94. package/dist/src/gateway/service.js +7 -0
  95. package/dist/src/gateway/service.js.map +1 -1
  96. package/package.json +1 -1
  97. package/dist/gateway/static/root/assets/agents-CiZMJZRp.js +0 -216
  98. package/dist/gateway/static/root/assets/agents-CiZMJZRp.js.map +0 -1
  99. package/dist/gateway/static/root/assets/cron-page-CANqvhK7.js +0 -2
  100. package/dist/gateway/static/root/assets/dist-Brod9LF3.js +0 -2
  101. package/dist/gateway/static/root/assets/extension-settings-page-CP9JNc4m.js.map +0 -1
  102. package/dist/gateway/static/root/assets/index-BZvlG48D.js +0 -150
  103. package/dist/gateway/static/root/assets/index-BZvlG48D.js.map +0 -1
  104. package/dist/gateway/static/root/assets/index-DxkgyT8R.css +0 -1
  105. package/dist/gateway/static/root/assets/logs-page-Cr0eCGb4.js +0 -2
  106. package/dist/gateway/static/root/assets/sessions-page-DwLHN5GJ.js +0 -2
  107. package/dist/gateway/static/root/assets/settings-page-B3O3R0E4.js +0 -2
  108. package/dist/gateway/static/root/assets/settings-page-B3O3R0E4.js.map +0 -1
  109. package/dist/gateway/static/root/assets/skills-page-DgBYvH6B.js +0 -3
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{t as r}from"./cn-BMCV0OMB.js";import{H as i,Kn as a,Kt as o,Pn as s,Qt as c,Sr as ee,U as te,V as ne,Wr as re,Xn as ie,Zt as ae,at as l,cr as u,ct as d,d as oe,dn as se,dt as f,fr as ce,gr as le,h as ue,in as p,it as de,jn as m,l as fe,lt as h,m as pe,nn as g,nr as me,on as he,ot as ge,qt as _e,rt as ve,sn as _,tn as v,ut as ye,xn as be}from"./index-BZvlG48D.js";import{C as xe,S as Se,_ as Ce,a as we,b as Te,c as Ee,d as De,f as Oe,g as ke,h as Ae,i as je,l as Me,m as Ne,n as Pe,o as Fe,p as Ie,r as Le,s as Re,t as ze,u as Be,v as Ve,x as He,y as Ue}from"./cron-utils-DyOO6TdN.js";import{a as We,i as Ge,n as Ke,r as qe,t as Je}from"./dist-Brod9LF3.js";var y=e(t(),1);function Ye(e,t){let n=e.templates;if(!n||typeof n!=`object`)return;let r=n[t];if(!r||typeof r!=`object`)return;let i=r.title?.trim(),a=r.prompt?.trim();if(!(!i||!a))return{title:i,description:(r.description??``).trim(),prompt:a}}var b=[`daily`,`monitoring`,`reports`,`automation`],Xe=[{templateId:`morning_briefing`,category:`daily`,defaultSchedule:`0 7 * * 1-5`,defaultSessionTarget:`isolated`},{templateId:`standup_prep`,category:`daily`,defaultSchedule:`0 8 * * 1-5`,defaultSessionTarget:`isolated`},{templateId:`end_of_day_wrap_up`,category:`daily`,defaultSchedule:`0 18 * * 1-5`,defaultSessionTarget:`isolated`},{templateId:`inbox_triage`,category:`daily`,defaultSchedule:`30 8 * * 1-5`,defaultSessionTarget:`isolated`},{templateId:`competitor_watch`,category:`monitoring`,defaultSchedule:`0 9 * * 1`,defaultSessionTarget:`isolated`},{templateId:`trending_topics_monitor`,category:`monitoring`,defaultSchedule:`0 10 * * 1-5`,defaultSessionTarget:`isolated`},{templateId:`tech_radar_stack`,category:`monitoring`,defaultSchedule:`0 11 * * 3`,defaultSessionTarget:`isolated`},{templateId:`dependency_check_audit`,category:`monitoring`,defaultSchedule:`0 9 * * 0`,defaultSessionTarget:`isolated`},{templateId:`weekly_review`,category:`reports`,defaultSchedule:`0 17 * * 5`,defaultSessionTarget:`isolated`},{templateId:`code_quality_report`,category:`reports`,defaultSchedule:`0 14 * * 1`,defaultSessionTarget:`isolated`},{templateId:`git_activity_summary`,category:`reports`,defaultSchedule:`0 9 * * 1`,defaultSessionTarget:`isolated`},{templateId:`user_feedback_digest`,category:`reports`,defaultSchedule:`0 16 * * 5`,defaultSessionTarget:`isolated`},{templateId:`stale_todo_or_issue_sweep`,category:`automation`,defaultSchedule:`0 10 * * 2`,defaultSessionTarget:`isolated`},{templateId:`release_notes_or_changelog_draft`,category:`automation`,defaultSchedule:`0 10 * * 4`,defaultSessionTarget:`isolated`},{templateId:`workspace_cleanup_suggestions`,category:`automation`,defaultSchedule:`30 18 * * 5`,defaultSessionTarget:`isolated`},{templateId:`smoke_or_ci_health_reminder`,category:`automation`,defaultSchedule:`0 8 * * 1`,defaultSessionTarget:`isolated`}];function Ze(e){return Xe.find(t=>t.templateId===e)}var x=n();function Qe(e){let{cron:t,localeTag:n,scheduleBadgeLabels:i,categoryFilter:a,onCategoryFilterChange:o,onSelectTemplate:s}=e,c=a===`all`?[...Xe]:Xe.filter(e=>e.category===a);return(0,x.jsxs)(`div`,{className:`flex w-full flex-col gap-4`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap gap-2`,role:`group`,"aria-label":t.fromTemplate,children:[(0,x.jsx)(_,{type:`button`,variant:a===`all`?`secondary`:`ghost`,className:`h-8 rounded-full px-3 py-1.5 text-xs`,onClick:()=>o(`all`),children:t.templateFilterAll}),b.map(e=>(0,x.jsx)(_,{type:`button`,variant:a===e?`secondary`:`ghost`,className:`h-8 rounded-full px-3 py-1.5 text-xs`,onClick:()=>o(e),children:t.templateCategories[e]},e))]}),c.length===0?(0,x.jsx)(`p`,{className:`text-center text-sm text-fg-muted`,children:t.templatesEmptyHint}):(0,x.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:c.map(e=>{let a=Ye(t,e.templateId);if(!a)return null;let o=Fe({schedule:e.defaultSchedule,timezone:void 0,next_run:void 0},n,i);return(0,x.jsxs)(`button`,{type:`button`,className:r(`flex flex-col gap-1.5 rounded-xl border border-edge-subtle bg-surface-base p-4 text-left transition-colors`,`hover:border-accent/40 hover:bg-surface-hover`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`),onClick:()=>s(e.templateId),"aria-label":`${t.templateCategories[e.category]} — ${a.title}`,children:[(0,x.jsx)(`span`,{className:`font-semibold text-fg`,children:a.title}),(0,x.jsx)(`span`,{className:`line-clamp-2 text-sm text-fg-muted`,children:a.description}),(0,x.jsx)(`span`,{className:`mt-1 flex items-center gap-1 text-xs text-fg-muted`,children:(0,x.jsx)(`span`,{className:`tabular-nums`,children:o})})]},e.templateId)})})]})}var S=Me(),C=r(p,`min-w-0 shrink text-xs sm:min-w-[7rem] sm:max-w-[11rem]`),w=r(`h-9 min-w-[6.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg`,v,`dark:bg-surface-panel`),$e=r(`h-9 min-w-[9.5rem] shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-sm text-fg`,v),T=r(`h-9 w-14 shrink-0 rounded-lg border border-edge-subtle bg-surface-panel px-2 py-1.5 text-center text-sm tabular-nums text-fg`,v),et=r(`min-h-[2.5rem] w-full rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 font-mono text-xs text-fg`,v);function tt(){let e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function E(e){return Array.isArray(e)?e.filter(e=>typeof e==`number`).sort((e,t)=>e-t):[]}function D(e){if(e.length<2)return null;let t=e[1]-e[0];if(t<=0)return null;for(let n=2;n<e.length;n++)if(e[n]-e[n-1]!==t)return null;return t}function nt(e){let t=[];for(let n=0;n<7;n++)e[n]&&t.push(n===6?0:n+1);return t.length===0?`1`:t.sort((e,t)=>e-t).join(`,`)}function O(e){let t=[!1,!1,!1,!1,!1,!1,!1];for(let n of e){let e=n===0||n===7?6:n-1;e>=0&&e<=6&&(t[e]=!0)}return t}function rt(e){let t=e.trim(),n={mode:`custom`,intervalKind:`minutes`,onceDate:tt(),intervalMinutes:5,intervalHours:2,minute:0,hour:9,weekDays:[!0,!0,!0,!0,!0,!1,!1],dayOfMonth:1,rawCron:t};if(!t)return{...n,mode:`interval`,rawCron:`*/5 * * * *`};try{let e=S.CronExpressionParser.parse(t).fields,r=E(e.minute.values),i=E(e.hour.values),a=E(e.dayOfMonth.values),o=E(e.month.values),s=E(e.dayOfWeek.values);if(r.length===60&&e.hour.isWildcard&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&e.dayOfWeek.isWildcard)return{...n,mode:`interval`,intervalKind:`minutes`,intervalMinutes:1,rawCron:t};if(!e.minute.isWildcard&&e.hour.isWildcard&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&e.dayOfWeek.isWildcard&&r.length>1){let e=D(r);if(e!=null&&e>0)return{...n,mode:`interval`,intervalKind:`minutes`,intervalMinutes:e,rawCron:t}}if(!e.minute.isWildcard&&r.length===1&&!e.hour.isWildcard&&i.length>1&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&e.dayOfWeek.isWildcard){let e=D(i);if(e!=null&&e>0)return{...n,mode:`interval`,intervalKind:`hours`,intervalHours:e,minute:r[0],rawCron:t}}if(!e.minute.isWildcard&&r.length===1&&e.hour.isWildcard&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&e.dayOfWeek.isWildcard&&i.length===24)return{...n,mode:`hourly`,minute:r[0],rawCron:t};if(r.length===1&&i.length===1&&a.length===1&&o.length===1&&!e.dayOfMonth.isWildcard&&!e.month.isWildcard&&e.dayOfWeek.isWildcard){let e=new Date().getFullYear(),s=o[0],c=a[0],ee=`${e}-${String(s).padStart(2,`0`)}-${String(c).padStart(2,`0`)}`;return{...n,mode:`no_repeat`,minute:r[0],hour:i[0],onceDate:ee,rawCron:t}}if(r.length===1&&i.length===1&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&e.dayOfWeek.isWildcard)return{...n,mode:`daily`,minute:r[0],hour:i[0],rawCron:t};if(r.length===1&&i.length===1&&e.dayOfMonth.isWildcard&&e.month.isWildcard&&!e.dayOfWeek.isWildcard&&s.length>0)return{...n,mode:`weekly`,minute:r[0],hour:i[0],weekDays:O(s),rawCron:t};if(r.length===1&&i.length===1&&!e.dayOfMonth.isWildcard&&a.length===1&&e.month.isWildcard&&e.dayOfWeek.isWildcard)return{...n,mode:`monthly`,minute:r[0],hour:i[0],dayOfMonth:a[0],rawCron:t}}catch{}return n}function it(e){let t=(e,t,n)=>Math.min(n,Math.max(t,e));switch(e.mode){case`custom`:return e.rawCron.trim()||`*/5 * * * *`;case`no_repeat`:{let n=e.onceDate.split(`-`);if(n.length===3){let r=t(parseInt(n[2],10),1,31),i=t(parseInt(n[1],10),1,12);return`${t(e.minute,0,59)} ${t(e.hour,0,23)} ${r} ${i} *`}return`0 9 1 1 *`}case`interval`:if(e.intervalKind===`hours`){let n=t(Math.round(e.intervalHours)||1,1,23);return`${t(e.minute,0,59)} */${n} * * *`}return`*/${t(Math.round(e.intervalMinutes)||5,1,59)} * * * *`;case`hourly`:return`${t(e.minute,0,59)} * * * *`;case`daily`:return`${t(e.minute,0,59)} ${t(e.hour,0,23)} * * *`;case`weekly`:return`${t(e.minute,0,59)} ${t(e.hour,0,23)} * * ${nt(e.weekDays)}`;case`monthly`:return`${t(e.minute,0,59)} ${t(e.hour,0,23)} ${t(Math.round(e.dayOfMonth)||1,1,31)} * *`;default:return`*/5 * * * *`}}function at({value:e,onChange:t,labels:n,disabled:i}){let a=(0,y.useMemo)(()=>rt(e),[e]),[o,s]=(0,y.useState)(a.mode),[c,ee]=(0,y.useState)(a.intervalKind),[te,ne]=(0,y.useState)(a.onceDate),[re,ie]=(0,y.useState)(a.intervalMinutes),[ae,l]=(0,y.useState)(a.intervalHours),[u,d]=(0,y.useState)(a.minute),[oe,se]=(0,y.useState)(a.hour),[f,ce]=(0,y.useState)(a.weekDays),[le,ue]=(0,y.useState)(a.dayOfMonth),[p,de]=(0,y.useState)(a.rawCron),[m,fe]=(0,y.useState)(null),[h,pe]=(0,y.useState)(null);(0,y.useEffect)(()=>{let t=rt(e);s(t.mode),ee(t.intervalKind),ne(t.onceDate),ie(t.intervalMinutes),l(t.intervalHours),d(t.minute),se(t.hour),ce(t.weekDays),ue(t.dayOfMonth),de(t.rawCron),fe(null),pe(null)},[e]);let g=(0,y.useCallback)(e=>{t(it({mode:o,intervalKind:c,onceDate:te,intervalMinutes:re,intervalHours:ae,minute:u,hour:oe,weekDays:f,dayOfMonth:le,rawCron:p,...e}))},[o,c,te,re,ae,u,oe,f,le,p,t]),me=`${String(oe).padStart(2,`0`)}:${String(u).padStart(2,`0`)}`,he=e=>{let t=e.target.value;if(!t)return;let[n,r]=t.split(`:`).map(e=>parseInt(e,10));Number.isNaN(n)||Number.isNaN(r)||g({minute:r,hour:n})},ge=(0,x.jsxs)(`div`,{className:`flex min-w-0 flex-nowrap items-center gap-2 overflow-x-auto pb-0.5`,children:[(0,x.jsxs)(`select`,{className:C,disabled:i,value:o,onChange:e=>{let t=e.target.value;s(t),g({mode:t})},"aria-label":n.scheduleTimeLabel,children:[(0,x.jsx)(`option`,{value:`no_repeat`,children:n.modeNoRepeat}),(0,x.jsx)(`option`,{value:`interval`,children:n.modeInterval}),(0,x.jsx)(`option`,{value:`hourly`,children:n.modeHourly}),(0,x.jsx)(`option`,{value:`daily`,children:n.modeDaily}),(0,x.jsx)(`option`,{value:`weekly`,children:n.modeWeekly}),(0,x.jsx)(`option`,{value:`monthly`,children:n.modeMonthly}),(0,x.jsx)(`option`,{value:`custom`,children:n.modeCustom})]}),o===`no_repeat`&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`input`,{type:`date`,disabled:i,className:$e,value:te,onChange:e=>{let t=e.target.value;ne(t),g({onceDate:t})},"aria-label":n.modeNoRepeat}),(0,x.jsx)(`input`,{type:`time`,step:60,disabled:i,className:w,value:me,onChange:he,"aria-label":n.scheduleTimeLabel})]}),o===`interval`&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`select`,{className:r(C,`w-auto min-w-[5rem]`),disabled:i,value:c,onChange:e=>{let t=e.target.value;ee(t),fe(null),pe(null),g({intervalKind:t})},"aria-label":n.modeInterval,children:[(0,x.jsx)(`option`,{value:`minutes`,children:n.intervalKindMinutes}),(0,x.jsx)(`option`,{value:`hours`,children:n.intervalKindHours})]}),c===`minutes`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`input`,{type:`number`,min:1,max:59,disabled:i,className:T,value:m??String(re),onChange:e=>{let t=e.target.value;fe(t);let n=parseInt(t,10);Number.isFinite(n)&&n>=1&&n<=59&&(ie(n),g({intervalMinutes:n}))},onBlur:()=>{if(m===null)return;let e=parseInt(m,10),t=!Number.isFinite(e)||e<1?5:Math.min(59,Math.max(1,Math.round(e)));ie(t),g({intervalMinutes:t}),fe(null)},"aria-label":n.intervalMinutes}),(0,x.jsx)(`span`,{className:`shrink-0 text-sm text-fg-muted`,children:n.minuteUnit})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`input`,{type:`number`,min:1,max:23,disabled:i,className:T,value:h??String(ae),onChange:e=>{let t=e.target.value;pe(t);let n=parseInt(t,10);Number.isFinite(n)&&n>=1&&n<=23&&(l(n),g({intervalHours:n}))},onBlur:()=>{if(h===null)return;let e=parseInt(h,10),t=!Number.isFinite(e)||e<1?2:Math.min(23,Math.max(1,Math.round(e)));l(t),g({intervalHours:t}),pe(null)},"aria-label":n.intervalHours}),(0,x.jsx)(`span`,{className:`shrink-0 text-sm text-fg-muted`,children:n.hourUnit}),(0,x.jsx)(`select`,{className:r(C,`w-auto min-w-[4rem]`),disabled:i,value:u,onChange:e=>{let t=parseInt(e.target.value,10);d(t),g({minute:t})},"aria-label":n.minuteAtHour,children:Array.from({length:60},(e,t)=>(0,x.jsx)(`option`,{value:t,children:String(t).padStart(2,`0`)},t))}),(0,x.jsx)(`span`,{className:`shrink-0 text-sm text-fg-muted`,children:n.minuteUnit})]})]}),o===`daily`&&(0,x.jsx)(`input`,{type:`time`,step:60,disabled:i,className:w,value:me,onChange:he,"aria-label":n.scheduleTimeLabel}),o===`weekly`&&(0,x.jsx)(`input`,{type:`time`,step:60,disabled:i,className:w,value:me,onChange:he,"aria-label":n.scheduleTimeLabel}),o===`monthly`&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`select`,{className:r(C,`w-auto min-w-[4.5rem]`),disabled:i,value:le,onChange:e=>{let t=parseInt(e.target.value,10);ue(t),g({dayOfMonth:t})},"aria-label":n.dayOfMonth,children:Array.from({length:31},(e,t)=>t+1).map(e=>(0,x.jsx)(`option`,{value:e,children:e},e))}),(0,x.jsx)(`input`,{type:`time`,step:60,disabled:i,className:w,value:me,onChange:he,"aria-label":n.scheduleTimeLabel})]}),o===`hourly`&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`select`,{className:r(C,`w-auto min-w-[4rem]`),disabled:i,value:u,onChange:e=>{let t=parseInt(e.target.value,10);d(t),g({minute:t})},"aria-label":n.minuteAtHour,children:Array.from({length:60},(e,t)=>(0,x.jsx)(`option`,{value:t,children:String(t).padStart(2,`0`)},t))}),(0,x.jsx)(`span`,{className:`shrink-0 text-sm text-fg-muted`,children:n.minuteUnit})]})]}),_e=o===`weekly`?(0,x.jsx)(`div`,{className:`flex flex-wrap gap-1.5 pt-1`,role:`group`,"aria-label":n.modeWeekly,children:n.weekdays.map((e,t)=>{let n=f[t];return(0,x.jsx)(`button`,{type:`button`,disabled:i,className:r(`flex size-9 select-none items-center justify-center rounded-full border text-xs font-medium transition-colors`,n?`border-fg bg-fg text-surface-panel`:`border-edge-subtle bg-surface-panel text-fg hover:border-edge`),"aria-pressed":n,onClick:()=>{let e=[...f];e[t]=!e[t],ce(e),g({weekDays:e})},children:e},e)})}):null,ve=o===`custom`?(0,x.jsxs)(`div`,{className:`pt-1`,children:[(0,x.jsx)(`textarea`,{disabled:i,className:et,rows:2,spellCheck:!1,value:p,placeholder:`*/5 * * * *`,onChange:e=>{let n=e.target.value;de(n),t(n.trim()||`*/5 * * * *`)},"aria-label":n.modeCustom}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:n.customCronHint})]}):null;return(0,x.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.scheduleTimeLabel}),ge,_e,ve]})}var ot=400;function st(e){let t=new Date(e);return t.setHours(0,0,0,0),t}function ct(e){let t=st(e),n=t.getDay(),r=n===0?-6:1-n;return t.setDate(t.getDate()+r),t}function lt(e){return new Date(e.getFullYear(),e.getMonth(),1,0,0,0,0)}var ut=`*/5 * * * *`,dt=`xopc.recentWorkspaceDirs.v1`,k=10;function ft(e){let t=e?.trim();t&&window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{sessionKey:t},bubbles:!0}))}function pt(e){let t=e.trim();if(t)try{let e=localStorage.getItem(dt),n=e?JSON.parse(e):[],r=[t,...(Array.isArray(n)?n.filter(e=>typeof e==`string`&&e.trim().length>0):[]).filter(e=>e!==t)].slice(0,k);localStorage.setItem(dt,JSON.stringify(r))}catch{}}function mt(e){return r(`w-full rounded-md border border-edge bg-surface-base px-3 py-2 text-sm text-fg placeholder:text-fg-disabled`,v,e&&`cursor-not-allowed opacity-60`)}function ht(){return r(p,g)}var gt=r(p,`w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0`),_t=r(p,`w-auto min-w-[9rem] max-w-[14rem] shrink-0 text-xs`);function vt(){let e=c(e=>e.language),t=he(e),n=t.cron,p=t.chat,g=!!_e(e=>e.token),v=ae(e=>e.resolved)===`dark`,Me=e===`zh`?`zh-CN`:`en-US`,[b,Xe]=(0,y.useState)([]),[S,C]=(0,y.useState)(`tasks`),[w,$e]=(0,y.useState)(`created_desc`),[T,et]=(0,y.useState)(`day`),[tt,E]=(0,y.useState)(``),[D,nt]=(0,y.useState)(``),[O,rt]=(0,y.useState)(!1),it=(0,y.useRef)(null),dt=(0,y.useRef)(O),k=typeof navigator<`u`&&`wakeLock`in navigator,[vt,yt]=(0,y.useState)([]),[bt,xt]=(0,y.useState)([]),[St,Ct]=(0,y.useState)(``),[wt,Tt]=(0,y.useState)([]),[Et,Dt]=(0,y.useState)([]),[Ot,kt]=(0,y.useState)(!1),[At,A]=(0,y.useState)(null),[jt,Mt]=(0,y.useState)([]),[j,Nt]=(0,y.useState)(!1),[M,Pt]=(0,y.useState)(!1),[N,Ft]=(0,y.useState)(`add`),[It,Lt]=(0,y.useState)(null),[Rt,zt]=(0,y.useState)(``),[Bt,Vt]=(0,y.useState)(ut),[P,F]=(0,y.useState)(`local`),[Ht,I]=(0,y.useState)(``),[L,R]=(0,y.useState)(``),[Ut,Wt]=(0,y.useState)(`edit`),[Gt,Kt]=(0,y.useState)(0),[z,B]=(0,y.useState)(`main`),[qt,V]=(0,y.useState)(``),[Jt,H]=(0,y.useState)(!1),[U,W]=(0,y.useState)(``),[Yt,Xt]=(0,y.useState)(!1),[Zt,G]=(0,y.useState)(``),[K,Qt]=(0,y.useState)(!1),$t=(0,y.useRef)(!1),[en,tn]=(0,y.useState)(!1),[q,nn]=(0,y.useState)(null),[rn,an]=(0,y.useState)([]),[on,sn]=(0,y.useState)(!1),[cn,ln]=(0,y.useState)(!1),[J,un]=(0,y.useState)(null),[dn,fn]=(0,y.useState)(null),[pn,mn]=(0,y.useState)(!1),[hn,gn]=(0,y.useState)(`all`),Y=(0,y.useRef)(null),_n=(0,y.useCallback)(e=>{Y.current=e,window.setTimeout(()=>{Y.current===e&&(Y.current=null)},400)},[]),X=(0,y.useCallback)(()=>St||(bt.length>0?bt[0].id:``),[St,bt]),vn=typeof window<`u`&&!!window.electronAPI?.file?.openDirectory,yn=(0,y.useCallback)(async()=>{let e=typeof window<`u`?window.electronAPI?.file?.openDirectory:void 0;return e?e():null},[]),bn=(0,y.useCallback)(async e=>{let t=e.trim();t&&(pt(t),W(t))},[]),xn=(0,y.useMemo)(()=>{let e=new Set(Et.map(e=>e.id)),t=[...Et],n=qt.trim().toLowerCase();return n&&!e.has(n)&&t.push({id:n}),t},[Et,qt]),Sn=P!==`local`&&(z===`main`||z===`isolated`&&!Jt),Cn=z===`main`||z===`isolated`&&!Jt,wn=!!Rt.trim()&&!!Bt.trim()&&!!L.trim()&&(!Sn||!!Ht.trim()),Z=(0,y.useCallback)(async()=>{Nt(!0);try{Mt(await Oe(ot))}catch{}finally{Nt(!1)}},[]),Q=(0,y.useCallback)(async()=>{kt(!0),A(null);try{Xe(await Ue())}catch(e){A(e instanceof Error?e.message:n.failedToLoadJobs)}finally{kt(!1)}},[n.failedToLoadJobs]),$=(0,y.useCallback)(async()=>{try{let[e,t,n,r]=await Promise.all([Ie(),Ce(),Ne(),fe().catch(()=>null)]);yt(e),xt(t),Ct(n.model||``),r&&Dt(r.items)}catch{}},[]);(0,y.useEffect)(()=>{g&&(Q(),$())},[g,Q,$]),(0,y.useEffect)(()=>{!g||S!==`history`||Z()},[g,S,Z]);let Tn=(0,y.useCallback)(async()=>{try{await it.current?.release()}catch{}it.current=null},[]),En=(0,y.useCallback)(async()=>{if(k)try{let e=await navigator.wakeLock.request(`screen`);it.current=e,e.addEventListener(`release`,()=>{it.current=null})}catch{A(n.wakeLockUnavailable),rt(!1)}},[n.wakeLockUnavailable,k]);dt.current=O,(0,y.useEffect)(()=>{if(!O){Tn();return}En();let e=()=>{document.visibilityState===`visible`&&dt.current&&En()};return document.addEventListener(`visibilitychange`,e),()=>{document.removeEventListener(`visibilitychange`,e),Tn()}},[O,En,Tn]),(0,y.useEffect)(()=>{if(!M||N!==`add`||$t.current)return;let e=X();e&&G(e)},[M,N,X]),(0,y.useEffect)(()=>{!M||N!==`add`||new Set([`local`,...vt.map(e=>e.name)]).has(P)||F(`local`)},[vt,P,N,M]),(0,y.useEffect)(()=>{if(P===`local`){Tt([]);return}let e=!1;return Ve(P).then(t=>{e||Tt(t)}),()=>{e=!0}},[P,M]);let Dn=(0,y.useCallback)(e=>{if($t.current=!1,Pt(!0),Ft(e?`edit`:`add`),Lt(e?.id??null),e){zt(e.name||``),Vt(e.schedule&&String(e.schedule).trim()||ut);let t=De(e);R(t??``),B(e.sessionTarget||`main`),V((e.sessionTarget||`main`)===`isolated`&&e.agentId?.trim()?e.agentId.trim().toLowerCase():``),W((e.sessionTarget||`main`)===`isolated`&&e.workingDirectory?.trim()?e.workingDirectory.trim():``);let n=e.payload?.kind===`agentTurn`&&e.payload.model?.trim()?e.payload.model.trim():``;G(e.model?.trim()||n||X());let r=e.delivery?.channel===`local`,i=(e.sessionTarget||`main`)===`isolated`&&!r&&(!e.delivery?.to||e.delivery.mode===`none`);if(H(i),r)F(`local`),I(``);else if(e.delivery&&e.delivery.mode!==`none`&&e.delivery.to)F(e.delivery.channel||`telegram`),I(e.delivery.to||``);else if(i)F(`telegram`),I(``);else{let e=t.split(`:`);e.length>=3&&[`telegram`,`cli`,`gateway`,`local`].includes(e[0])?(F(e[0]),I(e[1]),R(e.slice(2).join(`:`))):(F(`telegram`),I(``))}}else zt(``),Vt(ut),F(`local`),I(``),R(``),B(`main`),V(``),W(``),H(!1),G(X());Wt(`edit`),Kt(e=>e+1)},[X]),On=(0,y.useCallback)(e=>{Wt(e),e===`edit`&&Kt(e=>e+1)},[]),kn=(0,y.useCallback)(e=>{let n=Ze(e),r=n?Ye(t.cron,e):void 0;!n||!r||($t.current=!1,Ft(`add`),Lt(null),zt(r.title),Vt(n.defaultSchedule),R(r.prompt),B(n.defaultSessionTarget),F(`local`),I(``),H(!1),V(``),W(``),G(X()),Wt(`edit`),Kt(e=>e+1),mn(!1),Pt(!0))},[X,t.cron]),An=(0,y.useCallback)(()=>{Pt(!1),Ft(`add`),Lt(null),zt(``),Vt(ut),F(`local`),I(``),R(``),B(`main`),V(``),W(``),Xt(!1),H(!1),G(``),Wt(`edit`),$t.current=!1},[]),jn=async()=>{if(!Rt.trim()){A(n.nameRequired);return}if(!Bt.trim()||!L.trim()){A(n.scheduleRequired);return}if(Sn&&!Ht.trim()){A(n.chatIdRequired);return}Qt(!0),A(null);try{let e=L.trim(),t;t=z===`isolated`&&Jt?{mode:`none`}:P===`local`?{mode:`direct`,channel:`local`}:{mode:`direct`,channel:P,to:Ht.trim()};let n=z===`isolated`?{kind:`agentTurn`,message:e,...Zt.trim()?{model:Zt.trim()}:{}}:{kind:`systemEvent`,text:e},r=Zt.trim(),i=qt.trim().toLowerCase(),a=z===`main`?null:i||null,o=U.trim(),s={name:Rt.trim(),schedule:Bt.trim(),sessionTarget:z,model:z===`isolated`&&r?r:void 0,delivery:t,payload:n,...N===`edit`?{agentId:a,workingDirectory:z===`isolated`&&o||null}:{...z===`isolated`&&i?{agentId:i}:{},...z===`isolated`&&o?{workingDirectory:o}:{}}};if(N===`edit`&&It)await xe(It,s);else{let{schedule:e,agentId:t,workingDirectory:n,...r}=s;await Be(e,{...r,...t==null?{}:{agentId:t},...n?{workingDirectory:n}:{}})}An(),await Q(),await $()}catch(e){A(e instanceof Error?e.message:N===`edit`?n.failedToUpdateJob:n.failedToCreateJob)}finally{Qt(!1)}},Mn=async e=>{tn(!0),nn(e),sn(!0),an([]);try{let t=await ke(e.id);t&&(nn(t),an(await Ae(e.id,20)))}catch{}finally{sn(!1)}},Nn=async(e,t)=>{try{await Se(e.id,t),await Q(),await $()}catch(e){A(e instanceof Error?e.message:n.failedToToggleJob)}},Pn=async()=>{if(!dn||!J)return;let e=dn,t=J;ln(!1),fn(null),un(null);try{t===`run`?await He(e):(await Te(e),q?.id===e&&(tn(!1),nn(null))),await Q(),await $(),await Z()}catch(e){A(e instanceof Error?e.message:n.actionFailed)}};(0,y.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(M?An():en&&(tn(!1),nn(null)))};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[M,en,An]);let Fn={running:n.execStatusRunning,success:n.execStatusSuccess,failed:n.execStatusFailed,cancelled:n.execStatusCancelled},In=(0,y.useMemo)(()=>{let e=[...b];return e.sort((e,t)=>{let n=new Date(e.created_at).getTime(),r=new Date(t.created_at).getTime();return w===`created_desc`?r-n:n-r}),e},[b,w]),Ln=(0,y.useMemo)(()=>{let e=new Date,t=T===`day`?st(e):T===`week`?ct(e):lt(e);return jt.filter(e=>!(new Date(e.startedAt)<t||tt&&e.jobId!==tt||D&&e.status!==D))},[jt,T,tt,D]),Rn=n.scheduleBadge,zn=(0,y.useCallback)(()=>{Q(),$(),Z()},[Q,$,Z]),Bn=o(e=>e.setPageHeader),Vn=o(e=>e.clearPageHeader),{pathname:Hn}=re(),Un=Hn.startsWith(`/settings/`),Wn=(0,y.useMemo)(()=>(0,x.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2`,children:[(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,disabled:Ot||j,title:n.refresh,"aria-label":n.refresh,onClick:()=>void zn(),children:(0,x.jsx)(m,{className:r(`size-4`,(Ot||j)&&`animate-spin`),strokeWidth:1.75})}),(0,x.jsxs)(_,{type:`button`,variant:`secondary`,className:`gap-2`,onClick:()=>{gn(`all`),mn(!0)},children:[(0,x.jsx)(ie,{className:`size-4`,strokeWidth:1.75}),n.fromTemplate]}),(0,x.jsxs)(_,{type:`button`,variant:`primary`,className:`gap-2`,onClick:()=>Dn(),children:[(0,x.jsx)(s,{className:`size-4`,strokeWidth:1.75}),n.addJob]})]}),[n.addJob,n.fromTemplate,n.refresh,Ot,Dn,zn,j]);return(0,y.useLayoutEffect)(()=>!g||Un?(Vn(),()=>Vn()):(Bn({startExtra:null,main:null,end:Wn}),()=>Vn()),[Vn,Wn,g,Un,Bn]),g?(0,x.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto bg-surface-panel`,children:[(0,x.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6 sm:px-8`,children:[At?(0,x.jsx)(`div`,{className:`rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`,role:`alert`,children:At}):null,(0,x.jsx)(`header`,{className:`flex flex-col gap-4`,children:(0,x.jsxs)(`div`,{className:`min-w-0`,children:[(0,x.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:n.title}),(0,x.jsx)(`p`,{className:`mt-1 max-w-2xl text-sm text-fg-muted`,children:n.subtitle})]})}),Un?(0,x.jsx)(`div`,{className:`flex flex-wrap items-center justify-end gap-2 border-b border-edge-subtle pb-3 dark:border-edge-subtle`,children:Wn}):null,(0,x.jsxs)(`div`,{className:`flex flex-col gap-3 border-b border-edge-subtle pb-3 sm:flex-row sm:items-center sm:justify-between dark:border-edge-subtle`,children:[(0,x.jsxs)(`div`,{className:`flex gap-1`,role:`tablist`,"aria-label":n.title,children:[(0,x.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":S===`tasks`,className:r(`rounded-md px-3 py-2 text-sm font-medium transition-colors`,S===`tasks`?`text-fg`:`text-fg-muted hover:text-fg`),onClick:()=>C(`tasks`),children:n.tabMyTasks}),(0,x.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":S===`history`,className:r(`rounded-md px-3 py-2 text-sm font-medium transition-colors`,S===`history`?`text-fg`:`text-fg-muted hover:text-fg`),onClick:()=>C(`history`),children:n.tabRunHistory})]}),(0,x.jsx)(`div`,{className:r(`flex min-w-0 items-center gap-2`,S===`history`?`flex-nowrap overflow-x-auto pb-0.5 sm:justify-end`:`flex-wrap sm:justify-end`),children:S===`tasks`?(0,x.jsxs)(`select`,{className:_t,value:w,onChange:e=>$e(e.target.value),"aria-label":n.sortCreatedDesc,children:[(0,x.jsx)(`option`,{value:`created_desc`,children:n.sortCreatedDesc}),(0,x.jsx)(`option`,{value:`created_asc`,children:n.sortCreatedAsc})]}):(0,x.jsxs)(x.Fragment,{children:[(0,x.jsx)(`div`,{className:r(de,`shrink-0`),role:`group`,"aria-label":n.runHistoryTitle,children:[`day`,`week`,`month`].map(e=>(0,x.jsx)(`button`,{type:`button`,className:r(ve,`px-2.5 py-1`,T===e&&`bg-surface-panel shadow-sm dark:bg-surface-panel dark:shadow-sm dark:ring-1 dark:ring-edge-strong/40`,T===e&&`text-fg`),onClick:()=>et(e),children:e===`day`?n.historyRangeDay:e===`week`?n.historyRangeWeek:n.historyRangeMonth},e))}),(0,x.jsxs)(`select`,{className:_t,value:tt,onChange:e=>E(e.target.value),"aria-label":n.filterAllTasks,children:[(0,x.jsx)(`option`,{value:``,children:n.filterAllTasks}),b.map(e=>(0,x.jsx)(`option`,{value:e.id,children:e.name||e.id},e.id))]}),(0,x.jsxs)(`select`,{className:_t,value:D,onChange:e=>nt(e.target.value),"aria-label":n.filterAllStatuses,children:[(0,x.jsx)(`option`,{value:``,children:n.filterAllStatuses}),(0,x.jsx)(`option`,{value:`success`,children:n.execStatusSuccess}),(0,x.jsx)(`option`,{value:`failed`,children:n.execStatusFailed}),(0,x.jsx)(`option`,{value:`cancelled`,children:n.execStatusCancelled}),(0,x.jsx)(`option`,{value:`running`,children:n.execStatusRunning})]})]})})]}),S===`tasks`?(0,x.jsxs)(`section`,{"aria-labelledby":`cron-tasks-panel`,className:`flex flex-col gap-4`,children:[(0,x.jsx)(`h2`,{id:`cron-tasks-panel`,className:`sr-only`,children:n.tabMyTasks}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10 sm:flex-row sm:items-center sm:justify-between`,children:[(0,x.jsxs)(`div`,{className:`flex gap-3 text-sm text-fg`,children:[(0,x.jsx)(me,{className:`mt-0.5 size-4 shrink-0 text-accent`,strokeWidth:1.75,"aria-hidden":!0}),(0,x.jsx)(`p`,{className:`text-pretty text-fg-muted`,children:n.wakeBanner})]}),(0,x.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 sm:pl-4`,children:[(0,x.jsx)(`span`,{className:`text-sm text-fg`,children:n.keepAwake}),(0,x.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":O,disabled:!k,title:k?void 0:n.wakeLockUnavailable,className:r(`inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors`,O?`justify-end bg-accent`:`justify-start bg-surface-hover`,!k&&`cursor-not-allowed opacity-50`),onClick:()=>{k?rt(e=>!e):A(n.wakeLockUnavailable)},children:(0,x.jsx)(`span`,{className:`size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55`})})]})]}),Ot&&b.length===0?(0,x.jsx)(`div`,{className:`flex justify-center py-16`,"aria-busy":`true`,children:(0,x.jsx)(a,{className:`size-8 animate-spin text-accent`,strokeWidth:1.75})}):b.length===0?(0,x.jsxs)(`div`,{className:`flex flex-col gap-6 rounded-2xl bg-surface-base px-4 py-8 dark:bg-surface-hover/25 sm:px-6 sm:py-10`,children:[(0,x.jsx)(`div`,{className:`w-full max-w-3xl`,children:(0,x.jsx)(Qe,{cron:n,localeTag:Me,scheduleBadgeLabels:Rn,categoryFilter:hn,onCategoryFilterChange:gn,onSelectTemplate:kn})}),(0,x.jsx)(`div`,{className:`flex justify-center`,children:(0,x.jsx)(_,{type:`button`,variant:`primary`,onClick:()=>Dn(),children:n.emptyStateCta})})]}):(0,x.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2`,children:In.map(e=>(0,x.jsxs)(`article`,{role:`button`,tabIndex:0,className:r(`flex cursor-pointer flex-col rounded-xl border border-edge-subtle bg-surface-base text-left transition-colors duration-150 ease-out dark:border-edge-subtle`,`hover:bg-surface-hover`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`),onClick:()=>{if(Y.current===e.id){Y.current=null;return}Mn(e)},onKeyDown:t=>{if(t.key===`Enter`||t.key===` `){if(t.preventDefault(),Y.current===e.id){Y.current=null;return}Mn(e)}},children:[(0,x.jsxs)(`div`,{className:`flex items-start justify-between gap-2 px-4 pt-3`,children:[(0,x.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e.enabled,className:r(`inline-flex h-6 w-10 shrink-0 items-center rounded-full border border-edge p-0.5 transition-colors`,e.enabled?`justify-end bg-accent`:`justify-start bg-surface-hover`),onClick:t=>{t.stopPropagation(),Nn(e,!e.enabled)},children:(0,x.jsx)(`span`,{className:`size-4 rounded-full bg-surface-panel shadow-surface ring-1 ring-edge/40 dark:ring-edge/55`})}),(0,x.jsxs)(Ge,{children:[(0,x.jsx)(We,{asChild:!0,children:(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-8 w-8 shrink-0 p-0`,"aria-label":n.jobCardMenuAria,onClick:e=>e.stopPropagation(),children:(0,x.jsx)(le,{className:`size-4`,strokeWidth:1.75})})}),(0,x.jsx)(qe,{children:(0,x.jsxs)(Je,{className:`z-50 min-w-[10rem] rounded-xl border border-edge-subtle bg-surface-panel p-1 shadow-elevated dark:border-edge-subtle`,sideOffset:4,align:`end`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,x.jsx)(Ke,{className:`cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover`,onSelect:()=>{_n(e.id),Dn(e)},children:n.edit}),(0,x.jsx)(Ke,{className:`cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-fg outline-none data-highlighted:bg-surface-hover`,onSelect:()=>{_n(e.id),un(`run`),fn(e.id),ln(!0)},children:n.runNow}),(0,x.jsx)(Ke,{className:`cursor-pointer select-none rounded-lg px-2 py-1.5 text-sm text-red-600 outline-none data-highlighted:bg-red-500/10 dark:text-red-400`,onSelect:()=>{_n(e.id),un(`delete`),fn(e.id),ln(!0)},children:n.delete})]})})]})]}),(0,x.jsxs)(`div`,{className:`flex flex-1 flex-col gap-2 px-4 pb-3 pt-2`,children:[(0,x.jsx)(`h3`,{className:`line-clamp-2 font-semibold text-fg`,children:e.name||e.id}),(0,x.jsx)(`div`,{className:`max-h-[4.5rem] overflow-hidden text-sm text-fg-muted [&_.markdown-body]:text-sm [&_.markdown-body]:leading-snug`,title:De(e),children:(0,x.jsx)(i,{content:De(e),compact:!0})})]}),(0,x.jsxs)(`div`,{className:`flex items-center gap-1.5 border-t border-edge-subtle/90 px-4 py-2.5 text-xs text-fg-muted dark:border-edge-subtle`,children:[(0,x.jsx)(ee,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),(0,x.jsx)(`span`,{className:`min-w-0 truncate`,children:Fe(e,Me,Rn)})]})]},e.id))})]}):(0,x.jsxs)(`section`,{"aria-labelledby":`cron-history-panel`,className:`flex flex-col gap-3`,children:[(0,x.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`h2`,{id:`cron-history-panel`,className:`sr-only`,children:n.tabRunHistory}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.runHistoryHint})]}),(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,disabled:j,title:n.refresh,"aria-label":n.refresh,onClick:()=>void Z(),children:(0,x.jsx)(m,{className:r(`size-4`,j&&`animate-spin`),strokeWidth:1.75})})]}),j&&jt.length===0?(0,x.jsx)(`div`,{className:`flex justify-center py-16`,children:(0,x.jsx)(a,{className:`size-8 animate-spin text-accent`,strokeWidth:1.75})}):Ln.length===0?(0,x.jsxs)(`div`,{className:`flex flex-col items-center rounded-2xl border border-dashed border-edge-subtle px-6 py-16 text-center dark:border-edge-subtle`,children:[(0,x.jsx)(ee,{className:`mb-4 size-14 text-fg-disabled`,strokeWidth:1.1,"aria-hidden":!0}),(0,x.jsx)(`h3`,{className:`text-base font-semibold text-fg`,children:jt.length===0?n.emptyHistoryTitle:n.noRunsYet}),(0,x.jsx)(`p`,{className:`mt-2 max-w-sm text-sm text-fg-muted`,children:jt.length===0?n.emptyHistoryHint:n.runHistoryHint})]}):(0,x.jsx)(`div`,{className:`overflow-x-auto rounded-xl border border-edge-subtle bg-surface-base dark:border-edge-subtle`,children:(0,x.jsxs)(`table`,{className:`w-full min-w-[700px] border-collapse text-left text-sm`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b border-edge text-xs font-medium text-fg-muted`,children:[(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.colStarted}),(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.colJob}),(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.status}),(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.colDuration}),(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.colDetail}),(0,x.jsx)(`th`,{className:`px-3 py-2.5 font-medium`,children:n.colChat})]})}),(0,x.jsx)(`tbody`,{children:Ln.map(e=>(0,x.jsxs)(`tr`,{className:`border-b border-edge/60 last:border-0`,children:[(0,x.jsx)(`td`,{className:`whitespace-nowrap px-3 py-2.5 text-fg`,children:(0,x.jsx)(`time`,{dateTime:e.startedAt,children:Re(e.startedAt)})}),(0,x.jsx)(`td`,{className:`max-w-[10rem] truncate px-3 py-2.5`,children:b.some(t=>t.id===e.jobId)?(0,x.jsx)(`button`,{type:`button`,className:`text-left text-accent hover:underline`,onClick:()=>{let t=b.find(t=>t.id===e.jobId);t&&Mn(t)},children:e.jobName||e.jobId}):(0,x.jsx)(`span`,{className:`text-fg-muted`,children:e.jobName||e.jobId})}),(0,x.jsx)(`td`,{className:`px-3 py-2.5`,children:(0,x.jsx)(`span`,{className:r(`inline-flex rounded-md px-2 py-0.5 text-xs font-medium`,e.status===`success`&&`bg-emerald-500/15 text-emerald-800 dark:text-emerald-300`,e.status===`failed`&&`bg-red-500/15 text-red-800 dark:text-red-300`,e.status===`running`&&`bg-accent/15 text-accent`,e.status===`cancelled`&&`bg-surface-hover text-fg-muted`),children:ze(e.status,Fn)})}),(0,x.jsx)(`td`,{className:`whitespace-nowrap px-3 py-2.5 text-fg-muted`,children:Le(e.duration)}),(0,x.jsx)(`td`,{className:`max-w-xs truncate px-3 py-2.5 text-fg-muted`,title:e.summary||e.error||``,children:Ee(e.summary||e.error,96)}),(0,x.jsx)(`td`,{className:`whitespace-nowrap px-3 py-2.5`,children:e.sessionKey?.trim()?(0,x.jsx)(`button`,{type:`button`,className:`text-xs font-medium text-accent hover:underline`,title:n.openChatTitle,"aria-label":n.openChatTitle,onClick:()=>ft(e.sessionKey),children:n.openChat}):(0,x.jsx)(`span`,{className:`text-fg-disabled`,children:`—`})})]},e.id))})]})})]})]}),(0,x.jsx)(ye,{open:M,onOpenChange:e=>!e&&An(),children:(0,x.jsxs)(h,{children:[(0,x.jsx)(d,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),(0,x.jsx)(`div`,{className:`fixed inset-0 z-[60] flex items-center justify-center p-4 pointer-events-none`,children:(0,x.jsxs)(ge,{className:`xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,800px)] w-full max-w-md flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-lg lg:max-w-xl dark:border-edge`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,x.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3`,children:[(0,x.jsx)(f,{className:`text-base font-semibold text-fg`,children:N===`edit`?n.editJob:n.addJob}),(0,x.jsx)(l,{asChild:!0,children:(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-label":n.close,children:(0,x.jsx)(se,{className:`size-5`,strokeWidth:1.75})})})]}),(0,x.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:(0,x.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,x.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.name}),(0,x.jsx)(`input`,{type:`text`,className:mt(),value:Rt,onChange:e=>zt(e.target.value),placeholder:n.namePlaceholder})]}),(0,x.jsx)(at,{value:Bt,onChange:Vt,disabled:K,labels:n.schedulePicker}),(0,x.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.mode}),(0,x.jsxs)(`select`,{className:ht(),value:z,onChange:e=>{let t=e.target.value;B(t),t===`main`?(H(!1),V(``),W(``)):t===`isolated`&&!Zt.trim()&&G(X())},children:[(0,x.jsx)(`option`,{value:`main`,children:n.modeDirectOption}),(0,x.jsx)(`option`,{value:`isolated`,children:n.modeAgentOption})]}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:z===`main`?n.modeDirect:n.modeAgent})]}),z===`isolated`?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.model}),(0,x.jsx)(oe,{value:Zt,placeholder:p.modelPlaceholder,searchPlaceholder:p.modelSearchPlaceholder,noMatches:p.modelNoMatches,className:`w-full max-w-none min-w-0`,popoverContentClassName:`z-[70]`,onChange:e=>{$t.current=!0,G(e)}})]}),(0,x.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.agentProfile}),(0,x.jsxs)(`select`,{className:ht(),value:qt,disabled:K,onChange:e=>V(e.target.value),children:[(0,x.jsx)(`option`,{value:``,children:n.agentProfileDefault}),xn.map(e=>(0,x.jsx)(`option`,{value:e.id,children:e.name?`${e.id} — ${e.name}`:e.id},e.id))]}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.agentProfileHint})]}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.workingDirectoryLabel}),(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,x.jsxs)(`button`,{type:`button`,disabled:K,className:r(`inline-flex min-h-8 max-w-[min(16rem,48vw)] min-w-0 shrink-0 items-center gap-1 rounded-lg px-2 py-1 text-xs`,`border border-edge-subtle/80 bg-surface-hover/40 dark:border-edge-subtle`,ne.transition,ne.focusRingPanel,`cursor-pointer hover:bg-surface-hover/70 dark:hover:bg-surface-hover/50`,K&&`cursor-not-allowed opacity-60`),title:U.trim()?`${U.trim()}\n${p.workingDirectory.chooseFolder}`:`${n.workingDirectoryHint}\n${p.workingDirectory.selectWorkingDirectory}`,onClick:e=>{e.stopPropagation(),!K&&(vn?(async()=>{let e=await yn();e&&bn(e)})():Xt(!0))},children:[(0,x.jsx)(u,{className:`size-3.5 shrink-0 text-fg-muted`,"aria-hidden":!0}),(0,x.jsx)(`span`,{className:`min-w-0 truncate text-left font-medium text-fg`,children:U.trim()?pe(U.trim()):p.workingDirectory.notSet})]}),U.trim()?(0,x.jsx)(`button`,{type:`button`,disabled:K,className:`text-xs font-medium text-accent hover:underline disabled:opacity-50`,onClick:()=>W(``),children:n.workingDirectoryReset}):null]}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.workingDirectoryHint})]}),(0,x.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-2 rounded-md bg-surface-hover/45 px-3 py-2 dark:bg-surface-hover/30`,children:[(0,x.jsx)(`input`,{type:`checkbox`,className:r(`ui-checkbox`,`mt-0.5`),checked:Jt,onChange:e=>H(e.target.checked)}),(0,x.jsxs)(`span`,{children:[(0,x.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:n.agentLocalOnly}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:n.agentLocalOnlyHint})]})]})]}):null,Cn?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.channel}),(0,x.jsxs)(`select`,{className:ht(),value:P,onChange:e=>{let t=e.target.value;F(t),t===`local`&&H(!1),I(``)},children:[(0,x.jsx)(`option`,{value:`local`,children:n.channelLocal}),vt.map(e=>(0,x.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:`(disabled)`]},e.name))]})]}),Sn?(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.recipient}),(0,x.jsxs)(_,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,title:n.refreshRecipientHint,onClick:()=>void Ve(P).then(Tt),children:[(0,x.jsx)(m,{className:`size-3.5`,strokeWidth:1.75}),n.refreshList]})]}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2`,children:[(0,x.jsx)(`input`,{type:`text`,className:r(mt(),`min-w-0 w-full sm:flex-1`),value:Ht,onChange:e=>I(e.target.value),placeholder:n.recipientPlaceholder}),(0,x.jsxs)(`select`,{className:gt,value:Ht,onChange:e=>{let t=e.target.value;t&&I(t)},children:[(0,x.jsx)(`option`,{value:``,children:n.selectRecipient}),wt.length>0?wt.map(e=>(0,x.jsx)(`option`,{value:e.chatId,children:we(e,n.lastActiveLabels)},`${e.channel}-${e.chatId}`)):(0,x.jsx)(`option`,{value:``,disabled:!0,children:n.noRecentChatsOption})]})]}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:wt.length>0?n.enterManuallyOrSelect:n.noRecentChats})]}):null]}):null,(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,x.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:n.message}),(0,x.jsxs)(`div`,{className:`inline-flex rounded-lg border border-edge bg-surface-base p-0.5 dark:border-edge`,children:[(0,x.jsxs)(`button`,{type:`button`,className:r(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,Ut===`edit`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>On(`edit`),children:[(0,x.jsx)(be,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),n.messageEdit]}),(0,x.jsxs)(`button`,{type:`button`,className:r(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,Ut===`preview`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>On(`preview`),children:[(0,x.jsx)(ce,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),n.messagePreview]})]})]}),(0,x.jsx)(`div`,{className:r(`overflow-hidden rounded-md border border-edge bg-surface-base dark:border-edge`,K&&`pointer-events-none opacity-60`),children:Ut===`edit`?(0,x.jsx)(te,{initialContent:L,onChange:R,isDark:v,className:`h-[min(18rem,40vh)] min-h-[12rem]`},`cron-msg-${It??`new`}-${Gt}`):(0,x.jsx)(`div`,{className:`h-[min(18rem,40vh)] min-h-[12rem] max-h-[min(24rem,50vh)] overflow-y-auto px-3 py-2`,children:L.trim()?(0,x.jsx)(i,{content:L,compact:!0,className:`text-sm`}):(0,x.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.messagePlaceholder})})}),(0,x.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.messageMarkdownHint})]})]})}),(0,x.jsxs)(`div`,{className:`flex shrink-0 justify-end gap-2 border-t border-edge px-4 py-3`,children:[(0,x.jsx)(_,{type:`button`,variant:`secondary`,onClick:An,children:n.cancel}),(0,x.jsx)(_,{type:`button`,variant:`primary`,disabled:K||!wn,onClick:()=>void jn(),children:K?n.loading:N===`edit`?n.save:n.create})]})]})})]})}),vn?null:(0,x.jsx)(ue,{open:Yt,onOpenChange:Xt,initialAbsolutePath:U.trim()||void 0,onConfirm:async e=>{await bn(e),Xt(!1)},wd:p.workingDirectory}),(0,x.jsx)(ye,{open:pn,onOpenChange:e=>{mn(e),e&&gn(`all`)},children:(0,x.jsxs)(h,{children:[(0,x.jsx)(d,{className:`xopc-dialog-overlay fixed inset-0 z-[62] bg-scrim`}),(0,x.jsx)(`div`,{className:`fixed inset-0 z-[62] flex items-center justify-center p-4 pointer-events-none`,children:(0,x.jsxs)(ge,{className:`xopc-dialog-content-pane pointer-events-auto relative flex max-h-[min(90vh,840px)] w-full max-w-lg flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none sm:max-w-2xl dark:border-edge`,onOpenAutoFocus:e=>e.preventDefault(),children:[(0,x.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end border-b border-edge px-4 py-3`,children:[(0,x.jsx)(f,{className:`sr-only`,children:n.fromTemplate}),(0,x.jsx)(l,{asChild:!0,children:(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-label":n.close,children:(0,x.jsx)(se,{className:`size-5`,strokeWidth:1.75})})})]}),(0,x.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-4`,children:(0,x.jsx)(Qe,{cron:n,localeTag:Me,scheduleBadgeLabels:Rn,categoryFilter:hn,onCategoryFilterChange:gn,onSelectTemplate:kn})})]})})]})}),(0,x.jsx)(ye,{open:en,onOpenChange:e=>{e||(tn(!1),nn(null))},children:(0,x.jsxs)(h,{children:[(0,x.jsx)(d,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),(0,x.jsxs)(ge,{className:r(`xopc-drawer-right fixed right-0 top-0 z-[60] flex h-full w-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none`,`dark:border-edge`),"aria-describedby":void 0,children:[(0,x.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3`,children:[(0,x.jsx)(f,{className:`min-w-0 truncate text-base font-semibold text-fg`,children:q?.name?.trim()||q?.id||`—`}),(0,x.jsx)(l,{asChild:!0,children:(0,x.jsx)(_,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-label":n.close,children:(0,x.jsx)(se,{className:`size-5`,strokeWidth:1.75})})})]}),(0,x.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:on?(0,x.jsx)(`div`,{className:`flex justify-center py-16`,children:(0,x.jsx)(a,{className:`size-8 animate-spin text-accent`,strokeWidth:1.75})}):q?(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(`dl`,{className:`space-y-3 text-sm`,children:[(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.scheduleLabel}),(0,x.jsx)(`dd`,{className:`mt-1 font-mono text-fg`,children:(0,x.jsx)(`code`,{children:q.schedule})})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.messageLabel}),(0,x.jsx)(`dd`,{className:`mt-1 min-w-0 break-words text-fg`,children:(0,x.jsx)(i,{content:De(q),compact:!0,className:`text-sm`})})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.mode}),(0,x.jsx)(`dd`,{className:`mt-1 text-fg`,children:q.sessionTarget===`isolated`?n.modeAgentOption:n.modeDirectOption})]}),q.sessionTarget===`isolated`?(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.agentProfile}),(0,x.jsx)(`dd`,{className:`mt-1 font-mono text-sm text-fg`,children:q.agentId?.trim()?q.agentId.trim():n.agentProfileDefault})]}):null,q.sessionTarget===`isolated`?(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.workingDirectoryLabel}),(0,x.jsx)(`dd`,{className:`mt-1 break-all font-mono text-xs text-fg`,children:q.workingDirectory?.trim()?q.workingDirectory.trim():p.workingDirectory.notSet})]}):null,q.delivery?.channel===`local`||q.sessionTarget===`isolated`&&!q.delivery?.to?(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.deliveryTarget}),(0,x.jsx)(`dd`,{className:`mt-1 text-fg`,children:q.delivery?.channel===`local`?n.deliveryTargetLocalChannel:n.deliveryLocalOnly})]}):q.delivery?.to?(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.deliveryTarget}),(0,x.jsxs)(`dd`,{className:`mt-1 break-words text-fg`,children:[(0,x.jsx)(`code`,{className:`text-xs`,children:q.delivery?.channel??``}),` → `,Pe(q,n.channelLocal)]})]}):null,(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.status}),(0,x.jsx)(`dd`,{className:`mt-1 text-fg`,children:q.enabled?n.enabled:n.disabled})]}),(0,x.jsxs)(`div`,{children:[(0,x.jsx)(`dt`,{className:`text-xs font-medium text-fg-muted`,children:n.nextRun}),(0,x.jsx)(`dd`,{className:`mt-1 text-fg`,children:q.next_run?je(q.next_run,n.timeLabels):`—`})]})]}),(0,x.jsx)(`h3`,{className:`mt-6 text-sm font-semibold text-fg`,children:n.detailRunHistory}),rn.length===0?(0,x.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:n.noRunsYet}):(0,x.jsx)(`div`,{className:`mt-2 overflow-x-auto`,children:(0,x.jsxs)(`table`,{className:`w-full border-collapse text-left text-xs`,children:[(0,x.jsx)(`thead`,{children:(0,x.jsxs)(`tr`,{className:`border-b border-edge text-fg-muted`,children:[(0,x.jsx)(`th`,{className:`py-1.5 pr-2 font-medium`,children:n.colStarted}),(0,x.jsx)(`th`,{className:`py-1.5 pr-2 font-medium`,children:n.status}),(0,x.jsx)(`th`,{className:`py-1.5 pr-2 font-medium`,children:n.colDuration}),(0,x.jsx)(`th`,{className:`py-1.5 pr-2 font-medium`,children:n.colDetail}),(0,x.jsx)(`th`,{className:`py-1.5 font-medium`,children:n.colChat})]})}),(0,x.jsx)(`tbody`,{children:rn.map(e=>(0,x.jsxs)(`tr`,{className:`border-b border-edge/60`,children:[(0,x.jsx)(`td`,{className:`whitespace-nowrap py-1.5 pr-2 text-fg`,children:(0,x.jsx)(`time`,{dateTime:e.startedAt,children:Re(e.startedAt)})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-2`,children:(0,x.jsx)(`span`,{className:r(`inline-flex rounded px-1.5 py-0.5 font-medium`,e.status===`success`&&`bg-emerald-500/15 text-emerald-800 dark:text-emerald-300`,e.status===`failed`&&`bg-red-500/15 text-red-800 dark:text-red-300`),children:ze(e.status,Fn)})}),(0,x.jsx)(`td`,{className:`py-1.5 pr-2 text-fg-muted`,children:Le(e.duration)}),(0,x.jsx)(`td`,{className:`max-w-[8rem] truncate py-1.5 pr-2 text-fg-muted`,title:e.summary||e.error||``,children:Ee(e.summary||e.error,120)}),(0,x.jsx)(`td`,{className:`whitespace-nowrap py-1.5`,children:e.sessionKey?.trim()?(0,x.jsx)(`button`,{type:`button`,className:`text-xs font-medium text-accent hover:underline`,title:n.openChatTitle,"aria-label":n.openChatTitle,onClick:()=>ft(e.sessionKey),children:n.openChat}):(0,x.jsx)(`span`,{className:`text-fg-disabled`,children:`—`})})]},e.id))})]})})]}):null})]})]})}),(0,x.jsx)(ye,{open:cn,onOpenChange:ln,children:(0,x.jsxs)(h,{children:[(0,x.jsx)(d,{className:`xopc-dialog-overlay fixed inset-0 z-[70] bg-scrim`}),(0,x.jsx)(`div`,{className:`fixed inset-0 z-[70] flex items-center justify-center p-4 pointer-events-none`,children:(0,x.jsxs)(ge,{className:`xopc-dialog-content-pane pointer-events-auto relative w-full max-w-md rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`,children:[(0,x.jsx)(f,{className:`text-base font-semibold text-fg`,children:J===`delete`?n.delete:n.runNow}),(0,x.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:J===`delete`?n.confirmDelete:n.confirmRun}),(0,x.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,x.jsx)(_,{type:`button`,variant:`secondary`,onClick:()=>{ln(!1),fn(null),un(null)},children:n.cancel}),(0,x.jsx)(_,{type:`button`,variant:`primary`,className:J===`delete`?`bg-red-600 hover:bg-red-700`:void 0,onClick:()=>void Pn(),children:J===`delete`?n.delete:n.runNow})]})]})})]})})]}):(0,x.jsx)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-16 text-center text-sm text-fg-muted sm:px-8`,children:n.needToken})}export{vt as CronPage};
2
- //# sourceMappingURL=cron-page-CANqvhK7.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{At as r,Ct as i,Dt as a,Et as o,Ft as s,It as c,Lt as l,Mt as u,Nt as d,Ot as f,Pt as p,St as m,Tt as h,bt as g,cn as _,jt as v,kt as ee,ln as y,vt as te,wt as b,xt as x,yt as S}from"./index-BZvlG48D.js";var C=e(t(),1),w=n();function T(e){let t=e+`CollectionProvider`,[n,r]=c(t),[i,a]=n(t,{collectionRef:{current:null},itemMap:new Map}),o=e=>{let{scope:t,children:n}=e,r=C.useRef(null),a=C.useRef(new Map).current;return(0,w.jsx)(i,{scope:t,itemMap:a,collectionRef:r,children:n})};o.displayName=t;let l=e+`CollectionSlot`,u=s(l),d=C.forwardRef((e,t)=>{let{scope:n,children:r}=e;return(0,w.jsx)(u,{ref:y(t,a(l,n).collectionRef),children:r})});d.displayName=l;let f=e+`CollectionItemSlot`,p=`data-radix-collection-item`,m=s(f),h=C.forwardRef((e,t)=>{let{scope:n,children:r,...i}=e,o=C.useRef(null),s=y(t,o),c=a(f,n);return C.useEffect(()=>(c.itemMap.set(o,{ref:o,...i}),()=>void c.itemMap.delete(o))),(0,w.jsx)(m,{[p]:``,ref:s,children:r})});h.displayName=f;function g(t){let n=a(e+`CollectionConsumer`,t);return C.useCallback(()=>{let e=n.collectionRef.current;if(!e)return[];let t=Array.from(e.querySelectorAll(`[${p}]`));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:d,ItemSlot:h},g,r]}var E=C.createContext(void 0);function D(e){let t=C.useContext(E);return e||t||`ltr`}var O=`rovingFocusGroup.onEntryFocus`,ne={bubbles:!1,cancelable:!0},k=`RovingFocusGroup`,[A,j,M]=T(k),[re,N]=c(k,[M]),[P,F]=re(k),I=C.forwardRef((e,t)=>(0,w.jsx)(A.Provider,{scope:e.__scopeRovingFocusGroup,children:(0,w.jsx)(A.Slot,{scope:e.__scopeRovingFocusGroup,children:(0,w.jsx)(ie,{...e,ref:t})})}));I.displayName=k;var ie=C.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,orientation:r,loop:i=!1,dir:a,currentTabStopId:o,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:c,onEntryFocus:f,preventScrollOnEntryFocus:p=!1,...m}=e,h=C.useRef(null),_=y(t,h),v=D(a),[ee,te]=g({prop:o,defaultProp:s??null,onChange:c,caller:k}),[b,x]=C.useState(!1),S=u(f),T=j(n),E=C.useRef(!1),[A,M]=C.useState(0);return C.useEffect(()=>{let e=h.current;if(e)return e.addEventListener(O,S),()=>e.removeEventListener(O,S)},[S]),(0,w.jsx)(P,{scope:n,orientation:r,dir:v,loop:i,currentTabStopId:ee,onItemFocus:C.useCallback(e=>te(e),[te]),onItemShiftTab:C.useCallback(()=>x(!0),[]),onFocusableItemAdd:C.useCallback(()=>M(e=>e+1),[]),onFocusableItemRemove:C.useCallback(()=>M(e=>e-1),[]),children:(0,w.jsx)(d.div,{tabIndex:b||A===0?-1:0,"data-orientation":r,...m,ref:_,style:{outline:`none`,...e.style},onMouseDown:l(e.onMouseDown,()=>{E.current=!0}),onFocus:l(e.onFocus,e=>{let t=!E.current;if(e.target===e.currentTarget&&t&&!b){let t=new CustomEvent(O,ne);if(e.currentTarget.dispatchEvent(t),!t.defaultPrevented){let e=T().filter(e=>e.focusable);le([e.find(e=>e.active),e.find(e=>e.id===ee),...e].filter(Boolean).map(e=>e.ref.current),p)}}E.current=!1}),onBlur:l(e.onBlur,()=>x(!1))})})}),ae=`RovingFocusGroupItem`,L=C.forwardRef((e,t)=>{let{__scopeRovingFocusGroup:n,focusable:r=!0,active:i=!1,tabStopId:a,children:o,...s}=e,c=f(),u=a||c,p=F(ae,n),m=p.currentTabStopId===u,h=j(n),{onFocusableItemAdd:g,onFocusableItemRemove:_,currentTabStopId:v}=p;return C.useEffect(()=>{if(r)return g(),()=>_()},[r,g,_]),(0,w.jsx)(A.ItemSlot,{scope:n,id:u,focusable:r,active:i,children:(0,w.jsx)(d.span,{tabIndex:m?0:-1,"data-orientation":p.orientation,...s,ref:t,onMouseDown:l(e.onMouseDown,e=>{r?p.onItemFocus(u):e.preventDefault()}),onFocus:l(e.onFocus,()=>p.onItemFocus(u)),onKeyDown:l(e.onKeyDown,e=>{if(e.key===`Tab`&&e.shiftKey){p.onItemShiftTab();return}if(e.target!==e.currentTarget)return;let t=ce(e,p.orientation,p.dir);if(t!==void 0){if(e.metaKey||e.ctrlKey||e.altKey||e.shiftKey)return;e.preventDefault();let n=h().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=p.loop?ue(n,r+1):n.slice(r+1)}setTimeout(()=>le(n))}}),children:typeof o==`function`?o({isCurrentTabStop:m,hasTabStop:v!=null}):o})})});L.displayName=ae;var oe={ArrowLeft:`prev`,ArrowUp:`prev`,ArrowRight:`next`,ArrowDown:`next`,PageUp:`first`,Home:`first`,PageDown:`last`,End:`last`};function se(e,t){return t===`rtl`?e===`ArrowLeft`?`ArrowRight`:e===`ArrowRight`?`ArrowLeft`:e:e}function ce(e,t,n){let r=se(e.key,n);if(!(t===`vertical`&&[`ArrowLeft`,`ArrowRight`].includes(r))&&!(t===`horizontal`&&[`ArrowUp`,`ArrowDown`].includes(r)))return oe[r]}function le(e,t=!1){let n=document.activeElement;for(let r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function ue(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var de=I,fe=L,pe=[`Enter`,` `],me=[`ArrowDown`,`PageUp`,`Home`],he=[`ArrowUp`,`PageDown`,`End`],ge=[...me,...he],_e={ltr:[...pe,`ArrowRight`],rtl:[...pe,`ArrowLeft`]},ve={ltr:[`ArrowLeft`],rtl:[`ArrowRight`]},R=`Menu`,[z,ye,be]=T(R),[B,xe]=c(R,[be,a,N]),V=a(),Se=N(),[Ce,H]=B(R),[we,U]=B(R),Te=e=>{let{__scopeMenu:t,open:n=!1,children:r,dir:i,onOpenChange:a,modal:s=!0}=e,c=V(t),[l,d]=C.useState(null),f=C.useRef(!1),p=u(a),m=D(i);return C.useEffect(()=>{let e=()=>{f.current=!0,document.addEventListener(`pointerdown`,t,{capture:!0,once:!0}),document.addEventListener(`pointermove`,t,{capture:!0,once:!0})},t=()=>f.current=!1;return document.addEventListener(`keydown`,e,{capture:!0}),()=>{document.removeEventListener(`keydown`,e,{capture:!0}),document.removeEventListener(`pointerdown`,t,{capture:!0}),document.removeEventListener(`pointermove`,t,{capture:!0})}},[]),(0,w.jsx)(o,{...c,children:(0,w.jsx)(Ce,{scope:t,open:n,onOpenChange:p,content:l,onContentChange:d,children:(0,w.jsx)(we,{scope:t,onClose:C.useCallback(()=>p(!1),[p]),isUsingKeyboardRef:f,dir:m,modal:s,children:r})})})};Te.displayName=R;var Ee=`MenuAnchor`,W=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,a=V(n);return(0,w.jsx)(i,{...a,...r,ref:t})});W.displayName=Ee;var De=`MenuPortal`,[Oe,ke]=B(De,{forceMount:void 0}),Ae=e=>{let{__scopeMenu:t,forceMount:n,children:r,container:i}=e,a=H(De,t);return(0,w.jsx)(Oe,{scope:t,forceMount:n,children:(0,w.jsx)(x,{present:n||a.open,children:(0,w.jsx)(m,{asChild:!0,container:i,children:r})})})};Ae.displayName=De;var G=`MenuContent`,[je,Me]=B(G),Ne=C.forwardRef((e,t)=>{let n=ke(G,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=H(G,e.__scopeMenu),o=U(G,e.__scopeMenu);return(0,w.jsx)(z.Provider,{scope:e.__scopeMenu,children:(0,w.jsx)(x,{present:r||a.open,children:(0,w.jsx)(z.Slot,{scope:e.__scopeMenu,children:o.modal?(0,w.jsx)(Pe,{...i,ref:t}):(0,w.jsx)(Fe,{...i,ref:t})})})})}),Pe=C.forwardRef((e,t)=>{let n=H(G,e.__scopeMenu),r=C.useRef(null),i=y(t,r);return C.useEffect(()=>{let e=r.current;if(e)return S(e)},[]),(0,w.jsx)(Le,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:l(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),Fe=C.forwardRef((e,t)=>{let n=H(G,e.__scopeMenu);return(0,w.jsx)(Le,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Ie=s(`MenuContent.ScrollLock`),Le=C.forwardRef((e,t)=>{let{__scopeMenu:n,loop:i=!1,trapFocus:a,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:c,onEntryFocus:u,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:m,onDismiss:g,disableOutsideScroll:_,...b}=e,x=H(G,n),S=U(G,n),T=V(n),E=Se(n),D=ye(n),[O,ne]=C.useState(null),k=C.useRef(null),A=y(t,k,x.onContentChange),j=C.useRef(0),M=C.useRef(``),re=C.useRef(0),N=C.useRef(null),P=C.useRef(`right`),F=C.useRef(0),I=_?te:C.Fragment,ie=_?{as:Ie,allowPinchZoom:!0}:void 0,ae=e=>{let t=M.current+e,n=D().filter(e=>!e.disabled),r=document.activeElement,i=n.find(e=>e.ref.current===r)?.textValue,a=gt(n.map(e=>e.textValue),t,i),o=n.find(e=>e.textValue===a)?.ref.current;(function e(t){M.current=t,window.clearTimeout(j.current),t!==``&&(j.current=window.setTimeout(()=>e(``),1e3))})(t),o&&setTimeout(()=>o.focus())};C.useEffect(()=>()=>window.clearTimeout(j.current),[]),r();let L=C.useCallback(e=>P.current===N.current?.side&&vt(e,N.current?.area),[]);return(0,w.jsx)(je,{scope:n,searchRef:M,onItemEnter:C.useCallback(e=>{L(e)&&e.preventDefault()},[L]),onItemLeave:C.useCallback(e=>{L(e)||(k.current?.focus(),ne(null))},[L]),onTriggerLeave:C.useCallback(e=>{L(e)&&e.preventDefault()},[L]),pointerGraceTimerRef:re,onPointerGraceIntentChange:C.useCallback(e=>{N.current=e},[]),children:(0,w.jsx)(I,{...ie,children:(0,w.jsx)(ee,{asChild:!0,trapped:a,onMountAutoFocus:l(o,e=>{e.preventDefault(),k.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:s,children:(0,w.jsx)(v,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:d,onPointerDownOutside:f,onFocusOutside:p,onInteractOutside:m,onDismiss:g,children:(0,w.jsx)(de,{asChild:!0,...E,dir:S.dir,orientation:`vertical`,loop:i,currentTabStopId:O,onCurrentTabStopIdChange:ne,onEntryFocus:l(u,e=>{S.isUsingKeyboardRef.current||e.preventDefault()}),preventScrollOnEntryFocus:!0,children:(0,w.jsx)(h,{role:`menu`,"aria-orientation":`vertical`,"data-state":pt(x.open),"data-radix-menu-content":``,dir:S.dir,...T,...b,ref:A,style:{outline:`none`,...b.style},onKeyDown:l(b.onKeyDown,e=>{let t=e.target.closest(`[data-radix-menu-content]`)===e.currentTarget,n=e.ctrlKey||e.altKey||e.metaKey,r=e.key.length===1;t&&(e.key===`Tab`&&e.preventDefault(),!n&&r&&ae(e.key));let i=k.current;if(e.target!==i||!ge.includes(e.key))return;e.preventDefault();let a=D().filter(e=>!e.disabled).map(e=>e.ref.current);he.includes(e.key)&&a.reverse(),mt(a)}),onBlur:l(e.onBlur,e=>{e.currentTarget.contains(e.target)||(window.clearTimeout(j.current),M.current=``)}),onPointerMove:l(e.onPointerMove,Z(e=>{let t=e.target,n=F.current!==e.clientX;e.currentTarget.contains(t)&&n&&(P.current=e.clientX>F.current?`right`:`left`,F.current=e.clientX)}))})})})})})})});Ne.displayName=G;var Re=`MenuGroup`,ze=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(d.div,{role:`group`,...r,ref:t})});ze.displayName=Re;var Be=`MenuLabel`,Ve=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(d.div,{...r,ref:t})});Ve.displayName=Be;var K=`MenuItem`,He=`menu.itemSelect`,q=C.forwardRef((e,t)=>{let{disabled:n=!1,onSelect:r,...i}=e,a=C.useRef(null),o=U(K,e.__scopeMenu),s=Me(K,e.__scopeMenu),c=y(t,a),u=C.useRef(!1),d=()=>{let e=a.current;if(!n&&e){let t=new CustomEvent(He,{bubbles:!0,cancelable:!0});e.addEventListener(He,e=>r?.(e),{once:!0}),p(e,t),t.defaultPrevented?u.current=!1:o.onClose()}};return(0,w.jsx)(Ue,{...i,ref:c,disabled:n,onClick:l(e.onClick,d),onPointerDown:t=>{e.onPointerDown?.(t),u.current=!0},onPointerUp:l(e.onPointerUp,e=>{u.current||e.currentTarget?.click()}),onKeyDown:l(e.onKeyDown,e=>{let t=s.searchRef.current!==``;n||t&&e.key===` `||pe.includes(e.key)&&(e.currentTarget.click(),e.preventDefault())})})});q.displayName=K;var Ue=C.forwardRef((e,t)=>{let{__scopeMenu:n,disabled:r=!1,textValue:i,...a}=e,o=Me(K,n),s=Se(n),c=C.useRef(null),u=y(t,c),[f,p]=C.useState(!1),[m,h]=C.useState(``);return C.useEffect(()=>{let e=c.current;e&&h((e.textContent??``).trim())},[a.children]),(0,w.jsx)(z.ItemSlot,{scope:n,disabled:r,textValue:i??m,children:(0,w.jsx)(fe,{asChild:!0,...s,focusable:!r,children:(0,w.jsx)(d.div,{role:`menuitem`,"data-highlighted":f?``:void 0,"aria-disabled":r||void 0,"data-disabled":r?``:void 0,...a,ref:u,onPointerMove:l(e.onPointerMove,Z(e=>{r?o.onItemLeave(e):(o.onItemEnter(e),e.defaultPrevented||e.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:l(e.onPointerLeave,Z(e=>o.onItemLeave(e))),onFocus:l(e.onFocus,()=>p(!0)),onBlur:l(e.onBlur,()=>p(!1))})})})}),We=`MenuCheckboxItem`,Ge=C.forwardRef((e,t)=>{let{checked:n=!1,onCheckedChange:r,...i}=e;return(0,w.jsx)($e,{scope:e.__scopeMenu,checked:n,children:(0,w.jsx)(q,{role:`menuitemcheckbox`,"aria-checked":Y(n)?`mixed`:n,...i,ref:t,"data-state":X(n),onSelect:l(i.onSelect,()=>r?.(Y(n)?!0:!n),{checkForDefaultPrevented:!1})})})});Ge.displayName=We;var Ke=`MenuRadioGroup`,[qe,Je]=B(Ke,{value:void 0,onValueChange:()=>{}}),Ye=C.forwardRef((e,t)=>{let{value:n,onValueChange:r,...i}=e,a=u(r);return(0,w.jsx)(qe,{scope:e.__scopeMenu,value:n,onValueChange:a,children:(0,w.jsx)(ze,{...i,ref:t})})});Ye.displayName=Ke;var Xe=`MenuRadioItem`,Ze=C.forwardRef((e,t)=>{let{value:n,...r}=e,i=Je(Xe,e.__scopeMenu),a=n===i.value;return(0,w.jsx)($e,{scope:e.__scopeMenu,checked:a,children:(0,w.jsx)(q,{role:`menuitemradio`,"aria-checked":a,...r,ref:t,"data-state":X(a),onSelect:l(r.onSelect,()=>i.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});Ze.displayName=Xe;var Qe=`MenuItemIndicator`,[$e,et]=B(Qe,{checked:!1}),tt=C.forwardRef((e,t)=>{let{__scopeMenu:n,forceMount:r,...i}=e,a=et(Qe,n);return(0,w.jsx)(x,{present:r||Y(a.checked)||a.checked===!0,children:(0,w.jsx)(d.span,{...i,ref:t,"data-state":X(a.checked)})})});tt.displayName=Qe;var nt=`MenuSeparator`,rt=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e;return(0,w.jsx)(d.div,{role:`separator`,"aria-orientation":`horizontal`,...r,ref:t})});rt.displayName=nt;var it=`MenuArrow`,at=C.forwardRef((e,t)=>{let{__scopeMenu:n,...r}=e,i=V(n);return(0,w.jsx)(b,{...i,...r,ref:t})});at.displayName=it;var ot=`MenuSub`,[st,ct]=B(ot),lt=e=>{let{__scopeMenu:t,children:n,open:r=!1,onOpenChange:i}=e,a=H(ot,t),s=V(t),[c,l]=C.useState(null),[d,p]=C.useState(null),m=u(i);return C.useEffect(()=>(a.open===!1&&m(!1),()=>m(!1)),[a.open,m]),(0,w.jsx)(o,{...s,children:(0,w.jsx)(Ce,{scope:t,open:r,onOpenChange:m,content:d,onContentChange:p,children:(0,w.jsx)(st,{scope:t,contentId:f(),triggerId:f(),trigger:c,onTriggerChange:l,children:n})})})};lt.displayName=ot;var J=`MenuSubTrigger`,ut=C.forwardRef((e,t)=>{let n=H(J,e.__scopeMenu),r=U(J,e.__scopeMenu),i=ct(J,e.__scopeMenu),a=Me(J,e.__scopeMenu),o=C.useRef(null),{pointerGraceTimerRef:s,onPointerGraceIntentChange:c}=a,u={__scopeMenu:e.__scopeMenu},d=C.useCallback(()=>{o.current&&window.clearTimeout(o.current),o.current=null},[]);return C.useEffect(()=>d,[d]),C.useEffect(()=>{let e=s.current;return()=>{window.clearTimeout(e),c(null)}},[s,c]),(0,w.jsx)(W,{asChild:!0,...u,children:(0,w.jsx)(Ue,{id:i.triggerId,"aria-haspopup":`menu`,"aria-expanded":n.open,"aria-controls":i.contentId,"data-state":pt(n.open),...e,ref:_(t,i.onTriggerChange),onClick:t=>{e.onClick?.(t),!(e.disabled||t.defaultPrevented)&&(t.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:l(e.onPointerMove,Z(t=>{a.onItemEnter(t),!t.defaultPrevented&&!e.disabled&&!n.open&&!o.current&&(a.onPointerGraceIntentChange(null),o.current=window.setTimeout(()=>{n.onOpenChange(!0),d()},100))})),onPointerLeave:l(e.onPointerLeave,Z(e=>{d();let t=n.content?.getBoundingClientRect();if(t){let r=n.content?.dataset.side,i=r===`right`,o=i?-5:5,c=t[i?`left`:`right`],l=t[i?`right`:`left`];a.onPointerGraceIntentChange({area:[{x:e.clientX+o,y:e.clientY},{x:c,y:t.top},{x:l,y:t.top},{x:l,y:t.bottom},{x:c,y:t.bottom}],side:r}),window.clearTimeout(s.current),s.current=window.setTimeout(()=>a.onPointerGraceIntentChange(null),300)}else{if(a.onTriggerLeave(e),e.defaultPrevented)return;a.onPointerGraceIntentChange(null)}})),onKeyDown:l(e.onKeyDown,t=>{let i=a.searchRef.current!==``;e.disabled||i&&t.key===` `||_e[r.dir].includes(t.key)&&(n.onOpenChange(!0),n.content?.focus(),t.preventDefault())})})})});ut.displayName=J;var dt=`MenuSubContent`,ft=C.forwardRef((e,t)=>{let n=ke(G,e.__scopeMenu),{forceMount:r=n.forceMount,...i}=e,a=H(G,e.__scopeMenu),o=U(G,e.__scopeMenu),s=ct(dt,e.__scopeMenu),c=C.useRef(null),u=y(t,c);return(0,w.jsx)(z.Provider,{scope:e.__scopeMenu,children:(0,w.jsx)(x,{present:r||a.open,children:(0,w.jsx)(z.Slot,{scope:e.__scopeMenu,children:(0,w.jsx)(Le,{id:s.contentId,"aria-labelledby":s.triggerId,...i,ref:u,align:`start`,side:o.dir===`rtl`?`left`:`right`,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:e=>{o.isUsingKeyboardRef.current&&c.current?.focus(),e.preventDefault()},onCloseAutoFocus:e=>e.preventDefault(),onFocusOutside:l(e.onFocusOutside,e=>{e.target!==s.trigger&&a.onOpenChange(!1)}),onEscapeKeyDown:l(e.onEscapeKeyDown,e=>{o.onClose(),e.preventDefault()}),onKeyDown:l(e.onKeyDown,e=>{let t=e.currentTarget.contains(e.target),n=ve[o.dir].includes(e.key);t&&n&&(a.onOpenChange(!1),s.trigger?.focus(),e.preventDefault())})})})})})});ft.displayName=dt;function pt(e){return e?`open`:`closed`}function Y(e){return e===`indeterminate`}function X(e){return Y(e)?`indeterminate`:e?`checked`:`unchecked`}function mt(e){let t=document.activeElement;for(let n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function ht(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function gt(e,t,n){let r=t.length>1&&Array.from(t).every(e=>e===t[0])?t[0]:t,i=n?e.indexOf(n):-1,a=ht(e,Math.max(i,0));r.length===1&&(a=a.filter(e=>e!==n));let o=a.find(e=>e.toLowerCase().startsWith(r.toLowerCase()));return o===n?void 0:o}function _t(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function vt(e,t){return t?_t({x:e.clientX,y:e.clientY},t):!1}function Z(e){return t=>t.pointerType===`mouse`?e(t):void 0}var yt=Te,bt=W,xt=Ae,St=Ne,Ct=ze,wt=Ve,Tt=q,Et=Ge,Dt=Ye,Ot=Ze,kt=tt,At=rt,jt=at,Mt=ut,Nt=ft,Q=`DropdownMenu`,[Pt,Ft]=c(Q,[xe]),$=xe(),[It,Lt]=Pt(Q),Rt=e=>{let{__scopeDropdownMenu:t,children:n,dir:r,open:i,defaultOpen:a,onOpenChange:o,modal:s=!0}=e,c=$(t),l=C.useRef(null),[u,d]=g({prop:i,defaultProp:a??!1,onChange:o,caller:Q});return(0,w.jsx)(It,{scope:t,triggerId:f(),triggerRef:l,contentId:f(),open:u,onOpenChange:d,onOpenToggle:C.useCallback(()=>d(e=>!e),[d]),modal:s,children:(0,w.jsx)(yt,{...c,open:u,onOpenChange:d,dir:r,modal:s,children:n})})};Rt.displayName=Q;var zt=`DropdownMenuTrigger`,Bt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,disabled:r=!1,...i}=e,a=Lt(zt,n),o=$(n);return(0,w.jsx)(bt,{asChild:!0,...o,children:(0,w.jsx)(d.button,{type:`button`,id:a.triggerId,"aria-haspopup":`menu`,"aria-expanded":a.open,"aria-controls":a.open?a.contentId:void 0,"data-state":a.open?`open`:`closed`,"data-disabled":r?``:void 0,disabled:r,...i,ref:_(t,a.triggerRef),onPointerDown:l(e.onPointerDown,e=>{!r&&e.button===0&&e.ctrlKey===!1&&(a.onOpenToggle(),a.open||e.preventDefault())}),onKeyDown:l(e.onKeyDown,e=>{r||([`Enter`,` `].includes(e.key)&&a.onOpenToggle(),e.key===`ArrowDown`&&a.onOpenChange(!0),[`Enter`,` `,`ArrowDown`].includes(e.key)&&e.preventDefault())})})})});Bt.displayName=zt;var Vt=`DropdownMenuPortal`,Ht=e=>{let{__scopeDropdownMenu:t,...n}=e,r=$(t);return(0,w.jsx)(xt,{...r,...n})};Ht.displayName=Vt;var Ut=`DropdownMenuContent`,Wt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=Lt(Ut,n),a=$(n),o=C.useRef(!1);return(0,w.jsx)(St,{id:i.contentId,"aria-labelledby":i.triggerId,...a,...r,ref:t,onCloseAutoFocus:l(e.onCloseAutoFocus,e=>{o.current||i.triggerRef.current?.focus(),o.current=!1,e.preventDefault()}),onInteractOutside:l(e.onInteractOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0,r=t.button===2||n;(!i.modal||r)&&(o.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});Wt.displayName=Ut;var Gt=`DropdownMenuGroup`,Kt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Ct,{...i,...r,ref:t})});Kt.displayName=Gt;var qt=`DropdownMenuLabel`,Jt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(wt,{...i,...r,ref:t})});Jt.displayName=qt;var Yt=`DropdownMenuItem`,Xt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Tt,{...i,...r,ref:t})});Xt.displayName=Yt;var Zt=`DropdownMenuCheckboxItem`,Qt=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Et,{...i,...r,ref:t})});Qt.displayName=Zt;var $t=`DropdownMenuRadioGroup`,en=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Dt,{...i,...r,ref:t})});en.displayName=$t;var tn=`DropdownMenuRadioItem`,nn=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Ot,{...i,...r,ref:t})});nn.displayName=tn;var rn=`DropdownMenuItemIndicator`,an=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(kt,{...i,...r,ref:t})});an.displayName=rn;var on=`DropdownMenuSeparator`,sn=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(At,{...i,...r,ref:t})});sn.displayName=on;var cn=`DropdownMenuArrow`,ln=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(jt,{...i,...r,ref:t})});ln.displayName=cn;var un=`DropdownMenuSubTrigger`,dn=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Mt,{...i,...r,ref:t})});dn.displayName=un;var fn=`DropdownMenuSubContent`,pn=C.forwardRef((e,t)=>{let{__scopeDropdownMenu:n,...r}=e,i=$(n);return(0,w.jsx)(Nt,{...i,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-dropdown-menu-content-available-width":`var(--radix-popper-available-width)`,"--radix-dropdown-menu-content-available-height":`var(--radix-popper-available-height)`,"--radix-dropdown-menu-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-dropdown-menu-trigger-height":`var(--radix-popper-anchor-height)`}})});pn.displayName=fn;var mn=Rt,hn=Bt,gn=Ht,_n=Wt,vn=Xt;export{hn as a,mn as i,vn as n,gn as r,_n as t};
2
- //# sourceMappingURL=dist-Brod9LF3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extension-settings-page-CP9JNc4m.js","names":[],"sources":["../../../../../web/src/components/ui/schema-form.tsx","../../../../../web/src/features/extensions/extension-auto-settings.tsx","../../../../../web/src/features/extensions/extension-settings-page.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { cn } from '@/lib/cn';\n\nexport type JsonSchema = Record<string, unknown>;\n\ntype SchemaFormProps = {\n schema: JsonSchema;\n values: Record<string, unknown>;\n onChange: (values: Record<string, unknown>) => void;\n disabled?: boolean;\n className?: string;\n};\n\nfunction isRecord(x: unknown): x is Record<string, unknown> {\n return typeof x === 'object' && x !== null && !Array.isArray(x);\n}\n\ntype FieldDef = {\n key: string;\n sub: JsonSchema;\n order: number;\n group: string;\n hidden: boolean;\n};\n\nfunction getXOrder(s: JsonSchema): number {\n const v = s['x-order'];\n return typeof v === 'number' && !Number.isNaN(v) ? v : 999;\n}\n\nfunction getXGroup(s: JsonSchema): string {\n const v = s['x-group'];\n return typeof v === 'string' && v.length > 0 ? v : '';\n}\n\nfunction isHidden(s: JsonSchema): boolean {\n return s['x-hidden'] === true;\n}\n\nfunction sortedFields(schema: JsonSchema): FieldDef[] {\n const props = schema.properties;\n if (!isRecord(props)) return [];\n const out: FieldDef[] = [];\n for (const [key, sub] of Object.entries(props)) {\n if (!isRecord(sub)) continue;\n if (isHidden(sub)) continue;\n out.push({\n key,\n sub: sub as JsonSchema,\n order: getXOrder(sub as JsonSchema),\n group: getXGroup(sub as JsonSchema),\n hidden: false,\n });\n }\n out.sort((a, b) => a.order - b.order || a.key.localeCompare(b.key));\n return out;\n}\n\nfunction groupFields(fields: FieldDef[]): Map<string, FieldDef[]> {\n const m = new Map<string, FieldDef[]>();\n for (const f of fields) {\n const g = f.group;\n if (!m.has(g)) m.set(g, []);\n m.get(g)!.push(f);\n }\n return m;\n}\n\nfunction StringField({\n name,\n s,\n value,\n onChange,\n disabled,\n}: {\n name: string;\n s: JsonSchema;\n value: string;\n onChange: (v: string) => void;\n disabled: boolean;\n}) {\n const desc = typeof s.description === 'string' ? s.description : undefined;\n const placeholder =\n (typeof s['x-placeholder'] === 'string' ? s['x-placeholder'] : null) || desc;\n const fmt = s.format;\n if (Array.isArray(s.enum) && s.enum.every((x) => typeof x === 'string')) {\n return (\n <div className=\"flex flex-col gap-1.5\">\n {desc ? <label className=\"text-xs text-fg-muted\">{desc}</label> : null}\n <select\n name={name}\n className=\"ui-input h-9 rounded-md border border-edge bg-surface-base px-2 text-sm text-fg\"\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n >\n {(s.enum as string[]).map((op) => (\n <option key={op} value={op}>\n {op}\n </option>\n ))}\n </select>\n </div>\n );\n }\n const inputType = fmt === 'password' ? 'password' : 'text';\n return (\n <div className=\"flex flex-col gap-1.5\">\n {desc ? <label className=\"text-xs text-fg-muted\">{desc}</label> : null}\n <input\n name={name}\n type={inputType}\n className=\"ui-input h-9 rounded-md border border-edge bg-surface-base px-2.5 text-sm text-fg placeholder:text-fg-muted/70\"\n value={value}\n placeholder={placeholder}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n );\n}\n\nfunction NumberField({\n s,\n value,\n onChange,\n disabled,\n}: {\n s: JsonSchema;\n value: number;\n onChange: (v: number) => void;\n disabled: boolean;\n}) {\n const desc = typeof s.description === 'string' ? s.description : undefined;\n return (\n <div className=\"flex flex-col gap-1.5\">\n {desc ? <label className=\"text-xs text-fg-muted\">{desc}</label> : null}\n <input\n type=\"number\"\n className=\"ui-input h-9 rounded-md border border-edge bg-surface-base px-2.5 text-sm text-fg\"\n value={Number.isFinite(value) ? value : 0}\n disabled={disabled}\n onChange={(e) => onChange(Number(e.target.value))}\n />\n </div>\n );\n}\n\nfunction BooleanField({\n s,\n value,\n onChange,\n disabled,\n}: {\n s: JsonSchema;\n value: boolean;\n onChange: (v: boolean) => void;\n disabled: boolean;\n}) {\n const desc = typeof s.description === 'string' ? s.description : undefined;\n const labelText =\n desc ?? (typeof s.title === 'string' && s.title.length > 0 ? s.title : 'Enable');\n return (\n <label className=\"flex items-center gap-2 text-sm text-fg\">\n <input\n type=\"checkbox\"\n className=\"h-4 w-4 rounded border border-edge\"\n checked={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.checked)}\n />\n <span>{labelText}</span>\n </label>\n );\n}\n\nfunction ArrayStringField({\n s,\n value,\n onChange,\n disabled,\n}: {\n s: JsonSchema;\n value: string[];\n onChange: (v: string[]) => void;\n disabled: boolean;\n}) {\n const desc = typeof s.description === 'string' ? s.description : undefined;\n const items = s.items;\n const isStringItems = isRecord(items) && items.type === 'string';\n if (!isStringItems) {\n return <p className=\"text-xs text-fg-muted\">Unsupported array type</p>;\n }\n const add = (t: string) => {\n const n = t.trim();\n if (!n || value.includes(n)) return;\n onChange([...value, n]);\n };\n return (\n <div className=\"flex flex-col gap-1.5\">\n {desc ? <label className=\"text-xs text-fg-muted\">{desc}</label> : null}\n <div className=\"flex flex-wrap gap-1\">\n {value.map((t) => (\n <span\n key={t}\n className=\"inline-flex items-center gap-1 rounded-md border border-edge bg-surface-panel px-2 py-0.5 text-sm\"\n >\n {t}\n <button\n type=\"button\"\n className=\"text-fg-muted hover:text-fg\"\n disabled={disabled}\n onClick={() => onChange(value.filter((x) => x !== t))}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n <input\n className=\"ui-input h-9 rounded-md border border-edge bg-surface-base px-2.5 text-sm\"\n disabled={disabled}\n placeholder=\"Add and press Enter\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n add((e.target as HTMLInputElement).value);\n (e.target as HTMLInputElement).value = '';\n }\n }}\n />\n </div>\n );\n}\n\nfunction FieldRow({\n k,\n sub,\n value,\n onValue,\n disabled,\n}: {\n k: string;\n sub: JsonSchema;\n value: unknown;\n onValue: (next: unknown) => void;\n disabled: boolean;\n}) {\n const t = sub.type;\n const title =\n (typeof sub.title === 'string' && sub.title.length > 0 ? sub.title : null) ?? k;\n if (t === 'boolean') {\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n <BooleanField\n s={sub}\n value={value === true}\n disabled={disabled}\n onChange={(b) => onValue(b)}\n />\n </div>\n );\n }\n if (t === 'number' || t === 'integer') {\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n <NumberField\n s={sub}\n value={typeof value === 'number' ? value : 0}\n disabled={disabled}\n onChange={onValue}\n />\n </div>\n );\n }\n if (t === 'string') {\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n <StringField\n name={k}\n s={sub}\n value={typeof value === 'string' ? value : ''}\n disabled={disabled}\n onChange={onValue}\n />\n </div>\n );\n }\n if (t === 'array') {\n const items = sub.items;\n if (isRecord(items) && items.type === 'string') {\n return (\n <div className=\"space-y-1.5\">\n <p className=\"text-sm font-medium text-fg\">{title}</p>\n <ArrayStringField\n s={sub}\n value={Array.isArray(value) && value.every((x) => typeof x === 'string') ? value : []}\n disabled={disabled}\n onChange={onValue}\n />\n </div>\n );\n }\n }\n return (\n <p className=\"text-xs text-fg-muted\">\n {title}: unsupported field type\n {typeof t === 'string' ? ` (${t})` : ''}\n </p>\n );\n}\n\n/**\n * Renders a JSON Schema (type: object) as a form using Gateway Console design tokens.\n */\nexport function SchemaForm({ schema, values, onChange, disabled = false, className }: SchemaFormProps) {\n const fields = useMemo(() => {\n if (schema.type !== 'object') return [];\n return sortedFields(schema);\n }, [schema]);\n\n const grouped = useMemo(() => {\n if (fields.length === 0) return new Map<string, FieldDef[]>();\n return groupFields(fields);\n }, [fields]);\n\n const setKey = useCallback(\n (key: string, next: unknown) => {\n onChange({ ...values, [key]: next });\n },\n [onChange, values],\n );\n\n if (schema.type !== 'object' || !isRecord(schema.properties) || fields.length === 0) {\n return null;\n }\n\n const groupKeys = Array.from(grouped.keys()).sort((a, b) => {\n if (a === '') return -1;\n if (b === '') return 1;\n return a.localeCompare(b);\n });\n\n return (\n <div className={cn('flex flex-col gap-4', className)}>\n {groupKeys.map((gk) => {\n const list = grouped.get(gk) ?? [];\n const block = list.map((f) => (\n <FieldRow\n key={f.key}\n k={f.key}\n sub={f.sub}\n value={values[f.key]}\n onValue={(v) => setKey(f.key, v)}\n disabled={disabled}\n />\n ));\n if (gk === '') {\n return <div key=\"default\">{block}</div>;\n }\n return (\n <details\n key={gk}\n className=\"group rounded-lg border border-edge bg-surface-panel/40 open:bg-surface-base\"\n open\n >\n <summary className=\"cursor-pointer select-none px-3 py-2 text-sm font-medium text-fg group-open:rounded-b-none\">\n {gk}\n </summary>\n <div className=\"space-y-4 border-t border-edge p-3\">{block}</div>\n </details>\n );\n })}\n </div>\n );\n}\n\n/** Extract per-key defaults from a JSON object schema for \"Reset\" actions. */\nexport function extractObjectDefaults(\n schema: JsonSchema,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (schema.type !== 'object' || !isRecord(schema.properties)) {\n return out;\n }\n for (const [k, sub] of Object.entries(schema.properties)) {\n if (!isRecord(sub)) continue;\n if (Object.prototype.hasOwnProperty.call(sub, 'default')) {\n out[k] = sub.default;\n }\n }\n return out;\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR from 'swr';\n\nimport { Button } from '@/components/ui/button';\nimport { extractObjectDefaults, SchemaForm, type JsonSchema } from '@/components/ui/schema-form';\nimport { apiFetch, fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\nimport { useGatewayStore } from '@/stores/gateway-store';\n\ntype ExtensionDetailResponse = {\n manifest: { configSchema?: JsonSchema };\n};\n\nexport function ExtensionAutoSettings({ extensionId }: { extensionId: string }) {\n const hasToken = useGatewayStore((s) => Boolean(s.token));\n const { data: detail, error: detailError } = useSWR(\n hasToken && extensionId ? `ext-detail-${extensionId}` : null,\n () => fetchJson<ExtensionDetailResponse>(apiUrl(`/api/extensions/${encodeURIComponent(extensionId)}`)),\n );\n\n const { data: remoteConfig, mutate: mutateConfig, error: configError } = useSWR(\n hasToken && extensionId ? `ext-cfg-${extensionId}` : null,\n () =>\n fetchJson<Record<string, unknown>>(\n apiUrl(`/api/extensions/${encodeURIComponent(extensionId)}/config`),\n ),\n );\n\n const schema = detail?.manifest?.configSchema;\n const defaults = useMemo(\n () => (schema && schema.type === 'object' ? extractObjectDefaults(schema) : {}),\n [schema],\n );\n\n const savedValues = useMemo(\n () => ({ ...defaults, ...(remoteConfig ?? {}) }),\n [defaults, remoteConfig],\n );\n\n const [localValues, setLocalValues] = useState<Record<string, unknown>>({});\n const [isDirty, setIsDirty] = useState(false);\n const [saving, setSaving] = useState(false);\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saveSuccess, setSaveSuccess] = useState(false);\n\n useEffect(() => {\n if (isDirty) return;\n setLocalValues(savedValues);\n }, [isDirty, savedValues]);\n\n const onChange = useCallback((next: Record<string, unknown>) => {\n setLocalValues(next);\n setIsDirty(true);\n setSaveError(null);\n }, []);\n\n const handleDiscard = useCallback(() => {\n setLocalValues(savedValues);\n setIsDirty(false);\n setSaveError(null);\n }, [savedValues]);\n\n const handleResetDefaults = useCallback(() => {\n if (!schema || schema.type !== 'object') return;\n setLocalValues({ ...extractObjectDefaults(schema) });\n setIsDirty(true);\n setSaveError(null);\n }, [schema]);\n\n const handleSave = useCallback(async () => {\n if (!extensionId) return;\n setSaving(true);\n setSaveError(null);\n try {\n const res = await apiFetch(\n apiUrl(`/api/extensions/${encodeURIComponent(extensionId)}/config`),\n { method: 'PATCH', body: JSON.stringify(localValues) },\n );\n if (!res.ok) {\n const body = (await res.json().catch(() => ({}))) as { error?: { message?: string } };\n throw new Error(body.error?.message ?? res.statusText);\n }\n await mutateConfig(localValues, false);\n setIsDirty(false);\n setSaveSuccess(true);\n window.setTimeout(() => setSaveSuccess(false), 3000);\n } catch (e) {\n setSaveError(e instanceof Error ? e.message : String(e));\n } finally {\n setSaving(false);\n }\n }, [extensionId, localValues, mutateConfig]);\n\n if (!hasToken) {\n return null;\n }\n\n if (detailError || configError) {\n const err = (detailError ?? configError) as Error;\n return (\n <p className=\"text-sm text-fg-muted\">\n Could not load extension settings: {err instanceof Error ? err.message : String(err)}\n </p>\n );\n }\n\n if (!schema || schema.type !== 'object') {\n return null;\n }\n\n return (\n <div className=\"mb-6 flex flex-col gap-3 rounded-xl border border-edge bg-surface-base p-4\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"text-sm font-semibold text-fg\">Configuration</h2>\n <div className=\"flex flex-wrap items-center gap-2\">\n {saveSuccess ? (\n <span className=\"text-xs text-emerald-600 dark:text-emerald-400\">Saved</span>\n ) : null}\n {saveError ? <span className=\"text-xs text-red-600 dark:text-red-400\">{saveError}</span> : null}\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 text-xs\"\n disabled={!isDirty}\n onClick={handleDiscard}\n >\n Discard\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-8 text-xs\"\n onClick={handleResetDefaults}\n >\n Reset to defaults\n </Button>\n <Button\n type=\"button\"\n variant=\"primary\"\n className=\"h-8 text-xs\"\n disabled={!isDirty || saving}\n onClick={() => void handleSave()}\n >\n {saving ? 'Saving…' : 'Save'}\n </Button>\n </div>\n </div>\n <SchemaForm schema={schema} values={localValues} onChange={onChange} disabled={saving} />\n </div>\n );\n}\n","/**\n * Extension settings: auto-generated config form (configSchema) + optional iframe (settingsPanels).\n *\n * Routes: /settings/ext/:extensionId, /settings/ext/:extensionId/:panelId\n */\n\nimport { useParams } from 'react-router-dom';\n\nimport { ExtensionAutoSettings } from './extension-auto-settings';\nimport { ExtensionIframeHost } from './extension-iframe-host';\nimport { useExtensions } from './extension-provider';\n\nexport function ExtensionSettingsPage() {\n const { extensionId, panelId } = useParams<{ extensionId: string; panelId?: string }>();\n const extensions = useExtensions();\n\n if (!extensionId) {\n return <SettingsPanelNotFound message=\"No extension ID provided.\" />;\n }\n\n const extension = extensions.find((ext) => ext.id === extensionId);\n if (!extension) {\n return (\n <SettingsPanelNotFound\n message={`Extension \"${extensionId}\" not found or is not available in this workspace.`}\n />\n );\n }\n\n const panels = extension.ui?.contributions?.settingsPanels;\n const panel = panelId\n ? panels?.find((p) => p.id === panelId || p.id === `${extensionId}.${panelId}`)\n : panels?.[0];\n\n const hasIframe = Boolean(panel && extension.ui);\n const hasAuto = Boolean(extension.hasConfigSchema);\n\n if (!hasAuto && !hasIframe) {\n return (\n <SettingsPanelNotFound\n message={`Extension \"${extensionId}\" has no settings panels or config schema.`}\n />\n );\n }\n\n const title = panel?.title ?? `${extension.name} Settings`;\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <h1 className=\"text-lg font-semibold text-fg\">{title}</h1>\n <ExtensionAutoSettings extensionId={extensionId} />\n {hasIframe && panel && extension.ui ? (\n <div className=\"overflow-hidden rounded-xl border border-edge bg-surface-base\">\n <ExtensionIframeHost\n extensionId={extensionId}\n extensionName={extension.name}\n entrypoint={panel.entrypoint}\n permissions={extension.ui?.permissions}\n title={panel.title}\n className=\"w-full\"\n minHeight={120}\n maxHeight={2000}\n />\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction SettingsPanelNotFound({ message }: { message: string }) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8\">\n <p className=\"text-sm text-fg-muted\">{message}</p>\n </div>\n );\n}\n"],"mappings":"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"}