@infinitedusky/indusk-mcp 1.40.0 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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/commands/context.d.ts +5 -3
- package/dist/bin/commands/context.js +20 -7
- package/dist/bin/commands/extensions.js +33 -10
- package/dist/bin/commands/init.js +42 -9
- package/dist/bin/commands/update.js +26 -2
- package/dist/lib/context-pointers.d.ts +20 -0
- package/dist/lib/context-pointers.js +37 -1
- package/dist/lib/extension-loader.d.ts +19 -0
- package/dist/lib/extension-loader.js +48 -6
- package/dist/lib/skill-migration.d.ts +50 -0
- package/dist/lib/skill-migration.js +64 -0
- package/extensions/otel/manifest.json +5 -1
- package/package.json +2 -2
- package/skills/catchup.md +1 -1
- package/skills/{context.md → claude-md.md} +10 -8
- package/skills/highlight.md +1 -1
- package/skills/planner.md +1 -1
- package/skills/work.md +4 -4
- /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_buildManifest.js +0 -0
- /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
WxUGu7NCQs8pb0nSvDzv6
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
|
|
11
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
|
|
12
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/15r3deq0oc~d..js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
|
|
9
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
|
|
10
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..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/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..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/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.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\":\"WxUGu7NCQs8pb0nSvDzv6\"}\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/0yelgl0o38y_u.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/0yelgl0o38y_u.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
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/0yelgl0o38y_u.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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
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/0yelgl0o38y_u.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0yelgl0o38y_u.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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
@@ -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":"WxUGu7NCQs8pb0nSvDzv6"}
|
|
@@ -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/WxUGu7NCQs8pb0nSvDzv6/_buildManifest.js",
|
|
11
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_ssgManifest.js",
|
|
12
|
+
"static/WxUGu7NCQs8pb0nSvDzv6/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/15r3deq0oc~d..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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..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/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/02p8lah64~lvh.js" async=""></script><script src="/_next/static/chunks/0gomaooulfzoq.js" async=""></script><script src="/_next/static/chunks/turbopack-130jszne6su0h.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0yelgl0o38y_u.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/15r3deq0oc~d..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/0yelgl0o38y_u.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0yelgl0o38y_u.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\":\"WxUGu7NCQs8pb0nSvDzv6\"}\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/0yelgl0o38y_u.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":167,"timestamp":282937867241,"id":4,"parentId":1,"tags":{},"startTime":1788129667865,"traceId":"9de790abe2b84af0"},{"name":"load-custom-routes","duration":281,"timestamp":282937867478,"id":5,"parentId":1,"tags":{},"startTime":1788129667865,"traceId":"9de790abe2b84af0"},{"name":"create-dist-dir","duration":105,"timestamp":282937867778,"id":6,"parentId":1,"tags":{},"startTime":1788129667866,"traceId":"9de790abe2b84af0"},{"name":"clean","duration":42907,"timestamp":282937868591,"id":7,"parentId":1,"tags":{},"startTime":1788129667867,"traceId":"9de790abe2b84af0"},{"name":"discover-routes","duration":4402,"timestamp":282937919796,"id":8,"parentId":1,"tags":{},"startTime":1788129667918,"traceId":"9de790abe2b84af0"},{"name":"create-root-mapping","duration":40,"timestamp":282937924242,"id":9,"parentId":1,"tags":{},"startTime":1788129667922,"traceId":"9de790abe2b84af0"},{"name":"generate-route-types","duration":10481,"timestamp":282937924949,"id":10,"parentId":1,"tags":{},"startTime":1788129667923,"traceId":"9de790abe2b84af0"},{"name":"public-dir-conflict-check","duration":55,"timestamp":282937935480,"id":11,"parentId":1,"tags":{},"startTime":1788129667933,"traceId":"9de790abe2b84af0"},{"name":"generate-routes-manifest","duration":1324,"timestamp":282937935587,"id":12,"parentId":1,"tags":{},"startTime":1788129667934,"traceId":"9de790abe2b84af0"},{"name":"run-turbopack","duration":7604954,"timestamp":282937939176,"id":14,"parentId":1,"tags":{},"startTime":1788129667937,"traceId":"9de790abe2b84af0"},{"name":"turbopack-build-events","duration":45,"timestamp":282938119106,"id":15,"parentId":1,"tags":{},"startTime":1788129668117,"traceId":"9de790abe2b84af0"},{"name":"run-typescript","duration":2676858,"timestamp":282945629856,"id":16,"parentId":1,"tags":{},"startTime":1788129675628,"traceId":"9de790abe2b84af0"},{"name":"generate-required-server-files","duration":1890,"timestamp":282948308099,"id":18,"parentId":1,"tags":{},"startTime":1788129678306,"traceId":"9de790abe2b84af0"},{"name":"check-static-error-page","duration":2474,"timestamp":282948323040,"id":20,"parentId":19,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":269305,"timestamp":282948337483,"id":30,"parentId":22,"tags":{},"startTime":1788129678335,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":282448,"timestamp":282948324421,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1788129678322,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":308187,"timestamp":282948337571,"id":31,"parentId":23,"tags":{},"startTime":1788129678335,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":321078,"timestamp":282948324715,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":305190,"timestamp":282948347716,"id":33,"parentId":24,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":327668,"timestamp":282948325272,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":310498,"timestamp":282948347624,"id":32,"parentId":28,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":332678,"timestamp":282948325473,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":324615,"timestamp":282948336288,"id":29,"parentId":21,"tags":{},"startTime":1788129678334,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":337478,"timestamp":282948323527,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":331868,"timestamp":282948347802,"id":35,"parentId":26,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":354323,"timestamp":282948325387,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":333547,"timestamp":282948347746,"id":34,"parentId":25,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":355981,"timestamp":282948325338,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"is-page-static","duration":338616,"timestamp":282948347846,"id":36,"parentId":27,"tags":{},"startTime":1788129678346,"traceId":"9de790abe2b84af0"},{"name":"check-page","duration":361066,"timestamp":282948325428,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1788129678323,"traceId":"9de790abe2b84af0"},{"name":"static-check","duration":363834,"timestamp":282948322675,"id":19,"parentId":1,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"write-routes-manifest","duration":796,"timestamp":282948689342,"id":38,"parentId":1,"tags":{},"startTime":1788129678687,"traceId":"9de790abe2b84af0"},{"name":"load-dotenv","duration":23,"timestamp":282948697125,"id":41,"parentId":40,"tags":{},"startTime":1788129678695,"traceId":"9de790abe2b84af0"},{"name":"run-export-path-map","duration":208,"timestamp":282948698313,"id":42,"parentId":40,"tags":{},"startTime":1788129678696,"traceId":"9de790abe2b84af0"},{"name":"next-export","duration":202136,"timestamp":282948696591,"id":40,"parentId":1,"tags":{},"startTime":1788129678695,"traceId":"9de790abe2b84af0"},{"name":"move-exported-app-global-error-","duration":307,"timestamp":282948899334,"id":43,"parentId":39,"tags":{},"startTime":1788129678897,"traceId":"9de790abe2b84af0"},{"name":"static-generation","duration":208367,"timestamp":282948692004,"id":39,"parentId":1,"tags":{},"startTime":1788129678690,"traceId":"9de790abe2b84af0"},{"name":"write-routes-manifest","duration":232,"timestamp":282948900460,"id":44,"parentId":1,"tags":{},"startTime":1788129678898,"traceId":"9de790abe2b84af0"},{"name":"print-tree-view","duration":2189,"timestamp":282948907652,"id":45,"parentId":1,"tags":{},"startTime":1788129678906,"traceId":"9de790abe2b84af0"},{"name":"write-route-bundle-stats","duration":5952,"timestamp":282948909854,"id":46,"parentId":1,"tags":{},"startTime":1788129678908,"traceId":"9de790abe2b84af0"},{"name":"telemetry-flush","duration":486376,"timestamp":282948915818,"id":47,"parentId":1,"tags":{},"startTime":1788129678914,"traceId":"9de790abe2b84af0"},{"name":"next-build","duration":11650394,"timestamp":282937751827,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1788129667750,"traceId":"9de790abe2b84af0"}]
|
package/admin/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":7604954,"timestamp":282937939176,"id":14,"parentId":1,"tags":{},"startTime":1788129667937,"traceId":"9de790abe2b84af0"},{"name":"turbopack-build-events","duration":45,"timestamp":282938119106,"id":15,"parentId":1,"tags":{},"startTime":1788129668117,"traceId":"9de790abe2b84af0"},{"name":"run-typescript","duration":2676858,"timestamp":282945629856,"id":16,"parentId":1,"tags":{},"startTime":1788129675628,"traceId":"9de790abe2b84af0"},{"name":"static-check","duration":363834,"timestamp":282948322675,"id":19,"parentId":1,"tags":{},"startTime":1788129678321,"traceId":"9de790abe2b84af0"},{"name":"static-generation","duration":208367,"timestamp":282948692004,"id":39,"parentId":1,"tags":{},"startTime":1788129678690,"traceId":"9de790abe2b84af0"},{"name":"telemetry-flush","duration":486376,"timestamp":282948915818,"id":47,"parentId":1,"tags":{},"startTime":1788129678914,"traceId":"9de790abe2b84af0"},{"name":"next-build","duration":11650394,"timestamp":282937751827,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1788129667750,"traceId":"9de790abe2b84af0"}]
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `indusk context check-pointers` — verify every path-shaped reference in the
|
|
3
|
-
* project CLAUDE.md resolves on disk
|
|
4
|
-
* are rule + pointer), a dead pointer
|
|
5
|
-
*
|
|
3
|
+
* project CLAUDE.md resolves on disk, and refuse hand-copied version claims.
|
|
4
|
+
* Under the 60 KB budget regime (entries are rule + pointer), a dead pointer
|
|
5
|
+
* is a lost rule body, and a literal `**Version**:` is a copy nothing in the
|
|
6
|
+
* release flow updates. Exit 1 on either so the check composes into
|
|
7
|
+
* verification pipelines.
|
|
6
8
|
*/
|
|
7
9
|
export declare function contextCheckPointers(projectRoot: string): void;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { checkClaudeMdPointers } from "../../lib/context-pointers.js";
|
|
2
2
|
/**
|
|
3
3
|
* `indusk context check-pointers` — verify every path-shaped reference in the
|
|
4
|
-
* project CLAUDE.md resolves on disk
|
|
5
|
-
* are rule + pointer), a dead pointer
|
|
6
|
-
*
|
|
4
|
+
* project CLAUDE.md resolves on disk, and refuse hand-copied version claims.
|
|
5
|
+
* Under the 60 KB budget regime (entries are rule + pointer), a dead pointer
|
|
6
|
+
* is a lost rule body, and a literal `**Version**:` is a copy nothing in the
|
|
7
|
+
* release flow updates. Exit 1 on either so the check composes into
|
|
8
|
+
* verification pipelines.
|
|
7
9
|
*/
|
|
8
10
|
export function contextCheckPointers(projectRoot) {
|
|
9
11
|
const report = checkClaudeMdPointers(projectRoot);
|
|
@@ -13,13 +15,24 @@ export function contextCheckPointers(projectRoot) {
|
|
|
13
15
|
return;
|
|
14
16
|
}
|
|
15
17
|
console.info(`${report.scanned.length} pointer(s) scanned`);
|
|
16
|
-
|
|
18
|
+
const failures = report.dead.length + report.versionClaims.length;
|
|
19
|
+
if (failures === 0) {
|
|
17
20
|
console.info("PASS — all pointers resolve");
|
|
18
21
|
return;
|
|
19
22
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
if (report.dead.length > 0) {
|
|
24
|
+
console.error(`FAIL — ${report.dead.length} dead pointer(s):`);
|
|
25
|
+
for (const p of report.dead) {
|
|
26
|
+
console.error(` - ${p}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
if (report.versionClaims.length > 0) {
|
|
30
|
+
console.error(`FAIL — ${report.versionClaims.length} hand-copied version claim(s):`);
|
|
31
|
+
for (const v of report.versionClaims) {
|
|
32
|
+
console.error(v.problem === "mismatch"
|
|
33
|
+
? ` - line ${v.line}: says ${v.claim}, package.json says ${v.actual} — replace the literal with a pointer to package.json/changelog`
|
|
34
|
+
: ` - line ${v.line}: says ${v.claim}, but package.json has no version to check it against — replace the literal with a pointer to package.json/changelog`);
|
|
35
|
+
}
|
|
23
36
|
}
|
|
24
37
|
process.exitCode = 1;
|
|
25
38
|
}
|
|
@@ -3,7 +3,8 @@ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, write
|
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { globSync } from "glob";
|
|
6
|
-
import {
|
|
6
|
+
import { readConfig, shouldEmitOtelGate } from "../../lib/config.js";
|
|
7
|
+
import { disabledDir, disableExtension, enableExtension, ensureExtensionsDirs, extensionConfigDir, extensionsDir, getEnabledExtensions, isEnabled, loadExtensions, loadExtensionTolerant, resolveManifestPath, } from "../../lib/extension-loader.js";
|
|
7
8
|
import { runHealthCheck } from "../../lib/health.js";
|
|
8
9
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
9
10
|
const packageRoot = join(__dirname, "../../..");
|
|
@@ -13,7 +14,7 @@ function getBuiltinExtensions() {
|
|
|
13
14
|
return [];
|
|
14
15
|
const dirs = globSync("*/manifest.json", { cwd: builtinDir });
|
|
15
16
|
return dirs
|
|
16
|
-
.map((d) =>
|
|
17
|
+
.map((d) => loadExtensionTolerant(join(builtinDir, d)))
|
|
17
18
|
.filter((m) => m !== null);
|
|
18
19
|
}
|
|
19
20
|
export async function extensionsList(projectRoot) {
|
|
@@ -47,7 +48,17 @@ export async function extensionsStatus(projectRoot) {
|
|
|
47
48
|
for (const ext of enabled) {
|
|
48
49
|
const checks = ext.manifest.provides.health_checks ?? [];
|
|
49
50
|
let healthStatus = "no health check";
|
|
50
|
-
|
|
51
|
+
// An enabled extension that cannot apply to this project shape must say
|
|
52
|
+
// so, not fail. dusk declares `otel.role: "library"` and correctly ships
|
|
53
|
+
// no instrumentation — its otel checks were permanently red demanding
|
|
54
|
+
// some, which is how a report stops being read.
|
|
55
|
+
const inapplicable = ext.manifest.name === "otel" && !shouldEmitOtelGate(projectRoot)
|
|
56
|
+
? `not applicable — otel.role is "${readConfig(projectRoot)?.otel?.role}" (disable with \`indusk extensions disable otel\`)`
|
|
57
|
+
: null;
|
|
58
|
+
if (inapplicable) {
|
|
59
|
+
healthStatus = inapplicable;
|
|
60
|
+
}
|
|
61
|
+
else if (checks.length > 0) {
|
|
51
62
|
// Once per declared repo — see lib/health.ts. In a workbench the code
|
|
52
63
|
// lives in the repos, not beside `.indusk/`.
|
|
53
64
|
const results = checks.map((check) => runHealthCheck(projectRoot, check));
|
|
@@ -82,7 +93,7 @@ export async function extensionsEnable(projectRoot, names) {
|
|
|
82
93
|
// Check if extension requires auth — if so, .env must exist before enabling
|
|
83
94
|
const builtinManifest = join(builtinDir, name, "manifest.json");
|
|
84
95
|
if (existsSync(builtinManifest)) {
|
|
85
|
-
const manifest =
|
|
96
|
+
const manifest = loadExtensionTolerant(builtinManifest);
|
|
86
97
|
if (manifest?.mcp_server?.headers && Object.keys(manifest.mcp_server.headers).length > 0) {
|
|
87
98
|
const envVars = readExtensionEnv(name);
|
|
88
99
|
if (Object.keys(envVars).length === 0) {
|
|
@@ -477,7 +488,19 @@ export async function extensionsSuggest(projectRoot) {
|
|
|
477
488
|
continue;
|
|
478
489
|
}
|
|
479
490
|
if (ext.detect.file_pattern) {
|
|
480
|
-
|
|
491
|
+
// `otel.role` is core config, not extension config — InDusk defines it,
|
|
492
|
+
// so core honouring it is not tool knowledge leaking inward. A library
|
|
493
|
+
// or tool should never emit telemetry, so enabling otel there produces
|
|
494
|
+
// health checks that cannot pass, which is how checks get ignored.
|
|
495
|
+
if (ext.name === "otel" && !shouldEmitOtelGate(projectRoot))
|
|
496
|
+
continue;
|
|
497
|
+
const matches = globSync(ext.detect.file_pattern, {
|
|
498
|
+
cwd: projectRoot,
|
|
499
|
+
maxDepth: 3,
|
|
500
|
+
// A template shipped by a package is not evidence that this project
|
|
501
|
+
// instruments anything. Matching one enabled otel on a library.
|
|
502
|
+
ignore: ext.detect.exclude ?? [],
|
|
503
|
+
});
|
|
481
504
|
if (matches.length > 0) {
|
|
482
505
|
suggestions.push({ name: ext.name, reason: `${ext.detect.file_pattern} found` });
|
|
483
506
|
continue;
|
|
@@ -640,7 +663,7 @@ export function envIsFunctional(name) {
|
|
|
640
663
|
const manifestPath = join(builtinDir, name, "manifest.json");
|
|
641
664
|
if (!existsSync(manifestPath))
|
|
642
665
|
return false;
|
|
643
|
-
const manifest =
|
|
666
|
+
const manifest = loadExtensionTolerant(manifestPath);
|
|
644
667
|
const headers = manifest?.mcp_server?.headers;
|
|
645
668
|
return !!headers && Object.keys(headers).length > 0;
|
|
646
669
|
}
|
|
@@ -675,7 +698,7 @@ function runHook(projectRoot, name, hook) {
|
|
|
675
698
|
const manifestPath = resolveManifestPath(extensionsDir(projectRoot), name);
|
|
676
699
|
if (!manifestPath)
|
|
677
700
|
return;
|
|
678
|
-
const manifest =
|
|
701
|
+
const manifest = loadExtensionTolerant(manifestPath);
|
|
679
702
|
if (!manifest?.hooks)
|
|
680
703
|
return;
|
|
681
704
|
const command = manifest.hooks[hook];
|
|
@@ -705,13 +728,13 @@ function printMcpSetup(projectRoot, name) {
|
|
|
705
728
|
const builtinPath = join(builtinDir, name, "manifest.json");
|
|
706
729
|
if (!existsSync(builtinPath))
|
|
707
730
|
return;
|
|
708
|
-
const manifest =
|
|
731
|
+
const manifest = loadExtensionTolerant(builtinPath);
|
|
709
732
|
if (!manifest?.mcp_server)
|
|
710
733
|
return;
|
|
711
734
|
printMcpInstructions(name, manifest);
|
|
712
735
|
return;
|
|
713
736
|
}
|
|
714
|
-
const manifest =
|
|
737
|
+
const manifest = loadExtensionTolerant(manifestPath);
|
|
715
738
|
if (!manifest?.mcp_server)
|
|
716
739
|
return;
|
|
717
740
|
printMcpInstructions(name, manifest);
|
|
@@ -896,7 +919,7 @@ function installSkill(projectRoot, name) {
|
|
|
896
919
|
const manifestPath = resolveManifestPath(extensionsDir(projectRoot), name);
|
|
897
920
|
if (!manifestPath)
|
|
898
921
|
return;
|
|
899
|
-
const manifest =
|
|
922
|
+
const manifest = loadExtensionTolerant(manifestPath);
|
|
900
923
|
if (!manifest?.provides.skill)
|
|
901
924
|
return;
|
|
902
925
|
// Look for skill.md in built-in extensions
|
|
@@ -50,15 +50,35 @@ const GITIGNORE_MARKER = "# InDusk managed";
|
|
|
50
50
|
export function ensureGitignore(projectRoot) {
|
|
51
51
|
const gitignorePath = join(projectRoot, ".gitignore");
|
|
52
52
|
let content = existsSync(gitignorePath) ? readFileSync(gitignorePath, "utf-8") : "";
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
53
|
+
// Normalize the whole extensions block rather than patching lines into it.
|
|
54
|
+
//
|
|
55
|
+
// Two bugs met here and neither is fixable by appending. The blanket
|
|
56
|
+
// `.indusk/extensions/` rule excluded the directory, and **git does not
|
|
57
|
+
// descend into an excluded directory**, so every file negation inside it was
|
|
58
|
+
// a dead letter — `.env.example` had never been tracked on any machine. Then
|
|
59
|
+
// a later release appended `.env.*` AFTER the existing negation, so even with
|
|
60
|
+
// the directory un-excluded the last rule won.
|
|
61
|
+
//
|
|
62
|
+
// Order is the bug in both cases: a negation must follow what it negates, and
|
|
63
|
+
// nothing may re-ignore it afterwards. So every `.indusk/extensions/` line is
|
|
64
|
+
// removed and the canonical block is written once, in order.
|
|
65
|
+
const EXTENSIONS_BLOCK = [
|
|
66
|
+
"# Extension secrets (manifests and .env.example are tracked configuration)",
|
|
67
|
+
".indusk/extensions/*/.env",
|
|
68
|
+
".indusk/extensions/*/.env.*",
|
|
69
|
+
"!.indusk/extensions/*/.env.example",
|
|
70
|
+
];
|
|
71
|
+
if (/^!?\.indusk\/extensions\//m.test(content)) {
|
|
72
|
+
const kept = content
|
|
73
|
+
.split("\n")
|
|
74
|
+
.filter((l) => !/^!?\.indusk\/extensions\//.test(l))
|
|
75
|
+
.filter((l) => !/^# Extension (manifests are package-owned|secrets)/.test(l));
|
|
76
|
+
const normalized = `${kept.join("\n").trimEnd()}\n${EXTENSIONS_BLOCK.join("\n")}\n`;
|
|
77
|
+
if (normalized !== content) {
|
|
78
|
+
content = normalized;
|
|
79
|
+
writeFileSync(gitignorePath, content);
|
|
80
|
+
console.info(" updated: .gitignore — extension manifests and .env.example are tracked; only secrets ignored");
|
|
81
|
+
}
|
|
62
82
|
}
|
|
63
83
|
// Collect entries that are missing from the current .gitignore
|
|
64
84
|
const missing = GITIGNORE_ENTRIES.filter((e) => !content.includes(e.pattern));
|
|
@@ -580,6 +600,19 @@ export async function init(projectRoot, options = {}) {
|
|
|
580
600
|
console.info(` removed: ${name} registration from .claude/settings.json`);
|
|
581
601
|
}
|
|
582
602
|
}
|
|
603
|
+
// Renamed skills: globSync installs the new name and leaves the old
|
|
604
|
+
// directory behind — still listed, still answering to its old slash command.
|
|
605
|
+
// Fingerprint-checked, so a user's own skill under that name is left alone.
|
|
606
|
+
{
|
|
607
|
+
const { removeLegacySkills } = await import("../../lib/skill-migration.js");
|
|
608
|
+
const skillResult = removeLegacySkills(projectRoot);
|
|
609
|
+
for (const s of skillResult.removed) {
|
|
610
|
+
console.info(` removed: .claude/skills/${s.name} (renamed to ${s.replacedBy})`);
|
|
611
|
+
}
|
|
612
|
+
for (const s of skillResult.foreign) {
|
|
613
|
+
console.info(` note: .claude/skills/${s.name} is not the InDusk skill — left in place (InDusk's is now ${s.replacedBy})`);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
583
616
|
// 5. Generate .vscode/settings.json
|
|
584
617
|
if (!local) {
|
|
585
618
|
console.info("\n[Editor]");
|
|
@@ -4,7 +4,7 @@ import { cpSync, existsSync, mkdirSync, readdirSync, readFileSync } from "node:f
|
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
6
|
import { globSync } from "glob";
|
|
7
|
-
import {
|
|
7
|
+
import { loadExtensionTolerant, localOverrideErrors } from "../../lib/extension-loader.js";
|
|
8
8
|
import { ensureHooksModuleType } from "../../lib/hooks-module-type.js";
|
|
9
9
|
import { checkLatestVersion, hasNewerVersion } from "../../lib/version-check.js";
|
|
10
10
|
import { readWorkbenchRepos, repoDir, resolveReposRoot } from "../../lib/worktree/repos.js";
|
|
@@ -344,6 +344,20 @@ export async function update(projectRoot) {
|
|
|
344
344
|
console.info(` removed: ${name} registration from .claude/settings.json`);
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
+
// 5d. Retire skills renamed in the package. Same shape as 5c: the skills
|
|
348
|
+
// sync above added the new name; this removes the old directory, which
|
|
349
|
+
// would otherwise stay listed and keep answering to its old slash command.
|
|
350
|
+
// Fingerprint-checked, so a user's own skill under that name is left alone.
|
|
351
|
+
{
|
|
352
|
+
const { removeLegacySkills } = await import("../../lib/skill-migration.js");
|
|
353
|
+
const skillResult = removeLegacySkills(projectRoot);
|
|
354
|
+
for (const s of skillResult.removed) {
|
|
355
|
+
console.info(` removed: .claude/skills/${s.name} (renamed to ${s.replacedBy})`);
|
|
356
|
+
}
|
|
357
|
+
for (const s of skillResult.foreign) {
|
|
358
|
+
console.info(` note: .claude/skills/${s.name} is not the InDusk skill — left in place (InDusk's is now ${s.replacedBy})`);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
347
361
|
// 5b. Migrate stale MCP configs
|
|
348
362
|
const mcpJsonPath = join(projectRoot, ".mcp.json");
|
|
349
363
|
if (existsSync(mcpJsonPath)) {
|
|
@@ -522,7 +536,7 @@ export async function update(projectRoot) {
|
|
|
522
536
|
}
|
|
523
537
|
}
|
|
524
538
|
// Run update hooks if present
|
|
525
|
-
const manifest =
|
|
539
|
+
const manifest = loadExtensionTolerant(enabledManifest);
|
|
526
540
|
const updateHook = manifest?.hooks?.on_update ?? manifest?.hooks?.on_post_update;
|
|
527
541
|
if (updateHook) {
|
|
528
542
|
console.info(` ${name}: running update hook...`);
|
|
@@ -744,6 +758,16 @@ export async function update(projectRoot) {
|
|
|
744
758
|
// and blocked the next pull. Syncing here closes that loop. Workbench-only,
|
|
745
759
|
// and never fatal — a failed sync must not fail an update.
|
|
746
760
|
syncAfterUpdate(projectRoot);
|
|
761
|
+
if (localOverrideErrors.length > 0) {
|
|
762
|
+
// Loud, specific, and non-fatal to the rest of the update. The built-in
|
|
763
|
+
// manifest was used for these; the override did not apply.
|
|
764
|
+
console.error("");
|
|
765
|
+
console.error(`${localOverrideErrors.length} manifest.local.json override(s) could not be applied:`);
|
|
766
|
+
for (const e of localOverrideErrors)
|
|
767
|
+
console.error(` - ${e}`);
|
|
768
|
+
console.error(" Those extensions are running the built-in manifest until this is fixed.");
|
|
769
|
+
process.exitCode = 1;
|
|
770
|
+
}
|
|
747
771
|
console.info("\nDone.");
|
|
748
772
|
// Non-blocking version notice. Uses the 6h-cached lookup so we don't
|
|
749
773
|
// hit npm on every invocation. Silently no-ops when offline, when the
|
|
@@ -9,12 +9,32 @@
|
|
|
9
9
|
* Path-shaped references are extracted from CLAUDE.md and verified against
|
|
10
10
|
* disk. Globs and `{placeholder}` paths are documentation, not pointers, and
|
|
11
11
|
* are skipped.
|
|
12
|
+
*
|
|
13
|
+
* The walker also refuses hand-copied version claims. A `**Version**:` line
|
|
14
|
+
* carrying a literal semver is a copy of `package.json` that nothing in the
|
|
15
|
+
* release flow updates — dusk's said "1.36.0 published" for twelve days and
|
|
16
|
+
* four releases while npm served 1.40.3. A literal that matches today passes
|
|
17
|
+
* and fails at the next bump, which is exactly when it becomes a lie; a
|
|
18
|
+
* literal with no `package.json` version to check against is unverifiable and
|
|
19
|
+
* fails outright. The safe resting state is a pointer, not a number.
|
|
12
20
|
*/
|
|
21
|
+
export interface VersionClaim {
|
|
22
|
+
/** 1-indexed line number in the scanned content. */
|
|
23
|
+
line: number;
|
|
24
|
+
/** The literal semver found on a `**Version**:` line. */
|
|
25
|
+
claim: string;
|
|
26
|
+
/** `mismatch` against package.json, or `unverifiable` when it has no version. */
|
|
27
|
+
problem: "mismatch" | "unverifiable";
|
|
28
|
+
/** The authoritative `package.json` version, when one exists. */
|
|
29
|
+
actual?: string;
|
|
30
|
+
}
|
|
13
31
|
export interface PointerReport {
|
|
14
32
|
/** Every distinct path-shaped reference found. */
|
|
15
33
|
scanned: string[];
|
|
16
34
|
/** The subset that does not resolve on disk. */
|
|
17
35
|
dead: string[];
|
|
36
|
+
/** Version literals on `**Version**:` lines that are wrong or uncheckable. */
|
|
37
|
+
versionClaims: VersionClaim[];
|
|
18
38
|
}
|
|
19
39
|
/** Scan a CLAUDE.md content string for path pointers and verify them against `projectRoot`. */
|
|
20
40
|
export declare function checkPointers(content: string, projectRoot: string): PointerReport;
|
|
@@ -9,12 +9,32 @@
|
|
|
9
9
|
* Path-shaped references are extracted from CLAUDE.md and verified against
|
|
10
10
|
* disk. Globs and `{placeholder}` paths are documentation, not pointers, and
|
|
11
11
|
* are skipped.
|
|
12
|
+
*
|
|
13
|
+
* The walker also refuses hand-copied version claims. A `**Version**:` line
|
|
14
|
+
* carrying a literal semver is a copy of `package.json` that nothing in the
|
|
15
|
+
* release flow updates — dusk's said "1.36.0 published" for twelve days and
|
|
16
|
+
* four releases while npm served 1.40.3. A literal that matches today passes
|
|
17
|
+
* and fails at the next bump, which is exactly when it becomes a lie; a
|
|
18
|
+
* literal with no `package.json` version to check against is unverifiable and
|
|
19
|
+
* fails outright. The safe resting state is a pointer, not a number.
|
|
12
20
|
*/
|
|
13
21
|
import { existsSync, readFileSync } from "node:fs";
|
|
14
22
|
import { join } from "node:path";
|
|
15
23
|
/** Directory prefixes that count as pointers when they appear in CLAUDE.md. */
|
|
16
24
|
const POINTER_PREFIXES = ["\\.indusk", "apps", "docker", "packages", "\\.claude"];
|
|
17
25
|
const POINTER_RE = new RegExp(`(?:^|[\\s(\`\\[])((?:${POINTER_PREFIXES.join("|")})/[A-Za-z0-9_\\-./]+)`, "gm");
|
|
26
|
+
/** A line that states the project's version. Only these lines are version-checked. */
|
|
27
|
+
const VERSION_LINE_RE = /^\s*(?:[-*]\s*)?\*\*Version\*\*\s*:/i;
|
|
28
|
+
const SEMVER_RE = /\b\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?\b/g;
|
|
29
|
+
function packageVersion(projectRoot) {
|
|
30
|
+
try {
|
|
31
|
+
const pkg = JSON.parse(readFileSync(join(projectRoot, "package.json"), "utf-8"));
|
|
32
|
+
return typeof pkg.version === "string" ? pkg.version : null;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
18
38
|
/** Scan a CLAUDE.md content string for path pointers and verify them against `projectRoot`. */
|
|
19
39
|
export function checkPointers(content, projectRoot) {
|
|
20
40
|
const seen = new Set();
|
|
@@ -31,7 +51,23 @@ export function checkPointers(content, projectRoot) {
|
|
|
31
51
|
if (!existsSync(join(projectRoot, p)))
|
|
32
52
|
dead.push(p);
|
|
33
53
|
}
|
|
34
|
-
|
|
54
|
+
const versionClaims = [];
|
|
55
|
+
const actual = packageVersion(projectRoot);
|
|
56
|
+
const lines = content.split("\n");
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
if (!VERSION_LINE_RE.test(lines[i]))
|
|
59
|
+
continue;
|
|
60
|
+
for (const m of lines[i].matchAll(SEMVER_RE)) {
|
|
61
|
+
if (actual === null) {
|
|
62
|
+
versionClaims.push({ line: i + 1, claim: m[0], problem: "unverifiable" });
|
|
63
|
+
}
|
|
64
|
+
else if (m[0] !== actual) {
|
|
65
|
+
versionClaims.push({ line: i + 1, claim: m[0], problem: "mismatch", actual });
|
|
66
|
+
}
|
|
67
|
+
// A matching literal passes today — and fails here at the next bump.
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return { scanned, dead, versionClaims };
|
|
35
71
|
}
|
|
36
72
|
/** Walk `<projectRoot>/CLAUDE.md`. Returns null when the file doesn't exist. */
|
|
37
73
|
export function checkClaudeMdPointers(projectRoot) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface DetectRule {
|
|
2
2
|
file?: string;
|
|
3
3
|
file_pattern?: string;
|
|
4
|
+
/** Globs whose matches are NOT evidence — packaged templates, vendored deps. */
|
|
5
|
+
exclude?: string[];
|
|
4
6
|
dependency?: string;
|
|
5
7
|
devDependency?: string;
|
|
6
8
|
mcp_server?: string;
|
|
@@ -77,6 +79,23 @@ export interface LoadedExtension {
|
|
|
77
79
|
export declare function extensionsDir(projectRoot: string): string;
|
|
78
80
|
export declare function disabledDir(projectRoot: string): string;
|
|
79
81
|
export declare function ensureExtensionsDirs(projectRoot: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Names every extension whose `manifest.local.json` could not be parsed.
|
|
84
|
+
*
|
|
85
|
+
* A malformed override must be LOUD but must not be CATASTROPHIC. Throwing all
|
|
86
|
+
* the way out of `indusk update` took the whole command down with a stack trace
|
|
87
|
+
* over one bad file — which stops the other twenty extensions from updating and
|
|
88
|
+
* buries the actual message. Callers that enumerate extensions collect here,
|
|
89
|
+
* report clearly, and still fail their exit code so nothing is silent.
|
|
90
|
+
*/
|
|
91
|
+
export declare const localOverrideErrors: string[];
|
|
92
|
+
/**
|
|
93
|
+
* Load a manifest, tolerating a broken local override.
|
|
94
|
+
*
|
|
95
|
+
* Returns the built-in manifest and records the error, so one bad override
|
|
96
|
+
* degrades that extension rather than the command.
|
|
97
|
+
*/
|
|
98
|
+
export declare function loadExtensionTolerant(manifestPath: string): ExtensionManifest | null;
|
|
80
99
|
export declare function loadExtension(manifestPath: string): ExtensionManifest | null;
|
|
81
100
|
/**
|
|
82
101
|
* Resolve the manifest path for an extension.
|
|
@@ -14,6 +14,41 @@ export function ensureExtensionsDirs(projectRoot) {
|
|
|
14
14
|
mkdirSync(disabledDir(projectRoot), { recursive: true });
|
|
15
15
|
}
|
|
16
16
|
// --- Loading ---
|
|
17
|
+
/**
|
|
18
|
+
* Names every extension whose `manifest.local.json` could not be parsed.
|
|
19
|
+
*
|
|
20
|
+
* A malformed override must be LOUD but must not be CATASTROPHIC. Throwing all
|
|
21
|
+
* the way out of `indusk update` took the whole command down with a stack trace
|
|
22
|
+
* over one bad file — which stops the other twenty extensions from updating and
|
|
23
|
+
* buries the actual message. Callers that enumerate extensions collect here,
|
|
24
|
+
* report clearly, and still fail their exit code so nothing is silent.
|
|
25
|
+
*/
|
|
26
|
+
export const localOverrideErrors = [];
|
|
27
|
+
/**
|
|
28
|
+
* Load a manifest, tolerating a broken local override.
|
|
29
|
+
*
|
|
30
|
+
* Returns the built-in manifest and records the error, so one bad override
|
|
31
|
+
* degrades that extension rather than the command.
|
|
32
|
+
*/
|
|
33
|
+
export function loadExtensionTolerant(manifestPath) {
|
|
34
|
+
try {
|
|
35
|
+
return loadExtension(manifestPath);
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
localOverrideErrors.push(e instanceof Error ? e.message : String(e));
|
|
39
|
+
return loadExtensionRaw(manifestPath);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** The built-in manifest, with no override applied. */
|
|
43
|
+
function loadExtensionRaw(manifestPath) {
|
|
44
|
+
try {
|
|
45
|
+
const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
46
|
+
return manifest.name && manifest.provides ? manifest : null;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
17
52
|
export function loadExtension(manifestPath) {
|
|
18
53
|
let manifest;
|
|
19
54
|
try {
|
|
@@ -61,12 +96,19 @@ function applyLocalOverride(manifestPath, manifest) {
|
|
|
61
96
|
const merged = { ...manifest, ...local, provides: { ...manifest.provides } };
|
|
62
97
|
if (local.provides) {
|
|
63
98
|
merged.provides = { ...manifest.provides, ...local.provides };
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
99
|
+
// EVERY array of named entries merges by name — health_checks and
|
|
100
|
+
// verification alike. A wholesale replace would force an override that
|
|
101
|
+
// wants to fix one command to restate all the others, and then silently
|
|
102
|
+
// freeze them at today's values: the forking this exists to avoid,
|
|
103
|
+
// reintroduced one key deeper.
|
|
104
|
+
for (const key of ["health_checks", "verification"]) {
|
|
105
|
+
const localEntries = local.provides[key];
|
|
106
|
+
if (!localEntries)
|
|
107
|
+
continue;
|
|
108
|
+
const byName = new Map((manifest.provides[key] ?? []).map((e) => [e.name, e]));
|
|
109
|
+
for (const e of localEntries)
|
|
110
|
+
byName.set(e.name, e);
|
|
111
|
+
merged.provides[key] = [...byName.values()];
|
|
70
112
|
}
|
|
71
113
|
}
|
|
72
114
|
merged._localOverride = localPath;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration surface for skills renamed or retired in the package — the third
|
|
3
|
+
* twin, after `mcp-migration.ts` and `hook-migration.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Skill discovery is `globSync` on both install sides, so a renamed skill
|
|
6
|
+
* arrives under its new name and the old directory stays in every consumer's
|
|
7
|
+
* `.claude/skills/` forever: still listed by `get_skill_summaries`, still
|
|
8
|
+
* answering to its old slash command. `context` is the live instance — renamed
|
|
9
|
+
* to `claude-md` because Claude Code ships a built-in `/context` (the
|
|
10
|
+
* context-window usage view), and a built-in shadows any skill of that name.
|
|
11
|
+
*
|
|
12
|
+
* A hook file name is InDusk's by construction; a skill directory name is not.
|
|
13
|
+
* `context` is exactly the kind of name a user might pick for a skill of their
|
|
14
|
+
* own, so each entry carries a fingerprint the installed `SKILL.md` must match.
|
|
15
|
+
* A directory that does not match is reported as foreign and left alone —
|
|
16
|
+
* look at the target before deleting it.
|
|
17
|
+
*/
|
|
18
|
+
export interface LegacySkill {
|
|
19
|
+
/** Directory name under `.claude/skills/`. */
|
|
20
|
+
name: string;
|
|
21
|
+
/** The skill's current name, for the console line. */
|
|
22
|
+
replacedBy: string;
|
|
23
|
+
/**
|
|
24
|
+
* Must match the installed `SKILL.md` for the directory to be treated as
|
|
25
|
+
* InDusk's. The `description:` line is the fingerprint — it has been
|
|
26
|
+
* byte-stable since the skill first shipped, so every consumer has it.
|
|
27
|
+
*/
|
|
28
|
+
fingerprint: RegExp;
|
|
29
|
+
}
|
|
30
|
+
/** Skills renamed or retired from the package. Extend on future renames. */
|
|
31
|
+
export declare const LEGACY_SKILLS: readonly LegacySkill[];
|
|
32
|
+
export interface RemoveLegacySkillsResult {
|
|
33
|
+
/** Directories deleted from `.claude/skills/`. */
|
|
34
|
+
removed: LegacySkill[];
|
|
35
|
+
/** Present under a legacy name but not matching the fingerprint — left in place. */
|
|
36
|
+
foreign: LegacySkill[];
|
|
37
|
+
}
|
|
38
|
+
export interface RemoveLegacySkillsOptions {
|
|
39
|
+
/** Override the legacy list (tests). */
|
|
40
|
+
skills?: readonly LegacySkill[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Remove every legacy skill directory whose `SKILL.md` matches its fingerprint.
|
|
44
|
+
*
|
|
45
|
+
* Absent state is not an error — no skills dir, no directory, no `SKILL.md`,
|
|
46
|
+
* unreadable file — because this runs inside `init`/`update` where a
|
|
47
|
+
* migration must not be able to fail the command. A directory with no
|
|
48
|
+
* `SKILL.md` cannot be identified and is treated as foreign.
|
|
49
|
+
*/
|
|
50
|
+
export declare function removeLegacySkills(projectRoot: string, opts?: RemoveLegacySkillsOptions): RemoveLegacySkillsResult;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration surface for skills renamed or retired in the package — the third
|
|
3
|
+
* twin, after `mcp-migration.ts` and `hook-migration.ts`.
|
|
4
|
+
*
|
|
5
|
+
* Skill discovery is `globSync` on both install sides, so a renamed skill
|
|
6
|
+
* arrives under its new name and the old directory stays in every consumer's
|
|
7
|
+
* `.claude/skills/` forever: still listed by `get_skill_summaries`, still
|
|
8
|
+
* answering to its old slash command. `context` is the live instance — renamed
|
|
9
|
+
* to `claude-md` because Claude Code ships a built-in `/context` (the
|
|
10
|
+
* context-window usage view), and a built-in shadows any skill of that name.
|
|
11
|
+
*
|
|
12
|
+
* A hook file name is InDusk's by construction; a skill directory name is not.
|
|
13
|
+
* `context` is exactly the kind of name a user might pick for a skill of their
|
|
14
|
+
* own, so each entry carries a fingerprint the installed `SKILL.md` must match.
|
|
15
|
+
* A directory that does not match is reported as foreign and left alone —
|
|
16
|
+
* look at the target before deleting it.
|
|
17
|
+
*/
|
|
18
|
+
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
19
|
+
import { join } from "node:path";
|
|
20
|
+
/** Skills renamed or retired from the package. Extend on future renames. */
|
|
21
|
+
export const LEGACY_SKILLS = [
|
|
22
|
+
{
|
|
23
|
+
name: "context",
|
|
24
|
+
replacedBy: "claude-md",
|
|
25
|
+
fingerprint: /^description:\s*Maintain CLAUDE\.md as living project memory/m,
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
/**
|
|
29
|
+
* Remove every legacy skill directory whose `SKILL.md` matches its fingerprint.
|
|
30
|
+
*
|
|
31
|
+
* Absent state is not an error — no skills dir, no directory, no `SKILL.md`,
|
|
32
|
+
* unreadable file — because this runs inside `init`/`update` where a
|
|
33
|
+
* migration must not be able to fail the command. A directory with no
|
|
34
|
+
* `SKILL.md` cannot be identified and is treated as foreign.
|
|
35
|
+
*/
|
|
36
|
+
export function removeLegacySkills(projectRoot, opts = {}) {
|
|
37
|
+
const legacy = opts.skills ?? LEGACY_SKILLS;
|
|
38
|
+
const result = { removed: [], foreign: [] };
|
|
39
|
+
for (const skill of legacy) {
|
|
40
|
+
const dir = join(projectRoot, ".claude/skills", skill.name);
|
|
41
|
+
if (!existsSync(dir))
|
|
42
|
+
continue;
|
|
43
|
+
let body;
|
|
44
|
+
try {
|
|
45
|
+
body = readFileSync(join(dir, "SKILL.md"), "utf-8");
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
result.foreign.push(skill);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (!skill.fingerprint.test(body)) {
|
|
52
|
+
result.foreign.push(skill);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
rmSync(dir, { recursive: true, force: true });
|
|
57
|
+
result.removed.push(skill);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Leave it rather than fail the migration; the next update retries.
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return result;
|
|
64
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@infinitedusky/indusk-mcp",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "InDusk development system
|
|
3
|
+
"version": "1.41.0",
|
|
4
|
+
"description": "InDusk development system — skills, MCP tools, and CLI for structured AI-assisted development",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
package/skills/catchup.md
CHANGED
|
@@ -172,6 +172,6 @@ Ready to pick up. What would you like to do?
|
|
|
172
172
|
- Do NOT skip any step. Each one prevents a class of mistake.
|
|
173
173
|
- Do NOT mutate any shared file during catchup. The only writes are `indusk agent register` and the implicit self-heartbeat in `indusk agent list`, both touching only the current session's own section.
|
|
174
174
|
- Do NOT start coding before completing onboarding. The lessons and context exist because of past failures.
|
|
175
|
-
- If CLAUDE.md seems outdated, flag it to the user — it may need a `/
|
|
175
|
+
- If CLAUDE.md seems outdated, flag it to the user — it may need a `/claude-md` update.
|
|
176
176
|
- If a plan's impl has unchecked items from a previous session, that's where `/work` picks up. Don't re-do completed work.
|
|
177
177
|
- If you see other agents in `indusk agent list` working on something that overlaps with what the user wants you to do, surface that explicitly before proceeding. The bulletin is visibility, not coordination — the working agent owns the "avoid stepping on each other" judgment. `agent list` now shows each session's **worktree** and **branch**, and prints a `⚠ collision` line to stderr when two live sessions share a worktree — read both when judging overlap.
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: claude-md
|
|
3
3
|
description: Maintain CLAUDE.md as living project memory. Update on triggers (post-retro, post-ADR, corrections). Shape impl documents to include per-phase context updates.
|
|
4
4
|
argument-hint: "learn \"lesson to remember\""
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
You know how to maintain project context in this project.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
(This skill was named `context`. Claude Code ships a built-in `/context` command — the context-window usage view — and a built-in shadows any skill of the same name, so `/context learn "…"` opened the token chart instead of running this. Nothing else changed.)
|
|
10
|
+
|
|
11
|
+
## What It Does
|
|
10
12
|
|
|
11
13
|
Context ensures that project knowledge compounds across sessions. It does this in two ways:
|
|
12
14
|
|
|
@@ -92,22 +94,22 @@ When an ADR's status changes to `accepted`, add a one-liner to **Key Decisions**
|
|
|
92
94
|
|
|
93
95
|
Do not duplicate the ADR's rationale. The link is the documentation.
|
|
94
96
|
|
|
95
|
-
### 3. `
|
|
97
|
+
### 3. `claude-md learn`
|
|
96
98
|
|
|
97
|
-
When invoked as `/
|
|
99
|
+
When invoked as `/claude-md learn "lesson"`, or when you detect you've been corrected mid-session:
|
|
98
100
|
|
|
99
101
|
1. Categorize the lesson:
|
|
100
102
|
- **Conventions** — patterns to follow or avoid ("use Biome not ESLint", "no default exports")
|
|
101
103
|
- **Known Gotchas** — mistakes ("don't run npx ce, use pnpm ce", "always env:build before docker compose")
|
|
102
104
|
2. If ambiguous, default to **Known Gotchas** — better to over-capture than miss a lesson
|
|
103
105
|
3. Append a concise one-liner to the appropriate section
|
|
104
|
-
4. Never add to Key Decisions via `
|
|
105
|
-
5. Never add to Current State via `
|
|
106
|
+
4. Never add to Key Decisions via `claude-md learn` — that's only via the post-ADR trigger
|
|
107
|
+
5. Never add to Current State via `claude-md learn` — that's updated by triggers or manually
|
|
106
108
|
|
|
107
|
-
**When you detect you've been corrected** — the user says "no, not that way" or "don't do X, do Y" — suggest running `
|
|
109
|
+
**When you detect you've been corrected** — the user says "no, not that way" or "don't do X, do Y" — suggest running `claude-md learn`. Don't wait to be told. Example:
|
|
108
110
|
|
|
109
111
|
> User: "No, use pnpm ce, not npx"
|
|
110
|
-
> Agent: *fixes the command* — "Should I capture this? `/
|
|
112
|
+
> Agent: *fixes the command* — "Should I capture this? `/claude-md learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
|
|
111
113
|
|
|
112
114
|
## Shaping Impl Documents
|
|
113
115
|
|
package/skills/highlight.md
CHANGED
|
@@ -21,7 +21,7 @@ The user runs `/highlight {free-form text} [level: critical|important|note]`.
|
|
|
21
21
|
- `observation` — general flag (default)
|
|
22
22
|
- `decision` — an informal decision the user wants recorded
|
|
23
23
|
- `surprise` — something unexpected
|
|
24
|
-
- `correction` — a mid-session correction (but the work skill already does this on `
|
|
24
|
+
- `correction` — a mid-session correction (but the work skill already does this on `claude-md learn`; prefer that path)
|
|
25
25
|
- A user-supplied tag if the message contains one (`tag=architecture` etc.)
|
|
26
26
|
|
|
27
27
|
3. **Write the highlight** via the InDusk MCP:
|
package/skills/planner.md
CHANGED
|
@@ -123,7 +123,7 @@ Workflow templates are in `templates/workflows/` in the package. They describe w
|
|
|
123
123
|
```
|
|
124
124
|
Skip silently on highlight unavailability.
|
|
125
125
|
|
|
126
|
-
6. **If test plan is accepted** and the workflow includes an ADR (feature only), write the ADR. The ADR formalizes the decisions that were discussed during research and led to the brief. It records what was chosen, what was rejected, and why. **After the ADR is accepted**, add a one-liner to CLAUDE.md's Key Decisions section per the
|
|
126
|
+
6. **If test plan is accepted** and the workflow includes an ADR (feature only), write the ADR. The ADR formalizes the decisions that were discussed during research and led to the brief. It records what was chosen, what was rejected, and why. **After the ADR is accepted**, add a one-liner to CLAUDE.md's Key Decisions section per the claude-md skill: `- {decision summary} — see .indusk/planning/{plan}/adr.md`
|
|
127
127
|
|
|
128
128
|
**When the ADR moves from `proposed` to `accepted`**, write a highlight so the eval agent can turn it into a structured Y-statement episode:
|
|
129
129
|
```
|
package/skills/work.md
CHANGED
|
@@ -374,13 +374,13 @@ Where the harness `Workflow` tool is available, the loop can run as a Workflow (
|
|
|
374
374
|
|
|
375
375
|
## Corrections and Context Learning
|
|
376
376
|
|
|
377
|
-
When you are corrected mid-work — the user says "no, not that way" or "don't do X, do Y" — suggest capturing it with `
|
|
377
|
+
When you are corrected mid-work — the user says "no, not that way" or "don't do X, do Y" — suggest capturing it with `claude-md learn`:
|
|
378
378
|
|
|
379
|
-
> "Should I capture this? `/
|
|
379
|
+
> "Should I capture this? `/claude-md learn 'use pnpm ce, not npx — the skill doc specifies pnpm'`"
|
|
380
380
|
|
|
381
381
|
Don't wait to be told. Corrections are the most valuable source of project knowledge.
|
|
382
382
|
|
|
383
|
-
**When the user confirms `
|
|
383
|
+
**When the user confirms `claude-md learn`, ALSO write a highlight so the eval agent can materialize it as a lesson:**
|
|
384
384
|
```
|
|
385
385
|
mcp__indusk__highlight({
|
|
386
386
|
tag: "correction",
|
|
@@ -393,7 +393,7 @@ The working agent does not write the lesson directly. The eval agent reads the h
|
|
|
393
393
|
|
|
394
394
|
**What to include in the `note`:** enough for the eval agent to reconstruct the lesson and classify its scope. Example: `pnpm-ce: always use pnpm ce, not npx — skill doc specifies pnpm and mixing causes cache drift`. The eval agent has the full transcript, so concision over completeness is fine.
|
|
395
395
|
|
|
396
|
-
Skip silently if `mcp__indusk__highlight` is unavailable — highlights are best-effort and must not fail the work item or the `
|
|
396
|
+
Skip silently if `mcp__indusk__highlight` is unavailable — highlights are best-effort and must not fail the work item or the `claude-md learn` recording (which is the canonical, local copy of the lesson).
|
|
397
397
|
|
|
398
398
|
## Worktree Kickoff
|
|
399
399
|
|
/package/admin/.next/static/{QAedypfHmLPDecvVl6Kxf → WxUGu7NCQs8pb0nSvDzv6}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|