shieldcortex 2.5.3 → 2.5.4
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/README.md +33 -0
- package/dashboard/.next/standalone/dashboard/.next/BUILD_ID +1 -1
- package/dashboard/.next/standalone/dashboard/.next/build-manifest.json +2 -2
- package/dashboard/.next/standalone/dashboard/.next/prerender-manifest.json +3 -3
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_full.segment.rsc +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/chunks/ssr/dashboard_25b1b286._.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/404.html +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/pages/500.html +2 -2
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.js +1 -1
- package/dashboard/.next/standalone/dashboard/.next/server/server-reference-manifest.json +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{c808f2cfe553556c.js → 55e9c6b47528b1a9.js} +1 -1
- package/dashboard/.next/standalone/dashboard/.next/static/chunks/{2561cb73505cec1c.js → daf6fc6b281ff427.js} +1 -1
- package/dist/api/version.d.ts +7 -0
- package/dist/api/version.d.ts.map +1 -1
- package/dist/api/version.js +37 -0
- package/dist/api/version.js.map +1 -1
- package/dist/api/visualization-server.d.ts.map +1 -1
- package/dist/api/visualization-server.js +113 -3
- package/dist/api/visualization-server.js.map +1 -1
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- /package/dashboard/.next/standalone/dashboard/.next/static/{mJXfPqceK3DGaCR-Dx1sP → Ce4dbuWwTfPpQ-JcNkIaR}/_buildManifest.js +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{mJXfPqceK3DGaCR-Dx1sP → Ce4dbuWwTfPpQ-JcNkIaR}/_clientMiddlewareManifest.json +0 -0
- /package/dashboard/.next/standalone/dashboard/.next/static/{mJXfPqceK3DGaCR-Dx1sP → Ce4dbuWwTfPpQ-JcNkIaR}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,97358,e=>{"use strict";let t={architecture:"#FFD700",pattern:"#FFB347",preference:"#FFA500",error:"#FF6B6B",context:"#FFC080",learning:"#FFE4B5",todo:"#FF8C00",note:"#FFCC66",relationship:"#00D4FF",custom:"#FFB347"},r={short_term:"#FFD700",episodic:"#FFB347",long_term:"#FF8C00"};function s(e){return t[e]||t.custom}function i(e){return r[e]||r.short_term}e.s(["CATEGORY_COLORS",0,{architecture:"#3B82F6",pattern:"#8B5CF6",preference:"#EC4899",error:"#EF4444",context:"#10B981",learning:"#F59E0B",todo:"#F97316",note:"#6B7280",relationship:"#06B6D4",custom:"#A855F7"},"getCategoryColor",()=>s,"getTypeColor",()=>i])},25903,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"BailoutToCSR",{enumerable:!0,get:function(){return i}});let s=e.r(40909);function i({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new s.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},27601,(e,t,r)=>{"use strict";function s(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"encodeURIPath",{enumerable:!0,get:function(){return s}})},54220,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"PreloadChunks",{enumerable:!0,get:function(){return u}});let s=e.r(27493),i=e.r(9854),n=e.r(13595),a=e.r(27601),o=e.r(54218);function u({moduleIds:e}){if("u">typeof window)return null;let t=n.workAsyncStorage.getStore();if(void 0===t)return null;let r=[];if(t.reactLoadableManifest&&e){let s=t.reactLoadableManifest;for(let t of e){if(!s[t])continue;let e=s[t].files;r.push(...e)}}if(0===r.length)return null;let u=(0,o.getDeploymentIdQueryOrEmptyString)();return(0,s.jsx)(s.Fragment,{children:r.map(e=>{let r=`${t.assetPrefix}/_next/${(0,a.encodeURIPath)(e)}${u}`;return e.endsWith(".css")?(0,s.jsx)("link",{precedence:"dynamic",href:r,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,i.preload)(r,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},73735,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return c}});let s=e.r(27493),i=e.r(4),n=e.r(25903),a=e.r(54220);function o(e){return{default:e&&"default"in e?e.default:e}}let u={loader:()=>Promise.resolve(o(()=>null)),loading:null,ssr:!0},c=function(e){let t={...u,...e},r=(0,i.lazy)(()=>t.loader().then(o)),c=t.loading;function l(e){let o=c?(0,s.jsx)(c,{isLoading:!0,pastDelay:!0,error:null}):null,u=!t.ssr||!!t.loading,l=u?i.Suspense:i.Fragment,h=t.ssr?(0,s.jsxs)(s.Fragment,{children:["u"<typeof window?(0,s.jsx)(a.PreloadChunks,{moduleIds:t.modules}):null,(0,s.jsx)(r,{...e})]}):(0,s.jsx)(n.BailoutToCSR,{reason:"next/dynamic",children:(0,s.jsx)(r,{...e})});return(0,s.jsx)(l,{...u?{fallback:o}:{},children:h})}return l.displayName="LoadableComponent",l}},74133,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return i}});let s=e.r(77637)._(e.r(73735));function i(e,t){let r={};"function"==typeof e&&(r.loader=e);let i={...r,...t};return(0,s.default)({...i,modules:i.loadableGenerated?.modules})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},88069,45688,71921,94156,e=>{"use strict";let t;var r=e.i(22534),s=e.i(11919),i=e.i(79736),n=e.i(96099),a=e.i(70207),o=e.i(32446),u=e.i(60904),c=e.i(62422),l=class extends a.Subscribable{constructor(e,t){super(),this.options=t,this.#e=e,this.#t=null,this.#r=(0,o.pendingThenable)(),this.bindMethods(),this.setOptions(t)}#e;#s=void 0;#i=void 0;#n=void 0;#a;#o;#r;#t;#u;#c;#l;#h;#d;#y;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#s.addObserver(this),h(this.#s,this.options)?this.#p():this.updateResult(),this.#m())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return d(this.#s,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return d(this.#s,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#v(),this.#s.removeObserver(this)}setOptions(e){let t=this.options,r=this.#s;if(this.options=this.#e.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof(0,u.resolveEnabled)(this.options.enabled,this.#s))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#g(),this.#s.setOptions(this.options),t._defaulted&&!(0,u.shallowEqualObjects)(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#s,observer:this});let s=this.hasListeners();s&&y(this.#s,r,this.options,t)&&this.#p(),this.updateResult(),s&&(this.#s!==r||(0,u.resolveEnabled)(this.options.enabled,this.#s)!==(0,u.resolveEnabled)(t.enabled,this.#s)||(0,u.resolveStaleTime)(this.options.staleTime,this.#s)!==(0,u.resolveStaleTime)(t.staleTime,this.#s))&&this.#R();let i=this.#S();s&&(this.#s!==r||(0,u.resolveEnabled)(this.options.enabled,this.#s)!==(0,u.resolveEnabled)(t.enabled,this.#s)||i!==this.#y)&&this.#Q(i)}getOptimisticResult(e){var t,r;let s=this.#e.getQueryCache().build(this.#e,e),i=this.createResult(s,e);return t=this,r=i,(0,u.shallowEqualObjects)(t.getCurrentResult(),r)||(this.#n=i,this.#o=this.options,this.#a=this.#s.state),i}getCurrentResult(){return this.#n}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),t?.(r),"promise"===r&&(this.trackProp("data"),this.options.experimental_prefetchInRender||"pending"!==this.#r.status||this.#r.reject(Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(e,r))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#s}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),r=this.#e.getQueryCache().build(this.#e,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#p({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#n))}#p(e){this.#g();let t=this.#s.fetch(this.options,e);return e?.throwOnError||(t=t.catch(u.noop)),t}#R(){this.#b();let e=(0,u.resolveStaleTime)(this.options.staleTime,this.#s);if(u.isServer||this.#n.isStale||!(0,u.isValidTimeout)(e))return;let t=(0,u.timeUntilStale)(this.#n.dataUpdatedAt,e);this.#h=c.timeoutManager.setTimeout(()=>{this.#n.isStale||this.updateResult()},t+1)}#S(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#s):this.options.refetchInterval)??!1}#Q(e){this.#v(),this.#y=e,!u.isServer&&!1!==(0,u.resolveEnabled)(this.options.enabled,this.#s)&&(0,u.isValidTimeout)(this.#y)&&0!==this.#y&&(this.#d=c.timeoutManager.setInterval(()=>{(this.options.refetchIntervalInBackground||s.focusManager.isFocused())&&this.#p()},this.#y))}#m(){this.#R(),this.#Q(this.#S())}#b(){this.#h&&(c.timeoutManager.clearTimeout(this.#h),this.#h=void 0)}#v(){this.#d&&(c.timeoutManager.clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let r,s=this.#s,i=this.options,a=this.#n,c=this.#a,l=this.#o,d=e!==s?e.state:this.#i,{state:p}=e,m={...p},b=!1;if(t._optimisticResults){let r=this.hasListeners(),a=!r&&h(e,t),o=r&&y(e,s,t,i);(a||o)&&(m={...m,...(0,n.fetchState)(p.data,e.options)}),"isRestoring"===t._optimisticResults&&(m.fetchStatus="idle")}let{error:v,errorUpdatedAt:g,status:R}=m;r=m.data;let S=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===R){let e;a?.isPlaceholderData&&t.placeholderData===l?.placeholderData?(e=a.data,S=!0):e="function"==typeof t.placeholderData?t.placeholderData(this.#l?.state.data,this.#l):t.placeholderData,void 0!==e&&(R="success",r=(0,u.replaceData)(a?.data,e,t),b=!0)}if(t.select&&void 0!==r&&!S)if(a&&r===c?.data&&t.select===this.#u)r=this.#c;else try{this.#u=t.select,r=t.select(r),r=(0,u.replaceData)(a?.data,r,t),this.#c=r,this.#t=null}catch(e){this.#t=e}this.#t&&(v=this.#t,r=this.#c,g=Date.now(),R="error");let Q="fetching"===m.fetchStatus,w="pending"===R,F="error"===R,E=w&&Q,O=void 0!==r,C={status:R,fetchStatus:m.fetchStatus,isPending:w,isSuccess:"success"===R,isError:F,isInitialLoading:E,isLoading:E,data:r,dataUpdatedAt:m.dataUpdatedAt,error:v,errorUpdatedAt:g,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:m.dataUpdateCount>0||m.errorUpdateCount>0,isFetchedAfterMount:m.dataUpdateCount>d.dataUpdateCount||m.errorUpdateCount>d.errorUpdateCount,isFetching:Q,isRefetching:Q&&!w,isLoadingError:F&&!O,isPaused:"paused"===m.fetchStatus,isPlaceholderData:b,isRefetchError:F&&O,isStale:f(e,t),refetch:this.refetch,promise:this.#r,isEnabled:!1!==(0,u.resolveEnabled)(t.enabled,e)};if(this.options.experimental_prefetchInRender){let t=void 0!==C.data,r="error"===C.status&&!t,i=e=>{r?e.reject(C.error):t&&e.resolve(C.data)},n=()=>{i(this.#r=C.promise=(0,o.pendingThenable)())},a=this.#r;switch(a.status){case"pending":e.queryHash===s.queryHash&&i(a);break;case"fulfilled":(r||C.data!==a.value)&&n();break;case"rejected":r&&C.error===a.reason||n()}}return C}updateResult(){let e=this.#n,t=this.createResult(this.#s,this.options);if(this.#a=this.#s.state,this.#o=this.options,void 0!==this.#a.data&&(this.#l=this.#s),(0,u.shallowEqualObjects)(t,e))return;this.#n=t;let r=()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,r="function"==typeof t?t():t;if("all"===r||!r&&!this.#f.size)return!0;let s=new Set(r??this.#f);return this.options.throwOnError&&s.add("error"),Object.keys(this.#n).some(t=>this.#n[t]!==e[t]&&s.has(t))};this.#w({listeners:r()})}#g(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#s)return;let t=this.#s;this.#s=e,this.#i=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#m()}#w(e){i.notifyManager.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#n)}),this.#e.getQueryCache().notify({query:this.#s,type:"observerResultsUpdated"})})}};function h(e,t){return!1!==(0,u.resolveEnabled)(t.enabled,e)&&void 0===e.state.data&&("error"!==e.state.status||!1!==t.retryOnMount)||void 0!==e.state.data&&d(e,t,t.refetchOnMount)}function d(e,t,r){if(!1!==(0,u.resolveEnabled)(t.enabled,e)&&"static"!==(0,u.resolveStaleTime)(t.staleTime,e)){let s="function"==typeof r?r(e):r;return"always"===s||!1!==s&&f(e,t)}return!1}function y(e,t,r,s){return(e!==t||!1===(0,u.resolveEnabled)(s.enabled,e))&&(!r.suspense||"error"!==e.state.status)&&f(e,r)}function f(e,t){return!1!==(0,u.resolveEnabled)(t.enabled,e)&&e.isStaleByTime((0,u.resolveStaleTime)(t.staleTime,e))}var p=e.i(4),m=e.i(1235);e.i(27493);var b=p.createContext((t=!1,{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t})),v=p.createContext(!1);v.Provider;var g=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function R(e,t){return function(e,t,r){let s,n=p.useContext(v),a=p.useContext(b),o=(0,m.useQueryClient)(r),c=o.defaultQueryOptions(e);o.getDefaultOptions().queries?._experimental_beforeQuery?.(c);let l=o.getQueryCache().get(c.queryHash);if(c._optimisticResults=n?"isRestoring":"optimistic",c.suspense){let e=e=>"static"===e?e:Math.max(e??1e3,1e3),t=c.staleTime;c.staleTime="function"==typeof t?(...r)=>e(t(...r)):e(t),"number"==typeof c.gcTime&&(c.gcTime=Math.max(c.gcTime,1e3))}s=l?.state.error&&"function"==typeof c.throwOnError?(0,u.shouldThrowError)(c.throwOnError,[l.state.error,l]):c.throwOnError,(c.suspense||c.experimental_prefetchInRender||s)&&!a.isReset()&&(c.retryOnMount=!1),p.useEffect(()=>{a.clearReset()},[a]);let h=!o.getQueryCache().get(c.queryHash),[d]=p.useState(()=>new t(o,c)),y=d.getOptimisticResult(c),f=!n&&!1!==e.subscribed;if(p.useSyncExternalStore(p.useCallback(e=>{let t=f?d.subscribe(i.notifyManager.batchCalls(e)):u.noop;return d.updateResult(),t},[d,f]),()=>d.getCurrentResult(),()=>d.getCurrentResult()),p.useEffect(()=>{d.setOptions(c)},[c,d]),c?.suspense&&y.isPending)throw g(c,d,a);if((({result:e,errorResetBoundary:t,throwOnError:r,query:s,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&s&&(i&&void 0===e.data||(0,u.shouldThrowError)(r,[e.error,s])))({result:y,errorResetBoundary:a,throwOnError:c.throwOnError,query:l,suspense:c.suspense}))throw y.error;if(o.getDefaultOptions().queries?._experimental_afterQuery?.(c,y),c.experimental_prefetchInRender&&!u.isServer&&y.isLoading&&y.isFetching&&!n){let e=h?g(c,d,a):l?.promise;e?.catch(u.noop).finally(()=>{d.updateResult()})}return c.notifyOnChangeProps?y:d.trackResult(y)}(e,l,t)}e.s(["useQuery",()=>R],45688);var S=e.i(21230),Q=a,w=class extends Q.Subscribable{#e;#n=void 0;#F;#E;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#O()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,u.shallowEqualObjects)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#F,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,u.hashKey)(t.mutationKey)!==(0,u.hashKey)(this.options.mutationKey)?this.reset():this.#F?.state.status==="pending"&&this.#F.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#F?.removeObserver(this)}onMutationUpdate(e){this.#O(),this.#w(e)}getCurrentResult(){return this.#n}reset(){this.#F?.removeObserver(this),this.#F=void 0,this.#O(),this.#w()}mutate(e,t){return this.#E=t,this.#F?.removeObserver(this),this.#F=this.#e.getMutationCache().build(this.#e,this.options),this.#F.addObserver(this),this.#F.execute(e)}#O(){let e=this.#F?.state??(0,S.getDefaultState)();this.#n={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#w(e){i.notifyManager.batch(()=>{if(this.#E&&this.hasListeners()){let t=this.#n.variables,r=this.#n.context,s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#E.onSuccess?.(e.data,t,r,s)}catch(e){Promise.reject(e)}try{this.#E.onSettled?.(e.data,null,t,r,s)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#E.onError?.(e.error,t,r,s)}catch(e){Promise.reject(e)}try{this.#E.onSettled?.(void 0,e.error,t,r,s)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#n)})})}};function F(e,t){let r=(0,m.useQueryClient)(t),[s]=p.useState(()=>new w(r,e));p.useEffect(()=>{s.setOptions(e)},[s,e]);let n=p.useSyncExternalStore(p.useCallback(e=>s.subscribe(i.notifyManager.batchCalls(e)),[s]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),a=p.useCallback((e,t)=>{s.mutate(e,t).catch(u.noop)},[s]);if(n.error&&(0,u.shouldThrowError)(s.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:a,mutateAsync:n.mutate}}e.s(["useMutation",()=>F],71921);let E=r.default.env.NEXT_PUBLIC_WS_URL||"ws://localhost:3001/ws/events";function O(e={}){let{enabled:t=!0,onMessage:r}=e,s=(0,m.useQueryClient)(),i=(0,p.useRef)(null),n=(0,p.useRef)(null),a=(0,p.useRef)(0),o=(0,p.useRef)(1e3),u=(0,p.useRef)(()=>{}),[c,l]=(0,p.useState)(!1),[h,d]=(0,p.useState)(null),y=(0,p.useRef)(r);(0,p.useEffect)(()=>{y.current=r},[r]);let f=(0,p.useCallback)(()=>{if(t&&i.current?.readyState!==WebSocket.OPEN){n.current&&(clearTimeout(n.current),n.current=null);try{let e=new WebSocket(E);i.current=e,e.onopen=()=>{l(!0),a.current=0,o.current=1e3,console.log("[WebSocket] Connected to memory server")},e.onmessage=e=>{try{let t=JSON.parse(e.data);switch(d({type:t.type,data:t.data,timestamp:t.timestamp||new Date().toISOString()}),y.current?.(t),t.type){case"initial_state":case"consolidation_complete":case"predictive_consolidation":s.invalidateQueries({queryKey:["memories"]}),s.invalidateQueries({queryKey:["stats"]}),s.invalidateQueries({queryKey:["links"]});break;case"memory_created":case"memory_updated":case"memory_deleted":s.invalidateQueries({queryKey:["memories"]}),s.invalidateQueries({queryKey:["stats"]});break;case"decay_tick":case"worker_light_tick":case"worker_medium_tick":break;case"link_discovered":s.invalidateQueries({queryKey:["links"]});break;case"defence_event":s.invalidateQueries({queryKey:["agents"]}),s.invalidateQueries({queryKey:["agent-timeline"]}),s.invalidateQueries({queryKey:["audit-logs"]}),s.invalidateQueries({queryKey:["audit-stats"]});break;case"update_started":case"update_complete":case"update_failed":"update_complete"===t.type&&(s.invalidateQueries({queryKey:["version"]}),s.invalidateQueries({queryKey:["version-check"]}));break;case"server_restarting":console.log("[WebSocket] Server restarting, will reconnect shortly...")}}catch(e){console.error("[WebSocket] Failed to parse message:",e)}},e.onerror=()=>{console.warn("[WebSocket] Connection failed - is the API server running?")},e.onclose=()=>{if(l(!1),console.log("[WebSocket] Disconnected"),t&&a.current<10){let e=o.current;a.current++,o.current=Math.min(2*o.current,3e4),console.log(`[WebSocket] Reconnecting in ${e}ms (attempt ${a.current}/10)...`),n.current=setTimeout(()=>{u.current()},e)}else a.current>=10&&console.error("[WebSocket] Max reconnection attempts reached. Use reconnect() to try again.")}}catch(e){console.error("[WebSocket] Failed to connect:",e)}}},[t,s]);return(0,p.useEffect)(()=>{u.current=f}),(0,p.useEffect)(()=>(t&&f(),()=>{n.current&&clearTimeout(n.current),i.current&&(i.current.close(),i.current=null)}),[t,f]),{isConnected:c,lastEvent:h,reconnect:(0,p.useCallback)(()=>{a.current=0,o.current=1e3,f()},[f])}}e.s(["useMemoryWebSocket",()=>O],94156);let C=r.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function j(e){let t=new URLSearchParams;e?.project&&t.set("project",e.project),e?.type&&t.set("type",e.type),e?.category&&t.set("category",e.category),e?.limit&&t.set("limit",e.limit.toString()),e?.offset&&t.set("offset",e.offset.toString()),e?.mode&&t.set("mode",e.mode),e?.query&&t.set("query",e.query);let r=await fetch(`${C}/api/memories?${t}`);if(!r.ok)throw Error("Failed to fetch memories");return r.json()}async function T(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/stats${t}`);if(!r.ok)throw Error("Failed to fetch stats");return r.json()}async function P(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/links${t}`);if(!r.ok)throw Error("Failed to fetch links");return r.json()}async function k(){let e=await fetch(`${C}/api/projects`);if(!e.ok)throw Error("Failed to fetch projects");return e.json()}async function q(e){let t=await fetch(`${C}/api/memories/${e}/access`,{method:"POST"});if(!t.ok)throw Error("Failed to access memory");return t.json()}async function M(){let e=await fetch(`${C}/api/consolidate`,{method:"POST"});if(!e.ok)throw Error("Failed to consolidate");return e.json()}function I(e){return R({queryKey:["stats",e],queryFn:()=>T(e),refetchInterval:3e4})}function _(e){return R({queryKey:["links",e],queryFn:()=>P(e),refetchInterval:6e4})}function x(){return R({queryKey:["projects"],queryFn:k,refetchInterval:6e4})}function K(e){let t,r=O();return{...{...t=R({queryKey:["memories",e],queryFn:()=>j(e),refetchInterval:3e4}),data:t.data?.memories,pagination:t.data?.pagination},isConnected:r.isConnected,lastEvent:r.lastEvent}}function $(){let e=(0,m.useQueryClient)();return F({mutationFn:q,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function D(){let e=(0,m.useQueryClient)();return F({mutationFn:M,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}async function U(){let e=await fetch(`${C}/api/control/status`);if(!e.ok)throw Error("Failed to fetch control status");return e.json()}async function L(){let e=await fetch(`${C}/api/control/pause`,{method:"POST"});if(!e.ok)throw Error("Failed to pause");return e.json()}async function B(){let e=await fetch(`${C}/api/control/resume`,{method:"POST"});if(!e.ok)throw Error("Failed to resume");return e.json()}function A(){return R({queryKey:["control-status"],queryFn:U,refetchInterval:1e4})}function W(){let e=(0,m.useQueryClient)();return F({mutationFn:L,onSuccess:()=>{e.invalidateQueries({queryKey:["control-status"]})}})}function z(){let e=(0,m.useQueryClient)();return F({mutationFn:B,onSuccess:()=>{e.invalidateQueries({queryKey:["control-status"]})}})}async function N(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/contradictions${t}`);if(!r.ok)throw Error("Failed to fetch contradictions");return r.json()}function H(e){return R({queryKey:["contradictions",e],queryFn:()=>N(e),staleTime:3e5})}async function J(e){let t=await fetch(`${C}/api/memories/${e}/boost`,{method:"POST"});if(!t.ok)throw Error("Failed to boost memory");return t.json()}async function V(e){let t=await fetch(`${C}/api/memories/${e}/demote`,{method:"POST"});if(!t.ok)throw Error("Failed to demote memory");return t.json()}async function X(e){let t=await fetch(`${C}/api/memories/${e}/promote`,{method:"POST"});if(!t.ok)throw Error("Failed to promote memory");return t.json()}async function G(e,t){let r=await fetch(`${C}/api/memories/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw Error("Failed to edit memory");return r.json()}async function Y(e){let t=await fetch(`${C}/api/memories/${e}`,{method:"DELETE"});if(!t.ok)throw Error("Failed to delete memory");return t.json()}async function Z(e,t){let r=await fetch(`${C}/api/memories/${e}/quarantine`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reason:t})});if(!r.ok)throw Error("Failed to quarantine memory");return r.json()}async function ee(){let e=await fetch(`${C}/api/worker/status`);if(!e.ok)throw Error("Failed to fetch worker status");return e.json()}function et(){let e=(0,m.useQueryClient)();return F({mutationFn:J,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function er(){let e=(0,m.useQueryClient)();return F({mutationFn:V,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function es(){let e=(0,m.useQueryClient)();return F({mutationFn:X,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function ei(){let e=(0,m.useQueryClient)();return F({mutationFn:({id:e,updates:t})=>G(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function en(){let e=(0,m.useQueryClient)();return F({mutationFn:Y,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]}),e.invalidateQueries({queryKey:["links"]})}})}function ea(){let e=(0,m.useQueryClient)();return F({mutationFn:({id:e,reason:t})=>Z(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function eo(){return R({queryKey:["worker-status"],queryFn:ee,refetchInterval:15e3})}e.s(["useAccessMemory",()=>$,"useBoostMemory",()=>et,"useConsolidate",()=>D,"useContradictions",()=>H,"useControlStatus",()=>A,"useDeleteMemory",()=>en,"useDemoteMemory",()=>er,"useEditMemory",()=>ei,"useMemoriesWithRealtime",()=>K,"useMemoryLinks",()=>_,"usePauseMemory",()=>W,"useProjects",()=>x,"usePromoteMemory",()=>es,"useQuarantineMemory",()=>ea,"useResumeMemory",()=>z,"useStats",()=>I,"useWorkerStatus",()=>eo],88069)},42098,92618,e=>{"use strict";let t;var r=e.i(4);let s=e=>{let t,r=new Set,s=(e,s)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=s?s:"object"!=typeof i||null===i)?i:Object.assign({},t,i),r.forEach(r=>r(t,e))}},i=()=>t,n={setState:s,getState:i,getInitialState:()=>a,subscribe:e=>(r.add(e),()=>r.delete(e))},a=t=e(s,i,n);return n},i=e=>e?s(e):s;e.s(["createStore",()=>i],92618);let n=e=>{let t=i(e),s=e=>(function(e,t=e=>e){let s=r.default.useSyncExternalStore(e.subscribe,r.default.useCallback(()=>t(e.getState()),[e,t]),r.default.useCallback(()=>t(e.getInitialState()),[e,t]));return r.default.useDebugValue(s),s})(t,e);return Object.assign(s,t),s},a=(t=e=>({selectedMemory:null,setSelectedMemory:t=>e({selectedMemory:t}),viewMode:"shield",setViewMode:t=>e({viewMode:t}),typeFilter:null,categoryFilter:null,projectFilter:null,setTypeFilter:t=>e({typeFilter:t}),setCategoryFilter:t=>e({categoryFilter:t}),setProjectFilter:t=>e({projectFilter:t}),recentEvents:[],addEvent:t=>e(e=>({recentEvents:[t,...e.recentEvents].slice(0,50)})),clearEvents:()=>e({recentEvents:[]}),cameraPosition:[0,0,12],setCameraPosition:t=>e({cameraPosition:t}),showLeftSidebar:!0,showRightSidebar:!0,toggleLeftSidebar:()=>e(e=>({showLeftSidebar:!e.showLeftSidebar})),toggleRightSidebar:()=>e(e=>({showRightSidebar:!e.showRightSidebar})),searchQuery:"",setSearchQuery:t=>e({searchQuery:t})}))?n(t):n;e.s(["useDashboardStore",0,a],42098)},33368,e=>{"use strict";let t={architecture:{basePosition:{x:0,y:1.2,z:2.2},spread:1},pattern:{basePosition:{x:0,y:.3,z:-2.2},spread:.9},preference:{basePosition:{x:1.6,y:-.3,z:0},spread:.7},error:{basePosition:{x:-1.6,y:-.3,z:.3},spread:.8},context:{basePosition:{x:0,y:1.8,z:0},spread:1.2},learning:{basePosition:{x:0,y:-.3,z:0},spread:.8},todo:{basePosition:{x:.6,y:.8,z:1.8},spread:.7},note:{basePosition:{x:1.8,y:0,z:-.3},spread:1},relationship:{basePosition:{x:-1.8,y:.3,z:-.3},spread:.9},custom:{basePosition:{x:0,y:0,z:0},spread:1.5}},r={short_term:.6,episodic:0,long_term:-.4};function s(e){let t=43758.5453*Math.sin(12.9898*e);return t-Math.floor(t)}function i(e){let i=t[e.category]||t.custom,n=r[e.type]||0,a=s(e.id),o=s(e.id+1e3),u=s(e.id+2e3),c=i.spread,l=a*Math.PI*2,h=(o-.5)*Math.PI,d=u*c*.7+.3*c,y=d*Math.cos(h)*Math.cos(l),f=d*Math.sin(h)*.6,p=d*Math.cos(h)*Math.sin(l),m=i.basePosition.x+y,b=i.basePosition.y+f,v=i.basePosition.z+p+n,g=.4*e.salience,R=Math.sqrt(m*m+b*b+v*v);if(R>.1){let e=(R+g)/R;m*=e,b*=e,v*=e}let S=Math.sqrt((m/3.2)**2+(b/2.5)**2+(v/3.5)**2);if(S>.95){let e=.95/S;m*=e,b*=e,v*=e}return{x:m,y:b,z:v}}function n(e){if(!e.lastAccessed)return 1;let t=Date.now(),r=new Date(e.lastAccessed).getTime();return Math.pow({short_term:.995,long_term:.9995,episodic:.998}[e.type]||.995,(t-r)/36e5)}e.s(["calculateDecayFactor",()=>n,"calculateMemoryPosition",()=>i])},87353,e=>{"use strict";var t=e.i(22534),r=e.i(45688),s=e.i(71921),i=e.i(1235);let n=t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function a(e){let t=new URLSearchParams;e?.startTime&&t.set("startTime",e.startTime),e?.endTime&&t.set("endTime",e.endTime),e?.source&&t.set("source",e.source),e?.firewallResult&&t.set("firewallResult",e.firewallResult),e?.project&&t.set("project",e.project),e?.limit&&t.set("limit",e.limit.toString());let r=await fetch(`${n}/api/v1/audit?${t}`);if(!r.ok)throw Error("Failed to fetch audit logs");return r.json()}async function o(e,t){let r=new URLSearchParams({timeRange:e});t&&r.set("project",t);let s=await fetch(`${n}/api/v1/audit/stats?${r}`);if(!s.ok)throw Error("Failed to fetch audit stats");return s.json()}async function u(e="pending",t=50,r){let s=new URLSearchParams({status:e,limit:t.toString()});r&&s.set("project",r);let i=await fetch(`${n}/api/v1/quarantine?${s}`);if(!i.ok)throw Error("Failed to fetch quarantine");return i.json()}async function c(e){let t=await fetch(`${n}/api/v1/quarantine/${e}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard"})});if(!t.ok)throw Error("Failed to approve");return t.json()}async function l(e,t){let r=await fetch(`${n}/api/v1/quarantine/${e}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard",notes:t})});if(!r.ok)throw Error("Failed to reject");return r.json()}function h(e){return(0,r.useQuery)({queryKey:["audit-logs",e],queryFn:()=>a(e),refetchInterval:3e4,retry:2})}function d(e="24h",t){return(0,r.useQuery)({queryKey:["audit-stats",e,t],queryFn:()=>o(e,t),refetchInterval:3e4,retry:2})}function y(e="pending",t=50,s){return(0,r.useQuery)({queryKey:["quarantine",e,t,s],queryFn:()=>u(e,t,s),refetchInterval:3e4,retry:2})}function f(){let e=(0,i.useQueryClient)();return(0,s.useMutation)({mutationFn:c,onSuccess:()=>{e.invalidateQueries({queryKey:["quarantine"]}),e.invalidateQueries({queryKey:["audit-stats"]})}})}function p(){let e=(0,i.useQueryClient)();return(0,s.useMutation)({mutationFn:({id:e,notes:t})=>l(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["quarantine"]}),e.invalidateQueries({queryKey:["audit-stats"]})}})}e.s(["useApproveQuarantine",()=>f,"useAuditLogs",()=>h,"useAuditStats",()=>d,"useQuarantine",()=>y,"useRejectQuarantine",()=>p])},1369,e=>{e.v(t=>Promise.all(["static/chunks/a3989d0e6629bcf8.js"].map(t=>e.l(t))).then(()=>t(11570)))},62838,e=>{e.v(t=>Promise.all(["static/chunks/77cbce7ecfbfed98.js"].map(t=>e.l(t))).then(()=>t(41740)))}]);
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,97358,e=>{"use strict";let t={architecture:"#FFD700",pattern:"#FFB347",preference:"#FFA500",error:"#FF6B6B",context:"#FFC080",learning:"#FFE4B5",todo:"#FF8C00",note:"#FFCC66",relationship:"#00D4FF",custom:"#FFB347"},r={short_term:"#FFD700",episodic:"#FFB347",long_term:"#FF8C00"};function s(e){return t[e]||t.custom}function i(e){return r[e]||r.short_term}e.s(["CATEGORY_COLORS",0,{architecture:"#3B82F6",pattern:"#8B5CF6",preference:"#EC4899",error:"#EF4444",context:"#10B981",learning:"#F59E0B",todo:"#F97316",note:"#6B7280",relationship:"#06B6D4",custom:"#A855F7"},"getCategoryColor",()=>s,"getTypeColor",()=>i])},25903,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"BailoutToCSR",{enumerable:!0,get:function(){return i}});let s=e.r(40909);function i({reason:e,children:t}){if("u"<typeof window)throw Object.defineProperty(new s.BailoutToCSRError(e),"__NEXT_ERROR_CODE",{value:"E394",enumerable:!1,configurable:!0});return t}},27601,(e,t,r)=>{"use strict";function s(e){return e.split("/").map(e=>encodeURIComponent(e)).join("/")}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"encodeURIPath",{enumerable:!0,get:function(){return s}})},54220,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"PreloadChunks",{enumerable:!0,get:function(){return u}});let s=e.r(27493),i=e.r(9854),n=e.r(13595),a=e.r(27601),o=e.r(54218);function u({moduleIds:e}){if("u">typeof window)return null;let t=n.workAsyncStorage.getStore();if(void 0===t)return null;let r=[];if(t.reactLoadableManifest&&e){let s=t.reactLoadableManifest;for(let t of e){if(!s[t])continue;let e=s[t].files;r.push(...e)}}if(0===r.length)return null;let u=(0,o.getDeploymentIdQueryOrEmptyString)();return(0,s.jsx)(s.Fragment,{children:r.map(e=>{let r=`${t.assetPrefix}/_next/${(0,a.encodeURIPath)(e)}${u}`;return e.endsWith(".css")?(0,s.jsx)("link",{precedence:"dynamic",href:r,rel:"stylesheet",as:"style",nonce:t.nonce},e):((0,i.preload)(r,{as:"script",fetchPriority:"low",nonce:t.nonce}),null)})})}},73735,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return c}});let s=e.r(27493),i=e.r(4),n=e.r(25903),a=e.r(54220);function o(e){return{default:e&&"default"in e?e.default:e}}let u={loader:()=>Promise.resolve(o(()=>null)),loading:null,ssr:!0},c=function(e){let t={...u,...e},r=(0,i.lazy)(()=>t.loader().then(o)),c=t.loading;function l(e){let o=c?(0,s.jsx)(c,{isLoading:!0,pastDelay:!0,error:null}):null,u=!t.ssr||!!t.loading,l=u?i.Suspense:i.Fragment,h=t.ssr?(0,s.jsxs)(s.Fragment,{children:["u"<typeof window?(0,s.jsx)(a.PreloadChunks,{moduleIds:t.modules}):null,(0,s.jsx)(r,{...e})]}):(0,s.jsx)(n.BailoutToCSR,{reason:"next/dynamic",children:(0,s.jsx)(r,{...e})});return(0,s.jsx)(l,{...u?{fallback:o}:{},children:h})}return l.displayName="LoadableComponent",l}},74133,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return i}});let s=e.r(77637)._(e.r(73735));function i(e,t){let r={};"function"==typeof e&&(r.loader=e);let i={...r,...t};return(0,s.default)({...i,modules:i.loadableGenerated?.modules})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},88069,45688,71921,94156,e=>{"use strict";let t;var r=e.i(22534),s=e.i(11919),i=e.i(79736),n=e.i(96099),a=e.i(70207),o=e.i(32446),u=e.i(60904),c=e.i(62422),l=class extends a.Subscribable{constructor(e,t){super(),this.options=t,this.#e=e,this.#t=null,this.#r=(0,o.pendingThenable)(),this.bindMethods(),this.setOptions(t)}#e;#s=void 0;#i=void 0;#n=void 0;#a;#o;#r;#t;#u;#c;#l;#h;#d;#y;#f=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#s.addObserver(this),h(this.#s,this.options)?this.#p():this.updateResult(),this.#m())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return d(this.#s,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return d(this.#s,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#v(),this.#s.removeObserver(this)}setOptions(e){let t=this.options,r=this.#s;if(this.options=this.#e.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof(0,u.resolveEnabled)(this.options.enabled,this.#s))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#g(),this.#s.setOptions(this.options),t._defaulted&&!(0,u.shallowEqualObjects)(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#s,observer:this});let s=this.hasListeners();s&&y(this.#s,r,this.options,t)&&this.#p(),this.updateResult(),s&&(this.#s!==r||(0,u.resolveEnabled)(this.options.enabled,this.#s)!==(0,u.resolveEnabled)(t.enabled,this.#s)||(0,u.resolveStaleTime)(this.options.staleTime,this.#s)!==(0,u.resolveStaleTime)(t.staleTime,this.#s))&&this.#R();let i=this.#S();s&&(this.#s!==r||(0,u.resolveEnabled)(this.options.enabled,this.#s)!==(0,u.resolveEnabled)(t.enabled,this.#s)||i!==this.#y)&&this.#w(i)}getOptimisticResult(e){var t,r;let s=this.#e.getQueryCache().build(this.#e,e),i=this.createResult(s,e);return t=this,r=i,(0,u.shallowEqualObjects)(t.getCurrentResult(),r)||(this.#n=i,this.#o=this.options,this.#a=this.#s.state),i}getCurrentResult(){return this.#n}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),t?.(r),"promise"===r&&(this.trackProp("data"),this.options.experimental_prefetchInRender||"pending"!==this.#r.status||this.#r.reject(Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(e,r))})}trackProp(e){this.#f.add(e)}getCurrentQuery(){return this.#s}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),r=this.#e.getQueryCache().build(this.#e,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#p({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#n))}#p(e){this.#g();let t=this.#s.fetch(this.options,e);return e?.throwOnError||(t=t.catch(u.noop)),t}#R(){this.#b();let e=(0,u.resolveStaleTime)(this.options.staleTime,this.#s);if(u.isServer||this.#n.isStale||!(0,u.isValidTimeout)(e))return;let t=(0,u.timeUntilStale)(this.#n.dataUpdatedAt,e);this.#h=c.timeoutManager.setTimeout(()=>{this.#n.isStale||this.updateResult()},t+1)}#S(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#s):this.options.refetchInterval)??!1}#w(e){this.#v(),this.#y=e,!u.isServer&&!1!==(0,u.resolveEnabled)(this.options.enabled,this.#s)&&(0,u.isValidTimeout)(this.#y)&&0!==this.#y&&(this.#d=c.timeoutManager.setInterval(()=>{(this.options.refetchIntervalInBackground||s.focusManager.isFocused())&&this.#p()},this.#y))}#m(){this.#R(),this.#w(this.#S())}#b(){this.#h&&(c.timeoutManager.clearTimeout(this.#h),this.#h=void 0)}#v(){this.#d&&(c.timeoutManager.clearInterval(this.#d),this.#d=void 0)}createResult(e,t){let r,s=this.#s,i=this.options,a=this.#n,c=this.#a,l=this.#o,d=e!==s?e.state:this.#i,{state:p}=e,m={...p},b=!1;if(t._optimisticResults){let r=this.hasListeners(),a=!r&&h(e,t),o=r&&y(e,s,t,i);(a||o)&&(m={...m,...(0,n.fetchState)(p.data,e.options)}),"isRestoring"===t._optimisticResults&&(m.fetchStatus="idle")}let{error:v,errorUpdatedAt:g,status:R}=m;r=m.data;let S=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===R){let e;a?.isPlaceholderData&&t.placeholderData===l?.placeholderData?(e=a.data,S=!0):e="function"==typeof t.placeholderData?t.placeholderData(this.#l?.state.data,this.#l):t.placeholderData,void 0!==e&&(R="success",r=(0,u.replaceData)(a?.data,e,t),b=!0)}if(t.select&&void 0!==r&&!S)if(a&&r===c?.data&&t.select===this.#u)r=this.#c;else try{this.#u=t.select,r=t.select(r),r=(0,u.replaceData)(a?.data,r,t),this.#c=r,this.#t=null}catch(e){this.#t=e}this.#t&&(v=this.#t,r=this.#c,g=Date.now(),R="error");let w="fetching"===m.fetchStatus,Q="pending"===R,F="error"===R,E=Q&&w,O=void 0!==r,C={status:R,fetchStatus:m.fetchStatus,isPending:Q,isSuccess:"success"===R,isError:F,isInitialLoading:E,isLoading:E,data:r,dataUpdatedAt:m.dataUpdatedAt,error:v,errorUpdatedAt:g,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:m.dataUpdateCount>0||m.errorUpdateCount>0,isFetchedAfterMount:m.dataUpdateCount>d.dataUpdateCount||m.errorUpdateCount>d.errorUpdateCount,isFetching:w,isRefetching:w&&!Q,isLoadingError:F&&!O,isPaused:"paused"===m.fetchStatus,isPlaceholderData:b,isRefetchError:F&&O,isStale:f(e,t),refetch:this.refetch,promise:this.#r,isEnabled:!1!==(0,u.resolveEnabled)(t.enabled,e)};if(this.options.experimental_prefetchInRender){let t=void 0!==C.data,r="error"===C.status&&!t,i=e=>{r?e.reject(C.error):t&&e.resolve(C.data)},n=()=>{i(this.#r=C.promise=(0,o.pendingThenable)())},a=this.#r;switch(a.status){case"pending":e.queryHash===s.queryHash&&i(a);break;case"fulfilled":(r||C.data!==a.value)&&n();break;case"rejected":r&&C.error===a.reason||n()}}return C}updateResult(){let e=this.#n,t=this.createResult(this.#s,this.options);if(this.#a=this.#s.state,this.#o=this.options,void 0!==this.#a.data&&(this.#l=this.#s),(0,u.shallowEqualObjects)(t,e))return;this.#n=t;let r=()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,r="function"==typeof t?t():t;if("all"===r||!r&&!this.#f.size)return!0;let s=new Set(r??this.#f);return this.options.throwOnError&&s.add("error"),Object.keys(this.#n).some(t=>this.#n[t]!==e[t]&&s.has(t))};this.#Q({listeners:r()})}#g(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#s)return;let t=this.#s;this.#s=e,this.#i=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#m()}#Q(e){i.notifyManager.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#n)}),this.#e.getQueryCache().notify({query:this.#s,type:"observerResultsUpdated"})})}};function h(e,t){return!1!==(0,u.resolveEnabled)(t.enabled,e)&&void 0===e.state.data&&("error"!==e.state.status||!1!==t.retryOnMount)||void 0!==e.state.data&&d(e,t,t.refetchOnMount)}function d(e,t,r){if(!1!==(0,u.resolveEnabled)(t.enabled,e)&&"static"!==(0,u.resolveStaleTime)(t.staleTime,e)){let s="function"==typeof r?r(e):r;return"always"===s||!1!==s&&f(e,t)}return!1}function y(e,t,r,s){return(e!==t||!1===(0,u.resolveEnabled)(s.enabled,e))&&(!r.suspense||"error"!==e.state.status)&&f(e,r)}function f(e,t){return!1!==(0,u.resolveEnabled)(t.enabled,e)&&e.isStaleByTime((0,u.resolveStaleTime)(t.staleTime,e))}var p=e.i(4),m=e.i(1235);e.i(27493);var b=p.createContext((t=!1,{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t})),v=p.createContext(!1);v.Provider;var g=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function R(e,t){return function(e,t,r){let s,n=p.useContext(v),a=p.useContext(b),o=(0,m.useQueryClient)(r),c=o.defaultQueryOptions(e);o.getDefaultOptions().queries?._experimental_beforeQuery?.(c);let l=o.getQueryCache().get(c.queryHash);if(c._optimisticResults=n?"isRestoring":"optimistic",c.suspense){let e=e=>"static"===e?e:Math.max(e??1e3,1e3),t=c.staleTime;c.staleTime="function"==typeof t?(...r)=>e(t(...r)):e(t),"number"==typeof c.gcTime&&(c.gcTime=Math.max(c.gcTime,1e3))}s=l?.state.error&&"function"==typeof c.throwOnError?(0,u.shouldThrowError)(c.throwOnError,[l.state.error,l]):c.throwOnError,(c.suspense||c.experimental_prefetchInRender||s)&&!a.isReset()&&(c.retryOnMount=!1),p.useEffect(()=>{a.clearReset()},[a]);let h=!o.getQueryCache().get(c.queryHash),[d]=p.useState(()=>new t(o,c)),y=d.getOptimisticResult(c),f=!n&&!1!==e.subscribed;if(p.useSyncExternalStore(p.useCallback(e=>{let t=f?d.subscribe(i.notifyManager.batchCalls(e)):u.noop;return d.updateResult(),t},[d,f]),()=>d.getCurrentResult(),()=>d.getCurrentResult()),p.useEffect(()=>{d.setOptions(c)},[c,d]),c?.suspense&&y.isPending)throw g(c,d,a);if((({result:e,errorResetBoundary:t,throwOnError:r,query:s,suspense:i})=>e.isError&&!t.isReset()&&!e.isFetching&&s&&(i&&void 0===e.data||(0,u.shouldThrowError)(r,[e.error,s])))({result:y,errorResetBoundary:a,throwOnError:c.throwOnError,query:l,suspense:c.suspense}))throw y.error;if(o.getDefaultOptions().queries?._experimental_afterQuery?.(c,y),c.experimental_prefetchInRender&&!u.isServer&&y.isLoading&&y.isFetching&&!n){let e=h?g(c,d,a):l?.promise;e?.catch(u.noop).finally(()=>{d.updateResult()})}return c.notifyOnChangeProps?y:d.trackResult(y)}(e,l,t)}e.s(["useQuery",()=>R],45688);var S=e.i(21230),w=a,Q=class extends w.Subscribable{#e;#n=void 0;#F;#E;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#O()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,u.shallowEqualObjects)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#F,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,u.hashKey)(t.mutationKey)!==(0,u.hashKey)(this.options.mutationKey)?this.reset():this.#F?.state.status==="pending"&&this.#F.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#F?.removeObserver(this)}onMutationUpdate(e){this.#O(),this.#Q(e)}getCurrentResult(){return this.#n}reset(){this.#F?.removeObserver(this),this.#F=void 0,this.#O(),this.#Q()}mutate(e,t){return this.#E=t,this.#F?.removeObserver(this),this.#F=this.#e.getMutationCache().build(this.#e,this.options),this.#F.addObserver(this),this.#F.execute(e)}#O(){let e=this.#F?.state??(0,S.getDefaultState)();this.#n={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#Q(e){i.notifyManager.batch(()=>{if(this.#E&&this.hasListeners()){let t=this.#n.variables,r=this.#n.context,s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#E.onSuccess?.(e.data,t,r,s)}catch(e){Promise.reject(e)}try{this.#E.onSettled?.(e.data,null,t,r,s)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#E.onError?.(e.error,t,r,s)}catch(e){Promise.reject(e)}try{this.#E.onSettled?.(void 0,e.error,t,r,s)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#n)})})}};function F(e,t){let r=(0,m.useQueryClient)(t),[s]=p.useState(()=>new Q(r,e));p.useEffect(()=>{s.setOptions(e)},[s,e]);let n=p.useSyncExternalStore(p.useCallback(e=>s.subscribe(i.notifyManager.batchCalls(e)),[s]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),a=p.useCallback((e,t)=>{s.mutate(e,t).catch(u.noop)},[s]);if(n.error&&(0,u.shouldThrowError)(s.options.throwOnError,[n.error]))throw n.error;return{...n,mutate:a,mutateAsync:n.mutate}}e.s(["useMutation",()=>F],71921);let E=r.default.env.NEXT_PUBLIC_WS_URL||"ws://localhost:3001/ws/events";function O(e={}){let{enabled:t=!0,onMessage:r}=e,s=(0,m.useQueryClient)(),i=(0,p.useRef)(null),n=(0,p.useRef)(null),a=(0,p.useRef)(0),o=(0,p.useRef)(1e3),u=(0,p.useRef)(()=>{}),[c,l]=(0,p.useState)(!1),[h,d]=(0,p.useState)(null),y=(0,p.useRef)(r);(0,p.useEffect)(()=>{y.current=r},[r]);let f=(0,p.useCallback)(()=>{if(t&&i.current?.readyState!==WebSocket.OPEN){n.current&&(clearTimeout(n.current),n.current=null);try{let e=new WebSocket(E);i.current=e,e.onopen=()=>{l(!0),a.current=0,o.current=1e3,console.log("[WebSocket] Connected to memory server")},e.onmessage=e=>{try{let t=JSON.parse(e.data);switch(d({type:t.type,data:t.data,timestamp:t.timestamp||new Date().toISOString()}),y.current?.(t),t.type){case"initial_state":case"consolidation_complete":case"predictive_consolidation":s.invalidateQueries({queryKey:["memories"]}),s.invalidateQueries({queryKey:["stats"]}),s.invalidateQueries({queryKey:["links"]});break;case"memory_created":case"memory_updated":case"memory_deleted":s.invalidateQueries({queryKey:["memories"]}),s.invalidateQueries({queryKey:["stats"]});break;case"decay_tick":case"worker_light_tick":case"worker_medium_tick":break;case"link_discovered":s.invalidateQueries({queryKey:["links"]});break;case"defence_event":s.invalidateQueries({queryKey:["agents"]}),s.invalidateQueries({queryKey:["agent-timeline"]}),s.invalidateQueries({queryKey:["audit-logs"]}),s.invalidateQueries({queryKey:["audit-stats"]});break;case"update_started":case"update_complete":case"update_failed":"update_complete"===t.type&&(s.invalidateQueries({queryKey:["version"]}),s.invalidateQueries({queryKey:["version-check"]}));break;case"server_restarting":console.log("[WebSocket] Server restarting, will reconnect shortly...")}}catch(e){console.error("[WebSocket] Failed to parse message:",e)}},e.onerror=()=>{console.warn("[WebSocket] Connection failed - is the API server running?")},e.onclose=()=>{if(l(!1),console.log("[WebSocket] Disconnected"),t&&a.current<10){let e=o.current;a.current++,o.current=Math.min(2*o.current,3e4),console.log(`[WebSocket] Reconnecting in ${e}ms (attempt ${a.current}/10)...`),n.current=setTimeout(()=>{u.current()},e)}else a.current>=10&&console.error("[WebSocket] Max reconnection attempts reached. Use reconnect() to try again.")}}catch(e){console.error("[WebSocket] Failed to connect:",e)}}},[t,s]);return(0,p.useEffect)(()=>{u.current=f}),(0,p.useEffect)(()=>(t&&f(),()=>{n.current&&clearTimeout(n.current),i.current&&(i.current.close(),i.current=null)}),[t,f]),{isConnected:c,lastEvent:h,reconnect:(0,p.useCallback)(()=>{a.current=0,o.current=1e3,f()},[f])}}e.s(["useMemoryWebSocket",()=>O],94156);let C=r.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function j(e){let t=new URLSearchParams;e?.project&&t.set("project",e.project),e?.type&&t.set("type",e.type),e?.category&&t.set("category",e.category),e?.limit&&t.set("limit",e.limit.toString()),e?.offset&&t.set("offset",e.offset.toString()),e?.mode&&t.set("mode",e.mode),e?.query&&t.set("query",e.query);let r=await fetch(`${C}/api/memories?${t}`);if(!r.ok)throw Error("Failed to fetch memories");return r.json()}async function T(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/stats${t}`);if(!r.ok)throw Error("Failed to fetch stats");return r.json()}async function k(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/links${t}`);if(!r.ok)throw Error("Failed to fetch links");return r.json()}async function P(){let e=await fetch(`${C}/api/projects`);if(!e.ok)throw Error("Failed to fetch projects");return e.json()}async function q(e){let t=await fetch(`${C}/api/memories/${e}/access`,{method:"POST"});if(!t.ok)throw Error("Failed to access memory");return t.json()}async function M(){let e=await fetch(`${C}/api/consolidate`,{method:"POST"});if(!e.ok)throw Error("Failed to consolidate");return e.json()}function I(e){return R({queryKey:["stats",e],queryFn:()=>T(e),refetchInterval:3e4})}function _(e){return R({queryKey:["links",e],queryFn:()=>k(e),refetchInterval:6e4})}function K(){return R({queryKey:["projects"],queryFn:P,refetchInterval:6e4})}function x(e){let t,r=O();return{...{...t=R({queryKey:["memories",e],queryFn:()=>j(e),refetchInterval:3e4}),data:t.data?.memories,pagination:t.data?.pagination},isConnected:r.isConnected,lastEvent:r.lastEvent}}function $(){let e=(0,m.useQueryClient)();return F({mutationFn:q,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function D(){let e=(0,m.useQueryClient)();return F({mutationFn:M,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}async function U(){let e=await fetch(`${C}/api/control/status`);if(!e.ok)throw Error("Failed to fetch control status");return e.json()}async function L(){let e=await fetch(`${C}/api/control/pause`,{method:"POST"});if(!e.ok)throw Error("Failed to pause");return e.json()}async function B(){let e=await fetch(`${C}/api/control/resume`,{method:"POST"});if(!e.ok)throw Error("Failed to resume");return e.json()}function A(){return R({queryKey:["control-status"],queryFn:U,refetchInterval:1e4})}function W(){let e=(0,m.useQueryClient)();return F({mutationFn:L,onSuccess:()=>{e.invalidateQueries({queryKey:["control-status"]})}})}function z(){let e=(0,m.useQueryClient)();return F({mutationFn:B,onSuccess:()=>{e.invalidateQueries({queryKey:["control-status"]})}})}async function N(){let e=await fetch(`${C}/api/version`);if(!e.ok)throw Error("Failed to fetch version");return e.json()}function H(){return R({queryKey:["version"],queryFn:N,staleTime:1/0})}async function J(e){let t=e?`?project=${e}`:"",r=await fetch(`${C}/api/contradictions${t}`);if(!r.ok)throw Error("Failed to fetch contradictions");return r.json()}function V(e){return R({queryKey:["contradictions",e],queryFn:()=>J(e),staleTime:3e5})}async function X(e){let t=await fetch(`${C}/api/memories/${e}/boost`,{method:"POST"});if(!t.ok)throw Error("Failed to boost memory");return t.json()}async function G(e){let t=await fetch(`${C}/api/memories/${e}/demote`,{method:"POST"});if(!t.ok)throw Error("Failed to demote memory");return t.json()}async function Y(e){let t=await fetch(`${C}/api/memories/${e}/promote`,{method:"POST"});if(!t.ok)throw Error("Failed to promote memory");return t.json()}async function Z(e,t){let r=await fetch(`${C}/api/memories/${e}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok)throw Error("Failed to edit memory");return r.json()}async function ee(e){let t=await fetch(`${C}/api/memories/${e}`,{method:"DELETE"});if(!t.ok)throw Error("Failed to delete memory");return t.json()}async function et(e,t){let r=await fetch(`${C}/api/memories/${e}/quarantine`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reason:t})});if(!r.ok)throw Error("Failed to quarantine memory");return r.json()}async function er(){let e=await fetch(`${C}/api/worker/status`);if(!e.ok)throw Error("Failed to fetch worker status");return e.json()}function es(){let e=(0,m.useQueryClient)();return F({mutationFn:X,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function ei(){let e=(0,m.useQueryClient)();return F({mutationFn:G,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function en(){let e=(0,m.useQueryClient)();return F({mutationFn:Y,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function ea(){let e=(0,m.useQueryClient)();return F({mutationFn:({id:e,updates:t})=>Z(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function eo(){let e=(0,m.useQueryClient)();return F({mutationFn:ee,onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]}),e.invalidateQueries({queryKey:["links"]})}})}function eu(){let e=(0,m.useQueryClient)();return F({mutationFn:({id:e,reason:t})=>et(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["memories"]}),e.invalidateQueries({queryKey:["stats"]})}})}function ec(){return R({queryKey:["worker-status"],queryFn:er,refetchInterval:15e3})}e.s(["useAccessMemory",()=>$,"useBoostMemory",()=>es,"useConsolidate",()=>D,"useContradictions",()=>V,"useControlStatus",()=>A,"useDeleteMemory",()=>eo,"useDemoteMemory",()=>ei,"useEditMemory",()=>ea,"useMemoriesWithRealtime",()=>x,"useMemoryLinks",()=>_,"usePauseMemory",()=>W,"useProjects",()=>K,"usePromoteMemory",()=>en,"useQuarantineMemory",()=>eu,"useResumeMemory",()=>z,"useStats",()=>I,"useVersion",()=>H,"useWorkerStatus",()=>ec],88069)},42098,92618,e=>{"use strict";let t;var r=e.i(4);let s=e=>{let t,r=new Set,s=(e,s)=>{let i="function"==typeof e?e(t):e;if(!Object.is(i,t)){let e=t;t=(null!=s?s:"object"!=typeof i||null===i)?i:Object.assign({},t,i),r.forEach(r=>r(t,e))}},i=()=>t,n={setState:s,getState:i,getInitialState:()=>a,subscribe:e=>(r.add(e),()=>r.delete(e))},a=t=e(s,i,n);return n},i=e=>e?s(e):s;e.s(["createStore",()=>i],92618);let n=e=>{let t=i(e),s=e=>(function(e,t=e=>e){let s=r.default.useSyncExternalStore(e.subscribe,r.default.useCallback(()=>t(e.getState()),[e,t]),r.default.useCallback(()=>t(e.getInitialState()),[e,t]));return r.default.useDebugValue(s),s})(t,e);return Object.assign(s,t),s},a=(t=e=>({selectedMemory:null,setSelectedMemory:t=>e({selectedMemory:t}),viewMode:"shield",setViewMode:t=>e({viewMode:t}),typeFilter:null,categoryFilter:null,projectFilter:null,setTypeFilter:t=>e({typeFilter:t}),setCategoryFilter:t=>e({categoryFilter:t}),setProjectFilter:t=>e({projectFilter:t}),recentEvents:[],addEvent:t=>e(e=>({recentEvents:[t,...e.recentEvents].slice(0,50)})),clearEvents:()=>e({recentEvents:[]}),cameraPosition:[0,0,12],setCameraPosition:t=>e({cameraPosition:t}),showLeftSidebar:!0,showRightSidebar:!0,toggleLeftSidebar:()=>e(e=>({showLeftSidebar:!e.showLeftSidebar})),toggleRightSidebar:()=>e(e=>({showRightSidebar:!e.showRightSidebar})),searchQuery:"",setSearchQuery:t=>e({searchQuery:t})}))?n(t):n;e.s(["useDashboardStore",0,a],42098)},33368,e=>{"use strict";let t={architecture:{basePosition:{x:0,y:1.2,z:2.2},spread:1},pattern:{basePosition:{x:0,y:.3,z:-2.2},spread:.9},preference:{basePosition:{x:1.6,y:-.3,z:0},spread:.7},error:{basePosition:{x:-1.6,y:-.3,z:.3},spread:.8},context:{basePosition:{x:0,y:1.8,z:0},spread:1.2},learning:{basePosition:{x:0,y:-.3,z:0},spread:.8},todo:{basePosition:{x:.6,y:.8,z:1.8},spread:.7},note:{basePosition:{x:1.8,y:0,z:-.3},spread:1},relationship:{basePosition:{x:-1.8,y:.3,z:-.3},spread:.9},custom:{basePosition:{x:0,y:0,z:0},spread:1.5}},r={short_term:.6,episodic:0,long_term:-.4};function s(e){let t=43758.5453*Math.sin(12.9898*e);return t-Math.floor(t)}function i(e){let i=t[e.category]||t.custom,n=r[e.type]||0,a=s(e.id),o=s(e.id+1e3),u=s(e.id+2e3),c=i.spread,l=a*Math.PI*2,h=(o-.5)*Math.PI,d=u*c*.7+.3*c,y=d*Math.cos(h)*Math.cos(l),f=d*Math.sin(h)*.6,p=d*Math.cos(h)*Math.sin(l),m=i.basePosition.x+y,b=i.basePosition.y+f,v=i.basePosition.z+p+n,g=.4*e.salience,R=Math.sqrt(m*m+b*b+v*v);if(R>.1){let e=(R+g)/R;m*=e,b*=e,v*=e}let S=Math.sqrt((m/3.2)**2+(b/2.5)**2+(v/3.5)**2);if(S>.95){let e=.95/S;m*=e,b*=e,v*=e}return{x:m,y:b,z:v}}function n(e){if(!e.lastAccessed)return 1;let t=Date.now(),r=new Date(e.lastAccessed).getTime();return Math.pow({short_term:.995,long_term:.9995,episodic:.998}[e.type]||.995,(t-r)/36e5)}e.s(["calculateDecayFactor",()=>n,"calculateMemoryPosition",()=>i])},87353,e=>{"use strict";var t=e.i(22534),r=e.i(45688),s=e.i(71921),i=e.i(1235);let n=t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:3001";async function a(e){let t=new URLSearchParams;e?.startTime&&t.set("startTime",e.startTime),e?.endTime&&t.set("endTime",e.endTime),e?.source&&t.set("source",e.source),e?.firewallResult&&t.set("firewallResult",e.firewallResult),e?.project&&t.set("project",e.project),e?.limit&&t.set("limit",e.limit.toString());let r=await fetch(`${n}/api/v1/audit?${t}`);if(!r.ok)throw Error("Failed to fetch audit logs");return r.json()}async function o(e,t){let r=new URLSearchParams({timeRange:e});t&&r.set("project",t);let s=await fetch(`${n}/api/v1/audit/stats?${r}`);if(!s.ok)throw Error("Failed to fetch audit stats");return s.json()}async function u(e="pending",t=50,r){let s=new URLSearchParams({status:e,limit:t.toString()});r&&s.set("project",r);let i=await fetch(`${n}/api/v1/quarantine?${s}`);if(!i.ok)throw Error("Failed to fetch quarantine");return i.json()}async function c(e){let t=await fetch(`${n}/api/v1/quarantine/${e}/approve`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard"})});if(!t.ok)throw Error("Failed to approve");return t.json()}async function l(e,t){let r=await fetch(`${n}/api/v1/quarantine/${e}/reject`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({reviewedBy:"dashboard",notes:t})});if(!r.ok)throw Error("Failed to reject");return r.json()}function h(e){return(0,r.useQuery)({queryKey:["audit-logs",e],queryFn:()=>a(e),refetchInterval:3e4,retry:2})}function d(e="24h",t){return(0,r.useQuery)({queryKey:["audit-stats",e,t],queryFn:()=>o(e,t),refetchInterval:3e4,retry:2})}function y(e="pending",t=50,s){return(0,r.useQuery)({queryKey:["quarantine",e,t,s],queryFn:()=>u(e,t,s),refetchInterval:3e4,retry:2})}function f(){let e=(0,i.useQueryClient)();return(0,s.useMutation)({mutationFn:c,onSuccess:()=>{e.invalidateQueries({queryKey:["quarantine"]}),e.invalidateQueries({queryKey:["audit-stats"]})}})}function p(){let e=(0,i.useQueryClient)();return(0,s.useMutation)({mutationFn:({id:e,notes:t})=>l(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:["quarantine"]}),e.invalidateQueries({queryKey:["audit-stats"]})}})}e.s(["useApproveQuarantine",()=>f,"useAuditLogs",()=>h,"useAuditStats",()=>d,"useQuarantine",()=>y,"useRejectQuarantine",()=>p])},1369,e=>{e.v(t=>Promise.all(["static/chunks/a3989d0e6629bcf8.js"].map(t=>e.l(t))).then(()=>t(11570)))},62838,e=>{e.v(t=>Promise.all(["static/chunks/77cbce7ecfbfed98.js"].map(t=>e.l(t))).then(()=>t(41740)))}]);
|
package/dist/api/version.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ export interface UpdateResult {
|
|
|
16
16
|
newVersion: string | null;
|
|
17
17
|
error?: string;
|
|
18
18
|
requiresRestart: boolean;
|
|
19
|
+
mcpRestarted?: number;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Get current installed version from package.json
|
|
@@ -29,6 +30,12 @@ export declare function checkForUpdates(forceRefresh?: boolean): Promise<Version
|
|
|
29
30
|
* Perform npm update (runs in background)
|
|
30
31
|
*/
|
|
31
32
|
export declare function performUpdate(): Promise<UpdateResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Kill running MCP server processes so Claude Code respawns them with updated code.
|
|
35
|
+
* Finds shieldcortex node processes (excluding the current visualization server).
|
|
36
|
+
* Returns the number of processes signalled.
|
|
37
|
+
*/
|
|
38
|
+
export declare function restartMcpServers(): number;
|
|
32
39
|
/**
|
|
33
40
|
* Schedule server restart (with delay for client notification)
|
|
34
41
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/api/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/api/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmBH,MAAM,WAAW,WAAW;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAiBD;;GAEG;AACH,wBAAsB,eAAe,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CA8ChF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,CAwDrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA2B1C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAO,GAAG,IAAI,CAOpD"}
|
package/dist/api/version.js
CHANGED
|
@@ -124,15 +124,52 @@ export function performUpdate() {
|
|
|
124
124
|
versionCache = null;
|
|
125
125
|
// Get new version
|
|
126
126
|
const newVersion = getCurrentVersion();
|
|
127
|
+
// Kill MCP servers so Claude Code restarts them with updated code
|
|
128
|
+
let mcpRestarted = 0;
|
|
129
|
+
if (newVersion !== previousVersion) {
|
|
130
|
+
mcpRestarted = restartMcpServers();
|
|
131
|
+
}
|
|
127
132
|
resolve({
|
|
128
133
|
success: true,
|
|
129
134
|
previousVersion,
|
|
130
135
|
newVersion,
|
|
131
136
|
requiresRestart: newVersion !== previousVersion,
|
|
137
|
+
mcpRestarted,
|
|
132
138
|
});
|
|
133
139
|
});
|
|
134
140
|
});
|
|
135
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Kill running MCP server processes so Claude Code respawns them with updated code.
|
|
144
|
+
* Finds shieldcortex node processes (excluding the current visualization server).
|
|
145
|
+
* Returns the number of processes signalled.
|
|
146
|
+
*/
|
|
147
|
+
export function restartMcpServers() {
|
|
148
|
+
let killed = 0;
|
|
149
|
+
try {
|
|
150
|
+
const output = execSync('pgrep -f "shieldcortex" 2>/dev/null || true', { encoding: 'utf-8', timeout: 5000 }).trim();
|
|
151
|
+
if (!output)
|
|
152
|
+
return 0;
|
|
153
|
+
const currentPid = process.pid;
|
|
154
|
+
for (const line of output.split('\n')) {
|
|
155
|
+
const pid = parseInt(line.trim(), 10);
|
|
156
|
+
if (!pid || pid === currentPid)
|
|
157
|
+
continue;
|
|
158
|
+
try {
|
|
159
|
+
process.kill(pid, 'SIGTERM');
|
|
160
|
+
killed++;
|
|
161
|
+
console.log(`[shieldcortex] Sent SIGTERM to MCP server (pid ${pid})`);
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Process may have already exited
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// pgrep not available or failed — non-critical
|
|
170
|
+
}
|
|
171
|
+
return killed;
|
|
172
|
+
}
|
|
136
173
|
/**
|
|
137
174
|
* Schedule server restart (with delay for client notification)
|
|
138
175
|
*/
|
package/dist/api/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/api/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,gDAAgD;AAChD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAEtE,8CAA8C;AAC9C,IAAI,YAAY,GAGL,IAAI,CAAC;AAChB,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/api/version.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visualization-server.d.ts","sourceRoot":"","sources":["../../src/api/visualization-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0DH;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"visualization-server.d.ts","sourceRoot":"","sources":["../../src/api/visualization-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0DH;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CA63D9D"}
|
|
@@ -25,7 +25,7 @@ import { getCurrentVersion, checkForUpdates, performUpdate, scheduleRestart } fr
|
|
|
25
25
|
import { runDefencePipeline } from '../defence/pipeline.js';
|
|
26
26
|
import { DEFAULT_DEFENCE_CONFIG } from '../defence/types.js';
|
|
27
27
|
import { queryAuditLogs, getAuditStats, queryAgentRegistry, queryAgentTimeline, queryAgentOperations } from '../defence/audit/queries.js';
|
|
28
|
-
import { getCloudConfig, setCloudConfig, getTrustedSkills, addTrustedSkill, removeTrustedSkill } from '../cloud/config.js';
|
|
28
|
+
import { getCloudConfig, setCloudConfig, getTrustedSkills, addTrustedSkill, removeTrustedSkill, getDeviceId, getDeviceName } from '../cloud/config.js';
|
|
29
29
|
import { scanSkill, scanSkillContent, discoverSkillFiles } from '../defence/skill-scanner/index.js';
|
|
30
30
|
const PORT = process.env.PORT || 3001;
|
|
31
31
|
// Track connected WebSocket clients
|
|
@@ -59,7 +59,8 @@ export function startVisualizationServer(dbPath) {
|
|
|
59
59
|
// ============================================
|
|
60
60
|
// Health check
|
|
61
61
|
app.get('/api/health', (_req, res) => {
|
|
62
|
-
|
|
62
|
+
const version = getCurrentVersion();
|
|
63
|
+
res.json({ status: 'ok', timestamp: new Date().toISOString(), version });
|
|
63
64
|
});
|
|
64
65
|
// Get all memories with filters and pagination
|
|
65
66
|
app.get('/api/memories', async (req, res) => {
|
|
@@ -1145,12 +1146,43 @@ export function startVisualizationServer(dbPath) {
|
|
|
1145
1146
|
};
|
|
1146
1147
|
});
|
|
1147
1148
|
const threatCount = results.filter((r) => !r.safe && !r.trusted).length;
|
|
1149
|
+
const scannedAt = new Date().toISOString();
|
|
1148
1150
|
res.json({
|
|
1149
1151
|
files: results,
|
|
1150
1152
|
totalScanned: results.length,
|
|
1151
1153
|
threatCount,
|
|
1152
|
-
scannedAt
|
|
1154
|
+
scannedAt,
|
|
1153
1155
|
});
|
|
1156
|
+
// Fire-and-forget: sync results to cloud
|
|
1157
|
+
const cloudConfig = getCloudConfig();
|
|
1158
|
+
if (cloudConfig.cloudEnabled && cloudConfig.cloudApiKey) {
|
|
1159
|
+
const payload = {
|
|
1160
|
+
files: results.map((r) => ({
|
|
1161
|
+
file_path: r.path,
|
|
1162
|
+
skill_name: r.skillName,
|
|
1163
|
+
format: r.format,
|
|
1164
|
+
risk_level: r.riskLevel,
|
|
1165
|
+
safe: r.safe,
|
|
1166
|
+
summary: r.summary,
|
|
1167
|
+
findings: r.findings,
|
|
1168
|
+
scan_duration_ms: r.scanDurationMs,
|
|
1169
|
+
trusted: r.trusted,
|
|
1170
|
+
})),
|
|
1171
|
+
device_id: getDeviceId(),
|
|
1172
|
+
device_name: getDeviceName(),
|
|
1173
|
+
platform: process.platform,
|
|
1174
|
+
scanned_at: scannedAt,
|
|
1175
|
+
};
|
|
1176
|
+
fetch(`${cloudConfig.cloudBaseUrl}/v1/skills/ingest`, {
|
|
1177
|
+
method: 'POST',
|
|
1178
|
+
headers: {
|
|
1179
|
+
'Content-Type': 'application/json',
|
|
1180
|
+
Authorization: `Bearer ${cloudConfig.cloudApiKey}`,
|
|
1181
|
+
},
|
|
1182
|
+
body: JSON.stringify(payload),
|
|
1183
|
+
signal: AbortSignal.timeout(15_000),
|
|
1184
|
+
}).catch(() => { });
|
|
1185
|
+
}
|
|
1154
1186
|
}
|
|
1155
1187
|
catch (error) {
|
|
1156
1188
|
res.status(500).json({ error: error.message });
|
|
@@ -1412,6 +1444,66 @@ export function startVisualizationServer(dbPath) {
|
|
|
1412
1444
|
res.status(500).json({ error: error.message });
|
|
1413
1445
|
}
|
|
1414
1446
|
});
|
|
1447
|
+
// Retroactive sync: push existing quarantine items to cloud
|
|
1448
|
+
app.post('/api/quarantine/sync-to-cloud', async (_req, res) => {
|
|
1449
|
+
try {
|
|
1450
|
+
const config = getCloudConfig();
|
|
1451
|
+
if (!config.cloudEnabled || !config.cloudApiKey) {
|
|
1452
|
+
return res.status(400).json({ error: 'Cloud not configured. Enable cloud sync first.' });
|
|
1453
|
+
}
|
|
1454
|
+
const db = getDatabase();
|
|
1455
|
+
const rows = db.prepare('SELECT * FROM quarantine WHERE status = ? ORDER BY created_at ASC').all('pending');
|
|
1456
|
+
if (rows.length === 0) {
|
|
1457
|
+
return res.json({ synced: 0, message: 'No pending quarantine items to sync.' });
|
|
1458
|
+
}
|
|
1459
|
+
let synced = 0;
|
|
1460
|
+
const errors = [];
|
|
1461
|
+
for (const row of rows) {
|
|
1462
|
+
try {
|
|
1463
|
+
const indicators = (() => {
|
|
1464
|
+
try {
|
|
1465
|
+
return JSON.parse(row.threat_indicators ?? '[]');
|
|
1466
|
+
}
|
|
1467
|
+
catch {
|
|
1468
|
+
return [];
|
|
1469
|
+
}
|
|
1470
|
+
})();
|
|
1471
|
+
const resp = await fetch(`${config.cloudBaseUrl}/v1/quarantine/ingest`, {
|
|
1472
|
+
method: 'POST',
|
|
1473
|
+
headers: {
|
|
1474
|
+
'Content-Type': 'application/json',
|
|
1475
|
+
Authorization: `Bearer ${config.cloudApiKey}`,
|
|
1476
|
+
},
|
|
1477
|
+
body: JSON.stringify({
|
|
1478
|
+
original_content: row.original_content,
|
|
1479
|
+
original_title: row.original_title ?? undefined,
|
|
1480
|
+
source_type: row.source_type ?? 'unknown',
|
|
1481
|
+
source_identifier: row.source_identifier ?? 'unknown',
|
|
1482
|
+
reason: row.reason ?? 'Unknown reason',
|
|
1483
|
+
threat_indicators: indicators,
|
|
1484
|
+
anomaly_score: row.anomaly_score ?? 0,
|
|
1485
|
+
firewall_result: row.firewall_result ?? 'QUARANTINE',
|
|
1486
|
+
}),
|
|
1487
|
+
signal: AbortSignal.timeout(10_000),
|
|
1488
|
+
});
|
|
1489
|
+
if (resp.ok) {
|
|
1490
|
+
synced++;
|
|
1491
|
+
}
|
|
1492
|
+
else {
|
|
1493
|
+
const body = await resp.text().catch(() => '');
|
|
1494
|
+
errors.push(`Item ${row.id}: ${resp.status} ${body.substring(0, 100)}`);
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1497
|
+
catch (e) {
|
|
1498
|
+
errors.push(`Item ${row.id}: ${e.message}`);
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
res.json({ synced, total: rows.length, errors: errors.length > 0 ? errors : undefined });
|
|
1502
|
+
}
|
|
1503
|
+
catch (error) {
|
|
1504
|
+
res.status(500).json({ error: error.message });
|
|
1505
|
+
}
|
|
1506
|
+
});
|
|
1415
1507
|
// Create and start the background brain worker
|
|
1416
1508
|
const brainWorker = new BrainWorker();
|
|
1417
1509
|
// Worker status endpoint
|
|
@@ -1626,6 +1718,24 @@ export function startVisualizationServer(dbPath) {
|
|
|
1626
1718
|
}
|
|
1627
1719
|
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'));
|
|
1628
1720
|
process.on('SIGINT', () => gracefulShutdown('SIGINT'));
|
|
1721
|
+
// Handle port-in-use and other listen errors gracefully
|
|
1722
|
+
server.on('error', (err) => {
|
|
1723
|
+
if (err.code === 'EADDRINUSE') {
|
|
1724
|
+
console.error(`\n[ShieldCortex] Port ${PORT} is already in use.`);
|
|
1725
|
+
console.error(`Another ShieldCortex instance may be running.\n`);
|
|
1726
|
+
console.error(` To fix:`);
|
|
1727
|
+
console.error(` 1. Kill the existing process: lsof -ti :${PORT} | xargs kill`);
|
|
1728
|
+
console.error(` 2. Or choose a different port: PORT=3002 npx shieldcortex --mode api\n`);
|
|
1729
|
+
}
|
|
1730
|
+
else {
|
|
1731
|
+
console.error(`[ShieldCortex] Server error: ${err.message}`);
|
|
1732
|
+
}
|
|
1733
|
+
// Stop worker and clean up before exiting
|
|
1734
|
+
brainWorker.stop();
|
|
1735
|
+
clearInterval(eventPollInterval);
|
|
1736
|
+
clearInterval(cleanupInterval);
|
|
1737
|
+
process.exit(1);
|
|
1738
|
+
});
|
|
1629
1739
|
server.listen(PORT, () => {
|
|
1630
1740
|
console.log(`
|
|
1631
1741
|
╔══════════════════════════════════════════════════════════════╗
|