@kafca/agentdock 0.1.41 → 0.1.43
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/README.md +10 -0
- package/dist/renderer/assets/{Badge-BX3RC8l6.js → Badge-CbG6yRSm.js} +1 -1
- package/dist/renderer/assets/{Chat-DJwIciel.js → Chat-BvNNWGGX.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-DfGbRR0S.js → ChatMarkdown-Ct-PvJB8.js} +1 -1
- package/dist/renderer/assets/{Config-2x2RDL3j.js → Config-lQX2qVVV.js} +2 -2
- package/dist/renderer/assets/CronList-Dj_3muVG.js +1 -0
- package/dist/renderer/assets/{Dashboard-2Wcx_bvJ.js → Dashboard-eh_RhGYb.js} +2 -2
- package/dist/renderer/assets/{EmptyState-DoCpF2tn.js → EmptyState-Bn2Qh14U.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-CBRu2bXX.js → KnowledgeDetail-Bsz6Ou41.js} +2 -2
- package/dist/renderer/assets/{KnowledgeHome-CItdlDVR.js → KnowledgeHome-Cgj4XFXn.js} +2 -2
- package/dist/renderer/assets/{Logs-Cd_7ZOXc.js → Logs-Dp-NF6GN.js} +1 -1
- package/dist/renderer/assets/{Modal-B4eOiBsB.js → Modal-B6YPPBN6.js} +1 -1
- package/dist/renderer/assets/MonitorList-xEZWg460.js +1 -0
- package/dist/renderer/assets/{Page-C5VH4D9U.js → Page-Bn7RjGOS.js} +1 -1
- package/dist/renderer/assets/{ProjectDetail-D_DA--IP.js → ProjectDetail-Cv_jIE61.js} +2 -2
- package/dist/renderer/assets/{ProjectList-CtCXJ50u.js → ProjectList-BDk5_gqY.js} +1 -1
- package/dist/renderer/assets/{Select-B6E68LcN.js → Select-xshfMIEQ.js} +1 -1
- package/dist/renderer/assets/SessionChat-BkHy90z3.js +1 -0
- package/dist/renderer/assets/{SessionList-Do-5-Xx6.js → SessionList-BZyXT92L.js} +1 -1
- package/dist/renderer/assets/{ThreadChat-B1tEtE3V.js → ThreadChat-DUOIyXrS.js} +7 -7
- package/dist/renderer/assets/{Workspace-BlhS2RFw.js → Workspace-Dl80fNEC.js} +1 -1
- package/dist/renderer/assets/{arrow-left-DF1_F9Pk.js → arrow-left-C54ZI-AS.js} +1 -1
- package/dist/renderer/assets/{book-open-DxRTGpWO.js → book-open-Dl7GO0zn.js} +1 -1
- package/dist/renderer/assets/{check-BAqPPYkf.js → check-CiqgtrOL.js} +1 -1
- package/dist/renderer/assets/{chevron-down-DIZZgSb3.js → chevron-down-DTL2OuVh.js} +1 -1
- package/dist/renderer/assets/{circle-B5raL_XK.js → circle-DaVKfa3P.js} +1 -1
- package/dist/renderer/assets/desktop-C6q6wBae.js +5 -0
- package/dist/renderer/assets/desktop-jaAiayNB.js +1 -0
- package/dist/renderer/assets/en-D2SkCrhG.js +1 -0
- package/dist/renderer/assets/{funnel-BPjLpVSB.js → funnel-CrmnLMJI.js} +1 -1
- package/dist/renderer/assets/{heart-D2M1xN1N.js → heart-BMfQI7y_.js} +1 -1
- package/dist/renderer/assets/{index-Cx71F_Lz.js → index-HPNb1zfx.js} +39 -34
- package/dist/renderer/assets/{index-BijJAYmo.js → index-nreiKY1f.js} +3 -3
- package/dist/renderer/assets/{pencil-DlDr8Mmp.js → pencil-wTQ4l465.js} +1 -1
- package/dist/renderer/assets/{play-BOEG_mY8.js → play-BK--MXmw.js} +1 -1
- package/dist/renderer/assets/{plug-BI27elC-.js → plug-BIx9fjip.js} +1 -1
- package/dist/renderer/assets/{plus-BhURuFIQ.js → plus-Dn7JFWQ8.js} +1 -1
- package/dist/renderer/assets/projects-brJZgwEJ.js +1 -0
- package/dist/renderer/assets/{save-RwkHNm9e.js → save-CC3zOSWb.js} +1 -1
- package/dist/renderer/assets/{search-DMNtm2WP.js → search-CDTy9Czu.js} +1 -1
- package/dist/renderer/assets/{server-CNaxKyAq.js → server-DtQk3t2a.js} +1 -1
- package/dist/renderer/assets/{session-utils-vsALZkZN.js → session-utils-4ep5D66T.js} +1 -1
- package/dist/renderer/assets/{sessions-BY-R1IL_.js → sessions-Dor1LteH.js} +1 -1
- package/dist/renderer/assets/{shield-check-BF-4oJbj.js → shield-check-Cz2LpU6r.js} +1 -1
- package/dist/renderer/assets/{trash-2-DduflM4q.js → trash-2-C2EmWFZV.js} +1 -1
- package/dist/renderer/assets/{user-DBcvnuW4.js → user-I8B-cs5A.js} +1 -1
- package/dist/renderer/assets/{wifi-off-X1nXESYu.js → wifi-off-CPevTQJn.js} +1 -1
- package/dist/renderer/assets/zh-DIcdHycM.js +1 -0
- package/dist/renderer/index.html +1 -1
- package/dist-electron/packages/contracts/src/local-core.js +28 -0
- package/dist-electron/packages/core-sdk/src/index.js +32 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +76 -39
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +13 -0
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-store.js +4 -1357
- package/dist-electron/services/local-ai-core/src/acp/local-core-slash-commands.js +28 -0
- package/dist-electron/services/local-ai-core/src/acp/store/agent-task-store.js +166 -0
- package/dist-electron/services/local-ai-core/src/acp/store/automation-monitor-store.js +231 -0
- package/dist-electron/services/local-ai-core/src/acp/store/local-core-acp-store.js +263 -0
- package/dist-electron/services/local-ai-core/src/acp/store/platform-store.js +186 -0
- package/dist-electron/services/local-ai-core/src/acp/store/scheduler-store.js +201 -0
- package/dist-electron/services/local-ai-core/src/acp/store/schema.js +275 -0
- package/dist-electron/services/local-ai-core/src/acp/store/security-store.js +266 -0
- package/dist-electron/services/local-ai-core/src/acp/store/thread-store.js +232 -0
- package/dist-electron/services/local-ai-core/src/acp/store/utils.js +47 -0
- package/dist-electron/services/local-ai-core/src/acp/store/workspace-registry-store.js +109 -0
- package/dist-electron/services/local-ai-core/src/automation/automation-conversation-executor.js +136 -0
- package/dist-electron/services/local-ai-core/src/automation/automation-monitor-repository.js +56 -0
- package/dist-electron/services/local-ai-core/src/automation/automation-monitor-service.js +359 -0
- package/dist-electron/services/local-ai-core/src/automation/condition-evaluator.js +77 -0
- package/dist-electron/services/local-ai-core/src/automation/mock-stock-provider.js +40 -0
- package/dist-electron/services/local-ai-core/src/automation/monitor-id.js +10 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/cards.js +55 -0
- package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +101 -29
- package/dist-electron/services/local-ai-core/src/channel/shared/session-command-runtime.js +53 -0
- package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +51 -33
- package/dist-electron/services/local-ai-core/src/cli/lac.js +196 -0
- package/dist-electron/services/local-ai-core/src/cli/monitor-cli-parsers.js +37 -0
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +43 -0
- package/dist-electron/services/local-ai-core/src/kernel/capability-registry.js +12 -0
- package/dist-electron/services/local-ai-core/src/plugins/builtin/monitor-stock-plugin.js +30 -0
- package/dist-electron/services/local-ai-core/src/router/workspace-router.js +40 -4
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +41 -0
- package/dist-electron/services/local-ai-core/src/runtime/server-routes.js +31 -0
- package/dist-electron/services/local-ai-core/src/runtime/server.js +36 -0
- package/dist-electron/services/local-ai-core/src/scheduler/scheduled-bridge-session.js +25 -11
- package/dist-electron/services/local-ai-core/src/thread/session-command-service.js +275 -0
- package/dist-electron/services/local-ai-core/src/thread/slash-command-registry.js +27 -0
- package/dist-electron/services/local-ai-core/src/thread/thread-command-service.js +134 -0
- package/dist-electron/shared/desktop.js +21 -1
- package/dist-electron/tests/contracts/local-core-contracts.test.js +9 -0
- package/dist-electron/tests/electron/automation-monitor.test.js +38 -0
- package/dist-electron/tests/electron/lac-cli.test.js +146 -0
- package/dist-electron/tests/electron/plugin-kernel.test.js +26 -0
- package/dist-electron/tests/integration/local-core-refactor.test.js +359 -0
- package/package.json +1 -1
- package/dist/renderer/assets/CronList-C6nPAmEo.js +0 -1
- package/dist/renderer/assets/SessionChat-D1HtMdQS.js +0 -1
- package/dist/renderer/assets/desktop-CFcnzwcY.js +0 -1
- package/dist/renderer/assets/desktop-O8_6ZCVZ.js +0 -4
- package/dist/renderer/assets/en-CKhCF6St.js +0 -1
- package/dist/renderer/assets/projects-DpR972HM.js +0 -1
- package/dist/renderer/assets/zh-Dz5FLTBV.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{G as Te,aK as Ae,r as c,j as x,aL as pe,aM as Ne,aA as te}from"./index-Cx71F_Lz.js";var ye=Ae();const De=Te(ye);function X(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Jt(e,t){const n=c.createContext(t),r=i=>{const{children:s,...a}=i,h=c.useMemo(()=>a,Object.values(a));return x.jsx(n.Provider,{value:h,children:s})};r.displayName=e+"Provider";function o(i){const s=c.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function en(e,t=[]){let n=[];function r(i,s){const a=c.createContext(s),h=n.length;n=[...n,s];const l=d=>{var p;const{scope:v,children:y,...w}=d,u=((p=v==null?void 0:v[e])==null?void 0:p[h])||a,m=c.useMemo(()=>w,Object.values(w));return x.jsx(u.Provider,{value:m,children:y})};l.displayName=i+"Provider";function f(d,v){var u;const y=((u=v==null?void 0:v[e])==null?void 0:u[h])||a,w=c.useContext(y);if(w)return w;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[l,f]}const o=()=>{const i=n.map(s=>c.createContext(s));return function(a){const h=(a==null?void 0:a[e])||i;return c.useMemo(()=>({[`__scope${e}`]:{...a,[e]:h}}),[a,h])}};return o.scopeName=e,[r,ke(o,...t)]}function ke(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:h,scopeName:l})=>{const d=h(i)[`__scope${l}`];return{...a,...d}},{});return c.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}var ne=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},Me=pe[" useId ".trim().toString()]||(()=>{}),Fe=0;function tn(e){const[t,n]=c.useState(Me());return ne(()=>{n(r=>r??String(Fe++))},[e]),e||(t?`radix-${t}`:"")}var Ie=pe[" useInsertionEffect ".trim().toString()]||ne;function nn({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,s]=We({defaultProp:t,onChange:n}),a=e!==void 0,h=a?e:o;{const f=c.useRef(e!==void 0);c.useEffect(()=>{const d=f.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=a},[a,r])}const l=c.useCallback(f=>{var d;if(a){const v=Be(f)?f(e):f;v!==e&&((d=s.current)==null||d.call(s,v))}else i(f)},[a,e,i,s]);return[h,l]}function We({defaultProp:e,onChange:t}){const[n,r]=c.useState(e),o=c.useRef(n),i=c.useRef(t);return Ie(()=>{i.current=t},[t]),c.useEffect(()=>{var s;o.current!==n&&((s=i.current)==null||s.call(i,n),o.current=n)},[n,o]),[n,r,i]}function Be(e){return typeof e=="function"}function _e(e){const t=je(e),n=c.forwardRef((r,o)=>{const{children:i,...s}=r,a=c.Children.toArray(i),h=a.find($e);if(h){const l=h.props.children,f=a.map(d=>d===h?c.Children.count(l)>1?c.Children.only(null):c.isValidElement(l)?l.props.children:null:d);return x.jsx(t,{...s,ref:o,children:c.isValidElement(l)?c.cloneElement(l,void 0,f):null})}return x.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function je(e){const t=c.forwardRef((n,r)=>{const{children:o,...i}=n;if(c.isValidElement(o)){const s=Ke(o),a=Ve(i,o.props);return o.type!==c.Fragment&&(a.ref=r?Ne(r,s):s),c.cloneElement(o,a)}return c.Children.count(o)>1?c.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Ue=Symbol("radix.slottable");function $e(e){return c.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Ue}function Ve(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{const h=i(...a);return o(...a),h}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Ke(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Xe=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],V=Xe.reduce((e,t)=>{const n=_e(`Primitive.${t}`),r=c.forwardRef((o,i)=>{const{asChild:s,...a}=o,h=s?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),x.jsx(h,{...a,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Ye(e,t){e&&ye.flushSync(()=>e.dispatchEvent(t))}function F(e){const t=c.useRef(e);return c.useEffect(()=>{t.current=e}),c.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function He(e,t=globalThis==null?void 0:globalThis.document){const n=F(e);c.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var ze="DismissableLayer",J="dismissableLayer.update",Ge="dismissableLayer.pointerDownOutside",Ze="dismissableLayer.focusOutside",oe,Ee=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),qe=c.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:a,...h}=e,l=c.useContext(Ee),[f,d]=c.useState(null),v=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=c.useState({}),w=te(t,E=>d(E)),u=Array.from(l.layers),[m]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),p=u.indexOf(m),g=f?u.indexOf(f):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,S=g>=p,C=et(E=>{const L=E.target,T=[...l.branches].some(M=>M.contains(L));!S||T||(o==null||o(E),s==null||s(E),E.defaultPrevented||a==null||a())},v),P=tt(E=>{const L=E.target;[...l.branches].some(M=>M.contains(L))||(i==null||i(E),s==null||s(E),E.defaultPrevented||a==null||a())},v);return He(E=>{g===l.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&a&&(E.preventDefault(),a()))},v),c.useEffect(()=>{if(f)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(oe=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),l.layersWithOutsidePointerEventsDisabled.add(f)),l.layers.add(f),ae(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=oe)}},[f,v,n,l]),c.useEffect(()=>()=>{f&&(l.layers.delete(f),l.layersWithOutsidePointerEventsDisabled.delete(f),ae())},[f,l]),c.useEffect(()=>{const E=()=>y({});return document.addEventListener(J,E),()=>document.removeEventListener(J,E)},[]),x.jsx(V.div,{...h,ref:w,style:{pointerEvents:b?S?"auto":"none":void 0,...e.style},onFocusCapture:X(e.onFocusCapture,P.onFocusCapture),onBlurCapture:X(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:X(e.onPointerDownCapture,C.onPointerDownCapture)})});qe.displayName=ze;var Qe="DismissableLayerBranch",Je=c.forwardRef((e,t)=>{const n=c.useContext(Ee),r=c.useRef(null),o=te(t,r);return c.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),x.jsx(V.div,{...e,ref:o})});Je.displayName=Qe;function et(e,t=globalThis==null?void 0:globalThis.document){const n=F(e),r=c.useRef(!1),o=c.useRef(()=>{});return c.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let h=function(){ge(Ge,n,l,{discrete:!0})};const l={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=h,t.addEventListener("click",o.current,{once:!0})):h()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function tt(e,t=globalThis==null?void 0:globalThis.document){const n=F(e),r=c.useRef(!1);return c.useEffect(()=>{const o=i=>{i.target&&!r.current&&ge(Ze,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ae(){const e=new CustomEvent(J);document.dispatchEvent(e)}function ge(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?Ye(o,i):o.dispatchEvent(i)}var Y="focusScope.autoFocusOnMount",H="focusScope.autoFocusOnUnmount",ce={bubbles:!1,cancelable:!0},nt="FocusScope",rt=c.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[a,h]=c.useState(null),l=F(o),f=F(i),d=c.useRef(null),v=te(t,u=>h(u)),y=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(r){let u=function(b){if(y.paused||!a)return;const S=b.target;a.contains(S)?d.current=S:O(d.current,{select:!0})},m=function(b){if(y.paused||!a)return;const S=b.relatedTarget;S!==null&&(a.contains(S)||O(d.current,{select:!0}))},p=function(b){if(document.activeElement===document.body)for(const C of b)C.removedNodes.length>0&&O(a)};document.addEventListener("focusin",u),document.addEventListener("focusout",m);const g=new MutationObserver(p);return a&&g.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),g.disconnect()}}},[r,a,y.paused]),c.useEffect(()=>{if(a){se.add(y);const u=document.activeElement;if(!a.contains(u)){const p=new CustomEvent(Y,ce);a.addEventListener(Y,l),a.dispatchEvent(p),p.defaultPrevented||(ot(ut(be(a)),{select:!0}),document.activeElement===u&&O(a))}return()=>{a.removeEventListener(Y,l),setTimeout(()=>{const p=new CustomEvent(H,ce);a.addEventListener(H,f),a.dispatchEvent(p),p.defaultPrevented||O(u??document.body,{select:!0}),a.removeEventListener(H,f),se.remove(y)},0)}}},[a,l,f,y]);const w=c.useCallback(u=>{if(!n&&!r||y.paused)return;const m=u.key==="Tab"&&!u.altKey&&!u.ctrlKey&&!u.metaKey,p=document.activeElement;if(m&&p){const g=u.currentTarget,[b,S]=at(g);b&&S?!u.shiftKey&&p===S?(u.preventDefault(),n&&O(b,{select:!0})):u.shiftKey&&p===b&&(u.preventDefault(),n&&O(S,{select:!0})):p===g&&u.preventDefault()}},[n,r,y.paused]);return x.jsx(V.div,{tabIndex:-1,...s,ref:v,onKeyDown:w})});rt.displayName=nt;function ot(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(O(r,{select:t}),document.activeElement!==n)return}function at(e){const t=be(e),n=ie(t,e),r=ie(t.reverse(),e);return[n,r]}function be(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ie(e,t){for(const n of e)if(!ct(n,{upTo:t}))return n}function ct(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function it(e){return e instanceof HTMLInputElement&&"select"in e}function O(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&it(e)&&t&&e.select()}}var se=st();function st(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=ue(e,t),e.unshift(t)},remove(t){var n;e=ue(e,t),(n=e[0])==null||n.resume()}}}function ue(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function ut(e){return e.filter(t=>t.tagName!=="A")}var lt="Portal",ft=c.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=c.useState(!1);ne(()=>i(!0),[]);const s=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return s?De.createPortal(x.jsx(V.div,{...r,ref:t}),s):null});ft.displayName=lt;var z=0;function rn(){c.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??le()),document.body.insertAdjacentElement("beforeend",e[1]??le()),z++,()=>{z===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),z--}},[])}function le(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var R=function(){return R=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},R.apply(this,arguments)};function Se(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var U="right-scroll-bar-position",$="width-before-scroll-bar",vt="with-scroll-bars-hidden",ht="--removed-body-scroll-bar-size";function G(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function mt(e,t){var n=c.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var pt=typeof window<"u"?c.useLayoutEffect:c.useEffect,fe=new WeakMap;function yt(e,t){var n=mt(null,function(r){return e.forEach(function(o){return G(o,r)})});return pt(function(){var r=fe.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(a){i.has(a)||G(a,null)}),i.forEach(function(a){o.has(a)||G(a,s)})}fe.set(n,e)},[e]),n}function Et(e){return e}function gt(e,t){t===void 0&&(t=Et);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(a){return a!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var a=n;n=[],a.forEach(i),s=n}var h=function(){var f=s;s=[],f.forEach(i)},l=function(){return Promise.resolve().then(h)};l(),n={push:function(f){s.push(f),l()},filter:function(f){return s=s.filter(f),n}}}};return o}function bt(e){e===void 0&&(e={});var t=gt(null);return t.options=R({async:!0,ssr:!1},e),t}var we=function(e){var t=e.sideCar,n=Se(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return c.createElement(r,R({},n))};we.isSideCarExport=!0;function St(e,t){return e.useMedium(t),we}var Ce=bt(),Z=function(){},K=c.forwardRef(function(e,t){var n=c.useRef(null),r=c.useState({onScrollCapture:Z,onWheelCapture:Z,onTouchMoveCapture:Z}),o=r[0],i=r[1],s=e.forwardProps,a=e.children,h=e.className,l=e.removeScrollBar,f=e.enabled,d=e.shards,v=e.sideCar,y=e.noRelative,w=e.noIsolation,u=e.inert,m=e.allowPinchZoom,p=e.as,g=p===void 0?"div":p,b=e.gapMode,S=Se(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),C=v,P=yt([n,t]),E=R(R({},S),o);return c.createElement(c.Fragment,null,f&&c.createElement(C,{sideCar:Ce,removeScrollBar:l,shards:d,noRelative:y,noIsolation:w,inert:u,setCallbacks:i,allowPinchZoom:!!m,lockRef:n,gapMode:b}),s?c.cloneElement(c.Children.only(a),R(R({},E),{ref:P})):c.createElement(g,R({},E,{className:h,ref:P}),a))});K.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};K.classNames={fullWidth:$,zeroRight:U};var wt=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Ct(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wt();return t&&e.setAttribute("nonce",t),e}function Pt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Rt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var xt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Ct())&&(Pt(t,n),Rt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ot=function(){var e=xt();return function(t,n){c.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Pe=function(){var e=Ot(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},Lt={left:0,top:0,right:0,gap:0},q=function(e){return parseInt(e||"",10)||0},Tt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[q(n),q(r),q(o)]},At=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Lt;var t=Tt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Nt=Pe(),k="data-scroll-locked",Dt=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,a=e.gap;return n===void 0&&(n="margin"),`
|
|
1
|
+
import{H as Le,aQ as Ne,r as c,j as x,aR as pe,aS as Ae,aG as te}from"./index-HPNb1zfx.js";var ye=Ne();const De=Le(ye);function H(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function Jt(e,t){const n=c.createContext(t),r=i=>{const{children:s,...a}=i,h=c.useMemo(()=>a,Object.values(a));return x.jsx(n.Provider,{value:h,children:s})};r.displayName=e+"Provider";function o(i){const s=c.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function en(e,t=[]){let n=[];function r(i,s){const a=c.createContext(s),h=n.length;n=[...n,s];const l=d=>{var p;const{scope:v,children:y,...w}=d,u=((p=v==null?void 0:v[e])==null?void 0:p[h])||a,m=c.useMemo(()=>w,Object.values(w));return x.jsx(u.Provider,{value:m,children:y})};l.displayName=i+"Provider";function f(d,v){var u;const y=((u=v==null?void 0:v[e])==null?void 0:u[h])||a,w=c.useContext(y);if(w)return w;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[l,f]}const o=()=>{const i=n.map(s=>c.createContext(s));return function(a){const h=(a==null?void 0:a[e])||i;return c.useMemo(()=>({[`__scope${e}`]:{...a,[e]:h}}),[a,h])}};return o.scopeName=e,[r,ke(o,...t)]}function ke(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((a,{useScope:h,scopeName:l})=>{const d=h(i)[`__scope${l}`];return{...a,...d}},{});return c.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}var ne=globalThis!=null&&globalThis.document?c.useLayoutEffect:()=>{},Fe=pe[" useId ".trim().toString()]||(()=>{}),Me=0;function tn(e){const[t,n]=c.useState(Fe());return ne(()=>{n(r=>r??String(Me++))},[e]),e||(t?`radix-${t}`:"")}var Ie=pe[" useInsertionEffect ".trim().toString()]||ne;function nn({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,s]=We({defaultProp:t,onChange:n}),a=e!==void 0,h=a?e:o;{const f=c.useRef(e!==void 0);c.useEffect(()=>{const d=f.current;d!==a&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${a?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),f.current=a},[a,r])}const l=c.useCallback(f=>{var d;if(a){const v=Be(f)?f(e):f;v!==e&&((d=s.current)==null||d.call(s,v))}else i(f)},[a,e,i,s]);return[h,l]}function We({defaultProp:e,onChange:t}){const[n,r]=c.useState(e),o=c.useRef(n),i=c.useRef(t);return Ie(()=>{i.current=t},[t]),c.useEffect(()=>{var s;o.current!==n&&((s=i.current)==null||s.call(i,n),o.current=n)},[n,o]),[n,r,i]}function Be(e){return typeof e=="function"}function _e(e){const t=je(e),n=c.forwardRef((r,o)=>{const{children:i,...s}=r,a=c.Children.toArray(i),h=a.find($e);if(h){const l=h.props.children,f=a.map(d=>d===h?c.Children.count(l)>1?c.Children.only(null):c.isValidElement(l)?l.props.children:null:d);return x.jsx(t,{...s,ref:o,children:c.isValidElement(l)?c.cloneElement(l,void 0,f):null})}return x.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function je(e){const t=c.forwardRef((n,r)=>{const{children:o,...i}=n;if(c.isValidElement(o)){const s=Ke(o),a=Ve(i,o.props);return o.type!==c.Fragment&&(a.ref=r?Ae(r,s):s),c.cloneElement(o,a)}return c.Children.count(o)>1?c.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Ue=Symbol("radix.slottable");function $e(e){return c.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Ue}function Ve(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...a)=>{const h=i(...a);return o(...a),h}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Ke(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var He=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],V=He.reduce((e,t)=>{const n=_e(`Primitive.${t}`),r=c.forwardRef((o,i)=>{const{asChild:s,...a}=o,h=s?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),x.jsx(h,{...a,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Xe(e,t){e&&ye.flushSync(()=>e.dispatchEvent(t))}function M(e){const t=c.useRef(e);return c.useEffect(()=>{t.current=e}),c.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function Ye(e,t=globalThis==null?void 0:globalThis.document){const n=M(e);c.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var ze="DismissableLayer",J="dismissableLayer.update",Ge="dismissableLayer.pointerDownOutside",Ze="dismissableLayer.focusOutside",oe,Ee=c.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),qe=c.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:a,...h}=e,l=c.useContext(Ee),[f,d]=c.useState(null),v=(f==null?void 0:f.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,y]=c.useState({}),w=te(t,E=>d(E)),u=Array.from(l.layers),[m]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),p=u.indexOf(m),g=f?u.indexOf(f):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,S=g>=p,C=et(E=>{const T=E.target,L=[...l.branches].some(F=>F.contains(T));!S||L||(o==null||o(E),s==null||s(E),E.defaultPrevented||a==null||a())},v),P=tt(E=>{const T=E.target;[...l.branches].some(F=>F.contains(T))||(i==null||i(E),s==null||s(E),E.defaultPrevented||a==null||a())},v);return Ye(E=>{g===l.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&a&&(E.preventDefault(),a()))},v),c.useEffect(()=>{if(f)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(oe=v.body.style.pointerEvents,v.body.style.pointerEvents="none"),l.layersWithOutsidePointerEventsDisabled.add(f)),l.layers.add(f),ae(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(v.body.style.pointerEvents=oe)}},[f,v,n,l]),c.useEffect(()=>()=>{f&&(l.layers.delete(f),l.layersWithOutsidePointerEventsDisabled.delete(f),ae())},[f,l]),c.useEffect(()=>{const E=()=>y({});return document.addEventListener(J,E),()=>document.removeEventListener(J,E)},[]),x.jsx(V.div,{...h,ref:w,style:{pointerEvents:b?S?"auto":"none":void 0,...e.style},onFocusCapture:H(e.onFocusCapture,P.onFocusCapture),onBlurCapture:H(e.onBlurCapture,P.onBlurCapture),onPointerDownCapture:H(e.onPointerDownCapture,C.onPointerDownCapture)})});qe.displayName=ze;var Qe="DismissableLayerBranch",Je=c.forwardRef((e,t)=>{const n=c.useContext(Ee),r=c.useRef(null),o=te(t,r);return c.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),x.jsx(V.div,{...e,ref:o})});Je.displayName=Qe;function et(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1),o=c.useRef(()=>{});return c.useEffect(()=>{const i=a=>{if(a.target&&!r.current){let h=function(){ge(Ge,n,l,{discrete:!0})};const l={originalEvent:a};a.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=h,t.addEventListener("click",o.current,{once:!0})):h()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function tt(e,t=globalThis==null?void 0:globalThis.document){const n=M(e),r=c.useRef(!1);return c.useEffect(()=>{const o=i=>{i.target&&!r.current&&ge(Ze,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ae(){const e=new CustomEvent(J);document.dispatchEvent(e)}function ge(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?Xe(o,i):o.dispatchEvent(i)}var X="focusScope.autoFocusOnMount",Y="focusScope.autoFocusOnUnmount",ce={bubbles:!1,cancelable:!0},nt="FocusScope",rt=c.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[a,h]=c.useState(null),l=M(o),f=M(i),d=c.useRef(null),v=te(t,u=>h(u)),y=c.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;c.useEffect(()=>{if(r){let u=function(b){if(y.paused||!a)return;const S=b.target;a.contains(S)?d.current=S:O(d.current,{select:!0})},m=function(b){if(y.paused||!a)return;const S=b.relatedTarget;S!==null&&(a.contains(S)||O(d.current,{select:!0}))},p=function(b){if(document.activeElement===document.body)for(const C of b)C.removedNodes.length>0&&O(a)};document.addEventListener("focusin",u),document.addEventListener("focusout",m);const g=new MutationObserver(p);return a&&g.observe(a,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",u),document.removeEventListener("focusout",m),g.disconnect()}}},[r,a,y.paused]),c.useEffect(()=>{if(a){se.add(y);const u=document.activeElement;if(!a.contains(u)){const p=new CustomEvent(X,ce);a.addEventListener(X,l),a.dispatchEvent(p),p.defaultPrevented||(ot(ut(be(a)),{select:!0}),document.activeElement===u&&O(a))}return()=>{a.removeEventListener(X,l),setTimeout(()=>{const p=new CustomEvent(Y,ce);a.addEventListener(Y,f),a.dispatchEvent(p),p.defaultPrevented||O(u??document.body,{select:!0}),a.removeEventListener(Y,f),se.remove(y)},0)}}},[a,l,f,y]);const w=c.useCallback(u=>{if(!n&&!r||y.paused)return;const m=u.key==="Tab"&&!u.altKey&&!u.ctrlKey&&!u.metaKey,p=document.activeElement;if(m&&p){const g=u.currentTarget,[b,S]=at(g);b&&S?!u.shiftKey&&p===S?(u.preventDefault(),n&&O(b,{select:!0})):u.shiftKey&&p===b&&(u.preventDefault(),n&&O(S,{select:!0})):p===g&&u.preventDefault()}},[n,r,y.paused]);return x.jsx(V.div,{tabIndex:-1,...s,ref:v,onKeyDown:w})});rt.displayName=nt;function ot(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(O(r,{select:t}),document.activeElement!==n)return}function at(e){const t=be(e),n=ie(t,e),r=ie(t.reverse(),e);return[n,r]}function be(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ie(e,t){for(const n of e)if(!ct(n,{upTo:t}))return n}function ct(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function it(e){return e instanceof HTMLInputElement&&"select"in e}function O(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&it(e)&&t&&e.select()}}var se=st();function st(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=ue(e,t),e.unshift(t)},remove(t){var n;e=ue(e,t),(n=e[0])==null||n.resume()}}}function ue(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function ut(e){return e.filter(t=>t.tagName!=="A")}var lt="Portal",ft=c.forwardRef((e,t)=>{var a;const{container:n,...r}=e,[o,i]=c.useState(!1);ne(()=>i(!0),[]);const s=n||o&&((a=globalThis==null?void 0:globalThis.document)==null?void 0:a.body);return s?De.createPortal(x.jsx(V.div,{...r,ref:t}),s):null});ft.displayName=lt;var z=0;function rn(){c.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??le()),document.body.insertAdjacentElement("beforeend",e[1]??le()),z++,()=>{z===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),z--}},[])}function le(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var R=function(){return R=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},R.apply(this,arguments)};function Se(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var U="right-scroll-bar-position",$="width-before-scroll-bar",vt="with-scroll-bars-hidden",ht="--removed-body-scroll-bar-size";function G(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function mt(e,t){var n=c.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var pt=typeof window<"u"?c.useLayoutEffect:c.useEffect,fe=new WeakMap;function yt(e,t){var n=mt(null,function(r){return e.forEach(function(o){return G(o,r)})});return pt(function(){var r=fe.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(a){i.has(a)||G(a,null)}),i.forEach(function(a){o.has(a)||G(a,s)})}fe.set(n,e)},[e]),n}function Et(e){return e}function gt(e,t){t===void 0&&(t=Et);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(a){return a!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(a){return i(a)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var a=n;n=[],a.forEach(i),s=n}var h=function(){var f=s;s=[],f.forEach(i)},l=function(){return Promise.resolve().then(h)};l(),n={push:function(f){s.push(f),l()},filter:function(f){return s=s.filter(f),n}}}};return o}function bt(e){e===void 0&&(e={});var t=gt(null);return t.options=R({async:!0,ssr:!1},e),t}var we=function(e){var t=e.sideCar,n=Se(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return c.createElement(r,R({},n))};we.isSideCarExport=!0;function St(e,t){return e.useMedium(t),we}var Ce=bt(),Z=function(){},K=c.forwardRef(function(e,t){var n=c.useRef(null),r=c.useState({onScrollCapture:Z,onWheelCapture:Z,onTouchMoveCapture:Z}),o=r[0],i=r[1],s=e.forwardProps,a=e.children,h=e.className,l=e.removeScrollBar,f=e.enabled,d=e.shards,v=e.sideCar,y=e.noRelative,w=e.noIsolation,u=e.inert,m=e.allowPinchZoom,p=e.as,g=p===void 0?"div":p,b=e.gapMode,S=Se(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),C=v,P=yt([n,t]),E=R(R({},S),o);return c.createElement(c.Fragment,null,f&&c.createElement(C,{sideCar:Ce,removeScrollBar:l,shards:d,noRelative:y,noIsolation:w,inert:u,setCallbacks:i,allowPinchZoom:!!m,lockRef:n,gapMode:b}),s?c.cloneElement(c.Children.only(a),R(R({},E),{ref:P})):c.createElement(g,R({},E,{className:h,ref:P}),a))});K.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};K.classNames={fullWidth:$,zeroRight:U};var wt=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function Ct(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=wt();return t&&e.setAttribute("nonce",t),e}function Pt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Rt(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var xt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=Ct())&&(Pt(t,n),Rt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ot=function(){var e=xt();return function(t,n){c.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Pe=function(){var e=Ot(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},Tt={left:0,top:0,right:0,gap:0},q=function(e){return parseInt(e||"",10)||0},Lt=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[q(n),q(r),q(o)]},Nt=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Tt;var t=Lt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},At=Pe(),k="data-scroll-locked",Dt=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,a=e.gap;return n===void 0&&(n="margin"),`
|
|
2
2
|
.`.concat(vt,` {
|
|
3
3
|
overflow: hidden `).concat(r,`;
|
|
4
4
|
padding-right: `).concat(a,"px ").concat(r,`;
|
|
@@ -35,7 +35,7 @@ import{G as Te,aK as Ae,r as c,j as x,aL as pe,aM as Ne,aA as te}from"./index-Cx
|
|
|
35
35
|
body[`).concat(k,`] {
|
|
36
36
|
`).concat(ht,": ").concat(a,`px;
|
|
37
37
|
}
|
|
38
|
-
`)},de=function(){var e=parseInt(document.body.getAttribute(k)||"0",10);return isFinite(e)?e:0},kt=function(){c.useEffect(function(){return document.body.setAttribute(k,(de()+1).toString()),function(){var e=de()-1;e<=0?document.body.removeAttribute(k):document.body.setAttribute(k,e.toString())}},[])},
|
|
38
|
+
`)},de=function(){var e=parseInt(document.body.getAttribute(k)||"0",10);return isFinite(e)?e:0},kt=function(){c.useEffect(function(){return document.body.setAttribute(k,(de()+1).toString()),function(){var e=de()-1;e<=0?document.body.removeAttribute(k):document.body.setAttribute(k,e.toString())}},[])},Ft=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;kt();var i=c.useMemo(function(){return Nt(o)},[o]);return c.createElement(At,{styles:Dt(i,!t,o,n?"":"!important")})},ee=!1;if(typeof window<"u")try{var W=Object.defineProperty({},"passive",{get:function(){return ee=!0,!0}});window.addEventListener("test",W,W),window.removeEventListener("test",W,W)}catch{ee=!1}var N=ee?{passive:!1}:!1,Mt=function(e){return e.tagName==="TEXTAREA"},Re=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!Mt(e)&&n[t]==="visible")},It=function(e){return Re(e,"overflowY")},Wt=function(e){return Re(e,"overflowX")},ve=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=xe(e,r);if(o){var i=Oe(e,r),s=i[1],a=i[2];if(s>a)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Bt=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},_t=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},xe=function(e,t){return e==="v"?It(t):Wt(t)},Oe=function(e,t){return e==="v"?Bt(t):_t(t)},jt=function(e,t){return e==="h"&&t==="rtl"?-1:1},Ut=function(e,t,n,r,o){var i=jt(e,window.getComputedStyle(t).direction),s=i*r,a=n.target,h=t.contains(a),l=!1,f=s>0,d=0,v=0;do{if(!a)break;var y=Oe(e,a),w=y[0],u=y[1],m=y[2],p=u-m-i*w;(w||p)&&xe(e,a)&&(d+=p,v+=w);var g=a.parentNode;a=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!h&&a!==document.body||h&&(t.contains(a)||t===a));return(f&&Math.abs(d)<1||!f&&Math.abs(v)<1)&&(l=!0),l},B=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},he=function(e){return[e.deltaX,e.deltaY]},me=function(e){return e&&"current"in e?e.current:e},$t=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Vt=function(e){return`
|
|
39
39
|
.block-interactivity-`.concat(e,` {pointer-events: none;}
|
|
40
40
|
.allow-interactivity-`).concat(e,` {pointer-events: all;}
|
|
41
|
-
`)},Kt=0,
|
|
41
|
+
`)},Kt=0,A=[];function Ht(e){var t=c.useRef([]),n=c.useRef([0,0]),r=c.useRef(),o=c.useState(Kt++)[0],i=c.useState(Pe)[0],s=c.useRef(e);c.useEffect(function(){s.current=e},[e]),c.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var u=dt([e.lockRef.current],(e.shards||[]).map(me),!0).filter(Boolean);return u.forEach(function(m){return m.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),u.forEach(function(m){return m.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var a=c.useCallback(function(u,m){if("touches"in u&&u.touches.length===2||u.type==="wheel"&&u.ctrlKey)return!s.current.allowPinchZoom;var p=B(u),g=n.current,b="deltaX"in u?u.deltaX:g[0]-p[0],S="deltaY"in u?u.deltaY:g[1]-p[1],C,P=u.target,E=Math.abs(b)>Math.abs(S)?"h":"v";if("touches"in u&&E==="h"&&P.type==="range")return!1;var T=window.getSelection(),L=T&&T.anchorNode,F=L?L===P||L.contains(P):!1;if(F)return!1;var I=ve(E,P);if(!I)return!0;if(I?C=E:(C=E==="v"?"h":"v",I=ve(E,P)),!I)return!1;if(!r.current&&"changedTouches"in u&&(b||S)&&(r.current=C),!C)return!0;var re=r.current||C;return Ut(re,m,u,re==="h"?b:S)},[]),h=c.useCallback(function(u){var m=u;if(!(!A.length||A[A.length-1]!==i)){var p="deltaY"in m?he(m):B(m),g=t.current.filter(function(C){return C.name===m.type&&(C.target===m.target||m.target===C.shadowParent)&&$t(C.delta,p)})[0];if(g&&g.should){m.cancelable&&m.preventDefault();return}if(!g){var b=(s.current.shards||[]).map(me).filter(Boolean).filter(function(C){return C.contains(m.target)}),S=b.length>0?a(m,b[0]):!s.current.noIsolation;S&&m.cancelable&&m.preventDefault()}}},[]),l=c.useCallback(function(u,m,p,g){var b={name:u,delta:m,target:p,should:g,shadowParent:Xt(p)};t.current.push(b),setTimeout(function(){t.current=t.current.filter(function(S){return S!==b})},1)},[]),f=c.useCallback(function(u){n.current=B(u),r.current=void 0},[]),d=c.useCallback(function(u){l(u.type,he(u),u.target,a(u,e.lockRef.current))},[]),v=c.useCallback(function(u){l(u.type,B(u),u.target,a(u,e.lockRef.current))},[]);c.useEffect(function(){return A.push(i),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:v}),document.addEventListener("wheel",h,N),document.addEventListener("touchmove",h,N),document.addEventListener("touchstart",f,N),function(){A=A.filter(function(u){return u!==i}),document.removeEventListener("wheel",h,N),document.removeEventListener("touchmove",h,N),document.removeEventListener("touchstart",f,N)}},[]);var y=e.removeScrollBar,w=e.inert;return c.createElement(c.Fragment,null,w?c.createElement(i,{styles:Vt(o)}):null,y?c.createElement(Ft,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Xt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const Yt=St(Ce,Ht);var zt=c.forwardRef(function(e,t){return c.createElement(K,R({},e,{ref:t,sideCar:Yt}))});zt.classNames=K.classNames;var Gt=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},D=new WeakMap,_=new WeakMap,j={},Q=0,Te=function(e){return e&&(e.host||Te(e.parentNode))},Zt=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=Te(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},qt=function(e,t,n,r){var o=Zt(t,Array.isArray(e)?e:[e]);j[n]||(j[n]=new WeakMap);var i=j[n],s=[],a=new Set,h=new Set(o),l=function(d){!d||a.has(d)||(a.add(d),l(d.parentNode))};o.forEach(l);var f=function(d){!d||h.has(d)||Array.prototype.forEach.call(d.children,function(v){if(a.has(v))f(v);else try{var y=v.getAttribute(r),w=y!==null&&y!=="false",u=(D.get(v)||0)+1,m=(i.get(v)||0)+1;D.set(v,u),i.set(v,m),s.push(v),u===1&&w&&_.set(v,!0),m===1&&v.setAttribute(n,"true"),w||v.setAttribute(r,"true")}catch(p){console.error("aria-hidden: cannot operate on ",v,p)}})};return f(t),a.clear(),Q++,function(){s.forEach(function(d){var v=D.get(d)-1,y=i.get(d)-1;D.set(d,v),i.set(d,y),v||(_.has(d)||d.removeAttribute(r),_.delete(d)),y||d.removeAttribute(n)}),Q--,Q||(D=new WeakMap,D=new WeakMap,_=new WeakMap,j={})}},on=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=Gt(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live], script"))),qt(r,o,n,"aria-hidden")):function(){return null}};export{qe as D,rt as F,V as P,zt as R,_e as a,M as b,en as c,nn as d,tn as e,H as f,ft as g,on as h,rn as i,Jt as j,ye as r,ne as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as t}from"./index-HPNb1zfx.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{A as o}from"./index-HPNb1zfx.js";const i=s=>o.get(`/projects/${s}/sessions`),c=(s,e,t)=>o.get(`/projects/${s}/sessions/${e}`,{history_limit:String(t)}),r=(s,e,t)=>o.patch(`/projects/${s}/sessions/${e}`,t),a=(s,e)=>o.delete(`/projects/${s}/sessions/${e}`),p=(s,e)=>o.post(`/projects/${s}/sessions/switch`,e),$=(s,e)=>o.post(`/projects/${s}/send`,e);export{$ as a,a as d,c as g,i as l,r,p as s};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={dashboard:"概览",chat:"聊天",chatDesktop:"桌面聊天",chatWeb:"聊天",workspace:"工作区",knowledge:"知识库",projects:"项目",sessions:"会话",cron:"定时任务",monitors:"监控任务",bridge:"桥接",system:"系统"},t={title:"概览",version:"版本",uptime:"运行时间",platforms:"平台",projects:"项目",bridgeAdapters:"桥接适配器",noData:"暂无数据"},o={title:"项目",name:"名称",agent:"智能体",platforms:"平台",sessions:"会话",heartbeat:"心跳",settings:"设置",quiet:"静默模式",language:"语言",adminFrom:"管理来源",disabledCommands:"已禁用命令",save:"保存",detail:"详情",noProjects:"尚未配置项目",tabs:{overview:"概览",providers:"服务商",heartbeat:"心跳",settings:"设置"}},s={title:"会话",id:"编号",sessionKey:"会话键",name:"名称",platform:"平台",active:"活跃",createdAt:"创建时间",history:"历史",send:"发送",messageInput:"消息",delete:"删除",noSessions:"暂无会话",noMessages:"暂无消息",notLiveHint:"当前聊天对象现在不在线,暂时不能继续回复。等有新消息进来后,这里会自动恢复可发送。",offline:"离线",justNow:"刚刚",allProjects:"全部项目",chat:"对话",enterSession:"进入会话",newChat:"新建聊天",selectProject:"选择项目",projectRequired:"开始聊天前请先选择一个项目。",noAvailableChatTarget:"当前项目还没有可直接聊天的会话,请先从会话列表打开一个可用会话。",noReadyChats:"当前没有可立即聊天的会话,请到“会话”页查看历史记录。",emptyProject:"这个项目下还没有任何会话。",emptySelection:"选择一个项目,然后开始新的聊天。",activeChat:"当前聊天",sendHint:"消息会发送到当前选中的项目。",waitingForReply:"正在等待助手回复…",preparingChat:"正在准备聊天…",pollTimeout:"刷新超时前未收到完整回复。",createFailed:"创建新聊天会话失败。",loadFailed:"加载所选会话失败。",sendFailed:"发送消息失败。",sessionUnavailable:"当前聊天对象现在不在线,暂时不能继续回复。等有新消息进来后再试。",deleteConfirmTitle:"删除会话",deleteConfirmBody:"这会移除该会话保存的历史对话。",renameTitle:"重命名会话",renamePlaceholder:"会话名称",loadSession:"打开",historyTitle:"历史会话",availableNow:"可发送消息",waitingActivation:"等待激活"},n={title:"模型提供方",name:"名称",model:"模型",baseUrl:"基础 URL",active:"当前使用",add:"添加提供方",remove:"移除",activate:"启用",setModel:"设置模型",models:"可用模型"},a={title:"定时任务",expression:"Cron 表达式",prompt:"提示词",exec:"执行",description:"描述",enabled:"已启用",silent:"静默",lastRun:"上次运行",lastError:"上次错误",add:"添加任务",delete:"删除",noJobs:"暂无定时任务",workDir:"工作目录",sessionKey:"会话键",project:"项目"},i={title:"监控任务",prompt:"提示词",condition:"触发条件",cooldown:"冷却时间(分钟)",enabled:"已启用",lastRun:"上次触发",add:"添加监控",edit:"编辑监控",run:"立即执行",noMonitors:"暂无监控任务",monitorTitle:"标题"},r={title:"心跳",status:"状态",interval:"间隔",paused:"已暂停",running:"运行中",pause:"暂停",resume:"恢复",trigger:"立即执行",setInterval:"设置间隔",runCount:"执行次数",errorCount:"错误次数",skippedBusy:"跳过(忙碌)",lastRun:"上次运行"},l={title:"桥接",platform:"平台",capabilities:"能力",connectedAt:"连接时间",noAdapters:"暂无桥接适配器"},c={title:"系统",config:"配置",logs:"日志",restart:"重启",reload:"重载配置",restartConfirm:"确定要重启服务吗?进行中的会话可能会中断。",reloadConfirm:"从磁盘重新加载配置?",level:"日志级别",limit:"行数限制"},d={title:"AgentDock",subtitle:"连接到您的 AgentDock 实例",token:"API 令牌",serverUrl:"服务器地址",connect:"连接",invalidToken:"令牌无效或已过期",logout:"退出登录"},m={loading:"加载中…",error:"错误",success:"成功",confirm:"确认",cancel:"取消",save:"保存",delete:"删除",back:"返回",refresh:"刷新",search:"搜索",noData:"无数据",actions:"操作",viewAll:"查看全部",optional:"可选",confirmDelete:"确定要删除吗?"},p={light:"浅色",dark:"深色",system:"跟随系统"},g={nav:e,dashboard:t,projects:o,sessions:s,providers:n,cron:a,monitors:i,heartbeat:r,bridge:l,system:c,login:d,common:m,theme:p};export{l as bridge,m as common,a as cron,t as dashboard,g as default,r as heartbeat,d as login,i as monitors,e as nav,o as projects,n as providers,s as sessions,c as system,p as theme};
|
package/dist/renderer/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="./favicon.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>AgentDock</title>
|
|
8
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
+
<script type="module" crossorigin src="./assets/index-HPNb1zfx.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/index-CaQZSRbg.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body class="bg-[#f5f5f7] dark:bg-[#151516]">
|
|
@@ -8,6 +8,8 @@ exports.normalizeScheduledJobTriggerType = normalizeScheduledJobTriggerType;
|
|
|
8
8
|
exports.normalizeChannelPlatform = normalizeChannelPlatform;
|
|
9
9
|
exports.normalizeRunStatus = normalizeRunStatus;
|
|
10
10
|
exports.normalizeScheduledJobRunStatus = normalizeScheduledJobRunStatus;
|
|
11
|
+
exports.normalizeAutomationMonitorStatus = normalizeAutomationMonitorStatus;
|
|
12
|
+
exports.normalizeAutomationMonitorConditionOperator = normalizeAutomationMonitorConditionOperator;
|
|
11
13
|
function normalizeApprovalRequestStatus(value, fallback = 'pending') {
|
|
12
14
|
const normalized = normalizeContractEnumValue(value || fallback).replace(/-/g, '_');
|
|
13
15
|
if (normalized === 'pending' ||
|
|
@@ -110,3 +112,29 @@ function normalizeScheduledJobRunStatus(value, fallback = 'queued') {
|
|
|
110
112
|
}
|
|
111
113
|
throw new Error('Scheduled job run status must be queued, running, succeeded, failed, or skipped.');
|
|
112
114
|
}
|
|
115
|
+
function normalizeAutomationMonitorStatus(value, fallback = 'queued') {
|
|
116
|
+
const normalized = normalizeContractEnumValue(value || fallback).replace(/-/g, '_');
|
|
117
|
+
if (normalized === 'queued' ||
|
|
118
|
+
normalized === 'running' ||
|
|
119
|
+
normalized === 'succeeded' ||
|
|
120
|
+
normalized === 'failed' ||
|
|
121
|
+
normalized === 'skipped') {
|
|
122
|
+
return normalized;
|
|
123
|
+
}
|
|
124
|
+
if (normalized === 'complete' || normalized === 'completed' || normalized === 'success') {
|
|
125
|
+
return 'succeeded';
|
|
126
|
+
}
|
|
127
|
+
throw new Error('Automation monitor status must be queued, running, succeeded, failed, or skipped.');
|
|
128
|
+
}
|
|
129
|
+
function normalizeAutomationMonitorConditionOperator(value) {
|
|
130
|
+
const normalized = String(value || '').trim();
|
|
131
|
+
if (normalized === '>' ||
|
|
132
|
+
normalized === '>=' ||
|
|
133
|
+
normalized === '<' ||
|
|
134
|
+
normalized === '<=' ||
|
|
135
|
+
normalized === '==' ||
|
|
136
|
+
normalized === '!=') {
|
|
137
|
+
return normalized;
|
|
138
|
+
}
|
|
139
|
+
throw new Error('Automation monitor condition operator must be >, >=, <, <=, ==, or !=.');
|
|
140
|
+
}
|
|
@@ -66,6 +66,13 @@ exports.updateScheduledJob = updateScheduledJob;
|
|
|
66
66
|
exports.deleteScheduledJob = deleteScheduledJob;
|
|
67
67
|
exports.runScheduledJob = runScheduledJob;
|
|
68
68
|
exports.listScheduledJobRuns = listScheduledJobRuns;
|
|
69
|
+
exports.listAutomationMonitors = listAutomationMonitors;
|
|
70
|
+
exports.getAutomationMonitor = getAutomationMonitor;
|
|
71
|
+
exports.createAutomationMonitor = createAutomationMonitor;
|
|
72
|
+
exports.updateAutomationMonitor = updateAutomationMonitor;
|
|
73
|
+
exports.deleteAutomationMonitor = deleteAutomationMonitor;
|
|
74
|
+
exports.runAutomationMonitor = runAutomationMonitor;
|
|
75
|
+
exports.listAutomationMonitorRuns = listAutomationMonitorRuns;
|
|
69
76
|
exports.listThreads = listThreads;
|
|
70
77
|
exports.createThread = createThread;
|
|
71
78
|
exports.getThread = getThread;
|
|
@@ -147,11 +154,14 @@ function ensureEventSource() {
|
|
|
147
154
|
'runtime.detect.failed',
|
|
148
155
|
'runtime.status.changed',
|
|
149
156
|
'thread.updated',
|
|
157
|
+
'thread.session.activated',
|
|
150
158
|
'message.created',
|
|
151
159
|
'message.updated',
|
|
152
160
|
'run.updated',
|
|
153
161
|
'scheduler.job.updated',
|
|
154
162
|
'scheduler.run.updated',
|
|
163
|
+
'automation.monitor.updated',
|
|
164
|
+
'automation.monitor.run.updated',
|
|
155
165
|
'presence.updated',
|
|
156
166
|
'stream.updated',
|
|
157
167
|
].forEach((eventName) => {
|
|
@@ -423,6 +433,28 @@ async function runScheduledJob(jobId) {
|
|
|
423
433
|
async function listScheduledJobRuns(jobId) {
|
|
424
434
|
return coreRequest('GET', `/scheduler/jobs/${encodeURIComponent(jobId)}/runs`);
|
|
425
435
|
}
|
|
436
|
+
async function listAutomationMonitors(workspaceId) {
|
|
437
|
+
const suffix = workspaceId ? `?workspace_id=${encodeURIComponent(workspaceId)}` : '';
|
|
438
|
+
return coreRequest('GET', `/automation/monitors${suffix}`);
|
|
439
|
+
}
|
|
440
|
+
async function getAutomationMonitor(monitorId) {
|
|
441
|
+
return coreRequest('GET', `/automation/monitors/${encodeURIComponent(monitorId)}`);
|
|
442
|
+
}
|
|
443
|
+
async function createAutomationMonitor(input) {
|
|
444
|
+
return coreRequest('POST', '/automation/monitors', input);
|
|
445
|
+
}
|
|
446
|
+
async function updateAutomationMonitor(monitorId, input) {
|
|
447
|
+
return coreRequest('PATCH', `/automation/monitors/${encodeURIComponent(monitorId)}`, input);
|
|
448
|
+
}
|
|
449
|
+
async function deleteAutomationMonitor(monitorId) {
|
|
450
|
+
return coreRequest('DELETE', `/automation/monitors/${encodeURIComponent(monitorId)}`);
|
|
451
|
+
}
|
|
452
|
+
async function runAutomationMonitor(monitorId) {
|
|
453
|
+
return coreRequest('POST', `/automation/monitors/${encodeURIComponent(monitorId)}/run`);
|
|
454
|
+
}
|
|
455
|
+
async function listAutomationMonitorRuns(monitorId) {
|
|
456
|
+
return coreRequest('GET', `/automation/monitors/${encodeURIComponent(monitorId)}/runs`);
|
|
457
|
+
}
|
|
426
458
|
async function listThreads(workspaceId) {
|
|
427
459
|
return coreRequest('GET', `/threads?workspace_id=${encodeURIComponent(workspaceId)}`);
|
|
428
460
|
}
|
|
@@ -13,6 +13,8 @@ const local_core_slash_commands_js_1 = require("./local-core-slash-commands.js")
|
|
|
13
13
|
const local_core_acp_progress_js_1 = require("./local-core-acp-progress.js");
|
|
14
14
|
const index_js_1 = require("../agents/index.js");
|
|
15
15
|
const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
|
|
16
|
+
const thread_command_service_js_1 = require("../thread/thread-command-service.js");
|
|
17
|
+
const session_command_service_js_1 = require("../thread/session-command-service.js");
|
|
16
18
|
const ACP_PROMPT_TIMEOUT_MS = 15 * 60 * 1000;
|
|
17
19
|
class LocalCoreAcpBackend {
|
|
18
20
|
options;
|
|
@@ -20,6 +22,8 @@ class LocalCoreAcpBackend {
|
|
|
20
22
|
turnCoordinator;
|
|
21
23
|
sessionCoordinator;
|
|
22
24
|
responseProcessor;
|
|
25
|
+
commandService;
|
|
26
|
+
sessionCommandService;
|
|
23
27
|
constructor(options) {
|
|
24
28
|
this.options = options;
|
|
25
29
|
this.transport = new local_core_acp_transport_js_1.LocalCoreAcpTransport({
|
|
@@ -87,6 +91,26 @@ class LocalCoreAcpBackend {
|
|
|
87
91
|
emitBridge: (event) => this.emitBridgeEvent(event),
|
|
88
92
|
log: options.log,
|
|
89
93
|
});
|
|
94
|
+
this.commandService = new thread_command_service_js_1.ThreadCommandService({
|
|
95
|
+
getThreadRow: (threadId) => this.options.store.getThreadRow(threadId),
|
|
96
|
+
updateThreadAgentMode: (threadId, mode) => this.options.store.updateThreadAgentMode(threadId, mode),
|
|
97
|
+
updateThreadAgentType: (threadId, agentType) => this.options.store.updateThreadAgentType(threadId, agentType),
|
|
98
|
+
getLatestRunForThread: (threadId) => this.options.store.getLatestRunForThread(threadId),
|
|
99
|
+
createAuditEvent: (input) => {
|
|
100
|
+
this.options.store.createAuditEvent(input);
|
|
101
|
+
},
|
|
102
|
+
getAgentTypes: options.getAgentTypes,
|
|
103
|
+
setThreadMode: (threadId, mode) => this.sessionCoordinator.setThreadMode(threadId, mode),
|
|
104
|
+
closeThreadSession: (threadId) => this.sessionCoordinator.closeThreadSession(threadId),
|
|
105
|
+
log: options.log,
|
|
106
|
+
});
|
|
107
|
+
this.sessionCommandService = new session_command_service_js_1.SessionCommandService({
|
|
108
|
+
listThreads: (workspaceId) => this.listThreads(workspaceId),
|
|
109
|
+
getThread: (targetThreadId) => this.getThread(targetThreadId),
|
|
110
|
+
createThread: (workspaceId, title) => this.createThread(workspaceId, title),
|
|
111
|
+
renameThread: (targetThreadId, title) => this.renameThread(targetThreadId, title),
|
|
112
|
+
deleteThread: (targetThreadId) => this.deleteThread(targetThreadId),
|
|
113
|
+
});
|
|
90
114
|
this.responseProcessor = new local_core_acp_response_processor_js_1.LocalCoreAcpResponseProcessor({
|
|
91
115
|
getScheduledDeliveryBinding: (threadId) => {
|
|
92
116
|
const binding = this.options.store.getPlatformThreadBindingByThreadId(threadId);
|
|
@@ -149,16 +173,63 @@ class LocalCoreAcpBackend {
|
|
|
149
173
|
source: 'user',
|
|
150
174
|
},
|
|
151
175
|
});
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
|
|
176
|
+
const sessionCommandResult = await this.sessionCommandService.execute(content, {
|
|
177
|
+
currentThreadId: threadId,
|
|
178
|
+
workspaceId: row.workspace_id,
|
|
179
|
+
defaultTitle: `New thread ${new Date().toLocaleTimeString()}`,
|
|
180
|
+
});
|
|
181
|
+
if (sessionCommandResult.handled) {
|
|
182
|
+
const activeThreadEffect = (sessionCommandResult.effects || [])
|
|
183
|
+
.find((effect) => effect.type === 'activate_thread');
|
|
184
|
+
this.options.store.appendMessage(threadId, 'assistant', sessionCommandResult.displayText, 'final');
|
|
185
|
+
this.options.eventBus.emit({
|
|
186
|
+
type: 'thread.message.accepted',
|
|
187
|
+
payload: {
|
|
188
|
+
threadId,
|
|
189
|
+
workspaceId: row.workspace_id,
|
|
190
|
+
role: 'assistant',
|
|
191
|
+
content: sessionCommandResult.displayText,
|
|
192
|
+
kind: 'final',
|
|
193
|
+
source: 'system',
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
if (activeThreadEffect) {
|
|
197
|
+
this.options.eventBus.emit({
|
|
198
|
+
type: 'thread.session.activated',
|
|
199
|
+
payload: {
|
|
200
|
+
workspaceId: row.workspace_id,
|
|
201
|
+
threadId: activeThreadEffect.threadId,
|
|
202
|
+
previousThreadId: threadId,
|
|
203
|
+
reason: activeThreadEffect.reason,
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
this.emitBridgeEvent({
|
|
208
|
+
type: 'reply',
|
|
209
|
+
sessionKey: row.bridge_session_key,
|
|
210
|
+
content: sessionCommandResult.displayText,
|
|
211
|
+
});
|
|
212
|
+
this.emitBridgeEvent({
|
|
213
|
+
type: 'typing_stop',
|
|
214
|
+
sessionKey: row.bridge_session_key,
|
|
215
|
+
});
|
|
216
|
+
return { runId: '' };
|
|
217
|
+
}
|
|
218
|
+
const commandResult = await this.commandService.execute({
|
|
219
|
+
threadId,
|
|
220
|
+
workspaceId: row.workspace_id,
|
|
221
|
+
content,
|
|
222
|
+
defaultAgentType: config.agentType,
|
|
223
|
+
});
|
|
224
|
+
if (commandResult.handled) {
|
|
225
|
+
this.options.store.appendMessage(threadId, 'assistant', commandResult.displayText, 'final');
|
|
155
226
|
this.options.eventBus.emit({
|
|
156
227
|
type: 'thread.message.accepted',
|
|
157
228
|
payload: {
|
|
158
229
|
threadId,
|
|
159
230
|
workspaceId: row.workspace_id,
|
|
160
231
|
role: 'assistant',
|
|
161
|
-
content:
|
|
232
|
+
content: commandResult.displayText,
|
|
162
233
|
kind: 'final',
|
|
163
234
|
source: 'system',
|
|
164
235
|
},
|
|
@@ -166,7 +237,7 @@ class LocalCoreAcpBackend {
|
|
|
166
237
|
this.emitBridgeEvent({
|
|
167
238
|
type: 'reply',
|
|
168
239
|
sessionKey: row.bridge_session_key,
|
|
169
|
-
content:
|
|
240
|
+
content: commandResult.displayText,
|
|
170
241
|
});
|
|
171
242
|
this.emitBridgeEvent({
|
|
172
243
|
type: 'typing_stop',
|
|
@@ -246,40 +317,6 @@ class LocalCoreAcpBackend {
|
|
|
246
317
|
});
|
|
247
318
|
return { runId: session.currentRunId };
|
|
248
319
|
}
|
|
249
|
-
async handleLocalSlashCommand(threadId, workspaceId, content) {
|
|
250
|
-
const command = (0, local_core_slash_commands_js_1.parseSlashCommand)(content);
|
|
251
|
-
if (!command || command.name !== 'mode') {
|
|
252
|
-
return '';
|
|
253
|
-
}
|
|
254
|
-
const row = this.options.store.getThreadRow(threadId);
|
|
255
|
-
const currentMode = row?.agent_mode || local_core_slash_commands_js_1.DEFAULT_AGENT_MODE;
|
|
256
|
-
const requested = command.args.join(' ').trim();
|
|
257
|
-
if (!requested) {
|
|
258
|
-
return (0, local_core_slash_commands_js_1.modeHelpText)(currentMode);
|
|
259
|
-
}
|
|
260
|
-
const mode = (0, local_core_slash_commands_js_1.normalizeAgentMode)(requested);
|
|
261
|
-
if (!mode) {
|
|
262
|
-
return `未知模式:${requested}\n\n${(0, local_core_slash_commands_js_1.modeHelpText)(currentMode)}`;
|
|
263
|
-
}
|
|
264
|
-
this.options.store.updateThreadAgentMode(threadId, mode);
|
|
265
|
-
try {
|
|
266
|
-
await this.sessionCoordinator.setThreadMode(threadId, mode);
|
|
267
|
-
}
|
|
268
|
-
catch (error) {
|
|
269
|
-
this.options.log?.(`localcore-acp mode sync failed for ${threadId}: ${error instanceof Error ? error.message : String(error)}`);
|
|
270
|
-
}
|
|
271
|
-
this.options.store.createAuditEvent({
|
|
272
|
-
type: 'permission.changed',
|
|
273
|
-
workspaceId,
|
|
274
|
-
actor: 'local',
|
|
275
|
-
summary: `Thread agent mode changed to ${mode}.`,
|
|
276
|
-
metadata: { threadId, mode },
|
|
277
|
-
});
|
|
278
|
-
if (mode === 'bypassPermissions') {
|
|
279
|
-
return '已切换到 yolo 模式:后续工具调用会跳过权限申请。使用 `/mode default` 可恢复默认权限。';
|
|
280
|
-
}
|
|
281
|
-
return `已切换到 ${(0, local_core_slash_commands_js_1.formatAgentMode)(mode)} 模式。`;
|
|
282
|
-
}
|
|
283
320
|
async interruptRun(runId) {
|
|
284
321
|
return this.sessionCoordinator.interruptRun(runId);
|
|
285
322
|
}
|
|
@@ -29,11 +29,13 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
29
29
|
async ensureSession(threadId, bridgeSessionKey, config, options = {}) {
|
|
30
30
|
const existing = this.sessions.get(threadId);
|
|
31
31
|
const permissionMode = this.resolveLaunchPermissionMode(threadId, options.permissionMode);
|
|
32
|
+
const configKey = this.buildLaunchConfigKey(config);
|
|
32
33
|
const runtimeEnvKey = this.buildRuntimeEnvKey(options.runtimeEnv);
|
|
33
34
|
if (existing
|
|
34
35
|
&& !existing.closed
|
|
35
36
|
&& existing.sessionId
|
|
36
37
|
&& existing.launchPermissionMode === permissionMode
|
|
38
|
+
&& existing.launchConfigKey === configKey
|
|
37
39
|
&& existing.launchRuntimeEnvKey === runtimeEnvKey) {
|
|
38
40
|
return existing;
|
|
39
41
|
}
|
|
@@ -51,6 +53,7 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
51
53
|
runtimeEnv: this.buildAgentRuntimeEnv(threadId, String(baseEnv.PATH || ''), options.runtimeEnv),
|
|
52
54
|
});
|
|
53
55
|
session.launchPermissionMode = permissionMode;
|
|
56
|
+
session.launchConfigKey = configKey;
|
|
54
57
|
session.launchRuntimeEnvKey = runtimeEnvKey;
|
|
55
58
|
this.sessions.set(threadId, session);
|
|
56
59
|
await this.options.transport.initializeSession(session);
|
|
@@ -204,6 +207,16 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
204
207
|
...runtimeEnv,
|
|
205
208
|
};
|
|
206
209
|
}
|
|
210
|
+
buildLaunchConfigKey(config) {
|
|
211
|
+
return JSON.stringify({
|
|
212
|
+
agentType: config.agentType,
|
|
213
|
+
workDir: config.workDir,
|
|
214
|
+
command: config.command,
|
|
215
|
+
args: config.args || [],
|
|
216
|
+
env: config.env || {},
|
|
217
|
+
model: config.model || '',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
207
220
|
resolveLaunchPermissionMode(threadId, permissionModeOverride = '') {
|
|
208
221
|
const row = this.options.store.getThreadRow(threadId);
|
|
209
222
|
const mode = String(permissionModeOverride || row?.agent_mode || '').trim();
|