@infinitedusky/indusk-mcp 1.28.18 → 1.28.19
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/admin/.next/BUILD_ID +1 -1
- package/admin/.next/build-manifest.json +3 -3
- package/admin/.next/fallback-build-manifest.json +3 -3
- package/admin/.next/server/app/_global-error.html +1 -1
- package/admin/.next/server/app/_global-error.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/admin/.next/server/middleware-build-manifest.js +3 -3
- package/admin/.next/server/pages/500.html +1 -1
- package/admin/.next/trace +1 -1
- package/admin/.next/trace-build +1 -1
- package/dist/bin/cli.js +10 -7
- package/dist/bin/commands/update.js +22 -63
- package/dist/bin/commands/upgrade.d.ts +32 -1
- package/dist/bin/commands/upgrade.js +140 -57
- package/dist/lib/global-install-manager.d.ts +41 -0
- package/dist/lib/global-install-manager.js +45 -0
- package/dist/lib/version-check.d.ts +51 -0
- package/dist/lib/version-check.js +137 -0
- package/package.json +1 -1
- /package/admin/.next/static/{mwkqCCI15TP59qrR_B361 → 3rik_r3yzK3Fjeh2XwzNR}/_buildManifest.js +0 -0
- /package/admin/.next/static/{mwkqCCI15TP59qrR_B361 → 3rik_r3yzK3Fjeh2XwzNR}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{mwkqCCI15TP59qrR_B361 → 3rik_r3yzK3Fjeh2XwzNR}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
3rik_r3yzK3Fjeh2XwzNR
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_buildManifest.js",
|
|
11
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_ssgManifest.js",
|
|
12
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_buildManifest.js",
|
|
9
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_ssgManifest.js",
|
|
10
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_clientMiddlewareManifest.js"
|
|
11
11
|
],
|
|
12
12
|
"rootMainFiles": []
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"3rik_r3yzK3Fjeh2XwzNR\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
4
|
+
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"
|
|
1
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"3rik_r3yzK3Fjeh2XwzNR"}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_buildManifest.js",
|
|
11
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_ssgManifest.js",
|
|
12
|
+
"static/3rik_r3yzK3Fjeh2XwzNR/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"3rik_r3yzK3Fjeh2XwzNR\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
package/admin/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":150,"timestamp":4245781126652,"id":4,"parentId":1,"tags":{},"startTime":1778892651058,"traceId":"31df19b909dad025"},{"name":"load-custom-routes","duration":228,"timestamp":4245781126863,"id":5,"parentId":1,"tags":{},"startTime":1778892651058,"traceId":"31df19b909dad025"},{"name":"create-dist-dir","duration":1101,"timestamp":4245781127104,"id":6,"parentId":1,"tags":{},"startTime":1778892651058,"traceId":"31df19b909dad025"},{"name":"clean","duration":43512,"timestamp":4245781128988,"id":7,"parentId":1,"tags":{},"startTime":1778892651060,"traceId":"31df19b909dad025"},{"name":"discover-routes","duration":4282,"timestamp":4245781178011,"id":8,"parentId":1,"tags":{},"startTime":1778892651109,"traceId":"31df19b909dad025"},{"name":"create-root-mapping","duration":35,"timestamp":4245781182321,"id":9,"parentId":1,"tags":{},"startTime":1778892651114,"traceId":"31df19b909dad025"},{"name":"generate-route-types","duration":15850,"timestamp":4245781183380,"id":10,"parentId":1,"tags":{},"startTime":1778892651115,"traceId":"31df19b909dad025"},{"name":"public-dir-conflict-check","duration":40,"timestamp":4245781199277,"id":11,"parentId":1,"tags":{},"startTime":1778892651131,"traceId":"31df19b909dad025"},{"name":"generate-routes-manifest","duration":1191,"timestamp":4245781199368,"id":12,"parentId":1,"tags":{},"startTime":1778892651131,"traceId":"31df19b909dad025"},{"name":"run-turbopack","duration":1775379,"timestamp":4245781202365,"id":14,"parentId":1,"tags":{},"startTime":1778892651134,"traceId":"31df19b909dad025"},{"name":"turbopack-build-events","duration":46,"timestamp":4245781370791,"id":15,"parentId":1,"tags":{},"startTime":1778892651302,"traceId":"31df19b909dad025"},{"name":"run-typescript","duration":2116076,"timestamp":4245783000693,"id":16,"parentId":1,"tags":{},"startTime":1778892652932,"traceId":"31df19b909dad025"},{"name":"generate-required-server-files","duration":636,"timestamp":4245785117699,"id":18,"parentId":1,"tags":{},"startTime":1778892655049,"traceId":"31df19b909dad025"},{"name":"check-static-error-page","duration":2375,"timestamp":4245785141121,"id":20,"parentId":19,"tags":{},"startTime":1778892655072,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":219218,"timestamp":4245785147432,"id":30,"parentId":22,"tags":{},"startTime":1778892655079,"traceId":"31df19b909dad025"},{"name":"check-page","duration":224158,"timestamp":4245785142559,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778892655074,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":241558,"timestamp":4245785147266,"id":29,"parentId":21,"tags":{},"startTime":1778892655079,"traceId":"31df19b909dad025"},{"name":"check-page","duration":247203,"timestamp":4245785141682,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778892655073,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":261418,"timestamp":4245785147459,"id":31,"parentId":23,"tags":{},"startTime":1778892655079,"traceId":"31df19b909dad025"},{"name":"check-page","duration":265846,"timestamp":4245785143063,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778892655074,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":263352,"timestamp":4245785151698,"id":32,"parentId":28,"tags":{},"startTime":1778892655083,"traceId":"31df19b909dad025"},{"name":"check-page","duration":271624,"timestamp":4245785143453,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1778892655075,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":266993,"timestamp":4245785151853,"id":35,"parentId":26,"tags":{},"startTime":1778892655083,"traceId":"31df19b909dad025"},{"name":"check-page","duration":275538,"timestamp":4245785143369,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1778892655075,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":270629,"timestamp":4245785151825,"id":34,"parentId":25,"tags":{},"startTime":1778892655083,"traceId":"31df19b909dad025"},{"name":"check-page","duration":279176,"timestamp":4245785143320,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1778892655075,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":274165,"timestamp":4245785151886,"id":36,"parentId":27,"tags":{},"startTime":1778892655083,"traceId":"31df19b909dad025"},{"name":"check-page","duration":282675,"timestamp":4245785143409,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1778892655075,"traceId":"31df19b909dad025"},{"name":"is-page-static","duration":280089,"timestamp":4245785151793,"id":33,"parentId":24,"tags":{},"startTime":1778892655083,"traceId":"31df19b909dad025"},{"name":"check-page","duration":288635,"timestamp":4245785143276,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1778892655075,"traceId":"31df19b909dad025"},{"name":"static-check","duration":291208,"timestamp":4245785140727,"id":19,"parentId":1,"tags":{},"startTime":1778892655072,"traceId":"31df19b909dad025"},{"name":"write-routes-manifest","duration":255,"timestamp":4245785432795,"id":38,"parentId":1,"tags":{},"startTime":1778892655364,"traceId":"31df19b909dad025"},{"name":"load-dotenv","duration":28,"timestamp":4245785439292,"id":41,"parentId":40,"tags":{},"startTime":1778892655371,"traceId":"31df19b909dad025"},{"name":"run-export-path-map","duration":198,"timestamp":4245785440740,"id":42,"parentId":40,"tags":{},"startTime":1778892655372,"traceId":"31df19b909dad025"},{"name":"next-export","duration":214233,"timestamp":4245785438562,"id":40,"parentId":1,"tags":{},"startTime":1778892655370,"traceId":"31df19b909dad025"},{"name":"move-exported-app-global-error-","duration":445,"timestamp":4245785653432,"id":43,"parentId":39,"tags":{},"startTime":1778892655585,"traceId":"31df19b909dad025"},{"name":"static-generation","duration":220363,"timestamp":4245785434405,"id":39,"parentId":1,"tags":{},"startTime":1778892655366,"traceId":"31df19b909dad025"},{"name":"write-routes-manifest","duration":210,"timestamp":4245785654859,"id":44,"parentId":1,"tags":{},"startTime":1778892655586,"traceId":"31df19b909dad025"},{"name":"print-tree-view","duration":1318,"timestamp":4245785660649,"id":45,"parentId":1,"tags":{},"startTime":1778892655592,"traceId":"31df19b909dad025"},{"name":"write-route-bundle-stats","duration":5616,"timestamp":4245785661979,"id":46,"parentId":1,"tags":{},"startTime":1778892655593,"traceId":"31df19b909dad025"},{"name":"telemetry-flush","duration":488977,"timestamp":4245785667608,"id":47,"parentId":1,"tags":{},"startTime":1778892655599,"traceId":"31df19b909dad025"},{"name":"next-build","duration":5057980,"timestamp":4245781098631,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778892651030,"traceId":"31df19b909dad025"}]
|
package/admin/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":1775379,"timestamp":4245781202365,"id":14,"parentId":1,"tags":{},"startTime":1778892651134,"traceId":"31df19b909dad025"},{"name":"turbopack-build-events","duration":46,"timestamp":4245781370791,"id":15,"parentId":1,"tags":{},"startTime":1778892651302,"traceId":"31df19b909dad025"},{"name":"run-typescript","duration":2116076,"timestamp":4245783000693,"id":16,"parentId":1,"tags":{},"startTime":1778892652932,"traceId":"31df19b909dad025"},{"name":"static-check","duration":291208,"timestamp":4245785140727,"id":19,"parentId":1,"tags":{},"startTime":1778892655072,"traceId":"31df19b909dad025"},{"name":"static-generation","duration":220363,"timestamp":4245785434405,"id":39,"parentId":1,"tags":{},"startTime":1778892655366,"traceId":"31df19b909dad025"},{"name":"telemetry-flush","duration":488977,"timestamp":4245785667608,"id":47,"parentId":1,"tags":{},"startTime":1778892655599,"traceId":"31df19b909dad025"},{"name":"next-build","duration":5057980,"timestamp":4245781098631,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778892651030,"traceId":"31df19b909dad025"}]
|
package/dist/bin/cli.js
CHANGED
|
@@ -54,6 +54,15 @@ program
|
|
|
54
54
|
const { update } = await import("./commands/update.js");
|
|
55
55
|
await update(rootOrExit());
|
|
56
56
|
});
|
|
57
|
+
program
|
|
58
|
+
.command("upgrade")
|
|
59
|
+
.description("Upgrade the global indusk-mcp CLI to the latest published version")
|
|
60
|
+
.option("--force", "Install latest without comparing versions (use to recover from a stuck state)")
|
|
61
|
+
.action(async function () {
|
|
62
|
+
const opts = this.opts();
|
|
63
|
+
const { upgrade } = await import("./commands/upgrade.js");
|
|
64
|
+
await upgrade({ force: opts.force === true });
|
|
65
|
+
});
|
|
57
66
|
const ext = program
|
|
58
67
|
.command("extensions")
|
|
59
68
|
.description("Manage extensions (built-in and third-party)");
|
|
@@ -476,13 +485,7 @@ telemetryCmd
|
|
|
476
485
|
.option("--limit <n>", "max records to print", "50")
|
|
477
486
|
.action(async (opts) => {
|
|
478
487
|
const { telemetryTail } = await import("./commands/telemetry.js");
|
|
479
|
-
const level = [
|
|
480
|
-
"error",
|
|
481
|
-
"warn",
|
|
482
|
-
"info",
|
|
483
|
-
"debug",
|
|
484
|
-
"any",
|
|
485
|
-
].includes(opts.level)
|
|
488
|
+
const level = ["error", "warn", "info", "debug", "any"].includes(opts.level)
|
|
486
489
|
? opts.level
|
|
487
490
|
: "any";
|
|
488
491
|
await telemetryTail({
|
|
@@ -5,6 +5,7 @@ import { dirname, join } from "node:path";
|
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { globSync } from "glob";
|
|
7
7
|
import { loadExtension } from "../../lib/extension-loader.js";
|
|
8
|
+
import { checkLatestVersion, hasNewerVersion } from "../../lib/version-check.js";
|
|
8
9
|
import { envIsFunctional } from "./extensions.js";
|
|
9
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
11
|
const packageRoot = join(__dirname, "../../..");
|
|
@@ -29,69 +30,15 @@ function getLocalVersion() {
|
|
|
29
30
|
return JSON.parse(readFileSync(pkgJsonPath, "utf-8")).version;
|
|
30
31
|
}
|
|
31
32
|
export async function update(projectRoot) {
|
|
32
|
-
//
|
|
33
|
+
// CLI version is informational only here. The actual upgrade lives in
|
|
34
|
+
// `indusk upgrade` — see `bin/commands/upgrade.ts` for the rationale.
|
|
35
|
+
// `indusk update` is strictly project-state work (skills, hooks,
|
|
36
|
+
// extensions, settings overlay, registry); it never mutates the
|
|
37
|
+
// machine-state global install. A non-blocking notice at the end
|
|
38
|
+
// surfaces newer versions without coupling the two.
|
|
33
39
|
console.info("[indusk-mcp]\n");
|
|
34
40
|
const currentVersion = getLocalVersion();
|
|
35
|
-
|
|
36
|
-
// Short-circuit when recursively invoked from a just-completed self-update,
|
|
37
|
-
// or when tests need deterministic offline behavior. Also lets preview
|
|
38
|
-
// users pin to a specific version without the self-update dance on every
|
|
39
|
-
// `indusk update` call.
|
|
40
|
-
const skipSelfUpdate = process.env.INDUSK_SKIP_SELF_UPDATE === "1";
|
|
41
|
-
if (skipSelfUpdate) {
|
|
42
|
-
console.info(` current: v${currentVersion} (self-update skipped)`);
|
|
43
|
-
}
|
|
44
|
-
try {
|
|
45
|
-
if (skipSelfUpdate)
|
|
46
|
-
throw new Error("skip");
|
|
47
|
-
const latestVersion = run("npm view @infinitedusky/indusk-mcp version");
|
|
48
|
-
if (latestVersion !== currentVersion) {
|
|
49
|
-
console.info(` update available: ${currentVersion} → ${latestVersion}`);
|
|
50
|
-
const hasGlobal = run("which indusk").length > 0;
|
|
51
|
-
if (hasGlobal) {
|
|
52
|
-
console.info(" updating global install...");
|
|
53
|
-
try {
|
|
54
|
-
run(`npm i -g @infinitedusky/indusk-mcp@${latestVersion}`, { timeout: 60000 });
|
|
55
|
-
console.info(` global: updated to ${latestVersion}`);
|
|
56
|
-
didUpgrade = true;
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
console.error(` global: FAILED — ${err instanceof Error ? err.message : err}`);
|
|
60
|
-
console.error(" run manually: npm i -g @infinitedusky/indusk-mcp@latest");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// Clear npx cache
|
|
64
|
-
try {
|
|
65
|
-
run("rm -rf ~/.npm/_npx/*");
|
|
66
|
-
console.info(" npx cache: cleared");
|
|
67
|
-
}
|
|
68
|
-
catch {
|
|
69
|
-
// ignore
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
console.info(` current: v${currentVersion}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
console.info(` could not check npm registry — continuing with v${currentVersion}`);
|
|
78
|
-
}
|
|
79
|
-
// If we upgraded, re-run update from the new version
|
|
80
|
-
if (didUpgrade) {
|
|
81
|
-
console.info("\n Re-running update from new version...\n");
|
|
82
|
-
try {
|
|
83
|
-
execSync("indusk update", {
|
|
84
|
-
cwd: projectRoot,
|
|
85
|
-
timeout: 120000,
|
|
86
|
-
stdio: "inherit",
|
|
87
|
-
env: { ...process.env, INDUSK_SKIP_SELF_UPDATE: "1" },
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
console.info(" re-run failed — run `indusk update` again manually");
|
|
92
|
-
}
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
41
|
+
console.info(` current: v${currentVersion}`);
|
|
95
42
|
// 2. Sync skills
|
|
96
43
|
console.info("\n[Skills]\n");
|
|
97
44
|
const skillsSource = join(packageRoot, "skills");
|
|
@@ -554,7 +501,19 @@ export async function update(projectRoot) {
|
|
|
554
501
|
}
|
|
555
502
|
}
|
|
556
503
|
console.info("\nDone.");
|
|
557
|
-
|
|
558
|
-
|
|
504
|
+
// Non-blocking version notice. Uses the 6h-cached lookup so we don't
|
|
505
|
+
// hit npm on every invocation. Silently no-ops when offline, when the
|
|
506
|
+
// cache is empty and the network fails, or when INDUSK_SKIP_UPDATE_CHECK=1.
|
|
507
|
+
// This is the ONLY place `indusk update` touches the npm registry — and
|
|
508
|
+
// it never installs anything. See `bin/commands/upgrade.ts` for the
|
|
509
|
+
// install path.
|
|
510
|
+
try {
|
|
511
|
+
const check = await checkLatestVersion();
|
|
512
|
+
if (hasNewerVersion(currentVersion, check.latestVersion)) {
|
|
513
|
+
console.info(`\nv${check.latestVersion} is available (current: v${currentVersion}). Run \`indusk upgrade\`.`);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
catch {
|
|
517
|
+
// Best-effort — never let the notice break the update.
|
|
559
518
|
}
|
|
560
519
|
}
|
|
@@ -1 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `indusk upgrade` — install a newer version of the indusk-mcp global CLI.
|
|
3
|
+
*
|
|
4
|
+
* Split out from `indusk update` (which used to do both project-state
|
|
5
|
+
* syncing AND CLI self-install in one breath, with a recursive
|
|
6
|
+
* re-invocation that could silently loop forever — see issue Sandy hit
|
|
7
|
+
* 2026-05-15 where `npm i -g` installed to homebrew's prefix while the
|
|
8
|
+
* on-PATH `indusk` lived under pnpm and never moved).
|
|
9
|
+
*
|
|
10
|
+
* This command:
|
|
11
|
+
* 1. Reads the current globally-resolved binary's version via `indusk
|
|
12
|
+
* --version`, not the running process's package.json (which can be a
|
|
13
|
+
* dev-from-source workspace copy).
|
|
14
|
+
* 2. Fetches the latest npm version, bypassing any cached value (explicit
|
|
15
|
+
* upgrade is always a fresh check).
|
|
16
|
+
* 3. Detects the package manager that owns the on-PATH binary by
|
|
17
|
+
* inspecting its path string.
|
|
18
|
+
* 4. Runs the manager-appropriate install command.
|
|
19
|
+
* 5. Verifies post-install by re-spawning `indusk --version` and
|
|
20
|
+
* comparing to the expected latest. If the version didn't move,
|
|
21
|
+
* prints a diagnostic with the PATH binary location, the install
|
|
22
|
+
* destination, and the manual recovery command. No recursive
|
|
23
|
+
* re-invocation, ever.
|
|
24
|
+
*
|
|
25
|
+
* Exits non-zero on any failure (network, install, verify) so wrappers
|
|
26
|
+
* and CI can act on it.
|
|
27
|
+
*/
|
|
28
|
+
export interface UpgradeOptions {
|
|
29
|
+
/** Skip the npm version check and force an install of `latest`. */
|
|
30
|
+
force?: boolean;
|
|
31
|
+
}
|
|
32
|
+
export declare function upgrade(opts?: UpgradeOptions): Promise<void>;
|
|
@@ -1,78 +1,161 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* `indusk upgrade` — install a newer version of the indusk-mcp global CLI.
|
|
3
|
+
*
|
|
4
|
+
* Split out from `indusk update` (which used to do both project-state
|
|
5
|
+
* syncing AND CLI self-install in one breath, with a recursive
|
|
6
|
+
* re-invocation that could silently loop forever — see issue Sandy hit
|
|
7
|
+
* 2026-05-15 where `npm i -g` installed to homebrew's prefix while the
|
|
8
|
+
* on-PATH `indusk` lived under pnpm and never moved).
|
|
9
|
+
*
|
|
10
|
+
* This command:
|
|
11
|
+
* 1. Reads the current globally-resolved binary's version via `indusk
|
|
12
|
+
* --version`, not the running process's package.json (which can be a
|
|
13
|
+
* dev-from-source workspace copy).
|
|
14
|
+
* 2. Fetches the latest npm version, bypassing any cached value (explicit
|
|
15
|
+
* upgrade is always a fresh check).
|
|
16
|
+
* 3. Detects the package manager that owns the on-PATH binary by
|
|
17
|
+
* inspecting its path string.
|
|
18
|
+
* 4. Runs the manager-appropriate install command.
|
|
19
|
+
* 5. Verifies post-install by re-spawning `indusk --version` and
|
|
20
|
+
* comparing to the expected latest. If the version didn't move,
|
|
21
|
+
* prints a diagnostic with the PATH binary location, the install
|
|
22
|
+
* destination, and the manual recovery command. No recursive
|
|
23
|
+
* re-invocation, ever.
|
|
24
|
+
*
|
|
25
|
+
* Exits non-zero on any failure (network, install, verify) so wrappers
|
|
26
|
+
* and CI can act on it.
|
|
27
|
+
*/
|
|
28
|
+
import { execFileSync, execSync, spawnSync } from "node:child_process";
|
|
29
|
+
import { detectGlobalManagerFromPath, installCommandFor, } from "../../lib/global-install-manager.js";
|
|
30
|
+
import { checkLatestVersion } from "../../lib/version-check.js";
|
|
31
|
+
function whichIndusk() {
|
|
9
32
|
try {
|
|
10
|
-
|
|
33
|
+
const out = execFileSync("which", ["indusk"], {
|
|
11
34
|
encoding: "utf-8",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
35
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
36
|
+
})
|
|
37
|
+
.trim()
|
|
38
|
+
.split("\n")[0]
|
|
39
|
+
?.trim();
|
|
40
|
+
return out && out.length > 0 ? out : null;
|
|
15
41
|
}
|
|
16
|
-
catch
|
|
17
|
-
|
|
18
|
-
throw new Error(execErr.stderr?.trim() || execErr.message || "Command failed");
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
19
44
|
}
|
|
20
45
|
}
|
|
21
|
-
function
|
|
22
|
-
|
|
46
|
+
function readBinaryVersion() {
|
|
47
|
+
try {
|
|
48
|
+
const out = execFileSync("indusk", ["--version"], {
|
|
49
|
+
encoding: "utf-8",
|
|
50
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
51
|
+
timeout: 10_000,
|
|
52
|
+
}).trim();
|
|
53
|
+
// `commander` prints just the version string, possibly with a leading "v"
|
|
54
|
+
return out.replace(/^v/, "");
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
23
59
|
}
|
|
24
|
-
|
|
25
|
-
const currentVersion = getLocalVersion();
|
|
26
|
-
// 1. Check what's latest on npm
|
|
27
|
-
let latestVersion;
|
|
60
|
+
function npmGlobalRoot() {
|
|
28
61
|
try {
|
|
29
|
-
|
|
62
|
+
return execFileSync("npm", ["root", "-g"], {
|
|
63
|
+
encoding: "utf-8",
|
|
64
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
65
|
+
timeout: 10_000,
|
|
66
|
+
}).trim();
|
|
30
67
|
}
|
|
31
68
|
catch {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function runInstall(command, timeoutMs = 120_000) {
|
|
73
|
+
try {
|
|
74
|
+
execSync(command, {
|
|
75
|
+
stdio: "inherit",
|
|
76
|
+
timeout: timeoutMs,
|
|
77
|
+
});
|
|
78
|
+
return { ok: true };
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
82
|
+
return { ok: false, error: message };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export async function upgrade(opts = {}) {
|
|
86
|
+
const binaryPath = whichIndusk();
|
|
87
|
+
if (!binaryPath) {
|
|
88
|
+
console.error("No global `indusk` binary on PATH. First-time install: choose one — `npm i -g @infinitedusky/indusk-mcp`, `pnpm add -g @infinitedusky/indusk-mcp`, or `bun install -g @infinitedusky/indusk-mcp`.");
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
const currentVersion = readBinaryVersion();
|
|
92
|
+
if (currentVersion === null) {
|
|
93
|
+
console.error(`Found \`indusk\` at ${binaryPath} but \`indusk --version\` failed. The install is broken; reinstall manually.`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
const check = await checkLatestVersion({ bypassCache: true });
|
|
97
|
+
const targetVersion = opts.force ? "latest" : check.latestVersion;
|
|
98
|
+
if (!opts.force) {
|
|
99
|
+
if (targetVersion === null) {
|
|
100
|
+
console.error("Could not reach the npm registry. Try again, or run `indusk upgrade --force` to install latest.");
|
|
101
|
+
process.exit(1);
|
|
48
102
|
}
|
|
49
|
-
|
|
50
|
-
console.
|
|
51
|
-
console.error(" run manually: npm i -g @infinitedusky/indusk-mcp@latest");
|
|
52
|
-
process.exitCode = 1;
|
|
103
|
+
if (targetVersion === currentVersion) {
|
|
104
|
+
console.info(`indusk-mcp is already at v${currentVersion}.`);
|
|
53
105
|
return;
|
|
54
106
|
}
|
|
55
107
|
}
|
|
56
|
-
|
|
57
|
-
|
|
108
|
+
const manager = detectGlobalManagerFromPath(binaryPath);
|
|
109
|
+
if (manager === null) {
|
|
110
|
+
// detectGlobalManagerFromPath returns null only for empty input,
|
|
111
|
+
// which we've already guarded against. This branch is structural
|
|
112
|
+
// belt-and-suspenders; if we land here, surface the path so the
|
|
113
|
+
// user can self-diagnose.
|
|
114
|
+
console.error(`Unrecognized install location for \`indusk\` (${binaryPath}). Reinstall manually with your package manager.`);
|
|
115
|
+
process.exit(1);
|
|
58
116
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
117
|
+
const versionForCommand = opts.force ? "latest" : targetVersion;
|
|
118
|
+
const installCommand = installCommandFor(manager, versionForCommand);
|
|
119
|
+
console.info(`Upgrading indusk-mcp via ${manager}: ${installCommand}`);
|
|
120
|
+
const install = runInstall(installCommand);
|
|
121
|
+
if (!install.ok) {
|
|
122
|
+
console.error(`\nInstall failed: ${install.error}`);
|
|
123
|
+
console.error(`Run manually: ${installCommand}`);
|
|
124
|
+
process.exit(1);
|
|
63
125
|
}
|
|
64
|
-
|
|
65
|
-
|
|
126
|
+
const afterVersion = readBinaryVersion();
|
|
127
|
+
if (afterVersion === null) {
|
|
128
|
+
console.error(`\nInstall reported success, but \`indusk --version\` failed after the upgrade. Inspect ${binaryPath}.`);
|
|
129
|
+
process.exit(1);
|
|
66
130
|
}
|
|
67
|
-
|
|
68
|
-
|
|
131
|
+
const expected = opts.force ? null : targetVersion;
|
|
132
|
+
const versionChanged = afterVersion !== currentVersion;
|
|
133
|
+
const matchesExpected = expected === null ? true : afterVersion === expected;
|
|
134
|
+
if (!versionChanged || !matchesExpected) {
|
|
135
|
+
const npmRoot = npmGlobalRoot();
|
|
136
|
+
console.error("\n┃ Upgrade verification FAILED.");
|
|
137
|
+
console.error(`┃ on-PATH binary: ${binaryPath}`);
|
|
138
|
+
console.error(`┃ version before: ${currentVersion}`);
|
|
139
|
+
console.error(`┃ version after: ${afterVersion}`);
|
|
140
|
+
if (expected !== null)
|
|
141
|
+
console.error(`┃ expected: ${expected}`);
|
|
142
|
+
console.error(`┃ package manager: ${manager}`);
|
|
143
|
+
if (npmRoot)
|
|
144
|
+
console.error(`┃ npm -g prefix: ${npmRoot}`);
|
|
145
|
+
console.error("┃");
|
|
146
|
+
console.error("┃ The install command exited 0 but the resolved binary did not change.");
|
|
147
|
+
console.error("┃ Likely cause: the install command targeted a different prefix than the one on PATH.");
|
|
148
|
+
console.error("┃ Verify with: `which indusk` and your package manager's global-list command.");
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
console.info(`\nindusk-mcp upgraded: v${currentVersion} → v${afterVersion}.`);
|
|
152
|
+
console.info("Restart Claude Code to pick up the new MCP server.");
|
|
153
|
+
// Best-effort: clear the npx cache so older cached invocations don't
|
|
154
|
+
// keep firing the previous version. Errors are non-fatal.
|
|
69
155
|
try {
|
|
70
|
-
|
|
71
|
-
await update(projectRoot);
|
|
156
|
+
spawnSync("sh", ["-c", "rm -rf ~/.npm/_npx/*"], { stdio: "ignore", timeout: 5_000 });
|
|
72
157
|
}
|
|
73
158
|
catch {
|
|
74
|
-
|
|
159
|
+
// ignore
|
|
75
160
|
}
|
|
76
|
-
console.info(`\nDone! Updated to v${latestVersion}.`);
|
|
77
|
-
console.info("Restart Claude Code to pick up the new MCP server.");
|
|
78
161
|
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect which global-install package manager owns the on-PATH `indusk`
|
|
3
|
+
* binary, and build the right install command for it.
|
|
4
|
+
*
|
|
5
|
+
* The self-update flow in `commands/update.ts` historically hardcoded
|
|
6
|
+
* `npm i -g`, which is wrong whenever the user installed via pnpm or bun:
|
|
7
|
+
* `npm i -g` writes to npm's prefix (typically homebrew or nvm), while
|
|
8
|
+
* the actual `indusk` on PATH lives under pnpm's or bun's prefix. The
|
|
9
|
+
* install reports success but the resolved binary's version never changes,
|
|
10
|
+
* so every subsequent `indusk update` re-detects "update available" and
|
|
11
|
+
* loops forever from the user's perspective.
|
|
12
|
+
*
|
|
13
|
+
* Detection is path-string based — robust to symlinks (we look at the
|
|
14
|
+
* binary path that `which` returned, not its realpath) and to the fact
|
|
15
|
+
* that pnpm/bun shims aren't symlinks at all.
|
|
16
|
+
*/
|
|
17
|
+
export type GlobalInstallManager = "pnpm" | "bun" | "npm";
|
|
18
|
+
/**
|
|
19
|
+
* Map an on-PATH `indusk` binary path to the package manager that installed
|
|
20
|
+
* it. Returns null for unknown locations or empty input.
|
|
21
|
+
*
|
|
22
|
+
* pnpm: `~/Library/pnpm/indusk` (macOS), `~/.local/share/pnpm/indusk`
|
|
23
|
+
* (Linux), `%LOCALAPPDATA%\pnpm\indusk` (Windows). Detection key: the
|
|
24
|
+
* path contains `/pnpm/` (or `\pnpm\`) as a segment.
|
|
25
|
+
* bun: `~/.bun/bin/indusk`. Detection key: contains `/.bun/`.
|
|
26
|
+
* npm: anything under a `node_modules/.bin` ancestor, or homebrew's
|
|
27
|
+
* `/opt/homebrew/bin`, or nvm's per-version `bin/` dirs. Default for
|
|
28
|
+
* everything that didn't match pnpm or bun.
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectGlobalManagerFromPath(binaryPath: string | null | undefined): GlobalInstallManager | null;
|
|
31
|
+
/**
|
|
32
|
+
* Build the global-install command for a given manager + version. Returned
|
|
33
|
+
* as a single shell-safe string suitable for `execSync` (version is pinned
|
|
34
|
+
* with `@${version}`; the package name is a fixed literal).
|
|
35
|
+
*/
|
|
36
|
+
export declare function installCommandFor(manager: GlobalInstallManager, version: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Human-readable name for error/help messages. Same string the user would
|
|
39
|
+
* type to recover manually.
|
|
40
|
+
*/
|
|
41
|
+
export declare function managerLabel(manager: GlobalInstallManager): string;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map an on-PATH `indusk` binary path to the package manager that installed
|
|
3
|
+
* it. Returns null for unknown locations or empty input.
|
|
4
|
+
*
|
|
5
|
+
* pnpm: `~/Library/pnpm/indusk` (macOS), `~/.local/share/pnpm/indusk`
|
|
6
|
+
* (Linux), `%LOCALAPPDATA%\pnpm\indusk` (Windows). Detection key: the
|
|
7
|
+
* path contains `/pnpm/` (or `\pnpm\`) as a segment.
|
|
8
|
+
* bun: `~/.bun/bin/indusk`. Detection key: contains `/.bun/`.
|
|
9
|
+
* npm: anything under a `node_modules/.bin` ancestor, or homebrew's
|
|
10
|
+
* `/opt/homebrew/bin`, or nvm's per-version `bin/` dirs. Default for
|
|
11
|
+
* everything that didn't match pnpm or bun.
|
|
12
|
+
*/
|
|
13
|
+
export function detectGlobalManagerFromPath(binaryPath) {
|
|
14
|
+
if (!binaryPath)
|
|
15
|
+
return null;
|
|
16
|
+
const normalized = binaryPath.replace(/\\/g, "/");
|
|
17
|
+
if (/\/pnpm\//.test(normalized))
|
|
18
|
+
return "pnpm";
|
|
19
|
+
if (/\/\.bun\//.test(normalized))
|
|
20
|
+
return "bun";
|
|
21
|
+
return "npm";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Build the global-install command for a given manager + version. Returned
|
|
25
|
+
* as a single shell-safe string suitable for `execSync` (version is pinned
|
|
26
|
+
* with `@${version}`; the package name is a fixed literal).
|
|
27
|
+
*/
|
|
28
|
+
export function installCommandFor(manager, version) {
|
|
29
|
+
const pkg = `@infinitedusky/indusk-mcp@${version}`;
|
|
30
|
+
switch (manager) {
|
|
31
|
+
case "pnpm":
|
|
32
|
+
return `pnpm add -g ${pkg}`;
|
|
33
|
+
case "bun":
|
|
34
|
+
return `bun install -g ${pkg}`;
|
|
35
|
+
case "npm":
|
|
36
|
+
return `npm i -g ${pkg}`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Human-readable name for error/help messages. Same string the user would
|
|
41
|
+
* type to recover manually.
|
|
42
|
+
*/
|
|
43
|
+
export function managerLabel(manager) {
|
|
44
|
+
return manager;
|
|
45
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cached version-availability check against the public npm registry.
|
|
3
|
+
*
|
|
4
|
+
* Rationale: `indusk update` used to shell out to `npm view` and trigger an
|
|
5
|
+
* in-process self-install on every invocation, which (a) loops infinitely
|
|
6
|
+
* when the install lands somewhere other than the on-PATH binary, and
|
|
7
|
+
* (b) couples project-state work to machine-state work. The new model is
|
|
8
|
+
* notify-only: a quiet TTL-cached fetch surfaces a one-line "upgrade
|
|
9
|
+
* available" notice, and the user explicitly runs `indusk upgrade` to
|
|
10
|
+
* install. See `bin/commands/upgrade.ts` for the install side.
|
|
11
|
+
*
|
|
12
|
+
* Network failure is silent (returns the cached value if present, else
|
|
13
|
+
* null). Cache lives at `${INDUSK_HOME}/version-check.json` with a 6h TTL,
|
|
14
|
+
* tunable per call. Set `INDUSK_SKIP_UPDATE_CHECK=1` to suppress.
|
|
15
|
+
*/
|
|
16
|
+
export interface VersionCheckResult {
|
|
17
|
+
/** Latest version per npm, or null when unknown (no cache and network failed). */
|
|
18
|
+
latestVersion: string | null;
|
|
19
|
+
/** Whether the value came from the on-disk cache (true) or a fresh fetch (false). */
|
|
20
|
+
fromCache: boolean;
|
|
21
|
+
/** When the value was originally fetched. ISO-8601. */
|
|
22
|
+
checkedAt: string | null;
|
|
23
|
+
}
|
|
24
|
+
export interface VersionCheckOptions {
|
|
25
|
+
/** Override the cache path (testing). Default: `${INDUSK_HOME}/version-check.json`. */
|
|
26
|
+
cachePath?: string;
|
|
27
|
+
/** TTL in ms. Default: 6h. */
|
|
28
|
+
ttlMs?: number;
|
|
29
|
+
/** Fetch timeout in ms. Default: 5s. */
|
|
30
|
+
timeoutMs?: number;
|
|
31
|
+
/** Inject a fetch implementation for tests. Default: global fetch. */
|
|
32
|
+
fetchImpl?: typeof fetch;
|
|
33
|
+
/** Bypass the cache and force a fresh network call. */
|
|
34
|
+
bypassCache?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve the latest version. Read-through cache: if the on-disk cache is
|
|
38
|
+
* fresh, return it without touching the network; otherwise fetch, persist,
|
|
39
|
+
* and return. On network failure with no cache, returns `latestVersion:
|
|
40
|
+
* null`. Honors `INDUSK_SKIP_UPDATE_CHECK=1` (returns null without any
|
|
41
|
+
* disk or network access).
|
|
42
|
+
*/
|
|
43
|
+
export declare function checkLatestVersion(options?: VersionCheckOptions): Promise<VersionCheckResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Pure comparator: returns true when `latest` is a different, presumably
|
|
46
|
+
* newer version than `current`. Intentionally string-equality — pre-1.0
|
|
47
|
+
* semver gymnastics aren't worth it for the notify path; if npm publishes
|
|
48
|
+
* a different string than what's installed, we surface it. The user's
|
|
49
|
+
* `upgrade` command does the actual decision.
|
|
50
|
+
*/
|
|
51
|
+
export declare function hasNewerVersion(current: string, latest: string | null): boolean;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cached version-availability check against the public npm registry.
|
|
3
|
+
*
|
|
4
|
+
* Rationale: `indusk update` used to shell out to `npm view` and trigger an
|
|
5
|
+
* in-process self-install on every invocation, which (a) loops infinitely
|
|
6
|
+
* when the install lands somewhere other than the on-PATH binary, and
|
|
7
|
+
* (b) couples project-state work to machine-state work. The new model is
|
|
8
|
+
* notify-only: a quiet TTL-cached fetch surfaces a one-line "upgrade
|
|
9
|
+
* available" notice, and the user explicitly runs `indusk upgrade` to
|
|
10
|
+
* install. See `bin/commands/upgrade.ts` for the install side.
|
|
11
|
+
*
|
|
12
|
+
* Network failure is silent (returns the cached value if present, else
|
|
13
|
+
* null). Cache lives at `${INDUSK_HOME}/version-check.json` with a 6h TTL,
|
|
14
|
+
* tunable per call. Set `INDUSK_SKIP_UPDATE_CHECK=1` to suppress.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { homedir } from "node:os";
|
|
18
|
+
import { dirname, join } from "node:path";
|
|
19
|
+
const PKG_NAME = "@infinitedusky/indusk-mcp";
|
|
20
|
+
const DEFAULT_TTL_MS = 6 * 60 * 60 * 1000; // 6h
|
|
21
|
+
const DEFAULT_TIMEOUT_MS = 5_000;
|
|
22
|
+
function induskHome() {
|
|
23
|
+
return process.env.INDUSK_HOME ?? join(homedir(), ".indusk");
|
|
24
|
+
}
|
|
25
|
+
function defaultCachePath() {
|
|
26
|
+
return join(induskHome(), "version-check.json");
|
|
27
|
+
}
|
|
28
|
+
function readCache(path) {
|
|
29
|
+
if (!existsSync(path))
|
|
30
|
+
return null;
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
33
|
+
if (typeof parsed.checkedAt !== "string" || typeof parsed.latestVersion !== "string") {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return { checkedAt: parsed.checkedAt, latestVersion: parsed.latestVersion };
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function writeCache(path, cache) {
|
|
43
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
44
|
+
writeFileSync(path, `${JSON.stringify(cache, null, 2)}\n`);
|
|
45
|
+
}
|
|
46
|
+
function isFresh(cache, ttlMs, now = Date.now()) {
|
|
47
|
+
const checkedAtMs = Date.parse(cache.checkedAt);
|
|
48
|
+
if (!Number.isFinite(checkedAtMs))
|
|
49
|
+
return false;
|
|
50
|
+
return now - checkedAtMs < ttlMs;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the latest published version from npm. 5s timeout, JSON-only,
|
|
54
|
+
* no auth. Returns null on any error — callers fall back to cache.
|
|
55
|
+
*/
|
|
56
|
+
async function fetchLatestFromNpm(timeoutMs, fetchImpl) {
|
|
57
|
+
const url = `https://registry.npmjs.org/${encodeURIComponent(PKG_NAME)}/latest`;
|
|
58
|
+
const controller = new AbortController();
|
|
59
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
60
|
+
try {
|
|
61
|
+
const res = await fetchImpl(url, {
|
|
62
|
+
headers: { Accept: "application/json" },
|
|
63
|
+
signal: controller.signal,
|
|
64
|
+
});
|
|
65
|
+
if (!res.ok)
|
|
66
|
+
return null;
|
|
67
|
+
const body = (await res.json());
|
|
68
|
+
return typeof body.version === "string" ? body.version : null;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
clearTimeout(timer);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Resolve the latest version. Read-through cache: if the on-disk cache is
|
|
79
|
+
* fresh, return it without touching the network; otherwise fetch, persist,
|
|
80
|
+
* and return. On network failure with no cache, returns `latestVersion:
|
|
81
|
+
* null`. Honors `INDUSK_SKIP_UPDATE_CHECK=1` (returns null without any
|
|
82
|
+
* disk or network access).
|
|
83
|
+
*/
|
|
84
|
+
export async function checkLatestVersion(options = {}) {
|
|
85
|
+
// INDUSK_SKIP_UPDATE_CHECK is the new name; INDUSK_SKIP_SELF_UPDATE is
|
|
86
|
+
// the legacy alias used by ~7 existing tests (set to suppress network
|
|
87
|
+
// access during `indusk update` runs against a tmp project). Honor both
|
|
88
|
+
// so test scaffolding doesn't need to change.
|
|
89
|
+
if (process.env.INDUSK_SKIP_UPDATE_CHECK === "1" || process.env.INDUSK_SKIP_SELF_UPDATE === "1") {
|
|
90
|
+
return { latestVersion: null, fromCache: false, checkedAt: null };
|
|
91
|
+
}
|
|
92
|
+
const cachePath = options.cachePath ?? defaultCachePath();
|
|
93
|
+
const ttlMs = options.ttlMs ?? DEFAULT_TTL_MS;
|
|
94
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
95
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
96
|
+
const bypass = options.bypassCache === true;
|
|
97
|
+
const cached = readCache(cachePath);
|
|
98
|
+
if (!bypass && cached && isFresh(cached, ttlMs)) {
|
|
99
|
+
return {
|
|
100
|
+
latestVersion: cached.latestVersion,
|
|
101
|
+
fromCache: true,
|
|
102
|
+
checkedAt: cached.checkedAt,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const fresh = await fetchLatestFromNpm(timeoutMs, fetchImpl);
|
|
106
|
+
if (fresh === null) {
|
|
107
|
+
// Network failed — fall back to whatever's cached (even if stale),
|
|
108
|
+
// so the notice is "best known" rather than absent.
|
|
109
|
+
if (cached) {
|
|
110
|
+
return {
|
|
111
|
+
latestVersion: cached.latestVersion,
|
|
112
|
+
fromCache: true,
|
|
113
|
+
checkedAt: cached.checkedAt,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
return { latestVersion: null, fromCache: false, checkedAt: null };
|
|
117
|
+
}
|
|
118
|
+
const checkedAt = new Date().toISOString();
|
|
119
|
+
try {
|
|
120
|
+
writeCache(cachePath, { checkedAt, latestVersion: fresh });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Cache write failed (permission, full disk) — return the fresh
|
|
124
|
+
// value anyway; next invocation just won't have the cache hit.
|
|
125
|
+
}
|
|
126
|
+
return { latestVersion: fresh, fromCache: false, checkedAt };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Pure comparator: returns true when `latest` is a different, presumably
|
|
130
|
+
* newer version than `current`. Intentionally string-equality — pre-1.0
|
|
131
|
+
* semver gymnastics aren't worth it for the notify path; if npm publishes
|
|
132
|
+
* a different string than what's installed, we surface it. The user's
|
|
133
|
+
* `upgrade` command does the actual decision.
|
|
134
|
+
*/
|
|
135
|
+
export function hasNewerVersion(current, latest) {
|
|
136
|
+
return latest !== null && latest.length > 0 && latest !== current;
|
|
137
|
+
}
|
package/package.json
CHANGED
/package/admin/.next/static/{mwkqCCI15TP59qrR_B361 → 3rik_r3yzK3Fjeh2XwzNR}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|