loki-mode 10.2.1 → 10.2.2

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 (70) hide show
  1. package/SKILL.md +2 -2
  2. package/VERSION +1 -1
  3. package/dashboard/__init__.py +1 -1
  4. package/docs/INSTALLATION.md +1 -1
  5. package/docs/v10/BOARD.md +42 -30
  6. package/docs/v10/CONTROL.md +2 -2
  7. package/docs/v10/DECISIONS.md +23 -0
  8. package/docs/v10/DEPS.md +436 -0
  9. package/docs/v10/PROGRESS.md +11 -1
  10. package/loki-ts/dist/loki.js +2 -2
  11. package/mcp/__init__.py +1 -1
  12. package/package.json +1 -1
  13. package/plugins/loki-mode/.claude-plugin/plugin.json +1 -1
  14. package/web-app/dist/assets/{AdminPage-Bj4Y57H2.js → AdminPage-CPcm5w-N.js} +1 -1
  15. package/web-app/dist/assets/{Avatar-5jynZJli.js → Avatar-joQK58YD.js} +1 -1
  16. package/web-app/dist/assets/{Badge-CFO8AJGC.js → Badge-CBXvDcFR.js} +1 -1
  17. package/web-app/dist/assets/{Button-CP1j2DaV.js → Button-CtQScR-c.js} +1 -1
  18. package/web-app/dist/assets/{CockpitPage-Zll66Hle.js → CockpitPage-CW5F1mEF.js} +1 -1
  19. package/web-app/dist/assets/{ComparePage-DLRkXI8P.js → ComparePage-OLBUQA8q.js} +1 -1
  20. package/web-app/dist/assets/{ErrorBoundary-7qrd412U.js → ErrorBoundary-Dk2zlQ-V.js} +1 -1
  21. package/web-app/dist/assets/{EvidenceReceiptPanel-C1yIa5th.js → EvidenceReceiptPanel-e7kiB04s.js} +1 -1
  22. package/web-app/dist/assets/{GitHubIssuesPanel-De9b4P2_.js → GitHubIssuesPanel-DFv1evqu.js} +1 -1
  23. package/web-app/dist/assets/{GitHubPRsPanel-7OolaWea.js → GitHubPRsPanel-CaW7Fa2A.js} +1 -1
  24. package/web-app/dist/assets/{HomePage-zjQW1RDW.js → HomePage-B_cYM0sN.js} +2 -2
  25. package/web-app/dist/assets/{LoginPage-DaN0aZo2.js → LoginPage-C612-fuq.js} +1 -1
  26. package/web-app/dist/assets/{MagicPage-D2tqOXbb.js → MagicPage-C0bTXdIs.js} +1 -1
  27. package/web-app/dist/assets/{MetricsPage-BXQ7let1.js → MetricsPage-BLGBbQKZ.js} +1 -1
  28. package/web-app/dist/assets/{NotFoundPage-BU18AkRf.js → NotFoundPage-B51QBkIq.js} +1 -1
  29. package/web-app/dist/assets/{ProjectPage-C8TZpTte.js → ProjectPage-BagrFqx3.js} +3 -3
  30. package/web-app/dist/assets/{ProjectsPage-4WgWPgU1.js → ProjectsPage-tJrlqxvp.js} +1 -1
  31. package/web-app/dist/assets/{SettingsPage-Bnq1bCoT.js → SettingsPage-Bo0pnj_H.js} +1 -1
  32. package/web-app/dist/assets/{ShowcasePage-Bpzb5zEE.js → ShowcasePage-Caxs7V2J.js} +1 -1
  33. package/web-app/dist/assets/{SystemSettingsPage-C_yTF_mP.js → SystemSettingsPage-CnGJnbki.js} +1 -1
  34. package/web-app/dist/assets/{TeamsPage-B2mYTq9_.js → TeamsPage-BgX13mIy.js} +1 -1
  35. package/web-app/dist/assets/{TemplatesPage-Df1WtQVu.js → TemplatesPage-CdHNUaRL.js} +1 -1
  36. package/web-app/dist/assets/{TerminalOutput-DSZf6_DH.js → TerminalOutput-BS0zV9UI.js} +1 -1
  37. package/web-app/dist/assets/{activity-C2HRfzlU.js → activity-BVPxaqP_.js} +1 -1
  38. package/web-app/dist/assets/{bell-DaPQ48IP.js → bell-DrRrvtr0.js} +1 -1
  39. package/web-app/dist/assets/{bot-Dq9E9Pvb.js → bot-CC3_GW5E.js} +1 -1
  40. package/web-app/dist/assets/{check-CcMk6ibN.js → check-D8J2al5r.js} +1 -1
  41. package/web-app/dist/assets/{chevron-left-C1v3mFcK.js → chevron-left-D8IT1xhk.js} +1 -1
  42. package/web-app/dist/assets/{circle-alert-DssqDkkX.js → circle-alert-BvwSkqCz.js} +1 -1
  43. package/web-app/dist/assets/{clock-DXg07ycH.js → clock-BSuLsNPf.js} +1 -1
  44. package/web-app/dist/assets/{cloud-At8AE9Be.js → cloud-bmqN31a7.js} +1 -1
  45. package/web-app/dist/assets/{code-xml-CDSDQbxY.js → code-xml-D4fUsOqc.js} +1 -1
  46. package/web-app/dist/assets/{database-D9wTxArH.js → database-B8iq-ysc.js} +1 -1
  47. package/web-app/dist/assets/{dollar-sign-CBQaoJeP.js → dollar-sign-BFNvYX8q.js} +1 -1
  48. package/web-app/dist/assets/{file-code-corner-Do8BRnnR.js → file-code-corner-DZP0O2MC.js} +1 -1
  49. package/web-app/dist/assets/{file-plus-DMao8U3w.js → file-plus-Bh0MUIv7.js} +1 -1
  50. package/web-app/dist/assets/{globe-DUTdbwtA.js → globe-CoZFzhbP.js} +1 -1
  51. package/web-app/dist/assets/{hammer-CxlDBgi7.js → hammer-lDKDvNIE.js} +1 -1
  52. package/web-app/dist/assets/{index-B5DfagwG.js → index-DYlP-mdo.js} +2 -2
  53. package/web-app/dist/assets/{layers-OGRD4XBk.js → layers-BYO5x0DZ.js} +1 -1
  54. package/web-app/dist/assets/{loader-circle-CTzIuHy1.js → loader-circle-KiOUdpQs.js} +1 -1
  55. package/web-app/dist/assets/{lock-spYjFot7.js → lock-Chl8Ksc1.js} +1 -1
  56. package/web-app/dist/assets/{package-Bv6RPrKl.js → package-8HQ6OfxN.js} +1 -1
  57. package/web-app/dist/assets/{plus-CTtqhz3R.js → plus-Ea_mDA8V.js} +1 -1
  58. package/web-app/dist/assets/{refresh-cw-DAW_OF7l.js → refresh-cw-w3IR7j4L.js} +1 -1
  59. package/web-app/dist/assets/{rotate-ccw-CqDbk4Tl.js → rotate-ccw-DZe1WQvf.js} +1 -1
  60. package/web-app/dist/assets/{scroll-text-Ri75rHH9.js → scroll-text-BYeO9YNc.js} +1 -1
  61. package/web-app/dist/assets/{server-ZIDlicEZ.js → server-B2oSBTA9.js} +1 -1
  62. package/web-app/dist/assets/{shield-alert-bONIBFPd.js → shield-alert-DGasH16O.js} +1 -1
  63. package/web-app/dist/assets/{thumbs-up-DLHh_TgE.js → thumbs-up-DFHVuuiz.js} +1 -1
  64. package/web-app/dist/assets/{trash-2-BxGqEnKD.js → trash-2-BTJQ9WtO.js} +1 -1
  65. package/web-app/dist/assets/{trending-down-X0HPnJsy.js → trending-down-xsvCqAte.js} +1 -1
  66. package/web-app/dist/assets/{trending-up-Dobr23yV.js → trending-up-B5B1XGe0.js} +1 -1
  67. package/web-app/dist/assets/{upload-DfakwPY7.js → upload-Cc3Y_8Yc.js} +1 -1
  68. package/web-app/dist/assets/{usePolling-Dj4qalKl.js → usePolling-DwebjWkh.js} +1 -1
  69. package/web-app/dist/assets/{user-OaACZgrk.js → user-BYTSxqUG.js} +1 -1
  70. package/web-app/dist/index.html +1 -1
@@ -1 +1 @@
1
- import{a0 as u,r as d,j as e,x as E,T as x,a as b}from"./index-B5DfagwG.js";import{S as h}from"./server-ZIDlicEZ.js";import{H as p}from"./hammer-CxlDBgi7.js";import{B as g}from"./bell-DaPQ48IP.js";import{D as f}from"./database-D9wTxArH.js";import{S as j}from"./shield-alert-bONIBFPd.js";const A=[{id:"claude",name:"Claude",secretKey:"ANTHROPIC_API_KEY",model:"claude-opus-4-7",fallbackOrder:1,enabled:!0},{id:"codex",name:"Codex",secretKey:"OPENAI_API_KEY",model:"gpt-5.3-codex",fallbackOrder:2,enabled:!0}],k={maxIterations:25,timeoutMinutes:60,qualityGateThreshold:80,autoReview:!0,parallelAgents:3},y={sessionTimeoutMinutes:30,allowedOrigins:"*",rateLimitPerMinute:100,requireMFA:!1,ipAllowlist:""},N={emailEnabled:!1,emailAddress:"",browserEnabled:!0,slackEnabled:!1,slackWebhookUrl:"",notifyOnBuildComplete:!0,notifyOnBuildFailure:!0,notifyOnBudgetAlert:!0,notifyOnSecurityEvent:!0},v={logRetentionDays:30,auditRetentionDays:365,sessionRetentionDays:90,autoCleanupEnabled:!0};function C(){const[s,i]=d.useState(A),[a,t]=d.useState(void 0);return d.useEffect(()=>{b.getSecrets().then(r=>t(Object.keys(r))).catch(()=>t(null))},[]),e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure AI provider API keys, model preferences, and fallback chain."}),s.map((r,n)=>e.jsxs("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-[#553DE9]/10 flex items-center justify-center text-xs font-bold text-[#553DE9]",children:r.fallbackOrder}),e.jsx("span",{className:"text-sm font-medium text-[#201515] dark:text-[#E8E6E3]",children:r.name})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("span",{className:"text-xs text-[#939084]",children:r.enabled?"Enabled":"Disabled"}),e.jsx("input",{type:"checkbox",checked:r.enabled,onChange:o=>{const l=[...s];l[n]={...l[n],enabled:o.target.checked},i(l)},className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"API Key"}),e.jsx("p",{className:"px-3 py-2 text-xs font-mono text-[#6B6960]",children:a===void 0?"Checking...":a===null?"unknown (secrets store could not be read)":a.includes(r.secretKey)?`${r.secretKey} is in the Purple Lab secrets store`:`${r.secretKey} is not in the Purple Lab secrets store`})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Model"}),e.jsx("input",{value:r.model,onChange:o=>{const l=[...s];l[n]={...l[n],model:o.target.value},i(l)},className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] font-mono"})]})]})]},r.id))]})}function w(){const[s,i]=d.useState(k),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Default settings for new builds. Individual projects can override these."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Max Iterations"}),e.jsx("input",{type:"number",value:s.maxIterations,onChange:t=>a("maxIterations",parseInt(t.target.value)||0),min:1,max:100,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Timeout (minutes)"}),e.jsx("input",{type:"number",value:s.timeoutMinutes,onChange:t=>a("timeoutMinutes",parseInt(t.target.value)||0),min:5,max:480,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Quality Gate Threshold (%)"}),e.jsx("input",{type:"number",value:s.qualityGateThreshold,onChange:t=>a("qualityGateThreshold",parseInt(t.target.value)||0),min:0,max:100,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"}),e.jsx("div",{className:"mt-1 h-1.5 bg-[#F8F4F0] dark:bg-[#1A1A1E] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full transition-all",style:{width:`${s.qualityGateThreshold}%`,background:s.qualityGateThreshold>=80?"#1FC5A8":s.qualityGateThreshold>=60?"#F59E0B":"#C45B5B"}})})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Parallel Agents"}),e.jsx("input",{type:"number",value:s.parallelAgents,onChange:t=>a("parallelAgents",parseInt(t.target.value)||1),min:1,max:10,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.autoReview,onChange:t=>a("autoReview",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Auto-run code review after each build"})]})]})}function B(){const[s,i]=d.useState(y),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Security settings for session management, rate limiting, and access control."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Session Timeout (minutes)"}),e.jsx("input",{type:"number",value:s.sessionTimeoutMinutes,onChange:t=>a("sessionTimeoutMinutes",parseInt(t.target.value)||0),min:5,max:1440,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Rate Limit (requests/minute)"}),e.jsx("input",{type:"number",value:s.rateLimitPerMinute,onChange:t=>a("rateLimitPerMinute",parseInt(t.target.value)||0),min:10,max:1e4,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Allowed Origins"}),e.jsx("input",{type:"text",value:s.allowedOrigins,onChange:t=>a("allowedOrigins",t.target.value),placeholder:"* or comma-separated origins",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"IP Allowlist"}),e.jsx("input",{type:"text",value:s.ipAllowlist,onChange:t=>a("ipAllowlist",t.target.value),placeholder:"Leave empty for no restriction",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.requireMFA,onChange:t=>a("requireMFA",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Require MFA for all users"}),!s.requireMFA&&e.jsxs("span",{className:"text-xs text-[#F59E0B] flex items-center gap-1",children:[e.jsx(x,{size:12}),"Not recommended for production"]})]})]})}function D(){const[s,i]=d.useState(N),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure how and when you receive notifications about system events."}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-xs font-semibold text-[#6B6960] uppercase tracking-wider",children:"Channels"}),e.jsxs("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg divide-y divide-[#ECEAE3] dark:divide-[#2A2A30]",children:[e.jsxs("div",{className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Browser Notifications"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Show desktop notifications"})]}),e.jsx("input",{type:"checkbox",checked:s.browserEnabled,onChange:t=>a("browserEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),e.jsxs("div",{className:"p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Email Notifications"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Send email for important events"})]}),e.jsx("input",{type:"checkbox",checked:s.emailEnabled,onChange:t=>a("emailEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),s.emailEnabled&&e.jsx("input",{type:"email",value:s.emailAddress,onChange:t=>a("emailAddress",t.target.value),placeholder:"notifications@company.com",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084]"})]}),e.jsxs("div",{className:"p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Slack Webhook"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Post to a Slack channel"})]}),e.jsx("input",{type:"checkbox",checked:s.slackEnabled,onChange:t=>a("slackEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),s.slackEnabled&&e.jsx("input",{type:"url",value:s.slackWebhookUrl,onChange:t=>a("slackWebhookUrl",t.target.value),placeholder:"https://hooks.slack.com/services/...",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-xs font-semibold text-[#6B6960] uppercase tracking-wider",children:"Events"}),e.jsx("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg divide-y divide-[#ECEAE3] dark:divide-[#2A2A30]",children:[{key:"notifyOnBuildComplete",label:"Build Complete",desc:"When a build finishes successfully"},{key:"notifyOnBuildFailure",label:"Build Failure",desc:"When a build fails or times out"},{key:"notifyOnBudgetAlert",label:"Budget Alert",desc:"When spending approaches the limit"},{key:"notifyOnSecurityEvent",label:"Security Event",desc:"Login from new device, key rotation, etc."}].map(t=>e.jsxs("div",{className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:t.label}),e.jsx("p",{className:"text-xs text-[#939084]",children:t.desc})]}),e.jsx("input",{type:"checkbox",checked:s[t.key],onChange:r=>a(t.key,r.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]},t.key))})]})]})}function S(){const[s,i]=d.useState(v),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure how long different types of data are retained before automatic cleanup."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Log Retention (days)"}),e.jsx("input",{type:"number",value:s.logRetentionDays,onChange:t=>a("logRetentionDays",parseInt(t.target.value)||0),min:7,max:365,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Audit Retention (days)"}),e.jsx("input",{type:"number",value:s.auditRetentionDays,onChange:t=>a("auditRetentionDays",parseInt(t.target.value)||0),min:30,max:3650,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Session Retention (days)"}),e.jsx("input",{type:"number",value:s.sessionRetentionDays,onChange:t=>a("sessionRetentionDays",parseInt(t.target.value)||0),min:7,max:365,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.autoCleanupEnabled,onChange:t=>a("autoCleanupEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Enable automatic cleanup"})]})]})}const c=[{id:"providers",label:"Providers",icon:h},{id:"builds",label:"Build Defaults",icon:p},{id:"security",label:"Security",icon:E},{id:"notifications",label:"Notifications",icon:g},{id:"retention",label:"Data Retention",icon:f}];function I(){return e.jsxs("div",{className:"max-w-[500px] mx-auto px-6 py-20 text-center",children:[e.jsx(j,{size:48,className:"mx-auto text-[#C45B5B] mb-4"}),e.jsx("h1",{className:"font-heading text-h1 text-[#36342E] dark:text-[#E8E6E3] mb-2",children:"Access Denied"}),e.jsx("p",{className:"text-sm text-[#6B6960]",children:"You do not have permission to access system settings. Contact your organization administrator for access."})]})}function L(){var n,o;const{user:s,isLocalMode:i}=u(),[a,t]=d.useState("providers");return i||(s==null?void 0:s.authenticated)===!0?e.jsxs("div",{className:"max-w-[1000px] mx-auto px-6 py-8",children:[e.jsx("h1",{className:"font-heading text-h1 text-[#36342E] dark:text-[#E8E6E3] mb-6",children:"System Settings"}),e.jsxs("div",{className:"flex gap-6",children:[e.jsx("nav",{className:"w-48 flex-shrink-0 space-y-1",children:c.map(l=>e.jsxs("button",{onClick:()=>t(l.id),className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg text-left transition-colors ${a===l.id?"bg-[#553DE9]/8 text-[#553DE9] font-medium":"text-[#6B6960] hover:bg-[#F8F4F0] dark:hover:bg-[#222228] hover:text-[#36342E] dark:hover:text-[#E8E6E3]"}`,children:[e.jsx(l.icon,{size:16}),l.label]},l.id))}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsxs("div",{className:"card p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[((n=c.find(l=>l.id===a))==null?void 0:n.icon)&&(()=>{const l=c.find(m=>m.id===a).icon;return e.jsx(l,{size:18,className:"text-[#553DE9]"})})(),e.jsx("h2",{className:"text-sm font-semibold text-[#201515] dark:text-[#E8E6E3] uppercase tracking-wider",children:(o=c.find(l=>l.id===a))==null?void 0:o.label})]}),e.jsxs("div",{className:"mb-4 px-3 py-2 rounded-lg border border-[#F59E0B]/30 bg-[#F59E0B]/5 text-xs text-[#6B6960] flex items-start gap-2",children:[e.jsx(x,{size:14,className:"text-[#F59E0B] flex-shrink-0 mt-0.5"}),e.jsx("span",{children:"Not connected: the values below are built-in defaults, not read from the server, and this page cannot save changes. They do not affect builds."})]}),e.jsxs("fieldset",{disabled:!0,className:"min-w-0",children:[a==="providers"&&e.jsx(C,{}),a==="builds"&&e.jsx(w,{}),a==="security"&&e.jsx(B,{}),a==="notifications"&&e.jsx(D,{}),a==="retention"&&e.jsx(S,{})]})]})})]})]}):e.jsx(I,{})}export{L as default};
1
+ import{a0 as u,r as d,j as e,x as E,T as x,a as b}from"./index-DYlP-mdo.js";import{S as h}from"./server-B2oSBTA9.js";import{H as p}from"./hammer-lDKDvNIE.js";import{B as g}from"./bell-DrRrvtr0.js";import{D as f}from"./database-B8iq-ysc.js";import{S as j}from"./shield-alert-DGasH16O.js";const A=[{id:"claude",name:"Claude",secretKey:"ANTHROPIC_API_KEY",model:"claude-opus-4-7",fallbackOrder:1,enabled:!0},{id:"codex",name:"Codex",secretKey:"OPENAI_API_KEY",model:"gpt-5.3-codex",fallbackOrder:2,enabled:!0}],k={maxIterations:25,timeoutMinutes:60,qualityGateThreshold:80,autoReview:!0,parallelAgents:3},y={sessionTimeoutMinutes:30,allowedOrigins:"*",rateLimitPerMinute:100,requireMFA:!1,ipAllowlist:""},N={emailEnabled:!1,emailAddress:"",browserEnabled:!0,slackEnabled:!1,slackWebhookUrl:"",notifyOnBuildComplete:!0,notifyOnBuildFailure:!0,notifyOnBudgetAlert:!0,notifyOnSecurityEvent:!0},v={logRetentionDays:30,auditRetentionDays:365,sessionRetentionDays:90,autoCleanupEnabled:!0};function C(){const[s,i]=d.useState(A),[a,t]=d.useState(void 0);return d.useEffect(()=>{b.getSecrets().then(r=>t(Object.keys(r))).catch(()=>t(null))},[]),e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure AI provider API keys, model preferences, and fallback chain."}),s.map((r,n)=>e.jsxs("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:"w-6 h-6 rounded-full bg-[#553DE9]/10 flex items-center justify-center text-xs font-bold text-[#553DE9]",children:r.fallbackOrder}),e.jsx("span",{className:"text-sm font-medium text-[#201515] dark:text-[#E8E6E3]",children:r.name})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("span",{className:"text-xs text-[#939084]",children:r.enabled?"Enabled":"Disabled"}),e.jsx("input",{type:"checkbox",checked:r.enabled,onChange:o=>{const l=[...s];l[n]={...l[n],enabled:o.target.checked},i(l)},className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"API Key"}),e.jsx("p",{className:"px-3 py-2 text-xs font-mono text-[#6B6960]",children:a===void 0?"Checking...":a===null?"unknown (secrets store could not be read)":a.includes(r.secretKey)?`${r.secretKey} is in the Purple Lab secrets store`:`${r.secretKey} is not in the Purple Lab secrets store`})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Model"}),e.jsx("input",{value:r.model,onChange:o=>{const l=[...s];l[n]={...l[n],model:o.target.value},i(l)},className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] font-mono"})]})]})]},r.id))]})}function w(){const[s,i]=d.useState(k),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Default settings for new builds. Individual projects can override these."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Max Iterations"}),e.jsx("input",{type:"number",value:s.maxIterations,onChange:t=>a("maxIterations",parseInt(t.target.value)||0),min:1,max:100,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Timeout (minutes)"}),e.jsx("input",{type:"number",value:s.timeoutMinutes,onChange:t=>a("timeoutMinutes",parseInt(t.target.value)||0),min:5,max:480,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Quality Gate Threshold (%)"}),e.jsx("input",{type:"number",value:s.qualityGateThreshold,onChange:t=>a("qualityGateThreshold",parseInt(t.target.value)||0),min:0,max:100,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"}),e.jsx("div",{className:"mt-1 h-1.5 bg-[#F8F4F0] dark:bg-[#1A1A1E] rounded-full overflow-hidden",children:e.jsx("div",{className:"h-full rounded-full transition-all",style:{width:`${s.qualityGateThreshold}%`,background:s.qualityGateThreshold>=80?"#1FC5A8":s.qualityGateThreshold>=60?"#F59E0B":"#C45B5B"}})})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Parallel Agents"}),e.jsx("input",{type:"number",value:s.parallelAgents,onChange:t=>a("parallelAgents",parseInt(t.target.value)||1),min:1,max:10,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.autoReview,onChange:t=>a("autoReview",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Auto-run code review after each build"})]})]})}function B(){const[s,i]=d.useState(y),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Security settings for session management, rate limiting, and access control."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Session Timeout (minutes)"}),e.jsx("input",{type:"number",value:s.sessionTimeoutMinutes,onChange:t=>a("sessionTimeoutMinutes",parseInt(t.target.value)||0),min:5,max:1440,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Rate Limit (requests/minute)"}),e.jsx("input",{type:"number",value:s.rateLimitPerMinute,onChange:t=>a("rateLimitPerMinute",parseInt(t.target.value)||0),min:10,max:1e4,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Allowed Origins"}),e.jsx("input",{type:"text",value:s.allowedOrigins,onChange:t=>a("allowedOrigins",t.target.value),placeholder:"* or comma-separated origins",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"IP Allowlist"}),e.jsx("input",{type:"text",value:s.ipAllowlist,onChange:t=>a("ipAllowlist",t.target.value),placeholder:"Leave empty for no restriction",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.requireMFA,onChange:t=>a("requireMFA",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Require MFA for all users"}),!s.requireMFA&&e.jsxs("span",{className:"text-xs text-[#F59E0B] flex items-center gap-1",children:[e.jsx(x,{size:12}),"Not recommended for production"]})]})]})}function D(){const[s,i]=d.useState(N),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure how and when you receive notifications about system events."}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-xs font-semibold text-[#6B6960] uppercase tracking-wider",children:"Channels"}),e.jsxs("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg divide-y divide-[#ECEAE3] dark:divide-[#2A2A30]",children:[e.jsxs("div",{className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Browser Notifications"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Show desktop notifications"})]}),e.jsx("input",{type:"checkbox",checked:s.browserEnabled,onChange:t=>a("browserEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),e.jsxs("div",{className:"p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Email Notifications"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Send email for important events"})]}),e.jsx("input",{type:"checkbox",checked:s.emailEnabled,onChange:t=>a("emailEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),s.emailEnabled&&e.jsx("input",{type:"email",value:s.emailAddress,onChange:t=>a("emailAddress",t.target.value),placeholder:"notifications@company.com",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084]"})]}),e.jsxs("div",{className:"p-3 space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Slack Webhook"}),e.jsx("p",{className:"text-xs text-[#939084]",children:"Post to a Slack channel"})]}),e.jsx("input",{type:"checkbox",checked:s.slackEnabled,onChange:t=>a("slackEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]}),s.slackEnabled&&e.jsx("input",{type:"url",value:s.slackWebhookUrl,onChange:t=>a("slackWebhookUrl",t.target.value),placeholder:"https://hooks.slack.com/services/...",className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3] placeholder-[#939084] font-mono"})]})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-xs font-semibold text-[#6B6960] uppercase tracking-wider",children:"Events"}),e.jsx("div",{className:"border border-[#ECEAE3] dark:border-[#2A2A30] rounded-lg divide-y divide-[#ECEAE3] dark:divide-[#2A2A30]",children:[{key:"notifyOnBuildComplete",label:"Build Complete",desc:"When a build finishes successfully"},{key:"notifyOnBuildFailure",label:"Build Failure",desc:"When a build fails or times out"},{key:"notifyOnBudgetAlert",label:"Budget Alert",desc:"When spending approaches the limit"},{key:"notifyOnSecurityEvent",label:"Security Event",desc:"Login from new device, key rotation, etc."}].map(t=>e.jsxs("div",{className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:t.label}),e.jsx("p",{className:"text-xs text-[#939084]",children:t.desc})]}),e.jsx("input",{type:"checkbox",checked:s[t.key],onChange:r=>a(t.key,r.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"})]},t.key))})]})]})}function S(){const[s,i]=d.useState(v),a=(t,r)=>{i(n=>({...n,[t]:r}))};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-xs text-[#6B6960]",children:"Configure how long different types of data are retained before automatic cleanup."}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Log Retention (days)"}),e.jsx("input",{type:"number",value:s.logRetentionDays,onChange:t=>a("logRetentionDays",parseInt(t.target.value)||0),min:7,max:365,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Audit Retention (days)"}),e.jsx("input",{type:"number",value:s.auditRetentionDays,onChange:t=>a("auditRetentionDays",parseInt(t.target.value)||0),min:30,max:3650,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-xs font-medium text-[#6B6960] mb-1",children:"Session Retention (days)"}),e.jsx("input",{type:"number",value:s.sessionRetentionDays,onChange:t=>a("sessionRetentionDays",parseInt(t.target.value)||0),min:7,max:365,className:"w-full px-3 py-2 text-sm rounded-lg border border-[#ECEAE3] dark:border-[#2A2A30] bg-white dark:bg-[#1A1A1E] text-[#201515] dark:text-[#E8E6E3]"})]})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:s.autoCleanupEnabled,onChange:t=>a("autoCleanupEnabled",t.target.checked),className:"rounded border-[#ECEAE3] text-[#553DE9] focus:ring-[#553DE9]"}),e.jsx("span",{className:"text-sm text-[#201515] dark:text-[#E8E6E3]",children:"Enable automatic cleanup"})]})]})}const c=[{id:"providers",label:"Providers",icon:h},{id:"builds",label:"Build Defaults",icon:p},{id:"security",label:"Security",icon:E},{id:"notifications",label:"Notifications",icon:g},{id:"retention",label:"Data Retention",icon:f}];function I(){return e.jsxs("div",{className:"max-w-[500px] mx-auto px-6 py-20 text-center",children:[e.jsx(j,{size:48,className:"mx-auto text-[#C45B5B] mb-4"}),e.jsx("h1",{className:"font-heading text-h1 text-[#36342E] dark:text-[#E8E6E3] mb-2",children:"Access Denied"}),e.jsx("p",{className:"text-sm text-[#6B6960]",children:"You do not have permission to access system settings. Contact your organization administrator for access."})]})}function L(){var n,o;const{user:s,isLocalMode:i}=u(),[a,t]=d.useState("providers");return i||(s==null?void 0:s.authenticated)===!0?e.jsxs("div",{className:"max-w-[1000px] mx-auto px-6 py-8",children:[e.jsx("h1",{className:"font-heading text-h1 text-[#36342E] dark:text-[#E8E6E3] mb-6",children:"System Settings"}),e.jsxs("div",{className:"flex gap-6",children:[e.jsx("nav",{className:"w-48 flex-shrink-0 space-y-1",children:c.map(l=>e.jsxs("button",{onClick:()=>t(l.id),className:`w-full flex items-center gap-2 px-3 py-2 text-sm rounded-lg text-left transition-colors ${a===l.id?"bg-[#553DE9]/8 text-[#553DE9] font-medium":"text-[#6B6960] hover:bg-[#F8F4F0] dark:hover:bg-[#222228] hover:text-[#36342E] dark:hover:text-[#E8E6E3]"}`,children:[e.jsx(l.icon,{size:16}),l.label]},l.id))}),e.jsx("div",{className:"flex-1 min-w-0",children:e.jsxs("div",{className:"card p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[((n=c.find(l=>l.id===a))==null?void 0:n.icon)&&(()=>{const l=c.find(m=>m.id===a).icon;return e.jsx(l,{size:18,className:"text-[#553DE9]"})})(),e.jsx("h2",{className:"text-sm font-semibold text-[#201515] dark:text-[#E8E6E3] uppercase tracking-wider",children:(o=c.find(l=>l.id===a))==null?void 0:o.label})]}),e.jsxs("div",{className:"mb-4 px-3 py-2 rounded-lg border border-[#F59E0B]/30 bg-[#F59E0B]/5 text-xs text-[#6B6960] flex items-start gap-2",children:[e.jsx(x,{size:14,className:"text-[#F59E0B] flex-shrink-0 mt-0.5"}),e.jsx("span",{children:"Not connected: the values below are built-in defaults, not read from the server, and this page cannot save changes. They do not affect builds."})]}),e.jsxs("fieldset",{disabled:!0,className:"min-w-0",children:[a==="providers"&&e.jsx(C,{}),a==="builds"&&e.jsx(w,{}),a==="security"&&e.jsx(B,{}),a==="notifications"&&e.jsx(D,{}),a==="retention"&&e.jsx(S,{})]})]})})]})]}):e.jsx(I,{})}export{L as default};
@@ -1,4 +1,4 @@
1
- import{c as M,r,j as e,U as w,X as $,h as D,y as H,a as A,x as q,p as K,g as O,M as X,R as Y,l as G,a1 as J,a2 as Q}from"./index-B5DfagwG.js";import{B as k}from"./Button-CP1j2DaV.js";import{U as I,M as W,A as S}from"./Avatar-5jynZJli.js";import{L as Z}from"./lock-spYjFot7.js";import{A as b}from"./activity-C2HRfzlU.js";import{U as ee}from"./user-OaACZgrk.js";import{C as R}from"./clock-DXg07ycH.js";import{F as te}from"./file-code-corner-Do8BRnnR.js";import{F as se}from"./file-plus-DMao8U3w.js";import{H as ae}from"./hammer-CxlDBgi7.js";import{P as re}from"./plus-CTtqhz3R.js";/**
1
+ import{c as M,r,j as e,U as w,X as $,h as D,y as H,a as A,x as q,p as K,g as O,M as X,R as Y,l as G,a1 as J,a2 as Q}from"./index-DYlP-mdo.js";import{B as k}from"./Button-CtQScR-c.js";import{U as I,M as W,A as S}from"./Avatar-joQK58YD.js";import{L as Z}from"./lock-Chl8Ksc1.js";import{A as b}from"./activity-BVPxaqP_.js";import{U as ee}from"./user-BYTSxqUG.js";import{C as R}from"./clock-BSuLsNPf.js";import{F as te}from"./file-code-corner-DZP0O2MC.js";import{F as se}from"./file-plus-Bh0MUIv7.js";import{H as ae}from"./hammer-lDKDvNIE.js";import{P as re}from"./plus-Ea_mDA8V.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as F,r as n,j as e,p as M,w as B,R as D,u as O,a as G,X as z,y as Y,F as C,v as Q,J as H,A as q,m as I,i as V}from"./index-B5DfagwG.js";import{B as N}from"./Button-CP1j2DaV.js";import{u as J}from"./usePolling-Dj4qalKl.js";import{C as K}from"./chevron-left-C1v3mFcK.js";import{C as T}from"./clock-DXg07ycH.js";import{L as X}from"./layers-OGRD4XBk.js";import{C as S}from"./check-CcMk6ibN.js";import{P}from"./package-Bv6RPrKl.js";import{G as Z}from"./globe-DUTdbwtA.js";import{S as ee}from"./server-ZIDlicEZ.js";import{B as te}from"./bot-Dq9E9Pvb.js";import{D as se}from"./database-D9wTxArH.js";import{P as ie}from"./plus-CTtqhz3R.js";/**
1
+ import{c as F,r as n,j as e,p as M,w as B,R as D,u as O,a as G,X as z,y as Y,F as C,v as Q,J as H,A as q,m as I,i as V}from"./index-DYlP-mdo.js";import{B as N}from"./Button-CtQScR-c.js";import{u as J}from"./usePolling-DwebjWkh.js";import{C as K}from"./chevron-left-D8IT1xhk.js";import{C as T}from"./clock-BSuLsNPf.js";import{L as X}from"./layers-BYO5x0DZ.js";import{C as S}from"./check-D8J2al5r.js";import{P}from"./package-8HQ6OfxN.js";import{G as Z}from"./globe-CoZFzhbP.js";import{S as ee}from"./server-B2oSBTA9.js";import{B as te}from"./bot-CC3_GW5E.js";import{D as se}from"./database-B8iq-ysc.js";import{P as ie}from"./plus-Ea_mDA8V.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as j,r as i,j as e}from"./index-B5DfagwG.js";import{L as w}from"./lock-spYjFot7.js";/**
1
+ import{c as j,r as i,j as e}from"./index-DYlP-mdo.js";import{L as w}from"./lock-Chl8Ksc1.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as t}from"./index-B5DfagwG.js";/**
1
+ import{c as t}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as t}from"./index-B5DfagwG.js";/**
1
+ import{c as t}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-B5DfagwG.js";/**
1
+ import{c as o}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-B5DfagwG.js";/**
1
+ import{c as o}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-zjQW1RDW.js","assets/usePolling-Dj4qalKl.js","assets/ErrorBoundary-7qrd412U.js","assets/TerminalOutput-DSZf6_DH.js","assets/lock-spYjFot7.js","assets/EvidenceReceiptPanel-C1yIa5th.js","assets/Badge-CFO8AJGC.js","assets/clock-DXg07ycH.js","assets/circle-alert-DssqDkkX.js","assets/check-CcMk6ibN.js","assets/package-Bv6RPrKl.js","assets/cloud-At8AE9Be.js","assets/code-xml-CDSDQbxY.js","assets/hammer-CxlDBgi7.js","assets/layers-OGRD4XBk.js","assets/bell-DaPQ48IP.js","assets/file-code-corner-Do8BRnnR.js","assets/ProjectPage-C8TZpTte.js","assets/Button-CP1j2DaV.js","assets/file-plus-DMao8U3w.js","assets/activity-C2HRfzlU.js","assets/scroll-text-Ri75rHH9.js","assets/bot-Dq9E9Pvb.js","assets/loader-circle-CTzIuHy1.js","assets/dollar-sign-CBQaoJeP.js","assets/refresh-cw-DAW_OF7l.js","assets/globe-DUTdbwtA.js","assets/trash-2-BxGqEnKD.js","assets/thumbs-up-DLHh_TgE.js","assets/upload-DfakwPY7.js","assets/plus-CTtqhz3R.js","assets/rotate-ccw-CqDbk4Tl.js","assets/trending-up-Dobr23yV.js","assets/trending-down-X0HPnJsy.js","assets/server-ZIDlicEZ.js","assets/ProjectPage-9CEnUXvW.css","assets/CockpitPage-Zll66Hle.js","assets/ProjectsPage-4WgWPgU1.js","assets/TemplatesPage-Df1WtQVu.js","assets/chevron-left-C1v3mFcK.js","assets/database-D9wTxArH.js","assets/SettingsPage-Bnq1bCoT.js","assets/TeamsPage-B2mYTq9_.js","assets/Avatar-5jynZJli.js","assets/user-OaACZgrk.js","assets/AdminPage-Bj4Y57H2.js","assets/shield-alert-bONIBFPd.js","assets/SystemSettingsPage-C_yTF_mP.js","assets/MetricsPage-BXQ7let1.js","assets/MagicPage-D2tqOXbb.js"])))=>i.map(i=>d[i]);
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HomePage-B_cYM0sN.js","assets/usePolling-DwebjWkh.js","assets/ErrorBoundary-Dk2zlQ-V.js","assets/TerminalOutput-BS0zV9UI.js","assets/lock-Chl8Ksc1.js","assets/EvidenceReceiptPanel-e7kiB04s.js","assets/Badge-CBXvDcFR.js","assets/clock-BSuLsNPf.js","assets/circle-alert-BvwSkqCz.js","assets/check-D8J2al5r.js","assets/package-8HQ6OfxN.js","assets/cloud-bmqN31a7.js","assets/code-xml-D4fUsOqc.js","assets/hammer-lDKDvNIE.js","assets/layers-BYO5x0DZ.js","assets/bell-DrRrvtr0.js","assets/file-code-corner-DZP0O2MC.js","assets/ProjectPage-BagrFqx3.js","assets/Button-CtQScR-c.js","assets/file-plus-Bh0MUIv7.js","assets/activity-BVPxaqP_.js","assets/scroll-text-BYeO9YNc.js","assets/bot-CC3_GW5E.js","assets/loader-circle-KiOUdpQs.js","assets/dollar-sign-BFNvYX8q.js","assets/refresh-cw-w3IR7j4L.js","assets/globe-CoZFzhbP.js","assets/trash-2-BTJQ9WtO.js","assets/thumbs-up-DFHVuuiz.js","assets/upload-Cc3Y_8Yc.js","assets/plus-Ea_mDA8V.js","assets/rotate-ccw-DZe1WQvf.js","assets/trending-up-B5B1XGe0.js","assets/trending-down-xsvCqAte.js","assets/server-B2oSBTA9.js","assets/ProjectPage-9CEnUXvW.css","assets/CockpitPage-CW5F1mEF.js","assets/ProjectsPage-tJrlqxvp.js","assets/TemplatesPage-CdHNUaRL.js","assets/chevron-left-D8IT1xhk.js","assets/database-B8iq-ysc.js","assets/SettingsPage-Bo0pnj_H.js","assets/TeamsPage-BgX13mIy.js","assets/Avatar-joQK58YD.js","assets/user-BYTSxqUG.js","assets/AdminPage-CPcm5w-N.js","assets/shield-alert-DGasH16O.js","assets/SystemSettingsPage-CnGJnbki.js","assets/MetricsPage-BLGBbQKZ.js","assets/MagicPage-C0bTXdIs.js"])))=>i.map(i=>d[i]);
2
2
  var P0=Object.defineProperty;var ep=(i,c,r)=>c in i?P0(i,c,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[c]=r;var Ln=(i,c,r)=>ep(i,typeof c!="symbol"?c+"":c,r);(function(){const c=document.createElement("link").relList;if(c&&c.supports&&c.supports("modulepreload"))return;for(const d of document.querySelectorAll('link[rel="modulepreload"]'))o(d);new MutationObserver(d=>{for(const m of d)if(m.type==="childList")for(const p of m.addedNodes)p.tagName==="LINK"&&p.rel==="modulepreload"&&o(p)}).observe(document,{childList:!0,subtree:!0});function r(d){const m={};return d.integrity&&(m.integrity=d.integrity),d.referrerPolicy&&(m.referrerPolicy=d.referrerPolicy),d.crossOrigin==="use-credentials"?m.credentials="include":d.crossOrigin==="anonymous"?m.credentials="omit":m.credentials="same-origin",m}function o(d){if(d.ep)return;d.ep=!0;const m=r(d);fetch(d.href,m)}})();function tp(i){return i&&i.__esModule&&Object.prototype.hasOwnProperty.call(i,"default")?i.default:i}var Ls={exports:{}},Bn={};/**
3
3
  * @license React
4
4
  * react-jsx-runtime.production.js
@@ -432,4 +432,4 @@ Reason, Act, Reflect, Verify -- the AI's thinking process. It plans what to do (
432
432
  from { opacity: 0; transform: translateX(100%); }
433
433
  to { opacity: 1; transform: translateX(0); }
434
434
  }
435
- `}),h.jsx("span",{className:`flex-shrink-0 mt-0.5 ${p.icon}`,children:h.jsx(p.IconComponent,{size:18})}),h.jsxs("div",{className:"flex-1 min-w-0",children:[h.jsx("p",{className:"text-sm font-medium text-[#201515] dark:text-[#E8E6E3]",children:o}),d&&h.jsx("p",{className:"text-xs text-[#6B6960] dark:text-[#8A8880] mt-0.5",children:d})]}),h.jsx("button",{onClick:x,className:"flex-shrink-0 text-[#939084] hover:text-[#36342E] dark:hover:text-[#E8E6E3] transition-colors","aria-label":"Dismiss notification",children:h.jsx(ea,{size:14})})]})}function m2({notifications:i,onDismiss:c}){return i.length===0?null:h.jsx("div",{className:"fixed top-4 right-4 z-[9999] flex flex-col gap-2 pointer-events-none","aria-live":"polite",children:i.map(r=>h.jsx(h2,{notification:r,onDismiss:c},r.id))})}const Am=v.createContext({notify:()=>"",dismiss:()=>{},dismissAll:()=>{}});let y2=0;function p2({children:i}){const[c,r]=v.useState([]),o=v.useCallback(E=>{const x=`notif-${++y2}-${Date.now()}`,y={...E,id:x};if(r(z=>[...z,y]),document.hidden&&"Notification"in window)if(Notification.permission==="granted")try{new Notification(E.title,{body:E.message||""})}catch{}else Notification.permission!=="denied"&&Notification.requestPermission().then(z=>{if(z==="granted")try{new Notification(E.title,{body:E.message||""})}catch{}});return x},[]),d=v.useCallback(E=>{r(x=>x.filter(y=>y.id!==E))},[]),m=v.useCallback(()=>{r([])},[]),p=v.useMemo(()=>({notify:o,dismiss:d,dismissAll:m}),[o,d,m]);return h.jsxs(Am.Provider,{value:p,children:[i,h.jsx(m2,{notifications:c,onDismiss:d})]})}function L2(){return v.useContext(Am)}function Fs({children:i}){const{user:c,loading:r,isLocalMode:o}=_m();return r?h.jsx("div",{className:"h-screen bg-[#FAF9F6] flex items-center justify-center text-[#6B6960] text-sm",children:"Loading..."}):o?h.jsx(h.Fragment,{children:i}):c?h.jsx(h.Fragment,{children:i}):h.jsx(o1,{to:"/login",replace:!0})}function pi({variant:i="text",width:c,height:r,className:o=""}){const d="animate-pulse bg-[#ECEAE3]/60 rounded";if(i==="circle"){const m=c||"2rem";return h.jsx("div",{className:`${d} rounded-full flex-shrink-0 ${o}`,style:{width:m,height:m}})}return i==="block"?h.jsx("div",{className:`${d} rounded-btn ${o}`,style:{width:c||"100%",height:r||"4rem"}}):h.jsx("div",{className:`${d} rounded-btn ${o}`,style:{width:c||"100%",height:r||"0.75rem"}})}function B2(){return h.jsx("div",{className:"p-4 space-y-3",children:[...Array(12)].map((i,c)=>h.jsxs("div",{className:"flex items-center gap-3",children:[h.jsx(pi,{variant:"text",width:"1.5rem",height:"10px",className:"flex-shrink-0 opacity-40"}),h.jsx(pi,{variant:"text",width:`${20+Math.random()*60}%`,height:"10px"})]},c))})}typeof window<"u"&&window.addEventListener("beforeunload",i=>{delete i.returnValue});const v2=v.lazy(()=>tt(()=>import("./HomePage-zjQW1RDW.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))),g2=v.lazy(()=>tt(()=>import("./ProjectPage-C8TZpTte.js").then(i=>i.P),__vite__mapDeps([17,2,18,3,4,10,16,19,7,20,21,22,9,23,13,24,25,8,26,27,28,29,30,31,12,32,14,33,34,35]))),b2=v.lazy(()=>tt(()=>import("./CockpitPage-Zll66Hle.js"),__vite__mapDeps([36,2,28,9,7,24,29,23]))),x2=v.lazy(()=>tt(()=>import("./ProjectsPage-4WgWPgU1.js"),__vite__mapDeps([37,18,6,7,8,9,1,25,30,27]))),S2=v.lazy(()=>tt(()=>import("./TemplatesPage-Df1WtQVu.js"),__vite__mapDeps([38,18,1,39,7,14,9,10,26,34,22,40,30]))),E2=v.lazy(()=>tt(()=>import("./SettingsPage-Bnq1bCoT.js"),__vite__mapDeps([41,31,13,11,23,9,8]))),_2=v.lazy(()=>tt(()=>import("./LoginPage-DaN0aZo2.js"),[])),T2=v.lazy(()=>tt(()=>import("./TeamsPage-B2mYTq9_.js"),__vite__mapDeps([42,18,43,4,20,44,7,16,19,13,30]))),z2=v.lazy(()=>tt(()=>import("./AdminPage-Bj4Y57H2.js"),__vite__mapDeps([45,18,32,7,43,20,25,26,39,9,24,44,40,4,21,46]))),N2=v.lazy(()=>tt(()=>import("./SystemSettingsPage-C_yTF_mP.js"),__vite__mapDeps([47,34,13,15,40,46]))),C2=v.lazy(()=>tt(()=>import("./MetricsPage-BXQ7let1.js"),__vite__mapDeps([48,5,24,14,32,33]))),j2=v.lazy(()=>tt(()=>import("./ShowcasePage-Bpzb5zEE.js"),[])),A2=v.lazy(()=>tt(()=>import("./MagicPage-D2tqOXbb.js"),__vite__mapDeps([49,29,8,23,12]))),R2=v.lazy(()=>tt(()=>import("./ComparePage-DLRkXI8P.js"),[])),O2=v.lazy(()=>tt(()=>import("./NotFoundPage-BU18AkRf.js"),[]));function et(){return h.jsxs("div",{className:"h-screen bg-[#FAF9F6] flex flex-col items-center justify-center gap-3",children:[h.jsx(pi,{variant:"block",width:"200px",height:"24px"}),h.jsx(pi,{variant:"text",width:"140px",height:"12px",className:"opacity-50"})]})}function M2(){return h.jsx(Dg,{children:h.jsx(p2,{children:h.jsxs(d1,{children:[h.jsx(Ke,{path:"/login",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(_2,{})})}),h.jsx(Ke,{path:"/project/:sessionId/cockpit",element:h.jsx(Fs,{children:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(b2,{})})})}),h.jsx(Ke,{path:"/project/:sessionId",element:h.jsx(Fs,{children:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(g2,{})})})}),h.jsxs(Ke,{element:h.jsx(Fs,{children:h.jsx(f2,{})}),children:[h.jsx(Ke,{path:"/",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(v2,{})})}),h.jsx(Ke,{path:"/projects",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(x2,{})})}),h.jsx(Ke,{path:"/templates",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(S2,{})})}),h.jsx(Ke,{path:"/settings",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(E2,{})})}),h.jsx(Ke,{path:"/teams",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(T2,{})})}),h.jsx(Ke,{path:"/metrics",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(C2,{})})}),h.jsx(Ke,{path:"/showcase",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(j2,{})})}),h.jsx(Ke,{path:"/magic",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(A2,{})})}),h.jsx(Ke,{path:"/compare",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(R2,{})})}),h.jsx(Ke,{path:"/admin",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(z2,{})})}),h.jsx(Ke,{path:"/admin/settings",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(N2,{})})}),h.jsx(Ke,{path:"*",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(O2,{})})})]})]})})})}const D2="/lab/".replace(/\/$/,"")||"/";fp.createRoot(document.getElementById("root")).render(h.jsx(v.StrictMode,{children:h.jsx(H1,{basename:D2,children:h.jsx(M2,{})})}));export{Kv as $,dm as A,hm as B,ym as C,Wv as D,bv as E,vm as F,Cv as G,B2 as H,Dv as I,fm as J,gm as K,so as L,oo as M,pi as N,H2 as O,bm as P,vv as Q,ro as R,ug as S,gg as T,xg as U,Og as V,w2 as W,ea as X,yv as Y,Ag as Z,tt as _,Ba as a,_m as a0,L2 as a1,_v as a2,sm as a3,Ov as a4,Tg as a5,dg as b,W as c,r2 as d,k2 as e,Ng as f,mm as g,nv as h,pg as i,h as j,hv as k,rv as l,lg as m,Kg as n,Jg as o,wh as p,sv as q,v as r,og as s,Xv as t,ao as u,fo as v,lv as w,cg as x,pm as y,xm as z};
435
+ `}),h.jsx("span",{className:`flex-shrink-0 mt-0.5 ${p.icon}`,children:h.jsx(p.IconComponent,{size:18})}),h.jsxs("div",{className:"flex-1 min-w-0",children:[h.jsx("p",{className:"text-sm font-medium text-[#201515] dark:text-[#E8E6E3]",children:o}),d&&h.jsx("p",{className:"text-xs text-[#6B6960] dark:text-[#8A8880] mt-0.5",children:d})]}),h.jsx("button",{onClick:x,className:"flex-shrink-0 text-[#939084] hover:text-[#36342E] dark:hover:text-[#E8E6E3] transition-colors","aria-label":"Dismiss notification",children:h.jsx(ea,{size:14})})]})}function m2({notifications:i,onDismiss:c}){return i.length===0?null:h.jsx("div",{className:"fixed top-4 right-4 z-[9999] flex flex-col gap-2 pointer-events-none","aria-live":"polite",children:i.map(r=>h.jsx(h2,{notification:r,onDismiss:c},r.id))})}const Am=v.createContext({notify:()=>"",dismiss:()=>{},dismissAll:()=>{}});let y2=0;function p2({children:i}){const[c,r]=v.useState([]),o=v.useCallback(E=>{const x=`notif-${++y2}-${Date.now()}`,y={...E,id:x};if(r(z=>[...z,y]),document.hidden&&"Notification"in window)if(Notification.permission==="granted")try{new Notification(E.title,{body:E.message||""})}catch{}else Notification.permission!=="denied"&&Notification.requestPermission().then(z=>{if(z==="granted")try{new Notification(E.title,{body:E.message||""})}catch{}});return x},[]),d=v.useCallback(E=>{r(x=>x.filter(y=>y.id!==E))},[]),m=v.useCallback(()=>{r([])},[]),p=v.useMemo(()=>({notify:o,dismiss:d,dismissAll:m}),[o,d,m]);return h.jsxs(Am.Provider,{value:p,children:[i,h.jsx(m2,{notifications:c,onDismiss:d})]})}function L2(){return v.useContext(Am)}function Fs({children:i}){const{user:c,loading:r,isLocalMode:o}=_m();return r?h.jsx("div",{className:"h-screen bg-[#FAF9F6] flex items-center justify-center text-[#6B6960] text-sm",children:"Loading..."}):o?h.jsx(h.Fragment,{children:i}):c?h.jsx(h.Fragment,{children:i}):h.jsx(o1,{to:"/login",replace:!0})}function pi({variant:i="text",width:c,height:r,className:o=""}){const d="animate-pulse bg-[#ECEAE3]/60 rounded";if(i==="circle"){const m=c||"2rem";return h.jsx("div",{className:`${d} rounded-full flex-shrink-0 ${o}`,style:{width:m,height:m}})}return i==="block"?h.jsx("div",{className:`${d} rounded-btn ${o}`,style:{width:c||"100%",height:r||"4rem"}}):h.jsx("div",{className:`${d} rounded-btn ${o}`,style:{width:c||"100%",height:r||"0.75rem"}})}function B2(){return h.jsx("div",{className:"p-4 space-y-3",children:[...Array(12)].map((i,c)=>h.jsxs("div",{className:"flex items-center gap-3",children:[h.jsx(pi,{variant:"text",width:"1.5rem",height:"10px",className:"flex-shrink-0 opacity-40"}),h.jsx(pi,{variant:"text",width:`${20+Math.random()*60}%`,height:"10px"})]},c))})}typeof window<"u"&&window.addEventListener("beforeunload",i=>{delete i.returnValue});const v2=v.lazy(()=>tt(()=>import("./HomePage-B_cYM0sN.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))),g2=v.lazy(()=>tt(()=>import("./ProjectPage-BagrFqx3.js").then(i=>i.P),__vite__mapDeps([17,2,18,3,4,10,16,19,7,20,21,22,9,23,13,24,25,8,26,27,28,29,30,31,12,32,14,33,34,35]))),b2=v.lazy(()=>tt(()=>import("./CockpitPage-CW5F1mEF.js"),__vite__mapDeps([36,2,28,9,7,24,29,23]))),x2=v.lazy(()=>tt(()=>import("./ProjectsPage-tJrlqxvp.js"),__vite__mapDeps([37,18,6,7,8,9,1,25,30,27]))),S2=v.lazy(()=>tt(()=>import("./TemplatesPage-CdHNUaRL.js"),__vite__mapDeps([38,18,1,39,7,14,9,10,26,34,22,40,30]))),E2=v.lazy(()=>tt(()=>import("./SettingsPage-Bo0pnj_H.js"),__vite__mapDeps([41,31,13,11,23,9,8]))),_2=v.lazy(()=>tt(()=>import("./LoginPage-C612-fuq.js"),[])),T2=v.lazy(()=>tt(()=>import("./TeamsPage-BgX13mIy.js"),__vite__mapDeps([42,18,43,4,20,44,7,16,19,13,30]))),z2=v.lazy(()=>tt(()=>import("./AdminPage-CPcm5w-N.js"),__vite__mapDeps([45,18,32,7,43,20,25,26,39,9,24,44,40,4,21,46]))),N2=v.lazy(()=>tt(()=>import("./SystemSettingsPage-CnGJnbki.js"),__vite__mapDeps([47,34,13,15,40,46]))),C2=v.lazy(()=>tt(()=>import("./MetricsPage-BLGBbQKZ.js"),__vite__mapDeps([48,5,24,14,32,33]))),j2=v.lazy(()=>tt(()=>import("./ShowcasePage-Caxs7V2J.js"),[])),A2=v.lazy(()=>tt(()=>import("./MagicPage-C0bTXdIs.js"),__vite__mapDeps([49,29,8,23,12]))),R2=v.lazy(()=>tt(()=>import("./ComparePage-OLBUQA8q.js"),[])),O2=v.lazy(()=>tt(()=>import("./NotFoundPage-B51QBkIq.js"),[]));function et(){return h.jsxs("div",{className:"h-screen bg-[#FAF9F6] flex flex-col items-center justify-center gap-3",children:[h.jsx(pi,{variant:"block",width:"200px",height:"24px"}),h.jsx(pi,{variant:"text",width:"140px",height:"12px",className:"opacity-50"})]})}function M2(){return h.jsx(Dg,{children:h.jsx(p2,{children:h.jsxs(d1,{children:[h.jsx(Ke,{path:"/login",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(_2,{})})}),h.jsx(Ke,{path:"/project/:sessionId/cockpit",element:h.jsx(Fs,{children:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(b2,{})})})}),h.jsx(Ke,{path:"/project/:sessionId",element:h.jsx(Fs,{children:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(g2,{})})})}),h.jsxs(Ke,{element:h.jsx(Fs,{children:h.jsx(f2,{})}),children:[h.jsx(Ke,{path:"/",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(v2,{})})}),h.jsx(Ke,{path:"/projects",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(x2,{})})}),h.jsx(Ke,{path:"/templates",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(S2,{})})}),h.jsx(Ke,{path:"/settings",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(E2,{})})}),h.jsx(Ke,{path:"/teams",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(T2,{})})}),h.jsx(Ke,{path:"/metrics",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(C2,{})})}),h.jsx(Ke,{path:"/showcase",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(j2,{})})}),h.jsx(Ke,{path:"/magic",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(A2,{})})}),h.jsx(Ke,{path:"/compare",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(R2,{})})}),h.jsx(Ke,{path:"/admin",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(z2,{})})}),h.jsx(Ke,{path:"/admin/settings",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(N2,{})})}),h.jsx(Ke,{path:"*",element:h.jsx(v.Suspense,{fallback:h.jsx(et,{}),children:h.jsx(O2,{})})})]})]})})})}const D2="/lab/".replace(/\/$/,"")||"/";fp.createRoot(document.getElementById("root")).render(h.jsx(v.StrictMode,{children:h.jsx(H1,{basename:D2,children:h.jsx(M2,{})})}));export{Kv as $,dm as A,hm as B,ym as C,Wv as D,bv as E,vm as F,Cv as G,B2 as H,Dv as I,fm as J,gm as K,so as L,oo as M,pi as N,H2 as O,bm as P,vv as Q,ro as R,ug as S,gg as T,xg as U,Og as V,w2 as W,ea as X,yv as Y,Ag as Z,tt as _,Ba as a,_m as a0,L2 as a1,_v as a2,sm as a3,Ov as a4,Tg as a5,dg as b,W as c,r2 as d,k2 as e,Ng as f,mm as g,nv as h,pg as i,h as j,hv as k,rv as l,lg as m,Kg as n,Jg as o,wh as p,sv as q,v as r,og as s,Xv as t,ao as u,fo as v,lv as w,cg as x,pm as y,xm as z};
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as n}from"./index-B5DfagwG.js";/**
1
+ import{c as n}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-B5DfagwG.js";/**
1
+ import{c as e}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-B5DfagwG.js";/**
1
+ import{c as a}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{r as e}from"./index-B5DfagwG.js";function m(s,u=2e3,a=!0){const[c,l]=e.useState(null),[f,o]=e.useState(null),[i,d]=e.useState(!0),r=e.useRef(!0),n=e.useCallback(async()=>{try{const t=await s();r.current&&(l(t),o(null))}catch(t){r.current&&o(t instanceof Error?t.message:"Unknown error")}finally{r.current&&d(!1)}},[s]);return e.useEffect(()=>{if(r.current=!0,!a)return;n();const t=setInterval(n,u);return()=>{r.current=!1,clearInterval(t)}},[n,u,a]),{data:c,error:f,loading:i,refresh:n}}export{m as u};
1
+ import{r as e}from"./index-DYlP-mdo.js";function m(s,u=2e3,a=!0){const[c,l]=e.useState(null),[f,o]=e.useState(null),[i,d]=e.useState(!0),r=e.useRef(!0),n=e.useCallback(async()=>{try{const t=await s();r.current&&(l(t),o(null))}catch(t){r.current&&o(t instanceof Error?t.message:"Unknown error")}finally{r.current&&d(!1)}},[s]);return e.useEffect(()=>{if(r.current=!0,!a)return;n();const t=setInterval(n,u);return()=>{r.current=!1,clearInterval(t)}},[n,u,a]),{data:c,error:f,loading:i,refresh:n}}export{m as u};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-B5DfagwG.js";/**
1
+ import{c}from"./index-DYlP-mdo.js";/**
2
2
  * @license lucide-react v0.577.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -7,7 +7,7 @@
7
7
  <link rel="preconnect" href="https://fonts.googleapis.com">
8
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
9
  <link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
10
- <script type="module" crossorigin src="/lab/assets/index-B5DfagwG.js"></script>
10
+ <script type="module" crossorigin src="/lab/assets/index-DYlP-mdo.js"></script>
11
11
  <link rel="stylesheet" crossorigin href="/lab/assets/index-Cx7e1d6w.css">
12
12
  </head>
13
13
  <body class="bg-background text-ink font-sans antialiased">