@kafca/agentdock 0.1.33 → 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.
Files changed (60) hide show
  1. package/dist/renderer/assets/{Badge-VeSLCPPV.js → Badge-BDxYXRKv.js} +1 -1
  2. package/dist/renderer/assets/{Chat-DWTQeTgn.js → Chat-B-ZXd4Ld.js} +1 -1
  3. package/dist/renderer/assets/{ChatMarkdown-C9gSQIVb.js → ChatMarkdown-Dn4XvCke.js} +1 -1
  4. package/dist/renderer/assets/{Config-CTA-pZNR.js → Config-DMOYyKOD.js} +1 -1
  5. package/dist/renderer/assets/{CronList-BngBCnFY.js → CronList-CMBhMs1J.js} +1 -1
  6. package/dist/renderer/assets/{Dashboard-D4pGvDpc.js → Dashboard-DApD4wOA.js} +2 -2
  7. package/dist/renderer/assets/{EmptyState-DMf8rzDs.js → EmptyState-CqcPky2i.js} +1 -1
  8. package/dist/renderer/assets/{KnowledgeDetail-C1Ym_cHk.js → KnowledgeDetail-DMOXK9Nz.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeHome-DPRiR72G.js → KnowledgeHome-Dv4Ttb6N.js} +1 -1
  10. package/dist/renderer/assets/{Logs-CRHecmzO.js → Logs-CHrUm25Y.js} +1 -1
  11. package/dist/renderer/assets/{Modal-BDhhPv2l.js → Modal-Cj_0qtXr.js} +1 -1
  12. package/dist/renderer/assets/{Page-DdDZN7AE.js → Page-BlKjqLN4.js} +1 -1
  13. package/dist/renderer/assets/{ProjectDetail-DCsr3LkW.js → ProjectDetail-aMl1VGTt.js} +1 -1
  14. package/dist/renderer/assets/{ProjectList-Cnm-iLvg.js → ProjectList-R2YvsII0.js} +1 -1
  15. package/dist/renderer/assets/{Select-Dw4FCXhJ.js → Select-CrqwGrrm.js} +1 -1
  16. package/dist/renderer/assets/{SessionChat-O-6abK8x.js → SessionChat-CGtpyGKR.js} +1 -1
  17. package/dist/renderer/assets/{SessionList-5yptvVL9.js → SessionList-D8gRUc8M.js} +1 -1
  18. package/dist/renderer/assets/{ThreadChat-CIM_o2HO.js → ThreadChat-BCGm6bQP.js} +1 -1
  19. package/dist/renderer/assets/{Workspace-D9UeUCNr.js → Workspace-DnePK6tn.js} +1 -1
  20. package/dist/renderer/assets/{arrow-left-CKfxNOXE.js → arrow-left-SVmCyBR4.js} +1 -1
  21. package/dist/renderer/assets/{book-open-CQddlENV.js → book-open-CZi1avEJ.js} +1 -1
  22. package/dist/renderer/assets/{check-CZYvOmIS.js → check-C76I9BFh.js} +1 -1
  23. package/dist/renderer/assets/{chevron-down-CVIWFoXF.js → chevron-down-C7YSxzHw.js} +1 -1
  24. package/dist/renderer/assets/{circle-DSfdQM7k.js → circle-_s8tmsAJ.js} +1 -1
  25. package/dist/renderer/assets/{desktop-B9KUgeOV.js → desktop-66ot_8sB.js} +1 -1
  26. package/dist/renderer/assets/{funnel-pB5NegZB.js → funnel-cDV0Q_Mr.js} +1 -1
  27. package/dist/renderer/assets/{heart-BT5laZ_b.js → heart-qMUQm0tf.js} +1 -1
  28. package/dist/renderer/assets/{index-BYyDk28K.js → index-BY88QEsS.js} +2 -2
  29. package/dist/renderer/assets/{index-zTUUYax3.js → index-Cr6erCLm.js} +1 -1
  30. package/dist/renderer/assets/{pencil-C0thxLi6.js → pencil-C3MA3apq.js} +1 -1
  31. package/dist/renderer/assets/{play-CmZ0kWtt.js → play-VZKHv5dN.js} +1 -1
  32. package/dist/renderer/assets/{plug-CeDQatBe.js → plug-Cm7l0fVk.js} +1 -1
  33. package/dist/renderer/assets/{plus-Di__xFOZ.js → plus-DjGK7f-K.js} +1 -1
  34. package/dist/renderer/assets/projects-Dcki78KB.js +1 -0
  35. package/dist/renderer/assets/{save-BDatCjfO.js → save-Doi-FwDR.js} +1 -1
  36. package/dist/renderer/assets/{search-DnTOjP0C.js → search-DHqpbK_c.js} +1 -1
  37. package/dist/renderer/assets/{server-Ey_iHY6m.js → server-Bmtxxlph.js} +1 -1
  38. package/dist/renderer/assets/{session-utils-DWaM7Rkr.js → session-utils-Z-jLtVLY.js} +1 -1
  39. package/dist/renderer/assets/{sessions-CYYjLD5I.js → sessions-C5TSSo_R.js} +1 -1
  40. package/dist/renderer/assets/{shield-check-Br8BQzcn.js → shield-check-DhZ05nhI.js} +1 -1
  41. package/dist/renderer/assets/{trash-2-7YD616fw.js → trash-2-DiyFflVR.js} +1 -1
  42. package/dist/renderer/assets/{user-BR_5jmr9.js → user-CgsIPd7T.js} +1 -1
  43. package/dist/renderer/assets/{wifi-off-By9QdREz.js → wifi-off-CqWbWFzp.js} +1 -1
  44. package/dist/renderer/index.html +1 -1
  45. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-backend.js +3 -5
  46. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-session-coordinator.js +23 -6
  47. package/dist-electron/services/local-ai-core/src/cli/lac.js +7 -1
  48. package/dist-electron/services/local-ai-core/src/kernel/bootstrap.js +9 -19
  49. package/dist-electron/services/local-ai-core/src/runtime/local-core-controller.js +9 -44
  50. package/dist-electron/services/local-ai-core/src/scheduler/lark-schedule-adapter.js +6 -5
  51. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-conversation-executor.js +22 -0
  52. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-job-application-service.js +84 -0
  53. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-job-route.js +35 -2
  54. package/dist-electron/services/local-ai-core/src/scheduler/weixin-schedule-adapter.js +5 -5
  55. package/dist-electron/tests/electron/lac-cli.test.js +50 -0
  56. package/dist-electron/tests/electron/plugin-kernel.test.js +1 -0
  57. package/dist-electron/tests/electron/workspace-task-store.test.js +123 -0
  58. package/dist-electron/tests/integration/local-core-refactor.test.js +12 -3
  59. package/package.json +1 -1
  60. package/dist/renderer/assets/projects-B-pbhhtH.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-BYyDk28K.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,`;
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-BYyDk28K.js";/**
1
+ import{c as a}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-BYyDk28K.js";/**
1
+ import{c as o}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-BYyDk28K.js";/**
1
+ import{c as o}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-BYyDk28K.js";/**
1
+ import{c as e}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -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,4 +1,4 @@
1
- import{c as a}from"./index-BYyDk28K.js";/**
1
+ import{c as a}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c}from"./index-BYyDk28K.js";/**
1
+ import{c}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-BYyDk28K.js";/**
1
+ import{c as e}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as o}from"./index-BYyDk28K.js";/**
1
+ import{c as o}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1 +1 @@
1
- import{z as o}from"./index-BYyDk28K.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};
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};
@@ -1,4 +1,4 @@
1
- import{c}from"./index-BYyDk28K.js";/**
1
+ import{c}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-BYyDk28K.js";/**
1
+ import{c as e}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as e}from"./index-BYyDk28K.js";/**
1
+ import{c as e}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,4 +1,4 @@
1
- import{c as a}from"./index-BYyDk28K.js";/**
1
+ import{c as a}from"./index-BY88QEsS.js";/**
2
2
  * @license lucide-react v0.487.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -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-BYyDk28K.js"></script>
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,11 +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
- },
99
+ route: (0, scheduled_job_route_js_1.routeFromPlatformThreadBinding)(binding),
103
100
  };
104
101
  },
105
102
  scheduler: options.scheduler,
@@ -302,6 +299,7 @@ class LocalCoreAcpBackend {
302
299
  try {
303
300
  session = await this.sessionCoordinator.ensureSession(threadId, bridgeSessionKey, config, {
304
301
  permissionMode: options.permissionMode,
302
+ runtimeEnv: options.runtimeEnv,
305
303
  });
306
304
  const priorAssistantFinalMessages = this.options.store
307
305
  .getThread(threadId, [])
@@ -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
- buildAgentRuntimeEnv(threadId, existingPath) {
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 = 'lark_chat';
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 env;
202
+ return {
203
+ ...env,
204
+ ...runtimeEnv,
205
+ };
189
206
  }
190
207
  resolveLaunchPermissionMode(threadId, permissionModeOverride = '') {
191
208
  const row = this.options.store.getThreadRow(threadId);
@@ -70,6 +70,7 @@ async function handleChannelSendFile(flags, env, io, json) {
70
70
  route: {
71
71
  type: 'channel.chat',
72
72
  channelId: target,
73
+ instanceId: context.platformInstanceId || undefined,
73
74
  participantId: getFlag(flags, 'participant-id') || context.platformUserId || undefined,
74
75
  },
75
76
  parts: [{
@@ -206,7 +207,11 @@ async function request(baseUrl, method, path, body) {
206
207
  return payload.data;
207
208
  }
208
209
  function resolveContext(flags, env) {
209
- const platform = getFlag(flags, 'platform') || String(env.LOCAL_AI_PLATFORM || '');
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);
210
215
  const chatId = getFlag(flags, 'chat-id') || String(env.LOCAL_AI_CHAT_ID || '');
211
216
  const platformUserId = getFlag(flags, 'platform-user-id') || String(env.LOCAL_AI_PLATFORM_USER_ID || '');
212
217
  return {
@@ -215,6 +220,7 @@ function resolveContext(flags, env) {
215
220
  workspacePath: getFlag(flags, 'workspace-path') || String(env.LOCAL_AI_WORKSPACE_PATH || ''),
216
221
  threadId: normalizeMaybeBooleanFlag(getFlag(flags, 'thread')) || String(env.LOCAL_AI_THREAD_ID || ''),
217
222
  platform,
223
+ platformInstanceId,
218
224
  routeType: String(env.LOCAL_AI_ROUTE_TYPE || '') || (platform === 'lark' && chatId && platformUserId ? 'channel.chat' : ''),
219
225
  chatId,
220
226
  platformUserId,
@@ -19,8 +19,8 @@ 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
- const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
24
24
  function bootstrapLocalCoreKernel(options) {
25
25
  const capabilities = new capability_registry_js_1.LocalCoreCapabilityRegistry();
26
26
  const plugins = new plugin_registry_js_1.LocalCorePluginRegistry(options?.disabledPluginIds);
@@ -262,26 +262,15 @@ function bootstrapLocalCoreRuntime(options) {
262
262
  eventBus: kernel.context.bus,
263
263
  log: options.log,
264
264
  });
265
+ const scheduledJobs = new scheduled_job_application_service_js_1.ScheduledJobApplicationService({
266
+ store,
267
+ scheduler,
268
+ });
265
269
  workspaceRouter.setSchedulerBridge({
266
- createJob: async ({ workspaceId, platform, route, name, schedule, scheduleDescription, message }) => scheduler.createJob({
267
- workspaceId,
268
- platform,
269
- route: (0, scheduled_job_route_js_1.withoutThreadRoute)(route),
270
- triggerType: 'cron',
271
- cronExpr: schedule,
272
- promptTemplate: message,
273
- description: `${name} · ${scheduleDescription}`,
274
- enabled: true,
275
- }),
276
- listJobsForThread: async (threadId) => {
277
- const binding = store.getPlatformThreadBindingByThreadId(threadId);
278
- return scheduler
279
- .listJobs()
280
- .filter((job) => job.route.threadId === threadId ||
281
- (binding ? (0, scheduled_job_route_js_1.scheduledJobMatchesPlatformBinding)(job, binding) : false));
282
- },
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),
283
272
  deleteJob: async (jobId) => {
284
- scheduler.deleteJob(jobId);
273
+ scheduledJobs.deleteJob(jobId);
285
274
  },
286
275
  });
287
276
  return {
@@ -296,6 +285,7 @@ function bootstrapLocalCoreRuntime(options) {
296
285
  knowledgeAttachments,
297
286
  workspaceRouter,
298
287
  scheduler,
288
+ scheduledJobs,
299
289
  async start() {
300
290
  await kernel.lifecycle.startAll();
301
291
  await scheduler.start();
@@ -4,7 +4,6 @@ exports.LocalCoreController = void 0;
4
4
  const node_events_1 = require("node:events");
5
5
  const desktop_js_1 = require("../../../../shared/desktop.js");
6
6
  const bootstrap_js_1 = require("../kernel/bootstrap.js");
7
- const scheduled_job_route_js_1 = require("../scheduler/scheduled-job-route.js");
8
7
  const runtime_detection_service_js_1 = require("./runtime-detection-service.js");
9
8
  class LocalCoreController extends node_events_1.EventEmitter {
10
9
  userDataPath;
@@ -12,7 +11,7 @@ class LocalCoreController extends node_events_1.EventEmitter {
12
11
  workspaceRouter;
13
12
  knowledgeProvider;
14
13
  channelRuntimes;
15
- scheduler;
14
+ scheduledJobs;
16
15
  kernel;
17
16
  runtime;
18
17
  runtimeDetection;
@@ -33,7 +32,7 @@ class LocalCoreController extends node_events_1.EventEmitter {
33
32
  this.workspaceRouter = this.runtime.workspaceRouter;
34
33
  const runtimeChannels = this.runtime.channelRuntimes || [this.runtime.channelRuntime, this.runtime.weixinChannelRuntime];
35
34
  this.channelRuntimes = new Map(runtimeChannels.filter(Boolean).map((runtime) => [runtime.platform, runtime]));
36
- this.scheduler = this.runtime.scheduler;
35
+ this.scheduledJobs = this.runtime.scheduledJobs;
37
36
  this.runtimeDetection = new runtime_detection_service_js_1.RuntimeDetectionService({
38
37
  userDataPath,
39
38
  readConfig: async () => (await this.readConfigFile()).parsed,
@@ -182,63 +181,29 @@ class LocalCoreController extends node_events_1.EventEmitter {
182
181
  return this.workspaceRouter.listAuditEvents(query);
183
182
  }
184
183
  async listScheduledJobs(workspaceId) {
185
- return this.scheduler.listJobs(workspaceId);
184
+ return this.scheduledJobs.listJobs(workspaceId);
186
185
  }
187
186
  async getScheduledJob(jobId) {
188
- const job = this.scheduler.getJob(jobId);
187
+ const job = this.scheduledJobs.getJob(jobId);
189
188
  if (!job) {
190
189
  throw new Error(`Scheduled job not found: ${jobId}`);
191
190
  }
192
191
  return job;
193
192
  }
194
193
  async createScheduledJob(input) {
195
- return this.scheduler.createJob(this.resolveScheduledJobCreateInput(input));
196
- }
197
- resolveScheduledJobCreateInput(input) {
198
- if (input.platform && input.route) {
199
- return {
200
- ...input,
201
- route: (0, scheduled_job_route_js_1.withoutThreadRoute)(input.route),
202
- };
203
- }
204
- const threadId = String(input.threadId || input.route?.threadId || '').trim();
205
- if (threadId) {
206
- const binding = this.runtime.store.getPlatformThreadBindingByThreadId(threadId);
207
- if (binding && binding.workspace_id === input.workspaceId) {
208
- return {
209
- ...input,
210
- platform: binding.platform,
211
- route: {
212
- type: 'channel.chat',
213
- channelId: binding.chat_id,
214
- participantId: binding.platform_user_id,
215
- },
216
- };
217
- }
218
- }
219
- return {
220
- ...input,
221
- platform: 'local',
222
- route: {
223
- type: 'local.thread',
224
- channelId: input.workspaceId,
225
- },
226
- };
194
+ return this.scheduledJobs.createJob(input);
227
195
  }
228
196
  async updateScheduledJob(jobId, input) {
229
- return this.scheduler.updateJob(jobId, {
230
- ...input,
231
- ...(input.route ? { route: (0, scheduled_job_route_js_1.withoutThreadRoute)(input.route) } : {}),
232
- });
197
+ return this.scheduledJobs.updateJob(jobId, input);
233
198
  }
234
199
  async deleteScheduledJob(jobId) {
235
- return this.scheduler.deleteJob(jobId);
200
+ return this.scheduledJobs.deleteJob(jobId);
236
201
  }
237
202
  async runScheduledJob(jobId) {
238
- return this.scheduler.runJobNow(jobId);
203
+ return this.scheduledJobs.runJobNow(jobId);
239
204
  }
240
205
  async listScheduledJobRuns(jobId) {
241
- return this.scheduler.listJobRuns(jobId);
206
+ return this.scheduledJobs.listJobRuns(jobId);
242
207
  }
243
208
  async listThreads(workspaceId) {
244
209
  return this.workspaceRouter.listThreads(workspaceId);
@@ -16,7 +16,7 @@ class LarkScheduleAdapter {
16
16
  });
17
17
  }
18
18
  supports(job) {
19
- return job.platform === 'lark' && (job.route.type === 'channel.chat' || job.route.type === 'lark_chat');
19
+ return (0, scheduled_job_route_js_1.platformMatches)(job.platform, 'lark') && (job.route.type === 'channel.chat' || job.route.type === 'lark_chat');
20
20
  }
21
21
  async execute(context) {
22
22
  const { job } = context;
@@ -32,7 +32,7 @@ class LarkScheduleAdapter {
32
32
  if (!channelRuntime.sendScheduledMessage) {
33
33
  throw new Error('Lark channel runtime does not support scheduled delivery.');
34
34
  }
35
- platformMessageId = await channelRuntime.sendScheduledMessage(job.workspaceId, (0, scheduled_job_route_js_1.withoutThreadRoute)(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);
36
36
  if (!platformMessageId) {
37
37
  throw new Error('Lark gateway did not return a message id for scheduled delivery.');
38
38
  }
@@ -49,7 +49,7 @@ class LarkScheduleAdapter {
49
49
  const route = job.route;
50
50
  const channelId = route.channelId;
51
51
  const participantId = route.participantId || '';
52
- const binding = this.options.store.getPlatformThreadBinding(job.workspaceId, channelId, participantId, 'lark');
52
+ const binding = this.options.store.getPlatformThreadBinding(job.workspaceId, channelId, participantId, job.platform);
53
53
  if (binding?.thread_id && await this.threadExists(binding.thread_id)) {
54
54
  return binding.thread_id;
55
55
  }
@@ -60,6 +60,7 @@ class LarkScheduleAdapter {
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,9 +68,9 @@ 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
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ScheduledConversationExecutor = void 0;
4
+ const scheduled_job_route_js_1 = require("./scheduled-job-route.js");
4
5
  const TERMINAL_RUN_STATES = new Set(['completed', 'failed', 'interrupted']);
5
6
  const SCHEDULED_RUN_PERMISSION_MODE = 'bypassPermissions';
6
7
  class ScheduledConversationExecutor {
@@ -14,6 +15,7 @@ class ScheduledConversationExecutor {
14
15
  try {
15
16
  const sendResult = await this.options.workspaceRouter.sendThreadMessage(target.threadId, prompt, {
16
17
  permissionMode: SCHEDULED_RUN_PERMISSION_MODE,
18
+ runtimeEnv: this.buildScheduledRuntimeEnv(target),
17
19
  });
18
20
  await this.waitForRun(sendResult.runId, timeoutMs);
19
21
  const thread = await this.options.workspaceRouter.getThread(target.threadId);
@@ -31,6 +33,26 @@ class ScheduledConversationExecutor {
31
33
  await policy.afterExecute?.(target, job);
32
34
  }
33
35
  }
36
+ buildScheduledRuntimeEnv(target) {
37
+ const route = target.route;
38
+ const basePlatform = (0, scheduled_job_route_js_1.getChannelPlatformBase)(target.platform);
39
+ const env = {};
40
+ if (basePlatform && basePlatform !== 'local') {
41
+ env.LOCAL_AI_PLATFORM = basePlatform;
42
+ env.LOCAL_AI_ROUTE_TYPE = (0, scheduled_job_route_js_1.routeTypeForPlatform)(target.platform);
43
+ }
44
+ const instanceId = route.instanceId || (0, scheduled_job_route_js_1.getChannelPlatformInstanceId)(target.platform);
45
+ if (instanceId) {
46
+ env.LOCAL_AI_PLATFORM_INSTANCE_ID = instanceId;
47
+ }
48
+ if (route.channelId) {
49
+ env.LOCAL_AI_CHAT_ID = route.channelId;
50
+ }
51
+ if (route.participantId) {
52
+ env.LOCAL_AI_PLATFORM_USER_ID = route.participantId;
53
+ }
54
+ return env;
55
+ }
34
56
  async waitForRun(runId, timeoutMs) {
35
57
  const startedAt = Date.now();
36
58
  while (Date.now() - startedAt < timeoutMs) {