agent-tower 0.3.9 → 0.3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -0
- package/dist/app.js.map +1 -1
- package/dist/executors/base.executor.d.ts +1 -1
- package/dist/executors/base.executor.d.ts.map +1 -1
- package/dist/executors/base.executor.js +1 -1
- package/dist/executors/base.executor.js.map +1 -1
- package/dist/middleware/__tests__/tunnel-auth.test.d.ts +2 -0
- package/dist/middleware/__tests__/tunnel-auth.test.d.ts.map +1 -0
- package/dist/middleware/__tests__/tunnel-auth.test.js +87 -0
- package/dist/middleware/__tests__/tunnel-auth.test.js.map +1 -0
- package/dist/middleware/tunnel-auth.d.ts.map +1 -1
- package/dist/middleware/tunnel-auth.js +32 -9
- package/dist/middleware/tunnel-auth.js.map +1 -1
- package/dist/pipeline/agent-pipeline.d.ts +1 -1
- package/dist/pipeline/agent-pipeline.d.ts.map +1 -1
- package/dist/routes/app-settings.d.ts +3 -0
- package/dist/routes/app-settings.d.ts.map +1 -0
- package/dist/routes/app-settings.js +39 -0
- package/dist/routes/app-settings.js.map +1 -0
- package/dist/routes/index.d.ts.map +1 -1
- package/dist/routes/index.js +3 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/notifications.d.ts.map +1 -1
- package/dist/routes/notifications.js +6 -1
- package/dist/routes/notifications.js.map +1 -1
- package/dist/routes/system.d.ts.map +1 -1
- package/dist/routes/system.js +9 -0
- package/dist/routes/system.js.map +1 -1
- package/dist/routes/tunnel.d.ts.map +1 -1
- package/dist/routes/tunnel.js +2 -0
- package/dist/routes/tunnel.js.map +1 -1
- package/dist/services/notifications/defaults.d.ts +3 -0
- package/dist/services/notifications/defaults.d.ts.map +1 -0
- package/dist/services/notifications/defaults.js +23 -0
- package/dist/services/notifications/defaults.js.map +1 -0
- package/dist/services/notifications/notification.service.d.ts.map +1 -1
- package/dist/services/notifications/notification.service.js +5 -9
- package/dist/services/notifications/notification.service.js.map +1 -1
- package/dist/services/slash-command-catalog.service.d.ts +4 -0
- package/dist/services/slash-command-catalog.service.d.ts.map +1 -0
- package/dist/services/slash-command-catalog.service.js +265 -0
- package/dist/services/slash-command-catalog.service.js.map +1 -0
- package/dist/services/terminal-manager.js +1 -1
- package/dist/services/terminal-manager.js.map +1 -1
- package/dist/socket/middleware/__tests__/auth.test.d.ts +2 -0
- package/dist/socket/middleware/__tests__/auth.test.d.ts.map +1 -0
- package/dist/socket/middleware/__tests__/auth.test.js +50 -0
- package/dist/socket/middleware/__tests__/auth.test.js.map +1 -0
- package/dist/socket/middleware/auth.d.ts.map +1 -1
- package/dist/socket/middleware/auth.js +7 -8
- package/dist/socket/middleware/auth.js.map +1 -1
- package/dist/utils/__tests__/tunnel-cookie.test.d.ts +2 -0
- package/dist/utils/__tests__/tunnel-cookie.test.d.ts.map +1 -0
- package/dist/utils/__tests__/tunnel-cookie.test.js +11 -0
- package/dist/utils/__tests__/tunnel-cookie.test.js.map +1 -0
- package/dist/utils/tunnel-cookie.d.ts +9 -0
- package/dist/utils/tunnel-cookie.d.ts.map +1 -0
- package/dist/utils/tunnel-cookie.js +19 -0
- package/dist/utils/tunnel-cookie.js.map +1 -0
- package/dist/web/assets/AgentDemoPage-CTlnJyU5.js +1 -0
- package/dist/web/assets/DemoPage-CJ38nIO8.js +4 -0
- package/dist/web/assets/GeneralSettingsPage-B7VYEpgr.js +1 -0
- package/dist/web/assets/NotificationSettingsPage-CHD4DBUP.js +1 -0
- package/dist/web/assets/ProfileSettingsPage-qmtWRC95.js +3 -0
- package/dist/web/assets/ProjectKanbanPage-BlLvUJHU.js +85 -0
- package/dist/web/assets/ProjectSettingsPage-jenb_WWg.js +2 -0
- package/dist/web/assets/ProviderSettingsPage-BHH0jqW4.js +54 -0
- package/dist/web/assets/button-CljdSOa6.js +1 -0
- package/dist/web/assets/{chevron-down-DrP9EgY9.js → chevron-down-BYofhuN2.js} +1 -1
- package/dist/web/assets/circle-alert-mZUTomft.js +1 -0
- package/dist/web/assets/circle-check-CE93UcTb.js +1 -0
- package/dist/web/assets/code-block-OCS4YCEC-BFgaKpDI.js +2 -0
- package/dist/web/assets/confirm-dialog-nNRI_61i.js +1 -0
- package/dist/web/assets/folder-picker-DBgAK0Ax.js +1 -0
- package/dist/web/assets/index-8kxJ66vL.js +13 -0
- package/dist/web/assets/index-HqeZJR3B.css +1 -0
- package/dist/web/assets/loader-circle-C9xqhRQy.js +1 -0
- package/dist/web/assets/{mermaid-NOHMQCX5-BvevrkjG.js → mermaid-NOHMQCX5-DCP6uuN7.js} +42 -42
- package/dist/web/assets/modal-BoAiDPtT.js +1 -0
- package/dist/web/assets/pencil-Ch8xuc6u.js +1 -0
- package/dist/web/assets/select-BzwBaSER.js +1 -0
- package/dist/web/assets/use-profiles-B5A7JdZj.js +1 -0
- package/dist/web/assets/use-projects-CEI8i-dO.js +1 -0
- package/dist/web/assets/utils-CkSf8FUe.js +1 -0
- package/dist/web/assets/x-nkgvEsnZ.js +1 -0
- package/dist/web/index.html +2 -2
- package/node_modules/@agent-tower/shared/dist/types.d.ts +19 -0
- package/node_modules/@agent-tower/shared/dist/types.d.ts.map +1 -1
- package/node_modules/@agent-tower/shared/dist/types.js.map +1 -1
- package/package.json +3 -2
- package/prisma/migrations/20260331000000_add_app_settings/migration.sql +5 -0
- package/prisma/schema.prisma +6 -0
- package/scripts/postinstall.js +16 -14
- package/dist/web/assets/AgentDemoPage-CzND8Y0f.js +0 -1
- package/dist/web/assets/DemoPage-CmUJ0dvS.js +0 -4
- package/dist/web/assets/NotificationSettingsPage-B1SDsL68.js +0 -1
- package/dist/web/assets/ProfileSettingsPage-Z42bsJop.js +0 -3
- package/dist/web/assets/ProjectKanbanPage-BsRLM_To.js +0 -85
- package/dist/web/assets/ProjectSettingsPage-DizbsdCH.js +0 -2
- package/dist/web/assets/ProviderSettingsPage-BnLCrZgD.js +0 -54
- package/dist/web/assets/api-client-CgvcCTaj.js +0 -1
- package/dist/web/assets/circle-alert-wdB5gDUz.js +0 -1
- package/dist/web/assets/circle-check-DilG10OC.js +0 -1
- package/dist/web/assets/code-block-OCS4YCEC-BQpzSGnw.js +0 -2
- package/dist/web/assets/confirm-dialog-zLKSUa6j.js +0 -1
- package/dist/web/assets/folder-picker-CmgJx3lM.js +0 -1
- package/dist/web/assets/index-B-QFtMnj.js +0 -13
- package/dist/web/assets/index-DX47RnmN.css +0 -1
- package/dist/web/assets/loader-circle-B8Hk0gt3.js +0 -1
- package/dist/web/assets/modal-CCInxYr_.js +0 -1
- package/dist/web/assets/pencil-u5vhUMho.js +0 -1
- package/dist/web/assets/query-keys-BGgDKleg.js +0 -1
- package/dist/web/assets/select-CinUO48b.js +0 -1
- package/dist/web/assets/use-profiles-DJwSheDq.js +0 -1
- package/dist/web/assets/use-projects-OFs5uSW6.js +0 -1
- package/dist/web/assets/x-Bz9Stptu.js +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{c as P,r as o,j as e}from"./index-B-QFtMnj.js";import{a as k,F as w,u as z,b as q}from"./use-projects-OFs5uSW6.js";import{a as R,B as I}from"./api-client-CgvcCTaj.js";import{S as L}from"./select-CinUO48b.js";import{X as C,P as S}from"./x-Bz9Stptu.js";import"./query-keys-BGgDKleg.js";import"./chevron-down-DrP9EgY9.js";const A=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],K=P("folder-plus",A);function M({value:r,onChange:h,repoPath:d,placeholder:m}){const[l,c]=o.useState(""),[u,x]=o.useState([]),[p,s]=o.useState(!1),[a,g]=o.useState(-1),j=o.useRef(null),y=o.useRef(null),i=o.useRef(void 0),f=o.useCallback(async t=>{if(!d||!t){x([]),s(!1);return}try{const n=await R.get("/filesystem/complete",{params:{basePath:d,prefix:t}});x(n.results),s(n.results.length>0),g(-1)}catch{x([]),s(!1)}},[d]);o.useEffect(()=>{if(clearTimeout(i.current),!l){x([]),s(!1);return}return i.current=setTimeout(()=>f(l),200),()=>clearTimeout(i.current)},[l,f]),o.useEffect(()=>{const t=n=>{y.current&&!y.current.contains(n.target)&&j.current&&!j.current.contains(n.target)&&s(!1)};return document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[]);const b=t=>{const n=t.trim();!n||r.includes(n)||(h([...r,n]),c(""),s(!1),j.current?.focus())},E=t=>{h(r.filter((n,v)=>v!==t))},N=t=>{t.type==="directory"?(c(t.path),j.current?.focus()):b(t.path)},D=(t,n)=>{n.stopPropagation(),b(t.path.replace(/\/$/,""))},F=t=>{t.nativeEvent.isComposing||t.nativeEvent.keyCode===229||(p&&u.length>0?t.key==="ArrowDown"?(t.preventDefault(),g(n=>Math.min(n+1,u.length-1))):t.key==="ArrowUp"?(t.preventDefault(),g(n=>Math.max(n-1,-1))):t.key==="Enter"?(t.preventDefault(),a>=0?N(u[a]):b(l)):t.key==="Escape"&&s(!1):t.key==="Enter"&&(t.preventDefault(),b(l)))};return e.jsxs("div",{children:[r.length>0&&e.jsx("div",{className:"border border-neutral-200 rounded-lg mb-2 divide-y divide-neutral-100",children:r.map((t,n)=>e.jsxs("div",{className:"flex items-center gap-2 px-3 py-1.5 group",children:[t.includes(".")&&!t.endsWith("/")?e.jsx(k,{size:14,className:"text-neutral-400 shrink-0"}):e.jsx(w,{size:14,className:"text-amber-500 shrink-0"}),e.jsx("span",{className:"text-sm font-mono text-neutral-700 truncate flex-1",children:t}),e.jsx("button",{onClick:()=>E(n),className:"p-0.5 text-neutral-300 hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",children:e.jsx(C,{size:14})})]},t))}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{ref:j,type:"text",value:l,onChange:t=>c(t.target.value),onKeyDown:F,onFocus:()=>{l&&u.length>0&&s(!0)},placeholder:m??"输入文件路径...",className:"flex-1 px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("button",{onClick:()=>b(l),disabled:!l.trim(),className:"flex items-center gap-1 px-3 py-2 text-sm bg-neutral-900 text-white rounded-lg hover:bg-neutral-800 disabled:opacity-30 disabled:cursor-not-allowed transition-colors",children:[e.jsx(S,{size:14}),e.jsx("span",{children:"添加"})]})]}),p&&e.jsx("div",{ref:y,className:"absolute z-50 left-0 right-0 mt-1 bg-white border border-neutral-200 rounded-lg shadow-lg max-h-[200px] overflow-y-auto",children:u.map((t,n)=>e.jsxs("button",{onClick:()=>N(t),className:`w-full flex items-center gap-2 px-3 py-1.5 text-sm text-left hover:bg-neutral-50 transition-colors ${n===a?"bg-neutral-100":""}`,children:[t.type==="directory"?e.jsx(w,{size:14,className:"text-amber-500 shrink-0"}):e.jsx(k,{size:14,className:"text-neutral-400 shrink-0"}),e.jsx("span",{className:"font-mono text-neutral-700 truncate flex-1",children:t.path}),t.type==="directory"&&e.jsx("span",{onClick:v=>D(t,v),className:"p-0.5 text-neutral-300 hover:text-emerald-600 shrink-0",title:"添加此目录",children:e.jsx(K,{size:14})})]},t.path))})]})]})}function _({value:r,onChange:h}){const[d,m]=o.useState(""),[l,c]=o.useState(""),u=()=>{const s=d.trim(),a=l.trim();!s||!a||(h([...r,{name:s,command:a}]),m(""),c(""))},x=s=>{h(r.filter((a,g)=>g!==s))},p=s=>{s.key==="Enter"&&!s.nativeEvent.isComposing&&s.nativeEvent.keyCode!==229&&(s.preventDefault(),u())};return e.jsxs("div",{children:[r.length>0&&e.jsx("div",{className:"border border-neutral-200 rounded-lg mb-2 divide-y divide-neutral-100",children:r.map((s,a)=>e.jsxs("div",{className:"flex items-center gap-3 px-3 py-2 group",children:[e.jsx("span",{className:"text-sm font-medium text-neutral-700 w-28 shrink-0 truncate",children:s.name}),e.jsx("span",{className:"text-sm font-mono text-neutral-500 flex-1 truncate",children:s.command}),e.jsx("button",{onClick:()=>x(a),className:"p-0.5 text-neutral-300 hover:text-red-500 opacity-0 group-hover:opacity-100 transition-opacity shrink-0",children:e.jsx(C,{size:14})})]},a))}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"text",value:d,onChange:s=>m(s.target.value),onKeyDown:p,placeholder:"名称",className:"w-28 shrink-0 px-3 py-2 border border-neutral-200 rounded-lg text-sm focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsx("input",{type:"text",value:l,onChange:s=>c(s.target.value),onKeyDown:p,placeholder:"命令",className:"flex-1 px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300"}),e.jsxs("button",{onClick:u,disabled:!d.trim()||!l.trim(),className:"flex items-center gap-1 px-3 py-2 text-sm bg-neutral-900 text-white rounded-lg hover:bg-neutral-800 disabled:opacity-30 disabled:cursor-not-allowed transition-colors shrink-0",children:[e.jsx(S,{size:14}),e.jsx("span",{children:"添加"})]})]})]})}function B(r){return r?r.split(",").map(h=>h.trim()).filter(Boolean):[]}function O(r){if(!r)return[];try{return JSON.parse(r)}catch{return[]}}function W(){const{data:r,isLoading:h}=z({limit:100}),d=q(),[m,l]=o.useState(""),[c,u]=o.useState({copyFiles:[],setupScript:"",quickCommands:[]}),[x,p]=o.useState(!1),s=r?.data??[],a=s.find(i=>i.id===m);if(o.useEffect(()=>{!m&&s.length>0&&l(s[0].id)},[s,m]),o.useEffect(()=>{a&&!x&&u({copyFiles:B(a.copyFiles),setupScript:a.setupScript??"",quickCommands:O(a.quickCommands)})},[a,x]),h)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"加载中..."});if(s.length===0)return e.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"暂无项目,请先创建项目"});const g=s.map(i=>({value:i.id,label:i.name})),j=()=>{m&&d.mutate({id:m,copyFiles:c.copyFiles.length>0?c.copyFiles.join(", "):null,setupScript:c.setupScript.trim()||null,quickCommands:c.quickCommands.length>0?JSON.stringify(c.quickCommands):null},{onSuccess:()=>p(!1)})},y=i=>{l(i),p(!1)};return e.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-3xl space-y-8",children:[e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"选择项目"}),e.jsx(L,{value:m,onChange:y,options:g,placeholder:"选择项目..."})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"自动复制文件"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"创建 worktree 时自动从主仓库复制的文件或目录。支持 glob 模式。"}),e.jsx(M,{value:c.copyFiles,onChange:i=>{u(f=>({...f,copyFiles:i})),p(!0)},repoPath:a?.repoPath??""}),e.jsx("p",{className:"text-[11px] text-neutral-400 mt-2",children:"适用于不在 git 管理中但启动必需的文件,如 .env、node_modules、数据库文件等"})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"Setup 脚本"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"创建 worktree 后自动执行的命令,每行一条,按顺序执行。"}),e.jsx("textarea",{value:c.setupScript,onChange:i=>{u(f=>({...f,setupScript:i.target.value})),p(!0)},placeholder:`pnpm install
|
|
2
|
-
pnpm run setup`,rows:4,className:"w-full px-3 py-2 border border-neutral-200 rounded-lg text-sm font-mono focus:outline-none focus:ring-1 focus:ring-neutral-300 resize-none"}),e.jsx("p",{className:"text-[11px] text-neutral-400 mt-1",children:"命令在 worktree 目录下执行,单条命令超时 5 分钟,失败不会阻断后续命令"})]}),e.jsxs("section",{children:[e.jsx("h3",{className:"text-[13px] font-semibold text-neutral-900 mb-1",children:"常用命令"}),e.jsx("p",{className:"text-[12px] text-neutral-400 mb-3",children:"在终端中可快速执行的命令,不会自动运行。"}),e.jsx(_,{value:c.quickCommands,onChange:i=>{u(f=>({...f,quickCommands:i})),p(!0)}})]}),x&&e.jsx("div",{className:"sticky bottom-6 flex justify-end",children:e.jsx(I,{size:"sm",onClick:j,disabled:d.isPending,children:d.isPending?"保存中...":"保存"})})]})}export{W as ProjectSettingsPage};
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import{c as G,r as j,j as n,y as k}from"./index-B-QFtMnj.js";import{u as pe,a as he,b as ge,c as be,d as ve,e as ye,f as je,C as we,A as w}from"./confirm-dialog-zLKSUa6j.js";import{a as Ne,c as F,B as C}from"./api-client-CgvcCTaj.js";import{T as ee,M as K}from"./modal-CCInxYr_.js";import{S as te}from"./select-CinUO48b.js";import"./log-adapter-50wgehrc.js";import{u as Ce,q as Ee}from"./query-keys-BGgDKleg.js";import{C as ne}from"./chevron-down-DrP9EgY9.js";import{P as re}from"./x-Bz9Stptu.js";import{P as ke}from"./pencil-u5vhUMho.js";import{C as Pe}from"./circle-check-DilG10OC.js";const _e=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Oe=G("circle-x",_e);const Ie=[["path",{d:"M12 15V3",key:"m9g1x1"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["path",{d:"m7 10 5 5 5-5",key:"brsn70"}]],Te=G("download",Ie);const Ae=[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]],Se=G("upload",Ae);function De(e,t){let l=e.slice(0,t).split(/\r\n|\n|\r/g);return[l.length,l.pop().length+1]}function Le(e,t,l){let i=e.split(/\r\n|\n|\r/g),s="",r=(Math.log10(t+1)|0)+1;for(let a=t-1;a<=t+1;a++){let o=i[a-1];o&&(s+=a.toString().padEnd(r," "),s+=": ",s+=o,s+=`
|
|
2
|
-
`,a===t&&(s+=" ".repeat(r+l+2),s+=`^
|
|
3
|
-
`))}return s}class f extends Error{line;column;codeblock;constructor(t,l){const[i,s]=De(l.toml,l.ptr),r=Le(l.toml,i,s);super(`Invalid TOML document: ${t}
|
|
4
|
-
|
|
5
|
-
${r}`,l),this.line=i,this.column=s,this.codeblock=r}}function Re(e,t){let l=0;for(;e[t-++l]==="\\";);return--l&&l%2}function z(e,t=0,l=e.length){let i=e.indexOf(`
|
|
6
|
-
`,t);return e[i-1]==="\r"&&i--,i<=l?i:-1}function R(e,t){for(let l=t;l<e.length;l++){let i=e[l];if(i===`
|
|
7
|
-
`)return l;if(i==="\r"&&e[l+1]===`
|
|
8
|
-
`)return l+1;if(i<" "&&i!==" "||i==="")throw new f("control characters are not allowed in comments",{toml:e,ptr:t})}return e.length}function E(e,t,l,i){let s;for(;(s=e[t])===" "||s===" "||!l&&(s===`
|
|
9
|
-
`||s==="\r"&&e[t+1]===`
|
|
10
|
-
`);)t++;return i||s!=="#"?t:E(e,R(e,t),l)}function Fe(e,t,l,i,s=!1){if(!i)return t=z(e,t),t<0?e.length:t;for(let r=t;r<e.length;r++){let a=e[r];if(a==="#")r=z(e,r);else{if(a===l)return r+1;if(a===i||s&&(a===`
|
|
11
|
-
`||a==="\r"&&e[r+1]===`
|
|
12
|
-
`))return r}}throw new f("cannot find end of structure",{toml:e,ptr:t})}function se(e,t){let l=e[t],i=l===e[t+1]&&e[t+1]===e[t+2]?e.slice(t,t+3):l;t+=i.length-1;do t=e.indexOf(i,++t);while(t>-1&&l!=="'"&&Re(e,t));return t>-1&&(t+=i.length,i.length>1&&(e[t]===l&&t++,e[t]===l&&t++)),t}let Me=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i;class T extends Date{#t=!1;#n=!1;#e=null;constructor(t){let l=!0,i=!0,s="Z";if(typeof t=="string"){let r=t.match(Me);r?(r[1]||(l=!1,t=`0000-01-01T${t}`),i=!!r[2],i&&t[10]===" "&&(t=t.replace(" ","T")),r[2]&&+r[2]>23?t="":(s=r[3]||null,t=t.toUpperCase(),!s&&i&&(t+="Z"))):t=""}super(t),isNaN(this.getTime())||(this.#t=l,this.#n=i,this.#e=s)}isDateTime(){return this.#t&&this.#n}isLocal(){return!this.#t||!this.#n||!this.#e}isDate(){return this.#t&&!this.#n}isTime(){return this.#n&&!this.#t}isValid(){return this.#t||this.#n}toISOString(){let t=super.toISOString();if(this.isDate())return t.slice(0,10);if(this.isTime())return t.slice(11,23);if(this.#e===null)return t.slice(0,-1);if(this.#e==="Z")return t;let l=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return l=this.#e[0]==="-"?l:-l,new Date(this.getTime()-l*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(t,l="Z"){let i=new T(t);return i.#e=l,i}static wrapAsLocalDateTime(t){let l=new T(t);return l.#e=null,l}static wrapAsLocalDate(t){let l=new T(t);return l.#n=!1,l.#e=null,l}static wrapAsLocalTime(t){let l=new T(t);return l.#t=!1,l.#e=null,l}}let Ue=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,ze=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,$e=/^[+-]?0[0-9_]/,Be=/^[0-9a-f]{2,8}$/i,H={b:"\b",t:" ",n:`
|
|
13
|
-
`,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function le(e,t=0,l=e.length){let i=e[t]==="'",s=e[t++]===e[t]&&e[t]===e[t+1];s&&(l-=2,e[t+=2]==="\r"&&t++,e[t]===`
|
|
14
|
-
`&&t++);let r=0,a,o="",c=t;for(;t<l-1;){let d=e[t++];if(d===`
|
|
15
|
-
`||d==="\r"&&e[t]===`
|
|
16
|
-
`){if(!s)throw new f("newlines are not allowed in strings",{toml:e,ptr:t-1})}else if(d<" "&&d!==" "||d==="")throw new f("control characters are not allowed in strings",{toml:e,ptr:t-1});if(a){if(a=!1,d==="x"||d==="u"||d==="U"){let h=e.slice(t,t+=d==="x"?2:d==="u"?4:8);if(!Be.test(h))throw new f("invalid unicode escape",{toml:e,ptr:r});try{o+=String.fromCodePoint(parseInt(h,16))}catch{throw new f("invalid unicode escape",{toml:e,ptr:r})}}else if(s&&(d===`
|
|
17
|
-
`||d===" "||d===" "||d==="\r")){if(t=E(e,t-1,!0),e[t]!==`
|
|
18
|
-
`&&e[t]!=="\r")throw new f("invalid escape: only line-ending whitespace may be escaped",{toml:e,ptr:r});t=E(e,t)}else if(d in H)o+=H[d];else throw new f("unrecognized escape sequence",{toml:e,ptr:r});c=t}else!i&&d==="\\"&&(r=t-1,a=!0,o+=e.slice(c,r))}return o+e.slice(c,l-1)}function Ge(e,t,l,i){if(e==="true")return!0;if(e==="false")return!1;if(e==="-inf")return-1/0;if(e==="inf"||e==="+inf")return 1/0;if(e==="nan"||e==="+nan"||e==="-nan")return NaN;if(e==="-0")return i?0n:0;let s=Ue.test(e);if(s||ze.test(e)){if($e.test(e))throw new f("leading zeroes are not allowed",{toml:t,ptr:l});e=e.replace(/_/g,"");let a=+e;if(isNaN(a))throw new f("invalid number",{toml:t,ptr:l});if(s){if((s=!Number.isSafeInteger(a))&&!i)throw new f("integer value cannot be represented losslessly",{toml:t,ptr:l});(s||i===!0)&&(a=BigInt(e))}return a}const r=new T(e);if(!r.isValid())throw new f("invalid value",{toml:t,ptr:l});return r}function Ke(e,t,l){let i=e.slice(t,l),s=i.indexOf("#");return s>-1&&(R(e,s),i=i.slice(0,s)),[i.trimEnd(),s]}function X(e,t,l,i,s){if(i===0)throw new f("document contains excessively nested structures. aborting.",{toml:e,ptr:t});let r=e[t];if(r==="["||r==="{"){let[c,d]=r==="["?Ve(e,t,i,s):qe(e,t,i,s);if(l){if(d=E(e,d),e[d]===",")d++;else if(e[d]!==l)throw new f("expected comma or end of structure",{toml:e,ptr:d})}return[c,d]}let a;if(r==='"'||r==="'"){a=se(e,t);let c=le(e,t,a);if(l){if(a=E(e,a),e[a]&&e[a]!==","&&e[a]!==l&&e[a]!==`
|
|
19
|
-
`&&e[a]!=="\r")throw new f("unexpected character encountered",{toml:e,ptr:a});a+=+(e[a]===",")}return[c,a]}a=Fe(e,t,",",l);let o=Ke(e,t,a-+(e[a-1]===","));if(!o[0])throw new f("incomplete key-value declaration: no value specified",{toml:e,ptr:t});return l&&o[1]>-1&&(a=E(e,t+o[1]),a+=+(e[a]===",")),[Ge(o[0],e,t,s),a]}let Xe=/^[a-zA-Z0-9-_]+[ \t]*$/;function $(e,t,l="="){let i=t-1,s=[],r=e.indexOf(l,t);if(r<0)throw new f("incomplete key-value: cannot find end of key",{toml:e,ptr:t});do{let a=e[t=++i];if(a!==" "&&a!==" ")if(a==='"'||a==="'"){if(a===e[t+1]&&a===e[t+2])throw new f("multiline strings are not allowed in keys",{toml:e,ptr:t});let o=se(e,t);if(o<0)throw new f("unfinished string encountered",{toml:e,ptr:t});i=e.indexOf(".",o);let c=e.slice(o,i<0||i>r?r:i),d=z(c);if(d>-1)throw new f("newlines are not allowed in keys",{toml:e,ptr:t+i+d});if(c.trimStart())throw new f("found extra tokens after the string part",{toml:e,ptr:o});if(r<o&&(r=e.indexOf(l,o),r<0))throw new f("incomplete key-value: cannot find end of key",{toml:e,ptr:t});s.push(le(e,t,o))}else{i=e.indexOf(".",t);let o=e.slice(t,i<0||i>r?r:i);if(!Xe.test(o))throw new f("only letter, numbers, dashes and underscores are allowed in keys",{toml:e,ptr:t});s.push(o.trimEnd())}}while(i+1&&i<r);return[s,E(e,r+1,!0,!0)]}function qe(e,t,l,i){let s={},r=new Set,a;for(t++;(a=e[t++])!=="}"&&a;){if(a===",")throw new f("expected value, found comma",{toml:e,ptr:t-1});if(a==="#")t=R(e,t);else if(a!==" "&&a!==" "&&a!==`
|
|
20
|
-
`&&a!=="\r"){let o,c=s,d=!1,[h,p]=$(e,t-1);for(let b=0;b<h.length;b++){if(b&&(c=d?c[o]:c[o]={}),o=h[b],(d=Object.hasOwn(c,o))&&(typeof c[o]!="object"||r.has(c[o])))throw new f("trying to redefine an already defined value",{toml:e,ptr:t});!d&&o==="__proto__"&&Object.defineProperty(c,o,{enumerable:!0,configurable:!0,writable:!0})}if(d)throw new f("trying to redefine an already defined value",{toml:e,ptr:t});let[u,g]=X(e,p,"}",l-1,i);r.add(u),c[o]=u,t=g}}if(!a)throw new f("unfinished table encountered",{toml:e,ptr:t});return[s,t]}function Ve(e,t,l,i){let s=[],r;for(t++;(r=e[t++])!=="]"&&r;){if(r===",")throw new f("expected value, found comma",{toml:e,ptr:t-1});if(r==="#")t=R(e,t);else if(r!==" "&&r!==" "&&r!==`
|
|
21
|
-
`&&r!=="\r"){let a=X(e,t-1,"]",l-1,i);s.push(a[0]),t=a[1]}}if(!r)throw new f("unfinished array encountered",{toml:e,ptr:t});return[s,t]}function W(e,t,l,i){let s=t,r=l,a,o=!1,c;for(let d=0;d<e.length;d++){if(d){if(s=o?s[a]:s[a]={},r=(c=r[a]).c,i===0&&(c.t===1||c.t===2))return null;if(c.t===2){let h=s.length-1;s=s[h],r=r[h].c}}if(a=e[d],(o=Object.hasOwn(s,a))&&r[a]?.t===0&&r[a]?.d)return null;o||(a==="__proto__"&&(Object.defineProperty(s,a,{enumerable:!0,configurable:!0,writable:!0}),Object.defineProperty(r,a,{enumerable:!0,configurable:!0,writable:!0})),r[a]={t:d<e.length-1&&i===2?3:i,d:!1,i:0,c:{}})}if(c=r[a],c.t!==i&&!(i===1&&c.t===3)||(i===2&&(c.d||(c.d=!0,s[a]=[]),s[a].push(s={}),c.c[c.i++]=c={t:1,d:!1,i:0,c:{}}),c.d))return null;if(c.d=!0,i===1)s=o?s[a]:s[a]={};else if(i===0&&o)return null;return[a,s,c.c]}function Ze(e,{maxDepth:t=1e3,integersAsBigInt:l}={}){let i={},s={},r=i,a=s;for(let o=E(e,0);o<e.length;){if(e[o]==="["){let c=e[++o]==="[",d=$(e,o+=+c,"]");if(c){if(e[d[1]-1]!=="]")throw new f("expected end of table declaration",{toml:e,ptr:d[1]-1});d[1]++}let h=W(d[0],i,s,c?2:1);if(!h)throw new f("trying to redefine an already defined table or value",{toml:e,ptr:o});a=h[2],r=h[1],o=d[1]}else{let c=$(e,o),d=W(c[0],r,a,0);if(!d)throw new f("trying to redefine an already defined table or value",{toml:e,ptr:o});let h=X(e,c[1],void 0,t,l);d[1][d[0]]=h[0],o=h[1]}if(o=E(e,o,!0),e[o]&&e[o]!==`
|
|
22
|
-
`&&e[o]!=="\r")throw new f("each key-value declaration must be followed by an end-of-line",{toml:e,ptr:o});o=E(e,o)}return i}function Je(){return Ce({queryKey:Ee.system.cursorAgentModels,queryFn:()=>Ne.get("/system/cursor-agent-models"),staleTime:1e3*60*10})}function Ye({value:e,onChange:t}){const{data:l,isLoading:i,isError:s}=Je(),r=l?.models??[],[a,o]=j.useState(!1),[c,d]=j.useState(""),h=j.useMemo(()=>{const p=c.trim().toLowerCase();return p?r.filter(u=>u.id.toLowerCase().includes(p)||u.label.toLowerCase().includes(p)):r},[r,c]);return n.jsxs("div",{className:"flex flex-col gap-2 flex-1 min-w-0",children:[n.jsx("input",{type:"text",value:e,onChange:p=>{const u=p.target.value;t(u===""?void 0:u)},placeholder:"留空为 auto;或直接输入模型 ID(与 cursor-agent --model 一致)",className:"w-full px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900 font-mono"}),n.jsxs("button",{type:"button",onClick:()=>o(p=>!p),disabled:i,className:"flex items-center gap-1 text-xs text-neutral-600 hover:text-neutral-900 disabled:opacity-50 w-fit",children:[n.jsx(ne,{size:14,className:F("transition-transform",a&&"rotate-180")}),i?"正在加载 cursor-agent 模型列表…":a?"收起列表":`从本机 cursor-agent 选择(${r.length} 个)`]}),a&&!i&&n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-white shadow-sm overflow-hidden",children:[n.jsx("input",{type:"text",value:c,onChange:p=>d(p.target.value),placeholder:"筛选模型…",className:"w-full px-3 py-2 text-sm border-b border-neutral-100 focus:outline-none focus:ring-1 focus:ring-inset focus:ring-neutral-300"}),n.jsxs("div",{className:"max-h-[min(50vh,22rem)] overflow-y-auto py-1",children:[n.jsx("button",{type:"button",onClick:()=>{t(void 0),o(!1),d("")},className:F("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50",e?"text-neutral-700":"bg-neutral-50 font-medium"),children:"默认 (auto)"}),h.map(p=>n.jsxs("button",{type:"button",onClick:()=>{t(p.id),o(!1),d("")},className:F("w-full px-3 py-2 text-left text-sm hover:bg-neutral-50 border-t border-neutral-100",e===p.id?"bg-blue-50/80":""),children:[n.jsx("div",{className:"font-mono text-xs text-neutral-900 break-all",children:p.id}),n.jsx("div",{className:"text-xs text-neutral-500 mt-0.5 break-words",children:p.label})]},p.id)),h.length===0&&n.jsx("div",{className:"px-3 py-4 text-xs text-neutral-400 text-center",children:"无匹配项"})]})]}),(s||l?.error)&&n.jsxs("p",{className:"text-xs text-amber-700",children:["无法从本机加载模型列表(",l?.error??"请求失败",")。仍可手动输入;或在安装 cursor-agent 的机器上运行",n.jsx("code",{className:"mx-0.5 bg-neutral-100 px-1 rounded text-[11px]",children:"cursor-agent --list-models"}),"查看 ID。"]})]})}const q={CLAUDE_CODE:"Claude Code",GEMINI_CLI:"Gemini CLI",CURSOR_AGENT:"Cursor Agent",CODEX:"Codex"},D={key:"appendPrompt",label:"追加 Prompt",type:"textarea",rows:3,placeholder:"追加到每次 prompt 末尾的文本"},V={[w.CLAUDE_CODE]:[{key:"dangerouslySkipPermissions",label:"跳过权限确认",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"claude-sonnet-4-20250514"},D],[w.GEMINI_CLI]:[{key:"yolo",label:"跳过权限确认",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"gemini-2.5-pro"},D],[w.CURSOR_AGENT]:[{key:"force",label:"强制执行",type:"switch"},{key:"model",label:"模型",type:"cursor_model"},D],[w.CODEX]:[{key:"dangerouslyBypassApprovalsAndSandbox",label:"跳过所有确认和沙盒",type:"switch"},{key:"model",label:"模型",type:"input",placeholder:"o3"},{key:"profile",label:"Profile",type:"input",placeholder:"~/.codex/config.toml 中的 profile 名称"},D]};function Q(){return{}}function B(e,t){return{...t}}const He=JSON.stringify({env:{ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:""}},null,2),We=`# Codex config.toml 配置片段 — 通过 -c 参数注入,不会修改 ~/.codex/config.toml
|
|
23
|
-
# 参考: https://developers.openai.com/codex/config-sample
|
|
24
|
-
|
|
25
|
-
# ─── 模型与推理 ─────────────────────────────────────────────
|
|
26
|
-
# model_reasoning_effort = "medium" # minimal | low | medium | high | xhigh
|
|
27
|
-
# model_reasoning_summary = "auto" # auto | concise | detailed | none
|
|
28
|
-
# model_verbosity = "medium" # low | medium | high
|
|
29
|
-
# service_tier = "flex" # fast | flex
|
|
30
|
-
|
|
31
|
-
# ─── 自定义 Model Provider ──────────────────────────────────
|
|
32
|
-
# model_provider = "azure"
|
|
33
|
-
#
|
|
34
|
-
# [model_providers.azure]
|
|
35
|
-
# name = "Azure OpenAI"
|
|
36
|
-
# base_url = "https://YOUR_PROJECT.openai.azure.com/openai"
|
|
37
|
-
# env_key = "AZURE_OPENAI_API_KEY"
|
|
38
|
-
# env_key_instructions = "Set AZURE_OPENAI_API_KEY in Provider env"
|
|
39
|
-
# wire_api = "responses"
|
|
40
|
-
# query_params = { api-version = "2025-04-01-preview" }
|
|
41
|
-
|
|
42
|
-
# ─── OpenAI 数据驻留 ────────────────────────────────────────
|
|
43
|
-
# [model_providers.openai-us]
|
|
44
|
-
# name = "OpenAI US"
|
|
45
|
-
# base_url = "https://us.api.openai.com/v1"
|
|
46
|
-
# wire_api = "responses"
|
|
47
|
-
# requires_openai_auth = true
|
|
48
|
-
|
|
49
|
-
# ─── 本地 OSS (Ollama) ──────────────────────────────────────
|
|
50
|
-
# [model_providers.ollama]
|
|
51
|
-
# name = "Ollama"
|
|
52
|
-
# base_url = "http://localhost:11434/v1"
|
|
53
|
-
# wire_api = "responses"
|
|
54
|
-
`;function M(e){return e===w.CLAUDE_CODE?He:e===w.CODEX?We:""}function Qe(e){return e===w.CLAUDE_CODE||e===w.CODEX}const et=Object.values(V).flat().reduce((e,t)=>(e[t.key]||(e[t.key]=t.label),e),{}),tt=Object.values(V).flat().reduce((e,t)=>(t.options&&(e[t.key]=Object.fromEntries(t.options.map(l=>[l.value,l.label]))),e),{});function nt(e,t){return typeof t=="boolean"?t?"是":"否":typeof t=="string"&&t?tt[e]?.[t]??t:String(t)}function L(e,t){return e instanceof Error?e.message:t}function rt(e){return`agent-tower-provider-backup-${e.replace(/[:.]/g,"-")}.json`}function st(e,t){const l=new Blob([JSON.stringify(t,null,2)],{type:"application/json"}),i=URL.createObjectURL(l),s=document.createElement("a");s.href=i,s.download=e,document.body.appendChild(s),s.click(),document.body.removeChild(s),URL.revokeObjectURL(i)}function lt(e){switch(e){case"CREATE":return{label:"新增",className:"text-green-700 bg-green-50"};case"OVERWRITE":return{label:"覆盖",className:"text-amber-700 bg-amber-50"};case"SKIP":return{label:"跳过",className:"text-neutral-600 bg-neutral-100"}}}function at({type:e}){return e==="LOGIN_DETECTED"||e==="INSTALLATION_FOUND"?n.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 text-xs text-green-700 bg-green-50 rounded",children:[n.jsx(Pe,{size:12}),"可用"]}):n.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 text-xs text-neutral-500 bg-neutral-50 rounded",children:[n.jsx(Oe,{size:12}),"不可用"]})}function U({title:e,defaultOpen:t=!1,children:l}){const[i,s]=j.useState(t);return n.jsxs("div",{className:"border border-neutral-200 rounded-lg",children:[n.jsxs("button",{type:"button",onClick:()=>s(r=>!r),className:"w-full flex items-center justify-between px-4 py-2.5 text-sm font-medium text-neutral-700 hover:bg-neutral-50 transition-colors rounded-lg",children:[e,n.jsx(ne,{size:14,className:`transition-transform ${i?"rotate-180":""}`})]}),i&&n.jsx("div",{className:"px-4 pb-4 space-y-3",children:l})]})}function it({agentType:e,config:t,onChange:l}){const i=V[e]??[];if(i.length===0)return n.jsx("p",{className:"text-xs text-neutral-400",children:"该类型暂无运行配置"});const s=(r,a)=>{l({...t,[r]:a})};return n.jsx("div",{className:"space-y-3",children:i.map(r=>r.type==="textarea"?n.jsxs("div",{children:[n.jsx("label",{className:"block text-sm text-neutral-700 mb-1",children:r.label}),n.jsx("textarea",{value:t[r.key]??"",onChange:a=>s(r.key,a.target.value||void 0),placeholder:r.placeholder,rows:r.rows??3,className:"w-full px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"})]},r.key):r.type==="cursor_model"?n.jsxs("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-start",children:[n.jsx("label",{className:"text-sm text-neutral-700 w-32 shrink-0 sm:pt-2",children:r.label}),n.jsx(Ye,{value:t[r.key]??"",onChange:a=>s(r.key,a)})]},r.key):n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("label",{className:"text-sm text-neutral-700 w-32 shrink-0",children:r.label}),r.type==="switch"&&n.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[n.jsx("input",{type:"checkbox",checked:!!t[r.key],onChange:a=>s(r.key,a.target.checked),className:"sr-only peer"}),n.jsx("div",{className:"w-9 h-5 bg-neutral-200 peer-focus:outline-none rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-neutral-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all peer-checked:bg-neutral-900"})]}),r.type==="input"&&n.jsx("input",{type:"text",value:t[r.key]??"",onChange:a=>s(r.key,a.target.value||void 0),placeholder:r.placeholder,className:"flex-1 px-3 py-1.5 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),r.type==="select"&&r.options&&n.jsx(te,{value:t[r.key]??"",onChange:a=>s(r.key,a||void 0),options:r.options,placeholder:"选择..."})]},r.key))})}function ot({isOpen:e,onClose:t,initialData:l,onSave:i}){const[s,r]=j.useState(l??{name:"",agentType:w.CLAUDE_CODE,config:Q(),settings:"",env:[],isDefault:!1}),[a,o]=j.useState("");j.useEffect(()=>{if(!l&&!s.settings){const u=M(s.agentType);u&&r(g=>({...g,settings:u}))}},[]);const c=u=>{r(g=>({...g,agentType:u,config:Q(),settings:M(u)}))},d=()=>{o("");const u=B(s.agentType,s.config),g={};for(const[y,P]of Object.entries(u))P!==void 0&&P!==""&&(g[y]=P);const b=s.settings.trim();if(b){if(s.agentType===w.CODEX)try{Ze(b)}catch(y){o(`TOML 语法错误: ${y instanceof Error?y.message:String(y)}`);return}else if(s.agentType===w.CLAUDE_CODE)try{JSON.parse(b)}catch{o("JSON 语法错误");return}}const v={};for(const{key:y,value:P}of s.env){const A=y.trim();A&&(v[A]=P)}const N={name:s.name,agentType:s.agentType,config:g,settings:b||void 0,env:Object.keys(v).length>0?v:void 0,isDefault:s.isDefault};i(N)};if(!e)return null;const h=Qe(s.agentType),p=s.agentType===w.CODEX;return n.jsx(K,{isOpen:e,onClose:t,title:l?"编辑 Provider":"新建 Provider",className:"max-w-2xl",children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[n.jsxs("div",{children:[n.jsx("label",{className:"block text-xs font-medium text-neutral-700 mb-1",children:"名称"}),n.jsx("input",{type:"text",value:s.name,onChange:u=>r(g=>({...g,name:u.target.value})),className:"w-full px-3 py-2 text-sm border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900",placeholder:"例如: Claude Code (官方)"})]}),!l&&n.jsxs("div",{children:[n.jsx("label",{className:"block text-xs font-medium text-neutral-700 mb-1",children:"Agent 类型"}),n.jsx(te,{value:s.agentType,onChange:u=>c(u),options:Object.values(w).map(u=>({value:u,label:q[u]??u})),placeholder:"选择 Agent 类型"})]})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("input",{type:"checkbox",id:"isDefault",checked:s.isDefault,onChange:u=>r(g=>({...g,isDefault:u.target.checked})),className:"w-4 h-4"}),n.jsx("label",{htmlFor:"isDefault",className:"text-sm text-neutral-700",children:"设为该类型的默认 Provider"})]}),n.jsx(U,{title:"运行配置",defaultOpen:!0,children:n.jsx(it,{agentType:s.agentType,config:s.config,onChange:u=>r(g=>({...g,config:u}))})}),n.jsxs(U,{title:"环境变量",defaultOpen:s.env.length>0,children:[n.jsxs("p",{className:"text-xs text-neutral-500 mb-2",children:["注入到 Agent 进程的环境变量。Codex 的 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"env_key"})," 指定的是变量名,实际值需在此处设置。"]}),n.jsxs("div",{className:"space-y-2",children:[s.env.map((u,g)=>n.jsxs("div",{className:"flex gap-2 items-center",children:[n.jsx("input",{type:"text",value:u.key,onChange:b=>{const v=[...s.env];v[g]={...v[g],key:b.target.value},r(N=>({...N,env:v}))},placeholder:"变量名,如 AZURE_OPENAI_API_KEY",className:"flex-1 px-3 py-1.5 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),n.jsx("input",{type:"text",value:u.value,onChange:b=>{const v=[...s.env];v[g]={...v[g],value:b.target.value},r(N=>({...N,env:v}))},placeholder:"值",className:"flex-1 px-3 py-1.5 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900"}),n.jsx("button",{type:"button",onClick:()=>{const b=s.env.filter((v,N)=>N!==g);r(v=>({...v,env:b}))},className:"p-1.5 text-neutral-400 hover:text-red-500",children:n.jsx(ee,{size:14})})]},g)),n.jsxs(C,{variant:"outline",size:"sm",onClick:()=>r(u=>({...u,env:[...u.env,{key:"",value:""}]})),children:[n.jsx(re,{size:12,className:"mr-1"}),"添加变量"]})]})]}),h&&n.jsxs(U,{title:p?"CLI 原生配置 (config.toml)":"CLI 原生配置 (settings.json)",children:[n.jsx("p",{className:"text-xs text-neutral-500 mb-2",children:p?n.jsxs(n.Fragment,{children:["直接填写 Codex ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"config.toml"})," 格式的配置片段, 通过 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"-c"})," 参数注入。 不会修改你的 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"~/.codex/config.toml"})," 文件。"]}):n.jsxs(n.Fragment,{children:["对应 Claude Code 的 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"~/.claude/settings.json"}),", 通过 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"--settings"})," 参数注入。 在 ",n.jsx("code",{className:"bg-neutral-100 px-1 rounded",children:"env"})," 中设置 ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL 等。"]})}),n.jsx("textarea",{value:s.settings,onChange:u=>{r(g=>({...g,settings:u.target.value})),o("")},rows:10,className:"w-full px-3 py-2 text-sm font-mono border border-neutral-200 rounded focus:outline-none focus:ring-1 focus:ring-neutral-900 bg-neutral-50",placeholder:M(s.agentType)}),a&&n.jsx("p",{className:"mt-1 text-xs text-red-600",children:a})]}),n.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[n.jsx(C,{variant:"outline",onClick:t,children:"取消"}),n.jsx(C,{onClick:d,disabled:!s.name.trim(),children:"保存"})]})]})})}function ct({isOpen:e,onClose:t,onConfirm:l,acknowledged:i,onAcknowledgedChange:s,isLoading:r}){return n.jsx(K,{isOpen:e,onClose:t,title:"导出 Provider 备份",className:"max-w-xl",action:n.jsxs(n.Fragment,{children:[n.jsx(C,{variant:"outline",onClick:t,disabled:r,children:"取消"}),n.jsx(C,{onClick:l,disabled:!i||r,children:r?"导出中...":"导出备份"})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsx("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3 text-sm text-amber-900",children:"导出的备份文件将包含完整的 Provider 配置,包括环境变量、CLI settings 等敏感信息。任何拿到文件的人都可能直接使用这些 Provider。"}),n.jsxs("div",{className:"text-sm text-neutral-600 space-y-2",children:[n.jsx("p",{children:"这个功能用于备份和迁移,不用于分享配置。"}),n.jsx("p",{children:"导出内容只包含用户层配置:自定义 Provider,以及对内置 Provider 的覆盖。"})]}),n.jsxs("label",{className:"flex items-start gap-3 rounded-lg border border-neutral-200 px-4 py-3 text-sm text-neutral-700",children:[n.jsx("input",{type:"checkbox",checked:i,onChange:a=>s(a.target.checked),className:"mt-0.5 h-4 w-4"}),n.jsx("span",{children:"我已知晓该备份文件包含敏感信息,只会保存在安全位置。"})]})]})})}function dt({isOpen:e,onClose:t,preview:l,backup:i,onConfirm:s,isLoading:r}){if(!l||!i)return null;const a=l.summary.create+l.summary.overwrite,o=[...l.items].sort((c,d)=>{const h={CREATE:0,OVERWRITE:1,SKIP:2};return h[c.action]-h[d.action]});return n.jsx(K,{isOpen:e,onClose:t,title:"导入 Provider 备份",className:"max-w-3xl",action:n.jsxs(n.Fragment,{children:[n.jsx(C,{variant:"outline",onClick:t,disabled:r,children:"取消"}),n.jsx(C,{onClick:s,disabled:a===0||r,children:r?"导入中...":`确认导入 ${a} 项`})]}),children:n.jsxs("div",{className:"space-y-4",children:[n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-neutral-50 px-4 py-3 text-sm text-neutral-600",children:[n.jsxs("div",{children:["导出时间:",new Date(i.exportedAt).toLocaleString()]}),n.jsx("div",{children:"模式:完整备份(含敏感信息)"}),n.jsxs("div",{children:["文件内 Provider 数量:",i.providers.length]})]}),n.jsxs("div",{className:"grid grid-cols-3 gap-3",children:[n.jsxs("div",{className:"rounded-lg border border-green-200 bg-green-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-green-700",children:"新增"}),n.jsx("div",{className:"text-lg font-semibold text-green-900",children:l.summary.create})]}),n.jsxs("div",{className:"rounded-lg border border-amber-200 bg-amber-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-amber-700",children:"覆盖"}),n.jsx("div",{className:"text-lg font-semibold text-amber-900",children:l.summary.overwrite})]}),n.jsxs("div",{className:"rounded-lg border border-neutral-200 bg-neutral-50 px-4 py-3",children:[n.jsx("div",{className:"text-xs text-neutral-500",children:"跳过"}),n.jsx("div",{className:"text-lg font-semibold text-neutral-900",children:l.summary.skip})]})]}),n.jsx("div",{className:"max-h-[420px] overflow-y-auto space-y-3 pr-1",children:o.map(c=>{const d=lt(c.action);return n.jsxs("div",{className:"rounded-lg border border-neutral-200 px-4 py-3",children:[n.jsx("div",{className:"flex items-center justify-between gap-3",children:n.jsxs("div",{className:"min-w-0",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx("h4",{className:"truncate text-sm font-medium text-neutral-900",children:c.incoming.name}),n.jsx("span",{className:`inline-flex rounded px-2 py-0.5 text-xs ${d.className}`,children:d.label})]}),n.jsxs("div",{className:"mt-1 text-xs text-neutral-500",children:[q[c.incoming.agentType]??c.incoming.agentType," · ",n.jsx("code",{className:"rounded bg-neutral-100 px-1 py-0.5",children:c.incoming.id})]})]})}),c.action==="OVERWRITE"&&c.existing&&n.jsxs("p",{className:"mt-2 text-xs text-amber-700",children:["将覆盖当前已有的 Provider:",c.existing.name]}),c.action==="SKIP"&&n.jsx("p",{className:"mt-2 text-xs text-neutral-500",children:"当前同 ID Provider 配置一致,本次不会重复写入。"}),c.action==="CREATE"&&n.jsx("p",{className:"mt-2 text-xs text-green-700",children:"当前不存在同 ID Provider,将直接新增。"})]},c.incoming.id)})})]})})}function wt(){const{data:e,isLoading:t}=pe(),l=he(),i=ge(),s=be(),r=ve(),a=ye(),o=je(),c=j.useRef(null),[d,h]=j.useState(null),[p,u]=j.useState(null),[g,b]=j.useState(!1),[v,N]=j.useState(!1),[y,P]=j.useState(null),A=m=>{l.mutate(m,{onSuccess:()=>h(null)})},ae=(m,x)=>{i.mutate({id:m,data:x},{onSuccess:()=>h(null)})},ie=m=>{if(!(m.deletable??!m.builtIn)){k.error("系统内置 Provider 不可删除");return}u({id:m.id,name:m.name,builtIn:m.builtIn})},oe=()=>{p&&s.mutate(p.id,{onSuccess:()=>{k.success(p.builtIn?"已恢复默认 Provider 配置":"Provider 已删除"),u(null)},onError:m=>{k.error(L(m,"删除 Provider 失败"))}})},Z=()=>{b(!1),N(!1)},J=()=>{P(null)},ce=()=>{r.mutate(void 0,{onSuccess:m=>{st(rt(m.exportedAt),m),k.success("Provider 备份已导出"),Z()},onError:m=>{k.error(L(m,"导出 Provider 备份失败"))}})},de=()=>{c.current&&(c.current.value="",c.current.click())},ue=async m=>{const x=m.target.files?.[0];if(m.target.value="",!x)return;let _;try{_=JSON.parse(await x.text())}catch{k.error("备份文件不是有效的 JSON");return}a.mutate(_,{onSuccess:O=>{P({backup:_,preview:O})},onError:O=>{k.error(L(O,"导入预览失败"))}})},me=()=>{y&&o.mutate(y.backup,{onSuccess:m=>{const x=m.summary.create+m.summary.overwrite;k.success(x===0?"导入完成,当前配置无需变更":`导入完成:新增 ${m.summary.create},覆盖 ${m.summary.overwrite},跳过 ${m.summary.skip}`),J()},onError:m=>{k.error(L(m,"导入 Provider 备份失败"))}})},xe=m=>{const x=m.provider,_=x.env?Object.entries(x.env).map(([O,S])=>({key:O,value:S})):[];h({id:x.id,data:{name:x.name,agentType:x.agentType,config:B(x.agentType,x.config),settings:x.settings??"",env:_,isDefault:x.isDefault}})};if(t)return n.jsx("div",{className:"p-6 text-sm text-neutral-400",children:"加载中..."});const Y=e??[];return n.jsxs("div",{className:"px-10 py-6 mx-auto w-full max-w-4xl",children:[n.jsx("input",{ref:c,type:"file",accept:".json,application/json",className:"hidden",onChange:ue}),n.jsxs("div",{className:"flex items-center justify-between mb-6",children:[n.jsxs("div",{children:[n.jsx("h2",{className:"text-lg font-semibold text-neutral-900",children:"Provider 配置"}),n.jsx("p",{className:"text-sm text-neutral-500 mt-1",children:"管理 AI Agent 的连接配置和运行参数"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsxs(C,{variant:"outline",onClick:de,disabled:a.isPending||o.isPending,children:[n.jsx(Se,{size:14}),"导入备份"]}),n.jsxs(C,{variant:"outline",onClick:()=>b(!0),disabled:r.isPending,children:[n.jsx(Te,{size:14}),"导出备份"]}),n.jsxs(C,{onClick:()=>h({}),children:[n.jsx(re,{size:14,className:"mr-1"}),"新建 Provider"]})]})]}),Y.length===0?n.jsx("div",{className:"text-center py-12 text-sm text-neutral-400",children:"暂无 Provider 配置"}):n.jsx("div",{className:"space-y-3",children:Y.map(m=>{const x=m.provider,_=m.availability,O=B(x.agentType,x.config),S=Object.entries(O).filter(([I])=>I!=="cmd");return n.jsx("div",{className:"border border-neutral-200 rounded-lg p-4 hover:border-neutral-300 transition-colors",children:n.jsxs("div",{className:"flex items-start justify-between",children:[n.jsxs("div",{className:"flex-1",children:[n.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[n.jsx("h3",{className:"text-sm font-medium text-neutral-900",children:x.name}),n.jsx(at,{type:_.type}),x.isDefault&&n.jsx("span",{className:"px-2 py-0.5 text-xs text-blue-700 bg-blue-50 rounded",children:"默认"}),x.builtIn&&n.jsx("span",{className:"px-2 py-0.5 text-xs text-neutral-500 bg-neutral-50 rounded",children:"内置"})]}),n.jsx("p",{className:"text-xs text-neutral-500 mb-2",children:q[x.agentType]??x.agentType}),S.length>0&&n.jsx("div",{className:"text-xs text-neutral-600 mb-1",children:S.map(([I,fe])=>n.jsxs("span",{className:"inline-flex items-center mr-3",children:[n.jsxs("span",{className:"font-medium",children:[et[I]??I,":"]})," ",nt(I,fe)]},I))}),x.settings?.trim()&&n.jsxs("div",{className:"text-xs text-neutral-600",children:[n.jsx("span",{className:"font-medium",children:"CLI 配置:"})," 已配置"]}),Object.keys(x.env).length>0&&!x.settings&&n.jsxs("div",{className:"text-xs text-neutral-600",children:[n.jsx("span",{className:"font-medium",children:"环境变量:"})," ",Object.keys(x.env).join(", ")]})]}),n.jsxs("div",{className:"flex items-center gap-1 ml-4",children:[n.jsx("button",{onClick:()=>xe(m),className:"p-2 text-neutral-400 hover:text-neutral-900 transition-colors",title:"编辑",children:n.jsx(ke,{size:14})}),n.jsx("button",{onClick:()=>ie(x),className:"p-2 text-neutral-400 hover:text-red-600 transition-colors",title:x.deletable===!1?"系统内置 Provider 不可删除":x.builtIn?"删除自定义覆盖并恢复默认":"删除",disabled:x.deletable===!1,children:n.jsx(ee,{size:14})})]})]})},x.id)})}),d&&n.jsx(ot,{isOpen:!0,onClose:()=>h(null),initialData:d.data,onSave:m=>{d.id?ae(d.id,m):A(m)}}),n.jsx(we,{isOpen:p!==null,onClose:()=>{s.isPending||u(null)},onConfirm:oe,title:p?.builtIn?"恢复默认 Provider":"删除 Provider",description:p?.builtIn?`确定删除 "${p?.name}" 的自定义覆盖,并恢复系统默认配置?`:`确定删除 "${p?.name}"?此操作不可撤销。`,confirmText:p?.builtIn?"恢复默认":"删除",cancelText:"取消",variant:"danger",isLoading:s.isPending}),n.jsx(ct,{isOpen:g,onClose:Z,onConfirm:ce,acknowledged:v,onAcknowledgedChange:N,isLoading:r.isPending}),n.jsx(dt,{isOpen:!!y,onClose:J,preview:y?.preview??null,backup:y?.backup??null,onConfirm:me,isLoading:o.isPending})]})}export{wt as ProviderSettingsPage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as C,j as se,i as _e,g as Le}from"./index-B-QFtMnj.js";function ze(e){var o,t,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var n=e.length;for(o=0;o<n;o++)e[o]&&(t=ze(e[o]))&&(r&&(r+=" "),r+=t)}else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}function Se(){for(var e,o,t=0,r="",n=arguments.length;t<n;t++)(e=arguments[t])&&(o=ze(e))&&(r&&(r+=" "),r+=o);return r}const We=(e,o)=>{const t=new Array(e.length+o.length);for(let r=0;r<e.length;r++)t[r]=e[r];for(let r=0;r<o.length;r++)t[e.length+r]=o[r];return t},Be=(e,o)=>({classGroupId:e,validator:o}),Ae=(e=new Map,o=null,t)=>({nextPart:e,validators:o,classGroupId:t}),Z="-",be=[],Fe="arbitrary..",$e=e=>{const o=qe(e),{conflictingClassGroups:t,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:a=>{if(a.startsWith("[")&&a.endsWith("]"))return Ue(a);const d=a.split(Z),i=d[0]===""&&d.length>1?1:0;return Re(d,i,o)},getConflictingClassGroupIds:(a,d)=>{if(d){const i=r[a],m=t[a];return i?m?We(m,i):i:m||be}return t[a]||be}}},Re=(e,o,t)=>{if(e.length-o===0)return t.classGroupId;const n=e[o],s=t.nextPart.get(n);if(s){const m=Re(e,o+1,s);if(m)return m}const a=t.validators;if(a===null)return;const d=o===0?e.join(Z):e.slice(o).join(Z),i=a.length;for(let m=0;m<i;m++){const g=a[m];if(g.validator(d))return g.classGroupId}},Ue=e=>e.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const o=e.slice(1,-1),t=o.indexOf(":"),r=o.slice(0,t);return r?Fe+r:void 0})(),qe=e=>{const{theme:o,classGroups:t}=e;return De(t,o)},De=(e,o)=>{const t=Ae();for(const r in e){const n=e[r];ie(n,t,r,o)}return t},ie=(e,o,t,r)=>{const n=e.length;for(let s=0;s<n;s++){const a=e[s];Je(a,o,t,r)}},Je=(e,o,t,r)=>{if(typeof e=="string"){Ye(e,o,t);return}if(typeof e=="function"){He(e,o,t,r);return}Xe(e,o,t,r)},Ye=(e,o,t)=>{const r=e===""?o:Pe(o,e);r.classGroupId=t},He=(e,o,t,r)=>{if(Ke(e)){ie(e(r),o,t,r);return}o.validators===null&&(o.validators=[]),o.validators.push(Be(t,e))},Xe=(e,o,t,r)=>{const n=Object.entries(e),s=n.length;for(let a=0;a<s;a++){const[d,i]=n[a];ie(i,Pe(o,d),t,r)}},Pe=(e,o)=>{let t=e;const r=o.split(Z),n=r.length;for(let s=0;s<n;s++){const a=r[s];let d=t.nextPart.get(a);d||(d=Ae(),t.nextPart.set(a,d)),t=d}return t},Ke=e=>"isThemeGetter"in e&&e.isThemeGetter===!0,Ze=e=>{if(e<1)return{get:()=>{},set:()=>{}};let o=0,t=Object.create(null),r=Object.create(null);const n=(s,a)=>{t[s]=a,o++,o>e&&(o=0,r=t,t=Object.create(null))};return{get(s){let a=t[s];if(a!==void 0)return a;if((a=r[s])!==void 0)return n(s,a),a},set(s,a){s in t?t[s]=a:n(s,a)}}},ae="!",he=":",Qe=[],ye=(e,o,t,r,n)=>({modifiers:e,hasImportantModifier:o,baseClassName:t,maybePostfixModifierPosition:r,isExternal:n}),et=e=>{const{prefix:o,experimentalParseClassName:t}=e;let r=n=>{const s=[];let a=0,d=0,i=0,m;const g=n.length;for(let w=0;w<g;w++){const v=n[w];if(a===0&&d===0){if(v===he){s.push(n.slice(i,w)),i=w+1;continue}if(v==="/"){m=w;continue}}v==="["?a++:v==="]"?a--:v==="("?d++:v===")"&&d--}const b=s.length===0?n:n.slice(i);let x=b,S=!1;b.endsWith(ae)?(x=b.slice(0,-1),S=!0):b.startsWith(ae)&&(x=b.slice(1),S=!0);const A=m&&m>i?m-i:void 0;return ye(s,S,x,A)};if(o){const n=o+he,s=r;r=a=>a.startsWith(n)?s(a.slice(n.length)):ye(Qe,!1,a,void 0,!0)}if(t){const n=r;r=s=>t({className:s,parseClassName:n})}return r},tt=e=>{const o=new Map;return e.orderSensitiveModifiers.forEach((t,r)=>{o.set(t,1e6+r)}),t=>{const r=[];let n=[];for(let s=0;s<t.length;s++){const a=t[s],d=a[0]==="[",i=o.has(a);d||i?(n.length>0&&(n.sort(),r.push(...n),n=[]),r.push(a)):n.push(a)}return n.length>0&&(n.sort(),r.push(...n)),r}},ot=e=>({cache:Ze(e.cacheSize),parseClassName:et(e),sortModifiers:tt(e),...$e(e)}),rt=/\s+/,nt=(e,o)=>{const{parseClassName:t,getClassGroupId:r,getConflictingClassGroupIds:n,sortModifiers:s}=o,a=[],d=e.trim().split(rt);let i="";for(let m=d.length-1;m>=0;m-=1){const g=d[m],{isExternal:b,modifiers:x,hasImportantModifier:S,baseClassName:A,maybePostfixModifierPosition:w}=t(g);if(b){i=g+(i.length>0?" "+i:i);continue}let v=!!w,I=r(v?A.substring(0,w):A);if(!I){if(!v){i=g+(i.length>0?" "+i:i);continue}if(I=r(A),!I){i=g+(i.length>0?" "+i:i);continue}v=!1}const U=x.length===0?"":x.length===1?x[0]:s(x).join(":"),B=S?U+ae:U,N=B+I;if(a.indexOf(N)>-1)continue;a.push(N);const V=n(I,v);for(let M=0;M<V.length;++M){const F=V[M];a.push(B+F)}i=g+(i.length>0?" "+i:i)}return i},st=(...e)=>{let o=0,t,r,n="";for(;o<e.length;)(t=e[o++])&&(r=Te(t))&&(n&&(n+=" "),n+=r);return n},Te=e=>{if(typeof e=="string")return e;let o,t="";for(let r=0;r<e.length;r++)e[r]&&(o=Te(e[r]))&&(t&&(t+=" "),t+=o);return t},at=(e,...o)=>{let t,r,n,s;const a=i=>{const m=o.reduce((g,b)=>b(g),e());return t=ot(m),r=t.cache.get,n=t.cache.set,s=d,d(i)},d=i=>{const m=r(i);if(m)return m;const g=nt(i,t);return n(i,g),g};return s=a,(...i)=>s(st(...i))},it=[],h=e=>{const o=t=>t[e]||it;return o.isThemeGetter=!0,o},Ee=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Ie=/^\((?:(\w[\w-]*):)?(.+)\)$/i,lt=/^\d+\/\d+$/,ct=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,dt=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,ut=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,mt=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,pt=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,_=e=>lt.test(e),f=e=>!!e&&!Number.isNaN(Number(e)),E=e=>!!e&&Number.isInteger(Number(e)),oe=e=>e.endsWith("%")&&f(e.slice(0,-1)),T=e=>ct.test(e),ft=()=>!0,gt=e=>dt.test(e)&&!ut.test(e),Me=()=>!1,bt=e=>mt.test(e),ht=e=>pt.test(e),yt=e=>!l(e)&&!c(e),xt=e=>L(e,Ne,Me),l=e=>Ee.test(e),O=e=>L(e,Ve,gt),re=e=>L(e,zt,f),xe=e=>L(e,je,Me),vt=e=>L(e,Oe,ht),X=e=>L(e,Ge,bt),c=e=>Ie.test(e),$=e=>W(e,Ve),kt=e=>W(e,St),ve=e=>W(e,je),wt=e=>W(e,Ne),Ct=e=>W(e,Oe),K=e=>W(e,Ge,!0),L=(e,o,t)=>{const r=Ee.exec(e);return r?r[1]?o(r[1]):t(r[2]):!1},W=(e,o,t=!1)=>{const r=Ie.exec(e);return r?r[1]?o(r[1]):t:!1},je=e=>e==="position"||e==="percentage",Oe=e=>e==="image"||e==="url",Ne=e=>e==="length"||e==="size"||e==="bg-size",Ve=e=>e==="length",zt=e=>e==="number",St=e=>e==="family-name",Ge=e=>e==="shadow",At=()=>{const e=h("color"),o=h("font"),t=h("text"),r=h("font-weight"),n=h("tracking"),s=h("leading"),a=h("breakpoint"),d=h("container"),i=h("spacing"),m=h("radius"),g=h("shadow"),b=h("inset-shadow"),x=h("text-shadow"),S=h("drop-shadow"),A=h("blur"),w=h("perspective"),v=h("aspect"),I=h("ease"),U=h("animate"),B=()=>["auto","avoid","all","avoid-page","page","left","right","column"],N=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],V=()=>[...N(),c,l],M=()=>["auto","hidden","clip","visible","scroll"],F=()=>["auto","contain","none"],p=()=>[c,l,i],R=()=>[_,"full","auto",...p()],le=()=>[E,"none","subgrid",c,l],ce=()=>["auto",{span:["full",E,c,l]},E,c,l],q=()=>[E,"auto",c,l],de=()=>["auto","min","max","fr",c,l],Q=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],G=()=>["start","end","center","stretch","center-safe","end-safe"],P=()=>["auto",...p()],j=()=>[_,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...p()],u=()=>[e,c,l],ue=()=>[...N(),ve,xe,{position:[c,l]}],me=()=>["no-repeat",{repeat:["","x","y","space","round"]}],pe=()=>["auto","cover","contain",wt,xt,{size:[c,l]}],ee=()=>[oe,$,O],k=()=>["","none","full",m,c,l],z=()=>["",f,$,O],D=()=>["solid","dashed","dotted","double"],fe=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],y=()=>[f,oe,ve,xe],ge=()=>["","none",A,c,l],J=()=>["none",f,c,l],Y=()=>["none",f,c,l],te=()=>[f,c,l],H=()=>[_,"full",...p()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[T],breakpoint:[T],color:[ft],container:[T],"drop-shadow":[T],ease:["in","out","in-out"],font:[yt],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[T],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[T],shadow:[T],spacing:["px",f],text:[T],"text-shadow":[T],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",_,l,c,v]}],container:["container"],columns:[{columns:[f,l,c,d]}],"break-after":[{"break-after":B()}],"break-before":[{"break-before":B()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:V()}],overflow:[{overflow:M()}],"overflow-x":[{"overflow-x":M()}],"overflow-y":[{"overflow-y":M()}],overscroll:[{overscroll:F()}],"overscroll-x":[{"overscroll-x":F()}],"overscroll-y":[{"overscroll-y":F()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:R()}],"inset-x":[{"inset-x":R()}],"inset-y":[{"inset-y":R()}],start:[{start:R()}],end:[{end:R()}],top:[{top:R()}],right:[{right:R()}],bottom:[{bottom:R()}],left:[{left:R()}],visibility:["visible","invisible","collapse"],z:[{z:[E,"auto",c,l]}],basis:[{basis:[_,"full","auto",d,...p()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[f,_,"auto","initial","none",l]}],grow:[{grow:["",f,c,l]}],shrink:[{shrink:["",f,c,l]}],order:[{order:[E,"first","last","none",c,l]}],"grid-cols":[{"grid-cols":le()}],"col-start-end":[{col:ce()}],"col-start":[{"col-start":q()}],"col-end":[{"col-end":q()}],"grid-rows":[{"grid-rows":le()}],"row-start-end":[{row:ce()}],"row-start":[{"row-start":q()}],"row-end":[{"row-end":q()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":de()}],"auto-rows":[{"auto-rows":de()}],gap:[{gap:p()}],"gap-x":[{"gap-x":p()}],"gap-y":[{"gap-y":p()}],"justify-content":[{justify:[...Q(),"normal"]}],"justify-items":[{"justify-items":[...G(),"normal"]}],"justify-self":[{"justify-self":["auto",...G()]}],"align-content":[{content:["normal",...Q()]}],"align-items":[{items:[...G(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...G(),{baseline:["","last"]}]}],"place-content":[{"place-content":Q()}],"place-items":[{"place-items":[...G(),"baseline"]}],"place-self":[{"place-self":["auto",...G()]}],p:[{p:p()}],px:[{px:p()}],py:[{py:p()}],ps:[{ps:p()}],pe:[{pe:p()}],pt:[{pt:p()}],pr:[{pr:p()}],pb:[{pb:p()}],pl:[{pl:p()}],m:[{m:P()}],mx:[{mx:P()}],my:[{my:P()}],ms:[{ms:P()}],me:[{me:P()}],mt:[{mt:P()}],mr:[{mr:P()}],mb:[{mb:P()}],ml:[{ml:P()}],"space-x":[{"space-x":p()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":p()}],"space-y-reverse":["space-y-reverse"],size:[{size:j()}],w:[{w:[d,"screen",...j()]}],"min-w":[{"min-w":[d,"screen","none",...j()]}],"max-w":[{"max-w":[d,"screen","none","prose",{screen:[a]},...j()]}],h:[{h:["screen","lh",...j()]}],"min-h":[{"min-h":["screen","lh","none",...j()]}],"max-h":[{"max-h":["screen","lh",...j()]}],"font-size":[{text:["base",t,$,O]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,c,re]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",oe,l]}],"font-family":[{font:[kt,l,o]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[n,c,l]}],"line-clamp":[{"line-clamp":[f,"none",c,re]}],leading:[{leading:[s,...p()]}],"list-image":[{"list-image":["none",c,l]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",c,l]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:u()}],"text-color":[{text:u()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...D(),"wavy"]}],"text-decoration-thickness":[{decoration:[f,"from-font","auto",c,O]}],"text-decoration-color":[{decoration:u()}],"underline-offset":[{"underline-offset":[f,"auto",c,l]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:p()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",c,l]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",c,l]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ue()}],"bg-repeat":[{bg:me()}],"bg-size":[{bg:pe()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},E,c,l],radial:["",c,l],conic:[E,c,l]},Ct,vt]}],"bg-color":[{bg:u()}],"gradient-from-pos":[{from:ee()}],"gradient-via-pos":[{via:ee()}],"gradient-to-pos":[{to:ee()}],"gradient-from":[{from:u()}],"gradient-via":[{via:u()}],"gradient-to":[{to:u()}],rounded:[{rounded:k()}],"rounded-s":[{"rounded-s":k()}],"rounded-e":[{"rounded-e":k()}],"rounded-t":[{"rounded-t":k()}],"rounded-r":[{"rounded-r":k()}],"rounded-b":[{"rounded-b":k()}],"rounded-l":[{"rounded-l":k()}],"rounded-ss":[{"rounded-ss":k()}],"rounded-se":[{"rounded-se":k()}],"rounded-ee":[{"rounded-ee":k()}],"rounded-es":[{"rounded-es":k()}],"rounded-tl":[{"rounded-tl":k()}],"rounded-tr":[{"rounded-tr":k()}],"rounded-br":[{"rounded-br":k()}],"rounded-bl":[{"rounded-bl":k()}],"border-w":[{border:z()}],"border-w-x":[{"border-x":z()}],"border-w-y":[{"border-y":z()}],"border-w-s":[{"border-s":z()}],"border-w-e":[{"border-e":z()}],"border-w-t":[{"border-t":z()}],"border-w-r":[{"border-r":z()}],"border-w-b":[{"border-b":z()}],"border-w-l":[{"border-l":z()}],"divide-x":[{"divide-x":z()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":z()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...D(),"hidden","none"]}],"divide-style":[{divide:[...D(),"hidden","none"]}],"border-color":[{border:u()}],"border-color-x":[{"border-x":u()}],"border-color-y":[{"border-y":u()}],"border-color-s":[{"border-s":u()}],"border-color-e":[{"border-e":u()}],"border-color-t":[{"border-t":u()}],"border-color-r":[{"border-r":u()}],"border-color-b":[{"border-b":u()}],"border-color-l":[{"border-l":u()}],"divide-color":[{divide:u()}],"outline-style":[{outline:[...D(),"none","hidden"]}],"outline-offset":[{"outline-offset":[f,c,l]}],"outline-w":[{outline:["",f,$,O]}],"outline-color":[{outline:u()}],shadow:[{shadow:["","none",g,K,X]}],"shadow-color":[{shadow:u()}],"inset-shadow":[{"inset-shadow":["none",b,K,X]}],"inset-shadow-color":[{"inset-shadow":u()}],"ring-w":[{ring:z()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:u()}],"ring-offset-w":[{"ring-offset":[f,O]}],"ring-offset-color":[{"ring-offset":u()}],"inset-ring-w":[{"inset-ring":z()}],"inset-ring-color":[{"inset-ring":u()}],"text-shadow":[{"text-shadow":["none",x,K,X]}],"text-shadow-color":[{"text-shadow":u()}],opacity:[{opacity:[f,c,l]}],"mix-blend":[{"mix-blend":[...fe(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":fe()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[f]}],"mask-image-linear-from-pos":[{"mask-linear-from":y()}],"mask-image-linear-to-pos":[{"mask-linear-to":y()}],"mask-image-linear-from-color":[{"mask-linear-from":u()}],"mask-image-linear-to-color":[{"mask-linear-to":u()}],"mask-image-t-from-pos":[{"mask-t-from":y()}],"mask-image-t-to-pos":[{"mask-t-to":y()}],"mask-image-t-from-color":[{"mask-t-from":u()}],"mask-image-t-to-color":[{"mask-t-to":u()}],"mask-image-r-from-pos":[{"mask-r-from":y()}],"mask-image-r-to-pos":[{"mask-r-to":y()}],"mask-image-r-from-color":[{"mask-r-from":u()}],"mask-image-r-to-color":[{"mask-r-to":u()}],"mask-image-b-from-pos":[{"mask-b-from":y()}],"mask-image-b-to-pos":[{"mask-b-to":y()}],"mask-image-b-from-color":[{"mask-b-from":u()}],"mask-image-b-to-color":[{"mask-b-to":u()}],"mask-image-l-from-pos":[{"mask-l-from":y()}],"mask-image-l-to-pos":[{"mask-l-to":y()}],"mask-image-l-from-color":[{"mask-l-from":u()}],"mask-image-l-to-color":[{"mask-l-to":u()}],"mask-image-x-from-pos":[{"mask-x-from":y()}],"mask-image-x-to-pos":[{"mask-x-to":y()}],"mask-image-x-from-color":[{"mask-x-from":u()}],"mask-image-x-to-color":[{"mask-x-to":u()}],"mask-image-y-from-pos":[{"mask-y-from":y()}],"mask-image-y-to-pos":[{"mask-y-to":y()}],"mask-image-y-from-color":[{"mask-y-from":u()}],"mask-image-y-to-color":[{"mask-y-to":u()}],"mask-image-radial":[{"mask-radial":[c,l]}],"mask-image-radial-from-pos":[{"mask-radial-from":y()}],"mask-image-radial-to-pos":[{"mask-radial-to":y()}],"mask-image-radial-from-color":[{"mask-radial-from":u()}],"mask-image-radial-to-color":[{"mask-radial-to":u()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":N()}],"mask-image-conic-pos":[{"mask-conic":[f]}],"mask-image-conic-from-pos":[{"mask-conic-from":y()}],"mask-image-conic-to-pos":[{"mask-conic-to":y()}],"mask-image-conic-from-color":[{"mask-conic-from":u()}],"mask-image-conic-to-color":[{"mask-conic-to":u()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ue()}],"mask-repeat":[{mask:me()}],"mask-size":[{mask:pe()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",c,l]}],filter:[{filter:["","none",c,l]}],blur:[{blur:ge()}],brightness:[{brightness:[f,c,l]}],contrast:[{contrast:[f,c,l]}],"drop-shadow":[{"drop-shadow":["","none",S,K,X]}],"drop-shadow-color":[{"drop-shadow":u()}],grayscale:[{grayscale:["",f,c,l]}],"hue-rotate":[{"hue-rotate":[f,c,l]}],invert:[{invert:["",f,c,l]}],saturate:[{saturate:[f,c,l]}],sepia:[{sepia:["",f,c,l]}],"backdrop-filter":[{"backdrop-filter":["","none",c,l]}],"backdrop-blur":[{"backdrop-blur":ge()}],"backdrop-brightness":[{"backdrop-brightness":[f,c,l]}],"backdrop-contrast":[{"backdrop-contrast":[f,c,l]}],"backdrop-grayscale":[{"backdrop-grayscale":["",f,c,l]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[f,c,l]}],"backdrop-invert":[{"backdrop-invert":["",f,c,l]}],"backdrop-opacity":[{"backdrop-opacity":[f,c,l]}],"backdrop-saturate":[{"backdrop-saturate":[f,c,l]}],"backdrop-sepia":[{"backdrop-sepia":["",f,c,l]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":p()}],"border-spacing-x":[{"border-spacing-x":p()}],"border-spacing-y":[{"border-spacing-y":p()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",c,l]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[f,"initial",c,l]}],ease:[{ease:["linear","initial",I,c,l]}],delay:[{delay:[f,c,l]}],animate:[{animate:["none",U,c,l]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[w,c,l]}],"perspective-origin":[{"perspective-origin":V()}],rotate:[{rotate:J()}],"rotate-x":[{"rotate-x":J()}],"rotate-y":[{"rotate-y":J()}],"rotate-z":[{"rotate-z":J()}],scale:[{scale:Y()}],"scale-x":[{"scale-x":Y()}],"scale-y":[{"scale-y":Y()}],"scale-z":[{"scale-z":Y()}],"scale-3d":["scale-3d"],skew:[{skew:te()}],"skew-x":[{"skew-x":te()}],"skew-y":[{"skew-y":te()}],transform:[{transform:[c,l,"","none","gpu","cpu"]}],"transform-origin":[{origin:V()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:H()}],"translate-x":[{"translate-x":H()}],"translate-y":[{"translate-y":H()}],"translate-z":[{"translate-z":H()}],"translate-none":["translate-none"],accent:[{accent:u()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:u()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",c,l]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":p()}],"scroll-mx":[{"scroll-mx":p()}],"scroll-my":[{"scroll-my":p()}],"scroll-ms":[{"scroll-ms":p()}],"scroll-me":[{"scroll-me":p()}],"scroll-mt":[{"scroll-mt":p()}],"scroll-mr":[{"scroll-mr":p()}],"scroll-mb":[{"scroll-mb":p()}],"scroll-ml":[{"scroll-ml":p()}],"scroll-p":[{"scroll-p":p()}],"scroll-px":[{"scroll-px":p()}],"scroll-py":[{"scroll-py":p()}],"scroll-ps":[{"scroll-ps":p()}],"scroll-pe":[{"scroll-pe":p()}],"scroll-pt":[{"scroll-pt":p()}],"scroll-pr":[{"scroll-pr":p()}],"scroll-pb":[{"scroll-pb":p()}],"scroll-pl":[{"scroll-pl":p()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",c,l]}],fill:[{fill:["none",...u()]}],"stroke-w":[{stroke:[f,$,O,re]}],stroke:[{stroke:["none",...u()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},Rt=at(At),ke=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,we=Se,Pt=(e,o)=>t=>{var r;if(o?.variants==null)return we(e,t?.class,t?.className);const{variants:n,defaultVariants:s}=o,a=Object.keys(n).map(m=>{const g=t?.[m],b=s?.[m];if(g===null)return null;const x=ke(g)||ke(b);return n[m][x]}),d=t&&Object.entries(t).reduce((m,g)=>{let[b,x]=g;return x===void 0||(m[b]=x),m},{}),i=o==null||(r=o.compoundVariants)===null||r===void 0?void 0:r.reduce((m,g)=>{let{class:b,className:x,...S}=g;return Object.entries(S).every(A=>{let[w,v]=A;return Array.isArray(v)?v.includes({...s,...d}[w]):{...s,...d}[w]===v})?[...m,b,x]:m},[]);return we(e,a,i,t?.class,t?.className)};function Ce(e,o){if(typeof e=="function")return e(o);e!=null&&(e.current=o)}function Tt(...e){return o=>{let t=!1;const r=e.map(n=>{const s=Ce(n,o);return!t&&typeof s=="function"&&(t=!0),s});if(t)return()=>{for(let n=0;n<r.length;n++){const s=r[n];typeof s=="function"?s():Ce(e[n],null)}}}}function Et(e){const o=Mt(e),t=C.forwardRef((r,n)=>{const{children:s,...a}=r,d=C.Children.toArray(s),i=d.find(Ot);if(i){const m=i.props.children,g=d.map(b=>b===i?C.Children.count(m)>1?C.Children.only(null):C.isValidElement(m)?m.props.children:null:b);return se.jsx(o,{...a,ref:n,children:C.isValidElement(m)?C.cloneElement(m,void 0,g):null})}return se.jsx(o,{...a,ref:n,children:s})});return t.displayName=`${e}.Slot`,t}var It=Et("Slot");function Mt(e){const o=C.forwardRef((t,r)=>{const{children:n,...s}=t;if(C.isValidElement(n)){const a=Vt(n),d=Nt(s,n.props);return n.type!==C.Fragment&&(d.ref=r?Tt(r,a):a),C.cloneElement(n,d)}return C.Children.count(n)>1?C.Children.only(null):null});return o.displayName=`${e}.SlotClone`,o}var jt=Symbol("radix.slottable");function Ot(e){return C.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===jt}function Nt(e,o){const t={...o};for(const r in o){const n=e[r],s=o[r];/^on[A-Z]/.test(r)?n&&s?t[r]=(...d)=>{const i=s(...d);return n(...d),i}:n&&(t[r]=n):r==="style"?t[r]={...n,...s}:r==="className"&&(t[r]=[n,s].filter(Boolean).join(" "))}return{...e,...t}}function Vt(e){let o=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,t=o&&"isReactWarning"in o&&o.isReactWarning;return t?e.ref:(o=Object.getOwnPropertyDescriptor(e,"ref")?.get,t=o&&"isReactWarning"in o&&o.isReactWarning,t?e.props.ref:e.props.ref||e.ref)}function Gt(...e){return Rt(Se(e))}function ne(e){let o=0;for(const t of e){const r=t.codePointAt(0);r>=19968&&r<=40959||r>=13312&&r<=19903||r>=65280&&r<=65376||r>=12288&&r<=12351?o+=2:o+=1}return o}function $t(e,o){if(ne(e)<=o)return e;const t=o-1,r=Math.ceil(t/2),n=Math.floor(t/2);let s="",a=0;for(const g of e){const b=ne(g);if(a+b>r)break;s+=g,a+=b}const d=[...e];let i="",m=0;for(let g=d.length-1;g>=0;g--){const b=ne(d[g]);if(m+b>n)break;i=d[g]+i,m+=b}return s+"…"+i}const _t=Pt("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function Ut({className:e,variant:o="default",size:t="default",asChild:r=!1,...n}){const s=r?It:"button";return se.jsx(s,{"data-slot":"button","data-variant":o,"data-size":t,className:Gt(_t({variant:o,size:t,className:e})),...n})}const Lt="/api";class Wt{baseUrl;constructor(o){this.baseUrl=o}async request(o,t={}){const{params:r,...n}=t;let s=`${this.baseUrl}${o}`;if(r){const i=new URLSearchParams(r);s+=`?${i.toString()}`}const a={...n.headers};if(n.body!==void 0&&(a["Content-Type"]="application/json"),_e()){const i=Le();i&&(a.Authorization=`Bearer ${i}`)}const d=await fetch(s,{...n,headers:a});if(!d.ok){const i=await d.json().catch(()=>({}));throw new Bt(d.status,i.message||i.error||"Request failed")}return d.json()}get(o,t){return this.request(o,{...t,method:"GET"})}post(o,t,r){return this.request(o,{...r,method:"POST",body:t?JSON.stringify(t):void 0})}put(o,t,r){return this.request(o,{...r,method:"PUT",body:t?JSON.stringify(t):void 0})}patch(o,t,r){return this.request(o,{...r,method:"PATCH",body:t?JSON.stringify(t):void 0})}delete(o,t){return this.request(o,{...t,method:"DELETE"})}}class Bt extends Error{status;constructor(o,t){super(t),this.name="ApiError",this.status=o}}const qt=new Wt(Lt);export{Ut as B,qt as a,Rt as b,Gt as c,Se as d,$t as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as e}from"./index-B-QFtMnj.js";const c=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],y=e("circle-alert",c);export{y as C};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c}from"./index-B-QFtMnj.js";const e=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]],r=c("circle-check",e);export{r as C};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{L as h,Z as x,I as p,g as u}from"./mermaid-NOHMQCX5-BvevrkjG.js";import{r as i,j as a}from"./index-B-QFtMnj.js";import"./log-adapter-50wgehrc.js";import"./chevron-down-DrP9EgY9.js";import"./api-client-CgvcCTaj.js";var v=u("block","before:content-[counter(line)]","before:inline-block","before:[counter-increment:line]","before:w-6","before:mr-4","before:text-[13px]","before:text-right","before:text-muted-foreground/50","before:font-mono","before:select-none"),k=r=>{let e={};for(let l of r.split(";")){let n=l.indexOf(":");if(n>0){let c=l.slice(0,n).trim(),o=l.slice(n+1).trim();c&&o&&(e[c]=o)}}return e},j=i.memo(({children:r,result:e,language:l,className:n,...c})=>{let o=i.useMemo(()=>{let s={};return e.bg&&(s["--sdm-bg"]=e.bg),e.fg&&(s["--sdm-fg"]=e.fg),e.rootStyle&&Object.assign(s,k(e.rootStyle)),s},[e.bg,e.fg,e.rootStyle]);return a.jsx("pre",{className:u(n,"p-4 text-sm","bg-[var(--sdm-bg,transparent)]","dark:bg-[var(--shiki-dark-bg,var(--sdm-bg,transparent))]"),"data-language":l,"data-streamdown":"code-block-body",style:o,...c,children:a.jsx("code",{className:"[counter-increment:line_0] [counter-reset:line]",children:e.tokens.map((s,d)=>a.jsx("span",{className:v,children:s.map((t,b)=>a.jsx("span",{className:u("text-[var(--sdm-c,inherit)]","dark:text-[var(--shiki-dark,var(--sdm-c,inherit))]",t.bgColor&&"bg-[var(--sdm-tbg)]",t.bgColor&&"dark:bg-[var(--shiki-dark-bg,var(--sdm-tbg))]"),style:{...t.color?{"--sdm-c":t.color}:{},...t.bgColor?{"--sdm-tbg":t.bgColor}:{},...t.htmlStyle},...t.htmlAttrs,children:t.content},b))},d))})})},(r,e)=>r.result===e.result&&r.language===e.language&&r.className===e.className),y=({className:r,language:e,style:l,...n})=>a.jsx("div",{className:u("my-4 w-full overflow-hidden rounded-xl border border-border",r),"data-language":e,"data-streamdown":"code-block",style:{contentVisibility:"auto",containIntrinsicSize:"auto 200px",...l},...n}),N=({language:r,children:e})=>a.jsxs("div",{className:"flex items-center justify-between bg-muted/80 p-3 text-muted-foreground text-xs","data-language":r,"data-streamdown":"code-block-header",children:[a.jsx("span",{className:"ml-1 font-mono lowercase",children:r}),a.jsx("div",{className:"flex items-center gap-2",children:e})]}),w=/\n+$/,B=({code:r,language:e,className:l,children:n,...c})=>{let{shikiTheme:o}=i.useContext(h),s=x(),d=i.useMemo(()=>r.replace(w,""),[r]),t=i.useMemo(()=>({bg:"transparent",fg:"inherit",tokens:d.split(`
|
|
2
|
-
`).map(g=>[{content:g,color:"inherit",bgColor:"transparent",htmlStyle:{},offset:0}])}),[d]),[b,m]=i.useState(t);return i.useEffect(()=>{if(!s){m(t);return}let g=s.highlight({code:d,language:e,themes:o},f=>{m(f)});if(g){m(g);return}m(t)},[d,e,o,s,t]),a.jsx(p.Provider,{value:{code:r},children:a.jsxs(y,{language:e,children:[a.jsx(N,{language:e,children:n}),a.jsx(j,{className:l,language:e,result:b,...c})]})})};export{B as CodeBlock};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as I,a as i,q as s}from"./query-keys-BGgDKleg.js";import{c as y,u as a,j as t}from"./index-B-QFtMnj.js";import{a as n,c as A}from"./api-client-CgvcCTaj.js";import{M as h}from"./modal-CCInxYr_.js";const O=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],M=y("triangle-alert",O);var d;(function(e){e.TODO="TODO",e.IN_PROGRESS="IN_PROGRESS",e.IN_REVIEW="IN_REVIEW",e.DONE="DONE",e.CANCELLED="CANCELLED"})(d||(d={}));var l;(function(e){e.ACTIVE="ACTIVE",e.MERGED="MERGED",e.ABANDONED="ABANDONED"})(l||(l={}));var E;(function(e){e.CLAUDE_CODE="CLAUDE_CODE",e.GEMINI_CLI="GEMINI_CLI",e.CURSOR_AGENT="CURSOR_AGENT",e.CODEX="CODEX"})(E||(E={}));var p;(function(e){e.PENDING="PENDING",e.RUNNING="RUNNING",e.COMPLETED="COMPLETED",e.FAILED="FAILED",e.CANCELLED="CANCELLED"})(p||(p={}));var m;(function(e){e.CHAT="CHAT",e.COMMIT_MSG="COMMIT_MSG"})(m||(m={}));var v;(function(e){e.REBASE="REBASE",e.MERGE="MERGE"})(v||(v={}));function P(){return I({queryKey:s.providers.all,queryFn:()=>n.get("/providers")})}function _(){const e=a();return i({mutationFn:r=>n.post("/providers",r),onSuccess:()=>{e.invalidateQueries({queryKey:s.providers.all})}})}function g(){const e=a();return i({mutationFn:({id:r,data:o})=>n.put(`/providers/${r}`,o),onSuccess:()=>{e.invalidateQueries({queryKey:s.providers.all})}})}function q(){const e=a();return i({mutationFn:r=>n.delete(`/providers/${r}`),onSuccess:()=>{e.invalidateQueries({queryKey:s.providers.all})}})}function j(){return i({mutationFn:()=>n.get("/providers/backup")})}function F(){return i({mutationFn:e=>n.post("/providers/import/preview",e)})}function T(){const e=a();return i({mutationFn:r=>n.post("/providers/import",r),onSuccess:()=>{e.invalidateQueries({queryKey:s.providers.all})}})}const w=({isOpen:e,onClose:r,onConfirm:o,title:N,description:C,confirmText:D="确认",cancelText:f="取消",variant:x="default",isLoading:u=!1})=>{const c=x==="danger";return t.jsx(h,{isOpen:e,onClose:r,title:N,className:"max-w-sm",action:t.jsxs(t.Fragment,{children:[t.jsx("button",{onClick:r,disabled:u,className:"px-4 py-2 text-sm font-medium text-neutral-600 hover:text-neutral-900 transition-colors disabled:opacity-50",children:f}),t.jsx("button",{onClick:o,disabled:u,className:A("px-4 py-2 text-sm font-medium rounded-lg transition-colors disabled:opacity-50",c?"bg-red-500 text-white hover:bg-red-600":"bg-neutral-900 text-white hover:bg-black"),children:u?"处理中...":D})]}),children:t.jsxs("div",{className:"flex gap-4",children:[c&&t.jsx("div",{className:"shrink-0 w-10 h-10 rounded-full bg-red-50 flex items-center justify-center",children:t.jsx(M,{size:20,className:"text-red-500"})}),t.jsx("div",{className:"text-sm text-neutral-600 leading-relaxed pt-1",children:C})]})})};export{E as A,w as C,p as S,M as T,_ as a,g as b,q as c,j as d,F as e,T as f,v as g,d as h,P as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as a,j as e,F as k}from"./index-B-QFtMnj.js";import{a as C,c}from"./api-client-CgvcCTaj.js";import{C as w}from"./mermaid-NOHMQCX5-BvevrkjG.js";import{L as E}from"./loader-circle-B8Hk0gt3.js";import{C as z}from"./circle-alert-wdB5gDUz.js";import{F as S}from"./use-projects-OFs5uSW6.js";import"./log-adapter-50wgehrc.js";import"./chevron-down-DrP9EgY9.js";import"./query-keys-BGgDKleg.js";function T({value:l,onChange:m,placeholder:G}){const[x,D]=a.useState(""),[p,R]=a.useState([]),[h,V]=a.useState(""),[F,f]=a.useState(!1),[j,g]=a.useState(null),[d,N]=a.useState(l),[b,n]=a.useState(null),[L,v]=a.useState(!1),y=a.useRef(!1);a.useEffect(()=>{N(l)},[l]);const r=a.useCallback(async t=>{f(!0),g(null);try{const s={};t&&(s.path=t);const u=await C.get("/filesystem/browse",{params:s});D(u.current),V(u.parent),R(u.dirs)}catch(s){g(s instanceof Error?s.message:"Failed to browse directory")}finally{f(!1)}},[]);a.useEffect(()=>{y.current||(y.current=!0,r())},[r]);const i=a.useCallback(async t=>{v(!0),n(null);try{const s=await C.get("/filesystem/validate",{params:{path:t}});s.valid?(m(t),n(null)):n(s.error??"Not a Git repository")}catch(s){n(s instanceof Error?s.message:"Validation failed")}finally{v(!1)}},[m]),P=a.useCallback(t=>{t.isGitRepo?(i(t.path),r(t.path)):(r(t.path),n(null))},[i,r]),o=x?x.split("/").filter(Boolean):[],I=a.useCallback(t=>{const s="/"+o.slice(0,t+1).join("/");r(s),n(null)},[o,r]),B=a.useCallback(t=>{if(t.key==="Enter"&&!t.nativeEvent.isComposing&&t.nativeEvent.keyCode!==229){t.preventDefault();const s=d.trim();s&&(r(s),i(s))}},[d,r,i]);return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:"text",value:d,onChange:t=>N(t.target.value),onKeyDown:B,placeholder:G??"e.g., /Users/me/projects/my-repo",className:c("w-full px-3 py-2 border rounded-lg text-sm font-mono focus:outline-none transition-colors pr-8",l?"border-emerald-300 bg-emerald-50/50 focus:border-emerald-400":"border-neutral-200 focus:border-neutral-400")}),l&&e.jsx(k,{size:14,className:"absolute right-3 top-1/2 -translate-y-1/2 text-emerald-500"})]}),e.jsx("p",{className:"text-xs text-neutral-400",children:"Browse and select a Git repository, or type a path and press Enter"}),e.jsxs("div",{className:"flex items-center gap-0.5 text-xs text-neutral-500 overflow-x-auto pb-1 scrollbar-none",children:[e.jsx("button",{onClick:()=>r("/"),className:"hover:text-neutral-900 transition-colors flex-shrink-0 px-1 py-0.5 rounded hover:bg-neutral-100",children:"/"}),o.map((t,s)=>e.jsxs("span",{className:"flex items-center gap-0.5 flex-shrink-0",children:[e.jsx(w,{size:10,className:"text-neutral-300"}),e.jsx("button",{onClick:()=>I(s),className:c("px-1 py-0.5 rounded transition-colors truncate max-w-[120px]",s===o.length-1?"font-medium text-neutral-900":"hover:text-neutral-900 hover:bg-neutral-100"),children:t})]},s))]}),e.jsx("div",{className:"border border-neutral-200 rounded-lg overflow-hidden",children:e.jsx("div",{className:"max-h-[200px] overflow-y-auto",children:F?e.jsxs("div",{className:"flex items-center justify-center py-8 text-neutral-400",children:[e.jsx(E,{size:16,className:"animate-spin mr-2"}),e.jsx("span",{className:"text-xs",children:"Loading..."})]}):j?e.jsxs("div",{className:"flex items-center justify-center py-8 text-red-500 gap-2",children:[e.jsx(z,{size:14}),e.jsx("span",{className:"text-xs",children:j})]}):p.length===0?e.jsx("div",{className:"flex items-center justify-center py-8 text-neutral-400",children:e.jsx("span",{className:"text-xs",children:"No subdirectories"})}):e.jsxs("ul",{className:"divide-y divide-neutral-100",children:[x!==h&&e.jsx("li",{children:e.jsxs("button",{onClick:()=>r(h),className:"w-full flex items-center gap-2.5 px-3 py-2 text-left hover:bg-neutral-50 transition-colors group",children:[e.jsx(S,{size:14,className:"text-neutral-400 flex-shrink-0"}),e.jsx("span",{className:"text-xs text-neutral-500 group-hover:text-neutral-700",children:".."})]})}),p.map(t=>e.jsx("li",{children:e.jsxs("button",{onClick:()=>P(t),className:c("w-full flex items-center gap-2.5 px-3 py-2 text-left transition-colors group",t.path===l?"bg-emerald-50":"hover:bg-neutral-50"),children:[t.isGitRepo?e.jsx(k,{size:14,className:"text-emerald-500 flex-shrink-0"}):e.jsx(S,{size:14,className:"text-neutral-400 flex-shrink-0"}),e.jsx("span",{className:c("text-xs truncate",t.path===l?"font-medium text-emerald-700":"text-neutral-700 group-hover:text-neutral-900"),children:t.name}),t.isGitRepo&&e.jsx("span",{className:"ml-auto flex-shrink-0 text-[10px] font-medium bg-emerald-100 text-emerald-600 px-1.5 py-0.5 rounded",children:"Git"}),!t.isGitRepo&&e.jsx(w,{size:12,className:"ml-auto text-neutral-300 group-hover:text-neutral-400 flex-shrink-0"})]})},t.path))]})})}),L&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-neutral-400",children:[e.jsx(E,{size:12,className:"animate-spin"}),e.jsx("span",{children:"Validating..."})]}),b&&e.jsxs("div",{className:"flex items-center gap-2 text-xs text-red-500",children:[e.jsx(z,{size:12}),e.jsx("span",{children:b})]})]})}export{T as FolderPicker};
|