@nextclaw/ui 0.12.19 → 0.12.20-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/dist/assets/api-C412zuay.js +15 -0
- package/dist/assets/app-manager-provider-Cm-KiZZG.js +1 -0
- package/dist/assets/app-navigation.config-BORqHkbN.js +1 -0
- package/dist/assets/{book-open-CVEuA0y5.js → book-open-DgLqYpNY.js} +1 -1
- package/dist/assets/{channels-list-page-BqhqaBf1.js → channels-list-page-sISO_4Yj.js} +2 -2
- package/dist/assets/{chat-D4KecKjB.js → chat-ChCu7LQD.js} +13 -12
- package/dist/assets/chat-page-BCaNZJGT.js +1 -0
- package/dist/assets/{chunk-JZWAC4HX-24FLdHl7.js → chunk-JZWAC4HX-DvbcIVPf.js} +1 -1
- package/dist/assets/{config-split-page-BGjVACdO.js → config-split-page-BMRGuCJQ.js} +1 -1
- package/dist/assets/{createLucideIcon-PPrXCGK8.js → createLucideIcon-BZkY6emz.js} +1 -1
- package/dist/assets/desktop-update-config-BfJ5iSeY.js +1 -0
- package/dist/assets/{dialog-CTCX7oLf.js → dialog-B-CXiFPZ.js} +1 -1
- package/dist/assets/{dist-FL5e8mMi.js → dist-DYVfg3q5.js} +1 -1
- package/dist/assets/{doc-browser-C02neCIE.js → doc-browser-BUlCkZo2.js} +1 -1
- package/dist/assets/doc-browser-CzCV73NJ.js +1 -0
- package/dist/assets/doc-browser-Doh2541x.js +1 -0
- package/dist/assets/{doc-browser-context-C-WPOji4.js → doc-browser-context-DfLHAWbG.js} +1 -1
- package/dist/assets/{es2015-BNy4R8AC.js → es2015-BXroVnPi.js} +1 -1
- package/dist/assets/{external-link-BNtqJE01.js → external-link-Sw3ah_JD.js} +1 -1
- package/dist/assets/{folder-QyJHVUNz.js → folder-D7-VTnkz.js} +1 -1
- package/dist/assets/{hash-BGYUE-zr.js → hash-zajSTDXZ.js} +1 -1
- package/dist/assets/i18n-C5Mibli1.js +1 -0
- package/dist/assets/index-CUmk8xFK.css +1 -0
- package/dist/assets/index-CqPDhosM.js +2 -0
- package/dist/assets/{key-round-DenCfA2w.js → key-round-CnI1mc9F.js} +1 -1
- package/dist/assets/loader-circle-B5i8oMMY.js +1 -0
- package/dist/assets/{logo-badge-CKAxvQFc.js → logo-badge-BQgKnVtz.js} +1 -1
- package/dist/assets/{logos-CqXnaJIm.js → logos-CqVm0q0W.js} +1 -1
- package/dist/assets/marketplace-page-C8uaWkfd.js +1 -0
- package/dist/assets/{marketplace-page-XnDa2ulT.js → marketplace-page-C9oZ01rM.js} +2 -2
- package/dist/assets/mcp-marketplace-page-DuEixgSs.js +40 -0
- package/dist/assets/mcp-marketplace-page-rNqr6ZpD.js +1 -0
- package/dist/assets/message-square-D6Z4NwpG.js +1 -0
- package/dist/assets/{model-config-ByeL6Toe.js → model-config-mfhqEZBG.js} +1 -1
- package/dist/assets/{notice-card-D00-02yg.js → notice-card-CozHB03G.js} +1 -1
- package/dist/assets/play-D8WJLnJe.js +1 -0
- package/dist/assets/plus-Di0KAkiO.js +1 -0
- package/dist/assets/{popover-AmJkxio3.js → popover-CPUPma-w.js} +1 -1
- package/dist/assets/{provider-scoped-model-input-CfFJsJp-.js → provider-scoped-model-input-CL9sti2I.js} +1 -1
- package/dist/assets/{providers-list-HMQzW2WV.js → providers-list-HPmL2akJ.js} +1 -1
- package/dist/assets/{refresh-ccw-B-dhb3yS.js → refresh-ccw-Bii4w8aB.js} +1 -1
- package/dist/assets/refresh-cw-BxojR62w.js +1 -0
- package/dist/assets/remote-oDlAdgVA.js +1 -0
- package/dist/assets/{rotate-cw-BWqAG3Fv.js → rotate-cw-1Xqa7LZ8.js} +1 -1
- package/dist/assets/runtime-config-page-BCshTAAE.js +1 -0
- package/dist/assets/{save-DpdkGieJ.js → save--BVI5wZX.js} +1 -1
- package/dist/assets/search-config-Bcnk9VlL.js +1 -0
- package/dist/assets/{search-CQUdr7j_.js → search-vChioOoe.js} +1 -1
- package/dist/assets/{secrets-config-YCsGd1am.js → secrets-config-Dde-5Y1w.js} +2 -2
- package/dist/assets/{select-DVUtSFHZ.js → select-BELPuXLW.js} +1 -1
- package/dist/assets/{sessions-config-page-BKN-XdKr.js → sessions-config-page-CG49_0Z6.js} +2 -2
- package/dist/assets/{setting-row-Cb5-lFs-.js → setting-row-D5DtT6Ny.js} +1 -1
- package/dist/assets/{settings-DgtZZlnF.js → settings-CiRChctQ.js} +1 -1
- package/dist/assets/skeleton-CFQRIUzt.js +1 -0
- package/dist/assets/{sparkles-DNSCyDhL.js → sparkles-D1ZKWdm4.js} +1 -1
- package/dist/assets/{status-dot-X_j51OfA.js → status-dot-Dv_hiUVa.js} +1 -1
- package/dist/assets/{tabs-custom-CcWmekaF.js → tabs-custom-CsACkVji.js} +1 -1
- package/dist/assets/{tag-chip-fdbK2wE6.js → tag-chip-D9BWWgYg.js} +1 -1
- package/dist/assets/theme-provider-DeBrTglS.js +1 -0
- package/dist/assets/{tooltip-BkZCQcKw.js → tooltip-CI0rpNee.js} +1 -1
- package/dist/assets/{trash-2-CqciSCsg.js → trash-2-rY9ZteZX.js} +1 -1
- package/dist/assets/use-config-CrWZ_TSF.js +1 -0
- package/dist/assets/{use-confirm-dialog-DSrb9205.js → use-confirm-dialog-hbynwWf2.js} +1 -1
- package/dist/assets/{use-infinite-scroll-loader-DmowtyTI.js → use-infinite-scroll-loader-Cw5qQr3-.js} +1 -1
- package/dist/assets/{use-viewport-layout-CaALCA51.js → use-viewport-layout-CWHVDC6z.js} +1 -1
- package/dist/assets/x-DpTzXQcX.js +1 -0
- package/dist/index.html +40 -39
- package/package.json +7 -6
- package/src/app/index.tsx +7 -1
- package/src/features/channels/components/config/weixin-channel-auth-section.tsx +1 -1
- package/src/features/chat/components/conversation/chat-conversation-panel.tsx +1 -0
- package/src/features/chat/components/conversation/chat-input-bar.container.tsx +9 -4
- package/src/features/chat/components/conversation/chat-message-list.container.test.tsx +64 -6
- package/src/features/chat/components/conversation/chat-message-list.container.tsx +185 -17
- package/src/features/chat/components/session/session-context-icon.tsx +1 -4
- package/src/features/chat/hooks/use-ncp-chat-derived-state.ts +3 -1
- package/src/features/chat/hooks/use-ncp-session-conversation.test.tsx +74 -2
- package/src/features/chat/hooks/use-ncp-session-conversation.ts +32 -10
- package/src/features/chat/hooks/use-selected-session-context-window-indicator.ts +20 -0
- package/src/features/chat/managers/ncp-chat-input.manager.test.ts +25 -0
- package/src/features/chat/managers/ncp-chat-input.manager.ts +5 -1
- package/src/features/chat/pages/ncp-chat-page.tsx +15 -11
- package/src/features/chat/stores/chat-thread.store.ts +8 -2
- package/src/features/chat/utils/chat-context-window-indicator.utils.ts +50 -0
- package/src/features/chat/utils/chat-runtime.utils.ts +1 -1
- package/src/features/chat/utils/ncp-chat-runtime-availability.utils.test.ts +165 -0
- package/src/features/chat/utils/ncp-chat-runtime-availability.utils.ts +50 -0
- package/src/features/chat/utils/ncp-session-adapter.utils.test.ts +27 -0
- package/src/features/chat/utils/ncp-session-adapter.utils.ts +6 -4
- package/src/features/chat/utils/ncp-session-context-metadata.utils.ts +121 -0
- package/src/features/chat/utils/session-context.utils.ts +1 -2
- package/src/features/system-status/components/config/runtime-config-editor.tsx +6 -0
- package/src/features/system-status/components/config/runtime-settings-card.tsx +12 -0
- package/src/features/system-status/components/desktop-update-config.test.tsx +17 -7
- package/src/features/system-status/components/desktop-update-config.tsx +75 -30
- package/src/features/system-status/hooks/use-system-status.ts +0 -11
- package/src/features/system-status/index.ts +4 -1
- package/src/features/system-status/managers/runtime-update.manager.ts +330 -0
- package/src/features/system-status/managers/system-status.manager.test.ts +0 -25
- package/src/features/system-status/managers/system-status.manager.ts +1 -30
- package/src/features/system-status/stores/runtime-update.store.ts +24 -0
- package/src/features/system-status/types/system-status.types.ts +0 -2
- package/src/features/system-status/utils/runtime-config-agent.utils.ts +6 -1
- package/src/features/system-status/utils/system-status.utils.test.ts +1 -85
- package/src/features/system-status/utils/system-status.utils.ts +1 -23
- package/src/platforms/desktop/managers/desktop-update.manager.ts +6 -0
- package/src/platforms/desktop/types/desktop-update.types.ts +21 -19
- package/src/shared/components/common/brand-header.test.tsx +142 -0
- package/src/shared/components/common/brand-header.tsx +93 -0
- package/src/shared/components/cron-config.tsx +1 -1
- package/src/shared/components/doc-browser/doc-browser-context.test.tsx +1 -1
- package/src/shared/components/doc-browser/doc-browser.tsx +1 -1
- package/src/shared/components/search-config.tsx +3 -3
- package/src/shared/lib/api/README.md +3 -0
- package/src/shared/lib/api/index.ts +2 -0
- package/src/shared/lib/api/ncp-attachments.ts +2 -2
- package/src/shared/lib/api/ncp-session.types.ts +92 -0
- package/src/shared/lib/api/runtime-update.service.ts +50 -0
- package/src/shared/lib/api/types.ts +9 -74
- package/src/shared/lib/i18n/{chat.ts → chat-labels.utils.ts} +13 -1
- package/src/shared/lib/i18n/desktop-update-labels.utils.ts +65 -0
- package/src/shared/lib/i18n/index.ts +4 -5
- package/src/shared/lib/i18n/runtime/i18n-language-owner.ts +5 -5
- package/src/shared/lib/transport/remote-transport.service.ts +1 -1
- package/src/shared/lib/ui-document-title/index.ts +1 -1
- package/tsconfig.json +1 -0
- package/dist/assets/api-BurjmW4A.js +0 -15
- package/dist/assets/app-manager-provider-DhxUmyTv.js +0 -1
- package/dist/assets/app-navigation.config-Bpd16Pem.js +0 -1
- package/dist/assets/chat-page-Cc7n80lW.js +0 -1
- package/dist/assets/desktop-update-config-fMLlSStv.js +0 -1
- package/dist/assets/doc-browser-COj7x090.js +0 -1
- package/dist/assets/doc-browser-fyn7eDTp.js +0 -1
- package/dist/assets/i18n-CM4y8Mw9.js +0 -1
- package/dist/assets/index-CtVSzMPM.js +0 -2
- package/dist/assets/index-N3hjuljD.css +0 -1
- package/dist/assets/loader-circle-R23uEPkM.js +0 -1
- package/dist/assets/marketplace-page-mF-M5mku.js +0 -1
- package/dist/assets/mcp-marketplace-page-BArKWcRZ.js +0 -40
- package/dist/assets/mcp-marketplace-page-DBUcIIHJ.js +0 -1
- package/dist/assets/message-square-Dm34zD6k.js +0 -1
- package/dist/assets/play-ul4L6MWm.js +0 -1
- package/dist/assets/plus-D14303DH.js +0 -1
- package/dist/assets/remote-B4ELSd3u.js +0 -1
- package/dist/assets/runtime-config-page-N4FP6H0M.js +0 -1
- package/dist/assets/search-config-B62TY-z2.js +0 -1
- package/dist/assets/skeleton-BCPi52jT.js +0 -1
- package/dist/assets/theme-provider-WTWq_jYq.js +0 -1
- package/dist/assets/use-config-CyvhbRhf.js +0 -1
- package/dist/assets/x-tYcSDsrY.js +0 -1
- /package/dist/assets/{config-hints-CPNzbMEp.js → config-hints-MogHYQ8G.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,m as t,p as n,u as r}from"./i18n-
|
|
1
|
+
import{_ as e,m as t,p as n,u as r}from"./i18n-C5Mibli1.js";import{_ as i,c as a,d as o,f as s,g as c,h as l,i as u,o as d,u as f}from"./es2015-BXroVnPi.js";import{t as p}from"./dist-DYVfg3q5.js";import{C as m,E as h,S as g,T as _,w as v,x as y}from"./select-BELPuXLW.js";var b=e(t(),1),x=n(),[S,C]=l(`Tooltip`,[h]),w=h(),T=`TooltipProvider`,E=700,D=`tooltip.open`,[O,k]=S(T),A=e=>{let{__scopeTooltip:t,delayDuration:n=E,skipDelayDuration:r=300,disableHoverableContent:i=!1,children:a}=e,o=b.useRef(!0),s=b.useRef(!1),c=b.useRef(0);return b.useEffect(()=>{let e=c.current;return()=>window.clearTimeout(e)},[]),(0,x.jsx)(O,{scope:t,isOpenDelayedRef:o,delayDuration:n,onOpen:b.useCallback(()=>{window.clearTimeout(c.current),o.current=!1},[]),onClose:b.useCallback(()=>{window.clearTimeout(c.current),c.current=window.setTimeout(()=>o.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:b.useCallback(e=>{s.current=e},[]),disableHoverableContent:i,children:a})};A.displayName=T;var j=`Tooltip`,[ee,M]=S(j),N=e=>{let{__scopeTooltip:t,children:n,open:r,defaultOpen:i,onOpenChange:a,disableHoverableContent:c,delayDuration:l}=e,u=k(j,e.__scopeTooltip),d=w(t),[f,p]=b.useState(null),m=s(),h=b.useRef(0),g=c??u.disableHoverableContent,v=l??u.delayDuration,y=b.useRef(!1),[S,C]=o({prop:r,defaultProp:i??!1,onChange:e=>{e?(u.onOpen(),document.dispatchEvent(new CustomEvent(D))):u.onClose(),a?.(e)},caller:j}),T=b.useMemo(()=>S?y.current?`delayed-open`:`instant-open`:`closed`,[S]),E=b.useCallback(()=>{window.clearTimeout(h.current),h.current=0,y.current=!1,C(!0)},[C]),O=b.useCallback(()=>{window.clearTimeout(h.current),h.current=0,C(!1)},[C]),A=b.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{y.current=!0,C(!0),h.current=0},v)},[v,C]);return b.useEffect(()=>()=>{h.current&&=(window.clearTimeout(h.current),0)},[]),(0,x.jsx)(_,{...d,children:(0,x.jsx)(ee,{scope:t,contentId:m,open:S,stateAttribute:T,trigger:f,onTriggerChange:p,onTriggerEnter:b.useCallback(()=>{u.isOpenDelayedRef.current?A():E()},[u.isOpenDelayedRef,A,E]),onTriggerLeave:b.useCallback(()=>{g?O():(window.clearTimeout(h.current),h.current=0)},[O,g]),onOpen:E,onClose:O,disableHoverableContent:g,children:n})})};N.displayName=j;var P=`TooltipTrigger`,F=b.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,o=M(P,n),s=k(P,n),l=w(n),u=c(t,b.useRef(null),o.onTriggerChange),d=b.useRef(!1),f=b.useRef(!1),p=b.useCallback(()=>d.current=!1,[]);return b.useEffect(()=>()=>document.removeEventListener(`pointerup`,p),[p]),(0,x.jsx)(g,{asChild:!0,...l,children:(0,x.jsx)(a.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...r,ref:u,onPointerMove:i(e.onPointerMove,e=>{e.pointerType!==`touch`&&!f.current&&!s.isPointerInTransitRef.current&&(o.onTriggerEnter(),f.current=!0)}),onPointerLeave:i(e.onPointerLeave,()=>{o.onTriggerLeave(),f.current=!1}),onPointerDown:i(e.onPointerDown,()=>{o.open&&o.onClose(),d.current=!0,document.addEventListener(`pointerup`,p,{once:!0})}),onFocus:i(e.onFocus,()=>{d.current||o.onOpen()}),onBlur:i(e.onBlur,o.onClose),onClick:i(e.onClick,o.onClose)})})});F.displayName=P;var I=`TooltipPortal`,[L,R]=S(I,{forceMount:void 0}),z=e=>{let{__scopeTooltip:t,forceMount:n,children:r,container:i}=e,a=M(I,t);return(0,x.jsx)(L,{scope:t,forceMount:n,children:(0,x.jsx)(p,{present:n||a.open,children:(0,x.jsx)(u,{asChild:!0,container:i,children:r})})})};z.displayName=I;var B=`TooltipContent`,V=b.forwardRef((e,t)=>{let n=R(B,e.__scopeTooltip),{forceMount:r=n.forceMount,side:i=`top`,...a}=e,o=M(B,e.__scopeTooltip);return(0,x.jsx)(p,{present:r||o.open,children:o.disableHoverableContent?(0,x.jsx)(K,{side:i,...a,ref:t}):(0,x.jsx)(H,{side:i,...a,ref:t})})}),H=b.forwardRef((e,t)=>{let n=M(B,e.__scopeTooltip),r=k(B,e.__scopeTooltip),i=b.useRef(null),a=c(t,i),[o,s]=b.useState(null),{trigger:l,onClose:u}=n,d=i.current,{onPointerInTransitChange:f}=r,p=b.useCallback(()=>{s(null),f(!1)},[f]),m=b.useCallback((e,t)=>{let n=e.currentTarget,r={x:e.clientX,y:e.clientY},i=re(r,ne(r,n.getBoundingClientRect())),a=ie(t.getBoundingClientRect());s(oe([...i,...a])),f(!0)},[f]);return b.useEffect(()=>()=>p(),[p]),b.useEffect(()=>{if(l&&d){let e=e=>m(e,d),t=e=>m(e,l);return l.addEventListener(`pointerleave`,e),d.addEventListener(`pointerleave`,t),()=>{l.removeEventListener(`pointerleave`,e),d.removeEventListener(`pointerleave`,t)}}},[l,d,m,p]),b.useEffect(()=>{if(o){let e=e=>{let t=e.target,n={x:e.clientX,y:e.clientY},r=l?.contains(t)||d?.contains(t),i=!ae(n,o);r?p():i&&(p(),u())};return document.addEventListener(`pointermove`,e),()=>document.removeEventListener(`pointermove`,e)}},[l,d,o,u,p]),(0,x.jsx)(K,{...e,ref:a})}),[U,W]=S(j,{isInside:!1}),G=f(`TooltipContent`),K=b.forwardRef((e,t)=>{let{__scopeTooltip:n,children:r,"aria-label":i,onEscapeKeyDown:a,onPointerDownOutside:o,...s}=e,c=M(B,n),l=w(n),{onClose:u}=c;return b.useEffect(()=>(document.addEventListener(D,u),()=>document.removeEventListener(D,u)),[u]),b.useEffect(()=>{if(c.trigger){let e=e=>{e.target?.contains(c.trigger)&&u()};return window.addEventListener(`scroll`,e,{capture:!0}),()=>window.removeEventListener(`scroll`,e,{capture:!0})}},[c.trigger,u]),(0,x.jsx)(d,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:o,onFocusOutside:e=>e.preventDefault(),onDismiss:u,children:(0,x.jsxs)(v,{"data-state":c.stateAttribute,...l,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":`var(--radix-popper-transform-origin)`,"--radix-tooltip-content-available-width":`var(--radix-popper-available-width)`,"--radix-tooltip-content-available-height":`var(--radix-popper-available-height)`,"--radix-tooltip-trigger-width":`var(--radix-popper-anchor-width)`,"--radix-tooltip-trigger-height":`var(--radix-popper-anchor-height)`},children:[(0,x.jsx)(G,{children:r}),(0,x.jsx)(U,{scope:n,isInside:!0,children:(0,x.jsx)(y,{id:c.contentId,role:`tooltip`,children:i||r})})]})})});V.displayName=B;var q=`TooltipArrow`,te=b.forwardRef((e,t)=>{let{__scopeTooltip:n,...r}=e,i=w(n);return W(q,n).isInside?null:(0,x.jsx)(m,{...i,...r,ref:t})});te.displayName=q;function ne(e,t){let n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),i=Math.abs(t.right-e.x),a=Math.abs(t.left-e.x);switch(Math.min(n,r,i,a)){case a:return`left`;case i:return`right`;case n:return`top`;case r:return`bottom`;default:throw Error(`unreachable`)}}function re(e,t,n=5){let r=[];switch(t){case`top`:r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case`bottom`:r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case`left`:r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case`right`:r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function ie(e){let{top:t,right:n,bottom:r,left:i}=e;return[{x:i,y:t},{x:n,y:t},{x:n,y:r},{x:i,y:r}]}function ae(e,t){let{x:n,y:r}=e,i=!1;for(let e=0,a=t.length-1;e<t.length;a=e++){let o=t[e],s=t[a],c=o.x,l=o.y,u=s.x,d=s.y;l>r!=d>r&&n<(u-c)*(r-l)/(d-l)+c&&(i=!i)}return i}function oe(e){let t=e.slice();return t.sort((e,t)=>e.x<t.x?-1:e.x>t.x?1:e.y<t.y?-1:e.y>t.y?1:0),se(t)}function se(e){if(e.length<=1)return e.slice();let t=[];for(let n=0;n<e.length;n++){let r=e[n];for(;t.length>=2;){let e=t[t.length-1],n=t[t.length-2];if((e.x-n.x)*(r.y-n.y)>=(e.y-n.y)*(r.x-n.x))t.pop();else break}t.push(r)}t.pop();let n=[];for(let t=e.length-1;t>=0;t--){let r=e[t];for(;n.length>=2;){let e=n[n.length-1],t=n[n.length-2];if((e.x-t.x)*(r.y-t.y)>=(e.y-t.y)*(r.x-t.x))n.pop();else break}n.push(r)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var J=A,Y=N,X=F,Z=z,Q=V,ce=J,le=Y,ue=X,$=b.forwardRef(({className:e,sideOffset:t=4,...n},i)=>(0,x.jsx)(Z,{children:(0,x.jsx)(Q,{ref:i,sideOffset:t,className:r(`z-[var(--z-tooltip)] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2`,e),...n})}));$.displayName=Q.displayName;export{Q as a,Y as c,ue as i,X as l,$ as n,Z as o,ce as r,J as s,le as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./createLucideIcon-
|
|
1
|
+
import{t as e}from"./createLucideIcon-BZkY6emz.js";var t=e(`Trash2`,[[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6`,key:`4alrt4`}],[`path`,{d:`M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2`,key:`v07s0e`}],[`line`,{x1:`10`,x2:`10`,y1:`11`,y2:`17`,key:`1uufr5`}],[`line`,{x1:`14`,x2:`14`,y1:`11`,y2:`17`,key:`xtxkd`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./i18n-C5Mibli1.js";import{$ as t,B as n,F as r,G as i,I as a,It as o,J as s,K as c,L as l,Lt as u,N as d,P as f,Q as p,R as m,Rt as h,U as g,V as _,Vt as v,W as y,X as b,Y as x,Z as S,_ as C,et as w,g as T,h as E,m as D,p as O,q as k,v as A,y as j,z as M}from"./api-C412zuay.js";function ee(){return h({queryKey:[`config`],queryFn:m,staleTime:3e4,refetchOnWindowFocus:!0})}function N(){return h({queryKey:[`app-meta`],queryFn:l,staleTime:1/0})}function P(){return h({queryKey:[`config-meta`],queryFn:M,staleTime:1/0})}function F(){return h({queryKey:[`config-schema`],queryFn:n,staleTime:1/0})}function I(){let t=v();return u({mutationFn:b,onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),o.success(e(`configSaved`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function L(){let n=v();return u({mutationFn:({data:e})=>t(e),onSuccess:()=>{n.invalidateQueries({queryKey:[`config`]}),n.invalidateQueries({queryKey:[`config-meta`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function R(){let t=v();return u({mutationFn:({provider:e,data:t})=>S(e,t),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),o.success(e(`configSaved`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function z(){let t=v();return u({mutationFn:({data:e})=>d(e??{}),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),o.success(e(`configSaved`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function B(){let t=v();return u({mutationFn:({provider:e})=>r(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),o.success(e(`configSaved`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function V(){return u({mutationFn:({provider:e,data:t})=>s(e,t)})}function H(){return u({mutationFn:({provider:e,data:t})=>k(e,t)})}function U(){return u({mutationFn:({provider:e,data:t})=>y(e,t)})}function W(){return u({mutationFn:({provider:e})=>g(e)})}function G(){let t=v();return u({mutationFn:({channel:e,data:t})=>x(e,t),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),t.invalidateQueries({queryKey:[`config-meta`]}),o.success(e(`configSavedApplying`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function K(){let t=v();return u({mutationFn:({data:e})=>p(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function q(){let t=v();return u({mutationFn:({data:e})=>w(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`config`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function J(){return u({mutationFn:({actionId:e,data:t})=>a(e,t),onError:t=>{o.error(e(`error`)+`: `+t.message)}})}function Y(e){return h({queryKey:[`ncp-sessions`,e?.limit??null],queryFn:()=>A(e),staleTime:5e3,retry:!1})}function X(e,t=200){return h({queryKey:[`ncp-session-messages`,e,t],queryFn:()=>T(e,t),enabled:!!e,staleTime:5e3,retry:!1})}function Z(e){return h({queryKey:[`ncp-session-skills`,e.sessionId,e.projectRoot??null],queryFn:()=>C(e.sessionId,{...Object.prototype.hasOwnProperty.call(e,`projectRoot`)?{projectRoot:e.projectRoot??null}:{}}),enabled:!!e.sessionId,staleTime:5e3,retry:!1})}function Q(){let t=v();return u({mutationFn:({sessionId:e})=>E(e),onSuccess:(n,r)=>{O(t,r.sessionId),t.removeQueries({queryKey:[`ncp-session-messages`,r.sessionId]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function $(){let t=v();return u({mutationFn:({sessionId:e,data:t})=>j(e,t),onSuccess:n=>{D(t,n),t.invalidateQueries({queryKey:[`ncp-session-skills`,n.sessionId]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function te(e={all:!0}){return h({queryKey:[`cron`,e],queryFn:()=>_(e),staleTime:1e4})}function ne(){let t=v();return u({mutationFn:({id:e})=>f(e),onSuccess:()=>{t.invalidateQueries({queryKey:[`cron`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function re(){let t=v();return u({mutationFn:({id:e,enabled:t})=>c(e,{enabled:t}),onSuccess:()=>{t.invalidateQueries({queryKey:[`cron`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}function ie(){let t=v();return u({mutationFn:({id:e,force:t})=>i(e,{force:t}),onSuccess:()=>{t.invalidateQueries({queryKey:[`cron`]}),o.success(e(`configSavedApplied`))},onError:t=>{o.error(e(`configSaveFailed`)+`: `+t.message)}})}export{R as C,q as E,$ as S,L as T,H as _,z as a,G as b,Q as c,W as d,X as f,ie as g,U as h,F as i,B as l,Y as m,ee as n,te as o,Z as p,P as r,ne as s,N as t,J as u,V as v,K as w,I as x,re as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,i as t,m as n,p as r}from"./i18n-
|
|
1
|
+
import{_ as e,i as t,m as n,p as r}from"./i18n-C5Mibli1.js";import{Mt as i}from"./api-C412zuay.js";import{a,i as o,n as s,o as c,r as l,t as u}from"./dialog-B-CXiFPZ.js";var d=e(n(),1),f=r(),p=({open:e,onOpenChange:n,title:r,description:d,confirmLabel:p=t(`confirm`),cancelLabel:m=t(`cancel`),variant:h=`default`,onConfirm:g,onCancel:_})=>(0,f.jsx)(u,{open:e,onOpenChange:n,children:(0,f.jsxs)(s,{className:`[&>:last-child]:hidden`,onCloseAutoFocus:e=>e.preventDefault(),children:[(0,f.jsxs)(a,{children:[(0,f.jsx)(c,{children:r}),d?(0,f.jsx)(l,{children:d}):null]}),(0,f.jsxs)(o,{className:`gap-2 sm:gap-0`,children:[(0,f.jsx)(i,{type:`button`,variant:`outline`,onClick:()=>{_(),n(!1)},children:m}),(0,f.jsx)(i,{type:`button`,variant:h===`destructive`?`destructive`:`default`,onClick:()=>{g(),n(!1)},children:p})]})]})}),m={open:!1,title:``,description:``,confirmLabel:t(`confirm`),cancelLabel:t(`cancel`),variant:`default`,resolve:null};function h(){let[e,n]=(0,d.useState)(m),r=(0,d.useCallback)(e=>new Promise(r=>{n({open:!0,title:e.title,description:e.description??``,confirmLabel:e.confirmLabel??t(`confirm`),cancelLabel:e.cancelLabel??t(`cancel`),variant:e.variant??`default`,resolve:e=>{r(e),n(e=>({...e,open:!1,resolve:null}))}})}),[]),i=(0,d.useCallback)(e=>{n(t=>(!e&&t.resolve&&t.resolve(!1),{...t,open:e,resolve:e?t.resolve:null}))},[]);return{confirm:r,ConfirmDialog:(0,d.useCallback)(()=>(0,f.jsx)(p,{open:e.open,onOpenChange:i,title:e.title,description:e.description||void 0,confirmLabel:e.confirmLabel,cancelLabel:e.cancelLabel,variant:e.variant,onConfirm:()=>e.resolve?.(!0),onCancel:()=>e.resolve?.(!1)}),[e,i])}}export{h as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,i as t,m as n,p as r}from"./i18n-
|
|
1
|
+
import{_ as e,i as t,m as n,p as r}from"./i18n-C5Mibli1.js";import{Gt as i,Ht as a,Ut as o,Wt as s,zt as c}from"./api-C412zuay.js";import{t as l}from"./createLucideIcon-BZkY6emz.js";import{a as u,i as d,n as f,r as p,t as m}from"./select-BELPuXLW.js";import{t as h}from"./skeleton-CFQRIUzt.js";var g=class extends i{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:s()})}getOptimisticResult(e){return e.behavior=s(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:s,isError:c,isRefetchError:l}=r,u=n.fetchMeta?.fetchMore?.direction,d=c&&u===`forward`,f=i&&u===`forward`,p=c&&u===`backward`,m=i&&u===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:a(t,n.data),hasPreviousPage:o(t,n.data),isFetchNextPageError:d,isFetchingNextPage:f,isFetchPreviousPageError:p,isFetchingPreviousPage:m,isRefetchError:l&&!d&&!p,isRefetching:s&&!f&&!m}}};function _(e,t){return c(e,g,t)}var v=l(`PackageSearch`,[[`path`,{d:`M21 10V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l2-1.14`,key:`e7tb2h`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`line`,{x1:`12`,x2:`12`,y1:`22`,y2:`12`,key:`a4e8g8`}],[`circle`,{cx:`18.5`,cy:`15.5`,r:`2.5`,key:`b5zd12`}],[`path`,{d:`M20.27 17.27 22 19`,key:`1l4muz`}]]);function y(e){if(!e||e.pages.length===0)return;let t=e.pages.flatMap(e=>e.items);return{...e.pages[e.pages.length-1],items:t,pages:e.pages,loadedItems:t.length,loadedPages:e.pages.length}}var b=r();function x({scope:e,searchText:n,searchPlaceholder:r,sort:i,onSearchTextChange:a,onSortChange:o}){return(0,b.jsx)(`div`,{className:`mb-4`,children:(0,b.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,b.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,b.jsx)(v,{className:`absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-gray-400`}),(0,b.jsx)(`input`,{value:n,onChange:e=>a(e.target.value),placeholder:r,className:`h-9 w-full rounded-xl border border-gray-200/80 pl-9 pr-3 text-sm focus:outline-none focus:ring-1 focus:ring-primary/40`})]}),e===`all`&&(0,b.jsxs)(m,{value:i,onValueChange:e=>o(e),children:[(0,b.jsx)(d,{className:`h-9 w-[150px] shrink-0 rounded-lg`,children:(0,b.jsx)(u,{})}),(0,b.jsxs)(f,{children:[(0,b.jsx)(p,{value:`relevance`,children:t(`marketplaceSortRelevance`)}),(0,b.jsx)(p,{value:`updated`,children:t(`marketplaceSortUpdated`)})]})]})]})})}function S({count:e}){return(0,b.jsx)(b.Fragment,{children:Array.from({length:e},(e,t)=>(0,b.jsx)(`article`,{className:`rounded-2xl border border-gray-200/40 bg-white px-5 py-4 shadow-sm`,children:(0,b.jsxs)(`div`,{className:`flex items-start justify-between gap-3.5`,children:[(0,b.jsxs)(`div`,{className:`flex min-w-0 flex-1 gap-3`,children:[(0,b.jsx)(h,{className:`h-10 w-10 shrink-0 rounded-xl`}),(0,b.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-2 pt-0.5`,children:[(0,b.jsx)(h,{className:`h-4 w-32 max-w-[70%]`}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(h,{className:`h-3 w-12`}),(0,b.jsx)(h,{className:`h-3 w-24`})]}),(0,b.jsx)(h,{className:`h-3 w-full`})]})]}),(0,b.jsx)(h,{className:`h-8 w-20 shrink-0 rounded-xl`})]})},`marketplace-skeleton-${t}`))})}function C({hasMore:e,loading:n,sentinelRef:r}){return!e&&!n?null:(0,b.jsxs)(`div`,{className:`py-4`,children:[e&&(0,b.jsx)(`div`,{ref:r,className:`h-1 w-full`,"aria-hidden":`true`}),n&&(0,b.jsx)(`div`,{"data-testid":`marketplace-loading-more`,className:`pt-3 text-center text-xs text-gray-500`,children:t(`loading`)})]})}function w(e){let t=e.trim().toLowerCase().replace(/_/g,`-`),n=[t,t.split(`-`)[0],`en`];return Array.from(new Set(n.filter(Boolean)))}function T(e){return e.trim().toLowerCase().replace(/_/g,`-`)}function E(e,t,n){if(e){let t=Object.entries(e).map(([e,t])=>({locale:T(e),text:typeof t==`string`?t.trim():``})).filter(e=>e.text.length>0);if(t.length>0){let e=new Map(t.map(e=>[e.locale,e.text]));for(let t of n){let n=T(t),r=e.get(n);if(r)return r}for(let e of n){let n=T(e).split(`-`)[0];if(!n)continue;let r=t.find(e=>e.locale===n||e.locale.startsWith(`${n}-`));if(r)return r.text}return t[0]?.text??``}}return t?.trim()??``}function D(e,t){if(!e)return``;for(let n of t)if(T(n).split(`-`)[0]===`zh`&&e.descriptionZh?.trim())return e.descriptionZh.trim();return e.description?.trim()?e.description.trim():e.descriptionZh?.trim()?e.descriptionZh.trim():``}var O=e(n(),1),k=160;function A(e){let t=(0,O.useRef)(null),n=(0,O.useRef)(null),r=(0,O.useRef)(e.onLoadMore),i=(0,O.useRef)(!1);return(0,O.useEffect)(()=>{r.current=e.onLoadMore},[e.onLoadMore]),(0,O.useEffect)(()=>{e.disabled&&(i.current=!1)},[e.disabled]),(0,O.useEffect)(()=>{let a=t.current,o=n.current,s=e.thresholdPx??k;if(e.disabled||!a||!o)return;let c=()=>{i.current||e.disabled||(i.current=!0,Promise.resolve(r.current()).finally(()=>{i.current=!1}))},l=()=>{o.getBoundingClientRect().top-a.getBoundingClientRect().bottom<=s&&c()};if(typeof IntersectionObserver==`function`){let e=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&c()},{root:a,rootMargin:`0px 0px ${s}px 0px`});return e.observe(o),l(),()=>{e.disconnect()}}return a.addEventListener(`scroll`,l,{passive:!0}),l(),()=>{a.removeEventListener(`scroll`,l)}},[e.disabled,e.thresholdPx,e.watchValue]),{containerRef:t,sentinelRef:n}}export{x as a,y as c,E as i,_ as l,w as n,C as o,D as r,S as s,A as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,m as t}from"./i18n-
|
|
1
|
+
import{_ as e,m as t}from"./i18n-C5Mibli1.js";import{St as n}from"./api-C412zuay.js";function r(e){return typeof e!=`number`||!Number.isFinite(e)?`desktop`:e<=767?`mobile`:`desktop`}function i(){let e=typeof window>`u`?null:window.innerWidth??null;return{mode:r(e),width:e}}var a=n(()=>i()),o=new class{constructor(){this.consumerCount=0,this.started=!1,this.attach=()=>(this.consumerCount+=1,this.consumerCount===1&&this.start(),()=>{this.consumerCount=Math.max(0,this.consumerCount-1),this.consumerCount===0&&this.stop()}),this.start=()=>{this.started||typeof window>`u`||(this.started=!0,window.addEventListener(`resize`,this.handleViewportChange),window.addEventListener(`orientationchange`,this.handleViewportChange),this.syncFromWindow())},this.stop=()=>{!this.started||typeof window>`u`||(window.removeEventListener(`resize`,this.handleViewportChange),window.removeEventListener(`orientationchange`,this.handleViewportChange),this.started=!1)},this.getSnapshot=()=>a.getState(),this.resetForTests=()=>{this.consumerCount=0,this.stop(),a.setState(i())},this.handleViewportChange=()=>{this.syncFromWindow()},this.syncFromWindow=()=>{if(typeof window>`u`)return;let e=window.innerWidth??null;a.setState({width:e,mode:r(e)})}}},s=e(t(),1);function c(){(0,s.useEffect)(()=>o.attach(),[]);let e=a(e=>e.mode);return{mode:e,isMobile:e===`mobile`,isDesktop:e===`desktop`}}export{o as n,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-BZkY6emz.js";var t=e(`X`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);export{t};
|
package/dist/index.html
CHANGED
|
@@ -78,45 +78,46 @@
|
|
|
78
78
|
})();
|
|
79
79
|
</script>
|
|
80
80
|
<title>NextClaw</title>
|
|
81
|
-
<script type="module" crossorigin src="/assets/index-
|
|
82
|
-
<link rel="modulepreload" crossorigin href="/assets/i18n-
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/api-
|
|
84
|
-
<link rel="modulepreload" crossorigin href="/assets/es2015-
|
|
85
|
-
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-
|
|
86
|
-
<link rel="modulepreload" crossorigin href="/assets/select-
|
|
87
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
88
|
-
<link rel="modulepreload" crossorigin href="/assets/x-
|
|
89
|
-
<link rel="modulepreload" crossorigin href="/assets/dialog-
|
|
90
|
-
<link rel="modulepreload" crossorigin href="/assets/popover-
|
|
91
|
-
<link rel="modulepreload" crossorigin href="/assets/tooltip-
|
|
92
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
93
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
95
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
96
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
97
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
98
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
99
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
100
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
101
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
102
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
103
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
104
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
105
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
106
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
107
|
-
<link rel="modulepreload" crossorigin href="/assets/doc-browser-
|
|
108
|
-
<link rel="modulepreload" crossorigin href="/assets/doc-browser-
|
|
109
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
110
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
111
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
112
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
113
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
114
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
115
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
116
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
117
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
118
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
119
|
-
<link rel="
|
|
81
|
+
<script type="module" crossorigin src="/assets/index-CqPDhosM.js"></script>
|
|
82
|
+
<link rel="modulepreload" crossorigin href="/assets/i18n-C5Mibli1.js">
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/api-C412zuay.js">
|
|
84
|
+
<link rel="modulepreload" crossorigin href="/assets/es2015-BXroVnPi.js">
|
|
85
|
+
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-BZkY6emz.js">
|
|
86
|
+
<link rel="modulepreload" crossorigin href="/assets/select-BELPuXLW.js">
|
|
87
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-DYVfg3q5.js">
|
|
88
|
+
<link rel="modulepreload" crossorigin href="/assets/x-DpTzXQcX.js">
|
|
89
|
+
<link rel="modulepreload" crossorigin href="/assets/dialog-B-CXiFPZ.js">
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/popover-CPUPma-w.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/tooltip-CI0rpNee.js">
|
|
92
|
+
<link rel="modulepreload" crossorigin href="/assets/refresh-cw-BxojR62w.js">
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-JZWAC4HX-DvbcIVPf.js">
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/use-config-CrWZ_TSF.js">
|
|
95
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-provider-DeBrTglS.js">
|
|
96
|
+
<link rel="modulepreload" crossorigin href="/assets/search-vChioOoe.js">
|
|
97
|
+
<link rel="modulepreload" crossorigin href="/assets/book-open-DgLqYpNY.js">
|
|
98
|
+
<link rel="modulepreload" crossorigin href="/assets/external-link-Sw3ah_JD.js">
|
|
99
|
+
<link rel="modulepreload" crossorigin href="/assets/folder-D7-VTnkz.js">
|
|
100
|
+
<link rel="modulepreload" crossorigin href="/assets/logos-CqVm0q0W.js">
|
|
101
|
+
<link rel="modulepreload" crossorigin href="/assets/loader-circle-B5i8oMMY.js">
|
|
102
|
+
<link rel="modulepreload" crossorigin href="/assets/plus-Di0KAkiO.js">
|
|
103
|
+
<link rel="modulepreload" crossorigin href="/assets/refresh-ccw-Bii4w8aB.js">
|
|
104
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-CiRChctQ.js">
|
|
105
|
+
<link rel="modulepreload" crossorigin href="/assets/sparkles-D1ZKWdm4.js">
|
|
106
|
+
<link rel="modulepreload" crossorigin href="/assets/trash-2-rY9ZteZX.js">
|
|
107
|
+
<link rel="modulepreload" crossorigin href="/assets/doc-browser-context-DfLHAWbG.js">
|
|
108
|
+
<link rel="modulepreload" crossorigin href="/assets/doc-browser-CzCV73NJ.js">
|
|
109
|
+
<link rel="modulepreload" crossorigin href="/assets/doc-browser-BUlCkZo2.js">
|
|
110
|
+
<link rel="modulepreload" crossorigin href="/assets/use-viewport-layout-CWHVDC6z.js">
|
|
111
|
+
<link rel="modulepreload" crossorigin href="/assets/logo-badge-BQgKnVtz.js">
|
|
112
|
+
<link rel="modulepreload" crossorigin href="/assets/skeleton-CFQRIUzt.js">
|
|
113
|
+
<link rel="modulepreload" crossorigin href="/assets/chat-ChCu7LQD.js">
|
|
114
|
+
<link rel="modulepreload" crossorigin href="/assets/key-round-CnI1mc9F.js">
|
|
115
|
+
<link rel="modulepreload" crossorigin href="/assets/message-square-D6Z4NwpG.js">
|
|
116
|
+
<link rel="modulepreload" crossorigin href="/assets/app-navigation.config-BORqHkbN.js">
|
|
117
|
+
<link rel="modulepreload" crossorigin href="/assets/notice-card-CozHB03G.js">
|
|
118
|
+
<link rel="modulepreload" crossorigin href="/assets/status-dot-Dv_hiUVa.js">
|
|
119
|
+
<link rel="modulepreload" crossorigin href="/assets/app-manager-provider-Cm-KiZZG.js">
|
|
120
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CUmk8xFK.css">
|
|
120
121
|
</head>
|
|
121
122
|
|
|
122
123
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/ui",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.20-beta.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,11 +28,12 @@
|
|
|
28
28
|
"tailwind-merge": "^2.5.4",
|
|
29
29
|
"zod": "^3.23.8",
|
|
30
30
|
"zustand": "^5.0.2",
|
|
31
|
-
"@nextclaw/
|
|
32
|
-
"@nextclaw/agent-chat": "0.
|
|
33
|
-
"@nextclaw/ncp
|
|
34
|
-
"@nextclaw/ncp-http-agent-client": "0.3.
|
|
35
|
-
"@nextclaw/
|
|
31
|
+
"@nextclaw/kernel": "0.1.2-beta.1",
|
|
32
|
+
"@nextclaw/agent-chat-ui": "0.3.13-beta.0",
|
|
33
|
+
"@nextclaw/ncp": "0.5.6-beta.0",
|
|
34
|
+
"@nextclaw/ncp-http-agent-client": "0.3.18-beta.0",
|
|
35
|
+
"@nextclaw/ncp-react": "0.4.26-beta.0",
|
|
36
|
+
"@nextclaw/agent-chat": "0.1.10"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
38
39
|
"@testing-library/react": "^16.3.0",
|
package/src/app/index.tsx
CHANGED
|
@@ -10,7 +10,7 @@ import { LanguageSettingsPage } from "@/features/settings";
|
|
|
10
10
|
import { SettingsEntryPage } from "@/app/components/layout/settings-entry-page";
|
|
11
11
|
import { LoginPage } from "@/components/auth/login-page";
|
|
12
12
|
import { AccountPanel } from "@/features/account";
|
|
13
|
-
import { useSystemStatusSources } from "@/features/system-status";
|
|
13
|
+
import { runtimeUpdateManager, useSystemStatusSources } from "@/features/system-status";
|
|
14
14
|
import {
|
|
15
15
|
isTransientAuthStatusBootstrapError,
|
|
16
16
|
useAuthStatus,
|
|
@@ -214,6 +214,12 @@ function ProtectedRoutes() {
|
|
|
214
214
|
function ProtectedApp() {
|
|
215
215
|
useRealtimeQueryBridge(appQueryClient);
|
|
216
216
|
useSystemStatusSources();
|
|
217
|
+
useEffect(() => {
|
|
218
|
+
void runtimeUpdateManager.start();
|
|
219
|
+
return () => {
|
|
220
|
+
runtimeUpdateManager.stop();
|
|
221
|
+
};
|
|
222
|
+
}, []);
|
|
217
223
|
|
|
218
224
|
return (
|
|
219
225
|
<AppManagerProvider>
|
|
@@ -17,7 +17,7 @@ type WeixinChannelAuthSectionProps = {
|
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
function resolveConnectedAccountIds(channelConfig: Record<string, unknown>): string[] {
|
|
20
|
-
const accounts = channelConfig
|
|
20
|
+
const { accounts } = channelConfig;
|
|
21
21
|
const ids = new Set<string>();
|
|
22
22
|
if (typeof channelConfig.defaultAccountId === 'string' && channelConfig.defaultAccountId.trim()) {
|
|
23
23
|
ids.add(channelConfig.defaultAccountId.trim());
|
|
@@ -12,11 +12,14 @@ import { chatRecentModelsManager, CHAT_RECENT_MODELS_MIN_OPTIONS } from '@/featu
|
|
|
12
12
|
import { chatRecentSkillsManager, CHAT_RECENT_SKILLS_MIN_OPTIONS } from '@/features/chat/managers/chat-recent-skills.manager';
|
|
13
13
|
import { deriveSelectedSkillsFromComposer } from '@/features/chat/utils/chat-composer-state.utils';
|
|
14
14
|
import { hasNcpChatModelOptions, isNcpChatComposerDisabled, isNcpChatModelOptionsEmpty, isNcpChatModelOptionsLoading, isNcpChatSendDisabled } from '@/features/chat/utils/ncp-chat-input-availability.utils';
|
|
15
|
-
import {
|
|
15
|
+
import { useSelectedSessionContextWindowIndicator } from '@/features/chat/hooks/use-selected-session-context-window-indicator';
|
|
16
|
+
import { useSystemStatus } from '@/features/system-status';
|
|
17
|
+
import { isNcpChatRuntimeBlocked } from '@/features/chat/utils/ncp-chat-runtime-availability.utils';
|
|
16
18
|
import { t } from '@/shared/lib/i18n';
|
|
17
19
|
import { toast } from 'sonner';
|
|
18
20
|
|
|
19
21
|
type ChatInputStoreSnapshot = ReturnType<typeof useChatInputStore.getState>['snapshot']; type ChatPresenter = ReturnType<typeof usePresenter>;
|
|
22
|
+
|
|
20
23
|
function buildThinkingLabels(): Record<ChatThinkingLevel, string> {
|
|
21
24
|
return {
|
|
22
25
|
off: t('chatThinkingLevelOff'),
|
|
@@ -206,7 +209,7 @@ export function ChatInputBarContainer() {
|
|
|
206
209
|
const { language } = useI18n();
|
|
207
210
|
const { isMobile } = useViewportLayout();
|
|
208
211
|
const snapshot = useChatInputStore((state) => state.snapshot);
|
|
209
|
-
const
|
|
212
|
+
const isRuntimeBlocked = isNcpChatRuntimeBlocked(useSystemStatus());
|
|
210
213
|
const [slashQuery, setSlashQuery] = useState<string | null>(null);
|
|
211
214
|
const inputBarRef = useRef<ChatInputBarHandle | null>(null);
|
|
212
215
|
const fileInputRef = useRef<HTMLInputElement | null>(null);
|
|
@@ -224,6 +227,7 @@ export function ChatInputBarContainer() {
|
|
|
224
227
|
() => buildChatSlashItems(skillRecords, slashQuery ?? '', labels.slashTexts, recentSkillValues),
|
|
225
228
|
[labels.slashTexts, recentSkillValues, skillRecords, slashQuery]
|
|
226
229
|
);
|
|
230
|
+
const contextWindowIndicator = useSelectedSessionContextWindowIndicator();
|
|
227
231
|
const selectedModelOption = modelRecords.find((option) => option.value === snapshot.selectedModel);
|
|
228
232
|
const thinkingSupportedLevels = selectedModelOption?.thinkingCapability?.supported ?? [];
|
|
229
233
|
const resolvedStopHint = snapshot.stopDisabledReason === '__preparing__'
|
|
@@ -311,18 +315,19 @@ export function ChatInputBarContainer() {
|
|
|
311
315
|
],
|
|
312
316
|
skillPicker,
|
|
313
317
|
actions: {
|
|
314
|
-
sendError:
|
|
318
|
+
sendError: isRuntimeBlocked ? null : snapshot.sendError,
|
|
315
319
|
isSending: snapshot.isSending,
|
|
316
320
|
canStopGeneration: snapshot.canStopGeneration,
|
|
317
321
|
sendDisabled: isNcpChatSendDisabled({
|
|
318
322
|
snapshot,
|
|
319
323
|
hasSendableDraft,
|
|
320
|
-
isRuntimeBlocked
|
|
324
|
+
isRuntimeBlocked
|
|
321
325
|
}),
|
|
322
326
|
stopDisabled: !snapshot.canStopGeneration,
|
|
323
327
|
stopHint: resolvedStopHint,
|
|
324
328
|
sendButtonLabel: t('chatSend'),
|
|
325
329
|
stopButtonLabel: t('chatStop'),
|
|
330
|
+
contextWindow: contextWindowIndicator,
|
|
326
331
|
onSend: presenter.chatInputManager.send,
|
|
327
332
|
onStop: presenter.chatInputManager.stop
|
|
328
333
|
}
|
|
@@ -8,12 +8,16 @@ const captures = vi.hoisted(() => ({
|
|
|
8
8
|
language: "en",
|
|
9
9
|
}));
|
|
10
10
|
|
|
11
|
-
vi.mock("@nextclaw/agent-chat-ui", () =>
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
vi.mock("@nextclaw/agent-chat-ui", async (importOriginal) => {
|
|
12
|
+
const actual = await importOriginal();
|
|
13
|
+
return {
|
|
14
|
+
...(actual as object),
|
|
15
|
+
ChatMessageList: (props: { messages: unknown[]; texts?: Record<string, unknown> }) => {
|
|
16
|
+
captures.renders.push(props);
|
|
17
|
+
return <div data-testid="chat-message-list" />;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
});
|
|
17
21
|
|
|
18
22
|
vi.mock("@/app/components/i18n-provider", () => ({
|
|
19
23
|
useI18n: () => ({ language: captures.language }),
|
|
@@ -211,3 +215,57 @@ it("passes localized attachment card texts to the shared chat UI", () => {
|
|
|
211
215
|
},
|
|
212
216
|
});
|
|
213
217
|
});
|
|
218
|
+
|
|
219
|
+
it("renders context compaction as an in-flow divider instead of a chat message", () => {
|
|
220
|
+
const beforeMessage = {
|
|
221
|
+
id: "message-before",
|
|
222
|
+
sessionId: "session-1",
|
|
223
|
+
role: "user",
|
|
224
|
+
status: "final",
|
|
225
|
+
timestamp: "2026-05-05T11:59:00.000Z",
|
|
226
|
+
parts: [{ type: "text", text: "before" }],
|
|
227
|
+
} satisfies NcpMessage;
|
|
228
|
+
const afterMessage = {
|
|
229
|
+
id: "message-after",
|
|
230
|
+
sessionId: "session-1",
|
|
231
|
+
role: "assistant",
|
|
232
|
+
status: "final",
|
|
233
|
+
timestamp: "2026-05-05T12:01:00.000Z",
|
|
234
|
+
parts: [{ type: "text", text: "after" }],
|
|
235
|
+
} satisfies NcpMessage;
|
|
236
|
+
const compactionMessage = {
|
|
237
|
+
id: "ctx-message",
|
|
238
|
+
sessionId: "session-1",
|
|
239
|
+
role: "service",
|
|
240
|
+
status: "final",
|
|
241
|
+
timestamp: "2026-05-05T12:00:00.000Z",
|
|
242
|
+
metadata: {
|
|
243
|
+
nextclaw_timeline_kind: "context_compaction",
|
|
244
|
+
checkpoint: {
|
|
245
|
+
id: "ctx-1",
|
|
246
|
+
status: "compressed",
|
|
247
|
+
summary: "Compressed Earlier Context",
|
|
248
|
+
coveredMessageCount: 8,
|
|
249
|
+
coveredSessionMessageCount: 8,
|
|
250
|
+
originalEstimatedTokens: 76000,
|
|
251
|
+
projectedEstimatedTokens: 51000,
|
|
252
|
+
createdAt: "2026-05-05T11:59:50.000Z",
|
|
253
|
+
updatedAt: "2026-05-05T12:00:00.000Z",
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
parts: [{ type: "text", text: "较早上下文已自动压缩" }],
|
|
257
|
+
} satisfies NcpMessage;
|
|
258
|
+
|
|
259
|
+
const { getByText } = render(
|
|
260
|
+
<ChatMessageListContainer
|
|
261
|
+
messages={[beforeMessage, compactionMessage, afterMessage]}
|
|
262
|
+
isSending={false}
|
|
263
|
+
/>,
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
expect(getByText("chatContextCompactionCompressed")).toBeTruthy();
|
|
267
|
+
const renderedGroups = captures.renders.map((rendered) => rendered.messages);
|
|
268
|
+
expect(renderedGroups).toHaveLength(2);
|
|
269
|
+
expect(renderedGroups[0]).toMatchObject([{ id: "message-before" }]);
|
|
270
|
+
expect(renderedGroups[1]).toMatchObject([{ id: "message-after" }]);
|
|
271
|
+
});
|