@kafca/agentdock 0.1.35 → 0.1.37

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 (63) hide show
  1. package/README.md +7 -0
  2. package/dist/renderer/assets/{Badge-BM4WCcua.js → Badge-CjzZp9Tf.js} +1 -1
  3. package/dist/renderer/assets/{Chat-DoyBHOsx.js → Chat-D4_5K_Ww.js} +1 -1
  4. package/dist/renderer/assets/{ChatMarkdown-BWj04kgW.js → ChatMarkdown-DkI29dOw.js} +1 -1
  5. package/dist/renderer/assets/{Config-A95OuazQ.js → Config-CnrlmSEQ.js} +1 -1
  6. package/dist/renderer/assets/{CronList-DsPU4zGT.js → CronList-DVvInMvr.js} +1 -1
  7. package/dist/renderer/assets/{Dashboard-D8Vpj97x.js → Dashboard-CY4YAmVj.js} +2 -2
  8. package/dist/renderer/assets/{EmptyState-x1uVoSxZ.js → EmptyState-CmR947i4.js} +1 -1
  9. package/dist/renderer/assets/{KnowledgeDetail-C9TbcyNJ.js → KnowledgeDetail-BvNG0inb.js} +1 -1
  10. package/dist/renderer/assets/{KnowledgeHome-Cg9Fb41Q.js → KnowledgeHome-BB0Z8VrS.js} +1 -1
  11. package/dist/renderer/assets/{Logs-oWaKA60u.js → Logs-IORTjnGM.js} +1 -1
  12. package/dist/renderer/assets/{Modal-24hTXXHK.js → Modal-D9NZ6cvF.js} +1 -1
  13. package/dist/renderer/assets/{Page-YRtQonKZ.js → Page-DlvElfTz.js} +1 -1
  14. package/dist/renderer/assets/{ProjectDetail-DScsxJO-.js → ProjectDetail-Y1ZFL8W9.js} +1 -1
  15. package/dist/renderer/assets/{ProjectList-8L5GD7PN.js → ProjectList-DAI-4HU7.js} +1 -1
  16. package/dist/renderer/assets/{Select-BI8Uw_DF.js → Select-LMEt9yJy.js} +1 -1
  17. package/dist/renderer/assets/{SessionChat-BIoCWdDD.js → SessionChat-BWRAS_H-.js} +1 -1
  18. package/dist/renderer/assets/{SessionList-BsEJeDxI.js → SessionList-DQsxmC1n.js} +1 -1
  19. package/dist/renderer/assets/{ThreadChat-DJi0UBta.js → ThreadChat-D9j78cdm.js} +1 -1
  20. package/dist/renderer/assets/{Workspace-tlJxrgC5.js → Workspace-C-RTj4uI.js} +1 -1
  21. package/dist/renderer/assets/{arrow-left-pzaBhi9y.js → arrow-left-C_ZIHUlD.js} +1 -1
  22. package/dist/renderer/assets/{book-open-CNhlVyqh.js → book-open-BuI3webp.js} +1 -1
  23. package/dist/renderer/assets/{check-Cg2LLCdl.js → check-FA1rU94Q.js} +1 -1
  24. package/dist/renderer/assets/{chevron-down-Dgqg07wf.js → chevron-down-DvQ7Hq2s.js} +1 -1
  25. package/dist/renderer/assets/{circle-BBd_jIS2.js → circle-DZYvZ-Iq.js} +1 -1
  26. package/dist/renderer/assets/{desktop-C0S-Yv8G.js → desktop-BSoKBjFu.js} +1 -1
  27. package/dist/renderer/assets/{funnel-DwSh-SrX.js → funnel-BoW8A8Fi.js} +1 -1
  28. package/dist/renderer/assets/{heart-CWVc-KhZ.js → heart-DaIdiPUs.js} +1 -1
  29. package/dist/renderer/assets/{index-DZbeAYVk.js → index-Cc83IKng.js} +2 -2
  30. package/dist/renderer/assets/{index-HYmDNQ9k.js → index-pdvxKnBr.js} +1 -1
  31. package/dist/renderer/assets/{pencil-tI4tCLz0.js → pencil-CMs10l_8.js} +1 -1
  32. package/dist/renderer/assets/{play-Coi2HA1w.js → play-DtT_FrBZ.js} +1 -1
  33. package/dist/renderer/assets/{plug-D4TCyW9b.js → plug-vKGMXapD.js} +1 -1
  34. package/dist/renderer/assets/{plus-p62AgpoB.js → plus-DZV73wzr.js} +1 -1
  35. package/dist/renderer/assets/projects-BUda9SpJ.js +1 -0
  36. package/dist/renderer/assets/{save-fpMhkVV0.js → save-Bus9w20l.js} +1 -1
  37. package/dist/renderer/assets/{search-BHKIStdA.js → search-ChEC20LW.js} +1 -1
  38. package/dist/renderer/assets/{server-0oTWed8U.js → server-B9HgN6CF.js} +1 -1
  39. package/dist/renderer/assets/{session-utils-D0Qv0I0-.js → session-utils-Bn9-xCic.js} +1 -1
  40. package/dist/renderer/assets/{sessions-C8ApKQgC.js → sessions-RUHmhxT5.js} +1 -1
  41. package/dist/renderer/assets/{shield-check-BAJI9jzC.js → shield-check-B97md1a5.js} +1 -1
  42. package/dist/renderer/assets/{trash-2-B-Ygm-x6.js → trash-2-31WOGl8I.js} +1 -1
  43. package/dist/renderer/assets/{user-Cv8rzw8l.js → user-CLiiHYE_.js} +1 -1
  44. package/dist/renderer/assets/{wifi-off-BImS3nkm.js → wifi-off-BKh21npc.js} +1 -1
  45. package/dist/renderer/index.html +1 -1
  46. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-store.js +22 -7
  47. package/dist-electron/services/local-ai-core/src/acp/local-core-acp-turn-coordinator.js +2 -1
  48. package/dist-electron/services/local-ai-core/src/channel/lark/local-core-lark-gateway.js +37 -7
  49. package/dist-electron/services/local-ai-core/src/channel/weixin/local-core-weixin-gateway.js +31 -1
  50. package/dist-electron/services/local-ai-core/src/scheduler/channel-execution-policy.js +79 -0
  51. package/dist-electron/services/local-ai-core/src/scheduler/lark-execution-policies.js +7 -61
  52. package/dist-electron/services/local-ai-core/src/scheduler/lark-schedule-adapter.js +4 -13
  53. package/dist-electron/services/local-ai-core/src/scheduler/local-schedule-adapter.js +23 -30
  54. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-bridge-session.js +27 -0
  55. package/dist-electron/services/local-ai-core/src/scheduler/scheduled-conversation-executor.js +3 -2
  56. package/dist-electron/services/local-ai-core/src/scheduler/scheduler-run-lifecycle.js +13 -1
  57. package/dist-electron/services/local-ai-core/src/scheduler/scheduler-service.js +1 -1
  58. package/dist-electron/services/local-ai-core/src/scheduler/weixin-execution-policies.js +7 -61
  59. package/dist-electron/services/local-ai-core/src/scheduler/weixin-schedule-adapter.js +4 -13
  60. package/dist-electron/tests/electron/workspace-task-store.test.js +244 -24
  61. package/dist-electron/tests/integration/local-core-refactor.test.js +60 -7
  62. package/package.json +1 -1
  63. package/dist/renderer/assets/projects-CTDuVxeQ.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-DZbeAYVk.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-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as a}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as o}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as o}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as e}from"./index-Cc83IKng.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-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as a}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as e}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as o}from"./index-Cc83IKng.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-DZbeAYVk.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-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as e}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as e}from"./index-Cc83IKng.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-DZbeAYVk.js";/**
1
+ import{c as a}from"./index-Cc83IKng.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-DZbeAYVk.js"></script>
8
+ <script type="module" crossorigin src="./assets/index-Cc83IKng.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="./assets/index-CaQZSRbg.css">
10
10
  </head>
11
11
  <body class="bg-[#f5f5f7] dark:bg-[#151516]">
@@ -127,6 +127,11 @@ class LocalCoreAcpStore {
127
127
  thread_id TEXT,
128
128
  run_id TEXT,
129
129
  platform_message_id TEXT,
130
+ platform_message_ids_json TEXT,
131
+ delivery_mode TEXT,
132
+ delivery_status TEXT,
133
+ delivery_error TEXT,
134
+ last_bridge_event_at TEXT,
130
135
  FOREIGN KEY (job_id) REFERENCES scheduled_jobs(id) ON DELETE CASCADE
131
136
  );
132
137
  CREATE INDEX IF NOT EXISTS idx_scheduled_job_runs_job_triggered ON scheduled_job_runs (job_id, triggered_at DESC);
@@ -227,6 +232,11 @@ class LocalCoreAcpStore {
227
232
  this.ensureColumn('messages', 'bridge_kind', 'TEXT');
228
233
  this.ensureColumn('messages', 'bridge_status', 'TEXT');
229
234
  this.ensureColumn('scheduled_jobs', 'execution_mode', "TEXT NOT NULL DEFAULT 'same-thread'");
235
+ this.ensureColumn('scheduled_job_runs', 'platform_message_ids_json', 'TEXT');
236
+ this.ensureColumn('scheduled_job_runs', 'delivery_mode', 'TEXT');
237
+ this.ensureColumn('scheduled_job_runs', 'delivery_status', 'TEXT');
238
+ this.ensureColumn('scheduled_job_runs', 'delivery_error', 'TEXT');
239
+ this.ensureColumn('scheduled_job_runs', 'last_bridge_event_at', 'TEXT');
230
240
  this.ensureColumn('threads', 'agent_mode', "TEXT NOT NULL DEFAULT 'default'");
231
241
  }
232
242
  close() {
@@ -889,7 +899,7 @@ class LocalCoreAcpStore {
889
899
  }
890
900
  listScheduledJobRuns(jobId) {
891
901
  const rows = this.db.prepare(`
892
- SELECT id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id
902
+ SELECT id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id, platform_message_ids_json, delivery_mode, delivery_status, delivery_error, last_bridge_event_at
893
903
  FROM scheduled_job_runs
894
904
  WHERE job_id = ?
895
905
  ORDER BY triggered_at DESC
@@ -901,9 +911,9 @@ class LocalCoreAcpStore {
901
911
  const triggeredAt = input.triggeredAt || new Date().toISOString();
902
912
  const normalizedStatus = (0, index_js_1.normalizeScheduledJobRunStatus)(status);
903
913
  this.db.prepare(`
904
- INSERT INTO scheduled_job_runs (id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id)
905
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
906
- `).run(id, jobId, normalizedStatus, triggeredAt, input.startedAt || null, input.finishedAt || null, input.error || null, input.threadId || null, input.runId || null, input.platformMessageId || null);
914
+ INSERT INTO scheduled_job_runs (id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id, platform_message_ids_json, delivery_mode, delivery_status, delivery_error, last_bridge_event_at)
915
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
916
+ `).run(id, jobId, normalizedStatus, triggeredAt, input.startedAt || null, input.finishedAt || null, input.error || null, input.threadId || null, input.runId || null, input.platformMessageId || null, JSON.stringify(input.platformMessageIds || []), input.deliveryMode || null, input.deliveryStatus || null, input.deliveryError || null, input.lastBridgeEventAt || null);
907
917
  this.updateScheduledJobStatus(jobId, {
908
918
  lastRunAt: triggeredAt,
909
919
  lastStatus: normalizedStatus,
@@ -913,7 +923,7 @@ class LocalCoreAcpStore {
913
923
  }
914
924
  getScheduledJobRun(runId) {
915
925
  const row = this.db.prepare(`
916
- SELECT id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id
926
+ SELECT id, job_id, status, triggered_at, started_at, finished_at, error, thread_id, run_id, platform_message_id, platform_message_ids_json, delivery_mode, delivery_status, delivery_error, last_bridge_event_at
917
927
  FROM scheduled_job_runs
918
928
  WHERE id = ?
919
929
  `).get(runId);
@@ -931,9 +941,9 @@ class LocalCoreAcpStore {
931
941
  };
932
942
  this.db.prepare(`
933
943
  UPDATE scheduled_job_runs
934
- SET status = ?, triggered_at = ?, started_at = ?, finished_at = ?, error = ?, thread_id = ?, run_id = ?, platform_message_id = ?
944
+ SET status = ?, triggered_at = ?, started_at = ?, finished_at = ?, error = ?, thread_id = ?, run_id = ?, platform_message_id = ?, platform_message_ids_json = ?, delivery_mode = ?, delivery_status = ?, delivery_error = ?, last_bridge_event_at = ?
935
945
  WHERE id = ?
936
- `).run(next.status, next.triggeredAt, next.startedAt || null, next.finishedAt || null, next.error || null, next.threadId || null, next.runId || null, next.platformMessageId || null, runId);
946
+ `).run(next.status, next.triggeredAt, next.startedAt || null, next.finishedAt || null, next.error || null, next.threadId || null, next.runId || null, next.platformMessageId || null, JSON.stringify(next.platformMessageIds || []), next.deliveryMode || null, next.deliveryStatus || null, next.deliveryError || null, next.lastBridgeEventAt || null, runId);
937
947
  if (input.status || Object.prototype.hasOwnProperty.call(input, 'error') || input.finishedAt || input.triggeredAt) {
938
948
  this.updateScheduledJobStatus(existing.jobId, {
939
949
  lastRunAt: next.triggeredAt,
@@ -1179,6 +1189,11 @@ class LocalCoreAcpStore {
1179
1189
  threadId: row.thread_id || undefined,
1180
1190
  runId: row.run_id || undefined,
1181
1191
  platformMessageId: row.platform_message_id || undefined,
1192
+ platformMessageIds: parseJson(row.platform_message_ids_json || '[]', []),
1193
+ deliveryMode: row.delivery_mode || undefined,
1194
+ deliveryStatus: row.delivery_status || undefined,
1195
+ deliveryError: row.delivery_error || undefined,
1196
+ lastBridgeEventAt: row.last_bridge_event_at || undefined,
1182
1197
  };
1183
1198
  }
1184
1199
  toWorkspaceRegistryEntry(row) {
@@ -113,7 +113,8 @@ class LocalCoreAcpTurnCoordinator {
113
113
  }) || parsedOptions;
114
114
  const toolTitle = (0, workspace_acp_permissions_js_1.formatToolCallContent)(payload.params?.toolCall);
115
115
  this.closePendingThoughtSegment(session);
116
- if ((this.options.getThreadAgentMode?.(session.threadId) || local_core_slash_commands_js_1.DEFAULT_AGENT_MODE) === 'bypassPermissions') {
116
+ const effectiveAgentMode = session.launchPermissionMode || this.options.getThreadAgentMode?.(session.threadId) || local_core_slash_commands_js_1.DEFAULT_AGENT_MODE;
117
+ if (effectiveAgentMode === 'bypassPermissions') {
117
118
  const selected = options.find((option) => option.normalizedAction === 'allow all')
118
119
  || options.find((option) => option.normalizedAction === 'allow')
119
120
  || options.find((option) => option.normalizedAction !== 'deny');
@@ -178,6 +178,31 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
178
178
  async sendScheduledMessage(workspaceId, route, text) {
179
179
  return this.sendScheduledCard(workspaceId, route.channelId, text);
180
180
  }
181
+ registerScheduledThreadBridge(input) {
182
+ const instanceId = input.route.instanceId || getLarkInstanceId(input.platform) || 'default';
183
+ const platformKey = (0, config_js_1.channelPlatformKey)('lark', instanceId);
184
+ const route = {
185
+ workspaceId: input.workspaceId,
186
+ instanceId,
187
+ platformKey,
188
+ platformUserId: input.route.participantId || '',
189
+ chatId: input.route.channelId,
190
+ threadId: input.threadId,
191
+ };
192
+ const previousRoute = this.threadRouting.get(input.sessionKey);
193
+ this.threadRouting.set(input.sessionKey, route);
194
+ if (!this.outboundTurns.has(input.sessionKey)) {
195
+ this.createTurnState(input.sessionKey);
196
+ }
197
+ return () => {
198
+ if (previousRoute) {
199
+ this.threadRouting.set(input.sessionKey, previousRoute);
200
+ }
201
+ else {
202
+ this.threadRouting.delete(input.sessionKey);
203
+ }
204
+ };
205
+ }
181
206
  async sendOutboundMessage(workspaceId, input) {
182
207
  const state = this.resolveRuntimeState(workspaceId, input.route?.instanceId).state;
183
208
  if (!state?.client || !state.connected) {
@@ -428,8 +453,9 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
428
453
  this.options.log?.(`localcore-lark bridge binding disappeared for sessionKey=${sessionKey}`);
429
454
  return;
430
455
  }
431
- if (this.mutedThreadBridgeCounts.has(binding.thread_id)) {
432
- this.options.log?.(`localcore-lark bridge muted for thread=${binding.thread_id} type=${event.type}`);
456
+ const bridgeThreadId = route.threadId || binding.thread_id;
457
+ if (this.mutedThreadBridgeCounts.has(bridgeThreadId)) {
458
+ this.options.log?.(`localcore-lark bridge muted for thread=${bridgeThreadId} type=${event.type}`);
433
459
  return;
434
460
  }
435
461
  const turn = this.getOrCreateTurnState(sessionKey, binding.last_platform_message_id || undefined);
@@ -442,7 +468,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
442
468
  }
443
469
  if (event.type === 'typing_start' && (turn.permissionMessageId || turn.awaitingPermission)) {
444
470
  if (turn.permissionMessageId) {
445
- await this.patchTextCard(state, turn.permissionMessageId, '**工具确认已处理**\n\n继续生成中...', [], sessionKey, binding.thread_id);
471
+ await this.patchTextCard(state, turn.permissionMessageId, '**工具确认已处理**\n\n继续生成中...', [], sessionKey, bridgeThreadId);
446
472
  }
447
473
  turn.permissionMessageId = undefined;
448
474
  turn.awaitingPermission = false;
@@ -455,14 +481,14 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
455
481
  const permissionCard = (0, cards_js_1.renderPermissionCard)(turn, event, Boolean(state.cardActionsEnabled));
456
482
  if (permissionCard.text || permissionCard.buttonRows.length > 0) {
457
483
  if (!turn.permissionMessageId) {
458
- const createdId = await this.sendTextAsCard(state, route.chatId, permissionCard.text, permissionCard.buttonRows, sessionKey, binding.thread_id);
484
+ const createdId = await this.sendTextAsCard(state, route.chatId, permissionCard.text, permissionCard.buttonRows, sessionKey, bridgeThreadId);
459
485
  if (createdId) {
460
486
  turn.permissionMessageId = createdId;
461
487
  this.options.log?.(`localcore-lark sent permission card ${createdId} for sessionKey=${sessionKey}`);
462
488
  }
463
489
  }
464
490
  else {
465
- await this.patchTextCard(state, turn.permissionMessageId, permissionCard.text, permissionCard.buttonRows, sessionKey, binding.thread_id);
491
+ await this.patchTextCard(state, turn.permissionMessageId, permissionCard.text, permissionCard.buttonRows, sessionKey, bridgeThreadId);
466
492
  this.options.log?.(`localcore-lark patched permission card ${turn.permissionMessageId} for sessionKey=${sessionKey}`);
467
493
  }
468
494
  }
@@ -487,7 +513,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
487
513
  continue;
488
514
  }
489
515
  if (!existingMessageId) {
490
- const createdId = await this.sendTextAsCard(state, route.chatId, renderedMessage.text, renderedMessage.buttonRows, sessionKey, binding.thread_id);
516
+ const createdId = await this.sendTextAsCard(state, route.chatId, renderedMessage.text, renderedMessage.buttonRows, sessionKey, bridgeThreadId);
491
517
  if (createdId) {
492
518
  (0, runtime_state_js_1.setLarkRenderedMessageId)(turn, renderedMessage, createdId);
493
519
  if (renderedMessage.isFinal) {
@@ -497,7 +523,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
497
523
  }
498
524
  continue;
499
525
  }
500
- await this.patchTextCard(state, existingMessageId, renderedMessage.text, renderedMessage.buttonRows, sessionKey, binding.thread_id);
526
+ await this.patchTextCard(state, existingMessageId, renderedMessage.text, renderedMessage.buttonRows, sessionKey, bridgeThreadId);
501
527
  turn.lastPatchedAt = Date.now();
502
528
  turn.lastPatchedAtByMessageId[existingMessageId] = turn.lastPatchedAt;
503
529
  this.options.log?.(`localcore-lark patched card message ${existingMessageId} for sessionKey=${sessionKey}`);
@@ -1294,3 +1320,7 @@ class LocalCoreLarkGateway extends node_events_1.EventEmitter {
1294
1320
  }
1295
1321
  }
1296
1322
  exports.LocalCoreLarkGateway = LocalCoreLarkGateway;
1323
+ function getLarkInstanceId(platform) {
1324
+ const normalized = String(platform || '').trim();
1325
+ return normalized.startsWith('lark:') ? normalized.slice('lark:'.length).trim() : '';
1326
+ }
@@ -399,7 +399,8 @@ class LocalCoreWeixinGateway extends node_events_1.EventEmitter {
399
399
  const binding = this.options.store.getPlatformThreadBinding(route.workspaceId, route.chatId, route.platformUserId, routePlatformKey);
400
400
  if (!binding)
401
401
  return;
402
- if (this.mutedThreadBridgeCounts.has(binding.thread_id))
402
+ const bridgeThreadId = route.threadId || binding.thread_id;
403
+ if (this.mutedThreadBridgeCounts.has(bridgeThreadId))
403
404
  return;
404
405
  const turn = this.getOrCreateTurnState(sessionKey);
405
406
  if (event.replyCtx) {
@@ -466,6 +467,31 @@ class LocalCoreWeixinGateway extends node_events_1.EventEmitter {
466
467
  return '';
467
468
  }
468
469
  }
470
+ registerScheduledThreadBridge(input) {
471
+ const instanceId = input.route.instanceId || getWeixinInstanceId(input.platform) || 'default';
472
+ const platformKey = (0, config_js_1.channelPlatformKey)('weixin', instanceId);
473
+ const route = {
474
+ workspaceId: input.workspaceId,
475
+ instanceId,
476
+ platformKey,
477
+ platformUserId: input.route.participantId || '',
478
+ chatId: input.route.channelId,
479
+ threadId: input.threadId,
480
+ };
481
+ const previousRoute = this.threadRouting.get(input.sessionKey);
482
+ this.threadRouting.set(input.sessionKey, route);
483
+ if (!this.outboundTurns.has(input.sessionKey)) {
484
+ this.createTurnState(input.sessionKey);
485
+ }
486
+ return () => {
487
+ if (previousRoute) {
488
+ this.threadRouting.set(input.sessionKey, previousRoute);
489
+ }
490
+ else {
491
+ this.threadRouting.delete(input.sessionKey);
492
+ }
493
+ };
494
+ }
469
495
  async sendOutboundMessage(workspaceId, input) {
470
496
  const state = this.resolveRuntimeState(workspaceId, input.route?.instanceId).state;
471
497
  if (!state?.connected) {
@@ -1231,3 +1257,7 @@ class LocalCoreWeixinGateway extends node_events_1.EventEmitter {
1231
1257
  }
1232
1258
  }
1233
1259
  exports.LocalCoreWeixinGateway = LocalCoreWeixinGateway;
1260
+ function getWeixinInstanceId(platform) {
1261
+ const normalized = String(platform || '').trim();
1262
+ return normalized.startsWith('weixin:') ? normalized.slice('weixin:'.length).trim() : '';
1263
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createChannelExecutionPolicy = createChannelExecutionPolicy;
4
+ const scheduled_bridge_session_js_1 = require("./scheduled-bridge-session.js");
5
+ function createChannelExecutionPolicy(job, options, config) {
6
+ if (job.executionMode === 'side-thread') {
7
+ return new SideThreadChannelExecutionPolicy(options, config);
8
+ }
9
+ return new SameThreadChannelExecutionPolicy(options, config);
10
+ }
11
+ class SameThreadChannelExecutionPolicy {
12
+ options;
13
+ config;
14
+ bridgeSession;
15
+ constructor(options, config) {
16
+ this.options = options;
17
+ this.config = config;
18
+ }
19
+ async resolveTarget(job) {
20
+ const threadId = await this.config.resolveSameThread(job);
21
+ return {
22
+ kind: `${this.config.platformBase}:same-thread`,
23
+ threadId,
24
+ workspaceId: job.workspaceId,
25
+ platform: job.platform,
26
+ route: job.route,
27
+ };
28
+ }
29
+ async beforeExecute(target, job) {
30
+ this.bridgeSession = await scheduled_bridge_session_js_1.ScheduledBridgeSession.open({
31
+ job,
32
+ threadId: target.threadId,
33
+ workspaceRouter: this.options.workspaceRouter,
34
+ getChannelRuntime: this.options.getChannelRuntime,
35
+ });
36
+ }
37
+ async afterExecute() {
38
+ await this.bridgeSession?.close();
39
+ this.bridgeSession = undefined;
40
+ }
41
+ }
42
+ class SideThreadChannelExecutionPolicy {
43
+ options;
44
+ config;
45
+ bridgeSession;
46
+ constructor(options, config) {
47
+ this.options = options;
48
+ this.config = config;
49
+ }
50
+ async resolveTarget(job) {
51
+ const title = this.config.sideThreadTitle(job);
52
+ const reusableTitles = new Set([
53
+ title,
54
+ ...(this.config.legacySideThreadTitles?.(job) || []),
55
+ ]);
56
+ const existing = (await this.options.workspaceRouter.listThreads(job.workspaceId))
57
+ .find((thread) => reusableTitles.has(thread.title));
58
+ const threadId = existing?.id || (await this.options.workspaceRouter.createThread(job.workspaceId, title)).id;
59
+ return {
60
+ kind: `${this.config.platformBase}:side-thread`,
61
+ threadId,
62
+ workspaceId: job.workspaceId,
63
+ platform: job.platform,
64
+ route: job.route,
65
+ };
66
+ }
67
+ async beforeExecute(target, job) {
68
+ this.bridgeSession = await scheduled_bridge_session_js_1.ScheduledBridgeSession.open({
69
+ job,
70
+ threadId: target.threadId,
71
+ workspaceRouter: this.options.workspaceRouter,
72
+ getChannelRuntime: this.options.getChannelRuntime,
73
+ });
74
+ }
75
+ async afterExecute() {
76
+ await this.bridgeSession?.close();
77
+ this.bridgeSession = undefined;
78
+ }
79
+ }
@@ -1,66 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createLarkExecutionPolicy = createLarkExecutionPolicy;
4
+ const channel_execution_policy_js_1 = require("./channel-execution-policy.js");
4
5
  function createLarkExecutionPolicy(job, options, resolveSameThread) {
5
- if (job.executionMode === 'side-thread') {
6
- return new LarkSideThreadExecutionPolicy(options);
7
- }
8
- return new LarkSameThreadExecutionPolicy(options, resolveSameThread);
9
- }
10
- class LarkSameThreadExecutionPolicy {
11
- options;
12
- resolveSameThread;
13
- constructor(options, resolveSameThread) {
14
- this.options = options;
15
- this.resolveSameThread = resolveSameThread;
16
- }
17
- async resolveTarget(job) {
18
- return {
19
- kind: 'thread',
20
- threadId: await this.resolveSameThread(job),
21
- workspaceId: job.workspaceId,
22
- platform: job.platform,
23
- route: job.route,
24
- };
25
- }
26
- beforeExecute(target) {
27
- this.options.getChannelRuntime().muteThreadBridge?.(target.threadId);
28
- }
29
- afterExecute(target) {
30
- this.options.getChannelRuntime().unmuteThreadBridge?.(target.threadId);
31
- }
32
- }
33
- class LarkSideThreadExecutionPolicy {
34
- options;
35
- constructor(options) {
36
- this.options = options;
37
- }
38
- async resolveTarget(job) {
39
- const title = `[Scheduled] ${job.description || job.id}`;
40
- const existing = (await this.options.workspaceRouter.listThreads(job.workspaceId))
41
- .find((thread) => thread.title === title);
42
- if (existing) {
43
- return {
44
- kind: 'thread',
45
- threadId: existing.id,
46
- workspaceId: job.workspaceId,
47
- platform: job.platform,
48
- route: job.route,
49
- };
50
- }
51
- const created = await this.options.workspaceRouter.createThread(job.workspaceId, title);
52
- return {
53
- kind: 'thread',
54
- threadId: created.id,
55
- workspaceId: job.workspaceId,
56
- platform: job.platform,
57
- route: job.route,
58
- };
59
- }
60
- beforeExecute(target) {
61
- this.options.getChannelRuntime().muteThreadBridge?.(target.threadId);
62
- }
63
- afterExecute(target) {
64
- this.options.getChannelRuntime().unmuteThreadBridge?.(target.threadId);
65
- }
6
+ return (0, channel_execution_policy_js_1.createChannelExecutionPolicy)(job, options, {
7
+ platformBase: 'lark',
8
+ resolveSameThread,
9
+ sideThreadTitle: (nextJob) => `[Scheduled:Lark] ${nextJob.description || nextJob.id}`,
10
+ legacySideThreadTitles: (nextJob) => [`[Scheduled] ${nextJob.description || nextJob.id}`],
11
+ });
66
12
  }
@@ -12,7 +12,7 @@ class LarkScheduleAdapter {
12
12
  this.options = options;
13
13
  this.executor = new scheduled_conversation_executor_js_1.ScheduledConversationExecutor({
14
14
  store: options.store,
15
- workspaceRouter: options.getWorkspaceRouter(),
15
+ getWorkspaceRouter: options.getWorkspaceRouter,
16
16
  });
17
17
  }
18
18
  supports(job) {
@@ -26,22 +26,13 @@ class LarkScheduleAdapter {
26
26
  getChannelRuntime: this.options.getChannelRuntime,
27
27
  }, (nextJob) => this.resolveThread(nextJob));
28
28
  const execution = await this.executor.execute(job, job.promptTemplate, executionPolicy);
29
- let platformMessageId = '';
30
- if (execution.replyText) {
31
- const channelRuntime = this.options.getChannelRuntime();
32
- if (!channelRuntime.sendScheduledMessage) {
33
- throw new Error('Lark channel runtime does not support scheduled delivery.');
34
- }
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
- if (!platformMessageId) {
37
- throw new Error('Lark gateway did not return a message id for scheduled delivery.');
38
- }
39
- }
40
29
  return {
41
30
  threadId: execution.threadId,
42
31
  runId: execution.runId,
43
32
  replyText: execution.replyText,
44
- platformMessageId: platformMessageId || undefined,
33
+ deliveryMode: 'bridge-stream',
34
+ deliveryStatus: 'succeeded',
35
+ lastBridgeEventAt: new Date().toISOString(),
45
36
  };
46
37
  }
47
38
  async resolveThread(job) {