@nextclaw/ui 0.12.12 → 0.12.13
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 +10 -0
- package/dist/assets/{api-DnPN4SyA.js → api-C51456xV.js} +1 -1
- package/dist/assets/{app-manager-provider-M7TngYxx.js → app-manager-provider-D_cKqqRG.js} +1 -1
- package/dist/assets/{app-navigation.config-B5YIdRju.js → app-navigation.config-Dve1W20Y.js} +1 -1
- package/dist/assets/{channels-list-page-Cm-Bbu6u.js → channels-list-page-WJ7d4zMI.js} +1 -1
- package/dist/assets/{chat-C0ZNZtS3.js → chat-DCi1-y8U.js} +1 -1
- package/dist/assets/{chat-page-CGHNhXaw.js → chat-page-CHKwiqPY.js} +1 -1
- package/dist/assets/{chunk-JZWAC4HX-BJer-fqD.js → chunk-JZWAC4HX-ptDyT_1C.js} +1 -1
- package/dist/assets/{desktop-update-config-Dfh-3uma.js → desktop-update-config-gnna2NaS.js} +1 -1
- package/dist/assets/{dialog-D-I7ONHQ.js → dialog-BHcaU6NE.js} +1 -1
- package/dist/assets/{dist-DreLBS93.js → dist-DtBFqZ6_.js} +1 -1
- package/dist/assets/{es2015-DMSUl3fm.js → es2015-BlNhrQUG.js} +1 -1
- package/dist/assets/{index-Bc6c1kIx.js → index-CxzW1dQ9.js} +2 -2
- package/dist/assets/marketplace-page-0sEdt5sA.js +1 -0
- package/dist/assets/{marketplace-page-BCrS-jH6.js → marketplace-page-DiqqX25V.js} +1 -1
- package/dist/assets/mcp-marketplace-page-B8vmu9xe.js +1 -0
- package/dist/assets/{mcp-marketplace-page-CjrxT6wI.js → mcp-marketplace-page-C_akqPwv.js} +1 -1
- package/dist/assets/{model-config-D4myteLK.js → model-config-B0L43HTL.js} +1 -1
- package/dist/assets/{notice-card-DX_NEZTQ.js → notice-card-C9PFAR67.js} +1 -1
- package/dist/assets/{popover-Dm_NQ3Cs.js → popover-B8msg2FQ.js} +1 -1
- package/dist/assets/{provider-scoped-model-input-BLHImwI5.js → provider-scoped-model-input-DeAo2Y65.js} +1 -1
- package/dist/assets/{providers-list-DsBFslNi.js → providers-list-5_VShcn7.js} +1 -1
- package/dist/assets/remote-pzp4oLcL.js +1 -0
- package/dist/assets/{runtime-config-page-Bz9r68Rf.js → runtime-config-page-BuWmH7fe.js} +1 -1
- package/dist/assets/{search-config-C-6KpgRQ.js → search-config-DJTm9Fno.js} +1 -1
- package/dist/assets/{secrets-config-MiMElvpm.js → secrets-config-DKFeFii1.js} +1 -1
- package/dist/assets/{select-RgeHgn_-.js → select-DRDejPLk.js} +1 -1
- package/dist/assets/{sessions-config-page-0KNW9QC_.js → sessions-config-page-DZrdd2zT.js} +1 -1
- package/dist/assets/{setting-row-vwm4XKv2.js → setting-row-BcF6eTW0.js} +1 -1
- package/dist/assets/{tag-chip-DGqz3TON.js → tag-chip-CVIqyMv7.js} +1 -1
- package/dist/assets/{theme-provider-CUppbOyN.js → theme-provider-dHqcWU-j.js} +1 -1
- package/dist/assets/{tooltip-DQlSKhZ_.js → tooltip-C6VPreZ7.js} +1 -1
- package/dist/assets/{use-config-CrsavfWZ.js → use-config-DFja1sda.js} +1 -1
- package/dist/assets/{use-confirm-dialog-D1AnLFlc.js → use-confirm-dialog-DvIbSUX3.js} +1 -1
- package/dist/assets/{use-infinite-scroll-loader-DZhv-rmv.js → use-infinite-scroll-loader-D8h0k-iL.js} +1 -1
- package/dist/assets/{use-viewport-layout-CytJAPWM.js → use-viewport-layout-D-pjxsyz.js} +1 -1
- package/dist/index.html +16 -16
- package/package.json +4 -4
- package/src/features/system-status/managers/system-status.manager.test.ts +26 -0
- package/src/features/system-status/managers/system-status.manager.ts +1 -3
- package/vite.config.ts +2 -42
- package/dist/assets/marketplace-page-DVrlpB68.js +0 -1
- package/dist/assets/mcp-marketplace-page-pQ_A38fH.js +0 -1
- package/dist/assets/remote-CQQykOYe.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as e,i as t,m as n,p as r}from"./i18n-BnNAQpVM.js";import{Bt as i,Ht as a,Lt as o,Ut as s,Vt as c}from"./api-
|
|
1
|
+
import{_ as e,i as t,m as n,p as r}from"./i18n-BnNAQpVM.js";import{Bt as i,Ht as a,Lt as o,Ut as s,Vt as c}from"./api-C51456xV.js";import{t as l}from"./createLucideIcon-C_GFKVuW.js";import{a as u,i as d,n as f,r as p,t as m}from"./select-DRDejPLk.js";import{t as h}from"./skeleton-5Mg6vZHN.js";var g=class extends s{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:a()})}getOptimisticResult(e){return e.behavior=a(),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:a,isRefetching:o,isError:s,isRefetchError:l}=r,u=n.fetchMeta?.fetchMore?.direction,d=s&&u===`forward`,f=a&&u===`forward`,p=s&&u===`backward`,m=a&&u===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:i(t,n.data),hasPreviousPage:c(t,n.data),isFetchNextPageError:d,isFetchingNextPage:f,isFetchPreviousPageError:p,isFetchingPreviousPage:m,isRefetchError:l&&!d&&!p,isRefetching:o&&!f&&!m}}};function _(e,t){return o(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-BnNAQpVM.js";import{bt as n}from"./api-
|
|
1
|
+
import{_ as e,m as t}from"./i18n-BnNAQpVM.js";import{bt as n}from"./api-C51456xV.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};
|
package/dist/index.html
CHANGED
|
@@ -78,20 +78,20 @@
|
|
|
78
78
|
})();
|
|
79
79
|
</script>
|
|
80
80
|
<title>NextClaw</title>
|
|
81
|
-
<script type="module" crossorigin src="/assets/index-
|
|
81
|
+
<script type="module" crossorigin src="/assets/index-CxzW1dQ9.js"></script>
|
|
82
82
|
<link rel="modulepreload" crossorigin href="/assets/i18n-BnNAQpVM.js">
|
|
83
|
-
<link rel="modulepreload" crossorigin href="/assets/api-
|
|
84
|
-
<link rel="modulepreload" crossorigin href="/assets/es2015-
|
|
83
|
+
<link rel="modulepreload" crossorigin href="/assets/api-C51456xV.js">
|
|
84
|
+
<link rel="modulepreload" crossorigin href="/assets/es2015-BlNhrQUG.js">
|
|
85
85
|
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-C_GFKVuW.js">
|
|
86
|
-
<link rel="modulepreload" crossorigin href="/assets/select-
|
|
87
|
-
<link rel="modulepreload" crossorigin href="/assets/dist-
|
|
86
|
+
<link rel="modulepreload" crossorigin href="/assets/select-DRDejPLk.js">
|
|
87
|
+
<link rel="modulepreload" crossorigin href="/assets/dist-DtBFqZ6_.js">
|
|
88
88
|
<link rel="modulepreload" crossorigin href="/assets/x-BjMO7v8q.js">
|
|
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/chunk-JZWAC4HX-
|
|
93
|
-
<link rel="modulepreload" crossorigin href="/assets/use-config-
|
|
94
|
-
<link rel="modulepreload" crossorigin href="/assets/theme-provider-
|
|
89
|
+
<link rel="modulepreload" crossorigin href="/assets/dialog-BHcaU6NE.js">
|
|
90
|
+
<link rel="modulepreload" crossorigin href="/assets/popover-B8msg2FQ.js">
|
|
91
|
+
<link rel="modulepreload" crossorigin href="/assets/tooltip-C6VPreZ7.js">
|
|
92
|
+
<link rel="modulepreload" crossorigin href="/assets/chunk-JZWAC4HX-ptDyT_1C.js">
|
|
93
|
+
<link rel="modulepreload" crossorigin href="/assets/use-config-DFja1sda.js">
|
|
94
|
+
<link rel="modulepreload" crossorigin href="/assets/theme-provider-dHqcWU-j.js">
|
|
95
95
|
<link rel="modulepreload" crossorigin href="/assets/search-DZSNKEGp.js">
|
|
96
96
|
<link rel="modulepreload" crossorigin href="/assets/book-open-B4mOKdz8.js">
|
|
97
97
|
<link rel="modulepreload" crossorigin href="/assets/external-link-DP2IJ7AM.js">
|
|
@@ -106,16 +106,16 @@
|
|
|
106
106
|
<link rel="modulepreload" crossorigin href="/assets/doc-browser-context-Dib9sS83.js">
|
|
107
107
|
<link rel="modulepreload" crossorigin href="/assets/doc-browser-CoKIUCJj.js">
|
|
108
108
|
<link rel="modulepreload" crossorigin href="/assets/doc-browser-CwgI7ipB.js">
|
|
109
|
-
<link rel="modulepreload" crossorigin href="/assets/use-viewport-layout-
|
|
109
|
+
<link rel="modulepreload" crossorigin href="/assets/use-viewport-layout-D-pjxsyz.js">
|
|
110
110
|
<link rel="modulepreload" crossorigin href="/assets/logo-badge-uB4SwANR.js">
|
|
111
111
|
<link rel="modulepreload" crossorigin href="/assets/skeleton-5Mg6vZHN.js">
|
|
112
|
-
<link rel="modulepreload" crossorigin href="/assets/chat-
|
|
112
|
+
<link rel="modulepreload" crossorigin href="/assets/chat-DCi1-y8U.js">
|
|
113
113
|
<link rel="modulepreload" crossorigin href="/assets/key-round-BQXmPSxD.js">
|
|
114
114
|
<link rel="modulepreload" crossorigin href="/assets/message-square-CLVODA23.js">
|
|
115
|
-
<link rel="modulepreload" crossorigin href="/assets/app-navigation.config-
|
|
116
|
-
<link rel="modulepreload" crossorigin href="/assets/notice-card-
|
|
115
|
+
<link rel="modulepreload" crossorigin href="/assets/app-navigation.config-Dve1W20Y.js">
|
|
116
|
+
<link rel="modulepreload" crossorigin href="/assets/notice-card-C9PFAR67.js">
|
|
117
117
|
<link rel="modulepreload" crossorigin href="/assets/status-dot-aQU9Mia4.js">
|
|
118
|
-
<link rel="modulepreload" crossorigin href="/assets/app-manager-provider-
|
|
118
|
+
<link rel="modulepreload" crossorigin href="/assets/app-manager-provider-D_cKqqRG.js">
|
|
119
119
|
<link rel="stylesheet" crossorigin href="/assets/index-mRmSAB-e.css">
|
|
120
120
|
</head>
|
|
121
121
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/ui",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.13",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
"tailwind-merge": "^2.5.4",
|
|
29
29
|
"zod": "^3.23.8",
|
|
30
30
|
"zustand": "^5.0.2",
|
|
31
|
-
"@nextclaw/ncp": "0.
|
|
31
|
+
"@nextclaw/ncp-http-agent-client": "0.3.17",
|
|
32
32
|
"@nextclaw/ncp-react": "0.4.25",
|
|
33
|
+
"@nextclaw/agent-chat": "0.1.10",
|
|
33
34
|
"@nextclaw/agent-chat-ui": "0.3.9",
|
|
34
|
-
"@nextclaw/ncp
|
|
35
|
-
"@nextclaw/agent-chat": "0.1.10"
|
|
35
|
+
"@nextclaw/ncp": "0.5.5"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@testing-library/react": "^16.3.0",
|
|
@@ -98,6 +98,19 @@ describe('systemStatusManager', () => {
|
|
|
98
98
|
expect(refetchQueriesSpy).toHaveBeenCalledWith({ type: 'active' });
|
|
99
99
|
});
|
|
100
100
|
|
|
101
|
+
it('keeps the last ready bootstrap status while recovering so websocket reopen can restore readiness', () => {
|
|
102
|
+
systemStatusManager.reportBootstrapStatus(readyBootstrapStatus);
|
|
103
|
+
systemStatusManager.handleConnectionInterrupted('websocket error');
|
|
104
|
+
|
|
105
|
+
expect(useSystemStatusStore.getState().state.bootstrapStatus).toEqual(
|
|
106
|
+
readyBootstrapStatus
|
|
107
|
+
);
|
|
108
|
+
|
|
109
|
+
systemStatusManager.handleConnectionRestored();
|
|
110
|
+
|
|
111
|
+
expect(useSystemStatusStore.getState().state.lifecyclePhase).toBe('ready');
|
|
112
|
+
});
|
|
113
|
+
|
|
101
114
|
it('marks recovery as stalled after the timeout window elapses', async () => {
|
|
102
115
|
systemStatusManager.reportBootstrapStatus(readyBootstrapStatus);
|
|
103
116
|
systemStatusManager.handleConnectionInterrupted('websocket error');
|
|
@@ -131,6 +144,19 @@ describe('systemStatusManager', () => {
|
|
|
131
144
|
).toBeNull();
|
|
132
145
|
});
|
|
133
146
|
|
|
147
|
+
it('restores readiness from stalled once the realtime connection reopens', async () => {
|
|
148
|
+
systemStatusManager.reportBootstrapStatus(readyBootstrapStatus);
|
|
149
|
+
systemStatusManager.handleConnectionInterrupted('websocket error');
|
|
150
|
+
|
|
151
|
+
await vi.advanceTimersByTimeAsync(30_000);
|
|
152
|
+
|
|
153
|
+
expect(useSystemStatusStore.getState().state.lifecyclePhase).toBe('stalled');
|
|
154
|
+
|
|
155
|
+
systemStatusManager.handleConnectionRestored();
|
|
156
|
+
|
|
157
|
+
expect(useSystemStatusStore.getState().state.lifecyclePhase).toBe('ready');
|
|
158
|
+
});
|
|
159
|
+
|
|
134
160
|
it('keeps only transport-level failures in the recovery flow', () => {
|
|
135
161
|
expect(isTransientRuntimeConnectionErrorMessage('Failed to fetch')).toBe(
|
|
136
162
|
true
|
|
@@ -347,9 +347,7 @@ export class SystemStatusManager {
|
|
|
347
347
|
lifecyclePhase:
|
|
348
348
|
state.lifecyclePhase === 'stalled' ? 'stalled' : 'recovering',
|
|
349
349
|
recoveryStartedAt: state.recoveryStartedAt ?? Date.now(),
|
|
350
|
-
bootstrapStatus:
|
|
351
|
-
bootstrapStatus ??
|
|
352
|
-
(state.lifecyclePhase === 'ready' ? null : state.bootstrapStatus),
|
|
350
|
+
bootstrapStatus: bootstrapStatus ?? state.bootstrapStatus,
|
|
353
351
|
lastError: errorMessage?.trim() || state.lastError,
|
|
354
352
|
lastTransportError: errorMessage?.trim() || state.lastTransportError,
|
|
355
353
|
});
|
package/vite.config.ts
CHANGED
|
@@ -1,44 +1,10 @@
|
|
|
1
1
|
import { defineConfig } from 'vite';
|
|
2
2
|
import react from '@vitejs/plugin-react';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
5
|
-
import type { Socket } from 'node:net';
|
|
6
4
|
|
|
7
5
|
const devProxyApiBase = process.env.VITE_DEV_PROXY_API_BASE ?? 'http://127.0.0.1:18792';
|
|
8
6
|
const devProxyWsBase = devProxyApiBase.replace(/^http/i, 'ws');
|
|
9
7
|
|
|
10
|
-
function isBackendNotReadyError(error: Error & { code?: string }): boolean {
|
|
11
|
-
return error.code === 'ECONNREFUSED';
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
function writeBackendStartingResponse(res: ServerResponse): void {
|
|
15
|
-
if (res.headersSent) {
|
|
16
|
-
res.end();
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
res.writeHead(503, {
|
|
20
|
-
'content-type': 'application/json',
|
|
21
|
-
});
|
|
22
|
-
res.end(JSON.stringify({
|
|
23
|
-
error: 'backend_starting',
|
|
24
|
-
message: 'NextClaw backend is still starting. Please retry shortly.',
|
|
25
|
-
}));
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
function handleDevProxyError(error: Error & { code?: string }, _req: IncomingMessage, res?: ServerResponse | Socket): void {
|
|
29
|
-
if (!isBackendNotReadyError(error)) {
|
|
30
|
-
console.warn(`[vite] proxy error: ${error.message}`);
|
|
31
|
-
}
|
|
32
|
-
if (!res) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
if ('writeHead' in res) {
|
|
36
|
-
writeBackendStartingResponse(res);
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
res.destroy();
|
|
40
|
-
}
|
|
41
|
-
|
|
42
8
|
export default defineConfig({
|
|
43
9
|
plugins: [react()],
|
|
44
10
|
resolve: {
|
|
@@ -75,17 +41,11 @@ export default defineConfig({
|
|
|
75
41
|
proxy: {
|
|
76
42
|
'/api': {
|
|
77
43
|
target: devProxyApiBase,
|
|
78
|
-
changeOrigin: true
|
|
79
|
-
configure: (proxy) => {
|
|
80
|
-
proxy.on('error', handleDevProxyError);
|
|
81
|
-
}
|
|
44
|
+
changeOrigin: true
|
|
82
45
|
},
|
|
83
46
|
'/ws': {
|
|
84
47
|
target: devProxyWsBase,
|
|
85
|
-
ws: true
|
|
86
|
-
configure: (proxy) => {
|
|
87
|
-
proxy.on('error', handleDevProxyError);
|
|
88
|
-
}
|
|
48
|
+
ws: true
|
|
89
49
|
}
|
|
90
50
|
}
|
|
91
51
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./marketplace-page-BCrS-jH6.js";export{e as MarketplacePage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./mcp-marketplace-page-CjrxT6wI.js";export{e as McpMarketplacePage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{m as e}from"./app-manager-provider-M7TngYxx.js";export{e as RemoteAccessPage};
|