@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.
Files changed (33) hide show
  1. package/admin/.next/BUILD_ID +1 -1
  2. package/admin/.next/build-manifest.json +3 -3
  3. package/admin/.next/fallback-build-manifest.json +3 -3
  4. package/admin/.next/server/app/_global-error.html +1 -1
  5. package/admin/.next/server/app/_global-error.rsc +1 -1
  6. package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  7. package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  8. package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  9. package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  10. package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  11. package/admin/.next/server/middleware-build-manifest.js +3 -3
  12. package/admin/.next/server/pages/500.html +1 -1
  13. package/admin/.next/trace +1 -1
  14. package/admin/.next/trace-build +1 -1
  15. package/dist/bin/commands/init.js +1 -0
  16. package/dist/tools/system-tools.js +29 -0
  17. package/extensions/README.md +123 -0
  18. package/extensions/asana/.env.example +35 -0
  19. package/extensions/asana/manifest.json +30 -0
  20. package/extensions/asana/skill.md +81 -0
  21. package/extensions/dash0/skill.md +7 -0
  22. package/extensions/datadog/.env.example +48 -0
  23. package/extensions/datadog/manifest.json +30 -0
  24. package/extensions/datadog/skill.md +69 -0
  25. package/extensions/local-telemetry/skill.md +3 -1
  26. package/hooks/check-gates.js +45 -7
  27. package/lessons/community/community-graphiti-group-id-underscores.md +31 -0
  28. package/package.json +1 -1
  29. package/skills/catchup.md +12 -2
  30. package/templates/FullscreenDiagram.vue +29 -5
  31. /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_buildManifest.js +0 -0
  32. /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_clientMiddlewareManifest.js +0 -0
  33. /package/admin/.next/static/{MFqWHabwFXI3-RTjRJ09U → 69kWAi_Oc3bJTtW4rq420}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- MFqWHabwFXI3-RTjRJ09U
1
+ 69kWAi_Oc3bJTtW4rq420
@@ -7,9 +7,9 @@
7
7
  "static/chunks/03~yq9q893hmn.js"
8
8
  ],
9
9
  "lowPriorityFiles": [
10
- "static/MFqWHabwFXI3-RTjRJ09U/_buildManifest.js",
11
- "static/MFqWHabwFXI3-RTjRJ09U/_ssgManifest.js",
12
- "static/MFqWHabwFXI3-RTjRJ09U/_clientMiddlewareManifest.js"
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/MFqWHabwFXI3-RTjRJ09U/_buildManifest.js",
9
- "static/MFqWHabwFXI3-RTjRJ09U/_ssgManifest.js",
10
- "static/MFqWHabwFXI3-RTjRJ09U/_clientMiddlewareManifest.js"
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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\":\"MFqWHabwFXI3-RTjRJ09U\"}\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>
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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":"MFqWHabwFXI3-RTjRJ09U"}
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":"MFqWHabwFXI3-RTjRJ09U"}
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":"MFqWHabwFXI3-RTjRJ09U"}
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":"MFqWHabwFXI3-RTjRJ09U"}
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":"MFqWHabwFXI3-RTjRJ09U"}
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":"MFqWHabwFXI3-RTjRJ09U"}
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/MFqWHabwFXI3-RTjRJ09U/_buildManifest.js",
11
- "static/MFqWHabwFXI3-RTjRJ09U/_ssgManifest.js",
12
- "static/MFqWHabwFXI3-RTjRJ09U/_clientMiddlewareManifest.js"
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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\":\"MFqWHabwFXI3-RTjRJ09U\"}\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>
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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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":130,"timestamp":3435937007771,"id":4,"parentId":1,"tags":{},"startTime":1778082807281,"traceId":"35bd8d6fed978ad2"},{"name":"load-custom-routes","duration":221,"timestamp":3435937007959,"id":5,"parentId":1,"tags":{},"startTime":1778082807282,"traceId":"35bd8d6fed978ad2"},{"name":"create-dist-dir","duration":95,"timestamp":3435937008196,"id":6,"parentId":1,"tags":{},"startTime":1778082807282,"traceId":"35bd8d6fed978ad2"},{"name":"clean","duration":26993,"timestamp":3435937008973,"id":7,"parentId":1,"tags":{},"startTime":1778082807283,"traceId":"35bd8d6fed978ad2"},{"name":"discover-routes","duration":6492,"timestamp":3435937045218,"id":8,"parentId":1,"tags":{},"startTime":1778082807319,"traceId":"35bd8d6fed978ad2"},{"name":"create-root-mapping","duration":36,"timestamp":3435937051813,"id":9,"parentId":1,"tags":{},"startTime":1778082807325,"traceId":"35bd8d6fed978ad2"},{"name":"generate-route-types","duration":44458,"timestamp":3435937052597,"id":10,"parentId":1,"tags":{},"startTime":1778082807326,"traceId":"35bd8d6fed978ad2"},{"name":"public-dir-conflict-check","duration":44,"timestamp":3435937097165,"id":11,"parentId":1,"tags":{},"startTime":1778082807371,"traceId":"35bd8d6fed978ad2"},{"name":"generate-routes-manifest","duration":1357,"timestamp":3435937097246,"id":12,"parentId":1,"tags":{},"startTime":1778082807371,"traceId":"35bd8d6fed978ad2"},{"name":"run-turbopack","duration":2492581,"timestamp":3435937100895,"id":14,"parentId":1,"tags":{},"startTime":1778082807374,"traceId":"35bd8d6fed978ad2"},{"name":"turbopack-build-events","duration":45,"timestamp":3435937313358,"id":15,"parentId":1,"tags":{},"startTime":1778082807587,"traceId":"35bd8d6fed978ad2"},{"name":"run-typescript","duration":2813160,"timestamp":3435939624654,"id":16,"parentId":1,"tags":{},"startTime":1778082809898,"traceId":"35bd8d6fed978ad2"},{"name":"generate-required-server-files","duration":3366,"timestamp":3435942440285,"id":18,"parentId":1,"tags":{},"startTime":1778082812714,"traceId":"35bd8d6fed978ad2"},{"name":"check-static-error-page","duration":7550,"timestamp":3435942476462,"id":20,"parentId":19,"tags":{},"startTime":1778082812750,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":268268,"timestamp":3435942488406,"id":30,"parentId":22,"tags":{},"startTime":1778082812762,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":277489,"timestamp":3435942479312,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1778082812753,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":311278,"timestamp":3435942488436,"id":31,"parentId":23,"tags":{},"startTime":1778082812762,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":320104,"timestamp":3435942479651,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1778082812753,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":316172,"timestamp":3435942500206,"id":32,"parentId":28,"tags":{},"startTime":1778082812774,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":332446,"timestamp":3435942483964,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1778082812758,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":328171,"timestamp":3435942488269,"id":29,"parentId":21,"tags":{},"startTime":1778082812762,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":337935,"timestamp":3435942478518,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1778082812752,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":337539,"timestamp":3435942500292,"id":33,"parentId":24,"tags":{},"startTime":1778082812774,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":354895,"timestamp":3435942483007,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1778082812757,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":351085,"timestamp":3435942500460,"id":36,"parentId":27,"tags":{},"startTime":1778082812774,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":367989,"timestamp":3435942483838,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1778082812757,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":351792,"timestamp":3435942500323,"id":34,"parentId":25,"tags":{},"startTime":1778082812774,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":368835,"timestamp":3435942483318,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1778082812757,"traceId":"35bd8d6fed978ad2"},{"name":"is-page-static","duration":356534,"timestamp":3435942500421,"id":35,"parentId":26,"tags":{},"startTime":1778082812774,"traceId":"35bd8d6fed978ad2"},{"name":"check-page","duration":373462,"timestamp":3435942483517,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1778082812757,"traceId":"35bd8d6fed978ad2"},{"name":"static-check","duration":380955,"timestamp":3435942476040,"id":19,"parentId":1,"tags":{},"startTime":1778082812750,"traceId":"35bd8d6fed978ad2"},{"name":"write-routes-manifest","duration":439,"timestamp":3435942858754,"id":38,"parentId":1,"tags":{},"startTime":1778082813132,"traceId":"35bd8d6fed978ad2"},{"name":"load-dotenv","duration":18,"timestamp":3435942869514,"id":41,"parentId":40,"tags":{},"startTime":1778082813143,"traceId":"35bd8d6fed978ad2"},{"name":"run-export-path-map","duration":192,"timestamp":3435942873458,"id":42,"parentId":40,"tags":{},"startTime":1778082813147,"traceId":"35bd8d6fed978ad2"},{"name":"next-export","duration":234498,"timestamp":3435942868890,"id":40,"parentId":1,"tags":{},"startTime":1778082813142,"traceId":"35bd8d6fed978ad2"},{"name":"move-exported-app-global-error-","duration":384,"timestamp":3435943103993,"id":43,"parentId":39,"tags":{},"startTime":1778082813378,"traceId":"35bd8d6fed978ad2"},{"name":"static-generation","duration":243150,"timestamp":3435942861862,"id":39,"parentId":1,"tags":{},"startTime":1778082813135,"traceId":"35bd8d6fed978ad2"},{"name":"write-routes-manifest","duration":113,"timestamp":3435943105088,"id":44,"parentId":1,"tags":{},"startTime":1778082813379,"traceId":"35bd8d6fed978ad2"},{"name":"print-tree-view","duration":2142,"timestamp":3435943112752,"id":45,"parentId":1,"tags":{},"startTime":1778082813386,"traceId":"35bd8d6fed978ad2"},{"name":"write-route-bundle-stats","duration":5644,"timestamp":3435943114906,"id":46,"parentId":1,"tags":{},"startTime":1778082813388,"traceId":"35bd8d6fed978ad2"},{"name":"telemetry-flush","duration":148042,"timestamp":3435943120573,"id":47,"parentId":1,"tags":{},"startTime":1778082813394,"traceId":"35bd8d6fed978ad2"},{"name":"next-build","duration":6393888,"timestamp":3435936874741,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778082807148,"traceId":"35bd8d6fed978ad2"}]
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"}]
@@ -1 +1 @@
1
- [{"name":"run-turbopack","duration":2492581,"timestamp":3435937100895,"id":14,"parentId":1,"tags":{},"startTime":1778082807374,"traceId":"35bd8d6fed978ad2"},{"name":"turbopack-build-events","duration":45,"timestamp":3435937313358,"id":15,"parentId":1,"tags":{},"startTime":1778082807587,"traceId":"35bd8d6fed978ad2"},{"name":"run-typescript","duration":2813160,"timestamp":3435939624654,"id":16,"parentId":1,"tags":{},"startTime":1778082809898,"traceId":"35bd8d6fed978ad2"},{"name":"static-check","duration":380955,"timestamp":3435942476040,"id":19,"parentId":1,"tags":{},"startTime":1778082812750,"traceId":"35bd8d6fed978ad2"},{"name":"static-generation","duration":243150,"timestamp":3435942861862,"id":39,"parentId":1,"tags":{},"startTime":1778082813135,"traceId":"35bd8d6fed978ad2"},{"name":"telemetry-flush","duration":148042,"timestamp":3435943120573,"id":47,"parentId":1,"tags":{},"startTime":1778082813394,"traceId":"35bd8d6fed978ad2"},{"name":"next-build","duration":6393888,"timestamp":3435936874741,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1778082807148,"traceId":"35bd8d6fed978ad2"}]
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` extensionthe staging/prod counterpart
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
@@ -305,14 +305,21 @@ for (const item of newlyChecked) {
305
305
  }
306
306
 
307
307
  // ------------------------------------------------------------------
308
- // Trajectory enforcement: if advancing past Phase N (checking an
309
- // implementation item in Phase N+1 or later), every trajectory row
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
- // Skipped if the impl has no `## Test Trajectory` section (grandfathered).
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infinitedusky/indusk-mcp",
3
- "version": "1.28.11",
3
+ "version": "1.28.14",
4
4
  "description": "InDusk development system — skills, MCP tools, and CLI for structured AI-assisted development",
5
5
  "type": "module",
6
6
  "files": [
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: ["{project-group}", "shared"],
79
+ group_ids: [<project_group from get_project_info>, "shared"],
70
80
  max_nodes: 8
71
81
  })
72
82
  ```
73
83
 
74
- The project group comes from the `getProjectGroupId(projectRoot)` helper (in `apps/indusk-mcp/src/lib/config.ts`). Always include both the project group and `shared` so cross-project conventions surface alongside project-specific knowledge.
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
- const _toggleExpand = () => {
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
- boundsPadding: 0.1,
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 _zoomIn = () => {
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 _zoomOut = () => {
133
+ const zoomOut = () => {
110
134
  if (panzoomInstance.value) {
111
135
  const currentZoom = panzoomInstance.value.getTransform().scale;
112
136
  if (currentZoom > 0.05) {