@infinitedusky/indusk-mcp 1.28.11 → 1.28.14
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/init.js +1 -0
- package/dist/tools/system-tools.js +29 -0
- package/extensions/README.md +123 -0
- package/extensions/asana/.env.example +35 -0
- package/extensions/asana/manifest.json +30 -0
- package/extensions/asana/skill.md +81 -0
- package/extensions/dash0/skill.md +7 -0
- package/extensions/datadog/.env.example +48 -0
- package/extensions/datadog/manifest.json +30 -0
- package/extensions/datadog/skill.md +69 -0
- package/extensions/local-telemetry/skill.md +3 -1
- package/hooks/check-gates.js +45 -7
- package/lessons/community/community-graphiti-group-id-underscores.md +31 -0
- package/package.json +1 -1
- package/skills/catchup.md +12 -2
- package/templates/FullscreenDiagram.vue +29 -5
- /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_buildManifest.js +0 -0
- /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
69kWAi_Oc3bJTtW4rq420
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/69kWAi_Oc3bJTtW4rq420/_buildManifest.js",
|
|
11
|
+
"static/69kWAi_Oc3bJTtW4rq420/_ssgManifest.js",
|
|
12
|
+
"static/69kWAi_Oc3bJTtW4rq420/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/69kWAi_Oc3bJTtW4rq420/_buildManifest.js",
|
|
9
|
+
"static/69kWAi_Oc3bJTtW4rq420/_ssgManifest.js",
|
|
10
|
+
"static/69kWAi_Oc3bJTtW4rq420/_clientMiddlewareManifest.js"
|
|
11
11
|
],
|
|
12
12
|
"rootMainFiles": []
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"69kWAi_Oc3bJTtW4rq420\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"69kWAi_Oc3bJTtW4rq420"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
4
|
+
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"69kWAi_Oc3bJTtW4rq420"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"69kWAi_Oc3bJTtW4rq420"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"69kWAi_Oc3bJTtW4rq420"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"69kWAi_Oc3bJTtW4rq420"}
|
|
@@ -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":"69kWAi_Oc3bJTtW4rq420"}
|
|
@@ -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/69kWAi_Oc3bJTtW4rq420/_buildManifest.js",
|
|
11
|
+
"static/69kWAi_Oc3bJTtW4rq420/_ssgManifest.js",
|
|
12
|
+
"static/69kWAi_Oc3bJTtW4rq420/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"69kWAi_Oc3bJTtW4rq420\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
package/admin/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":131,"timestamp":3726893348480,"id":4,"parentId":1,"tags":{},"startTime":1778373763498,"traceId":"70610bd7044e3212"},{"name":"load-custom-routes","duration":212,"timestamp":3726893348672,"id":5,"parentId":1,"tags":{},"startTime":1778373763498,"traceId":"70610bd7044e3212"},{"name":"create-dist-dir","duration":98,"timestamp":3726893348898,"id":6,"parentId":1,"tags":{},"startTime":1778373763498,"traceId":"70610bd7044e3212"},{"name":"clean","duration":46404,"timestamp":3726893349484,"id":7,"parentId":1,"tags":{},"startTime":1778373763499,"traceId":"70610bd7044e3212"},{"name":"discover-routes","duration":4475,"timestamp":3726893401298,"id":8,"parentId":1,"tags":{},"startTime":1778373763550,"traceId":"70610bd7044e3212"},{"name":"create-root-mapping","duration":38,"timestamp":3726893405806,"id":9,"parentId":1,"tags":{},"startTime":1778373763555,"traceId":"70610bd7044e3212"},{"name":"generate-route-types","duration":13570,"timestamp":3726893406825,"id":10,"parentId":1,"tags":{},"startTime":1778373763556,"traceId":"70610bd7044e3212"},{"name":"public-dir-conflict-check","duration":77,"timestamp":3726893420453,"id":11,"parentId":1,"tags":{},"startTime":1778373763570,"traceId":"70610bd7044e3212"},{"name":"generate-routes-manifest","duration":1114,"timestamp":3726893420589,"id":12,"parentId":1,"tags":{},"startTime":1778373763570,"traceId":"70610bd7044e3212"},{"name":"run-turbopack","duration":2153624,"timestamp":3726893423469,"id":14,"parentId":1,"tags":{},"startTime":1778373763573,"traceId":"70610bd7044e3212"},{"name":"turbopack-build-events","duration":44,"timestamp":3726893586345,"id":15,"parentId":1,"tags":{},"startTime":1778373763735,"traceId":"70610bd7044e3212"},{"name":"run-typescript","duration":3063887,"timestamp":3726895603863,"id":16,"parentId":1,"tags":{},"startTime":1778373765753,"traceId":"70610bd7044e3212"},{"name":"generate-required-server-files","duration":515,"timestamp":3726898668645,"id":18,"parentId":1,"tags":{},"startTime":1778373768818,"traceId":"70610bd7044e3212"},{"name":"check-static-error-page","duration":6907,"timestamp":3726898689988,"id":20,"parentId":19,"tags":{},"startTime":1778373768839,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":343277,"timestamp":3726898708267,"id":30,"parentId":22,"tags":{},"startTime":1778373768857,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":358011,"timestamp":3726898693768,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778373768843,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":357244,"timestamp":3726898708315,"id":31,"parentId":23,"tags":{},"startTime":1778373768857,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":371284,"timestamp":3726898694412,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778373768844,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":388093,"timestamp":3726898714788,"id":34,"parentId":25,"tags":{},"startTime":1778373768864,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":406255,"timestamp":3726898696701,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1778373768846,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":388666,"timestamp":3726898714383,"id":32,"parentId":28,"tags":{},"startTime":1778373768863,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":406263,"timestamp":3726898696852,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1778373768846,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":410558,"timestamp":3726898714599,"id":33,"parentId":24,"tags":{},"startTime":1778373768864,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":428645,"timestamp":3726898696549,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1778373768846,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":418299,"timestamp":3726898707770,"id":29,"parentId":21,"tags":{},"startTime":1778373768857,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":433407,"timestamp":3726898692689,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778373768842,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":447234,"timestamp":3726898714828,"id":35,"parentId":26,"tags":{},"startTime":1778373768864,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":465356,"timestamp":3726898696764,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1778373768846,"traceId":"70610bd7044e3212"},{"name":"is-page-static","duration":449927,"timestamp":3726898714869,"id":36,"parentId":27,"tags":{},"startTime":1778373768864,"traceId":"70610bd7044e3212"},{"name":"check-page","duration":468033,"timestamp":3726898696811,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1778373768846,"traceId":"70610bd7044e3212"},{"name":"static-check","duration":475550,"timestamp":3726898689351,"id":19,"parentId":1,"tags":{},"startTime":1778373768838,"traceId":"70610bd7044e3212"},{"name":"write-routes-manifest","duration":669,"timestamp":3726899166401,"id":38,"parentId":1,"tags":{},"startTime":1778373769316,"traceId":"70610bd7044e3212"},{"name":"load-dotenv","duration":34,"timestamp":3726899179763,"id":41,"parentId":40,"tags":{},"startTime":1778373769329,"traceId":"70610bd7044e3212"},{"name":"run-export-path-map","duration":236,"timestamp":3726899181350,"id":42,"parentId":40,"tags":{},"startTime":1778373769330,"traceId":"70610bd7044e3212"},{"name":"next-export","duration":233453,"timestamp":3726899179103,"id":40,"parentId":1,"tags":{},"startTime":1778373769328,"traceId":"70610bd7044e3212"},{"name":"move-exported-app-global-error-","duration":469,"timestamp":3726899413332,"id":43,"parentId":39,"tags":{},"startTime":1778373769562,"traceId":"70610bd7044e3212"},{"name":"static-generation","duration":241710,"timestamp":3726899173221,"id":39,"parentId":1,"tags":{},"startTime":1778373769322,"traceId":"70610bd7044e3212"},{"name":"write-routes-manifest","duration":203,"timestamp":3726899415046,"id":44,"parentId":1,"tags":{},"startTime":1778373769564,"traceId":"70610bd7044e3212"},{"name":"print-tree-view","duration":1397,"timestamp":3726899423898,"id":45,"parentId":1,"tags":{},"startTime":1778373769573,"traceId":"70610bd7044e3212"},{"name":"write-route-bundle-stats","duration":6246,"timestamp":3726899425307,"id":46,"parentId":1,"tags":{},"startTime":1778373769574,"traceId":"70610bd7044e3212"},{"name":"telemetry-flush","duration":486462,"timestamp":3726899431579,"id":47,"parentId":1,"tags":{},"startTime":1778373769581,"traceId":"70610bd7044e3212"},{"name":"next-build","duration":6681028,"timestamp":3726893237039,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778373763386,"traceId":"70610bd7044e3212"}]
|
package/admin/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":2153624,"timestamp":3726893423469,"id":14,"parentId":1,"tags":{},"startTime":1778373763573,"traceId":"70610bd7044e3212"},{"name":"turbopack-build-events","duration":44,"timestamp":3726893586345,"id":15,"parentId":1,"tags":{},"startTime":1778373763735,"traceId":"70610bd7044e3212"},{"name":"run-typescript","duration":3063887,"timestamp":3726895603863,"id":16,"parentId":1,"tags":{},"startTime":1778373765753,"traceId":"70610bd7044e3212"},{"name":"static-check","duration":475550,"timestamp":3726898689351,"id":19,"parentId":1,"tags":{},"startTime":1778373768838,"traceId":"70610bd7044e3212"},{"name":"static-generation","duration":241710,"timestamp":3726899173221,"id":39,"parentId":1,"tags":{},"startTime":1778373769322,"traceId":"70610bd7044e3212"},{"name":"telemetry-flush","duration":486462,"timestamp":3726899431579,"id":47,"parentId":1,"tags":{},"startTime":1778373769581,"traceId":"70610bd7044e3212"},{"name":"next-build","duration":6681028,"timestamp":3726893237039,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778373763386,"traceId":"70610bd7044e3212"}]
|
|
@@ -843,6 +843,7 @@ export async function init(projectRoot, options = {}) {
|
|
|
843
843
|
"mcp__indusk__list_lessons",
|
|
844
844
|
"mcp__indusk__check_health",
|
|
845
845
|
"mcp__indusk__get_context",
|
|
846
|
+
"mcp__indusk__get_project_info",
|
|
846
847
|
"mcp__indusk__list_plans",
|
|
847
848
|
"mcp__indusk__extensions_status",
|
|
848
849
|
"mcp__indusk__graph_ensure",
|
|
@@ -3,7 +3,9 @@ import { createHash } from "node:crypto";
|
|
|
3
3
|
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
4
4
|
import { dirname, join } from "node:path";
|
|
5
5
|
import { fileURLToPath } from "node:url";
|
|
6
|
+
import { getEvalModel, getProjectGroupId, readConfig, shouldEmitOtelGate, } from "../lib/config.js";
|
|
6
7
|
import { getEnabledExtensions } from "../lib/extension-loader.js";
|
|
8
|
+
import { getScm } from "../lib/scm/detect.js";
|
|
7
9
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
10
|
const packageRoot = join(__dirname, "../..");
|
|
9
11
|
function fileHash(path) {
|
|
@@ -24,6 +26,33 @@ export function registerSystemTools(server, projectRoot) {
|
|
|
24
26
|
],
|
|
25
27
|
};
|
|
26
28
|
});
|
|
29
|
+
server.registerTool("get_project_info", {
|
|
30
|
+
description: "Return runtime project metadata: project_group (Graphiti group ID — sanitized form, hyphens → underscores), scm (jj or git), planning_dir, otel_role, eval_model, eval_enabled. Use `project_group` as the value for `group_ids` when querying `mcp__graphiti__*` tools — the sanitized form is what writes use, so reads must match. Always pass `[project_group, \"shared\"]` to recall both project-specific and cross-project knowledge.",
|
|
31
|
+
}, async () => {
|
|
32
|
+
const config = readConfig(projectRoot);
|
|
33
|
+
const info = {
|
|
34
|
+
project_root: projectRoot,
|
|
35
|
+
project_group: getProjectGroupId(projectRoot),
|
|
36
|
+
scm: getScm(projectRoot),
|
|
37
|
+
planning_dir: join(projectRoot, ".indusk/planning"),
|
|
38
|
+
otel_role: config?.otel?.role ?? "service",
|
|
39
|
+
otel_gate_emits: shouldEmitOtelGate(projectRoot),
|
|
40
|
+
eval_enabled: config?.eval?.enabled !== false,
|
|
41
|
+
eval_model: getEvalModel(projectRoot),
|
|
42
|
+
graphiti_group_recall_example: {
|
|
43
|
+
note: "Pass `group_ids: [project_group, \"shared\"]` to graphiti queries. Omitting group_ids does NOT scan all groups — it returns empty.",
|
|
44
|
+
group_ids: [getProjectGroupId(projectRoot), "shared"],
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: "text",
|
|
51
|
+
text: JSON.stringify(info, null, 2),
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
});
|
|
27
56
|
server.registerTool("check_health", {
|
|
28
57
|
description: "Check health of all enabled extensions. Runs health check commands from extension manifests. Errors indicate degraded system.",
|
|
29
58
|
}, async () => {
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# InDusk Extensions — Index
|
|
2
|
+
|
|
3
|
+
This directory holds InDusk extensions: opt-in (or required-by-default) modules that ship a manifest, an agent-facing skill, and optionally an MCP server registration, env template, or health-check command.
|
|
4
|
+
|
|
5
|
+
This index lists every shipped extension with a one-line summary and "when to use" guidance. For setup details on any individual extension, see its `skill.md`. For the runtime list of which extensions are enabled in a given project, call `mcp__indusk__extensions_status`.
|
|
6
|
+
|
|
7
|
+
The user-facing version of this index lives at [`apps/indusk-docs/src/reference/extensions/index.md`](../../indusk-docs/src/reference/extensions/index.md) and is what gets served on the docs site.
|
|
8
|
+
|
|
9
|
+
## Decision matrix
|
|
10
|
+
|
|
11
|
+
When extensions overlap on problem space, this table tells you which one to reach for.
|
|
12
|
+
|
|
13
|
+
| Problem | Pick |
|
|
14
|
+
|---|---|
|
|
15
|
+
| Query staging/prod logs/traces/metrics from a Datadog account | `datadog` |
|
|
16
|
+
| Query staging/prod logs/traces/metrics from a Dash0 account | `dash0` |
|
|
17
|
+
| Local-only OTel during dev (no SaaS account, no internet) | `local-telemetry` |
|
|
18
|
+
| Add OpenTelemetry instrumentation to your service | `otel` (skill — emit side, not query side) |
|
|
19
|
+
| Coordinate work via Asana (tasks, projects, comments) | `asana` |
|
|
20
|
+
| Walk code structure (callers, callees, dead code) | `cgc` |
|
|
21
|
+
| Persist episodic memory across sessions (decisions, lessons, contradictions) | `graphiti` |
|
|
22
|
+
| Run FalkorDB locally for `cgc` or `graphiti` | `falkordb` |
|
|
23
|
+
| Visualize a graph (semantic-graph dashboard, network diagrams) | `sigma` |
|
|
24
|
+
| Drive a browser, run Lighthouse, capture network requests | `chrome-devtools` |
|
|
25
|
+
| Sketch hand-drawn architecture diagrams in a session | `excalidraw` |
|
|
26
|
+
| Author docs site with Mermaid + FullscreenDiagram | `vitepress` |
|
|
27
|
+
| Build / debug Dockerfiles, multi-stage builds | `docker` |
|
|
28
|
+
| Author Next.js 13+ App Router code | `nextjs` |
|
|
29
|
+
| Author React components | `react` |
|
|
30
|
+
| Author Solidity contracts | `solidity` |
|
|
31
|
+
| Style with Tailwind | `tailwind` |
|
|
32
|
+
| Write Vitest / Jest tests | `testing` |
|
|
33
|
+
| Write TypeScript with strict mode | `typescript` |
|
|
34
|
+
|
|
35
|
+
## Grouped catalog
|
|
36
|
+
|
|
37
|
+
### Observability — query side (read your service's data)
|
|
38
|
+
|
|
39
|
+
| Extension | One-liner | Auth | When |
|
|
40
|
+
|---|---|---|---|
|
|
41
|
+
| `dash0` | Dash0 SaaS — logs, traces, metrics, dashboards | Bearer token in env | Project ships telemetry to Dash0 |
|
|
42
|
+
| `datadog` | Datadog SaaS — logs, traces, metrics, monitors, security signals (16+ tools) | OAuth (browser flow) | Project ships telemetry to Datadog |
|
|
43
|
+
| `local-telemetry` | Native Jaeger + OTel Collector daemon, agent-queryable via MCP | None (localhost) | Dev-time only — no internet, no SaaS account |
|
|
44
|
+
|
|
45
|
+
`dash0` and `datadog` are mutually exclusive in practice (you don't run both vendors). `local-telemetry` is orthogonal — useful in dev even when staging/prod uses Dash0 or Datadog. See each skill's "Read-side only" section for the emit-vs-query split.
|
|
46
|
+
|
|
47
|
+
### Observability — emit side (instrument your service)
|
|
48
|
+
|
|
49
|
+
| Extension | One-liner | When |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `otel` | OpenTelemetry instrumentation patterns — auto-instrumentation, Pino logging, category filtering | Adding telemetry to a service for the first time, or tightening existing telemetry |
|
|
52
|
+
|
|
53
|
+
### Project management
|
|
54
|
+
|
|
55
|
+
| Extension | One-liner | Auth | When |
|
|
56
|
+
|---|---|---|---|
|
|
57
|
+
| `asana` | Asana Work Graph — tasks, projects, comments, custom fields | OAuth (browser flow) | Coordinating work via Asana; cross-referencing PRs to tasks |
|
|
58
|
+
|
|
59
|
+
### Code intelligence
|
|
60
|
+
|
|
61
|
+
| Extension | One-liner | When |
|
|
62
|
+
|---|---|---|
|
|
63
|
+
| `cgc` | CodeGraphContext — structural code intelligence (callers, callees, dead code) | Investigating blast radius of a change; hunting unused code |
|
|
64
|
+
| `graphiti` | Temporal knowledge graph — episodic memory across sessions | Cross-session context retention, contradiction detection |
|
|
65
|
+
| `sigma` | Sigma.js WebGL graph visualization | Rendering large semantic graphs in admin UI / dashboards |
|
|
66
|
+
| `falkordb` | FalkorDB graph database — shared OrbStack instance | Infrastructure for `cgc` and `graphiti` |
|
|
67
|
+
|
|
68
|
+
### Browser & web automation
|
|
69
|
+
|
|
70
|
+
| Extension | One-liner | When |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `chrome-devtools` | Browser automation, performance traces with CrUX data, Lighthouse audits, screenshots | Investigating a UI bug, running a Lighthouse audit, capturing network requests for a flaky integration |
|
|
73
|
+
|
|
74
|
+
### Diagrams & docs
|
|
75
|
+
|
|
76
|
+
| Extension | One-liner | When |
|
|
77
|
+
|---|---|---|
|
|
78
|
+
| `excalidraw` | Hand-drawn diagrams in chat | Conceptual sketches, debug illustrations |
|
|
79
|
+
| `vitepress` | VitePress patterns — Mermaid diagrams, sidebar config, FullscreenDiagram | Authoring docs site content |
|
|
80
|
+
|
|
81
|
+
### Domain / framework skills (skill-only, no MCP server)
|
|
82
|
+
|
|
83
|
+
These extensions ship just a `skill.md` — no MCP server, no env config, no health checks. They're pure agent-facing knowledge that activates when the project uses the relevant tech.
|
|
84
|
+
|
|
85
|
+
| Extension | One-liner | When |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| `docker` | Multi-stage builds, layer caching, security, Alpine gotchas | Project has a Dockerfile |
|
|
88
|
+
| `nextjs` | App Router, server components, caching | Project uses Next.js 13+ |
|
|
89
|
+
| `react` | Hooks, component composition, anti-patterns | Project uses React |
|
|
90
|
+
| `solidity` | Reentrancy, overflow, gas optimization, OpenZeppelin | Project has Solidity contracts |
|
|
91
|
+
| `tailwind` | Utility-first, responsive, dark mode | Project uses Tailwind |
|
|
92
|
+
| `testing` | Arrange-act-assert, test isolation, mocking | Project has tests |
|
|
93
|
+
| `typescript` | Strict mode, generics, discriminated unions | Project uses TypeScript |
|
|
94
|
+
|
|
95
|
+
## How extensions are wired
|
|
96
|
+
|
|
97
|
+
A complete extension at minimum has:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
extensions/{name}/
|
|
101
|
+
├── manifest.json # name, description, provides, detect, mcp_server (optional), hooks (optional)
|
|
102
|
+
└── skill.md # agent-facing usage guide
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Extensions with secrets or runtime config also have:
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
├── .env.example # template; copied to .indusk/extensions/{name}/.env on enable
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The manifest's `provides.skill: true` opts the skill into syncing with the project's `.claude/skills/{name}/SKILL.md` on `indusk update`. The manifest's `mcp_server` block (if present) registers the extension's MCP server in the project's `.mcp.json` on `indusk extensions enable {name}` (or fresh init for required-by-default extensions). The manifest's `provides.health_checks` runs every `mcp__indusk__check_health` invocation; non-ok checks degrade catchup.
|
|
112
|
+
|
|
113
|
+
For the full schema + the `required: true` flag (auto-enable on init/update), see [`apps/indusk-docs/src/reference/extension-spec.md`](../../indusk-docs/src/reference/extension-spec.md).
|
|
114
|
+
|
|
115
|
+
## Adding a new extension
|
|
116
|
+
|
|
117
|
+
1. Create `extensions/{name}/` with `manifest.json` + `skill.md` (and `.env.example` if needed).
|
|
118
|
+
2. If wrapping an MCP server, add the `mcp_server` block to the manifest. Use `DASH0_AUTH_TOKEN` / `DATADOG_MCP_URL` style env-var references — these get resolved from `.env` at enable time.
|
|
119
|
+
3. Add an entry to this README (decision matrix + grouped catalog) AND to the docs version at `apps/indusk-docs/src/reference/extensions/index.md`.
|
|
120
|
+
4. If the extension belongs in a problem space that already has alternatives (e.g., a third observability vendor), update the relevant sibling skills' "See Also" sections to cross-reference the new sibling.
|
|
121
|
+
5. If `required: true`, add the extension to `lib/extension-loader.ts`'s default-enabled list and ensure `update.ts` migrates pre-existing projects.
|
|
122
|
+
|
|
123
|
+
The cost of an extension is small (~3 files), but the cost of LISTING an extension correctly across the catalog is real. Don't add new extensions without updating this index.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# asana extension env template
|
|
2
|
+
#
|
|
3
|
+
# Asana's official V2 MCP server uses OAuth 2.0 with PKCE on first session
|
|
4
|
+
# launch — there is NO API token to paste here. The only thing this .env
|
|
5
|
+
# configures is which endpoint URL the MCP server points at, and Asana is
|
|
6
|
+
# single-region so this barely changes.
|
|
7
|
+
#
|
|
8
|
+
# When this extension is enabled on a project, copy this file to
|
|
9
|
+
# `.indusk/extensions/asana/.env`. The Asana MCP server auto-registers on
|
|
10
|
+
# the next `indusk extensions enable asana` (or `indusk update`).
|
|
11
|
+
#
|
|
12
|
+
# On first Claude Code session after registration, you'll be prompted to
|
|
13
|
+
# complete OAuth (browser flow). Tokens expire hourly and refresh
|
|
14
|
+
# automatically — you re-authenticate only when the refresh token expires
|
|
15
|
+
# (rare).
|
|
16
|
+
|
|
17
|
+
# --- Required ---
|
|
18
|
+
|
|
19
|
+
# Asana V2 MCP endpoint. The V1 endpoint (https://mcp.asana.com/sse) was
|
|
20
|
+
# deprecated and shut down 2026-05-11; only V2 works.
|
|
21
|
+
ASANA_MCP_URL=https://mcp.asana.com/v2/mcp
|
|
22
|
+
|
|
23
|
+
# --- Notes ---
|
|
24
|
+
#
|
|
25
|
+
# Auth scope: tokens issued for the MCP server work ONLY with the MCP
|
|
26
|
+
# server. They cannot be reused with the standard Asana REST API.
|
|
27
|
+
#
|
|
28
|
+
# Permissions: all actions taken via MCP appear as the authorizing user.
|
|
29
|
+
# Access is bounded by that user's existing Asana permissions — the MCP
|
|
30
|
+
# token doesn't grant anything beyond what they already have.
|
|
31
|
+
#
|
|
32
|
+
# Pre-registered clients: Asana V2 does NOT support dynamic client
|
|
33
|
+
# registration. Claude Code is a pre-registered client, so users don't
|
|
34
|
+
# need to register a client_id themselves; OAuth just works. Other MCP
|
|
35
|
+
# clients may need to register with Asana before connecting.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "asana",
|
|
3
|
+
"description": "Asana project management — query the Asana Work Graph (tasks, projects, comments, sections, custom fields, time tracking) via Asana's official V2 remote MCP server (OAuth)",
|
|
4
|
+
"provides": {
|
|
5
|
+
"skill": true,
|
|
6
|
+
"health_checks": [
|
|
7
|
+
{
|
|
8
|
+
"name": "asana-mcp-configured",
|
|
9
|
+
"command": "node -e \"const m=JSON.parse(require('fs').readFileSync('.mcp.json','utf-8'));process.exit(m.mcpServers?.asana ? 0 : 1)\""
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"mcp_server": {
|
|
14
|
+
"type": "http",
|
|
15
|
+
"url": "ASANA_MCP_URL",
|
|
16
|
+
"setup_instructions": [
|
|
17
|
+
"1. Copy the template:",
|
|
18
|
+
" cp .indusk/extensions/asana/.env.example .indusk/extensions/asana/.env",
|
|
19
|
+
"2. The default value (https://mcp.asana.com/v2/mcp) works for all Asana customers — Asana is single-region. No editing needed unless Asana publishes a new endpoint.",
|
|
20
|
+
"3. Run 'indusk extensions enable asana' again (or 'indusk update'). The MCP server gets registered in '.mcp.json'.",
|
|
21
|
+
"4. On first session in Claude Code, complete the OAuth flow when prompted. All actions appear as the authorizing user; access is bounded by the user's existing Asana permissions. Tokens expire hourly and refresh automatically."
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"hooks": {
|
|
25
|
+
"on_enable": "echo 'Asana extension enabled. Complete OAuth on first Claude Code session.'"
|
|
26
|
+
},
|
|
27
|
+
"detect": {
|
|
28
|
+
"mcp_server": "asana"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Asana Project Management
|
|
2
|
+
|
|
3
|
+
Asana provides access to the Asana Work Graph — tasks, projects, sections, comments, custom fields, time tracking, attachments — via Asana's official V2 remote MCP server. You query it with `mcp__asana__*` tools during a Claude Code session.
|
|
4
|
+
|
|
5
|
+
This is **not an observability tool** (unlike `dash0` and `datadog`). Asana is for project tracking: who's working on what, what's blocked, what comments were left on a task, what's due this sprint. Reach for the Asana extension when the question is about WORK COORDINATION, not about service health.
|
|
6
|
+
|
|
7
|
+
## One Interface (Remote MCP, OAuth)
|
|
8
|
+
|
|
9
|
+
Asana ships an **official V2 remote MCP server** at `https://mcp.asana.com/v2/mcp`. The V1 endpoint (`https://mcp.asana.com/sse`) was deprecated and shut down 2026-05-11 — V2 is the only supported version.
|
|
10
|
+
|
|
11
|
+
Setup is dead-simple compared to dash0 (no token to paste):
|
|
12
|
+
|
|
13
|
+
1. `cp .indusk/extensions/asana/.env.example .indusk/extensions/asana/.env`
|
|
14
|
+
2. `indusk extensions enable asana`
|
|
15
|
+
3. Open Claude Code → first MCP call to `mcp__asana__*` triggers the OAuth flow → choose your Asana account → done.
|
|
16
|
+
|
|
17
|
+
Subsequent sessions reuse the OAuth token transparently. Access tokens expire after one hour; refresh tokens handle renewal automatically without prompting again.
|
|
18
|
+
|
|
19
|
+
## Auth Model — OAuth, Bounded by User Permissions
|
|
20
|
+
|
|
21
|
+
Important properties of the Asana V2 OAuth flow:
|
|
22
|
+
|
|
23
|
+
- **All actions appear as the authorizing user.** If the user authorizing OAuth is a regular team member, MCP-driven edits (creating tasks, adding comments, etc.) appear as that user in audit logs. There's no service-account abstraction.
|
|
24
|
+
- **Permissions are bounded by the user's existing Asana access.** The MCP token cannot do anything the user couldn't already do via the Asana web UI. Querying private projects requires the user to be a member.
|
|
25
|
+
- **Tokens are scoped to MCP-only.** The OAuth token cannot be reused for the standard Asana REST API — separate auth flows.
|
|
26
|
+
- **No dynamic client registration.** Asana V2 only supports pre-registered MCP clients. Claude Code is one; if you're using a different client, you may need to register first.
|
|
27
|
+
|
|
28
|
+
## When to Use Asana
|
|
29
|
+
|
|
30
|
+
- **"What's my queue?"** — list tasks assigned to me, sorted by due date or project
|
|
31
|
+
- **"What's blocking this PR?"** — fetch the linked Asana task and its comments / dependencies
|
|
32
|
+
- **"Where did the spec for X get written?"** — search project descriptions, task notes, comments
|
|
33
|
+
- **"Who's owning the Y rollout?"** — query project membership, custom-field assignment
|
|
34
|
+
- **"What did I miss this week?"** — list recent activity (comments, status changes) on watched projects
|
|
35
|
+
- **"Create a follow-up task"** — write a new task with assignee, due date, project membership, custom fields
|
|
36
|
+
- **Status updates from terminal-resident work** — pull progress from the codebase, paste into a project status update
|
|
37
|
+
|
|
38
|
+
## Common MCP Tools
|
|
39
|
+
|
|
40
|
+
The exact tool list depends on Asana account features. Common tools (not exhaustive):
|
|
41
|
+
|
|
42
|
+
- `mcp__asana__list_tasks` — query tasks by project, assignee, status, search string, due date
|
|
43
|
+
- `mcp__asana__get_task` — fetch full task details by GID (notes, comments, custom fields, dependencies, subtasks)
|
|
44
|
+
- `mcp__asana__create_task` — create new tasks with assignee, project membership, custom fields
|
|
45
|
+
- `mcp__asana__update_task` — modify task fields (assignee, due date, status, custom fields)
|
|
46
|
+
- `mcp__asana__add_comment` — post a comment on a task
|
|
47
|
+
- `mcp__asana__list_projects` — enumerate projects in a workspace or team
|
|
48
|
+
- `mcp__asana__get_project` — fetch project details (members, sections, custom field schema)
|
|
49
|
+
- `mcp__asana__list_workspaces` — list workspaces the authenticated user belongs to
|
|
50
|
+
- `mcp__asana__search` — full-text search across tasks, projects, comments
|
|
51
|
+
- `mcp__asana__list_users` — list users in a workspace (for assignment lookups)
|
|
52
|
+
|
|
53
|
+
The full surface is product-enablement-dependent. Run `mcp__asana__list_tools` (or the discovery tool for your version) once after OAuth completes to see what's available in your account.
|
|
54
|
+
|
|
55
|
+
## Patterns
|
|
56
|
+
|
|
57
|
+
**Linking PRs to tasks**: when a commit message or PR description references an Asana task GID or URL, use `mcp__asana__get_task` to pull the task's spec/comments into context. This is far more accurate than guessing from the PR title.
|
|
58
|
+
|
|
59
|
+
**Status updates from completed work**: when wrapping up a feature, query Asana for the related task, then call `mcp__asana__add_comment` with a summary of what landed (commit SHA + changelog entry + open follow-ups). Better audit trail than out-of-band Slack updates.
|
|
60
|
+
|
|
61
|
+
**Avoid bulk operations without confirmation**: Asana does NOT have a robust "undo" mechanism for bulk edits. If you're about to update 50 tasks via `update_task`, confirm with the user first. The cost of asking is small; the cost of accidentally clearing 50 due-dates is high.
|
|
62
|
+
|
|
63
|
+
**Don't write OAuth tokens to logs**: even though tokens are short-lived (1 hour), they're still credentials. If a tool call fails and you're tempted to log the request for debugging, redact the `Authorization` header.
|
|
64
|
+
|
|
65
|
+
## Troubleshooting
|
|
66
|
+
|
|
67
|
+
**"OAuth flow didn't open"**: the MCP server URL is wrong or unreachable. Check `.indusk/extensions/asana/.env` — should be exactly `https://mcp.asana.com/v2/mcp`.
|
|
68
|
+
|
|
69
|
+
**"Authentication required" errors after a long pause**: the refresh token expired. Re-trigger an MCP call → OAuth re-prompts → done. Refresh tokens last ~14 days for inactive sessions.
|
|
70
|
+
|
|
71
|
+
**"Permission denied" on a known task**: the OAuth-authorizing user doesn't have access. Either they're not a member of the project, or the task was moved to a private project after authorization. Add the user to the project in Asana, then retry.
|
|
72
|
+
|
|
73
|
+
**"Tool not found"**: the toolset isn't enabled in your Asana plan. Some advanced tools (custom fields, time tracking, Goals) require Business/Enterprise tiers. Discover available tools via the listing tool, not by guessing.
|
|
74
|
+
|
|
75
|
+
**Rate limits**: Asana's API has per-user rate limits. Bulk-style scripts (listing 1000+ tasks across many projects) can hit them. If you see 429 responses, slow down or batch differently.
|
|
76
|
+
|
|
77
|
+
## See Also
|
|
78
|
+
|
|
79
|
+
- [Extensions index](../README.md) — full catalog of InDusk extensions with decision matrix
|
|
80
|
+
- [Asana V2 MCP docs](https://developers.asana.com/docs/using-asanas-mcp-server) — canonical reference
|
|
81
|
+
- [`dash0/skill.md`](../dash0/skill.md), [`datadog/skill.md`](../datadog/skill.md) — sibling extensions wrapping observability MCP servers (different problem space)
|
|
@@ -231,3 +231,10 @@ Dash0 ingests standard OpenTelemetry data. If your services already export OTLP
|
|
|
231
231
|
- **Default time range is narrow**: Always specify `--from` when querying logs. Without it, you may get empty results.
|
|
232
232
|
- **CLI has no trace search**: The CLI can only fetch traces by ID (`traces get <id>`), not search for them. Use the MCP `getSpans` tool to search spans — it supports filters and time ranges. The CLI requires you to already have a trace ID.
|
|
233
233
|
- **Profile auth may not load in Claude Code shell**: Run `source ~/.zshrc` before `dash0` commands if auth fails.
|
|
234
|
+
|
|
235
|
+
## See Also
|
|
236
|
+
|
|
237
|
+
- [Extensions index](../README.md) — full catalog of InDusk extensions with decision matrix
|
|
238
|
+
- [`datadog/skill.md`](../datadog/skill.md) — sibling observability extension; alternative SaaS vendor (mutually exclusive with dash0 in practice)
|
|
239
|
+
- [`local-telemetry/skill.md`](../local-telemetry/skill.md) — orthogonal observability for dev-time only (no SaaS account needed)
|
|
240
|
+
- [`otel/skill.md`](../otel/skill.md) — emit-side instrumentation patterns; pairs with dash0 to instrument services that emit telemetry to Dash0
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# datadog extension env template
|
|
2
|
+
#
|
|
3
|
+
# Datadog's official remote MCP server uses OAuth on first session launch —
|
|
4
|
+
# there is NO API token to paste here (unlike dash0, which uses a Bearer
|
|
5
|
+
# token). The only thing this .env configures is which regional endpoint
|
|
6
|
+
# the MCP server points at. Pick the URL matching your Datadog site.
|
|
7
|
+
#
|
|
8
|
+
# When this extension is enabled on a project, copy this file to
|
|
9
|
+
# `.indusk/extensions/datadog/.env` and uncomment the URL line for your
|
|
10
|
+
# region. The Datadog MCP server auto-registers on the next
|
|
11
|
+
# `indusk extensions enable datadog` (or `indusk update`).
|
|
12
|
+
#
|
|
13
|
+
# On first Claude Code session after registration, you'll be prompted to
|
|
14
|
+
# complete OAuth. The browser flow handles auth; nothing else lives here.
|
|
15
|
+
|
|
16
|
+
# --- Required: pick ONE regional endpoint ---
|
|
17
|
+
|
|
18
|
+
# US1 (datadoghq.com — the default for most US-based accounts):
|
|
19
|
+
DATADOG_MCP_URL=https://mcp.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=all
|
|
20
|
+
|
|
21
|
+
# US3 (us3.datadoghq.com):
|
|
22
|
+
# DATADOG_MCP_URL=https://mcp.us3.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=all
|
|
23
|
+
|
|
24
|
+
# US5 (us5.datadoghq.com):
|
|
25
|
+
# DATADOG_MCP_URL=https://mcp.us5.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=all
|
|
26
|
+
|
|
27
|
+
# EU1 (datadoghq.eu):
|
|
28
|
+
# DATADOG_MCP_URL=https://mcp.datadoghq.eu/api/unstable/mcp-server/mcp?toolsets=all
|
|
29
|
+
|
|
30
|
+
# AP1 (ap1.datadoghq.com):
|
|
31
|
+
# DATADOG_MCP_URL=https://mcp.ap1.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=all
|
|
32
|
+
|
|
33
|
+
# US1-FED (ddog-gov.com):
|
|
34
|
+
# DATADOG_MCP_URL=https://mcp.ddog-gov.com/api/unstable/mcp-server/mcp?toolsets=all
|
|
35
|
+
|
|
36
|
+
# --- Toolset filtering (optional) ---
|
|
37
|
+
#
|
|
38
|
+
# `toolsets=all` enables every available toolset (APM, Logs, Metrics,
|
|
39
|
+
# Monitors, Dashboards, Security Signals, Error Tracking, Feature Flags,
|
|
40
|
+
# DBM, LLM Observability, etc.). To enable only a subset, replace with
|
|
41
|
+
# a comma-separated list, e.g.:
|
|
42
|
+
#
|
|
43
|
+
# ?toolsets=apm,logs,metrics
|
|
44
|
+
#
|
|
45
|
+
# Valid toolsets vary by Datadog product enablement; see
|
|
46
|
+
# https://docs.datadoghq.com/bits_ai/mcp_server/setup/ for the current
|
|
47
|
+
# list. `all` works best with clients that do their own tool filtering
|
|
48
|
+
# (Claude Code does).
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "datadog",
|
|
3
|
+
"description": "Datadog observability — query logs, traces, metrics, monitors, dashboards, security signals via Datadog's official remote MCP server (16+ tools, OAuth)",
|
|
4
|
+
"provides": {
|
|
5
|
+
"skill": true,
|
|
6
|
+
"health_checks": [
|
|
7
|
+
{
|
|
8
|
+
"name": "datadog-mcp-configured",
|
|
9
|
+
"command": "node -e \"const m=JSON.parse(require('fs').readFileSync('.mcp.json','utf-8'));process.exit(m.mcpServers?.datadog ? 0 : 1)\""
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"mcp_server": {
|
|
14
|
+
"type": "http",
|
|
15
|
+
"url": "DATADOG_MCP_URL",
|
|
16
|
+
"setup_instructions": [
|
|
17
|
+
"1. Copy the template:",
|
|
18
|
+
" cp .indusk/extensions/datadog/.env.example .indusk/extensions/datadog/.env",
|
|
19
|
+
"2. Edit .env and pick the regional endpoint matching your Datadog site (US1, US3, US5, EU1, US1-FED, AP1).",
|
|
20
|
+
"3. Run 'indusk extensions enable datadog' again (or 'indusk update'). The MCP server gets registered in '.mcp.json'.",
|
|
21
|
+
"4. On first session in Claude Code, complete the OAuth flow when prompted — no API token in env vars (different from dash0)."
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
"hooks": {
|
|
25
|
+
"on_enable": "echo 'Datadog extension enabled. Complete OAuth on first Claude Code session.'"
|
|
26
|
+
},
|
|
27
|
+
"detect": {
|
|
28
|
+
"mcp_server": "datadog"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Datadog Observability
|
|
2
|
+
|
|
3
|
+
Datadog provides access to your observability data — logs, traces, metrics, monitors, dashboards, security signals, error tracking, feature flags, DBM, LLM observability — via Datadog's official remote MCP server. You query it with `mcp__datadog__*` tools during a Claude Code session.
|
|
4
|
+
|
|
5
|
+
## One Interface (No Local CLI)
|
|
6
|
+
|
|
7
|
+
Datadog ships an **official remote MCP server** (launched March 2026). It's hosted by Datadog at a regional endpoint (US1/US3/US5/EU1/AP1/US1-FED) and exposes 16+ core tools plus optional toolsets for APM, Error Tracking, Feature Flags, DBM, Security, and LLM Observability.
|
|
8
|
+
|
|
9
|
+
Unlike dash0, there is **no separate `datadog` CLI** that this extension wires up. Datadog's official `dd-cli` and the `datadog-agent` daemon are unrelated — they're for emit-side instrumentation, not for AI agents querying observability data. All in-session queries flow through `mcp__datadog__*` tools.
|
|
10
|
+
|
|
11
|
+
## Auth Model — OAuth, Not Tokens
|
|
12
|
+
|
|
13
|
+
Datadog uses **OAuth on first session launch**, not a static API token. This is different from dash0 (Bearer token in headers). What this means in practice:
|
|
14
|
+
|
|
15
|
+
- `.indusk/extensions/datadog/.env` only has `DATADOG_MCP_URL` (regional endpoint). No secrets.
|
|
16
|
+
- On first Claude Code session after the extension enables, you'll see an OAuth prompt — choose your Datadog account, complete the browser flow.
|
|
17
|
+
- Subsequent sessions reuse the OAuth token transparently. If it expires, the next session re-prompts.
|
|
18
|
+
- The OAuth-vs-token split means `datadog/.env` is safer to share (no credentials), but the extension is harder to use in headless / CI contexts where OAuth can't complete.
|
|
19
|
+
|
|
20
|
+
## Extension Scope — Read-Side Only
|
|
21
|
+
|
|
22
|
+
This extension wires the **read side** — how indusk-mcp and Claude *query* Datadog. It does NOT configure how your services *emit* telemetry to Datadog. Service emit (the Datadog agent, `dd-trace`, OTLP forwarding to Datadog's intake endpoint, etc.) is a runtime concern managed elsewhere — your project's env-management setup (root `.env.local`, composable.env profile-scoped component, Docker compose env, Vercel env, etc.).
|
|
23
|
+
|
|
24
|
+
The split: **datadog extension = query Datadog (read). Service env = emit to Datadog (write).** Keeping them separate means you can point dev services at a local daemon while the datadog extension still queries staging/prod data from the same session.
|
|
25
|
+
|
|
26
|
+
## When to Use Datadog
|
|
27
|
+
|
|
28
|
+
- **Test failures**: query recent logs/traces to see what happened in the service during the test
|
|
29
|
+
- **Debugging production issues**: search logs for errors, find related traces by trace ID
|
|
30
|
+
- **Performance investigation**: query metrics to check latency, throughput, error rates
|
|
31
|
+
- **Deployment verification**: check error rates and trace patterns after deploying a change
|
|
32
|
+
- **Monitor inspection**: list active monitors, check alert history
|
|
33
|
+
- **Security signals**: query security findings, check posture
|
|
34
|
+
- **LLM observability**: if your project uses Datadog's LLM Observability product, the MCP exposes prompt/response traces
|
|
35
|
+
|
|
36
|
+
If your project uses Dash0 instead of Datadog, prefer the dash0 extension — both are observability tools but they're typically not used in the same project.
|
|
37
|
+
|
|
38
|
+
## Key MCP Tools
|
|
39
|
+
|
|
40
|
+
The exact tool list depends on your toolset filter (`?toolsets=all` enables everything; `?toolsets=apm,logs,metrics` is a focused subset). Common tools include:
|
|
41
|
+
|
|
42
|
+
- `mcp__datadog__list_logs` / `mcp__datadog__search_logs` — query logs by query string + time range
|
|
43
|
+
- `mcp__datadog__get_trace` — fetch a trace by ID
|
|
44
|
+
- `mcp__datadog__list_services` — enumerate APM-instrumented services
|
|
45
|
+
- `mcp__datadog__query_metrics` — run metric queries
|
|
46
|
+
- `mcp__datadog__list_monitors` / `mcp__datadog__get_monitor` — monitor inspection
|
|
47
|
+
- `mcp__datadog__list_dashboards` — dashboard inventory
|
|
48
|
+
- `mcp__datadog__list_security_signals` — security findings
|
|
49
|
+
- `mcp__datadog__list_errors` — error tracking issues
|
|
50
|
+
|
|
51
|
+
The actual surface is product-enablement-dependent on your Datadog account. Run `mcp__datadog__list_tools` (or whatever the discovery tool is for your version) once after OAuth completes to see what's available.
|
|
52
|
+
|
|
53
|
+
## Troubleshooting
|
|
54
|
+
|
|
55
|
+
**"OAuth flow didn't open"**: the MCP server is unreachable or the URL is malformed. Re-check `.indusk/extensions/datadog/.env` and confirm the regional endpoint matches your Datadog site.
|
|
56
|
+
|
|
57
|
+
**"OAuth completed but tools return permission errors"**: your Datadog account doesn't have the product enabled (e.g., querying `list_security_signals` without Cloud Security Management enabled). Either enable the product in Datadog admin or narrow the toolsets filter to products you do have.
|
|
58
|
+
|
|
59
|
+
**"Empty results for known logs"**: the query may not match the log structure. Datadog log search uses faceted query syntax — start broader (just a service name + time range) before adding filters.
|
|
60
|
+
|
|
61
|
+
**"Tool calls are slow"**: Datadog's MCP server caches some queries; cold queries take longer. Subsequent calls in the same session resume cached state. If consistently slow, check Datadog status (status.datadoghq.com).
|
|
62
|
+
|
|
63
|
+
## See Also
|
|
64
|
+
|
|
65
|
+
- [Extensions index](../README.md) — full catalog of InDusk extensions with decision matrix
|
|
66
|
+
- [`dash0/skill.md`](../dash0/skill.md) — sibling observability extension; same problem space, different vendor + auth model (mutually exclusive in practice)
|
|
67
|
+
- [`local-telemetry/skill.md`](../local-telemetry/skill.md) — orthogonal observability for dev-time only
|
|
68
|
+
- [`otel/skill.md`](../otel/skill.md) — emit-side instrumentation patterns
|
|
69
|
+
- [Datadog MCP Server docs](https://docs.datadoghq.com/bits_ai/mcp_server/) — the canonical reference; toolset list, auth flow, regional endpoints
|
|
@@ -150,6 +150,8 @@ Kubernetes: ConfigMap + `envFrom:`. Docker compose: `env_file:` / `environment:`
|
|
|
150
150
|
|
|
151
151
|
## See also
|
|
152
152
|
|
|
153
|
+
- [Extensions index](../README.md) — full catalog of InDusk extensions with decision matrix
|
|
153
154
|
- `apps/indusk-docs/src/reference/telemetry/` — CLI + overview docs
|
|
154
155
|
- `.indusk/planning/local-telemetry/adr.md` — why this exists
|
|
155
|
-
- `dash0`
|
|
156
|
+
- [`dash0/skill.md`](../dash0/skill.md), [`datadog/skill.md`](../datadog/skill.md) — staging/prod observability counterparts (orthogonal to local-telemetry)
|
|
157
|
+
- [`otel/skill.md`](../otel/skill.md) — emit-side instrumentation patterns; pairs with whichever query-side extension you use
|
package/hooks/check-gates.js
CHANGED
|
@@ -305,14 +305,21 @@ for (const item of newlyChecked) {
|
|
|
305
305
|
}
|
|
306
306
|
|
|
307
307
|
// ------------------------------------------------------------------
|
|
308
|
-
// Trajectory enforcement:
|
|
309
|
-
//
|
|
310
|
-
// with `Passes at: Phase K` where K <= N must be in state `passing`,
|
|
311
|
-
// `skipped`, or `blocked`. Planned/writable/written states fail the
|
|
312
|
-
// phase close — the whole point of the tests-first-planning system is
|
|
313
|
-
// that deferral is structurally impossible.
|
|
308
|
+
// Trajectory enforcement: two gates fire when an implementation item
|
|
309
|
+
// in Phase N is checked.
|
|
314
310
|
//
|
|
315
|
-
//
|
|
311
|
+
// Gate A — test-first authoring (per advancing phase):
|
|
312
|
+
// Every trajectory row with `Writable at: Phase N` must be in state
|
|
313
|
+
// `written`, `passing`, `skipped`, or `blocked` — NOT `planned`,
|
|
314
|
+
// `writable`, or `unknown`. Phase N's tests must exist (as RED at
|
|
315
|
+
// minimum) before its implementation items can be marked done.
|
|
316
|
+
//
|
|
317
|
+
// Gate B — phase close (per closed prior phase):
|
|
318
|
+
// Every trajectory row with `Passes at: Phase K` where K < N must
|
|
319
|
+
// be in state `passing`, `skipped`, or `blocked`. The whole point
|
|
320
|
+
// of tests-first is that deferral is structurally impossible.
|
|
321
|
+
//
|
|
322
|
+
// Both skipped if the impl has no `## Test Trajectory` section.
|
|
316
323
|
// ------------------------------------------------------------------
|
|
317
324
|
|
|
318
325
|
const hasTrajectorySection = /^##\s+Test Trajectory\b/m.test(newFullContent);
|
|
@@ -324,6 +331,35 @@ if (hasTrajectorySection) {
|
|
|
324
331
|
|
|
325
332
|
if (advancingPhases.size > 0) {
|
|
326
333
|
const trajectory = parseTrajectoryFromBody(newFullContent);
|
|
334
|
+
|
|
335
|
+
// Gate A: test-first authoring for the advancing phase itself.
|
|
336
|
+
const testFirstBlockers = [];
|
|
337
|
+
for (const advancingPhase of advancingPhases) {
|
|
338
|
+
const unauthored = trajectory.rows.filter(
|
|
339
|
+
(row) =>
|
|
340
|
+
row.writableAt === advancingPhase &&
|
|
341
|
+
row.state !== "written" &&
|
|
342
|
+
row.state !== "passing" &&
|
|
343
|
+
row.state !== "skipped" &&
|
|
344
|
+
row.state !== "blocked",
|
|
345
|
+
);
|
|
346
|
+
for (const row of unauthored) {
|
|
347
|
+
testFirstBlockers.push({ phase: advancingPhase, row });
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
if (testFirstBlockers.length > 0) {
|
|
352
|
+
const msg = testFirstBlockers
|
|
353
|
+
.map(
|
|
354
|
+
(b) =>
|
|
355
|
+
`Phase ${b.phase} test-first violation: row ${b.row.id} is Writable at: Phase ${b.phase} but still ${b.row.state}. Author it as RED before marking implementation items done.`,
|
|
356
|
+
)
|
|
357
|
+
.join("\n");
|
|
358
|
+
process.stderr.write(`${msg}\n`);
|
|
359
|
+
process.exit(2);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Gate B: every prior phase must be closable.
|
|
327
363
|
const allBlockers = [];
|
|
328
364
|
for (const advancingPhase of advancingPhases) {
|
|
329
365
|
// Closing phases = every phase strictly before advancingPhase
|
|
@@ -408,10 +444,12 @@ function parseTrajectoryFromBody(implContent) {
|
|
|
408
444
|
const rec = {};
|
|
409
445
|
for (let j = 0; j < keys.length; j++) rec[keys[j]] = cells[j];
|
|
410
446
|
if (!rec.id) continue;
|
|
447
|
+
const writableMatch = (rec.writableAt || "").match(/^\s*Phase\s+(\d+)\s*$/i);
|
|
411
448
|
const passesMatch = (rec.passesAt || "").match(/^\s*Phase\s+(\d+)\s*$/i);
|
|
412
449
|
rows.push({
|
|
413
450
|
id: rec.id.trim(),
|
|
414
451
|
asserts: (rec.asserts || "").trim(),
|
|
452
|
+
writableAt: writableMatch ? Number.parseInt(writableMatch[1], 10) : Number.NaN,
|
|
415
453
|
passesAt: passesMatch ? Number.parseInt(passesMatch[1], 10) : Number.NaN,
|
|
416
454
|
state: (rec.state || "").toLowerCase().trim(),
|
|
417
455
|
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Use underscore-form group IDs when querying Graphiti — and always pass `group_ids` explicitly
|
|
2
|
+
|
|
3
|
+
Graphiti episodes are partitioned by `group_id`. Two failure modes are silent and look identical to "the graph has nothing":
|
|
4
|
+
|
|
5
|
+
1. **Hyphens in `group_id` hit a RediSearch syntax error.** A query like `mcp__graphiti__search_nodes({ query: "...", group_ids: ["dawn-fde-toolkit"] })` triggers a RediSearch tokenizer error; the lib catches it and returns empty. The agent concludes "no episodes." Fix: use the underscore form (`dawn_fde_toolkit`). InDusk's `getProjectGroupId(projectRoot)` helper sanitizes hyphen → underscore on writes; **the same convention applies on reads** — the bytes the writer used are the bytes the reader must use.
|
|
6
|
+
|
|
7
|
+
2. **Omitting `group_ids` doesn't scan all groups — it returns empty.** Falling back to `mcp__graphiti__search_nodes({ query: "..." })` (no filter) silently produces nothing. Always pass `group_ids: [<project-group>, "shared"]` explicitly.
|
|
8
|
+
|
|
9
|
+
The bug is silent both directions: a malformed group_id and a missing group_id both look like "graph empty." If you're querying Graphiti and getting nothing, the first check is the group_id form, not "is Graphiti down."
|
|
10
|
+
|
|
11
|
+
**Discovering your project's group**: call `mcp__indusk__get_project_info` and use `.project_group`. Don't try to derive it from the project basename — InDusk applies sanitization rules (lowercase, hyphen → underscore, hyphens around digits) that the basename doesn't match.
|
|
12
|
+
|
|
13
|
+
**Two minimum query shapes**:
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
// Recall from project + cross-project shared knowledge
|
|
17
|
+
mcp__graphiti__search_nodes({
|
|
18
|
+
query: "...",
|
|
19
|
+
group_ids: [project_group, "shared"],
|
|
20
|
+
max_nodes: 8,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Just one group
|
|
24
|
+
mcp__graphiti__search_memory_facts({
|
|
25
|
+
query: "...",
|
|
26
|
+
group_ids: [project_group],
|
|
27
|
+
max_facts: 5,
|
|
28
|
+
});
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
If you ever see empty results from Graphiti and you "thought you wrote there earlier," the answer 95% of the time is wrong group_id form, not data loss.
|
package/package.json
CHANGED
package/skills/catchup.md
CHANGED
|
@@ -63,15 +63,25 @@ Read it fully. Don't skim.
|
|
|
63
63
|
CLAUDE.md is the stable, slow-changing layer of project memory. Graphiti is the fast, temporal layer — it captures decisions, corrections, and retrospective insights as they happen. Catchup pulls both layers so the agent starts the session with full context.
|
|
64
64
|
|
|
65
65
|
**Recall recent decisions and lessons:**
|
|
66
|
+
|
|
67
|
+
First, fetch the project's Graphiti group via the InDusk MCP (do NOT guess from project basename — InDusk applies sanitization rules):
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
mcp__indusk__get_project_info()
|
|
71
|
+
// returns { project_group: "<sanitized>", scm: ..., ... }
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Then query Graphiti with that group plus `"shared"` for cross-project knowledge:
|
|
75
|
+
|
|
66
76
|
```
|
|
67
77
|
mcp__graphiti__search_nodes({
|
|
68
78
|
query: "recent decisions and lessons",
|
|
69
|
-
group_ids: [
|
|
79
|
+
group_ids: [<project_group from get_project_info>, "shared"],
|
|
70
80
|
max_nodes: 8
|
|
71
81
|
})
|
|
72
82
|
```
|
|
73
83
|
|
|
74
|
-
|
|
84
|
+
**Why the explicit group lookup matters**: hyphen-containing group IDs (`dawn-fde-toolkit`) hit a RediSearch syntax error and silently return empty. Omitting `group_ids` entirely also returns empty — Graphiti does NOT scan all groups by default. Both failure modes look identical to "graph empty," so always pass the sanitized `project_group` value plus `"shared"` explicitly. See the `community-graphiti-group-id-underscores` lesson for the full pattern.
|
|
75
85
|
|
|
76
86
|
**Surface contradictions:** look at the returned nodes for any whose `attributes` reference recently invalidated facts (Graphiti marks superseded facts with `invalid_at`). If a recently invalidated fact relates to an active plan or current code area, flag it to the user — those are places where assumptions changed.
|
|
77
87
|
|
|
@@ -63,7 +63,14 @@ const cloneDiagram = () => {
|
|
|
63
63
|
diagramHTML.value = diagramRef.value.innerHTML;
|
|
64
64
|
};
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
// IMPORTANT: handler names must NOT be prefixed with `_`. The template binds
|
|
67
|
+
// to `toggleExpand` / `zoomIn` / `zoomOut`; an underscore prefix makes Vue
|
|
68
|
+
// resolve those bindings to undefined → silent no-op on click. ESLint's
|
|
69
|
+
// `no-unused-vars` with `argsIgnorePattern: "^_"` may try to auto-fix these
|
|
70
|
+
// as "unused" because the linter can't see template references — turn off
|
|
71
|
+
// `no-unused-vars` for `<script setup>` blocks, or enable
|
|
72
|
+
// `vue/no-unused-properties` so the parser counts template references as uses.
|
|
73
|
+
const toggleExpand = () => {
|
|
67
74
|
if (!isExpanded.value) {
|
|
68
75
|
cloneDiagram();
|
|
69
76
|
}
|
|
@@ -76,10 +83,27 @@ const _toggleExpand = () => {
|
|
|
76
83
|
expandedDiagramRef.value.querySelector("svg") || expandedDiagramRef.value.firstChild;
|
|
77
84
|
if (svgElement) {
|
|
78
85
|
panzoomInstance.value = panzoom(svgElement, {
|
|
79
|
-
bounds: true
|
|
80
|
-
|
|
86
|
+
// `bounds: true` + `boundsPadding: 0.1` silently locks panning when
|
|
87
|
+
// the rendered SVG roughly fills the modal — drag does nothing.
|
|
88
|
+
// Figma/Miro convention is unbounded panning with a reset button.
|
|
89
|
+
bounds: false,
|
|
81
90
|
minZoom: 0.05,
|
|
82
91
|
maxZoom: 10,
|
|
92
|
+
// Wheel-to-pan with Cmd/Ctrl-wheel-to-zoom — panzoom's default
|
|
93
|
+
// (wheel-to-zoom) feels wrong for diagram viewers. Returning
|
|
94
|
+
// `false` from `beforeWheel` aborts panzoom's wheel handler so
|
|
95
|
+
// our custom logic runs instead.
|
|
96
|
+
beforeWheel(e) {
|
|
97
|
+
if (e.ctrlKey || e.metaKey) {
|
|
98
|
+
// Let panzoom handle zoom — return falsy so it proceeds.
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
// Plain wheel = pan. Move by the wheel delta and abort the
|
|
102
|
+
// default zoom path.
|
|
103
|
+
e.preventDefault();
|
|
104
|
+
panzoomInstance.value?.moveBy(-e.deltaX, -e.deltaY, false);
|
|
105
|
+
return true;
|
|
106
|
+
},
|
|
83
107
|
});
|
|
84
108
|
panzoomInstance.value.on("zoom", () => {
|
|
85
109
|
zoom.value = panzoomInstance.value.getTransform().scale;
|
|
@@ -97,7 +121,7 @@ const _toggleExpand = () => {
|
|
|
97
121
|
}
|
|
98
122
|
};
|
|
99
123
|
|
|
100
|
-
const
|
|
124
|
+
const zoomIn = () => {
|
|
101
125
|
if (panzoomInstance.value) {
|
|
102
126
|
const currentZoom = panzoomInstance.value.getTransform().scale;
|
|
103
127
|
if (currentZoom < 10) {
|
|
@@ -106,7 +130,7 @@ const _zoomIn = () => {
|
|
|
106
130
|
}
|
|
107
131
|
};
|
|
108
132
|
|
|
109
|
-
const
|
|
133
|
+
const zoomOut = () => {
|
|
110
134
|
if (panzoomInstance.value) {
|
|
111
135
|
const currentZoom = panzoomInstance.value.getTransform().scale;
|
|
112
136
|
if (currentZoom > 0.05) {
|
/package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|