@infinitedusky/indusk-mcp 1.28.26 → 1.28.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin/.next/BUILD_ID +1 -1
- package/admin/.next/build-manifest.json +3 -3
- package/admin/.next/fallback-build-manifest.json +3 -3
- package/admin/.next/server/app/_global-error.html +1 -1
- package/admin/.next/server/app/_global-error.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/admin/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/admin/.next/server/middleware-build-manifest.js +3 -3
- package/admin/.next/server/pages/500.html +1 -1
- package/admin/.next/trace +1 -1
- package/admin/.next/trace-build +1 -1
- package/dist/bin/cli.js +9 -0
- package/dist/bin/commands/doppler.d.ts +10 -0
- package/dist/bin/commands/doppler.js +179 -0
- package/dist/bin/commands/init.js +6 -0
- package/dist/bin/commands/update.d.ts +7 -0
- package/dist/bin/commands/update.js +21 -0
- package/dist/bin/commands/worktree.js +39 -1
- package/extensions/doppler/.env.example +31 -0
- package/extensions/doppler/manifest.json +25 -0
- package/extensions/doppler/skill.md +100 -0
- package/package.json +1 -1
- /package/admin/.next/static/{TcnArobszE9wONTBBMWOB → yUJyByMf3DK4Az8t9gKZ5}/_buildManifest.js +0 -0
- /package/admin/.next/static/{TcnArobszE9wONTBBMWOB → yUJyByMf3DK4Az8t9gKZ5}/_clientMiddlewareManifest.js +0 -0
- /package/admin/.next/static/{TcnArobszE9wONTBBMWOB → yUJyByMf3DK4Az8t9gKZ5}/_ssgManifest.js +0 -0
package/admin/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
yUJyByMf3DK4Az8t9gKZ5
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_buildManifest.js",
|
|
11
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_ssgManifest.js",
|
|
12
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"polyfillFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
10
|
-
"static/
|
|
8
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_buildManifest.js",
|
|
9
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_ssgManifest.js",
|
|
10
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_clientMiddlewareManifest.js"
|
|
11
11
|
],
|
|
12
12
|
"rootMainFiles": []
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"yUJyByMf3DK4Az8t9gKZ5\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
1:"$Sreact.fragment"
|
|
2
2
|
2:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"OutletBoundary"]
|
|
3
3
|
3:"$Sreact.suspense"
|
|
4
|
-
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
4
|
+
0:{"rsc":["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
5
5
|
4:null
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
8:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"ViewportBoundary"]
|
|
7
7
|
a:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
8
8
|
c:I[59179,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default",1]
|
|
9
|
-
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
9
|
+
0:{"P":null,"c":["","_global-error"],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]}],[["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","html",null,{"id":"__next_error__","children":[["$","head",null,{"children":[["$","title",null,{"children":"500: This page couldn’t load"}],["$","style",null,{"dangerouslySetInnerHTML":{"__html":":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }"}}]]}],["$","body",null,{"children":["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","display":"flex","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"style":{"marginTop":"-32px","maxWidth":"325px","padding":"32px 28px","textAlign":"left"},"children":[["$","svg",null,{"width":"32","height":"32","viewBox":"-0.2 -1.5 32 32","fill":"none","style":{"marginBottom":"24px"},"children":["$","path",null,{"d":"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z","fill":"var(--next-error-title)"}]}],["$","h1",null,{"style":{"fontSize":"24px","fontWeight":500,"letterSpacing":"-0.02em","lineHeight":"32px","margin":"0 0 12px 0","color":"var(--next-error-title)"},"children":"This page couldn’t load"}],["$","p",null,{"style":{"fontSize":"14px","fontWeight":400,"lineHeight":"21px","margin":"0 0 20px 0","color":"var(--next-error-message)"},"children":"A server error occurred. Reload to try again."}],["$","form",null,{"style":{"margin":0},"children":["$","button",null,{"type":"submit","style":{"display":"inline-flex","alignItems":"center","justifyContent":"center","height":"32px","padding":"0 12px","fontSize":"14px","fontWeight":500,"lineHeight":"20px","borderRadius":"6px","cursor":"pointer","color":"var(--next-error-btn-text)","background":"var(--next-error-btn-bg)","border":"var(--next-error-btn-border)"},"children":"Reload"}]}]]}]}]}]]}],null,["$","$L4",null,{"children":["$","$5",null,{"name":"Next.MetadataOutlet","children":"$@6"}]}]]}],{},null,false,null]},null,false,"$@7"],["$","$1","h",{"children":[null,["$","$L8",null,{"children":"$L9"}],["$","div",null,{"hidden":true,"children":["$","$La",null,{"children":["$","$5",null,{"name":"Next.Metadata","children":"$Lb"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$c",[]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
10
10
|
d:[]
|
|
11
11
|
7:"$Wd"
|
|
12
12
|
9:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[76614,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[61299,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"IconMark"]
|
|
6
|
-
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
6
|
+
0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","link","0",{"rel":"icon","href":"/favicon.ico?favicon.0x3dzn~oxb6tn.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","1",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
2:I[85530,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
3
3
|
3:I[50571,["/_next/static/chunks/0.v8w524wvk94.js","/_next/static/chunks/0z9652tpun_.d.js"],"default"]
|
|
4
4
|
4:[]
|
|
5
|
-
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"
|
|
1
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"yUJyByMf3DK4Az8t9gKZ5"}
|
|
@@ -7,9 +7,9 @@ globalThis.__BUILD_MANIFEST = {
|
|
|
7
7
|
"static/chunks/03~yq9q893hmn.js"
|
|
8
8
|
],
|
|
9
9
|
"lowPriorityFiles": [
|
|
10
|
-
"static/
|
|
11
|
-
"static/
|
|
12
|
-
"static/
|
|
10
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_buildManifest.js",
|
|
11
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_ssgManifest.js",
|
|
12
|
+
"static/yUJyByMf3DK4Az8t9gKZ5/_clientMiddlewareManifest.js"
|
|
13
13
|
],
|
|
14
14
|
"rootMainFiles": [
|
|
15
15
|
"static/chunks/0_yzfo7pu205m.js",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"
|
|
1
|
+
<!DOCTYPE html><html id="__next_error__"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0_yzfo7pu205m.js"/><script src="/_next/static/chunks/0_r.3~d-5z8~_.js" async=""></script><script src="/_next/static/chunks/0u1lny1.4-f8c.js" async=""></script><script src="/_next/static/chunks/036h9~rhidv.e.js" async=""></script><script src="/_next/static/chunks/turbopack-129yl57l2cd7_.js" async=""></script><script src="/_next/static/chunks/0.v8w524wvk94.js" async=""></script><script src="/_next/static/chunks/0z9652tpun_.d.js" async=""></script><meta name="next-size-adjust" content=""/><title>500: This page couldn’t load</title><link rel="icon" href="/favicon.ico?favicon.0x3dzn~oxb6tn.ico" sizes="256x256" type="image/x-icon"/><style>:root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }</style><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;display:flex;align-items:center;justify-content:center"><div style="margin-top:-32px;max-width:325px;padding:32px 28px;text-align:left"><svg width="32" height="32" viewBox="-0.2 -1.5 32 32" fill="none" style="margin-bottom:24px"><path d="M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z" fill="var(--next-error-title)"></path></svg><h1 style="font-size:24px;font-weight:500;letter-spacing:-0.02em;line-height:32px;margin:0 0 12px 0;color:var(--next-error-title)">This page couldn’t load</h1><p style="font-size:14px;font-weight:400;line-height:21px;margin:0 0 20px 0;color:var(--next-error-message)">A server error occurred. Reload to try again.</p><form style="margin:0"><button type="submit" style="display:inline-flex;align-items:center;justify-content:center;height:32px;padding:0 12px;font-size:14px;font-weight:500;line-height:20px;border-radius:6px;cursor:pointer;color:var(--next-error-btn-text);background:var(--next-error-btn-bg);border:var(--next-error-btn-border)">Reload</button></form></div></div><!--$--><!--/$--><script src="/_next/static/chunks/0_yzfo7pu205m.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[85530,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n3:I[50571,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\"]\n4:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"ViewportBoundary\"]\na:I[76614,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"MetadataBoundary\"]\nc:I[59179,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"default\",1]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_global-error\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]}],[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"html\",null,{\"id\":\"__next_error__\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"title\",null,{\"children\":\"500: This page couldn’t load\"}],[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\":root {--next-error-bg: #fff;--next-error-text: #171717;--next-error-title: #171717;--next-error-message: #171717;--next-error-digest: #666666;--next-error-btn-text: #fff;--next-error-btn-bg: #171717;--next-error-btn-border: none;--next-error-btn-secondary-text: #171717;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(0,0,0,0.08);}@media (prefers-color-scheme: dark) {:root {--next-error-bg: #0a0a0a;--next-error-text: #ededed;--next-error-title: #ededed;--next-error-message: #ededed;--next-error-digest: #a0a0a0;--next-error-btn-text: #0a0a0a;--next-error-btn-bg: #ededed;--next-error-btn-border: none;--next-error-btn-secondary-text: #ededed;--next-error-btn-secondary-bg: transparent;--next-error-btn-secondary-border: 1px solid rgba(255,255,255,0.14);}}body { margin: 0; color: var(--next-error-text); background: var(--next-error-bg); }\"}}]]}],[\"$\",\"body\",null,{\"children\":[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"style\":{\"marginTop\":\"-32px\",\"maxWidth\":\"325px\",\"padding\":\"32px 28px\",\"textAlign\":\"left\"},\"children\":[[\"$\",\"svg\",null,{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"-0.2 -1.5 32 32\",\"fill\":\"none\",\"style\":{\"marginBottom\":\"24px\"},\"children\":[\"$\",\"path\",null,{\"d\":\"M16.9328 0C18.0839 0.000116771 19.1334 0.658832 19.634 1.69531L31.4299 26.1309C32.0708 27.4588 31.1036 28.9999 29.6291 29H2.00215C0.527541 29 -0.439628 27.4588 0.201371 26.1309L11.9973 1.69531C12.4979 0.658823 13.5474 7.75066e-05 14.6984 0H16.9328ZM3.59493 26H28.0363L16.9328 3H14.6984L3.59493 26ZM15.8156 19C16.9202 19.0001 17.8156 19.8955 17.8156 21C17.8156 22.1045 16.9202 22.9999 15.8156 23C14.7111 23 13.8156 22.1046 13.8156 21C13.8156 19.8954 14.7111 19 15.8156 19ZM17.3156 16.5H14.3156V8.5H17.3156V16.5Z\",\"fill\":\"var(--next-error-title)\"}]}],[\"$\",\"h1\",null,{\"style\":{\"fontSize\":\"24px\",\"fontWeight\":500,\"letterSpacing\":\"-0.02em\",\"lineHeight\":\"32px\",\"margin\":\"0 0 12px 0\",\"color\":\"var(--next-error-title)\"},\"children\":\"This page couldn’t load\"}],[\"$\",\"p\",null,{\"style\":{\"fontSize\":\"14px\",\"fontWeight\":400,\"lineHeight\":\"21px\",\"margin\":\"0 0 20px 0\",\"color\":\"var(--next-error-message)\"},\"children\":\"A server error occurred. Reload to try again.\"}],[\"$\",\"form\",null,{\"style\":{\"margin\":0},\"children\":[\"$\",\"button\",null,{\"type\":\"submit\",\"style\":{\"display\":\"inline-flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"height\":\"32px\",\"padding\":\"0 12px\",\"fontSize\":\"14px\",\"fontWeight\":500,\"lineHeight\":\"20px\",\"borderRadius\":\"6px\",\"cursor\":\"pointer\",\"color\":\"var(--next-error-btn-text)\",\"background\":\"var(--next-error-btn-bg)\",\"border\":\"var(--next-error-btn-border)\"},\"children\":\"Reload\"}]}]]}]}]}]]}],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"yUJyByMf3DK4Az8t9gKZ5\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[61299,[\"/_next/static/chunks/0.v8w524wvk94.js\",\"/_next/static/chunks/0z9652tpun_.d.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$Le\",\"1\",{}]]\n"])</script></body></html>
|
package/admin/.next/trace
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"generate-buildid","duration":
|
|
1
|
+
[{"name":"generate-buildid","duration":90,"timestamp":4259431231,"id":4,"parentId":1,"tags":{},"startTime":1780844758654,"traceId":"e9bb71768b44201d"},{"name":"load-custom-routes","duration":187,"timestamp":4259431368,"id":5,"parentId":1,"tags":{},"startTime":1780844758654,"traceId":"e9bb71768b44201d"},{"name":"create-dist-dir","duration":85,"timestamp":4259431566,"id":6,"parentId":1,"tags":{},"startTime":1780844758654,"traceId":"e9bb71768b44201d"},{"name":"clean","duration":13540,"timestamp":4259432220,"id":7,"parentId":1,"tags":{},"startTime":1780844758655,"traceId":"e9bb71768b44201d"},{"name":"discover-routes","duration":3234,"timestamp":4259450425,"id":8,"parentId":1,"tags":{},"startTime":1780844758673,"traceId":"e9bb71768b44201d"},{"name":"create-root-mapping","duration":28,"timestamp":4259453681,"id":9,"parentId":1,"tags":{},"startTime":1780844758676,"traceId":"e9bb71768b44201d"},{"name":"generate-route-types","duration":11883,"timestamp":4259454298,"id":10,"parentId":1,"tags":{},"startTime":1780844758677,"traceId":"e9bb71768b44201d"},{"name":"public-dir-conflict-check","duration":39,"timestamp":4259466214,"id":11,"parentId":1,"tags":{},"startTime":1780844758689,"traceId":"e9bb71768b44201d"},{"name":"generate-routes-manifest","duration":1091,"timestamp":4259466297,"id":12,"parentId":1,"tags":{},"startTime":1780844758689,"traceId":"e9bb71768b44201d"},{"name":"run-turbopack","duration":1577151,"timestamp":4259469092,"id":14,"parentId":1,"tags":{},"startTime":1780844758691,"traceId":"e9bb71768b44201d"},{"name":"turbopack-build-events","duration":46,"timestamp":4259602239,"id":15,"parentId":1,"tags":{},"startTime":1780844758825,"traceId":"e9bb71768b44201d"},{"name":"run-typescript","duration":1842679,"timestamp":4261065368,"id":16,"parentId":1,"tags":{},"startTime":1780844760288,"traceId":"e9bb71768b44201d"},{"name":"generate-required-server-files","duration":558,"timestamp":4262908967,"id":18,"parentId":1,"tags":{},"startTime":1780844762131,"traceId":"e9bb71768b44201d"},{"name":"check-static-error-page","duration":1800,"timestamp":4262918333,"id":20,"parentId":19,"tags":{},"startTime":1780844762141,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":156952,"timestamp":4262924412,"id":30,"parentId":22,"tags":{},"startTime":1780844762147,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":161864,"timestamp":4262919559,"id":22,"parentId":19,"tags":{"page":"/_global-error"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":180866,"timestamp":4262924441,"id":31,"parentId":23,"tags":{},"startTime":1780844762147,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":185635,"timestamp":4262919746,"id":23,"parentId":19,"tags":{"page":"/favicon.ico"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":208213,"timestamp":4262924210,"id":29,"parentId":21,"tags":{},"startTime":1780844762147,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":213722,"timestamp":4262918737,"id":21,"parentId":19,"tags":{"page":"/_not-found"},"startTime":1780844762141,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":211031,"timestamp":4262927912,"id":32,"parentId":28,"tags":{},"startTime":1780844762150,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":218912,"timestamp":4262920093,"id":28,"parentId":19,"tags":{"page":"/"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":217039,"timestamp":4262927982,"id":33,"parentId":24,"tags":{},"startTime":1780844762150,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":225143,"timestamp":4262919939,"id":24,"parentId":19,"tags":{"page":"/p/[project]"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":222510,"timestamp":4262928014,"id":34,"parentId":25,"tags":{},"startTime":1780844762150,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":230613,"timestamp":4262919979,"id":25,"parentId":19,"tags":{"page":"/p/[project]/plan/[name]"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":223648,"timestamp":4262928040,"id":35,"parentId":26,"tags":{},"startTime":1780844762150,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":231727,"timestamp":4262920017,"id":26,"parentId":19,"tags":{"page":"/p/[project]/research/[slug]"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"is-page-static","duration":235328,"timestamp":4262928069,"id":36,"parentId":27,"tags":{},"startTime":1780844762150,"traceId":"e9bb71768b44201d"},{"name":"check-page","duration":243375,"timestamp":4262920053,"id":27,"parentId":19,"tags":{"page":"/p/[project]/scorecards"},"startTime":1780844762142,"traceId":"e9bb71768b44201d"},{"name":"static-check","duration":245413,"timestamp":4262918032,"id":19,"parentId":1,"tags":{},"startTime":1780844762140,"traceId":"e9bb71768b44201d"},{"name":"write-routes-manifest","duration":346,"timestamp":4263164628,"id":38,"parentId":1,"tags":{},"startTime":1780844762387,"traceId":"e9bb71768b44201d"},{"name":"load-dotenv","duration":20,"timestamp":4263170179,"id":41,"parentId":40,"tags":{},"startTime":1780844762393,"traceId":"e9bb71768b44201d"},{"name":"run-export-path-map","duration":177,"timestamp":4263171270,"id":42,"parentId":40,"tags":{},"startTime":1780844762394,"traceId":"e9bb71768b44201d"},{"name":"next-export","duration":186117,"timestamp":4263169597,"id":40,"parentId":1,"tags":{},"startTime":1780844762392,"traceId":"e9bb71768b44201d"},{"name":"move-exported-app-global-error-","duration":383,"timestamp":4263356298,"id":43,"parentId":39,"tags":{},"startTime":1780844762579,"traceId":"e9bb71768b44201d"},{"name":"static-generation","duration":191468,"timestamp":4263165951,"id":39,"parentId":1,"tags":{},"startTime":1780844762388,"traceId":"e9bb71768b44201d"},{"name":"write-routes-manifest","duration":143,"timestamp":4263357513,"id":44,"parentId":1,"tags":{},"startTime":1780844762580,"traceId":"e9bb71768b44201d"},{"name":"print-tree-view","duration":1088,"timestamp":4263362183,"id":45,"parentId":1,"tags":{},"startTime":1780844762585,"traceId":"e9bb71768b44201d"},{"name":"write-route-bundle-stats","duration":5034,"timestamp":4263363281,"id":46,"parentId":1,"tags":{},"startTime":1780844762586,"traceId":"e9bb71768b44201d"},{"name":"telemetry-flush","duration":491935,"timestamp":4263368327,"id":47,"parentId":1,"tags":{},"startTime":1780844762591,"traceId":"e9bb71768b44201d"},{"name":"next-build","duration":4514852,"timestamp":4259345451,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1780844758568,"traceId":"e9bb71768b44201d"}]
|
package/admin/.next/trace-build
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"name":"run-turbopack","duration":
|
|
1
|
+
[{"name":"run-turbopack","duration":1577151,"timestamp":4259469092,"id":14,"parentId":1,"tags":{},"startTime":1780844758691,"traceId":"e9bb71768b44201d"},{"name":"turbopack-build-events","duration":46,"timestamp":4259602239,"id":15,"parentId":1,"tags":{},"startTime":1780844758825,"traceId":"e9bb71768b44201d"},{"name":"run-typescript","duration":1842679,"timestamp":4261065368,"id":16,"parentId":1,"tags":{},"startTime":1780844760288,"traceId":"e9bb71768b44201d"},{"name":"static-check","duration":245413,"timestamp":4262918032,"id":19,"parentId":1,"tags":{},"startTime":1780844762140,"traceId":"e9bb71768b44201d"},{"name":"static-generation","duration":191468,"timestamp":4263165951,"id":39,"parentId":1,"tags":{},"startTime":1780844762388,"traceId":"e9bb71768b44201d"},{"name":"telemetry-flush","duration":491935,"timestamp":4263368327,"id":47,"parentId":1,"tags":{},"startTime":1780844762591,"traceId":"e9bb71768b44201d"},{"name":"next-build","duration":4514852,"timestamp":4259345451,"id":1,"tags":{"buildMode":"default","version":"16.2.4","bundler":"turbopack","has-custom-webpack-config":"false","use-build-worker":"true"},"startTime":1780844758568,"traceId":"e9bb71768b44201d"}]
|
package/dist/bin/cli.js
CHANGED
|
@@ -566,4 +566,13 @@ worktreeCmd
|
|
|
566
566
|
const { worktreePreflight } = await import("./commands/worktree.js");
|
|
567
567
|
worktreePreflight(slug, baseBranch);
|
|
568
568
|
});
|
|
569
|
+
// ---- doppler extension: env management ----
|
|
570
|
+
const dopplerCmd = program.command("doppler").description("Doppler env management (env-pull)");
|
|
571
|
+
dopplerCmd
|
|
572
|
+
.command("env-pull <profile>")
|
|
573
|
+
.description("Materialize apps/<app>/.env.<profile> from Doppler (profile: local | staging | production), using the InDusk-level service token")
|
|
574
|
+
.action(async (profile) => {
|
|
575
|
+
const { dopplerEnvPull } = await import("./commands/doppler.js");
|
|
576
|
+
dopplerEnvPull(rootOrExit(), profile);
|
|
577
|
+
});
|
|
569
578
|
program.parse();
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** CLI entry: `indusk doppler env-pull <profile>` — token + apps both at projectRoot. */
|
|
2
|
+
export declare function dopplerEnvPull(projectRoot: string, profile: string): void;
|
|
3
|
+
/**
|
|
4
|
+
* Auto-provision a freshly-created worktree's env: token/config from the workbench
|
|
5
|
+
* root, apps written into the worktree. Attempts when the doppler extension is enabled
|
|
6
|
+
* for the workbench; auth resolves to a service token (env/.env) or the logged-in
|
|
7
|
+
* Doppler CLI session. Returns true if it ran without a hard error, false to skip
|
|
8
|
+
* silently (extension not enabled). Per-app download failures are non-fatal.
|
|
9
|
+
*/
|
|
10
|
+
export declare function provisionWorktreeEnv(workbenchRoot: string, worktreeDir: string, profile?: string): boolean;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* doppler extension — `env-pull` + worktree auto-provisioning.
|
|
6
|
+
*
|
|
7
|
+
* Config-driven (declarative, per the dawn "config as source of truth" direction):
|
|
8
|
+
* the project's `.indusk/config.json` carries a `doppler` section —
|
|
9
|
+
*
|
|
10
|
+
* "doppler": {
|
|
11
|
+
* "project": "indusk", // Doppler project
|
|
12
|
+
* "profiles": { "local": "local", "production": "prd" }, // profile → Doppler config-root
|
|
13
|
+
* "apps": [ // explicit app list (excludes libraries)
|
|
14
|
+
* { "dir": "docs" }, // folder + Doppler leaf "<prefix>_docs"
|
|
15
|
+
* { "dir": "indusk-admin", "config": "admin" } // folder indusk-admin → leaf "<prefix>_admin"
|
|
16
|
+
* ]
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* For each listed app, env-pull runs
|
|
20
|
+
* doppler secrets download --project <project> --config <prefix>_<config|dir> --format env
|
|
21
|
+
* and writes `<appsRoot>/apps/<dir>/.env.<profile>` (gitignored).
|
|
22
|
+
*
|
|
23
|
+
* The token (DOPPLER_TOKEN) lives in the gitignored `.indusk/extensions/doppler/.env`.
|
|
24
|
+
* When `.indusk/config.json` has no `doppler` section, env-pull falls back to globbing
|
|
25
|
+
* `apps/*` with the default prefixes (local→loc, staging→stg, production→prd) and the
|
|
26
|
+
* folder name as the Doppler config — backward-compatible with pre-config projects.
|
|
27
|
+
*/
|
|
28
|
+
const DEFAULT_PROFILE_PREFIX = {
|
|
29
|
+
local: "loc",
|
|
30
|
+
staging: "stg",
|
|
31
|
+
production: "prd",
|
|
32
|
+
};
|
|
33
|
+
const GITIGNORE_MARKER = "# doppler env-pull (machine-local, provisioned from Doppler)";
|
|
34
|
+
const GITIGNORE_BLOCK = [
|
|
35
|
+
GITIGNORE_MARKER,
|
|
36
|
+
".indusk/extensions/doppler/.env",
|
|
37
|
+
"apps/*/.env.local",
|
|
38
|
+
"apps/*/.env.staging",
|
|
39
|
+
"apps/*/.env.production",
|
|
40
|
+
];
|
|
41
|
+
function parseEnvFile(path) {
|
|
42
|
+
const out = {};
|
|
43
|
+
if (!existsSync(path))
|
|
44
|
+
return out;
|
|
45
|
+
for (const line of readFileSync(path, "utf-8").split("\n")) {
|
|
46
|
+
const m = line.match(/^([A-Z0-9_]+)=(.*)$/);
|
|
47
|
+
if (m)
|
|
48
|
+
out[m[1]] = m[2];
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/** Read the `doppler` section from the project's `.indusk/config.json` (token-root). */
|
|
53
|
+
function readDopplerConfig(tokenRoot) {
|
|
54
|
+
const path = join(tokenRoot, ".indusk", "config.json");
|
|
55
|
+
if (!existsSync(path))
|
|
56
|
+
return {};
|
|
57
|
+
try {
|
|
58
|
+
return (JSON.parse(readFileSync(path, "utf-8")).doppler ??
|
|
59
|
+
{});
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return {};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Token (+ optional legacy project) from the gitignored extension `.env`. */
|
|
66
|
+
function readDopplerEnv(tokenRoot) {
|
|
67
|
+
const env = parseEnvFile(join(tokenRoot, ".indusk/extensions/doppler/.env"));
|
|
68
|
+
return { token: env.DOPPLER_TOKEN, project: env.DOPPLER_PROJECT };
|
|
69
|
+
}
|
|
70
|
+
/** Resolve the app list: explicit config.apps, else glob apps/* (each folder as its own config). */
|
|
71
|
+
function resolveApps(cfg, appsRoot) {
|
|
72
|
+
if (cfg.apps && cfg.apps.length > 0)
|
|
73
|
+
return cfg.apps;
|
|
74
|
+
const appsDir = join(appsRoot, "apps");
|
|
75
|
+
if (!existsSync(appsDir))
|
|
76
|
+
return [];
|
|
77
|
+
return readdirSync(appsDir)
|
|
78
|
+
.filter((a) => statSync(join(appsDir, a)).isDirectory())
|
|
79
|
+
.map((dir) => ({ dir }));
|
|
80
|
+
}
|
|
81
|
+
/** Idempotently ensure the provisioned env files (and the token) are gitignored. */
|
|
82
|
+
function ensureGitignore(projectRoot) {
|
|
83
|
+
const path = join(projectRoot, ".gitignore");
|
|
84
|
+
const current = existsSync(path) ? readFileSync(path, "utf-8") : "";
|
|
85
|
+
if (current.includes(GITIGNORE_MARKER))
|
|
86
|
+
return;
|
|
87
|
+
const prefix = current.length > 0 && !current.endsWith("\n") ? "\n" : "";
|
|
88
|
+
writeFileSync(path, `${current}${prefix}\n${GITIGNORE_BLOCK.join("\n")}\n`);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Pull env from Doppler for every configured app under `appsRoot/apps`, using the
|
|
92
|
+
* token + config at `tokenRoot`. Returns files written, or -1 on a hard error
|
|
93
|
+
* (bad profile / missing token or project / no apps).
|
|
94
|
+
*/
|
|
95
|
+
function runEnvPull(tokenRoot, appsRoot, profile, opts = {}) {
|
|
96
|
+
const cfg = readDopplerConfig(tokenRoot);
|
|
97
|
+
const prefix = cfg.profiles?.[profile] ?? DEFAULT_PROFILE_PREFIX[profile];
|
|
98
|
+
if (!prefix) {
|
|
99
|
+
console.error(`Unknown profile "${profile}". Use one of: local, staging, production (or declare it in .indusk/config.json doppler.profiles).`);
|
|
100
|
+
return -1;
|
|
101
|
+
}
|
|
102
|
+
const env = readDopplerEnv(tokenRoot);
|
|
103
|
+
// Auth precedence: explicit service token (CI via DOPPLER_TOKEN env, or the
|
|
104
|
+
// extension .env) → otherwise the logged-in Doppler CLI session (`doppler login`).
|
|
105
|
+
// So a dev who's logged in needs no token file; CI sets DOPPLER_TOKEN from a secret.
|
|
106
|
+
const token = process.env.DOPPLER_TOKEN ?? env.token;
|
|
107
|
+
const project = cfg.project ?? env.project;
|
|
108
|
+
if (!project) {
|
|
109
|
+
if (!opts.quiet) {
|
|
110
|
+
console.error("Missing Doppler project. Set doppler.project in .indusk/config.json (or DOPPLER_PROJECT in the extension .env).");
|
|
111
|
+
}
|
|
112
|
+
return -1;
|
|
113
|
+
}
|
|
114
|
+
const apps = resolveApps(cfg, appsRoot);
|
|
115
|
+
if (apps.length === 0) {
|
|
116
|
+
if (!opts.quiet)
|
|
117
|
+
console.error(`No apps to provision (no doppler.apps config, no apps/* dirs).`);
|
|
118
|
+
return -1;
|
|
119
|
+
}
|
|
120
|
+
if (opts.manageGitignore)
|
|
121
|
+
ensureGitignore(appsRoot);
|
|
122
|
+
let written = 0;
|
|
123
|
+
for (const app of apps) {
|
|
124
|
+
const leaf = `${prefix}_${app.config ?? app.dir}`;
|
|
125
|
+
const outDir = join(appsRoot, "apps", app.dir);
|
|
126
|
+
if (!existsSync(outDir)) {
|
|
127
|
+
if (!opts.quiet)
|
|
128
|
+
console.error(` ${app.dir}: skipped — apps/${app.dir} not found`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const dopplerArgs = [
|
|
132
|
+
"secrets",
|
|
133
|
+
"download",
|
|
134
|
+
"--project",
|
|
135
|
+
project,
|
|
136
|
+
"--config",
|
|
137
|
+
leaf,
|
|
138
|
+
"--format",
|
|
139
|
+
"env",
|
|
140
|
+
"--no-file",
|
|
141
|
+
];
|
|
142
|
+
// Only pass --token when we have one; otherwise rely on `doppler login`.
|
|
143
|
+
if (token)
|
|
144
|
+
dopplerArgs.push("--token", token);
|
|
145
|
+
const res = spawnSync("doppler", dopplerArgs, { encoding: "utf-8" });
|
|
146
|
+
if (res.status !== 0) {
|
|
147
|
+
if (!opts.quiet) {
|
|
148
|
+
console.error(` ${app.dir}: skipped — doppler download failed for ${leaf}: ${(res.stderr ?? "").trim()}`);
|
|
149
|
+
}
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
writeFileSync(join(outDir, `.env.${profile}`), res.stdout);
|
|
153
|
+
if (!opts.quiet)
|
|
154
|
+
console.info(` ${app.dir} → apps/${app.dir}/.env.${profile} (${leaf})`);
|
|
155
|
+
written++;
|
|
156
|
+
}
|
|
157
|
+
if (!opts.quiet) {
|
|
158
|
+
console.info(`env-pull (${profile}): wrote ${written} file(s) from Doppler project "${project}".`);
|
|
159
|
+
}
|
|
160
|
+
return written;
|
|
161
|
+
}
|
|
162
|
+
/** CLI entry: `indusk doppler env-pull <profile>` — token + apps both at projectRoot. */
|
|
163
|
+
export function dopplerEnvPull(projectRoot, profile) {
|
|
164
|
+
if (runEnvPull(projectRoot, projectRoot, profile, { manageGitignore: true }) < 0) {
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Auto-provision a freshly-created worktree's env: token/config from the workbench
|
|
170
|
+
* root, apps written into the worktree. Attempts when the doppler extension is enabled
|
|
171
|
+
* for the workbench; auth resolves to a service token (env/.env) or the logged-in
|
|
172
|
+
* Doppler CLI session. Returns true if it ran without a hard error, false to skip
|
|
173
|
+
* silently (extension not enabled). Per-app download failures are non-fatal.
|
|
174
|
+
*/
|
|
175
|
+
export function provisionWorktreeEnv(workbenchRoot, worktreeDir, profile = "local") {
|
|
176
|
+
if (!existsSync(join(workbenchRoot, ".indusk", "extensions", "doppler")))
|
|
177
|
+
return false;
|
|
178
|
+
return runEnvPull(workbenchRoot, worktreeDir, profile, { manageGitignore: false }) >= 0;
|
|
179
|
+
}
|
|
@@ -1043,6 +1043,12 @@ export async function init(projectRoot, options = {}) {
|
|
|
1043
1043
|
console.info("\n[Extensions]");
|
|
1044
1044
|
const { autoEnableExtensions } = await import("./extensions.js");
|
|
1045
1045
|
await autoEnableExtensions(projectRoot);
|
|
1046
|
+
// composable.env deprecation nudge if the project being initialized still
|
|
1047
|
+
// carries a ce.json (non-destructive — just prints).
|
|
1048
|
+
const { ceDeprecationNotice } = await import("./update.js");
|
|
1049
|
+
const ceNotice = ceDeprecationNotice(projectRoot);
|
|
1050
|
+
if (ceNotice)
|
|
1051
|
+
console.info(ceNotice);
|
|
1046
1052
|
// 12. Write .indusk/config.json — InDusk is opinionated: linter is always
|
|
1047
1053
|
// Biome. ESLint/Prettier detection becomes a vestige warning (see step 6.5),
|
|
1048
1054
|
// not a recorded preference. Dawn (v2) will move this to a config-file-driven
|
|
@@ -1 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* composable.env deprecation notice. Returns a non-destructive nudge toward the
|
|
3
|
+
* `doppler` extension when the project still has a `ce.json`, else null. Pure
|
|
4
|
+
* read — never mutates or removes the project's composable.env setup, so the
|
|
5
|
+
* legacy opt-in keeps working.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ceDeprecationNotice(projectRoot: string): string | null;
|
|
1
8
|
export declare function update(projectRoot: string): Promise<void>;
|
|
@@ -9,6 +9,23 @@ import { checkLatestVersion, hasNewerVersion } from "../../lib/version-check.js"
|
|
|
9
9
|
import { envIsFunctional } from "./extensions.js";
|
|
10
10
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
11
|
const packageRoot = join(__dirname, "../../..");
|
|
12
|
+
/**
|
|
13
|
+
* composable.env deprecation notice. Returns a non-destructive nudge toward the
|
|
14
|
+
* `doppler` extension when the project still has a `ce.json`, else null. Pure
|
|
15
|
+
* read — never mutates or removes the project's composable.env setup, so the
|
|
16
|
+
* legacy opt-in keeps working.
|
|
17
|
+
*/
|
|
18
|
+
export function ceDeprecationNotice(projectRoot) {
|
|
19
|
+
if (!existsSync(join(projectRoot, "ce.json")))
|
|
20
|
+
return null;
|
|
21
|
+
return [
|
|
22
|
+
"\n[composable.env]",
|
|
23
|
+
" ⚠ composable.env is deprecated in favor of the `doppler` extension",
|
|
24
|
+
" (Doppler + plain docker-compose; per-worktree auto-provisioning).",
|
|
25
|
+
" Your ce.json is untouched — composable.env keeps working (opt-in).",
|
|
26
|
+
" To migrate, see numero's `composable-env-removal` plan as the worked example.",
|
|
27
|
+
].join("\n");
|
|
28
|
+
}
|
|
12
29
|
const pkgJsonPath = join(packageRoot, "package.json");
|
|
13
30
|
function fileHash(path) {
|
|
14
31
|
return createHash("sha256").update(readFileSync(path)).digest("hex").slice(0, 12);
|
|
@@ -455,6 +472,10 @@ export async function update(projectRoot) {
|
|
|
455
472
|
console.info("\n[Required Extensions]\n");
|
|
456
473
|
const { autoEnableExtensions } = await import("./extensions.js");
|
|
457
474
|
await autoEnableExtensions(projectRoot);
|
|
475
|
+
// composable.env deprecation nudge (non-destructive — only prints).
|
|
476
|
+
const ceNotice = ceDeprecationNotice(projectRoot);
|
|
477
|
+
if (ceNotice)
|
|
478
|
+
console.info(ceNotice);
|
|
458
479
|
// 7c. SCM field migration. Pre-1.28.x projects don't have `scm` in their
|
|
459
480
|
// config — detect once and write it back. Idempotent on subsequent runs:
|
|
460
481
|
// if the field is already populated, do nothing.
|
|
@@ -3,6 +3,7 @@ import { existsSync, lstatSync, readdirSync, readFileSync, readlinkSync } from "
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { validateWorktreeConfig } from "../../lib/worktree/validate-config.js";
|
|
6
|
+
import { provisionWorktreeEnv } from "./doppler.js";
|
|
6
7
|
/**
|
|
7
8
|
* `indusk worktree` subcommands.
|
|
8
9
|
*
|
|
@@ -88,7 +89,44 @@ function runWorktreeScript(scriptName, args) {
|
|
|
88
89
|
process.exit(r.status ?? 1);
|
|
89
90
|
}
|
|
90
91
|
export function worktreeCreate(slug, baseBranch) {
|
|
91
|
-
|
|
92
|
+
const pkgRoot = indusKMcpPackageRoot();
|
|
93
|
+
const script = resolve(pkgRoot, "extensions/worktree/scripts/setup-worktree.sh");
|
|
94
|
+
if (!existsSync(script)) {
|
|
95
|
+
console.error(`Error: setup-worktree.sh not found at ${script}`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
const r = spawnSync("bash", [script, ...(baseBranch ? [slug, baseBranch] : [slug])], {
|
|
99
|
+
cwd: process.cwd(),
|
|
100
|
+
stdio: "inherit",
|
|
101
|
+
});
|
|
102
|
+
const code = r.status ?? 1;
|
|
103
|
+
// On success, auto-provision the worktree's env if the doppler extension is
|
|
104
|
+
// configured (token at the workbench level). Skips silently otherwise.
|
|
105
|
+
if (code === 0) {
|
|
106
|
+
try {
|
|
107
|
+
const workbenchRoot = resolveWorkbenchRoot(process.cwd());
|
|
108
|
+
if (workbenchRoot && provisionWorktreeEnv(workbenchRoot, join(workbenchRoot, slug))) {
|
|
109
|
+
console.info(` doppler: auto-provisioned env for ${slug}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (e) {
|
|
113
|
+
console.error(` doppler: env auto-provision failed — ${e.message}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
process.exit(code);
|
|
117
|
+
}
|
|
118
|
+
/** Walk up from `start` to the nearest workbench root (`.indusk/config.json` with worktree.shape === "workbench"). */
|
|
119
|
+
function resolveWorkbenchRoot(start) {
|
|
120
|
+
let dir = resolve(start);
|
|
121
|
+
for (let i = 0; i < 40; i++) {
|
|
122
|
+
if (readWorkbenchConfig(dir)?.worktree?.shape === "workbench")
|
|
123
|
+
return dir;
|
|
124
|
+
const parent = dirname(dir);
|
|
125
|
+
if (parent === dir)
|
|
126
|
+
break;
|
|
127
|
+
dir = parent;
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
92
130
|
}
|
|
93
131
|
export function worktreeRefresh(slug) {
|
|
94
132
|
runWorktreeScript("refresh-worktree", [slug]);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# doppler extension — auth (gitignored once copied to .env)
|
|
2
|
+
#
|
|
3
|
+
# Auth is OPTIONAL here. env-pull resolves auth in this order:
|
|
4
|
+
# 1. DOPPLER_TOKEN env var (CI / deployment — set from a GitHub secret)
|
|
5
|
+
# 2. DOPPLER_TOKEN in this file (a service token, for headless/local use)
|
|
6
|
+
# 3. the logged-in Doppler CLI session (`doppler login`)
|
|
7
|
+
#
|
|
8
|
+
# So if you've run `doppler login` on this machine, you need NOTHING here —
|
|
9
|
+
# just leave this file empty (or don't create it). The token path exists for
|
|
10
|
+
# CI and headless environments where interactive login isn't possible.
|
|
11
|
+
#
|
|
12
|
+
# The Doppler PROJECT and the app→config mapping live in .indusk/config.json
|
|
13
|
+
# under the `doppler` key (committed, declarative) — NOT here. This file is
|
|
14
|
+
# only ever the secret.
|
|
15
|
+
#
|
|
16
|
+
# cp .indusk/extensions/doppler/.env.example .indusk/extensions/doppler/.env
|
|
17
|
+
#
|
|
18
|
+
# `.indusk/` sits at the workbench root, so this one auth (or your CLI login)
|
|
19
|
+
# is shared by the trunk and every worktree; `indusk worktree create` provisions
|
|
20
|
+
# each new worktree's env automatically.
|
|
21
|
+
|
|
22
|
+
# --- Service token (optional) ---
|
|
23
|
+
# A Doppler SERVICE TOKEN. Only needed if you are NOT using `doppler login`
|
|
24
|
+
# (e.g. CI, or a headless box). Scope it to the configs this project reads.
|
|
25
|
+
# Create one: Doppler dashboard > project > config > Access > Service Tokens.
|
|
26
|
+
# In CI, set this as an environment variable from a GitHub secret instead of
|
|
27
|
+
# putting it in a file.
|
|
28
|
+
DOPPLER_TOKEN=
|
|
29
|
+
|
|
30
|
+
# DOPPLER_PROJECT is deprecated here — set doppler.project in .indusk/config.json.
|
|
31
|
+
# (Still read as a fallback if present, for backward-compat.)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "doppler",
|
|
3
|
+
"description": "Doppler-backed environment management — env vars from Doppler branched configs + plain docker-compose, with per-worktree auto-provisioning. Replaces composable.env as the default InDusk env layer.",
|
|
4
|
+
"required": true,
|
|
5
|
+
"provides": {
|
|
6
|
+
"skill": true,
|
|
7
|
+
"health_checks": [
|
|
8
|
+
{
|
|
9
|
+
"name": "doppler-cli-installed",
|
|
10
|
+
"command": "command -v doppler >/dev/null 2>&1"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"name": "doppler-token-present",
|
|
14
|
+
"command": "node -e \"const fs=require('fs');const p='.indusk/extensions/doppler/.env';if(!fs.existsSync(p))process.exit(1);process.exit(/DOPPLER_TOKEN=\\S/.test(fs.readFileSync(p,'utf-8'))?0:1)\""
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"hooks": {
|
|
19
|
+
"on_enable": "echo 'Doppler extension enabled. Add your Doppler service token to .indusk/extensions/doppler/.env (copy from .env.example), then env auto-provisions on worktree create.'",
|
|
20
|
+
"on_disable": "echo 'Doppler extension disabled. .indusk/extensions/doppler/.env is left in place; remove it manually if you no longer want the token on disk.'"
|
|
21
|
+
},
|
|
22
|
+
"detect": {
|
|
23
|
+
"file": ".indusk/extensions/doppler/.env"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: doppler
|
|
3
|
+
description: Doppler-backed env management for InDusk projects — env vars from Doppler branched configs + plain docker-compose, materialized per-app via env-pull, auto-provisioned into every worktree from a single InDusk-level service token. The default InDusk env layer (replaces composable.env).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Doppler — Environment Management
|
|
7
|
+
|
|
8
|
+
This extension is how InDusk projects get their environment, replacing
|
|
9
|
+
composable.env. Two pieces, both things every developer already knows:
|
|
10
|
+
|
|
11
|
+
- **Doppler** holds the env vars (in branched configs).
|
|
12
|
+
- **Plain docker-compose** defines container shape (per-app fragments via `include:`).
|
|
13
|
+
|
|
14
|
+
There is no custom contract/component/profile language to learn. Env reaches a
|
|
15
|
+
checkout via an `env-pull` step that downloads from Doppler and writes ordinary
|
|
16
|
+
`.env` files.
|
|
17
|
+
|
|
18
|
+
## The model
|
|
19
|
+
|
|
20
|
+
### Doppler branched configs
|
|
21
|
+
|
|
22
|
+
Env vars live in Doppler, organized as a project with branched configs:
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
<project>/base ← cross-environment defaults (CHAIN_ID, LOG_LEVEL)
|
|
26
|
+
├─ <project>/loc ← local-dev overrides
|
|
27
|
+
│ ├─ <project>/loc_<app> ← per-app leaf (one per app under apps/*/)
|
|
28
|
+
│ └─ ...
|
|
29
|
+
├─ <project>/stg ← staging
|
|
30
|
+
└─ <project>/prd ← production + secrets
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Naming convention: `<prefix>_<app>` where prefix is `loc` (local), `stg`
|
|
34
|
+
(staging), `prd` (production). Per-app leaves inherit from the env parent, which
|
|
35
|
+
inherits from `base`.
|
|
36
|
+
|
|
37
|
+
### env-pull materializes `.env` files
|
|
38
|
+
|
|
39
|
+
`pnpm env:pull <profile>` walks `apps/*/`, calls
|
|
40
|
+
`doppler secrets download --project <p> --config <prefix>_<app> --format env`
|
|
41
|
+
for each app, and writes `apps/<app>/.env.<profile>` — gitignored. CI runs the
|
|
42
|
+
same step before `docker compose up`.
|
|
43
|
+
|
|
44
|
+
Test profile is the exception: `.env.test` files are committed to git with safe,
|
|
45
|
+
non-secret defaults so tests run without a Doppler token.
|
|
46
|
+
|
|
47
|
+
## Auth — one token at the InDusk level
|
|
48
|
+
|
|
49
|
+
Auth is a Doppler **service token** stored once in a gitignored file:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
.indusk/extensions/doppler/.env ← gitignored; DOPPLER_TOKEN + DOPPLER_PROJECT
|
|
53
|
+
.indusk/extensions/doppler/.env.example ← committed template
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`.indusk/` lives at the workbench root, so this **one token is shared by the
|
|
57
|
+
trunk and every worktree**. No `doppler login` OAuth, no per-worktree auth.
|
|
58
|
+
|
|
59
|
+
Setup (once per machine/workbench):
|
|
60
|
+
|
|
61
|
+
```sh
|
|
62
|
+
cp .indusk/extensions/doppler/.env.example .indusk/extensions/doppler/.env
|
|
63
|
+
# edit .env: paste a Doppler service token + the project name
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
A new/3rd-party dev requests a token, drops it in that file once — done.
|
|
67
|
+
|
|
68
|
+
## Worktrees auto-provision (the load-bearing behavior)
|
|
69
|
+
|
|
70
|
+
When the doppler extension is enabled, **`indusk worktree create <slug>` pulls
|
|
71
|
+
env automatically** as part of provisioning — the developer runs nothing. A
|
|
72
|
+
freshly created worktree is build-ready: its apps already have populated `.env`
|
|
73
|
+
files, pulled from Doppler using the workbench-level token.
|
|
74
|
+
|
|
75
|
+
This is the whole point: worktrees "just work" with zero per-worktree env steps.
|
|
76
|
+
|
|
77
|
+
## Commands
|
|
78
|
+
|
|
79
|
+
| Command | What |
|
|
80
|
+
|---------|------|
|
|
81
|
+
| `pnpm env:pull local` | write `apps/*/.env.local` from Doppler `loc_*` configs |
|
|
82
|
+
| `pnpm env:pull staging` | write `apps/*/.env.staging` from `stg_*` |
|
|
83
|
+
| `pnpm env:pull production` | write `apps/*/.env.production` from `prd_*` |
|
|
84
|
+
| `indusk worktree create <slug>` | create a worktree with env auto-provisioned |
|
|
85
|
+
|
|
86
|
+
## Health
|
|
87
|
+
|
|
88
|
+
- `doppler-cli-installed` — the `doppler` binary is on PATH (`brew install dopplerhq/cli/doppler`).
|
|
89
|
+
- `doppler-token-present` — `.indusk/extensions/doppler/.env` exists and has a `DOPPLER_TOKEN`.
|
|
90
|
+
|
|
91
|
+
If a worktree comes up without env, check both: the binary must be installed and
|
|
92
|
+
the token file must be present at the InDusk level.
|
|
93
|
+
|
|
94
|
+
## Migrating off composable.env
|
|
95
|
+
|
|
96
|
+
composable.env is deprecated. To migrate a project, see numero's
|
|
97
|
+
`composable-env-removal` plan as the worked example: restructure Doppler into
|
|
98
|
+
branched configs, write `env-pull`, replace the generated compose with
|
|
99
|
+
hand-written per-app fragments, delete `env/` + `ce.json`. Reversible until the
|
|
100
|
+
final cleanup.
|
package/package.json
CHANGED
/package/admin/.next/static/{TcnArobszE9wONTBBMWOB → yUJyByMf3DK4Az8t9gKZ5}/_buildManifest.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|