@kafca/agentdock 0.1.31 → 0.1.34
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/LICENSE.md +73 -0
- package/README.md +11 -0
- package/dist/renderer/assets/{Badge-DaHt-aUT.js → Badge-BDxYXRKv.js} +1 -1
- package/dist/renderer/assets/{Chat-Dzeq3kiD.js → Chat-B-ZXd4Ld.js} +1 -1
- package/dist/renderer/assets/{ChatMarkdown-B-L5Roai.js → ChatMarkdown-Dn4XvCke.js} +1 -1
- package/dist/renderer/assets/{Config-BI4LJ7Fw.js → Config-DMOYyKOD.js} +1 -1
- package/dist/renderer/assets/{CronList-Dic7pblj.js → CronList-CMBhMs1J.js} +1 -1
- package/dist/renderer/assets/{Dashboard-C0_ATyGe.js → Dashboard-DApD4wOA.js} +2 -2
- package/dist/renderer/assets/{EmptyState-SQsG1DZP.js → EmptyState-CqcPky2i.js} +1 -1
- package/dist/renderer/assets/{KnowledgeDetail-D4yUJzp7.js → KnowledgeDetail-DMOXK9Nz.js} +1 -1
- package/dist/renderer/assets/{KnowledgeHome-L0tsg-oo.js → KnowledgeHome-Dv4Ttb6N.js} +1 -1
- package/dist/renderer/assets/{Logs-C2Jdr3uQ.js → Logs-CHrUm25Y.js} +1 -1
- package/dist/renderer/assets/{Modal-GUH3iPXo.js → Modal-Cj_0qtXr.js} +1 -1
- package/dist/renderer/assets/{Page-m42FBy97.js → Page-BlKjqLN4.js} +1 -1
- package/dist/renderer/assets/{ProjectDetail-RF_sagPO.js → ProjectDetail-aMl1VGTt.js} +1 -1
- package/dist/renderer/assets/{ProjectList-Cyr8RDK3.js → ProjectList-R2YvsII0.js} +1 -1
- package/dist/renderer/assets/{Select-CRlDgI5s.js → Select-CrqwGrrm.js} +1 -1
- package/dist/renderer/assets/{SessionChat-_HhzMwEO.js → SessionChat-CGtpyGKR.js} +1 -1
- package/dist/renderer/assets/{SessionList-DNwZjGTv.js → SessionList-D8gRUc8M.js} +1 -1
- package/dist/renderer/assets/{ThreadChat-DxBmdsAm.js → ThreadChat-BCGm6bQP.js} +1 -1
- package/dist/renderer/assets/{Workspace-DFphG85O.js → Workspace-DnePK6tn.js} +1 -1
- package/dist/renderer/assets/{arrow-left-bILMzse7.js → arrow-left-SVmCyBR4.js} +1 -1
- package/dist/renderer/assets/{book-open-BNBWEEve.js → book-open-CZi1avEJ.js} +1 -1
- package/dist/renderer/assets/{check-MGp5kvnb.js → check-C76I9BFh.js} +1 -1
- package/dist/renderer/assets/{chevron-down-zsfoTlh7.js → chevron-down-C7YSxzHw.js} +1 -1
- package/dist/renderer/assets/{circle-BX_xUSg-.js → circle-_s8tmsAJ.js} +1 -1
- package/dist/renderer/assets/{desktop-CgrO_cdQ.js → desktop-66ot_8sB.js} +1 -1
- package/dist/renderer/assets/{funnel-7442U1wq.js → funnel-cDV0Q_Mr.js} +1 -1
- package/dist/renderer/assets/{heart-B3d8bnSH.js → heart-qMUQm0tf.js} +1 -1
- package/dist/renderer/assets/{index-BBaYsVjU.js → index-BY88QEsS.js} +2 -2
- package/dist/renderer/assets/{index-5YUqCvBf.js → index-Cr6erCLm.js} +1 -1
- package/dist/renderer/assets/{pencil-QzWgkmoH.js → pencil-C3MA3apq.js} +1 -1
- package/dist/renderer/assets/{play-Bsc8hSI7.js → play-VZKHv5dN.js} +1 -1
- package/dist/renderer/assets/{plug-CRY7sjvB.js → plug-Cm7l0fVk.js} +1 -1
- package/dist/renderer/assets/{plus-Dr5Ei8Ud.js → plus-DjGK7f-K.js} +1 -1
- package/dist/renderer/assets/projects-Dcki78KB.js +1 -0
- package/dist/renderer/assets/{save-giJnp2Ki.js → save-Doi-FwDR.js} +1 -1
- package/dist/renderer/assets/{search-DcvHLmKs.js → search-DHqpbK_c.js} +1 -1
- package/dist/renderer/assets/{server-D_Qu8If5.js → server-Bmtxxlph.js} +1 -1
- package/dist/renderer/assets/{session-utils-CsASahfU.js → session-utils-Z-jLtVLY.js} +1 -1
- package/dist/renderer/assets/{sessions-eMpPqp4P.js → sessions-C5TSSo_R.js} +1 -1
- package/dist/renderer/assets/{shield-check-BpF0uIw-.js → shield-check-DhZ05nhI.js} +1 -1
- package/dist/renderer/assets/{trash-2-OJFmx3xk.js → trash-2-DiyFflVR.js} +1 -1
- package/dist/renderer/assets/{user-GL_ivaV6.js → user-CgsIPd7T.js} +1 -1
- package/dist/renderer/assets/{wifi-off-CQT5VNQl.js → wifi-off-CqWbWFzp.js} +1 -1
- package/dist/renderer/index.html +1 -1
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +3 -6
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-response-processor.js +2 -4
- package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +23 -6
- package/dist-electron/services/local-ai-core/src/cli/lac.js +9 -2
- package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +9 -14
- package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +9 -39
- package/dist-electron/services/local-ai-core/src/scheduler/lark-schedule-adapter.js +20 -10
- package/dist-electron/services/local-ai-core/src/scheduler/local-schedule-adapter.js +10 -2
- package/dist-electron/services/local-ai-core/src/scheduler/scheduled-conversation-executor.js +22 -0
- package/dist-electron/services/local-ai-core/src/scheduler/scheduled-job-application-service.js +84 -0
- package/dist-electron/services/local-ai-core/src/scheduler/scheduled-job-route.js +57 -0
- package/dist-electron/services/local-ai-core/src/scheduler/weixin-schedule-adapter.js +19 -10
- package/dist-electron/{electron → tests/contracts}/local-core-contracts.test.js +1 -1
- package/dist-electron/{electron → tests/electron}/agent-runtime-detector.test.js +2 -2
- package/dist-electron/{electron → tests/electron}/lac-cli.test.js +56 -3
- package/dist-electron/{electron → tests/electron}/plugin-kernel.test.js +14 -13
- package/dist-electron/{electron → tests/electron}/renderer-packaging.test.js +11 -6
- package/dist-electron/{electron → tests/electron}/runtime-detection-service.test.js +1 -1
- package/dist-electron/{electron → tests/electron}/security-approval-store.test.js +2 -2
- package/dist-electron/{electron → tests/electron}/workspace-task-store.test.js +217 -6
- package/dist-electron/{electron → tests/integration}/channel-content.test.js +2 -2
- package/dist-electron/{electron → tests/integration}/local-core-acp-content.test.js +1 -1
- package/dist-electron/{electron → tests/integration}/local-core-refactor.test.js +27 -18
- package/package.json +3 -2
- package/dist/renderer/assets/projects-BDYSOFIJ.js +0 -1
- /package/dist-electron/{electron → tests/contracts}/architecture-docs.test.js +0 -0
- /package/dist-electron/{electron → tests/electron}/knowledge-skill-script.test.js +0 -0
|
@@ -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-BBaYsVjU.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{G as Te,aK as Ae,r as c,j as x,aL as pe,aM as Ne,aA as te}from"./index-BY88QEsS.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"),`
|
|
2
2
|
.`.concat(vt,` {
|
|
3
3
|
overflow: hidden `).concat(r,`;
|
|
4
4
|
padding-right: `).concat(a,"px ").concat(r,`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as t}from"./index-BY88QEsS.js";const e=()=>t.get("/projects"),r=o=>t.get(`/projects/${o}`);export{r as g,e as l};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as o}from"./index-
|
|
1
|
+
import{z as o}from"./index-BY88QEsS.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};
|
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-BY88QEsS.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/index-DFiJR0vv.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body class="bg-[#f5f5f7] dark:bg-[#151516]">
|
|
@@ -12,6 +12,7 @@ const command_risk_js_1 = require("../security/command-risk.js");
|
|
|
12
12
|
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
|
+
const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
|
|
15
16
|
const ACP_PROMPT_TIMEOUT_MS = 15 * 60 * 1000;
|
|
16
17
|
class LocalCoreAcpBackend {
|
|
17
18
|
options;
|
|
@@ -95,12 +96,7 @@ class LocalCoreAcpBackend {
|
|
|
95
96
|
return {
|
|
96
97
|
workspaceId: binding.workspace_id,
|
|
97
98
|
platform: binding.platform,
|
|
98
|
-
route:
|
|
99
|
-
type: binding.platform === 'lark' ? 'channel.chat' : binding.platform,
|
|
100
|
-
channelId: binding.chat_id,
|
|
101
|
-
participantId: binding.platform_user_id,
|
|
102
|
-
threadId,
|
|
103
|
-
},
|
|
99
|
+
route: (0, scheduled_job_route_js_1.routeFromPlatformThreadBinding)(binding),
|
|
104
100
|
};
|
|
105
101
|
},
|
|
106
102
|
scheduler: options.scheduler,
|
|
@@ -303,6 +299,7 @@ class LocalCoreAcpBackend {
|
|
|
303
299
|
try {
|
|
304
300
|
session = await this.sessionCoordinator.ensureSession(threadId, bridgeSessionKey, config, {
|
|
305
301
|
permissionMode: options.permissionMode,
|
|
302
|
+
runtimeEnv: options.runtimeEnv,
|
|
306
303
|
});
|
|
307
304
|
const priorAssistantFinalMessages = this.options.store
|
|
308
305
|
.getThread(threadId, [])
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LocalCoreAcpResponseProcessor = void 0;
|
|
4
4
|
const cron_command_detector_js_1 = require("../scheduler/cron-command-detector.js");
|
|
5
5
|
const job_id_js_1 = require("../scheduler/job-id.js");
|
|
6
|
+
const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
|
|
6
7
|
class LocalCoreAcpResponseProcessor {
|
|
7
8
|
options;
|
|
8
9
|
constructor(options) {
|
|
@@ -74,10 +75,7 @@ class LocalCoreAcpResponseProcessor {
|
|
|
74
75
|
const job = await this.options.scheduler.createJob({
|
|
75
76
|
workspaceId: binding.workspaceId,
|
|
76
77
|
platform: binding.platform,
|
|
77
|
-
route:
|
|
78
|
-
...binding.route,
|
|
79
|
-
threadId,
|
|
80
|
-
},
|
|
78
|
+
route: (0, scheduled_job_route_js_1.withoutThreadRoute)(binding.route),
|
|
81
79
|
name: command.name,
|
|
82
80
|
schedule: command.schedule,
|
|
83
81
|
scheduleDescription: command.scheduleDescription,
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LocalCoreAcpSessionCoordinator = void 0;
|
|
4
4
|
const node_path_1 = require("node:path");
|
|
5
|
+
const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
|
|
5
6
|
class LocalCoreAcpSessionCoordinator {
|
|
6
7
|
options;
|
|
7
8
|
sessions = new Map();
|
|
@@ -28,10 +29,12 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
28
29
|
async ensureSession(threadId, bridgeSessionKey, config, options = {}) {
|
|
29
30
|
const existing = this.sessions.get(threadId);
|
|
30
31
|
const permissionMode = this.resolveLaunchPermissionMode(threadId, options.permissionMode);
|
|
32
|
+
const runtimeEnvKey = this.buildRuntimeEnvKey(options.runtimeEnv);
|
|
31
33
|
if (existing
|
|
32
34
|
&& !existing.closed
|
|
33
35
|
&& existing.sessionId
|
|
34
|
-
&& existing.launchPermissionMode === permissionMode
|
|
36
|
+
&& existing.launchPermissionMode === permissionMode
|
|
37
|
+
&& existing.launchRuntimeEnvKey === runtimeEnvKey) {
|
|
35
38
|
return existing;
|
|
36
39
|
}
|
|
37
40
|
if (existing) {
|
|
@@ -45,9 +48,10 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
45
48
|
threadId,
|
|
46
49
|
bridgeSessionKey,
|
|
47
50
|
config,
|
|
48
|
-
runtimeEnv: this.buildAgentRuntimeEnv(threadId, String(baseEnv.PATH || '')),
|
|
51
|
+
runtimeEnv: this.buildAgentRuntimeEnv(threadId, String(baseEnv.PATH || ''), options.runtimeEnv),
|
|
49
52
|
});
|
|
50
53
|
session.launchPermissionMode = permissionMode;
|
|
54
|
+
session.launchRuntimeEnvKey = runtimeEnvKey;
|
|
51
55
|
this.sessions.set(threadId, session);
|
|
52
56
|
await this.options.transport.initializeSession(session);
|
|
53
57
|
const row = this.options.store.getThreadRow(threadId);
|
|
@@ -159,7 +163,13 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
159
163
|
this.sessions.delete(session.threadId);
|
|
160
164
|
}
|
|
161
165
|
}
|
|
162
|
-
|
|
166
|
+
buildRuntimeEnvKey(runtimeEnv = {}) {
|
|
167
|
+
return Object.keys(runtimeEnv)
|
|
168
|
+
.sort()
|
|
169
|
+
.map((key) => `${key}=${runtimeEnv[key]}`)
|
|
170
|
+
.join('\n');
|
|
171
|
+
}
|
|
172
|
+
buildAgentRuntimeEnv(threadId, existingPath, runtimeEnv = {}) {
|
|
163
173
|
const row = this.options.store.getThreadRow(threadId);
|
|
164
174
|
if (!row) {
|
|
165
175
|
return {};
|
|
@@ -175,8 +185,12 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
175
185
|
env.LOCAL_AI_WORKSPACE_PATH = workspace.path;
|
|
176
186
|
}
|
|
177
187
|
if (binding) {
|
|
178
|
-
env.LOCAL_AI_PLATFORM = binding.platform;
|
|
179
|
-
env.LOCAL_AI_ROUTE_TYPE =
|
|
188
|
+
env.LOCAL_AI_PLATFORM = (0, scheduled_job_route_js_1.getChannelPlatformBase)(binding.platform);
|
|
189
|
+
env.LOCAL_AI_ROUTE_TYPE = (0, scheduled_job_route_js_1.routeTypeForPlatform)(binding.platform);
|
|
190
|
+
const instanceId = (0, scheduled_job_route_js_1.getChannelPlatformInstanceId)(binding.platform);
|
|
191
|
+
if (instanceId) {
|
|
192
|
+
env.LOCAL_AI_PLATFORM_INSTANCE_ID = instanceId;
|
|
193
|
+
}
|
|
180
194
|
env.LOCAL_AI_CHAT_ID = binding.chat_id;
|
|
181
195
|
env.LOCAL_AI_PLATFORM_USER_ID = binding.platform_user_id;
|
|
182
196
|
}
|
|
@@ -185,7 +199,10 @@ class LocalCoreAcpSessionCoordinator {
|
|
|
185
199
|
? `${this.options.cliBinDir}${node_path_1.delimiter}${existingPath}`
|
|
186
200
|
: this.options.cliBinDir;
|
|
187
201
|
}
|
|
188
|
-
return
|
|
202
|
+
return {
|
|
203
|
+
...env,
|
|
204
|
+
...runtimeEnv,
|
|
205
|
+
};
|
|
189
206
|
}
|
|
190
207
|
resolveLaunchPermissionMode(threadId, permissionModeOverride = '') {
|
|
191
208
|
const row = this.options.store.getThreadRow(threadId);
|
|
@@ -7,6 +7,7 @@ exports.runCli = runCli;
|
|
|
7
7
|
const node_process_1 = __importDefault(require("node:process"));
|
|
8
8
|
const index_js_1 = require("../../../../packages/contracts/src/index.js");
|
|
9
9
|
const job_id_js_1 = require("../scheduler/job-id.js");
|
|
10
|
+
const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
|
|
10
11
|
const DEFAULT_BASE_URL = 'http://127.0.0.1:9831/api/local/v1';
|
|
11
12
|
async function runCli(argv, env = node_process_1.default.env, io = node_process_1.default) {
|
|
12
13
|
try {
|
|
@@ -69,6 +70,7 @@ async function handleChannelSendFile(flags, env, io, json) {
|
|
|
69
70
|
route: {
|
|
70
71
|
type: 'channel.chat',
|
|
71
72
|
channelId: target,
|
|
73
|
+
instanceId: context.platformInstanceId || undefined,
|
|
72
74
|
participantId: getFlag(flags, 'participant-id') || context.platformUserId || undefined,
|
|
73
75
|
},
|
|
74
76
|
parts: [{
|
|
@@ -118,7 +120,7 @@ async function handleList(flags, env, io, json) {
|
|
|
118
120
|
const suffix = workspaceId ? `?workspace_id=${encodeURIComponent(workspaceId)}` : '';
|
|
119
121
|
const response = await request(context.baseUrl, 'GET', `/scheduler/jobs${suffix}`);
|
|
120
122
|
const jobs = threadId
|
|
121
|
-
? response.jobs.filter((job) => job.route.threadId === threadId)
|
|
123
|
+
? response.jobs.filter((job) => job.route.threadId === threadId || (0, scheduled_job_route_js_1.scheduledJobMatchesCliContext)(job, context))
|
|
122
124
|
: response.jobs;
|
|
123
125
|
print(json, io.stdout, { jobs: jobs.map(presentJob) }, jobs.length === 0 ? 'No scheduler jobs.' : jobs.map(formatJobLine).join('\n'));
|
|
124
126
|
return 0;
|
|
@@ -205,7 +207,11 @@ async function request(baseUrl, method, path, body) {
|
|
|
205
207
|
return payload.data;
|
|
206
208
|
}
|
|
207
209
|
function resolveContext(flags, env) {
|
|
208
|
-
const
|
|
210
|
+
const rawPlatform = getFlag(flags, 'platform') || String(env.LOCAL_AI_PLATFORM || '');
|
|
211
|
+
const platform = rawPlatform ? (0, scheduled_job_route_js_1.getChannelPlatformBase)(rawPlatform) : '';
|
|
212
|
+
const platformInstanceId = getFlag(flags, 'instance-id') ||
|
|
213
|
+
String(env.LOCAL_AI_PLATFORM_INSTANCE_ID || '') ||
|
|
214
|
+
(0, scheduled_job_route_js_1.getChannelPlatformInstanceId)(rawPlatform);
|
|
209
215
|
const chatId = getFlag(flags, 'chat-id') || String(env.LOCAL_AI_CHAT_ID || '');
|
|
210
216
|
const platformUserId = getFlag(flags, 'platform-user-id') || String(env.LOCAL_AI_PLATFORM_USER_ID || '');
|
|
211
217
|
return {
|
|
@@ -214,6 +220,7 @@ function resolveContext(flags, env) {
|
|
|
214
220
|
workspacePath: getFlag(flags, 'workspace-path') || String(env.LOCAL_AI_WORKSPACE_PATH || ''),
|
|
215
221
|
threadId: normalizeMaybeBooleanFlag(getFlag(flags, 'thread')) || String(env.LOCAL_AI_THREAD_ID || ''),
|
|
216
222
|
platform,
|
|
223
|
+
platformInstanceId,
|
|
217
224
|
routeType: String(env.LOCAL_AI_ROUTE_TYPE || '') || (platform === 'lark' && chatId && platformUserId ? 'channel.chat' : ''),
|
|
218
225
|
chatId,
|
|
219
226
|
platformUserId,
|
|
@@ -19,6 +19,7 @@ const scheduler_local_plugin_js_1 = require("../plugins/builtin/scheduler-local-
|
|
|
19
19
|
const scheduler_weixin_plugin_js_1 = require("../plugins/builtin/scheduler-weixin-plugin.js");
|
|
20
20
|
const workspace_router_js_1 = require("../router/workspace-router.js");
|
|
21
21
|
const local_core_runtime_state_js_1 = require("../runtime/local-core-runtime-state.js");
|
|
22
|
+
const scheduled_job_application_service_js_1 = require("../scheduler/scheduled-job-application-service.js");
|
|
22
23
|
const scheduler_service_js_1 = require("../scheduler/scheduler-service.js");
|
|
23
24
|
function bootstrapLocalCoreKernel(options) {
|
|
24
25
|
const capabilities = new capability_registry_js_1.LocalCoreCapabilityRegistry();
|
|
@@ -261,22 +262,15 @@ function bootstrapLocalCoreRuntime(options) {
|
|
|
261
262
|
eventBus: kernel.context.bus,
|
|
262
263
|
log: options.log,
|
|
263
264
|
});
|
|
265
|
+
const scheduledJobs = new scheduled_job_application_service_js_1.ScheduledJobApplicationService({
|
|
266
|
+
store,
|
|
267
|
+
scheduler,
|
|
268
|
+
});
|
|
264
269
|
workspaceRouter.setSchedulerBridge({
|
|
265
|
-
createJob: async ({ workspaceId, platform, route, name, schedule, scheduleDescription, message }) =>
|
|
266
|
-
|
|
267
|
-
platform,
|
|
268
|
-
route,
|
|
269
|
-
triggerType: 'cron',
|
|
270
|
-
cronExpr: schedule,
|
|
271
|
-
promptTemplate: message,
|
|
272
|
-
description: `${name} · ${scheduleDescription}`,
|
|
273
|
-
enabled: true,
|
|
274
|
-
}),
|
|
275
|
-
listJobsForThread: async (threadId) => scheduler
|
|
276
|
-
.listJobs()
|
|
277
|
-
.filter((job) => job.route.threadId === threadId),
|
|
270
|
+
createJob: async ({ workspaceId, platform, route, name, schedule, scheduleDescription, message }) => scheduledJobs.createCronJob({ workspaceId, platform, route, name, schedule, scheduleDescription, message }),
|
|
271
|
+
listJobsForThread: async (threadId) => scheduledJobs.listJobsForThread(threadId),
|
|
278
272
|
deleteJob: async (jobId) => {
|
|
279
|
-
|
|
273
|
+
scheduledJobs.deleteJob(jobId);
|
|
280
274
|
},
|
|
281
275
|
});
|
|
282
276
|
return {
|
|
@@ -291,6 +285,7 @@ function bootstrapLocalCoreRuntime(options) {
|
|
|
291
285
|
knowledgeAttachments,
|
|
292
286
|
workspaceRouter,
|
|
293
287
|
scheduler,
|
|
288
|
+
scheduledJobs,
|
|
294
289
|
async start() {
|
|
295
290
|
await kernel.lifecycle.startAll();
|
|
296
291
|
await scheduler.start();
|
|
@@ -11,7 +11,7 @@ class LocalCoreController extends node_events_1.EventEmitter {
|
|
|
11
11
|
workspaceRouter;
|
|
12
12
|
knowledgeProvider;
|
|
13
13
|
channelRuntimes;
|
|
14
|
-
|
|
14
|
+
scheduledJobs;
|
|
15
15
|
kernel;
|
|
16
16
|
runtime;
|
|
17
17
|
runtimeDetection;
|
|
@@ -32,7 +32,7 @@ class LocalCoreController extends node_events_1.EventEmitter {
|
|
|
32
32
|
this.workspaceRouter = this.runtime.workspaceRouter;
|
|
33
33
|
const runtimeChannels = this.runtime.channelRuntimes || [this.runtime.channelRuntime, this.runtime.weixinChannelRuntime];
|
|
34
34
|
this.channelRuntimes = new Map(runtimeChannels.filter(Boolean).map((runtime) => [runtime.platform, runtime]));
|
|
35
|
-
this.
|
|
35
|
+
this.scheduledJobs = this.runtime.scheduledJobs;
|
|
36
36
|
this.runtimeDetection = new runtime_detection_service_js_1.RuntimeDetectionService({
|
|
37
37
|
userDataPath,
|
|
38
38
|
readConfig: async () => (await this.readConfigFile()).parsed,
|
|
@@ -181,59 +181,29 @@ class LocalCoreController extends node_events_1.EventEmitter {
|
|
|
181
181
|
return this.workspaceRouter.listAuditEvents(query);
|
|
182
182
|
}
|
|
183
183
|
async listScheduledJobs(workspaceId) {
|
|
184
|
-
return this.
|
|
184
|
+
return this.scheduledJobs.listJobs(workspaceId);
|
|
185
185
|
}
|
|
186
186
|
async getScheduledJob(jobId) {
|
|
187
|
-
const job = this.
|
|
187
|
+
const job = this.scheduledJobs.getJob(jobId);
|
|
188
188
|
if (!job) {
|
|
189
189
|
throw new Error(`Scheduled job not found: ${jobId}`);
|
|
190
190
|
}
|
|
191
191
|
return job;
|
|
192
192
|
}
|
|
193
193
|
async createScheduledJob(input) {
|
|
194
|
-
return this.
|
|
195
|
-
}
|
|
196
|
-
resolveScheduledJobCreateInput(input) {
|
|
197
|
-
if (input.platform && input.route) {
|
|
198
|
-
return input;
|
|
199
|
-
}
|
|
200
|
-
const threadId = String(input.threadId || input.route?.threadId || '').trim();
|
|
201
|
-
if (threadId) {
|
|
202
|
-
const binding = this.runtime.store.getPlatformThreadBindingByThreadId(threadId);
|
|
203
|
-
if (binding && binding.workspace_id === input.workspaceId) {
|
|
204
|
-
return {
|
|
205
|
-
...input,
|
|
206
|
-
platform: binding.platform,
|
|
207
|
-
route: {
|
|
208
|
-
type: 'channel.chat',
|
|
209
|
-
channelId: binding.chat_id,
|
|
210
|
-
participantId: binding.platform_user_id,
|
|
211
|
-
threadId,
|
|
212
|
-
},
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
...input,
|
|
218
|
-
platform: 'local',
|
|
219
|
-
route: {
|
|
220
|
-
type: 'local.thread',
|
|
221
|
-
channelId: input.workspaceId,
|
|
222
|
-
...(threadId ? { threadId } : {}),
|
|
223
|
-
},
|
|
224
|
-
};
|
|
194
|
+
return this.scheduledJobs.createJob(input);
|
|
225
195
|
}
|
|
226
196
|
async updateScheduledJob(jobId, input) {
|
|
227
|
-
return this.
|
|
197
|
+
return this.scheduledJobs.updateJob(jobId, input);
|
|
228
198
|
}
|
|
229
199
|
async deleteScheduledJob(jobId) {
|
|
230
|
-
return this.
|
|
200
|
+
return this.scheduledJobs.deleteJob(jobId);
|
|
231
201
|
}
|
|
232
202
|
async runScheduledJob(jobId) {
|
|
233
|
-
return this.
|
|
203
|
+
return this.scheduledJobs.runJobNow(jobId);
|
|
234
204
|
}
|
|
235
205
|
async listScheduledJobRuns(jobId) {
|
|
236
|
-
return this.
|
|
206
|
+
return this.scheduledJobs.listJobRuns(jobId);
|
|
237
207
|
}
|
|
238
208
|
async listThreads(workspaceId) {
|
|
239
209
|
return this.workspaceRouter.listThreads(workspaceId);
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LarkScheduleAdapter = void 0;
|
|
4
4
|
const scheduled_conversation_executor_js_1 = require("./scheduled-conversation-executor.js");
|
|
5
5
|
const lark_execution_policies_js_1 = require("./lark-execution-policies.js");
|
|
6
|
+
const scheduled_job_route_js_1 = require("./scheduled-job-route.js");
|
|
6
7
|
class LarkScheduleAdapter {
|
|
7
8
|
options;
|
|
8
9
|
executor;
|
|
@@ -15,7 +16,7 @@ class LarkScheduleAdapter {
|
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
supports(job) {
|
|
18
|
-
return job.platform
|
|
19
|
+
return (0, scheduled_job_route_js_1.platformMatches)(job.platform, 'lark') && (job.route.type === 'channel.chat' || job.route.type === 'lark_chat');
|
|
19
20
|
}
|
|
20
21
|
async execute(context) {
|
|
21
22
|
const { job } = context;
|
|
@@ -31,7 +32,7 @@ class LarkScheduleAdapter {
|
|
|
31
32
|
if (!channelRuntime.sendScheduledMessage) {
|
|
32
33
|
throw new Error('Lark channel runtime does not support scheduled delivery.');
|
|
33
34
|
}
|
|
34
|
-
platformMessageId = await channelRuntime.sendScheduledMessage(job.workspaceId, job.route, execution.replyText);
|
|
35
|
+
platformMessageId = await channelRuntime.sendScheduledMessage(job.workspaceId, (0, scheduled_job_route_js_1.routeWithPlatformInstance)((0, scheduled_job_route_js_1.withoutThreadRoute)(job.route), job.platform), execution.replyText);
|
|
35
36
|
if (!platformMessageId) {
|
|
36
37
|
throw new Error('Lark gateway did not return a message id for scheduled delivery.');
|
|
37
38
|
}
|
|
@@ -46,20 +47,20 @@ class LarkScheduleAdapter {
|
|
|
46
47
|
async resolveThread(job) {
|
|
47
48
|
const workspaceRouter = this.options.getWorkspaceRouter();
|
|
48
49
|
const route = job.route;
|
|
49
|
-
if (route.threadId) {
|
|
50
|
-
await workspaceRouter.getThread(route.threadId);
|
|
51
|
-
return route.threadId;
|
|
52
|
-
}
|
|
53
50
|
const channelId = route.channelId;
|
|
54
51
|
const participantId = route.participantId || '';
|
|
55
|
-
const binding = this.options.store.getPlatformThreadBinding(job.workspaceId, channelId, participantId);
|
|
56
|
-
if (binding?.thread_id) {
|
|
52
|
+
const binding = this.options.store.getPlatformThreadBinding(job.workspaceId, channelId, participantId, job.platform);
|
|
53
|
+
if (binding?.thread_id && await this.threadExists(binding.thread_id)) {
|
|
57
54
|
return binding.thread_id;
|
|
58
55
|
}
|
|
56
|
+
if (route.threadId && await this.threadExists(route.threadId)) {
|
|
57
|
+
return route.threadId;
|
|
58
|
+
}
|
|
59
59
|
const thread = await workspaceRouter.createThread(job.workspaceId, job.description || `Scheduled ${job.platform} task`);
|
|
60
60
|
const now = new Date().toISOString();
|
|
61
61
|
this.options.store.upsertPlatformThreadBinding({
|
|
62
62
|
workspace_id: job.workspaceId,
|
|
63
|
+
platform: job.platform,
|
|
63
64
|
chat_id: channelId,
|
|
64
65
|
platform_user_id: participantId,
|
|
65
66
|
thread_id: thread.id,
|
|
@@ -67,11 +68,20 @@ class LarkScheduleAdapter {
|
|
|
67
68
|
created_at: now,
|
|
68
69
|
updated_at: now,
|
|
69
70
|
});
|
|
70
|
-
const authorized = this.options.store.getAuthorizedUser(job.workspaceId, participantId);
|
|
71
|
+
const authorized = this.options.store.getAuthorizedUser(job.workspaceId, participantId, job.platform);
|
|
71
72
|
if (authorized) {
|
|
72
|
-
this.options.store.updateAuthorizedUserThread(job.workspaceId, participantId, thread.id);
|
|
73
|
+
this.options.store.updateAuthorizedUserThread(job.workspaceId, participantId, thread.id, job.platform);
|
|
73
74
|
}
|
|
74
75
|
return thread.id;
|
|
75
76
|
}
|
|
77
|
+
async threadExists(threadId) {
|
|
78
|
+
try {
|
|
79
|
+
await this.options.getWorkspaceRouter().getThread(threadId);
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
76
86
|
}
|
|
77
87
|
exports.LarkScheduleAdapter = LarkScheduleAdapter;
|
|
@@ -33,8 +33,7 @@ class LocalScheduleAdapter {
|
|
|
33
33
|
}
|
|
34
34
|
async resolveThread(job) {
|
|
35
35
|
const workspaceRouter = this.options.getWorkspaceRouter();
|
|
36
|
-
if (job.route.threadId) {
|
|
37
|
-
await workspaceRouter.getThread(job.route.threadId);
|
|
36
|
+
if (job.route.threadId && await this.threadExists(job.route.threadId)) {
|
|
38
37
|
return job.route.threadId;
|
|
39
38
|
}
|
|
40
39
|
const title = `[Scheduled] ${job.description || job.id}`;
|
|
@@ -46,6 +45,15 @@ class LocalScheduleAdapter {
|
|
|
46
45
|
const created = await workspaceRouter.createThread(job.workspaceId, title);
|
|
47
46
|
return created.id;
|
|
48
47
|
}
|
|
48
|
+
async threadExists(threadId) {
|
|
49
|
+
try {
|
|
50
|
+
await this.options.getWorkspaceRouter().getThread(threadId);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
49
57
|
async waitForRun(runId, timeoutMs = 15 * 60 * 1000) {
|
|
50
58
|
const startedAt = Date.now();
|
|
51
59
|
while (Date.now() - startedAt < timeoutMs) {
|