vibebusiness 1.2.11

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.

Potentially problematic release.


This version of vibebusiness might be problematic. Click here for more details.

Files changed (1818) hide show
  1. package/.next/standalone/.env +1 -0
  2. package/.next/standalone/.next/BUILD_ID +1 -0
  3. package/.next/standalone/.next/app-build-manifest.json +86 -0
  4. package/.next/standalone/.next/app-path-routes-manifest.json +1 -0
  5. package/.next/standalone/.next/build-manifest.json +32 -0
  6. package/.next/standalone/.next/package.json +1 -0
  7. package/.next/standalone/.next/prerender-manifest.json +1 -0
  8. package/.next/standalone/.next/react-loadable-manifest.json +1 -0
  9. package/.next/standalone/.next/required-server-files.json +1 -0
  10. package/.next/standalone/.next/routes-manifest.json +1 -0
  11. package/.next/standalone/.next/server/app/_not-found/page.js +1 -0
  12. package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
  13. package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  14. package/.next/standalone/.next/server/app/_not-found.html +1 -0
  15. package/.next/standalone/.next/server/app/_not-found.meta +6 -0
  16. package/.next/standalone/.next/server/app/_not-found.rsc +9 -0
  17. package/.next/standalone/.next/server/app/api/analyze/route.js +1 -0
  18. package/.next/standalone/.next/server/app/api/analyze/route.js.nft.json +1 -0
  19. package/.next/standalone/.next/server/app/api/config/detect-repos/route.js +1 -0
  20. package/.next/standalone/.next/server/app/api/config/detect-repos/route.js.nft.json +1 -0
  21. package/.next/standalone/.next/server/app/api/config/route.js +1 -0
  22. package/.next/standalone/.next/server/app/api/config/route.js.nft.json +1 -0
  23. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js +1 -0
  24. package/.next/standalone/.next/server/app/api/goals/[id]/kpis/route.js.nft.json +1 -0
  25. package/.next/standalone/.next/server/app/api/goals/[id]/route.js +1 -0
  26. package/.next/standalone/.next/server/app/api/goals/[id]/route.js.nft.json +1 -0
  27. package/.next/standalone/.next/server/app/api/goals/route.js +1 -0
  28. package/.next/standalone/.next/server/app/api/goals/route.js.nft.json +1 -0
  29. package/.next/standalone/.next/server/app/api/health/route.js +1 -0
  30. package/.next/standalone/.next/server/app/api/health/route.js.nft.json +1 -0
  31. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js +1 -0
  32. package/.next/standalone/.next/server/app/api/hypotheses/[id]/route.js.nft.json +1 -0
  33. package/.next/standalone/.next/server/app/api/hypotheses/route.js +1 -0
  34. package/.next/standalone/.next/server/app/api/hypotheses/route.js.nft.json +1 -0
  35. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js +1 -0
  36. package/.next/standalone/.next/server/app/api/ideas/[id]/comments/route.js.nft.json +1 -0
  37. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js +1 -0
  38. package/.next/standalone/.next/server/app/api/ideas/[id]/implement/route.js.nft.json +1 -0
  39. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js +1 -0
  40. package/.next/standalone/.next/server/app/api/ideas/[id]/route.js.nft.json +1 -0
  41. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js +1 -0
  42. package/.next/standalone/.next/server/app/api/ideas/[id]/transition/route.js.nft.json +1 -0
  43. package/.next/standalone/.next/server/app/api/ideas/route.js +1 -0
  44. package/.next/standalone/.next/server/app/api/ideas/route.js.nft.json +1 -0
  45. package/.next/standalone/.next/server/app/api/implementations/route.js +1 -0
  46. package/.next/standalone/.next/server/app/api/implementations/route.js.nft.json +1 -0
  47. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js +1 -0
  48. package/.next/standalone/.next/server/app/api/kpis/refresh/route.js.nft.json +1 -0
  49. package/.next/standalone/.next/server/app/goals/[id]/page.js +1 -0
  50. package/.next/standalone/.next/server/app/goals/[id]/page.js.nft.json +1 -0
  51. package/.next/standalone/.next/server/app/goals/[id]/page_client-reference-manifest.js +1 -0
  52. package/.next/standalone/.next/server/app/goals/page.js +1 -0
  53. package/.next/standalone/.next/server/app/goals/page.js.nft.json +1 -0
  54. package/.next/standalone/.next/server/app/goals/page_client-reference-manifest.js +1 -0
  55. package/.next/standalone/.next/server/app/hypotheses/[id]/page.js +1 -0
  56. package/.next/standalone/.next/server/app/hypotheses/[id]/page.js.nft.json +1 -0
  57. package/.next/standalone/.next/server/app/hypotheses/[id]/page_client-reference-manifest.js +1 -0
  58. package/.next/standalone/.next/server/app/hypotheses/page.js +1 -0
  59. package/.next/standalone/.next/server/app/hypotheses/page.js.nft.json +1 -0
  60. package/.next/standalone/.next/server/app/hypotheses/page_client-reference-manifest.js +1 -0
  61. package/.next/standalone/.next/server/app/ideas/[id]/page.js +1 -0
  62. package/.next/standalone/.next/server/app/ideas/[id]/page.js.nft.json +1 -0
  63. package/.next/standalone/.next/server/app/ideas/[id]/page_client-reference-manifest.js +1 -0
  64. package/.next/standalone/.next/server/app/page.js +1 -0
  65. package/.next/standalone/.next/server/app/page.js.nft.json +1 -0
  66. package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -0
  67. package/.next/standalone/.next/server/app/sessions/page.js +1 -0
  68. package/.next/standalone/.next/server/app/sessions/page.js.nft.json +1 -0
  69. package/.next/standalone/.next/server/app/sessions/page_client-reference-manifest.js +1 -0
  70. package/.next/standalone/.next/server/app/settings/page.js +1 -0
  71. package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -0
  72. package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -0
  73. package/.next/standalone/.next/server/app/settings.html +1 -0
  74. package/.next/standalone/.next/server/app/settings.meta +5 -0
  75. package/.next/standalone/.next/server/app/settings.rsc +7 -0
  76. package/.next/standalone/.next/server/app-paths-manifest.json +27 -0
  77. package/.next/standalone/.next/server/chunks/276.js +2 -0
  78. package/.next/standalone/.next/server/chunks/416.js +1 -0
  79. package/.next/standalone/.next/server/chunks/471.js +2 -0
  80. package/.next/standalone/.next/server/chunks/484.js +1 -0
  81. package/.next/standalone/.next/server/chunks/644.js +1 -0
  82. package/.next/standalone/.next/server/chunks/682.js +6 -0
  83. package/.next/standalone/.next/server/chunks/972.js +12 -0
  84. package/.next/standalone/.next/server/font-manifest.json +1 -0
  85. package/.next/standalone/.next/server/middleware-build-manifest.js +1 -0
  86. package/.next/standalone/.next/server/middleware-manifest.json +6 -0
  87. package/.next/standalone/.next/server/middleware-react-loadable-manifest.js +1 -0
  88. package/.next/standalone/.next/server/next-font-manifest.js +1 -0
  89. package/.next/standalone/.next/server/next-font-manifest.json +1 -0
  90. package/.next/standalone/.next/server/pages/404.html +1 -0
  91. package/.next/standalone/.next/server/pages/500.html +1 -0
  92. package/.next/standalone/.next/server/pages/_app.js +1 -0
  93. package/.next/standalone/.next/server/pages/_app.js.nft.json +1 -0
  94. package/.next/standalone/.next/server/pages/_document.js +1 -0
  95. package/.next/standalone/.next/server/pages/_document.js.nft.json +1 -0
  96. package/.next/standalone/.next/server/pages/_error.js +1 -0
  97. package/.next/standalone/.next/server/pages/_error.js.nft.json +1 -0
  98. package/.next/standalone/.next/server/pages-manifest.json +1 -0
  99. package/.next/standalone/.next/server/server-reference-manifest.js +1 -0
  100. package/.next/standalone/.next/server/server-reference-manifest.json +1 -0
  101. package/.next/standalone/.next/server/webpack-runtime.js +1 -0
  102. package/.next/standalone/data/.gitkeep +0 -0
  103. package/.next/standalone/data/business-context.json +252 -0
  104. package/.next/standalone/data/codebase-snapshot.json +82 -0
  105. package/.next/standalone/data/config.json +59 -0
  106. package/.next/standalone/data/goals.json +334 -0
  107. package/.next/standalone/data/hypotheses.json +160 -0
  108. package/.next/standalone/data/ideas.json +3780 -0
  109. package/.next/standalone/data/ideas.json.backup-20260215-185530 +3647 -0
  110. package/.next/standalone/data/implementations.json +735 -0
  111. package/.next/standalone/data/sessions.json +370 -0
  112. package/.next/standalone/node_modules/@next/env/dist/index.js +1 -0
  113. package/.next/standalone/node_modules/@next/env/package.json +36 -0
  114. package/.next/standalone/node_modules/@swc/helpers/_/_interop_require_default/package.json +4 -0
  115. package/.next/standalone/node_modules/@swc/helpers/_/_interop_require_wildcard/package.json +4 -0
  116. package/.next/standalone/node_modules/@swc/helpers/_/_tagged_template_literal_loose/package.json +4 -0
  117. package/.next/standalone/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
  118. package/.next/standalone/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
  119. package/.next/standalone/node_modules/@swc/helpers/cjs/_tagged_template_literal_loose.cjs +10 -0
  120. package/.next/standalone/node_modules/@swc/helpers/package.json +452 -0
  121. package/.next/standalone/node_modules/busboy/lib/index.js +57 -0
  122. package/.next/standalone/node_modules/busboy/lib/types/multipart.js +653 -0
  123. package/.next/standalone/node_modules/busboy/lib/types/urlencoded.js +350 -0
  124. package/.next/standalone/node_modules/busboy/lib/utils.js +596 -0
  125. package/.next/standalone/node_modules/busboy/package.json +22 -0
  126. package/.next/standalone/node_modules/caniuse-lite/data/agents.js +1 -0
  127. package/.next/standalone/node_modules/caniuse-lite/data/browserVersions.js +1 -0
  128. package/.next/standalone/node_modules/caniuse-lite/data/browsers.js +1 -0
  129. package/.next/standalone/node_modules/caniuse-lite/data/features/aac.js +1 -0
  130. package/.next/standalone/node_modules/caniuse-lite/data/features/abortcontroller.js +1 -0
  131. package/.next/standalone/node_modules/caniuse-lite/data/features/ac3-ec3.js +1 -0
  132. package/.next/standalone/node_modules/caniuse-lite/data/features/accelerometer.js +1 -0
  133. package/.next/standalone/node_modules/caniuse-lite/data/features/addeventlistener.js +1 -0
  134. package/.next/standalone/node_modules/caniuse-lite/data/features/alternate-stylesheet.js +1 -0
  135. package/.next/standalone/node_modules/caniuse-lite/data/features/ambient-light.js +1 -0
  136. package/.next/standalone/node_modules/caniuse-lite/data/features/apng.js +1 -0
  137. package/.next/standalone/node_modules/caniuse-lite/data/features/array-find-index.js +1 -0
  138. package/.next/standalone/node_modules/caniuse-lite/data/features/array-find.js +1 -0
  139. package/.next/standalone/node_modules/caniuse-lite/data/features/array-flat.js +1 -0
  140. package/.next/standalone/node_modules/caniuse-lite/data/features/array-includes.js +1 -0
  141. package/.next/standalone/node_modules/caniuse-lite/data/features/arrow-functions.js +1 -0
  142. package/.next/standalone/node_modules/caniuse-lite/data/features/asmjs.js +1 -0
  143. package/.next/standalone/node_modules/caniuse-lite/data/features/async-clipboard.js +1 -0
  144. package/.next/standalone/node_modules/caniuse-lite/data/features/async-functions.js +1 -0
  145. package/.next/standalone/node_modules/caniuse-lite/data/features/atob-btoa.js +1 -0
  146. package/.next/standalone/node_modules/caniuse-lite/data/features/audio-api.js +1 -0
  147. package/.next/standalone/node_modules/caniuse-lite/data/features/audio.js +1 -0
  148. package/.next/standalone/node_modules/caniuse-lite/data/features/audiotracks.js +1 -0
  149. package/.next/standalone/node_modules/caniuse-lite/data/features/autofocus.js +1 -0
  150. package/.next/standalone/node_modules/caniuse-lite/data/features/auxclick.js +1 -0
  151. package/.next/standalone/node_modules/caniuse-lite/data/features/av1.js +1 -0
  152. package/.next/standalone/node_modules/caniuse-lite/data/features/avif.js +1 -0
  153. package/.next/standalone/node_modules/caniuse-lite/data/features/background-attachment.js +1 -0
  154. package/.next/standalone/node_modules/caniuse-lite/data/features/background-clip-text.js +1 -0
  155. package/.next/standalone/node_modules/caniuse-lite/data/features/background-img-opts.js +1 -0
  156. package/.next/standalone/node_modules/caniuse-lite/data/features/background-position-x-y.js +1 -0
  157. package/.next/standalone/node_modules/caniuse-lite/data/features/background-repeat-round-space.js +1 -0
  158. package/.next/standalone/node_modules/caniuse-lite/data/features/background-sync.js +1 -0
  159. package/.next/standalone/node_modules/caniuse-lite/data/features/battery-status.js +1 -0
  160. package/.next/standalone/node_modules/caniuse-lite/data/features/beacon.js +1 -0
  161. package/.next/standalone/node_modules/caniuse-lite/data/features/beforeafterprint.js +1 -0
  162. package/.next/standalone/node_modules/caniuse-lite/data/features/bigint.js +1 -0
  163. package/.next/standalone/node_modules/caniuse-lite/data/features/blobbuilder.js +1 -0
  164. package/.next/standalone/node_modules/caniuse-lite/data/features/bloburls.js +1 -0
  165. package/.next/standalone/node_modules/caniuse-lite/data/features/border-image.js +1 -0
  166. package/.next/standalone/node_modules/caniuse-lite/data/features/border-radius.js +1 -0
  167. package/.next/standalone/node_modules/caniuse-lite/data/features/broadcastchannel.js +1 -0
  168. package/.next/standalone/node_modules/caniuse-lite/data/features/brotli.js +1 -0
  169. package/.next/standalone/node_modules/caniuse-lite/data/features/calc.js +1 -0
  170. package/.next/standalone/node_modules/caniuse-lite/data/features/canvas-blending.js +1 -0
  171. package/.next/standalone/node_modules/caniuse-lite/data/features/canvas-text.js +1 -0
  172. package/.next/standalone/node_modules/caniuse-lite/data/features/canvas.js +1 -0
  173. package/.next/standalone/node_modules/caniuse-lite/data/features/ch-unit.js +1 -0
  174. package/.next/standalone/node_modules/caniuse-lite/data/features/chacha20-poly1305.js +1 -0
  175. package/.next/standalone/node_modules/caniuse-lite/data/features/channel-messaging.js +1 -0
  176. package/.next/standalone/node_modules/caniuse-lite/data/features/childnode-remove.js +1 -0
  177. package/.next/standalone/node_modules/caniuse-lite/data/features/classlist.js +1 -0
  178. package/.next/standalone/node_modules/caniuse-lite/data/features/client-hints-dpr-width-viewport.js +1 -0
  179. package/.next/standalone/node_modules/caniuse-lite/data/features/clipboard.js +1 -0
  180. package/.next/standalone/node_modules/caniuse-lite/data/features/colr-v1.js +1 -0
  181. package/.next/standalone/node_modules/caniuse-lite/data/features/colr.js +1 -0
  182. package/.next/standalone/node_modules/caniuse-lite/data/features/comparedocumentposition.js +1 -0
  183. package/.next/standalone/node_modules/caniuse-lite/data/features/console-basic.js +1 -0
  184. package/.next/standalone/node_modules/caniuse-lite/data/features/console-time.js +1 -0
  185. package/.next/standalone/node_modules/caniuse-lite/data/features/const.js +1 -0
  186. package/.next/standalone/node_modules/caniuse-lite/data/features/constraint-validation.js +1 -0
  187. package/.next/standalone/node_modules/caniuse-lite/data/features/contenteditable.js +1 -0
  188. package/.next/standalone/node_modules/caniuse-lite/data/features/contentsecuritypolicy.js +1 -0
  189. package/.next/standalone/node_modules/caniuse-lite/data/features/contentsecuritypolicy2.js +1 -0
  190. package/.next/standalone/node_modules/caniuse-lite/data/features/cookie-store-api.js +1 -0
  191. package/.next/standalone/node_modules/caniuse-lite/data/features/cors.js +1 -0
  192. package/.next/standalone/node_modules/caniuse-lite/data/features/createimagebitmap.js +1 -0
  193. package/.next/standalone/node_modules/caniuse-lite/data/features/credential-management.js +1 -0
  194. package/.next/standalone/node_modules/caniuse-lite/data/features/cross-document-view-transitions.js +1 -0
  195. package/.next/standalone/node_modules/caniuse-lite/data/features/cryptography.js +1 -0
  196. package/.next/standalone/node_modules/caniuse-lite/data/features/css-all.js +1 -0
  197. package/.next/standalone/node_modules/caniuse-lite/data/features/css-anchor-positioning.js +1 -0
  198. package/.next/standalone/node_modules/caniuse-lite/data/features/css-animation.js +1 -0
  199. package/.next/standalone/node_modules/caniuse-lite/data/features/css-any-link.js +1 -0
  200. package/.next/standalone/node_modules/caniuse-lite/data/features/css-appearance.js +1 -0
  201. package/.next/standalone/node_modules/caniuse-lite/data/features/css-at-counter-style.js +1 -0
  202. package/.next/standalone/node_modules/caniuse-lite/data/features/css-autofill.js +1 -0
  203. package/.next/standalone/node_modules/caniuse-lite/data/features/css-backdrop-filter.js +1 -0
  204. package/.next/standalone/node_modules/caniuse-lite/data/features/css-background-offsets.js +1 -0
  205. package/.next/standalone/node_modules/caniuse-lite/data/features/css-backgroundblendmode.js +1 -0
  206. package/.next/standalone/node_modules/caniuse-lite/data/features/css-boxdecorationbreak.js +1 -0
  207. package/.next/standalone/node_modules/caniuse-lite/data/features/css-boxshadow.js +1 -0
  208. package/.next/standalone/node_modules/caniuse-lite/data/features/css-canvas.js +1 -0
  209. package/.next/standalone/node_modules/caniuse-lite/data/features/css-caret-color.js +1 -0
  210. package/.next/standalone/node_modules/caniuse-lite/data/features/css-cascade-layers.js +1 -0
  211. package/.next/standalone/node_modules/caniuse-lite/data/features/css-cascade-scope.js +1 -0
  212. package/.next/standalone/node_modules/caniuse-lite/data/features/css-case-insensitive.js +1 -0
  213. package/.next/standalone/node_modules/caniuse-lite/data/features/css-clip-path.js +1 -0
  214. package/.next/standalone/node_modules/caniuse-lite/data/features/css-color-adjust.js +1 -0
  215. package/.next/standalone/node_modules/caniuse-lite/data/features/css-color-function.js +1 -0
  216. package/.next/standalone/node_modules/caniuse-lite/data/features/css-conic-gradients.js +1 -0
  217. package/.next/standalone/node_modules/caniuse-lite/data/features/css-container-queries-style.js +1 -0
  218. package/.next/standalone/node_modules/caniuse-lite/data/features/css-container-queries.js +1 -0
  219. package/.next/standalone/node_modules/caniuse-lite/data/features/css-container-query-units.js +1 -0
  220. package/.next/standalone/node_modules/caniuse-lite/data/features/css-containment.js +1 -0
  221. package/.next/standalone/node_modules/caniuse-lite/data/features/css-content-visibility.js +1 -0
  222. package/.next/standalone/node_modules/caniuse-lite/data/features/css-counters.js +1 -0
  223. package/.next/standalone/node_modules/caniuse-lite/data/features/css-crisp-edges.js +1 -0
  224. package/.next/standalone/node_modules/caniuse-lite/data/features/css-cross-fade.js +1 -0
  225. package/.next/standalone/node_modules/caniuse-lite/data/features/css-default-pseudo.js +1 -0
  226. package/.next/standalone/node_modules/caniuse-lite/data/features/css-descendant-gtgt.js +1 -0
  227. package/.next/standalone/node_modules/caniuse-lite/data/features/css-deviceadaptation.js +1 -0
  228. package/.next/standalone/node_modules/caniuse-lite/data/features/css-dir-pseudo.js +1 -0
  229. package/.next/standalone/node_modules/caniuse-lite/data/features/css-display-contents.js +1 -0
  230. package/.next/standalone/node_modules/caniuse-lite/data/features/css-element-function.js +1 -0
  231. package/.next/standalone/node_modules/caniuse-lite/data/features/css-env-function.js +1 -0
  232. package/.next/standalone/node_modules/caniuse-lite/data/features/css-exclusions.js +1 -0
  233. package/.next/standalone/node_modules/caniuse-lite/data/features/css-featurequeries.js +1 -0
  234. package/.next/standalone/node_modules/caniuse-lite/data/features/css-file-selector-button.js +1 -0
  235. package/.next/standalone/node_modules/caniuse-lite/data/features/css-filter-function.js +1 -0
  236. package/.next/standalone/node_modules/caniuse-lite/data/features/css-filters.js +1 -0
  237. package/.next/standalone/node_modules/caniuse-lite/data/features/css-first-letter.js +1 -0
  238. package/.next/standalone/node_modules/caniuse-lite/data/features/css-first-line.js +1 -0
  239. package/.next/standalone/node_modules/caniuse-lite/data/features/css-fixed.js +1 -0
  240. package/.next/standalone/node_modules/caniuse-lite/data/features/css-focus-visible.js +1 -0
  241. package/.next/standalone/node_modules/caniuse-lite/data/features/css-focus-within.js +1 -0
  242. package/.next/standalone/node_modules/caniuse-lite/data/features/css-font-palette.js +1 -0
  243. package/.next/standalone/node_modules/caniuse-lite/data/features/css-font-rendering-controls.js +1 -0
  244. package/.next/standalone/node_modules/caniuse-lite/data/features/css-font-stretch.js +1 -0
  245. package/.next/standalone/node_modules/caniuse-lite/data/features/css-gencontent.js +1 -0
  246. package/.next/standalone/node_modules/caniuse-lite/data/features/css-gradients.js +1 -0
  247. package/.next/standalone/node_modules/caniuse-lite/data/features/css-grid-animation.js +1 -0
  248. package/.next/standalone/node_modules/caniuse-lite/data/features/css-grid-lanes.js +1 -0
  249. package/.next/standalone/node_modules/caniuse-lite/data/features/css-grid.js +1 -0
  250. package/.next/standalone/node_modules/caniuse-lite/data/features/css-hanging-punctuation.js +1 -0
  251. package/.next/standalone/node_modules/caniuse-lite/data/features/css-has.js +1 -0
  252. package/.next/standalone/node_modules/caniuse-lite/data/features/css-hyphens.js +1 -0
  253. package/.next/standalone/node_modules/caniuse-lite/data/features/css-if.js +1 -0
  254. package/.next/standalone/node_modules/caniuse-lite/data/features/css-image-orientation.js +1 -0
  255. package/.next/standalone/node_modules/caniuse-lite/data/features/css-image-set.js +1 -0
  256. package/.next/standalone/node_modules/caniuse-lite/data/features/css-in-out-of-range.js +1 -0
  257. package/.next/standalone/node_modules/caniuse-lite/data/features/css-indeterminate-pseudo.js +1 -0
  258. package/.next/standalone/node_modules/caniuse-lite/data/features/css-initial-letter.js +1 -0
  259. package/.next/standalone/node_modules/caniuse-lite/data/features/css-initial-value.js +1 -0
  260. package/.next/standalone/node_modules/caniuse-lite/data/features/css-lch-lab.js +1 -0
  261. package/.next/standalone/node_modules/caniuse-lite/data/features/css-letter-spacing.js +1 -0
  262. package/.next/standalone/node_modules/caniuse-lite/data/features/css-line-clamp.js +1 -0
  263. package/.next/standalone/node_modules/caniuse-lite/data/features/css-logical-props.js +1 -0
  264. package/.next/standalone/node_modules/caniuse-lite/data/features/css-marker-pseudo.js +1 -0
  265. package/.next/standalone/node_modules/caniuse-lite/data/features/css-masks.js +1 -0
  266. package/.next/standalone/node_modules/caniuse-lite/data/features/css-matches-pseudo.js +1 -0
  267. package/.next/standalone/node_modules/caniuse-lite/data/features/css-math-functions.js +1 -0
  268. package/.next/standalone/node_modules/caniuse-lite/data/features/css-media-interaction.js +1 -0
  269. package/.next/standalone/node_modules/caniuse-lite/data/features/css-media-range-syntax.js +1 -0
  270. package/.next/standalone/node_modules/caniuse-lite/data/features/css-media-resolution.js +1 -0
  271. package/.next/standalone/node_modules/caniuse-lite/data/features/css-media-scripting.js +1 -0
  272. package/.next/standalone/node_modules/caniuse-lite/data/features/css-mediaqueries.js +1 -0
  273. package/.next/standalone/node_modules/caniuse-lite/data/features/css-mixblendmode.js +1 -0
  274. package/.next/standalone/node_modules/caniuse-lite/data/features/css-module-scripts.js +1 -0
  275. package/.next/standalone/node_modules/caniuse-lite/data/features/css-motion-paths.js +1 -0
  276. package/.next/standalone/node_modules/caniuse-lite/data/features/css-namespaces.js +1 -0
  277. package/.next/standalone/node_modules/caniuse-lite/data/features/css-nesting.js +1 -0
  278. package/.next/standalone/node_modules/caniuse-lite/data/features/css-not-sel-list.js +1 -0
  279. package/.next/standalone/node_modules/caniuse-lite/data/features/css-nth-child-of.js +1 -0
  280. package/.next/standalone/node_modules/caniuse-lite/data/features/css-opacity.js +1 -0
  281. package/.next/standalone/node_modules/caniuse-lite/data/features/css-optional-pseudo.js +1 -0
  282. package/.next/standalone/node_modules/caniuse-lite/data/features/css-overflow-anchor.js +1 -0
  283. package/.next/standalone/node_modules/caniuse-lite/data/features/css-overflow-overlay.js +1 -0
  284. package/.next/standalone/node_modules/caniuse-lite/data/features/css-overflow.js +1 -0
  285. package/.next/standalone/node_modules/caniuse-lite/data/features/css-overscroll-behavior.js +1 -0
  286. package/.next/standalone/node_modules/caniuse-lite/data/features/css-page-break.js +1 -0
  287. package/.next/standalone/node_modules/caniuse-lite/data/features/css-paged-media.js +1 -0
  288. package/.next/standalone/node_modules/caniuse-lite/data/features/css-paint-api.js +1 -0
  289. package/.next/standalone/node_modules/caniuse-lite/data/features/css-placeholder-shown.js +1 -0
  290. package/.next/standalone/node_modules/caniuse-lite/data/features/css-placeholder.js +1 -0
  291. package/.next/standalone/node_modules/caniuse-lite/data/features/css-print-color-adjust.js +1 -0
  292. package/.next/standalone/node_modules/caniuse-lite/data/features/css-read-only-write.js +1 -0
  293. package/.next/standalone/node_modules/caniuse-lite/data/features/css-rebeccapurple.js +1 -0
  294. package/.next/standalone/node_modules/caniuse-lite/data/features/css-reflections.js +1 -0
  295. package/.next/standalone/node_modules/caniuse-lite/data/features/css-regions.js +1 -0
  296. package/.next/standalone/node_modules/caniuse-lite/data/features/css-relative-colors.js +1 -0
  297. package/.next/standalone/node_modules/caniuse-lite/data/features/css-repeating-gradients.js +1 -0
  298. package/.next/standalone/node_modules/caniuse-lite/data/features/css-resize.js +1 -0
  299. package/.next/standalone/node_modules/caniuse-lite/data/features/css-revert-value.js +1 -0
  300. package/.next/standalone/node_modules/caniuse-lite/data/features/css-rrggbbaa.js +1 -0
  301. package/.next/standalone/node_modules/caniuse-lite/data/features/css-scroll-behavior.js +1 -0
  302. package/.next/standalone/node_modules/caniuse-lite/data/features/css-scrollbar.js +1 -0
  303. package/.next/standalone/node_modules/caniuse-lite/data/features/css-sel2.js +1 -0
  304. package/.next/standalone/node_modules/caniuse-lite/data/features/css-sel3.js +1 -0
  305. package/.next/standalone/node_modules/caniuse-lite/data/features/css-selection.js +1 -0
  306. package/.next/standalone/node_modules/caniuse-lite/data/features/css-shapes.js +1 -0
  307. package/.next/standalone/node_modules/caniuse-lite/data/features/css-snappoints.js +1 -0
  308. package/.next/standalone/node_modules/caniuse-lite/data/features/css-sticky.js +1 -0
  309. package/.next/standalone/node_modules/caniuse-lite/data/features/css-subgrid.js +1 -0
  310. package/.next/standalone/node_modules/caniuse-lite/data/features/css-supports-api.js +1 -0
  311. package/.next/standalone/node_modules/caniuse-lite/data/features/css-table.js +1 -0
  312. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-align-last.js +1 -0
  313. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-box-trim.js +1 -0
  314. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-indent.js +1 -0
  315. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-justify.js +1 -0
  316. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-orientation.js +1 -0
  317. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-spacing.js +1 -0
  318. package/.next/standalone/node_modules/caniuse-lite/data/features/css-text-wrap-balance.js +1 -0
  319. package/.next/standalone/node_modules/caniuse-lite/data/features/css-textshadow.js +1 -0
  320. package/.next/standalone/node_modules/caniuse-lite/data/features/css-touch-action.js +1 -0
  321. package/.next/standalone/node_modules/caniuse-lite/data/features/css-transitions.js +1 -0
  322. package/.next/standalone/node_modules/caniuse-lite/data/features/css-unicode-bidi.js +1 -0
  323. package/.next/standalone/node_modules/caniuse-lite/data/features/css-unset-value.js +1 -0
  324. package/.next/standalone/node_modules/caniuse-lite/data/features/css-variables.js +1 -0
  325. package/.next/standalone/node_modules/caniuse-lite/data/features/css-when-else.js +1 -0
  326. package/.next/standalone/node_modules/caniuse-lite/data/features/css-widows-orphans.js +1 -0
  327. package/.next/standalone/node_modules/caniuse-lite/data/features/css-width-stretch.js +1 -0
  328. package/.next/standalone/node_modules/caniuse-lite/data/features/css-writing-mode.js +1 -0
  329. package/.next/standalone/node_modules/caniuse-lite/data/features/css-zoom.js +1 -0
  330. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-attr.js +1 -0
  331. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-boxsizing.js +1 -0
  332. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-colors.js +1 -0
  333. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-cursors-grab.js +1 -0
  334. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-cursors-newer.js +1 -0
  335. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-cursors.js +1 -0
  336. package/.next/standalone/node_modules/caniuse-lite/data/features/css3-tabsize.js +1 -0
  337. package/.next/standalone/node_modules/caniuse-lite/data/features/currentcolor.js +1 -0
  338. package/.next/standalone/node_modules/caniuse-lite/data/features/custom-elements.js +1 -0
  339. package/.next/standalone/node_modules/caniuse-lite/data/features/custom-elementsv1.js +1 -0
  340. package/.next/standalone/node_modules/caniuse-lite/data/features/customevent.js +1 -0
  341. package/.next/standalone/node_modules/caniuse-lite/data/features/datalist.js +1 -0
  342. package/.next/standalone/node_modules/caniuse-lite/data/features/dataset.js +1 -0
  343. package/.next/standalone/node_modules/caniuse-lite/data/features/datauri.js +1 -0
  344. package/.next/standalone/node_modules/caniuse-lite/data/features/date-tolocaledatestring.js +1 -0
  345. package/.next/standalone/node_modules/caniuse-lite/data/features/declarative-shadow-dom.js +1 -0
  346. package/.next/standalone/node_modules/caniuse-lite/data/features/decorators.js +1 -0
  347. package/.next/standalone/node_modules/caniuse-lite/data/features/details.js +1 -0
  348. package/.next/standalone/node_modules/caniuse-lite/data/features/deviceorientation.js +1 -0
  349. package/.next/standalone/node_modules/caniuse-lite/data/features/devicepixelratio.js +1 -0
  350. package/.next/standalone/node_modules/caniuse-lite/data/features/dialog.js +1 -0
  351. package/.next/standalone/node_modules/caniuse-lite/data/features/dispatchevent.js +1 -0
  352. package/.next/standalone/node_modules/caniuse-lite/data/features/dnssec.js +1 -0
  353. package/.next/standalone/node_modules/caniuse-lite/data/features/do-not-track.js +1 -0
  354. package/.next/standalone/node_modules/caniuse-lite/data/features/document-currentscript.js +1 -0
  355. package/.next/standalone/node_modules/caniuse-lite/data/features/document-evaluate-xpath.js +1 -0
  356. package/.next/standalone/node_modules/caniuse-lite/data/features/document-execcommand.js +1 -0
  357. package/.next/standalone/node_modules/caniuse-lite/data/features/document-policy.js +1 -0
  358. package/.next/standalone/node_modules/caniuse-lite/data/features/document-scrollingelement.js +1 -0
  359. package/.next/standalone/node_modules/caniuse-lite/data/features/documenthead.js +1 -0
  360. package/.next/standalone/node_modules/caniuse-lite/data/features/dom-manip-convenience.js +1 -0
  361. package/.next/standalone/node_modules/caniuse-lite/data/features/dom-range.js +1 -0
  362. package/.next/standalone/node_modules/caniuse-lite/data/features/domcontentloaded.js +1 -0
  363. package/.next/standalone/node_modules/caniuse-lite/data/features/dommatrix.js +1 -0
  364. package/.next/standalone/node_modules/caniuse-lite/data/features/download.js +1 -0
  365. package/.next/standalone/node_modules/caniuse-lite/data/features/dragndrop.js +1 -0
  366. package/.next/standalone/node_modules/caniuse-lite/data/features/element-closest.js +1 -0
  367. package/.next/standalone/node_modules/caniuse-lite/data/features/element-from-point.js +1 -0
  368. package/.next/standalone/node_modules/caniuse-lite/data/features/element-scroll-methods.js +1 -0
  369. package/.next/standalone/node_modules/caniuse-lite/data/features/eme.js +1 -0
  370. package/.next/standalone/node_modules/caniuse-lite/data/features/eot.js +1 -0
  371. package/.next/standalone/node_modules/caniuse-lite/data/features/es5.js +1 -0
  372. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-class.js +1 -0
  373. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-generators.js +1 -0
  374. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-module-dynamic-import.js +1 -0
  375. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-module.js +1 -0
  376. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-number.js +1 -0
  377. package/.next/standalone/node_modules/caniuse-lite/data/features/es6-string-includes.js +1 -0
  378. package/.next/standalone/node_modules/caniuse-lite/data/features/es6.js +1 -0
  379. package/.next/standalone/node_modules/caniuse-lite/data/features/eventsource.js +1 -0
  380. package/.next/standalone/node_modules/caniuse-lite/data/features/extended-system-fonts.js +1 -0
  381. package/.next/standalone/node_modules/caniuse-lite/data/features/feature-policy.js +1 -0
  382. package/.next/standalone/node_modules/caniuse-lite/data/features/fetch.js +1 -0
  383. package/.next/standalone/node_modules/caniuse-lite/data/features/fieldset-disabled.js +1 -0
  384. package/.next/standalone/node_modules/caniuse-lite/data/features/fileapi.js +1 -0
  385. package/.next/standalone/node_modules/caniuse-lite/data/features/filereader.js +1 -0
  386. package/.next/standalone/node_modules/caniuse-lite/data/features/filereadersync.js +1 -0
  387. package/.next/standalone/node_modules/caniuse-lite/data/features/filesystem.js +1 -0
  388. package/.next/standalone/node_modules/caniuse-lite/data/features/flac.js +1 -0
  389. package/.next/standalone/node_modules/caniuse-lite/data/features/flexbox-gap.js +1 -0
  390. package/.next/standalone/node_modules/caniuse-lite/data/features/flexbox.js +1 -0
  391. package/.next/standalone/node_modules/caniuse-lite/data/features/flow-root.js +1 -0
  392. package/.next/standalone/node_modules/caniuse-lite/data/features/focusin-focusout-events.js +1 -0
  393. package/.next/standalone/node_modules/caniuse-lite/data/features/font-family-system-ui.js +1 -0
  394. package/.next/standalone/node_modules/caniuse-lite/data/features/font-feature.js +1 -0
  395. package/.next/standalone/node_modules/caniuse-lite/data/features/font-kerning.js +1 -0
  396. package/.next/standalone/node_modules/caniuse-lite/data/features/font-loading.js +1 -0
  397. package/.next/standalone/node_modules/caniuse-lite/data/features/font-size-adjust.js +1 -0
  398. package/.next/standalone/node_modules/caniuse-lite/data/features/font-smooth.js +1 -0
  399. package/.next/standalone/node_modules/caniuse-lite/data/features/font-unicode-range.js +1 -0
  400. package/.next/standalone/node_modules/caniuse-lite/data/features/font-variant-alternates.js +1 -0
  401. package/.next/standalone/node_modules/caniuse-lite/data/features/font-variant-numeric.js +1 -0
  402. package/.next/standalone/node_modules/caniuse-lite/data/features/fontface.js +1 -0
  403. package/.next/standalone/node_modules/caniuse-lite/data/features/form-attribute.js +1 -0
  404. package/.next/standalone/node_modules/caniuse-lite/data/features/form-submit-attributes.js +1 -0
  405. package/.next/standalone/node_modules/caniuse-lite/data/features/form-validation.js +1 -0
  406. package/.next/standalone/node_modules/caniuse-lite/data/features/forms.js +1 -0
  407. package/.next/standalone/node_modules/caniuse-lite/data/features/fullscreen.js +1 -0
  408. package/.next/standalone/node_modules/caniuse-lite/data/features/gamepad.js +1 -0
  409. package/.next/standalone/node_modules/caniuse-lite/data/features/geolocation.js +1 -0
  410. package/.next/standalone/node_modules/caniuse-lite/data/features/getboundingclientrect.js +1 -0
  411. package/.next/standalone/node_modules/caniuse-lite/data/features/getcomputedstyle.js +1 -0
  412. package/.next/standalone/node_modules/caniuse-lite/data/features/getelementsbyclassname.js +1 -0
  413. package/.next/standalone/node_modules/caniuse-lite/data/features/getrandomvalues.js +1 -0
  414. package/.next/standalone/node_modules/caniuse-lite/data/features/gyroscope.js +1 -0
  415. package/.next/standalone/node_modules/caniuse-lite/data/features/hardwareconcurrency.js +1 -0
  416. package/.next/standalone/node_modules/caniuse-lite/data/features/hashchange.js +1 -0
  417. package/.next/standalone/node_modules/caniuse-lite/data/features/heif.js +1 -0
  418. package/.next/standalone/node_modules/caniuse-lite/data/features/hevc.js +1 -0
  419. package/.next/standalone/node_modules/caniuse-lite/data/features/hidden.js +1 -0
  420. package/.next/standalone/node_modules/caniuse-lite/data/features/high-resolution-time.js +1 -0
  421. package/.next/standalone/node_modules/caniuse-lite/data/features/history.js +1 -0
  422. package/.next/standalone/node_modules/caniuse-lite/data/features/html-media-capture.js +1 -0
  423. package/.next/standalone/node_modules/caniuse-lite/data/features/html5semantic.js +1 -0
  424. package/.next/standalone/node_modules/caniuse-lite/data/features/http-live-streaming.js +1 -0
  425. package/.next/standalone/node_modules/caniuse-lite/data/features/http2.js +1 -0
  426. package/.next/standalone/node_modules/caniuse-lite/data/features/http3.js +1 -0
  427. package/.next/standalone/node_modules/caniuse-lite/data/features/iframe-sandbox.js +1 -0
  428. package/.next/standalone/node_modules/caniuse-lite/data/features/iframe-seamless.js +1 -0
  429. package/.next/standalone/node_modules/caniuse-lite/data/features/iframe-srcdoc.js +1 -0
  430. package/.next/standalone/node_modules/caniuse-lite/data/features/imagecapture.js +1 -0
  431. package/.next/standalone/node_modules/caniuse-lite/data/features/ime.js +1 -0
  432. package/.next/standalone/node_modules/caniuse-lite/data/features/img-naturalwidth-naturalheight.js +1 -0
  433. package/.next/standalone/node_modules/caniuse-lite/data/features/import-maps.js +1 -0
  434. package/.next/standalone/node_modules/caniuse-lite/data/features/imports.js +1 -0
  435. package/.next/standalone/node_modules/caniuse-lite/data/features/indeterminate-checkbox.js +1 -0
  436. package/.next/standalone/node_modules/caniuse-lite/data/features/indexeddb.js +1 -0
  437. package/.next/standalone/node_modules/caniuse-lite/data/features/indexeddb2.js +1 -0
  438. package/.next/standalone/node_modules/caniuse-lite/data/features/inline-block.js +1 -0
  439. package/.next/standalone/node_modules/caniuse-lite/data/features/innertext.js +1 -0
  440. package/.next/standalone/node_modules/caniuse-lite/data/features/input-autocomplete-onoff.js +1 -0
  441. package/.next/standalone/node_modules/caniuse-lite/data/features/input-color.js +1 -0
  442. package/.next/standalone/node_modules/caniuse-lite/data/features/input-datetime.js +1 -0
  443. package/.next/standalone/node_modules/caniuse-lite/data/features/input-email-tel-url.js +1 -0
  444. package/.next/standalone/node_modules/caniuse-lite/data/features/input-event.js +1 -0
  445. package/.next/standalone/node_modules/caniuse-lite/data/features/input-file-accept.js +1 -0
  446. package/.next/standalone/node_modules/caniuse-lite/data/features/input-file-directory.js +1 -0
  447. package/.next/standalone/node_modules/caniuse-lite/data/features/input-file-multiple.js +1 -0
  448. package/.next/standalone/node_modules/caniuse-lite/data/features/input-inputmode.js +1 -0
  449. package/.next/standalone/node_modules/caniuse-lite/data/features/input-minlength.js +1 -0
  450. package/.next/standalone/node_modules/caniuse-lite/data/features/input-number.js +1 -0
  451. package/.next/standalone/node_modules/caniuse-lite/data/features/input-pattern.js +1 -0
  452. package/.next/standalone/node_modules/caniuse-lite/data/features/input-placeholder.js +1 -0
  453. package/.next/standalone/node_modules/caniuse-lite/data/features/input-range.js +1 -0
  454. package/.next/standalone/node_modules/caniuse-lite/data/features/input-search.js +1 -0
  455. package/.next/standalone/node_modules/caniuse-lite/data/features/input-selection.js +1 -0
  456. package/.next/standalone/node_modules/caniuse-lite/data/features/insert-adjacent.js +1 -0
  457. package/.next/standalone/node_modules/caniuse-lite/data/features/insertadjacenthtml.js +1 -0
  458. package/.next/standalone/node_modules/caniuse-lite/data/features/internationalization.js +1 -0
  459. package/.next/standalone/node_modules/caniuse-lite/data/features/intersectionobserver-v2.js +1 -0
  460. package/.next/standalone/node_modules/caniuse-lite/data/features/intersectionobserver.js +1 -0
  461. package/.next/standalone/node_modules/caniuse-lite/data/features/intl-pluralrules.js +1 -0
  462. package/.next/standalone/node_modules/caniuse-lite/data/features/intrinsic-width.js +1 -0
  463. package/.next/standalone/node_modules/caniuse-lite/data/features/jpeg2000.js +1 -0
  464. package/.next/standalone/node_modules/caniuse-lite/data/features/jpegxl.js +1 -0
  465. package/.next/standalone/node_modules/caniuse-lite/data/features/jpegxr.js +1 -0
  466. package/.next/standalone/node_modules/caniuse-lite/data/features/js-regexp-lookbehind.js +1 -0
  467. package/.next/standalone/node_modules/caniuse-lite/data/features/json.js +1 -0
  468. package/.next/standalone/node_modules/caniuse-lite/data/features/justify-content-space-evenly.js +1 -0
  469. package/.next/standalone/node_modules/caniuse-lite/data/features/kerning-pairs-ligatures.js +1 -0
  470. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-charcode.js +1 -0
  471. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-code.js +1 -0
  472. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-getmodifierstate.js +1 -0
  473. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-key.js +1 -0
  474. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-location.js +1 -0
  475. package/.next/standalone/node_modules/caniuse-lite/data/features/keyboardevent-which.js +1 -0
  476. package/.next/standalone/node_modules/caniuse-lite/data/features/lazyload.js +1 -0
  477. package/.next/standalone/node_modules/caniuse-lite/data/features/let.js +1 -0
  478. package/.next/standalone/node_modules/caniuse-lite/data/features/link-icon-png.js +1 -0
  479. package/.next/standalone/node_modules/caniuse-lite/data/features/link-icon-svg.js +1 -0
  480. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-dns-prefetch.js +1 -0
  481. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-modulepreload.js +1 -0
  482. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-preconnect.js +1 -0
  483. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-prefetch.js +1 -0
  484. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-preload.js +1 -0
  485. package/.next/standalone/node_modules/caniuse-lite/data/features/link-rel-prerender.js +1 -0
  486. package/.next/standalone/node_modules/caniuse-lite/data/features/loading-lazy-attr.js +1 -0
  487. package/.next/standalone/node_modules/caniuse-lite/data/features/localecompare.js +1 -0
  488. package/.next/standalone/node_modules/caniuse-lite/data/features/magnetometer.js +1 -0
  489. package/.next/standalone/node_modules/caniuse-lite/data/features/matchesselector.js +1 -0
  490. package/.next/standalone/node_modules/caniuse-lite/data/features/matchmedia.js +1 -0
  491. package/.next/standalone/node_modules/caniuse-lite/data/features/mathml.js +1 -0
  492. package/.next/standalone/node_modules/caniuse-lite/data/features/maxlength.js +1 -0
  493. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-css-backdrop-pseudo-element.js +1 -0
  494. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate-override.js +1 -0
  495. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-isolate.js +1 -0
  496. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-css-unicode-bidi-plaintext.js +1 -0
  497. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-color.js +1 -0
  498. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-line.js +1 -0
  499. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-shorthand.js +1 -0
  500. package/.next/standalone/node_modules/caniuse-lite/data/features/mdn-text-decoration-style.js +1 -0
  501. package/.next/standalone/node_modules/caniuse-lite/data/features/media-fragments.js +1 -0
  502. package/.next/standalone/node_modules/caniuse-lite/data/features/mediacapture-fromelement.js +1 -0
  503. package/.next/standalone/node_modules/caniuse-lite/data/features/mediarecorder.js +1 -0
  504. package/.next/standalone/node_modules/caniuse-lite/data/features/mediasource.js +1 -0
  505. package/.next/standalone/node_modules/caniuse-lite/data/features/menu.js +1 -0
  506. package/.next/standalone/node_modules/caniuse-lite/data/features/meta-theme-color.js +1 -0
  507. package/.next/standalone/node_modules/caniuse-lite/data/features/meter.js +1 -0
  508. package/.next/standalone/node_modules/caniuse-lite/data/features/midi.js +1 -0
  509. package/.next/standalone/node_modules/caniuse-lite/data/features/minmaxwh.js +1 -0
  510. package/.next/standalone/node_modules/caniuse-lite/data/features/mp3.js +1 -0
  511. package/.next/standalone/node_modules/caniuse-lite/data/features/mpeg-dash.js +1 -0
  512. package/.next/standalone/node_modules/caniuse-lite/data/features/mpeg4.js +1 -0
  513. package/.next/standalone/node_modules/caniuse-lite/data/features/multibackgrounds.js +1 -0
  514. package/.next/standalone/node_modules/caniuse-lite/data/features/multicolumn.js +1 -0
  515. package/.next/standalone/node_modules/caniuse-lite/data/features/mutation-events.js +1 -0
  516. package/.next/standalone/node_modules/caniuse-lite/data/features/mutationobserver.js +1 -0
  517. package/.next/standalone/node_modules/caniuse-lite/data/features/namevalue-storage.js +1 -0
  518. package/.next/standalone/node_modules/caniuse-lite/data/features/native-filesystem-api.js +1 -0
  519. package/.next/standalone/node_modules/caniuse-lite/data/features/nav-timing.js +1 -0
  520. package/.next/standalone/node_modules/caniuse-lite/data/features/netinfo.js +1 -0
  521. package/.next/standalone/node_modules/caniuse-lite/data/features/notifications.js +1 -0
  522. package/.next/standalone/node_modules/caniuse-lite/data/features/object-entries.js +1 -0
  523. package/.next/standalone/node_modules/caniuse-lite/data/features/object-fit.js +1 -0
  524. package/.next/standalone/node_modules/caniuse-lite/data/features/object-observe.js +1 -0
  525. package/.next/standalone/node_modules/caniuse-lite/data/features/object-values.js +1 -0
  526. package/.next/standalone/node_modules/caniuse-lite/data/features/objectrtc.js +1 -0
  527. package/.next/standalone/node_modules/caniuse-lite/data/features/offline-apps.js +1 -0
  528. package/.next/standalone/node_modules/caniuse-lite/data/features/offscreencanvas.js +1 -0
  529. package/.next/standalone/node_modules/caniuse-lite/data/features/ogg-vorbis.js +1 -0
  530. package/.next/standalone/node_modules/caniuse-lite/data/features/ogv.js +1 -0
  531. package/.next/standalone/node_modules/caniuse-lite/data/features/ol-reversed.js +1 -0
  532. package/.next/standalone/node_modules/caniuse-lite/data/features/once-event-listener.js +1 -0
  533. package/.next/standalone/node_modules/caniuse-lite/data/features/online-status.js +1 -0
  534. package/.next/standalone/node_modules/caniuse-lite/data/features/opus.js +1 -0
  535. package/.next/standalone/node_modules/caniuse-lite/data/features/orientation-sensor.js +1 -0
  536. package/.next/standalone/node_modules/caniuse-lite/data/features/outline.js +1 -0
  537. package/.next/standalone/node_modules/caniuse-lite/data/features/pad-start-end.js +1 -0
  538. package/.next/standalone/node_modules/caniuse-lite/data/features/page-transition-events.js +1 -0
  539. package/.next/standalone/node_modules/caniuse-lite/data/features/pagevisibility.js +1 -0
  540. package/.next/standalone/node_modules/caniuse-lite/data/features/passive-event-listener.js +1 -0
  541. package/.next/standalone/node_modules/caniuse-lite/data/features/passkeys.js +1 -0
  542. package/.next/standalone/node_modules/caniuse-lite/data/features/passwordrules.js +1 -0
  543. package/.next/standalone/node_modules/caniuse-lite/data/features/path2d.js +1 -0
  544. package/.next/standalone/node_modules/caniuse-lite/data/features/payment-request.js +1 -0
  545. package/.next/standalone/node_modules/caniuse-lite/data/features/pdf-viewer.js +1 -0
  546. package/.next/standalone/node_modules/caniuse-lite/data/features/permissions-api.js +1 -0
  547. package/.next/standalone/node_modules/caniuse-lite/data/features/permissions-policy.js +1 -0
  548. package/.next/standalone/node_modules/caniuse-lite/data/features/picture-in-picture.js +1 -0
  549. package/.next/standalone/node_modules/caniuse-lite/data/features/picture.js +1 -0
  550. package/.next/standalone/node_modules/caniuse-lite/data/features/ping.js +1 -0
  551. package/.next/standalone/node_modules/caniuse-lite/data/features/png-alpha.js +1 -0
  552. package/.next/standalone/node_modules/caniuse-lite/data/features/pointer-events.js +1 -0
  553. package/.next/standalone/node_modules/caniuse-lite/data/features/pointer.js +1 -0
  554. package/.next/standalone/node_modules/caniuse-lite/data/features/pointerlock.js +1 -0
  555. package/.next/standalone/node_modules/caniuse-lite/data/features/portals.js +1 -0
  556. package/.next/standalone/node_modules/caniuse-lite/data/features/prefers-color-scheme.js +1 -0
  557. package/.next/standalone/node_modules/caniuse-lite/data/features/prefers-reduced-motion.js +1 -0
  558. package/.next/standalone/node_modules/caniuse-lite/data/features/progress.js +1 -0
  559. package/.next/standalone/node_modules/caniuse-lite/data/features/promise-finally.js +1 -0
  560. package/.next/standalone/node_modules/caniuse-lite/data/features/promises.js +1 -0
  561. package/.next/standalone/node_modules/caniuse-lite/data/features/proximity.js +1 -0
  562. package/.next/standalone/node_modules/caniuse-lite/data/features/proxy.js +1 -0
  563. package/.next/standalone/node_modules/caniuse-lite/data/features/publickeypinning.js +1 -0
  564. package/.next/standalone/node_modules/caniuse-lite/data/features/push-api.js +1 -0
  565. package/.next/standalone/node_modules/caniuse-lite/data/features/queryselector.js +1 -0
  566. package/.next/standalone/node_modules/caniuse-lite/data/features/readonly-attr.js +1 -0
  567. package/.next/standalone/node_modules/caniuse-lite/data/features/referrer-policy.js +1 -0
  568. package/.next/standalone/node_modules/caniuse-lite/data/features/registerprotocolhandler.js +1 -0
  569. package/.next/standalone/node_modules/caniuse-lite/data/features/rel-noopener.js +1 -0
  570. package/.next/standalone/node_modules/caniuse-lite/data/features/rel-noreferrer.js +1 -0
  571. package/.next/standalone/node_modules/caniuse-lite/data/features/rellist.js +1 -0
  572. package/.next/standalone/node_modules/caniuse-lite/data/features/rem.js +1 -0
  573. package/.next/standalone/node_modules/caniuse-lite/data/features/requestanimationframe.js +1 -0
  574. package/.next/standalone/node_modules/caniuse-lite/data/features/requestidlecallback.js +1 -0
  575. package/.next/standalone/node_modules/caniuse-lite/data/features/resizeobserver.js +1 -0
  576. package/.next/standalone/node_modules/caniuse-lite/data/features/resource-timing.js +1 -0
  577. package/.next/standalone/node_modules/caniuse-lite/data/features/rest-parameters.js +1 -0
  578. package/.next/standalone/node_modules/caniuse-lite/data/features/rtcpeerconnection.js +1 -0
  579. package/.next/standalone/node_modules/caniuse-lite/data/features/ruby.js +1 -0
  580. package/.next/standalone/node_modules/caniuse-lite/data/features/run-in.js +1 -0
  581. package/.next/standalone/node_modules/caniuse-lite/data/features/same-site-cookie-attribute.js +1 -0
  582. package/.next/standalone/node_modules/caniuse-lite/data/features/screen-orientation.js +1 -0
  583. package/.next/standalone/node_modules/caniuse-lite/data/features/script-async.js +1 -0
  584. package/.next/standalone/node_modules/caniuse-lite/data/features/script-defer.js +1 -0
  585. package/.next/standalone/node_modules/caniuse-lite/data/features/scrollintoview.js +1 -0
  586. package/.next/standalone/node_modules/caniuse-lite/data/features/scrollintoviewifneeded.js +1 -0
  587. package/.next/standalone/node_modules/caniuse-lite/data/features/sdch.js +1 -0
  588. package/.next/standalone/node_modules/caniuse-lite/data/features/selection-api.js +1 -0
  589. package/.next/standalone/node_modules/caniuse-lite/data/features/selectlist.js +1 -0
  590. package/.next/standalone/node_modules/caniuse-lite/data/features/server-timing.js +1 -0
  591. package/.next/standalone/node_modules/caniuse-lite/data/features/serviceworkers.js +1 -0
  592. package/.next/standalone/node_modules/caniuse-lite/data/features/setimmediate.js +1 -0
  593. package/.next/standalone/node_modules/caniuse-lite/data/features/shadowdom.js +1 -0
  594. package/.next/standalone/node_modules/caniuse-lite/data/features/shadowdomv1.js +1 -0
  595. package/.next/standalone/node_modules/caniuse-lite/data/features/sharedarraybuffer.js +1 -0
  596. package/.next/standalone/node_modules/caniuse-lite/data/features/sharedworkers.js +1 -0
  597. package/.next/standalone/node_modules/caniuse-lite/data/features/sni.js +1 -0
  598. package/.next/standalone/node_modules/caniuse-lite/data/features/spdy.js +1 -0
  599. package/.next/standalone/node_modules/caniuse-lite/data/features/speech-recognition.js +1 -0
  600. package/.next/standalone/node_modules/caniuse-lite/data/features/speech-synthesis.js +1 -0
  601. package/.next/standalone/node_modules/caniuse-lite/data/features/spellcheck-attribute.js +1 -0
  602. package/.next/standalone/node_modules/caniuse-lite/data/features/sql-storage.js +1 -0
  603. package/.next/standalone/node_modules/caniuse-lite/data/features/srcset.js +1 -0
  604. package/.next/standalone/node_modules/caniuse-lite/data/features/stream.js +1 -0
  605. package/.next/standalone/node_modules/caniuse-lite/data/features/streams.js +1 -0
  606. package/.next/standalone/node_modules/caniuse-lite/data/features/stricttransportsecurity.js +1 -0
  607. package/.next/standalone/node_modules/caniuse-lite/data/features/style-scoped.js +1 -0
  608. package/.next/standalone/node_modules/caniuse-lite/data/features/subresource-bundling.js +1 -0
  609. package/.next/standalone/node_modules/caniuse-lite/data/features/subresource-integrity.js +1 -0
  610. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-css.js +1 -0
  611. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-filters.js +1 -0
  612. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-fonts.js +1 -0
  613. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-fragment.js +1 -0
  614. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-html.js +1 -0
  615. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-html5.js +1 -0
  616. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-img.js +1 -0
  617. package/.next/standalone/node_modules/caniuse-lite/data/features/svg-smil.js +1 -0
  618. package/.next/standalone/node_modules/caniuse-lite/data/features/svg.js +1 -0
  619. package/.next/standalone/node_modules/caniuse-lite/data/features/sxg.js +1 -0
  620. package/.next/standalone/node_modules/caniuse-lite/data/features/tabindex-attr.js +1 -0
  621. package/.next/standalone/node_modules/caniuse-lite/data/features/template-literals.js +1 -0
  622. package/.next/standalone/node_modules/caniuse-lite/data/features/template.js +1 -0
  623. package/.next/standalone/node_modules/caniuse-lite/data/features/temporal.js +1 -0
  624. package/.next/standalone/node_modules/caniuse-lite/data/features/testfeat.js +1 -0
  625. package/.next/standalone/node_modules/caniuse-lite/data/features/text-decoration.js +1 -0
  626. package/.next/standalone/node_modules/caniuse-lite/data/features/text-emphasis.js +1 -0
  627. package/.next/standalone/node_modules/caniuse-lite/data/features/text-overflow.js +1 -0
  628. package/.next/standalone/node_modules/caniuse-lite/data/features/text-size-adjust.js +1 -0
  629. package/.next/standalone/node_modules/caniuse-lite/data/features/text-stroke.js +1 -0
  630. package/.next/standalone/node_modules/caniuse-lite/data/features/textcontent.js +1 -0
  631. package/.next/standalone/node_modules/caniuse-lite/data/features/textencoder.js +1 -0
  632. package/.next/standalone/node_modules/caniuse-lite/data/features/tls1-1.js +1 -0
  633. package/.next/standalone/node_modules/caniuse-lite/data/features/tls1-2.js +1 -0
  634. package/.next/standalone/node_modules/caniuse-lite/data/features/tls1-3.js +1 -0
  635. package/.next/standalone/node_modules/caniuse-lite/data/features/touch.js +1 -0
  636. package/.next/standalone/node_modules/caniuse-lite/data/features/transforms2d.js +1 -0
  637. package/.next/standalone/node_modules/caniuse-lite/data/features/transforms3d.js +1 -0
  638. package/.next/standalone/node_modules/caniuse-lite/data/features/trusted-types.js +1 -0
  639. package/.next/standalone/node_modules/caniuse-lite/data/features/ttf.js +1 -0
  640. package/.next/standalone/node_modules/caniuse-lite/data/features/typedarrays.js +1 -0
  641. package/.next/standalone/node_modules/caniuse-lite/data/features/u2f.js +1 -0
  642. package/.next/standalone/node_modules/caniuse-lite/data/features/unhandledrejection.js +1 -0
  643. package/.next/standalone/node_modules/caniuse-lite/data/features/upgradeinsecurerequests.js +1 -0
  644. package/.next/standalone/node_modules/caniuse-lite/data/features/url-scroll-to-text-fragment.js +1 -0
  645. package/.next/standalone/node_modules/caniuse-lite/data/features/url.js +1 -0
  646. package/.next/standalone/node_modules/caniuse-lite/data/features/urlsearchparams.js +1 -0
  647. package/.next/standalone/node_modules/caniuse-lite/data/features/use-strict.js +1 -0
  648. package/.next/standalone/node_modules/caniuse-lite/data/features/user-select-none.js +1 -0
  649. package/.next/standalone/node_modules/caniuse-lite/data/features/user-timing.js +1 -0
  650. package/.next/standalone/node_modules/caniuse-lite/data/features/variable-fonts.js +1 -0
  651. package/.next/standalone/node_modules/caniuse-lite/data/features/vector-effect.js +1 -0
  652. package/.next/standalone/node_modules/caniuse-lite/data/features/vibration.js +1 -0
  653. package/.next/standalone/node_modules/caniuse-lite/data/features/video.js +1 -0
  654. package/.next/standalone/node_modules/caniuse-lite/data/features/videotracks.js +1 -0
  655. package/.next/standalone/node_modules/caniuse-lite/data/features/view-transitions.js +1 -0
  656. package/.next/standalone/node_modules/caniuse-lite/data/features/viewport-unit-variants.js +1 -0
  657. package/.next/standalone/node_modules/caniuse-lite/data/features/viewport-units.js +1 -0
  658. package/.next/standalone/node_modules/caniuse-lite/data/features/wai-aria.js +1 -0
  659. package/.next/standalone/node_modules/caniuse-lite/data/features/wake-lock.js +1 -0
  660. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-bigint.js +1 -0
  661. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-bulk-memory.js +1 -0
  662. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-extended-const.js +1 -0
  663. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-gc.js +1 -0
  664. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-multi-memory.js +1 -0
  665. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-multi-value.js +1 -0
  666. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-mutable-globals.js +1 -0
  667. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-nontrapping-fptoint.js +1 -0
  668. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-reference-types.js +1 -0
  669. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-relaxed-simd.js +1 -0
  670. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-signext.js +1 -0
  671. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-simd.js +1 -0
  672. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-tail-calls.js +1 -0
  673. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm-threads.js +1 -0
  674. package/.next/standalone/node_modules/caniuse-lite/data/features/wasm.js +1 -0
  675. package/.next/standalone/node_modules/caniuse-lite/data/features/wav.js +1 -0
  676. package/.next/standalone/node_modules/caniuse-lite/data/features/wbr-element.js +1 -0
  677. package/.next/standalone/node_modules/caniuse-lite/data/features/web-animation.js +1 -0
  678. package/.next/standalone/node_modules/caniuse-lite/data/features/web-app-manifest.js +1 -0
  679. package/.next/standalone/node_modules/caniuse-lite/data/features/web-bluetooth.js +1 -0
  680. package/.next/standalone/node_modules/caniuse-lite/data/features/web-serial.js +1 -0
  681. package/.next/standalone/node_modules/caniuse-lite/data/features/web-share.js +1 -0
  682. package/.next/standalone/node_modules/caniuse-lite/data/features/webauthn.js +1 -0
  683. package/.next/standalone/node_modules/caniuse-lite/data/features/webcodecs.js +1 -0
  684. package/.next/standalone/node_modules/caniuse-lite/data/features/webgl.js +1 -0
  685. package/.next/standalone/node_modules/caniuse-lite/data/features/webgl2.js +1 -0
  686. package/.next/standalone/node_modules/caniuse-lite/data/features/webgpu.js +1 -0
  687. package/.next/standalone/node_modules/caniuse-lite/data/features/webhid.js +1 -0
  688. package/.next/standalone/node_modules/caniuse-lite/data/features/webkit-user-drag.js +1 -0
  689. package/.next/standalone/node_modules/caniuse-lite/data/features/webm.js +1 -0
  690. package/.next/standalone/node_modules/caniuse-lite/data/features/webnfc.js +1 -0
  691. package/.next/standalone/node_modules/caniuse-lite/data/features/webp.js +1 -0
  692. package/.next/standalone/node_modules/caniuse-lite/data/features/websockets.js +1 -0
  693. package/.next/standalone/node_modules/caniuse-lite/data/features/webtransport.js +1 -0
  694. package/.next/standalone/node_modules/caniuse-lite/data/features/webusb.js +1 -0
  695. package/.next/standalone/node_modules/caniuse-lite/data/features/webvr.js +1 -0
  696. package/.next/standalone/node_modules/caniuse-lite/data/features/webvtt.js +1 -0
  697. package/.next/standalone/node_modules/caniuse-lite/data/features/webworkers.js +1 -0
  698. package/.next/standalone/node_modules/caniuse-lite/data/features/webxr.js +1 -0
  699. package/.next/standalone/node_modules/caniuse-lite/data/features/will-change.js +1 -0
  700. package/.next/standalone/node_modules/caniuse-lite/data/features/woff.js +1 -0
  701. package/.next/standalone/node_modules/caniuse-lite/data/features/woff2.js +1 -0
  702. package/.next/standalone/node_modules/caniuse-lite/data/features/word-break.js +1 -0
  703. package/.next/standalone/node_modules/caniuse-lite/data/features/wordwrap.js +1 -0
  704. package/.next/standalone/node_modules/caniuse-lite/data/features/x-doc-messaging.js +1 -0
  705. package/.next/standalone/node_modules/caniuse-lite/data/features/x-frame-options.js +1 -0
  706. package/.next/standalone/node_modules/caniuse-lite/data/features/xhr2.js +1 -0
  707. package/.next/standalone/node_modules/caniuse-lite/data/features/xhtml.js +1 -0
  708. package/.next/standalone/node_modules/caniuse-lite/data/features/xhtmlsmil.js +1 -0
  709. package/.next/standalone/node_modules/caniuse-lite/data/features/xml-serializer.js +1 -0
  710. package/.next/standalone/node_modules/caniuse-lite/data/features/zstd.js +1 -0
  711. package/.next/standalone/node_modules/caniuse-lite/data/features.js +1 -0
  712. package/.next/standalone/node_modules/caniuse-lite/dist/lib/statuses.js +9 -0
  713. package/.next/standalone/node_modules/caniuse-lite/dist/lib/supported.js +9 -0
  714. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/agents.js +47 -0
  715. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/browserVersions.js +1 -0
  716. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/browsers.js +1 -0
  717. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/feature.js +52 -0
  718. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/features.js +6 -0
  719. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/index.js +4 -0
  720. package/.next/standalone/node_modules/caniuse-lite/dist/unpacker/region.js +22 -0
  721. package/.next/standalone/node_modules/caniuse-lite/package.json +34 -0
  722. package/.next/standalone/node_modules/client-only/index.js +0 -0
  723. package/.next/standalone/node_modules/client-only/package.json +19 -0
  724. package/.next/standalone/node_modules/graceful-fs/clone.js +23 -0
  725. package/.next/standalone/node_modules/graceful-fs/graceful-fs.js +448 -0
  726. package/.next/standalone/node_modules/graceful-fs/legacy-streams.js +118 -0
  727. package/.next/standalone/node_modules/graceful-fs/package.json +53 -0
  728. package/.next/standalone/node_modules/graceful-fs/polyfills.js +355 -0
  729. package/.next/standalone/node_modules/nanoid/non-secure/index.cjs +34 -0
  730. package/.next/standalone/node_modules/nanoid/non-secure/package.json +6 -0
  731. package/.next/standalone/node_modules/nanoid/package.json +89 -0
  732. package/.next/standalone/node_modules/next/dist/build/analysis/extract-const-value.js +200 -0
  733. package/.next/standalone/node_modules/next/dist/build/analysis/get-page-static-info.js +496 -0
  734. package/.next/standalone/node_modules/next/dist/build/analysis/parse-module.js +27 -0
  735. package/.next/standalone/node_modules/next/dist/build/babel/loader/get-config.js +335 -0
  736. package/.next/standalone/node_modules/next/dist/build/babel/loader/index.js +38 -0
  737. package/.next/standalone/node_modules/next/dist/build/babel/loader/transform.js +97 -0
  738. package/.next/standalone/node_modules/next/dist/build/babel/loader/util.js +20 -0
  739. package/.next/standalone/node_modules/next/dist/build/babel/plugins/commonjs.js +42 -0
  740. package/.next/standalone/node_modules/next/dist/build/babel/plugins/next-font-unsupported.js +32 -0
  741. package/.next/standalone/node_modules/next/dist/build/babel/plugins/next-page-config.js +116 -0
  742. package/.next/standalone/node_modules/next/dist/build/babel/plugins/next-page-disallow-re-export-all-exports.js +25 -0
  743. package/.next/standalone/node_modules/next/dist/build/babel/plugins/next-ssg-transform.js +328 -0
  744. package/.next/standalone/node_modules/next/dist/build/build-context.js +58 -0
  745. package/.next/standalone/node_modules/next/dist/build/create-compiler-aliases.js +281 -0
  746. package/.next/standalone/node_modules/next/dist/build/deployment-id.js +18 -0
  747. package/.next/standalone/node_modules/next/dist/build/entries.js +624 -0
  748. package/.next/standalone/node_modules/next/dist/build/get-babel-config-file.js +35 -0
  749. package/.next/standalone/node_modules/next/dist/build/handle-externals.js +280 -0
  750. package/.next/standalone/node_modules/next/dist/build/load-entrypoint.js +128 -0
  751. package/.next/standalone/node_modules/next/dist/build/load-jsconfig.js +144 -0
  752. package/.next/standalone/node_modules/next/dist/build/normalize-catchall-routes.js +76 -0
  753. package/.next/standalone/node_modules/next/dist/build/output/index.js +295 -0
  754. package/.next/standalone/node_modules/next/dist/build/output/log.js +115 -0
  755. package/.next/standalone/node_modules/next/dist/build/output/store.js +214 -0
  756. package/.next/standalone/node_modules/next/dist/build/polyfills/fetch/index.js +6 -0
  757. package/.next/standalone/node_modules/next/dist/build/polyfills/fetch/whatwg-fetch.js +7 -0
  758. package/.next/standalone/node_modules/next/dist/build/polyfills/object-assign.js +6 -0
  759. package/.next/standalone/node_modules/next/dist/build/polyfills/object.assign/auto.js +4 -0
  760. package/.next/standalone/node_modules/next/dist/build/polyfills/object.assign/implementation.js +4 -0
  761. package/.next/standalone/node_modules/next/dist/build/polyfills/object.assign/polyfill.js +6 -0
  762. package/.next/standalone/node_modules/next/dist/build/polyfills/object.assign/shim.js +6 -0
  763. package/.next/standalone/node_modules/next/dist/build/polyfills/polyfill-nomodule.js +1 -0
  764. package/.next/standalone/node_modules/next/dist/build/polyfills/process.js +5 -0
  765. package/.next/standalone/node_modules/next/dist/build/swc/index.js +975 -0
  766. package/.next/standalone/node_modules/next/dist/build/swc/options.js +357 -0
  767. package/.next/standalone/node_modules/next/dist/build/utils.js +1584 -0
  768. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/base.js +58 -0
  769. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/index.js +568 -0
  770. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/client.js +47 -0
  771. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/file-resolve.js +21 -0
  772. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/getCssModuleLocalIdent.js +37 -0
  773. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/global.js +62 -0
  774. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/index.js +22 -0
  775. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/modules.js +84 -0
  776. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/loaders/next-font.js +62 -0
  777. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/messages.js +45 -0
  778. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/css/plugins.js +162 -0
  779. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/images/index.js +42 -0
  780. package/.next/standalone/node_modules/next/dist/build/webpack/config/blocks/images/messages.js +16 -0
  781. package/.next/standalone/node_modules/next/dist/build/webpack/config/helpers.js +78 -0
  782. package/.next/standalone/node_modules/next/dist/build/webpack/config/index.js +46 -0
  783. package/.next/standalone/node_modules/next/dist/build/webpack/config/utils.js +13 -0
  784. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/CssSyntaxError.js +32 -0
  785. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/camelcase.js +89 -0
  786. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/index.js +269 -0
  787. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/index.js +36 -0
  788. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-icss-parser.js +107 -0
  789. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-import-parser.js +207 -0
  790. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/plugins/postcss-url-parser.js +327 -0
  791. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/api.js +91 -0
  792. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/runtime/getUrl.js +26 -0
  793. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/css-loader/src/utils.js +463 -0
  794. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/get-module-build-info.js +15 -0
  795. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/codegen.js +156 -0
  796. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/index.js +27 -0
  797. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/interface.js +17 -0
  798. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/loader.js +410 -0
  799. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/minify.js +90 -0
  800. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/lightningcss-loader/src/utils.js +58 -0
  801. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/next-flight-css-loader.js +52 -0
  802. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/next-flight-loader/index.js +120 -0
  803. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js +59 -0
  804. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/next-route-loader/index.js +129 -0
  805. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Error.js +40 -0
  806. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/Warning.js +35 -0
  807. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/index.js +117 -0
  808. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/postcss-loader/src/utils.js +89 -0
  809. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/index.js +100 -0
  810. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/file-protocol.js +70 -0
  811. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/join-function.js +186 -0
  812. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/postcss.js +90 -0
  813. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/resolve-url-loader/lib/value-processor.js +99 -0
  814. package/.next/standalone/node_modules/next/dist/build/webpack/loaders/utils.js +117 -0
  815. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/app-build-manifest-plugin.js +66 -0
  816. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/build-manifest-plugin.js +235 -0
  817. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/copy-file-plugin.js +67 -0
  818. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/css-chunking-plugin.js +277 -0
  819. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/css-minimizer-plugin.js +90 -0
  820. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/define-env-plugin.js +174 -0
  821. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/flight-client-entry-plugin.js +694 -0
  822. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.js +351 -0
  823. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/font-stylesheet-gathering-plugin.js +224 -0
  824. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/jsconfig-paths-plugin.js +219 -0
  825. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/memory-with-gc-cache-plugin.js +114 -0
  826. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/middleware-plugin.js +558 -0
  827. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/mini-css-extract-plugin.js +25 -0
  828. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/next-drop-client-page-plugin.js +85 -0
  829. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.js +120 -0
  830. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/next-trace-entrypoints-plugin.js +524 -0
  831. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/next-types-plugin/index.js +556 -0
  832. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/next-types-plugin/shared.js +14 -0
  833. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/nextjs-require-cache-hot-reloader.js +123 -0
  834. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/optional-peer-dependency-resolve-plugin.js +45 -0
  835. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.js +146 -0
  836. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/profiling-plugin.js +284 -0
  837. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/react-loadable-plugin.js +149 -0
  838. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.js +58 -0
  839. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/telemetry-plugin.js +173 -0
  840. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/terser-webpack-plugin/src/index.js +273 -0
  841. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/getModuleTrace.js +89 -0
  842. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/index.js +43 -0
  843. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parse-dynamic-code-evaluation-error.js +19 -0
  844. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseBabel.js +29 -0
  845. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseCss.js +29 -0
  846. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextAppLoaderError.js +25 -0
  847. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextFontError.js +33 -0
  848. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNextInvalidImportError.js +26 -0
  849. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseNotFoundError.js +150 -0
  850. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseRSC.js +97 -0
  851. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/parseScss.js +42 -0
  852. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/simpleWebpackError.js +18 -0
  853. package/.next/standalone/node_modules/next/dist/build/webpack/plugins/wellknown-errors-plugin/webpackModuleError.js +143 -0
  854. package/.next/standalone/node_modules/next/dist/build/webpack/stringify-request.js +15 -0
  855. package/.next/standalone/node_modules/next/dist/build/webpack/utils.js +97 -0
  856. package/.next/standalone/node_modules/next/dist/build/webpack-config-rules/resolve.js +58 -0
  857. package/.next/standalone/node_modules/next/dist/build/webpack-config.js +2026 -0
  858. package/.next/standalone/node_modules/next/dist/client/add-base-path.js +24 -0
  859. package/.next/standalone/node_modules/next/dist/client/add-locale.js +28 -0
  860. package/.next/standalone/node_modules/next/dist/client/components/action-async-storage-instance.js +20 -0
  861. package/.next/standalone/node_modules/next/dist/client/components/action-async-storage.external.js +20 -0
  862. package/.next/standalone/node_modules/next/dist/client/components/app-router-headers.js +77 -0
  863. package/.next/standalone/node_modules/next/dist/client/components/async-local-storage.js +44 -0
  864. package/.next/standalone/node_modules/next/dist/client/components/bailout-to-client-rendering.js +25 -0
  865. package/.next/standalone/node_modules/next/dist/client/components/dev-root-not-found-boundary.js +50 -0
  866. package/.next/standalone/node_modules/next/dist/client/components/hooks-server-context.js +44 -0
  867. package/.next/standalone/node_modules/next/dist/client/components/match-segments.js +52 -0
  868. package/.next/standalone/node_modules/next/dist/client/components/navigation.js +268 -0
  869. package/.next/standalone/node_modules/next/dist/client/components/navigation.react-server.js +63 -0
  870. package/.next/standalone/node_modules/next/dist/client/components/noop-head.js +21 -0
  871. package/.next/standalone/node_modules/next/dist/client/components/not-found-boundary.js +107 -0
  872. package/.next/standalone/node_modules/next/dist/client/components/not-found-error.js +96 -0
  873. package/.next/standalone/node_modules/next/dist/client/components/not-found.js +43 -0
  874. package/.next/standalone/node_modules/next/dist/client/components/parallel-route-default.js +35 -0
  875. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/CodeFrame.js +120 -0
  876. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/index.js +19 -0
  877. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/CodeFrame/styles.js +30 -0
  878. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/Dialog.js +86 -0
  879. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogBody.js +29 -0
  880. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogContent.js +29 -0
  881. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/DialogHeader.js +29 -0
  882. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/index.js +47 -0
  883. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Dialog/styles.js +30 -0
  884. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/LeftRightDialogHeader.js +178 -0
  885. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/index.js +32 -0
  886. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/LeftRightDialogHeader/styles.js +30 -0
  887. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/Overlay.js +62 -0
  888. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/body-locker.js +62 -0
  889. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/index.js +19 -0
  890. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/maintain--tab-focus.js +2716 -0
  891. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Overlay/styles.js +30 -0
  892. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/ShadowPortal.js +42 -0
  893. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/EditorLink.js +67 -0
  894. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/Terminal.js +108 -0
  895. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/index.js +19 -0
  896. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Terminal/styles.js +30 -0
  897. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/Toast.js +36 -0
  898. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/index.js +32 -0
  899. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/Toast/styles.js +30 -0
  900. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/VersionStalenessInfo.js +104 -0
  901. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/index.js +32 -0
  902. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/VersionStalenessInfo/styles.js +30 -0
  903. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/components/hot-linked-text/index.js +74 -0
  904. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/BuildError.js +99 -0
  905. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/Errors.js +339 -0
  906. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/CallStackFrame.js +81 -0
  907. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/GroupedStackFrames.js +62 -0
  908. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js +186 -0
  909. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js +126 -0
  910. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/format-webpack-messages.js +164 -0
  911. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getErrorByType.js +47 -0
  912. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getRawSourceMap.js +44 -0
  913. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/getSourceMapUrl.js +33 -0
  914. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/group-stack-frames-by-framework.js +36 -0
  915. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/hydration-error-info.js +77 -0
  916. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/launchEditor.js +404 -0
  917. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/nodeStackFrames.js +75 -0
  918. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/noop-template.js +25 -0
  919. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parse-component-stack.js +98 -0
  920. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/parseStack.js +37 -0
  921. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/stack-frame.js +145 -0
  922. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/helpers/use-open-in-editor.js +37 -0
  923. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/hooks/use-on-click-outside.js +44 -0
  924. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CloseIcon.js +46 -0
  925. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/icons/CollapseIcon.js +43 -0
  926. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/icons/FrameworkIcon.js +135 -0
  927. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/styles/Base.js +37 -0
  928. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js +55 -0
  929. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/internal/styles/CssReset.js +37 -0
  930. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/pages/ErrorBoundary.js +56 -0
  931. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/pages/ReactDevOverlay.js +82 -0
  932. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/pages/bus.js +70 -0
  933. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/pages/client.js +172 -0
  934. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/server/middleware-turbopack.js +124 -0
  935. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/server/middleware.js +263 -0
  936. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/server/shared.js +103 -0
  937. package/.next/standalone/node_modules/next/dist/client/components/react-dev-overlay/shared.js +187 -0
  938. package/.next/standalone/node_modules/next/dist/client/components/redirect-status-code.js +24 -0
  939. package/.next/standalone/node_modules/next/dist/client/components/redirect.js +115 -0
  940. package/.next/standalone/node_modules/next/dist/client/components/request-async-storage-instance.js +20 -0
  941. package/.next/standalone/node_modules/next/dist/client/components/request-async-storage.external.js +37 -0
  942. package/.next/standalone/node_modules/next/dist/client/components/router-reducer/reducers/get-segment-value.js +21 -0
  943. package/.next/standalone/node_modules/next/dist/client/components/static-generation-async-storage-instance.js +20 -0
  944. package/.next/standalone/node_modules/next/dist/client/components/static-generation-async-storage.external.js +20 -0
  945. package/.next/standalone/node_modules/next/dist/client/components/static-generation-bailout.js +43 -0
  946. package/.next/standalone/node_modules/next/dist/client/detect-domain-locale.js +26 -0
  947. package/.next/standalone/node_modules/next/dist/client/has-base-path.js +23 -0
  948. package/.next/standalone/node_modules/next/dist/client/head-manager.js +205 -0
  949. package/.next/standalone/node_modules/next/dist/client/normalize-trailing-slash.js +36 -0
  950. package/.next/standalone/node_modules/next/dist/client/remove-base-path.js +32 -0
  951. package/.next/standalone/node_modules/next/dist/client/remove-locale.js +28 -0
  952. package/.next/standalone/node_modules/next/dist/client/request-idle-callback.js +44 -0
  953. package/.next/standalone/node_modules/next/dist/client/resolve-href.js +79 -0
  954. package/.next/standalone/node_modules/next/dist/client/route-loader.js +319 -0
  955. package/.next/standalone/node_modules/next/dist/client/router.js +189 -0
  956. package/.next/standalone/node_modules/next/dist/client/script.js +357 -0
  957. package/.next/standalone/node_modules/next/dist/client/trusted-types.js +40 -0
  958. package/.next/standalone/node_modules/next/dist/client/with-router.js +37 -0
  959. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js +336 -0
  960. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json +1 -0
  961. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js +46 -0
  962. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json +1 -0
  963. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js +1 -0
  964. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/blob.js.text.js +1 -0
  965. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js +1 -0
  966. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/crypto.js.text.js +1 -0
  967. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js +1 -0
  968. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/fetch.js.text.js +1 -0
  969. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js +5 -0
  970. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js +251 -0
  971. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json +1 -0
  972. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/structured-clone.js.text.js +1 -0
  973. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js +1 -0
  974. package/.next/standalone/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js +1 -0
  975. package/.next/standalone/node_modules/next/dist/compiled/@hapi/accept/index.js +1 -0
  976. package/.next/standalone/node_modules/next/dist/compiled/@hapi/accept/package.json +1 -0
  977. package/.next/standalone/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -0
  978. package/.next/standalone/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json +1 -0
  979. package/.next/standalone/node_modules/next/dist/compiled/@napi-rs/triples/index.js +1 -0
  980. package/.next/standalone/node_modules/next/dist/compiled/@napi-rs/triples/package.json +1 -0
  981. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/constants.js +10 -0
  982. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/fontkit/index.js +1 -0
  983. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/format-available-values.js +9 -0
  984. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/fetch-css-from-google-fonts.js +65 -0
  985. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/fetch-font-file.js +39 -0
  986. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/find-font-files-in-css.js +35 -0
  987. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/font-data.json +14483 -0
  988. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/get-fallback-font-override-metrics.js +53 -0
  989. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/get-font-axes.js +67 -0
  990. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/get-google-fonts-url.js +56 -0
  991. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/get-proxy-agent.js +24 -0
  992. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/google-fonts-metadata.js +8 -0
  993. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/loader.js +165 -0
  994. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/retry.js +19 -0
  995. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/sort-fonts-variant-values.js +27 -0
  996. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/google/validate-google-font-function-call.js +97 -0
  997. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/local/get-fallback-metrics-from-font-file.js +86 -0
  998. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/local/loader.js +75 -0
  999. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/local/pick-font-file-for-fallback-generation.js +86 -0
  1000. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/local/validate-local-font-function-call.js +73 -0
  1001. package/.next/standalone/node_modules/next/dist/compiled/@next/font/dist/next-font-error.js +12 -0
  1002. package/.next/standalone/node_modules/next/dist/compiled/@next/font/google/loader.js +1 -0
  1003. package/.next/standalone/node_modules/next/dist/compiled/@next/font/local/loader.js +1 -0
  1004. package/.next/standalone/node_modules/next/dist/compiled/@next/font/package.json +1 -0
  1005. package/.next/standalone/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/ReactRefreshWebpackPlugin.js +130 -0
  1006. package/.next/standalone/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/ReactRefreshModule.runtime.js +69 -0
  1007. package/.next/standalone/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/internal/helpers.js +170 -0
  1008. package/.next/standalone/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/loader.js +21 -0
  1009. package/.next/standalone/node_modules/next/dist/compiled/@next/react-refresh-utils/dist/runtime.js +27 -0
  1010. package/.next/standalone/node_modules/next/dist/compiled/@opentelemetry/api/index.js +1 -0
  1011. package/.next/standalone/node_modules/next/dist/compiled/@opentelemetry/api/package.json +1 -0
  1012. package/.next/standalone/node_modules/next/dist/compiled/@vercel/nft/LICENSE +7 -0
  1013. package/.next/standalone/node_modules/next/dist/compiled/@vercel/nft/index.js +24 -0
  1014. package/.next/standalone/node_modules/next/dist/compiled/@vercel/nft/package.json +1 -0
  1015. package/.next/standalone/node_modules/next/dist/compiled/acorn/acorn.js +1 -0
  1016. package/.next/standalone/node_modules/next/dist/compiled/acorn/package.json +1 -0
  1017. package/.next/standalone/node_modules/next/dist/compiled/amphtml-validator/index.js +17 -0
  1018. package/.next/standalone/node_modules/next/dist/compiled/amphtml-validator/package.json +1 -0
  1019. package/.next/standalone/node_modules/next/dist/compiled/anser/index.js +1 -0
  1020. package/.next/standalone/node_modules/next/dist/compiled/anser/package.json +1 -0
  1021. package/.next/standalone/node_modules/next/dist/compiled/assert/assert.js +7 -0
  1022. package/.next/standalone/node_modules/next/dist/compiled/assert/package.json +1 -0
  1023. package/.next/standalone/node_modules/next/dist/compiled/async-retry/index.js +1 -0
  1024. package/.next/standalone/node_modules/next/dist/compiled/async-retry/package.json +1 -0
  1025. package/.next/standalone/node_modules/next/dist/compiled/async-sema/index.js +1 -0
  1026. package/.next/standalone/node_modules/next/dist/compiled/async-sema/package.json +1 -0
  1027. package/.next/standalone/node_modules/next/dist/compiled/babel/bundle.js +1871 -0
  1028. package/.next/standalone/node_modules/next/dist/compiled/babel/code-frame.js +1 -0
  1029. package/.next/standalone/node_modules/next/dist/compiled/babel/core-lib-block-hoist-plugin.js +1 -0
  1030. package/.next/standalone/node_modules/next/dist/compiled/babel/core-lib-config.js +1 -0
  1031. package/.next/standalone/node_modules/next/dist/compiled/babel/core-lib-normalize-file.js +1 -0
  1032. package/.next/standalone/node_modules/next/dist/compiled/babel/core-lib-normalize-opts.js +1 -0
  1033. package/.next/standalone/node_modules/next/dist/compiled/babel/core-lib-plugin-pass.js +1 -0
  1034. package/.next/standalone/node_modules/next/dist/compiled/babel/core.js +1 -0
  1035. package/.next/standalone/node_modules/next/dist/compiled/babel/generator.js +1 -0
  1036. package/.next/standalone/node_modules/next/dist/compiled/babel/package.json +1 -0
  1037. package/.next/standalone/node_modules/next/dist/compiled/babel/parser.js +1 -0
  1038. package/.next/standalone/node_modules/next/dist/compiled/babel/plugin-transform-define.js +1 -0
  1039. package/.next/standalone/node_modules/next/dist/compiled/babel/plugin-transform-modules-commonjs.js +1 -0
  1040. package/.next/standalone/node_modules/next/dist/compiled/babel/traverse.js +1 -0
  1041. package/.next/standalone/node_modules/next/dist/compiled/babel/types.js +1 -0
  1042. package/.next/standalone/node_modules/next/dist/compiled/babel-packages/package.json +1 -0
  1043. package/.next/standalone/node_modules/next/dist/compiled/babel-packages/packages-bundle.js +399 -0
  1044. package/.next/standalone/node_modules/next/dist/compiled/browserify-zlib/index.js +1 -0
  1045. package/.next/standalone/node_modules/next/dist/compiled/browserify-zlib/package.json +1 -0
  1046. package/.next/standalone/node_modules/next/dist/compiled/browserslist/index.js +1 -0
  1047. package/.next/standalone/node_modules/next/dist/compiled/browserslist/package.json +1 -0
  1048. package/.next/standalone/node_modules/next/dist/compiled/buffer/index.js +9 -0
  1049. package/.next/standalone/node_modules/next/dist/compiled/buffer/package.json +1 -0
  1050. package/.next/standalone/node_modules/next/dist/compiled/bytes/index.js +8 -0
  1051. package/.next/standalone/node_modules/next/dist/compiled/bytes/package.json +1 -0
  1052. package/.next/standalone/node_modules/next/dist/compiled/ci-info/index.js +1 -0
  1053. package/.next/standalone/node_modules/next/dist/compiled/ci-info/package.json +1 -0
  1054. package/.next/standalone/node_modules/next/dist/compiled/commander/index.js +1 -0
  1055. package/.next/standalone/node_modules/next/dist/compiled/commander/package.json +1 -0
  1056. package/.next/standalone/node_modules/next/dist/compiled/comment-json/index.js +7 -0
  1057. package/.next/standalone/node_modules/next/dist/compiled/comment-json/package.json +1 -0
  1058. package/.next/standalone/node_modules/next/dist/compiled/compression/index.js +51 -0
  1059. package/.next/standalone/node_modules/next/dist/compiled/compression/package.json +1 -0
  1060. package/.next/standalone/node_modules/next/dist/compiled/conf/index.js +15 -0
  1061. package/.next/standalone/node_modules/next/dist/compiled/conf/package.json +1 -0
  1062. package/.next/standalone/node_modules/next/dist/compiled/constants-browserify/constants.json +209 -0
  1063. package/.next/standalone/node_modules/next/dist/compiled/constants-browserify/package.json +1 -0
  1064. package/.next/standalone/node_modules/next/dist/compiled/content-disposition/index.js +6 -0
  1065. package/.next/standalone/node_modules/next/dist/compiled/content-disposition/package.json +1 -0
  1066. package/.next/standalone/node_modules/next/dist/compiled/cookie/index.js +7 -0
  1067. package/.next/standalone/node_modules/next/dist/compiled/cookie/package.json +1 -0
  1068. package/.next/standalone/node_modules/next/dist/compiled/cross-spawn/index.js +1 -0
  1069. package/.next/standalone/node_modules/next/dist/compiled/cross-spawn/package.json +1 -0
  1070. package/.next/standalone/node_modules/next/dist/compiled/crypto-browserify/index.js +3 -0
  1071. package/.next/standalone/node_modules/next/dist/compiled/crypto-browserify/package.json +1 -0
  1072. package/.next/standalone/node_modules/next/dist/compiled/css.escape/css.escape.js +1 -0
  1073. package/.next/standalone/node_modules/next/dist/compiled/css.escape/package.json +1 -0
  1074. package/.next/standalone/node_modules/next/dist/compiled/cssnano-simple/index.js +190 -0
  1075. package/.next/standalone/node_modules/next/dist/compiled/data-uri-to-buffer/index.js +1 -0
  1076. package/.next/standalone/node_modules/next/dist/compiled/data-uri-to-buffer/package.json +1 -0
  1077. package/.next/standalone/node_modules/next/dist/compiled/debug/index.js +1 -0
  1078. package/.next/standalone/node_modules/next/dist/compiled/debug/package.json +1 -0
  1079. package/.next/standalone/node_modules/next/dist/compiled/devalue/devalue.umd.js +1 -0
  1080. package/.next/standalone/node_modules/next/dist/compiled/devalue/package.json +1 -0
  1081. package/.next/standalone/node_modules/next/dist/compiled/domain-browser/index.js +1 -0
  1082. package/.next/standalone/node_modules/next/dist/compiled/domain-browser/package.json +1 -0
  1083. package/.next/standalone/node_modules/next/dist/compiled/edge-runtime/index.js +1 -0
  1084. package/.next/standalone/node_modules/next/dist/compiled/edge-runtime/package.json +1 -0
  1085. package/.next/standalone/node_modules/next/dist/compiled/events/events.js +1 -0
  1086. package/.next/standalone/node_modules/next/dist/compiled/events/package.json +1 -0
  1087. package/.next/standalone/node_modules/next/dist/compiled/find-up/index.js +1 -0
  1088. package/.next/standalone/node_modules/next/dist/compiled/find-up/package.json +1 -0
  1089. package/.next/standalone/node_modules/next/dist/compiled/fresh/index.js +8 -0
  1090. package/.next/standalone/node_modules/next/dist/compiled/fresh/package.json +1 -0
  1091. package/.next/standalone/node_modules/next/dist/compiled/get-orientation/index.js +1 -0
  1092. package/.next/standalone/node_modules/next/dist/compiled/get-orientation/package.json +1 -0
  1093. package/.next/standalone/node_modules/next/dist/compiled/glob/glob.js +1 -0
  1094. package/.next/standalone/node_modules/next/dist/compiled/glob/package.json +1 -0
  1095. package/.next/standalone/node_modules/next/dist/compiled/gzip-size/index.js +1 -0
  1096. package/.next/standalone/node_modules/next/dist/compiled/gzip-size/package.json +1 -0
  1097. package/.next/standalone/node_modules/next/dist/compiled/http-proxy/index.js +34 -0
  1098. package/.next/standalone/node_modules/next/dist/compiled/http-proxy/package.json +1 -0
  1099. package/.next/standalone/node_modules/next/dist/compiled/http-proxy-agent/index.js +1 -0
  1100. package/.next/standalone/node_modules/next/dist/compiled/http-proxy-agent/package.json +1 -0
  1101. package/.next/standalone/node_modules/next/dist/compiled/https-browserify/index.js +1 -0
  1102. package/.next/standalone/node_modules/next/dist/compiled/https-browserify/package.json +1 -0
  1103. package/.next/standalone/node_modules/next/dist/compiled/https-proxy-agent/index.js +1 -0
  1104. package/.next/standalone/node_modules/next/dist/compiled/https-proxy-agent/package.json +1 -0
  1105. package/.next/standalone/node_modules/next/dist/compiled/icss-utils/index.js +1 -0
  1106. package/.next/standalone/node_modules/next/dist/compiled/icss-utils/package.json +1 -0
  1107. package/.next/standalone/node_modules/next/dist/compiled/ignore-loader/index.js +1 -0
  1108. package/.next/standalone/node_modules/next/dist/compiled/ignore-loader/package.json +1 -0
  1109. package/.next/standalone/node_modules/next/dist/compiled/image-size/index.js +1 -0
  1110. package/.next/standalone/node_modules/next/dist/compiled/image-size/package.json +1 -0
  1111. package/.next/standalone/node_modules/next/dist/compiled/is-animated/index.js +1 -0
  1112. package/.next/standalone/node_modules/next/dist/compiled/is-animated/package.json +1 -0
  1113. package/.next/standalone/node_modules/next/dist/compiled/is-docker/index.js +1 -0
  1114. package/.next/standalone/node_modules/next/dist/compiled/is-docker/package.json +1 -0
  1115. package/.next/standalone/node_modules/next/dist/compiled/is-wsl/index.js +1 -0
  1116. package/.next/standalone/node_modules/next/dist/compiled/is-wsl/package.json +1 -0
  1117. package/.next/standalone/node_modules/next/dist/compiled/jest-worker/index.js +1 -0
  1118. package/.next/standalone/node_modules/next/dist/compiled/jest-worker/package.json +1 -0
  1119. package/.next/standalone/node_modules/next/dist/compiled/jest-worker/processChild.js +1 -0
  1120. package/.next/standalone/node_modules/next/dist/compiled/jest-worker/threadChild.js +1 -0
  1121. package/.next/standalone/node_modules/next/dist/compiled/json5/index.js +1 -0
  1122. package/.next/standalone/node_modules/next/dist/compiled/json5/package.json +1 -0
  1123. package/.next/standalone/node_modules/next/dist/compiled/jsonwebtoken/index.js +11 -0
  1124. package/.next/standalone/node_modules/next/dist/compiled/jsonwebtoken/package.json +1 -0
  1125. package/.next/standalone/node_modules/next/dist/compiled/loader-utils2/index.js +1 -0
  1126. package/.next/standalone/node_modules/next/dist/compiled/loader-utils2/package.json +1 -0
  1127. package/.next/standalone/node_modules/next/dist/compiled/loader-utils3/index.js +1 -0
  1128. package/.next/standalone/node_modules/next/dist/compiled/loader-utils3/package.json +1 -0
  1129. package/.next/standalone/node_modules/next/dist/compiled/lodash.curry/index.js +1 -0
  1130. package/.next/standalone/node_modules/next/dist/compiled/lodash.curry/package.json +1 -0
  1131. package/.next/standalone/node_modules/next/dist/compiled/lru-cache/index.js +1 -0
  1132. package/.next/standalone/node_modules/next/dist/compiled/lru-cache/package.json +1 -0
  1133. package/.next/standalone/node_modules/next/dist/compiled/mini-css-extract-plugin/cjs.js +1 -0
  1134. package/.next/standalone/node_modules/next/dist/compiled/mini-css-extract-plugin/index.js +1 -0
  1135. package/.next/standalone/node_modules/next/dist/compiled/mini-css-extract-plugin/package.json +1 -0
  1136. package/.next/standalone/node_modules/next/dist/compiled/nanoid/index.cjs +1 -0
  1137. package/.next/standalone/node_modules/next/dist/compiled/nanoid/package.json +1 -0
  1138. package/.next/standalone/node_modules/next/dist/compiled/native-url/index.js +1 -0
  1139. package/.next/standalone/node_modules/next/dist/compiled/native-url/package.json +1 -0
  1140. package/.next/standalone/node_modules/next/dist/compiled/neo-async/async.js +1 -0
  1141. package/.next/standalone/node_modules/next/dist/compiled/neo-async/package.json +1 -0
  1142. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-experimental.runtime.prod.js +21 -0
  1143. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +21 -0
  1144. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +21 -0
  1145. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js +21 -0
  1146. package/.next/standalone/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js +7 -0
  1147. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +32 -0
  1148. package/.next/standalone/node_modules/next/dist/compiled/next-server/pages.runtime.prod.js +32 -0
  1149. package/.next/standalone/node_modules/next/dist/compiled/node-fetch/index.js +1 -0
  1150. package/.next/standalone/node_modules/next/dist/compiled/node-fetch/package.json +1 -0
  1151. package/.next/standalone/node_modules/next/dist/compiled/node-html-parser/index.js +2 -0
  1152. package/.next/standalone/node_modules/next/dist/compiled/node-html-parser/package.json +1 -0
  1153. package/.next/standalone/node_modules/next/dist/compiled/os-browserify/browser.js +1 -0
  1154. package/.next/standalone/node_modules/next/dist/compiled/os-browserify/package.json +1 -0
  1155. package/.next/standalone/node_modules/next/dist/compiled/p-limit/index.js +1 -0
  1156. package/.next/standalone/node_modules/next/dist/compiled/p-limit/package.json +1 -0
  1157. package/.next/standalone/node_modules/next/dist/compiled/path-browserify/index.js +1 -0
  1158. package/.next/standalone/node_modules/next/dist/compiled/path-browserify/package.json +1 -0
  1159. package/.next/standalone/node_modules/next/dist/compiled/path-to-regexp/index.js +406 -0
  1160. package/.next/standalone/node_modules/next/dist/compiled/picomatch/index.js +1 -0
  1161. package/.next/standalone/node_modules/next/dist/compiled/picomatch/package.json +1 -0
  1162. package/.next/standalone/node_modules/next/dist/compiled/platform/package.json +1 -0
  1163. package/.next/standalone/node_modules/next/dist/compiled/platform/platform.js +7 -0
  1164. package/.next/standalone/node_modules/next/dist/compiled/postcss-flexbugs-fixes/index.js +1 -0
  1165. package/.next/standalone/node_modules/next/dist/compiled/postcss-flexbugs-fixes/package.json +1 -0
  1166. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-extract-imports/index.js +1 -0
  1167. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-extract-imports/package.json +1 -0
  1168. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-local-by-default/index.js +2 -0
  1169. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-local-by-default/package.json +1 -0
  1170. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-scope/index.js +2 -0
  1171. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-scope/package.json +1 -0
  1172. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-values/index.js +1 -0
  1173. package/.next/standalone/node_modules/next/dist/compiled/postcss-modules-values/package.json +1 -0
  1174. package/.next/standalone/node_modules/next/dist/compiled/postcss-plugin-stub-for-cssnano-simple/index.js +1 -0
  1175. package/.next/standalone/node_modules/next/dist/compiled/postcss-preset-env/index.cjs +94 -0
  1176. package/.next/standalone/node_modules/next/dist/compiled/postcss-preset-env/package.json +1 -0
  1177. package/.next/standalone/node_modules/next/dist/compiled/postcss-scss/package.json +1 -0
  1178. package/.next/standalone/node_modules/next/dist/compiled/postcss-scss/scss-syntax.js +1 -0
  1179. package/.next/standalone/node_modules/next/dist/compiled/postcss-value-parser/index.js +1 -0
  1180. package/.next/standalone/node_modules/next/dist/compiled/postcss-value-parser/package.json +1 -0
  1181. package/.next/standalone/node_modules/next/dist/compiled/process/browser.js +1 -0
  1182. package/.next/standalone/node_modules/next/dist/compiled/process/package.json +1 -0
  1183. package/.next/standalone/node_modules/next/dist/compiled/punycode/package.json +1 -0
  1184. package/.next/standalone/node_modules/next/dist/compiled/punycode/punycode.js +1 -0
  1185. package/.next/standalone/node_modules/next/dist/compiled/querystring-es3/index.js +1 -0
  1186. package/.next/standalone/node_modules/next/dist/compiled/querystring-es3/package.json +1 -0
  1187. package/.next/standalone/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js +221 -0
  1188. package/.next/standalone/node_modules/next/dist/compiled/react-is/cjs/react-is.production.min.js +14 -0
  1189. package/.next/standalone/node_modules/next/dist/compiled/react-is/index.js +7 -0
  1190. package/.next/standalone/node_modules/next/dist/compiled/react-is/package.json +26 -0
  1191. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/babel.js +7 -0
  1192. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-babel.development.js +842 -0
  1193. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-babel.production.min.js +24 -0
  1194. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.development.js +658 -0
  1195. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/cjs/react-refresh-runtime.production.min.js +10 -0
  1196. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/package.json +39 -0
  1197. package/.next/standalone/node_modules/next/dist/compiled/react-refresh/runtime.js +7 -0
  1198. package/.next/standalone/node_modules/next/dist/compiled/regenerator-runtime/package.json +19 -0
  1199. package/.next/standalone/node_modules/next/dist/compiled/regenerator-runtime/runtime.js +729 -0
  1200. package/.next/standalone/node_modules/next/dist/compiled/sass-loader/cjs.js +1 -0
  1201. package/.next/standalone/node_modules/next/dist/compiled/sass-loader/package.json +1 -0
  1202. package/.next/standalone/node_modules/next/dist/compiled/schema-utils3/index.js +3 -0
  1203. package/.next/standalone/node_modules/next/dist/compiled/schema-utils3/package.json +1 -0
  1204. package/.next/standalone/node_modules/next/dist/compiled/semver/index.js +1 -0
  1205. package/.next/standalone/node_modules/next/dist/compiled/semver/package.json +1 -0
  1206. package/.next/standalone/node_modules/next/dist/compiled/send/index.js +85 -0
  1207. package/.next/standalone/node_modules/next/dist/compiled/send/package.json +1 -0
  1208. package/.next/standalone/node_modules/next/dist/compiled/setimmediate/package.json +1 -0
  1209. package/.next/standalone/node_modules/next/dist/compiled/setimmediate/setImmediate.js +1 -0
  1210. package/.next/standalone/node_modules/next/dist/compiled/shell-quote/index.js +1 -0
  1211. package/.next/standalone/node_modules/next/dist/compiled/shell-quote/package.json +1 -0
  1212. package/.next/standalone/node_modules/next/dist/compiled/source-map/package.json +1 -0
  1213. package/.next/standalone/node_modules/next/dist/compiled/source-map/source-map.js +1 -0
  1214. package/.next/standalone/node_modules/next/dist/compiled/source-map08/package.json +1 -0
  1215. package/.next/standalone/node_modules/next/dist/compiled/source-map08/source-map.js +3002 -0
  1216. package/.next/standalone/node_modules/next/dist/compiled/stacktrace-parser/package.json +1 -0
  1217. package/.next/standalone/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -0
  1218. package/.next/standalone/node_modules/next/dist/compiled/stream-browserify/index.js +1 -0
  1219. package/.next/standalone/node_modules/next/dist/compiled/stream-browserify/package.json +1 -0
  1220. package/.next/standalone/node_modules/next/dist/compiled/stream-http/index.js +1 -0
  1221. package/.next/standalone/node_modules/next/dist/compiled/stream-http/package.json +1 -0
  1222. package/.next/standalone/node_modules/next/dist/compiled/string-hash/index.js +1 -0
  1223. package/.next/standalone/node_modules/next/dist/compiled/string-hash/package.json +1 -0
  1224. package/.next/standalone/node_modules/next/dist/compiled/string_decoder/package.json +1 -0
  1225. package/.next/standalone/node_modules/next/dist/compiled/string_decoder/string_decoder.js +1 -0
  1226. package/.next/standalone/node_modules/next/dist/compiled/strip-ansi/index.js +1 -0
  1227. package/.next/standalone/node_modules/next/dist/compiled/strip-ansi/package.json +1 -0
  1228. package/.next/standalone/node_modules/next/dist/compiled/superstruct/index.cjs +1 -0
  1229. package/.next/standalone/node_modules/next/dist/compiled/superstruct/package.json +1 -0
  1230. package/.next/standalone/node_modules/next/dist/compiled/tar/index.js +1 -0
  1231. package/.next/standalone/node_modules/next/dist/compiled/tar/package.json +1 -0
  1232. package/.next/standalone/node_modules/next/dist/compiled/text-table/index.js +1 -0
  1233. package/.next/standalone/node_modules/next/dist/compiled/text-table/package.json +1 -0
  1234. package/.next/standalone/node_modules/next/dist/compiled/timers-browserify/main.js +1 -0
  1235. package/.next/standalone/node_modules/next/dist/compiled/timers-browserify/package.json +1 -0
  1236. package/.next/standalone/node_modules/next/dist/compiled/tty-browserify/index.js +1 -0
  1237. package/.next/standalone/node_modules/next/dist/compiled/tty-browserify/package.json +1 -0
  1238. package/.next/standalone/node_modules/next/dist/compiled/unistore/package.json +1 -0
  1239. package/.next/standalone/node_modules/next/dist/compiled/unistore/unistore.js +1 -0
  1240. package/.next/standalone/node_modules/next/dist/compiled/util/package.json +1 -0
  1241. package/.next/standalone/node_modules/next/dist/compiled/util/util.js +1 -0
  1242. package/.next/standalone/node_modules/next/dist/compiled/vm-browserify/index.js +1 -0
  1243. package/.next/standalone/node_modules/next/dist/compiled/vm-browserify/package.json +1 -0
  1244. package/.next/standalone/node_modules/next/dist/compiled/watchpack/package.json +1 -0
  1245. package/.next/standalone/node_modules/next/dist/compiled/watchpack/watchpack.js +1 -0
  1246. package/.next/standalone/node_modules/next/dist/compiled/webpack/package.json +1 -0
  1247. package/.next/standalone/node_modules/next/dist/compiled/webpack/webpack.js +26 -0
  1248. package/.next/standalone/node_modules/next/dist/compiled/webpack-sources3/index.js +1 -0
  1249. package/.next/standalone/node_modules/next/dist/compiled/webpack-sources3/package.json +1 -0
  1250. package/.next/standalone/node_modules/next/dist/compiled/ws/index.js +1 -0
  1251. package/.next/standalone/node_modules/next/dist/compiled/ws/package.json +1 -0
  1252. package/.next/standalone/node_modules/next/dist/compiled/zod/index.js +1 -0
  1253. package/.next/standalone/node_modules/next/dist/compiled/zod/package.json +1 -0
  1254. package/.next/standalone/node_modules/next/dist/experimental/testmode/context.js +57 -0
  1255. package/.next/standalone/node_modules/next/dist/experimental/testmode/fetch.js +133 -0
  1256. package/.next/standalone/node_modules/next/dist/experimental/testmode/httpget.js +26 -0
  1257. package/.next/standalone/node_modules/next/dist/experimental/testmode/server.js +62 -0
  1258. package/.next/standalone/node_modules/next/dist/export/helpers/is-dynamic-usage-error.js +16 -0
  1259. package/.next/standalone/node_modules/next/dist/export/helpers/is-navigation-signal-error.js +15 -0
  1260. package/.next/standalone/node_modules/next/dist/export/utils.js +24 -0
  1261. package/.next/standalone/node_modules/next/dist/lib/batcher.js +59 -0
  1262. package/.next/standalone/node_modules/next/dist/lib/build-custom-route.js +39 -0
  1263. package/.next/standalone/node_modules/next/dist/lib/client-reference.js +16 -0
  1264. package/.next/standalone/node_modules/next/dist/lib/coalesced-function.js +39 -0
  1265. package/.next/standalone/node_modules/next/dist/lib/compile-error.js +14 -0
  1266. package/.next/standalone/node_modules/next/dist/lib/constants.js +334 -0
  1267. package/.next/standalone/node_modules/next/dist/lib/create-client-router-filter.js +67 -0
  1268. package/.next/standalone/node_modules/next/dist/lib/detached-promise.js +32 -0
  1269. package/.next/standalone/node_modules/next/dist/lib/detect-typo.js +51 -0
  1270. package/.next/standalone/node_modules/next/dist/lib/download-swc.js +171 -0
  1271. package/.next/standalone/node_modules/next/dist/lib/fatal-error.js +14 -0
  1272. package/.next/standalone/node_modules/next/dist/lib/file-exists.js +53 -0
  1273. package/.next/standalone/node_modules/next/dist/lib/find-config.js +102 -0
  1274. package/.next/standalone/node_modules/next/dist/lib/find-pages-dir.js +50 -0
  1275. package/.next/standalone/node_modules/next/dist/lib/find-root.js +45 -0
  1276. package/.next/standalone/node_modules/next/dist/lib/format-dynamic-import-path.js +24 -0
  1277. package/.next/standalone/node_modules/next/dist/lib/format-server-error.js +74 -0
  1278. package/.next/standalone/node_modules/next/dist/lib/fs/rename.js +128 -0
  1279. package/.next/standalone/node_modules/next/dist/lib/fs/write-atomic.js +28 -0
  1280. package/.next/standalone/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +88 -0
  1281. package/.next/standalone/node_modules/next/dist/lib/get-project-dir.js +51 -0
  1282. package/.next/standalone/node_modules/next/dist/lib/has-necessary-dependencies.js +46 -0
  1283. package/.next/standalone/node_modules/next/dist/lib/helpers/get-cache-directory.js +62 -0
  1284. package/.next/standalone/node_modules/next/dist/lib/helpers/get-online.js +50 -0
  1285. package/.next/standalone/node_modules/next/dist/lib/helpers/get-pkg-manager.js +63 -0
  1286. package/.next/standalone/node_modules/next/dist/lib/helpers/get-registry.js +32 -0
  1287. package/.next/standalone/node_modules/next/dist/lib/helpers/install.js +105 -0
  1288. package/.next/standalone/node_modules/next/dist/lib/install-dependencies.js +40 -0
  1289. package/.next/standalone/node_modules/next/dist/lib/interop-default.js +15 -0
  1290. package/.next/standalone/node_modules/next/dist/lib/is-api-route.js +15 -0
  1291. package/.next/standalone/node_modules/next/dist/lib/is-app-page-route.js +15 -0
  1292. package/.next/standalone/node_modules/next/dist/lib/is-app-route-route.js +15 -0
  1293. package/.next/standalone/node_modules/next/dist/lib/is-edge-runtime.js +16 -0
  1294. package/.next/standalone/node_modules/next/dist/lib/is-error.js +44 -0
  1295. package/.next/standalone/node_modules/next/dist/lib/is-internal-component.js +36 -0
  1296. package/.next/standalone/node_modules/next/dist/lib/is-serializable-props.js +82 -0
  1297. package/.next/standalone/node_modules/next/dist/lib/known-edge-safe-packages.json +1 -0
  1298. package/.next/standalone/node_modules/next/dist/lib/load-custom-routes.js +504 -0
  1299. package/.next/standalone/node_modules/next/dist/lib/metadata/clone-metadata.js +33 -0
  1300. package/.next/standalone/node_modules/next/dist/lib/metadata/constants.js +40 -0
  1301. package/.next/standalone/node_modules/next/dist/lib/metadata/default-metadata.js +77 -0
  1302. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/alternate.js +55 -0
  1303. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/basic.js +281 -0
  1304. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/icons.js +66 -0
  1305. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/meta.js +123 -0
  1306. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/opengraph.js +474 -0
  1307. package/.next/standalone/node_modules/next/dist/lib/metadata/generate/utils.js +38 -0
  1308. package/.next/standalone/node_modules/next/dist/lib/metadata/get-metadata-route.js +85 -0
  1309. package/.next/standalone/node_modules/next/dist/lib/metadata/is-metadata-route.js +115 -0
  1310. package/.next/standalone/node_modules/next/dist/lib/metadata/metadata.js +163 -0
  1311. package/.next/standalone/node_modules/next/dist/lib/metadata/resolve-metadata.js +629 -0
  1312. package/.next/standalone/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js +218 -0
  1313. package/.next/standalone/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js +56 -0
  1314. package/.next/standalone/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js +178 -0
  1315. package/.next/standalone/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js +40 -0
  1316. package/.next/standalone/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js +136 -0
  1317. package/.next/standalone/node_modules/next/dist/lib/needs-experimental-react.js +16 -0
  1318. package/.next/standalone/node_modules/next/dist/lib/non-nullable.js +15 -0
  1319. package/.next/standalone/node_modules/next/dist/lib/oxford-comma-list.js +15 -0
  1320. package/.next/standalone/node_modules/next/dist/lib/page-types.js +18 -0
  1321. package/.next/standalone/node_modules/next/dist/lib/patch-incorrect-lockfile.js +181 -0
  1322. package/.next/standalone/node_modules/next/dist/lib/pick.js +19 -0
  1323. package/.next/standalone/node_modules/next/dist/lib/picocolors.js +177 -0
  1324. package/.next/standalone/node_modules/next/dist/lib/pretty-bytes.js +70 -0
  1325. package/.next/standalone/node_modules/next/dist/lib/realpath.js +20 -0
  1326. package/.next/standalone/node_modules/next/dist/lib/recursive-delete.js +75 -0
  1327. package/.next/standalone/node_modules/next/dist/lib/recursive-readdir.js +124 -0
  1328. package/.next/standalone/node_modules/next/dist/lib/redirect-status.js +46 -0
  1329. package/.next/standalone/node_modules/next/dist/lib/resolve-from.js +55 -0
  1330. package/.next/standalone/node_modules/next/dist/lib/scheduler.js +49 -0
  1331. package/.next/standalone/node_modules/next/dist/lib/semver-noop.js +18 -0
  1332. package/.next/standalone/node_modules/next/dist/lib/server-external-packages.json +53 -0
  1333. package/.next/standalone/node_modules/next/dist/lib/try-to-parse-path.js +50 -0
  1334. package/.next/standalone/node_modules/next/dist/lib/turbopack-warning.js +205 -0
  1335. package/.next/standalone/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +258 -0
  1336. package/.next/standalone/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +61 -0
  1337. package/.next/standalone/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js +52 -0
  1338. package/.next/standalone/node_modules/next/dist/lib/typescript/missingDependencyError.js +23 -0
  1339. package/.next/standalone/node_modules/next/dist/lib/typescript/runTypeCheck.js +95 -0
  1340. package/.next/standalone/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +62 -0
  1341. package/.next/standalone/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +296 -0
  1342. package/.next/standalone/node_modules/next/dist/lib/url.js +45 -0
  1343. package/.next/standalone/node_modules/next/dist/lib/verify-partytown-setup.js +110 -0
  1344. package/.next/standalone/node_modules/next/dist/lib/verify-typescript-setup.js +165 -0
  1345. package/.next/standalone/node_modules/next/dist/lib/wait.js +19 -0
  1346. package/.next/standalone/node_modules/next/dist/lib/with-promise-cache.js +24 -0
  1347. package/.next/standalone/node_modules/next/dist/pages/_app.js +42 -0
  1348. package/.next/standalone/node_modules/next/dist/pages/_document.js +851 -0
  1349. package/.next/standalone/node_modules/next/dist/server/accept-header.js +120 -0
  1350. package/.next/standalone/node_modules/next/dist/server/api-utils/get-cookie-parser.js +22 -0
  1351. package/.next/standalone/node_modules/next/dist/server/api-utils/index.js +198 -0
  1352. package/.next/standalone/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js +86 -0
  1353. package/.next/standalone/node_modules/next/dist/server/app-render/action-handler.js +730 -0
  1354. package/.next/standalone/node_modules/next/dist/server/app-render/action-utils.js +65 -0
  1355. package/.next/standalone/node_modules/next/dist/server/app-render/app-render.js +1034 -0
  1356. package/.next/standalone/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +53 -0
  1357. package/.next/standalone/node_modules/next/dist/server/app-render/create-component-tree.js +455 -0
  1358. package/.next/standalone/node_modules/next/dist/server/app-render/create-error-handler.js +99 -0
  1359. package/.next/standalone/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +50 -0
  1360. package/.next/standalone/node_modules/next/dist/server/app-render/csrf-protection.js +90 -0
  1361. package/.next/standalone/node_modules/next/dist/server/app-render/dynamic-rendering.js +195 -0
  1362. package/.next/standalone/node_modules/next/dist/server/app-render/encryption-utils.js +174 -0
  1363. package/.next/standalone/node_modules/next/dist/server/app-render/flight-render-result.js +28 -0
  1364. package/.next/standalone/node_modules/next/dist/server/app-render/get-asset-query-string.js +28 -0
  1365. package/.next/standalone/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +48 -0
  1366. package/.next/standalone/node_modules/next/dist/server/app-render/get-layer-assets.js +85 -0
  1367. package/.next/standalone/node_modules/next/dist/server/app-render/get-preloadable-fonts.js +39 -0
  1368. package/.next/standalone/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js +40 -0
  1369. package/.next/standalone/node_modules/next/dist/server/app-render/get-segment-param.js +42 -0
  1370. package/.next/standalone/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js +38 -0
  1371. package/.next/standalone/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js +19 -0
  1372. package/.next/standalone/node_modules/next/dist/server/app-render/interop-default.js +17 -0
  1373. package/.next/standalone/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js +83 -0
  1374. package/.next/standalone/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js +37 -0
  1375. package/.next/standalone/node_modules/next/dist/server/app-render/parse-loader-tree.js +29 -0
  1376. package/.next/standalone/node_modules/next/dist/server/app-render/react-server.node.js +35 -0
  1377. package/.next/standalone/node_modules/next/dist/server/app-render/required-scripts.js +71 -0
  1378. package/.next/standalone/node_modules/next/dist/server/app-render/server-inserted-html.js +41 -0
  1379. package/.next/standalone/node_modules/next/dist/server/app-render/static/static-renderer.js +165 -0
  1380. package/.next/standalone/node_modules/next/dist/server/app-render/strip-flight-headers.js +18 -0
  1381. package/.next/standalone/node_modules/next/dist/server/app-render/types.js +43 -0
  1382. package/.next/standalone/node_modules/next/dist/server/app-render/use-flight-response.js +126 -0
  1383. package/.next/standalone/node_modules/next/dist/server/app-render/validate-url.js +29 -0
  1384. package/.next/standalone/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +150 -0
  1385. package/.next/standalone/node_modules/next/dist/server/async-storage/draft-mode-provider.js +53 -0
  1386. package/.next/standalone/node_modules/next/dist/server/async-storage/request-async-storage-wrapper.js +109 -0
  1387. package/.next/standalone/node_modules/next/dist/server/async-storage/static-generation-async-storage-wrapper.js +53 -0
  1388. package/.next/standalone/node_modules/next/dist/server/base-http/index.js +54 -0
  1389. package/.next/standalone/node_modules/next/dist/server/base-http/node.js +119 -0
  1390. package/.next/standalone/node_modules/next/dist/server/base-server.js +2253 -0
  1391. package/.next/standalone/node_modules/next/dist/server/body-streams.js +90 -0
  1392. package/.next/standalone/node_modules/next/dist/server/capsize-font-metrics.json +30312 -0
  1393. package/.next/standalone/node_modules/next/dist/server/client-component-renderer-logger.js +69 -0
  1394. package/.next/standalone/node_modules/next/dist/server/config-schema.js +483 -0
  1395. package/.next/standalone/node_modules/next/dist/server/config-shared.js +165 -0
  1396. package/.next/standalone/node_modules/next/dist/server/config-utils.js +189 -0
  1397. package/.next/standalone/node_modules/next/dist/server/config.js +825 -0
  1398. package/.next/standalone/node_modules/next/dist/server/crypto-utils.js +70 -0
  1399. package/.next/standalone/node_modules/next/dist/server/dev/hot-middleware.js +215 -0
  1400. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +748 -0
  1401. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-types.js +29 -0
  1402. package/.next/standalone/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1192 -0
  1403. package/.next/standalone/node_modules/next/dist/server/dev/log-app-dir-error.js +80 -0
  1404. package/.next/standalone/node_modules/next/dist/server/dev/messages.js +13 -0
  1405. package/.next/standalone/node_modules/next/dist/server/dev/next-dev-server.js +601 -0
  1406. package/.next/standalone/node_modules/next/dist/server/dev/on-demand-entry-handler.js +663 -0
  1407. package/.next/standalone/node_modules/next/dist/server/dev/parse-version-info.js +108 -0
  1408. package/.next/standalone/node_modules/next/dist/server/dev/static-paths-worker.js +72 -0
  1409. package/.next/standalone/node_modules/next/dist/server/dev/turbopack/entry-key.js +39 -0
  1410. package/.next/standalone/node_modules/next/dist/server/dev/turbopack/manifest-loader.js +327 -0
  1411. package/.next/standalone/node_modules/next/dist/server/dev/turbopack-utils.js +713 -0
  1412. package/.next/standalone/node_modules/next/dist/server/font-utils.js +205 -0
  1413. package/.next/standalone/node_modules/next/dist/server/future/helpers/i18n-provider.js +146 -0
  1414. package/.next/standalone/node_modules/next/dist/server/future/helpers/interception-routes.js +89 -0
  1415. package/.next/standalone/node_modules/next/dist/server/future/helpers/module-loader/node-module-loader.js +21 -0
  1416. package/.next/standalone/node_modules/next/dist/server/future/helpers/module-loader/route-module-loader.js +22 -0
  1417. package/.next/standalone/node_modules/next/dist/server/future/normalizers/absolute-filename-normalizer.js +33 -0
  1418. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/app/app-bundle-path-normalizer.js +48 -0
  1419. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/app/app-filename-normalizer.js +22 -0
  1420. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/app/app-page-normalizer.js +19 -0
  1421. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/app/app-pathname-normalizer.js +55 -0
  1422. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/app/index.js +42 -0
  1423. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/pages/index.js +44 -0
  1424. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/pages/pages-bundle-path-normalizer.js +55 -0
  1425. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/pages/pages-filename-normalizer.js +22 -0
  1426. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/pages/pages-page-normalizer.js +19 -0
  1427. package/.next/standalone/node_modules/next/dist/server/future/normalizers/built/pages/pages-pathname-normalizer.js +19 -0
  1428. package/.next/standalone/node_modules/next/dist/server/future/normalizers/locale-route-normalizer.js +26 -0
  1429. package/.next/standalone/node_modules/next/dist/server/future/normalizers/normalizers.js +23 -0
  1430. package/.next/standalone/node_modules/next/dist/server/future/normalizers/prefixing-normalizer.js +26 -0
  1431. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/action.js +19 -0
  1432. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/base-path.js +21 -0
  1433. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/next-data.js +34 -0
  1434. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/postponed.js +27 -0
  1435. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/prefetch-rsc.js +19 -0
  1436. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/prefix.js +35 -0
  1437. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/rsc.js +19 -0
  1438. package/.next/standalone/node_modules/next/dist/server/future/normalizers/request/suffix.js +27 -0
  1439. package/.next/standalone/node_modules/next/dist/server/future/normalizers/underscore-normalizer.js +17 -0
  1440. package/.next/standalone/node_modules/next/dist/server/future/normalizers/wrap-normalizer-fn.js +17 -0
  1441. package/.next/standalone/node_modules/next/dist/server/future/route-definitions/app-page-route-definition.js +16 -0
  1442. package/.next/standalone/node_modules/next/dist/server/future/route-kind.js +29 -0
  1443. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-managers/default-route-matcher-manager.js +227 -0
  1444. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-managers/dev-route-matcher-manager.js +126 -0
  1445. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/app-page-route-matcher-provider.js +55 -0
  1446. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/app-route-route-matcher-provider.js +43 -0
  1447. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +78 -0
  1448. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +43 -0
  1449. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +80 -0
  1450. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +80 -0
  1451. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/file-cache-route-matcher-provider.js +28 -0
  1452. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +106 -0
  1453. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +43 -0
  1454. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/helpers/cached-route-matcher-provider.js +30 -0
  1455. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +34 -0
  1456. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +20 -0
  1457. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/manifest-route-matcher-provider.js +21 -0
  1458. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/pages-api-route-matcher-provider.js +56 -0
  1459. package/.next/standalone/node_modules/next/dist/server/future/route-matcher-providers/pages-route-matcher-provider.js +65 -0
  1460. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/app-page-route-matcher.js +18 -0
  1461. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/app-route-route-matcher.js +15 -0
  1462. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/locale-route-matcher.js +68 -0
  1463. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/pages-api-route-matcher.js +30 -0
  1464. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/pages-route-matcher.js +30 -0
  1465. package/.next/standalone/node_modules/next/dist/server/future/route-matchers/route-matcher.js +54 -0
  1466. package/.next/standalone/node_modules/next/dist/server/future/route-matches/pages-api-route-match.js +16 -0
  1467. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/module.compiled.js +24 -0
  1468. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/module.js +94 -0
  1469. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/module.render.js +20 -0
  1470. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/amp-context.js +4 -0
  1471. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/app-router-context.js +4 -0
  1472. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/entrypoints.js +107 -0
  1473. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/head-manager-context.js +4 -0
  1474. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/hooks-client-context.js +4 -0
  1475. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/html-context.js +4 -0
  1476. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/image-config-context.js +4 -0
  1477. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable-context.js +4 -0
  1478. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/loadable.js +4 -0
  1479. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/router-context.js +4 -0
  1480. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/contexts/server-inserted-html.js +4 -0
  1481. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/rsc/entrypoints.js +136 -0
  1482. package/.next/standalone/node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/entrypoints.js +115 -0
  1483. package/.next/standalone/node_modules/next/dist/server/future/route-modules/checks.js +45 -0
  1484. package/.next/standalone/node_modules/next/dist/server/future/route-modules/helpers/response-handlers.js +67 -0
  1485. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/builtin/_error.js +78 -0
  1486. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/module.compiled.js +14 -0
  1487. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/module.js +92 -0
  1488. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/module.render.js +20 -0
  1489. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/amp-context.js +4 -0
  1490. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/app-router-context.js +4 -0
  1491. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/entrypoints.js +107 -0
  1492. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/head-manager-context.js +4 -0
  1493. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/hooks-client-context.js +4 -0
  1494. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/html-context.js +4 -0
  1495. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/image-config-context.js +4 -0
  1496. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable-context.js +4 -0
  1497. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/loadable.js +4 -0
  1498. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/router-context.js +4 -0
  1499. package/.next/standalone/node_modules/next/dist/server/future/route-modules/pages/vendored/contexts/server-inserted-html.js +4 -0
  1500. package/.next/standalone/node_modules/next/dist/server/future/route-modules/route-module.js +18 -0
  1501. package/.next/standalone/node_modules/next/dist/server/get-app-route-from-entrypoint.js +30 -0
  1502. package/.next/standalone/node_modules/next/dist/server/get-route-from-entrypoint.js +35 -0
  1503. package/.next/standalone/node_modules/next/dist/server/htmlescape.js +37 -0
  1504. package/.next/standalone/node_modules/next/dist/server/image-optimizer.js +914 -0
  1505. package/.next/standalone/node_modules/next/dist/server/internal-utils.js +54 -0
  1506. package/.next/standalone/node_modules/next/dist/server/lib/app-dir-module.js +54 -0
  1507. package/.next/standalone/node_modules/next/dist/server/lib/app-info-log.js +113 -0
  1508. package/.next/standalone/node_modules/next/dist/server/lib/builtin-request-context.js +38 -0
  1509. package/.next/standalone/node_modules/next/dist/server/lib/clone-response.js +54 -0
  1510. package/.next/standalone/node_modules/next/dist/server/lib/dedupe-fetch.js +157 -0
  1511. package/.next/standalone/node_modules/next/dist/server/lib/dev-bundler-service.js +55 -0
  1512. package/.next/standalone/node_modules/next/dist/server/lib/etag.js +56 -0
  1513. package/.next/standalone/node_modules/next/dist/server/lib/find-page-file.js +111 -0
  1514. package/.next/standalone/node_modules/next/dist/server/lib/format-hostname.js +16 -0
  1515. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/fetch-cache.js +320 -0
  1516. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +322 -0
  1517. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/index.js +407 -0
  1518. package/.next/standalone/node_modules/next/dist/server/lib/incremental-cache/shared-revalidate-timings.js +57 -0
  1519. package/.next/standalone/node_modules/next/dist/server/lib/is-ipv6.js +41 -0
  1520. package/.next/standalone/node_modules/next/dist/server/lib/match-next-data-pathname.js +18 -0
  1521. package/.next/standalone/node_modules/next/dist/server/lib/mock-request.js +329 -0
  1522. package/.next/standalone/node_modules/next/dist/server/lib/node-fs-methods.js +28 -0
  1523. package/.next/standalone/node_modules/next/dist/server/lib/patch-fetch.js +653 -0
  1524. package/.next/standalone/node_modules/next/dist/server/lib/render-server.js +114 -0
  1525. package/.next/standalone/node_modules/next/dist/server/lib/revalidate.js +22 -0
  1526. package/.next/standalone/node_modules/next/dist/server/lib/router-server.js +502 -0
  1527. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/block-cross-site.js +76 -0
  1528. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/build-data-route.js +44 -0
  1529. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/filesystem.js +536 -0
  1530. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/is-postpone.js +16 -0
  1531. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/proxy-request.js +110 -0
  1532. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +567 -0
  1533. package/.next/standalone/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js +830 -0
  1534. package/.next/standalone/node_modules/next/dist/server/lib/server-action-request-meta.js +53 -0
  1535. package/.next/standalone/node_modules/next/dist/server/lib/server-ipc/invoke-request.js +33 -0
  1536. package/.next/standalone/node_modules/next/dist/server/lib/server-ipc/request-utils.js +60 -0
  1537. package/.next/standalone/node_modules/next/dist/server/lib/server-ipc/utils.js +80 -0
  1538. package/.next/standalone/node_modules/next/dist/server/lib/squoosh/main.js +136 -0
  1539. package/.next/standalone/node_modules/next/dist/server/lib/start-server.js +325 -0
  1540. package/.next/standalone/node_modules/next/dist/server/lib/to-route.js +37 -0
  1541. package/.next/standalone/node_modules/next/dist/server/lib/trace/constants.js +202 -0
  1542. package/.next/standalone/node_modules/next/dist/server/lib/trace/tracer.js +214 -0
  1543. package/.next/standalone/node_modules/next/dist/server/lib/utils.js +87 -0
  1544. package/.next/standalone/node_modules/next/dist/server/load-components.js +128 -0
  1545. package/.next/standalone/node_modules/next/dist/server/load-default-error-components.js +39 -0
  1546. package/.next/standalone/node_modules/next/dist/server/load-manifest.js +70 -0
  1547. package/.next/standalone/node_modules/next/dist/server/match-bundle.js +25 -0
  1548. package/.next/standalone/node_modules/next/dist/server/next-server.js +1277 -0
  1549. package/.next/standalone/node_modules/next/dist/server/next-typescript.js +13 -0
  1550. package/.next/standalone/node_modules/next/dist/server/next.js +335 -0
  1551. package/.next/standalone/node_modules/next/dist/server/node-environment.js +17 -0
  1552. package/.next/standalone/node_modules/next/dist/server/node-polyfill-crypto.js +20 -0
  1553. package/.next/standalone/node_modules/next/dist/server/optimize-amp.js +22 -0
  1554. package/.next/standalone/node_modules/next/dist/server/pipe-readable.js +132 -0
  1555. package/.next/standalone/node_modules/next/dist/server/post-process.js +175 -0
  1556. package/.next/standalone/node_modules/next/dist/server/render-result.js +147 -0
  1557. package/.next/standalone/node_modules/next/dist/server/render.js +1028 -0
  1558. package/.next/standalone/node_modules/next/dist/server/request-meta.js +78 -0
  1559. package/.next/standalone/node_modules/next/dist/server/require-hook.js +68 -0
  1560. package/.next/standalone/node_modules/next/dist/server/require.js +121 -0
  1561. package/.next/standalone/node_modules/next/dist/server/response-cache/index.js +149 -0
  1562. package/.next/standalone/node_modules/next/dist/server/response-cache/types.js +6 -0
  1563. package/.next/standalone/node_modules/next/dist/server/response-cache/utils.js +64 -0
  1564. package/.next/standalone/node_modules/next/dist/server/send-payload.js +123 -0
  1565. package/.next/standalone/node_modules/next/dist/server/send-response.js +51 -0
  1566. package/.next/standalone/node_modules/next/dist/server/serve-static.js +62 -0
  1567. package/.next/standalone/node_modules/next/dist/server/server-route-utils.js +30 -0
  1568. package/.next/standalone/node_modules/next/dist/server/server-utils.js +306 -0
  1569. package/.next/standalone/node_modules/next/dist/server/setup-http-agent-env.js +27 -0
  1570. package/.next/standalone/node_modules/next/dist/server/stream-utils/encodedTags.js +82 -0
  1571. package/.next/standalone/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +484 -0
  1572. package/.next/standalone/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +69 -0
  1573. package/.next/standalone/node_modules/next/dist/server/typescript/constant.js +96 -0
  1574. package/.next/standalone/node_modules/next/dist/server/typescript/index.js +204 -0
  1575. package/.next/standalone/node_modules/next/dist/server/typescript/rules/client-boundary.js +68 -0
  1576. package/.next/standalone/node_modules/next/dist/server/typescript/rules/config.js +388 -0
  1577. package/.next/standalone/node_modules/next/dist/server/typescript/rules/entry.js +149 -0
  1578. package/.next/standalone/node_modules/next/dist/server/typescript/rules/error.js +38 -0
  1579. package/.next/standalone/node_modules/next/dist/server/typescript/rules/metadata.js +389 -0
  1580. package/.next/standalone/node_modules/next/dist/server/typescript/rules/server-boundary.js +112 -0
  1581. package/.next/standalone/node_modules/next/dist/server/typescript/rules/server.js +79 -0
  1582. package/.next/standalone/node_modules/next/dist/server/typescript/utils.js +194 -0
  1583. package/.next/standalone/node_modules/next/dist/server/utils.js +87 -0
  1584. package/.next/standalone/node_modules/next/dist/server/web/error.js +54 -0
  1585. package/.next/standalone/node_modules/next/dist/server/web/http.js +39 -0
  1586. package/.next/standalone/node_modules/next/dist/server/web/next-url.js +191 -0
  1587. package/.next/standalone/node_modules/next/dist/server/web/sandbox/context.js +416 -0
  1588. package/.next/standalone/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js +35 -0
  1589. package/.next/standalone/node_modules/next/dist/server/web/sandbox/index.js +28 -0
  1590. package/.next/standalone/node_modules/next/dist/server/web/sandbox/resource-managers.js +62 -0
  1591. package/.next/standalone/node_modules/next/dist/server/web/sandbox/sandbox.js +115 -0
  1592. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +192 -0
  1593. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js +134 -0
  1594. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js +30 -0
  1595. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +150 -0
  1596. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/cookies.js +29 -0
  1597. package/.next/standalone/node_modules/next/dist/server/web/spec-extension/request.js +100 -0
  1598. package/.next/standalone/node_modules/next/dist/server/web/utils.js +147 -0
  1599. package/.next/standalone/node_modules/next/dist/shared/lib/amp-context.shared-runtime.js +18 -0
  1600. package/.next/standalone/node_modules/next/dist/shared/lib/amp-mode.js +16 -0
  1601. package/.next/standalone/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js +51 -0
  1602. package/.next/standalone/node_modules/next/dist/shared/lib/bloom-filter.js +86 -0
  1603. package/.next/standalone/node_modules/next/dist/shared/lib/constants.js +414 -0
  1604. package/.next/standalone/node_modules/next/dist/shared/lib/deep-freeze.js +30 -0
  1605. package/.next/standalone/node_modules/next/dist/shared/lib/encode-uri-path.js +15 -0
  1606. package/.next/standalone/node_modules/next/dist/shared/lib/error-source.js +36 -0
  1607. package/.next/standalone/node_modules/next/dist/shared/lib/escape-regexp.js +22 -0
  1608. package/.next/standalone/node_modules/next/dist/shared/lib/get-hostname.js +23 -0
  1609. package/.next/standalone/node_modules/next/dist/shared/lib/hash.js +42 -0
  1610. package/.next/standalone/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js +18 -0
  1611. package/.next/standalone/node_modules/next/dist/shared/lib/head.js +189 -0
  1612. package/.next/standalone/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js +39 -0
  1613. package/.next/standalone/node_modules/next/dist/shared/lib/html-context.shared-runtime.js +36 -0
  1614. package/.next/standalone/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +26 -0
  1615. package/.next/standalone/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js +63 -0
  1616. package/.next/standalone/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +30 -0
  1617. package/.next/standalone/node_modules/next/dist/shared/lib/image-blur-svg.js +23 -0
  1618. package/.next/standalone/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js +19 -0
  1619. package/.next/standalone/node_modules/next/dist/shared/lib/image-config.js +69 -0
  1620. package/.next/standalone/node_modules/next/dist/shared/lib/is-plain-object.js +42 -0
  1621. package/.next/standalone/node_modules/next/dist/shared/lib/isomorphic/path.js +14 -0
  1622. package/.next/standalone/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js +39 -0
  1623. package/.next/standalone/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js +20 -0
  1624. package/.next/standalone/node_modules/next/dist/shared/lib/loadable.shared-runtime.js +248 -0
  1625. package/.next/standalone/node_modules/next/dist/shared/lib/magic-identifier.js +99 -0
  1626. package/.next/standalone/node_modules/next/dist/shared/lib/match-local-pattern.js +47 -0
  1627. package/.next/standalone/node_modules/next/dist/shared/lib/match-remote-pattern.js +61 -0
  1628. package/.next/standalone/node_modules/next/dist/shared/lib/mitt.js +46 -0
  1629. package/.next/standalone/node_modules/next/dist/shared/lib/modern-browserslist-target.js +18 -0
  1630. package/.next/standalone/node_modules/next/dist/shared/lib/normalized-asset-prefix.js +28 -0
  1631. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js +26 -0
  1632. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/denormalize-app-path.js +19 -0
  1633. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js +18 -0
  1634. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +18 -0
  1635. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/get-page-paths.js +40 -0
  1636. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js +26 -0
  1637. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js +19 -0
  1638. package/.next/standalone/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js +20 -0
  1639. package/.next/standalone/node_modules/next/dist/shared/lib/router/adapters.js +139 -0
  1640. package/.next/standalone/node_modules/next/dist/shared/lib/router/router.js +1728 -0
  1641. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/add-locale.js +28 -0
  1642. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +20 -0
  1643. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js +20 -0
  1644. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/app-paths.js +51 -0
  1645. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js +17 -0
  1646. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/compare-states.js +34 -0
  1647. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +16 -0
  1648. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js +27 -0
  1649. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/format-url.js +111 -0
  1650. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/get-asset-path-from-route.js +19 -0
  1651. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js +54 -0
  1652. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js +26 -0
  1653. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/handle-smooth-scroll.js +35 -0
  1654. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/index.js +26 -0
  1655. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/interpolate-as.js +53 -0
  1656. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/is-bot.js +15 -0
  1657. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +21 -0
  1658. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/is-local-url.js +26 -0
  1659. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js +31 -0
  1660. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/omit.js +21 -0
  1661. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/parse-path.js +33 -0
  1662. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +29 -0
  1663. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/parse-url.js +30 -0
  1664. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +20 -0
  1665. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/path-match.js +49 -0
  1666. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +236 -0
  1667. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/querystring.js +73 -0
  1668. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/relativize-url.js +22 -0
  1669. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js +39 -0
  1670. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +21 -0
  1671. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/resolve-rewrites.js +118 -0
  1672. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +40 -0
  1673. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/route-regex.js +192 -0
  1674. package/.next/standalone/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +170 -0
  1675. package/.next/standalone/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +18 -0
  1676. package/.next/standalone/node_modules/next/dist/shared/lib/runtime-config.external.js +31 -0
  1677. package/.next/standalone/node_modules/next/dist/shared/lib/segment.js +34 -0
  1678. package/.next/standalone/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js +36 -0
  1679. package/.next/standalone/node_modules/next/dist/shared/lib/side-effect.js +66 -0
  1680. package/.next/standalone/node_modules/next/dist/shared/lib/utils/warn-once.js +22 -0
  1681. package/.next/standalone/node_modules/next/dist/shared/lib/utils.js +203 -0
  1682. package/.next/standalone/node_modules/next/dist/telemetry/anonymous-meta.js +89 -0
  1683. package/.next/standalone/node_modules/next/dist/telemetry/ci-info.js +41 -0
  1684. package/.next/standalone/node_modules/next/dist/telemetry/detached-flush.js +49 -0
  1685. package/.next/standalone/node_modules/next/dist/telemetry/events/build.js +114 -0
  1686. package/.next/standalone/node_modules/next/dist/telemetry/events/index.js +23 -0
  1687. package/.next/standalone/node_modules/next/dist/telemetry/events/plugins.js +51 -0
  1688. package/.next/standalone/node_modules/next/dist/telemetry/events/swc-load-failure.js +55 -0
  1689. package/.next/standalone/node_modules/next/dist/telemetry/events/version.js +86 -0
  1690. package/.next/standalone/node_modules/next/dist/telemetry/flush-and-exit.js +20 -0
  1691. package/.next/standalone/node_modules/next/dist/telemetry/post-payload.js +44 -0
  1692. package/.next/standalone/node_modules/next/dist/telemetry/project-id.js +48 -0
  1693. package/.next/standalone/node_modules/next/dist/telemetry/storage.js +290 -0
  1694. package/.next/standalone/node_modules/next/dist/trace/index.js +54 -0
  1695. package/.next/standalone/node_modules/next/dist/trace/report/index.js +35 -0
  1696. package/.next/standalone/node_modules/next/dist/trace/report/to-json.js +161 -0
  1697. package/.next/standalone/node_modules/next/dist/trace/report/to-telemetry.js +36 -0
  1698. package/.next/standalone/node_modules/next/dist/trace/shared.js +33 -0
  1699. package/.next/standalone/node_modules/next/dist/trace/trace.js +194 -0
  1700. package/.next/standalone/node_modules/next/font/google/target.css +1 -0
  1701. package/.next/standalone/node_modules/next/node_modules/postcss/lib/at-rule.js +25 -0
  1702. package/.next/standalone/node_modules/next/node_modules/postcss/lib/comment.js +13 -0
  1703. package/.next/standalone/node_modules/next/node_modules/postcss/lib/container.js +439 -0
  1704. package/.next/standalone/node_modules/next/node_modules/postcss/lib/css-syntax-error.js +100 -0
  1705. package/.next/standalone/node_modules/next/node_modules/postcss/lib/declaration.js +24 -0
  1706. package/.next/standalone/node_modules/next/node_modules/postcss/lib/document.js +33 -0
  1707. package/.next/standalone/node_modules/next/node_modules/postcss/lib/fromJSON.js +54 -0
  1708. package/.next/standalone/node_modules/next/node_modules/postcss/lib/input.js +248 -0
  1709. package/.next/standalone/node_modules/next/node_modules/postcss/lib/lazy-result.js +550 -0
  1710. package/.next/standalone/node_modules/next/node_modules/postcss/lib/list.js +58 -0
  1711. package/.next/standalone/node_modules/next/node_modules/postcss/lib/map-generator.js +359 -0
  1712. package/.next/standalone/node_modules/next/node_modules/postcss/lib/no-work-result.js +135 -0
  1713. package/.next/standalone/node_modules/next/node_modules/postcss/lib/node.js +381 -0
  1714. package/.next/standalone/node_modules/next/node_modules/postcss/lib/parse.js +42 -0
  1715. package/.next/standalone/node_modules/next/node_modules/postcss/lib/parser.js +610 -0
  1716. package/.next/standalone/node_modules/next/node_modules/postcss/lib/postcss.js +101 -0
  1717. package/.next/standalone/node_modules/next/node_modules/postcss/lib/previous-map.js +142 -0
  1718. package/.next/standalone/node_modules/next/node_modules/postcss/lib/processor.js +67 -0
  1719. package/.next/standalone/node_modules/next/node_modules/postcss/lib/result.js +42 -0
  1720. package/.next/standalone/node_modules/next/node_modules/postcss/lib/root.js +61 -0
  1721. package/.next/standalone/node_modules/next/node_modules/postcss/lib/rule.js +27 -0
  1722. package/.next/standalone/node_modules/next/node_modules/postcss/lib/stringifier.js +353 -0
  1723. package/.next/standalone/node_modules/next/node_modules/postcss/lib/stringify.js +11 -0
  1724. package/.next/standalone/node_modules/next/node_modules/postcss/lib/symbols.js +5 -0
  1725. package/.next/standalone/node_modules/next/node_modules/postcss/lib/terminal-highlight.js +70 -0
  1726. package/.next/standalone/node_modules/next/node_modules/postcss/lib/tokenize.js +266 -0
  1727. package/.next/standalone/node_modules/next/node_modules/postcss/lib/warn-once.js +13 -0
  1728. package/.next/standalone/node_modules/next/node_modules/postcss/lib/warning.js +37 -0
  1729. package/.next/standalone/node_modules/next/node_modules/postcss/package.json +88 -0
  1730. package/.next/standalone/node_modules/next/package.json +337 -0
  1731. package/.next/standalone/node_modules/picocolors/package.json +25 -0
  1732. package/.next/standalone/node_modules/picocolors/picocolors.js +75 -0
  1733. package/.next/standalone/node_modules/react/cjs/react-jsx-dev-runtime.production.min.js +10 -0
  1734. package/.next/standalone/node_modules/react/cjs/react-jsx-runtime.development.js +1333 -0
  1735. package/.next/standalone/node_modules/react/cjs/react-jsx-runtime.production.min.js +11 -0
  1736. package/.next/standalone/node_modules/react/cjs/react.development.js +2740 -0
  1737. package/.next/standalone/node_modules/react/cjs/react.production.min.js +26 -0
  1738. package/.next/standalone/node_modules/react/index.js +7 -0
  1739. package/.next/standalone/node_modules/react/jsx-dev-runtime.js +7 -0
  1740. package/.next/standalone/node_modules/react/jsx-runtime.js +7 -0
  1741. package/.next/standalone/node_modules/react/package.json +47 -0
  1742. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +7029 -0
  1743. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.min.js +93 -0
  1744. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.development.js +7014 -0
  1745. package/.next/standalone/node_modules/react-dom/cjs/react-dom-server.browser.production.min.js +96 -0
  1746. package/.next/standalone/node_modules/react-dom/cjs/react-dom.production.min.js +322 -0
  1747. package/.next/standalone/node_modules/react-dom/index.js +38 -0
  1748. package/.next/standalone/node_modules/react-dom/package.json +62 -0
  1749. package/.next/standalone/node_modules/react-dom/server.browser.js +17 -0
  1750. package/.next/standalone/node_modules/scheduler/cjs/scheduler.development.js +634 -0
  1751. package/.next/standalone/node_modules/scheduler/cjs/scheduler.production.min.js +19 -0
  1752. package/.next/standalone/node_modules/scheduler/index.js +7 -0
  1753. package/.next/standalone/node_modules/scheduler/package.json +36 -0
  1754. package/.next/standalone/node_modules/source-map-js/lib/array-set.js +121 -0
  1755. package/.next/standalone/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  1756. package/.next/standalone/node_modules/source-map-js/lib/base64.js +67 -0
  1757. package/.next/standalone/node_modules/source-map-js/lib/binary-search.js +111 -0
  1758. package/.next/standalone/node_modules/source-map-js/lib/mapping-list.js +79 -0
  1759. package/.next/standalone/node_modules/source-map-js/lib/quick-sort.js +132 -0
  1760. package/.next/standalone/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  1761. package/.next/standalone/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  1762. package/.next/standalone/node_modules/source-map-js/lib/source-node.js +413 -0
  1763. package/.next/standalone/node_modules/source-map-js/lib/util.js +594 -0
  1764. package/.next/standalone/node_modules/source-map-js/package.json +71 -0
  1765. package/.next/standalone/node_modules/source-map-js/source-map.js +8 -0
  1766. package/.next/standalone/node_modules/streamsearch/lib/sbmh.js +267 -0
  1767. package/.next/standalone/node_modules/streamsearch/package.json +34 -0
  1768. package/.next/standalone/node_modules/styled-jsx/dist/index/index.js +499 -0
  1769. package/.next/standalone/node_modules/styled-jsx/index.js +1 -0
  1770. package/.next/standalone/node_modules/styled-jsx/package.json +129 -0
  1771. package/.next/standalone/node_modules/styled-jsx/style.js +1 -0
  1772. package/.next/standalone/package.json +71 -0
  1773. package/.next/standalone/scripts/analyze.ts +681 -0
  1774. package/.next/standalone/scripts/implement.ts +792 -0
  1775. package/.next/standalone/server.js +38 -0
  1776. package/.next/static/chunks/117-b74c3899e29d85d7.js +2 -0
  1777. package/.next/static/chunks/444-b604794bb48fdc78.js +1 -0
  1778. package/.next/static/chunks/59-a053b1c0e85128de.js +1 -0
  1779. package/.next/static/chunks/912-d0c915da2a33166b.js +1 -0
  1780. package/.next/static/chunks/app/_not-found/page-2573b25f318b094f.js +1 -0
  1781. package/.next/static/chunks/app/goals/[id]/page-6175de61243f271d.js +1 -0
  1782. package/.next/static/chunks/app/goals/page-88b8f2fecdfe6fa4.js +1 -0
  1783. package/.next/static/chunks/app/hypotheses/[id]/page-8b167198d5f424c5.js +1 -0
  1784. package/.next/static/chunks/app/hypotheses/page-6cc7b4601a539bea.js +1 -0
  1785. package/.next/static/chunks/app/ideas/[id]/page-81711a4372b305f9.js +1 -0
  1786. package/.next/static/chunks/app/layout-ae8acf4955ee5472.js +1 -0
  1787. package/.next/static/chunks/app/page-556e21dc37b97c6c.js +1 -0
  1788. package/.next/static/chunks/app/sessions/page-927c5bfba9cd960c.js +1 -0
  1789. package/.next/static/chunks/app/settings/page-df97b2909593654e.js +1 -0
  1790. package/.next/static/chunks/fd9d1056-2182e078483b259b.js +1 -0
  1791. package/.next/static/chunks/framework-f66176bb897dc684.js +1 -0
  1792. package/.next/static/chunks/main-2a63902ba6517d04.js +1 -0
  1793. package/.next/static/chunks/main-app-f42d9aa726a818bf.js +1 -0
  1794. package/.next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
  1795. package/.next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
  1796. package/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  1797. package/.next/static/chunks/webpack-a3c37fcbf859f6f9.js +1 -0
  1798. package/.next/static/css/7a13622bd02f1f19.css +3 -0
  1799. package/.next/static/lLze4mUD_L6YkNc9KSHpt/_buildManifest.js +1 -0
  1800. package/.next/static/lLze4mUD_L6YkNc9KSHpt/_ssgManifest.js +1 -0
  1801. package/LICENSE +8 -0
  1802. package/README.md +115 -0
  1803. package/dist/bin/vibebusiness.js +443 -0
  1804. package/dist/scripts/analyze.js +1047 -0
  1805. package/dist/scripts/generate-idea.js +327 -0
  1806. package/dist/scripts/heartbeat.js +3562 -0
  1807. package/dist/scripts/implement.js +639 -0
  1808. package/dist/scripts/init.js +1083 -0
  1809. package/package.json +71 -0
  1810. package/templates/commands/build-page.md +129 -0
  1811. package/templates/commands/growth-audit.md +85 -0
  1812. package/templates/commands/manage.md +147 -0
  1813. package/templates/commands/measure-page.md +89 -0
  1814. package/templates/commands/positioning.md +128 -0
  1815. package/templates/commands/pricing-analysis.md +91 -0
  1816. package/templates/commands/research-competitors.md +124 -0
  1817. package/templates/commands/status-summary.md +103 -0
  1818. package/templates/commands/validate-idea.md +102 -0
@@ -0,0 +1,3562 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+
25
+ // scripts/heartbeat.ts
26
+ var fs6 = __toESM(require("fs"));
27
+ var path6 = __toESM(require("path"));
28
+ var import_child_process3 = require("child_process");
29
+
30
+ // scripts/lib/api.ts
31
+ var API_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8001";
32
+ var INTERNAL_API_KEY = process.env.INTERNAL_API_KEY;
33
+ async function apiRequest(endpoint, options = {}) {
34
+ const url = `${API_URL}${endpoint}`;
35
+ const headers = {
36
+ "Content-Type": "application/json",
37
+ ...options.headers
38
+ };
39
+ if (INTERNAL_API_KEY) {
40
+ headers["X-Internal-API-Key"] = INTERNAL_API_KEY;
41
+ }
42
+ const response = await fetch(url, {
43
+ ...options,
44
+ headers
45
+ });
46
+ if (!response.ok) {
47
+ const errorText = await response.text();
48
+ throw new Error(`API request failed: ${response.status} ${response.statusText} - ${errorText}`);
49
+ }
50
+ return response.json();
51
+ }
52
+ async function fetchLawyerSuccessKPIs(startDate, endDate) {
53
+ const params = new URLSearchParams();
54
+ if (startDate) {
55
+ params.append("start_date", startDate.toISOString());
56
+ }
57
+ if (endDate) {
58
+ params.append("end_date", endDate.toISOString());
59
+ }
60
+ const queryString = params.toString();
61
+ const endpoint = `/api/v1/analytics/internal/lawyer-success-kpis${queryString ? `?${queryString}` : ""}`;
62
+ return apiRequest(endpoint);
63
+ }
64
+ async function checkBackendHealth() {
65
+ try {
66
+ const response = await fetch(`${API_URL}/health`, { method: "GET" });
67
+ return response.ok;
68
+ } catch {
69
+ return false;
70
+ }
71
+ }
72
+ function hasInternalApiKey() {
73
+ return !!INTERNAL_API_KEY;
74
+ }
75
+
76
+ // src/lib/prompts.ts
77
+ function buildBaseContext(businessConfig) {
78
+ if (!businessConfig) {
79
+ return `You are an AI Business Analyst.
80
+
81
+ Your role is to analyze the codebase and generate actionable improvement ideas.`;
82
+ }
83
+ const { product } = businessConfig;
84
+ let architectureSection = "";
85
+ if (product.architecture && product.architecture.length > 0) {
86
+ const components = product.architecture.map((c, i) => {
87
+ const techLine = c.tech_stack.length > 0 ? `
88
+ Tech: ${c.tech_stack.join(", ")}` : "";
89
+ return `${i + 1}. **${c.name} (${c.repo_name})**: ${c.description}${techLine}`;
90
+ }).join("\n\n");
91
+ architectureSection = `
92
+
93
+ The product consists of:
94
+ ${components}`;
95
+ }
96
+ return `You are an AI Business Analyst for ${product.name}, ${product.summary}.${architectureSection}
97
+
98
+ Your role is to analyze the codebase and generate actionable improvement ideas.`;
99
+ }
100
+
101
+ // scripts/skills/content-marketing.ts
102
+ var import_child_process = require("child_process");
103
+ var fs = __toESM(require("fs"));
104
+ var CONTENT_TASK_PREFIX = "content-";
105
+ function isContentTask(taskId) {
106
+ return taskId.startsWith(CONTENT_TASK_PREFIX);
107
+ }
108
+ function extractActionKey(taskId) {
109
+ const withoutPrefix = taskId.replace(CONTENT_TASK_PREFIX, "");
110
+ const knownActions = [
111
+ "discover-keywords",
112
+ "track-rankings",
113
+ "analyze-gaps",
114
+ "generate-blog",
115
+ "generate-carousels",
116
+ "generate-nurture"
117
+ ];
118
+ for (const action of knownActions) {
119
+ if (withoutPrefix.startsWith(action)) {
120
+ return action;
121
+ }
122
+ }
123
+ return null;
124
+ }
125
+ function extractParams(description) {
126
+ const params = {};
127
+ const patterns = [
128
+ /seed[=: ]*"([^"]+)"/i,
129
+ /term[=: ]*"([^"]+)"/i,
130
+ /category[=: ]*"([^"]+)"/i,
131
+ /topic[=: ]*"([^"]+)"/i,
132
+ /keyword[=: ]*"([^"]+)"/i
133
+ ];
134
+ for (const pattern of patterns) {
135
+ const match = description.match(pattern);
136
+ if (match) {
137
+ if (pattern.source.startsWith("seed")) params.seed = match[1];
138
+ else if (pattern.source.startsWith("term")) params.term = match[1];
139
+ else if (pattern.source.startsWith("category")) params.category = match[1];
140
+ else if (pattern.source.startsWith("topic")) params.topic = match[1];
141
+ else if (pattern.source.startsWith("keyword")) params.seed = match[1];
142
+ }
143
+ }
144
+ return params;
145
+ }
146
+ async function executeContentTask(taskId, description, contentflowConfig) {
147
+ const actionKey = extractActionKey(taskId);
148
+ if (!actionKey) {
149
+ return {
150
+ success: false,
151
+ output: `Unknown content action in task: ${taskId}`
152
+ };
153
+ }
154
+ const repoPath = contentflowConfig?.repo_path;
155
+ if (!repoPath || !fs.existsSync(repoPath)) {
156
+ return {
157
+ success: false,
158
+ output: `ContentFlow repo not found at: ${repoPath || "(not configured)"}`
159
+ };
160
+ }
161
+ const commandConfig = contentflowConfig?.commands?.[actionKey];
162
+ if (!commandConfig) {
163
+ return {
164
+ success: false,
165
+ output: `No command configured for action: ${actionKey}`
166
+ };
167
+ }
168
+ const params = extractParams(description);
169
+ const suffix = taskId.replace(CONTENT_TASK_PREFIX, "").replace(actionKey, "").replace(/^-/, "");
170
+ if (suffix && !params.seed && !params.term && !params.category && !params.topic) {
171
+ if (commandConfig.command.includes("{seed}")) params.seed = suffix;
172
+ else if (commandConfig.command.includes("{term}")) params.term = suffix;
173
+ else if (commandConfig.command.includes("{category}")) params.category = suffix;
174
+ else if (commandConfig.command.includes("{topic}")) params.topic = suffix;
175
+ }
176
+ let command = commandConfig.command;
177
+ for (const [key, value] of Object.entries(params)) {
178
+ command = command.replace(`{${key}}`, value);
179
+ }
180
+ command = command.replace(/\{[^}]+\}/g, "");
181
+ console.log(`[ContentFlow] Executing: ${command} in ${repoPath}`);
182
+ try {
183
+ const output = (0, import_child_process.execSync)(command, {
184
+ cwd: repoPath,
185
+ encoding: "utf-8",
186
+ timeout: 3e5,
187
+ // 5 minute timeout
188
+ stdio: ["pipe", "pipe", "pipe"]
189
+ });
190
+ return {
191
+ success: true,
192
+ output: output.slice(-2e3)
193
+ // Last 2000 chars
194
+ };
195
+ } catch (error) {
196
+ const errMsg = error instanceof Error ? error.message : String(error);
197
+ return {
198
+ success: false,
199
+ output: `ContentFlow command failed: ${errMsg.slice(-1e3)}`
200
+ };
201
+ }
202
+ }
203
+
204
+ // scripts/skills/business-intelligence.ts
205
+ var import_child_process2 = require("child_process");
206
+ var fs3 = __toESM(require("fs"));
207
+ var path2 = __toESM(require("path"));
208
+
209
+ // scripts/lib/paths.ts
210
+ var path = __toESM(require("path"));
211
+ var fs2 = __toESM(require("fs"));
212
+ function findProjectRoot() {
213
+ const cwd = process.cwd();
214
+ if (fs2.existsSync(path.join(cwd, "data", "config.json"))) {
215
+ return cwd;
216
+ }
217
+ try {
218
+ const entries = fs2.readdirSync(cwd, { withFileTypes: true });
219
+ for (const entry of entries) {
220
+ if (entry.isDirectory()) {
221
+ const candidate = path.join(cwd, entry.name, "data", "config.json");
222
+ if (fs2.existsSync(candidate)) {
223
+ return path.join(cwd, entry.name);
224
+ }
225
+ }
226
+ }
227
+ } catch {
228
+ }
229
+ let dir = cwd;
230
+ for (let i = 0; i < 5; i++) {
231
+ const parent = path.dirname(dir);
232
+ if (parent === dir) break;
233
+ if (fs2.existsSync(path.join(parent, "data", "config.json"))) {
234
+ return parent;
235
+ }
236
+ dir = parent;
237
+ }
238
+ return cwd;
239
+ }
240
+ var PROJECT_DIR = findProjectRoot();
241
+ var DATA_DIR = path.join(PROJECT_DIR, "data");
242
+ var STATUS_FILE = path.join(PROJECT_DIR, "STATUS.md");
243
+ var TODO_FILE = path.join(PROJECT_DIR, "TODO.md");
244
+ var MEMORY_FILE = path.join(PROJECT_DIR, "MEMORY.md");
245
+ var IDEAS_FILE = path.join(DATA_DIR, "ideas.json");
246
+ var GOALS_FILE = path.join(DATA_DIR, "goals.json");
247
+ var SESSIONS_FILE = path.join(DATA_DIR, "sessions.json");
248
+ var CONFIG_FILE = path.join(DATA_DIR, "config.json");
249
+ var BUSINESS_CONTEXT_FILE = path.join(DATA_DIR, "business-context.json");
250
+ var HYPOTHESES_FILE = path.join(DATA_DIR, "hypotheses.json");
251
+ var IMPLEMENTATIONS_FILE = path.join(DATA_DIR, "implementations.json");
252
+ var COMPETITORS_FILE = path.join(DATA_DIR, "competitors.json");
253
+ var POSITIONING_FILE = path.join(DATA_DIR, "positioning.json");
254
+ var PAGES_FILE = path.join(DATA_DIR, "pages.json");
255
+ var TEMPLATES_DIR = path.join(__dirname, "..", "..", "templates");
256
+ var COMMAND_TEMPLATES_DIR = path.join(TEMPLATES_DIR, "commands");
257
+
258
+ // scripts/skills/business-intelligence.ts
259
+ var BI_PREFIXES = [
260
+ "competitor-research",
261
+ "positioning-refresh",
262
+ "positioning-copy-bank",
263
+ "build-page-",
264
+ "measure-page-",
265
+ "growth-audit",
266
+ "pricing-analysis",
267
+ "validate-idea-"
268
+ ];
269
+ function isBusinessIntelTask(taskId) {
270
+ return BI_PREFIXES.some((prefix) => taskId.startsWith(prefix));
271
+ }
272
+ function parseTaskToCommand(taskId, description) {
273
+ if (taskId === "competitor-research") {
274
+ return { command: "research-competitors", args: "" };
275
+ }
276
+ if (taskId === "competitor-research-discover") {
277
+ return { command: "research-competitors", args: "discover" };
278
+ }
279
+ if (taskId === "competitor-research-refresh") {
280
+ return { command: "research-competitors", args: "refresh" };
281
+ }
282
+ if (taskId.startsWith("competitor-research-")) {
283
+ const name = taskId.replace("competitor-research-", "");
284
+ return { command: "research-competitors", args: name };
285
+ }
286
+ if (taskId === "positioning-refresh") {
287
+ return { command: "positioning", args: "refresh" };
288
+ }
289
+ if (taskId === "positioning-copy-bank") {
290
+ return { command: "positioning", args: "copy-bank" };
291
+ }
292
+ if (taskId.startsWith("build-page-")) {
293
+ return { command: "build-page", args: description };
294
+ }
295
+ if (taskId.startsWith("measure-page-")) {
296
+ const slug = taskId.replace("measure-page-", "");
297
+ return { command: "measure-page", args: slug };
298
+ }
299
+ if (taskId === "growth-audit") {
300
+ return { command: "growth-audit", args: "" };
301
+ }
302
+ if (taskId.startsWith("growth-audit-")) {
303
+ const channel = taskId.replace("growth-audit-", "");
304
+ return { command: "growth-audit", args: channel };
305
+ }
306
+ if (taskId === "pricing-analysis") {
307
+ return { command: "pricing-analysis", args: "" };
308
+ }
309
+ if (taskId.startsWith("validate-idea-")) {
310
+ return { command: "validate-idea", args: description };
311
+ }
312
+ return null;
313
+ }
314
+ async function executeBusinessIntelTask(taskId, description, businessContext) {
315
+ const parsed = parseTaskToCommand(taskId, description);
316
+ if (!parsed) {
317
+ return {
318
+ success: false,
319
+ output: `Unknown business intelligence task: ${taskId}`
320
+ };
321
+ }
322
+ const { command, args: args2 } = parsed;
323
+ const commandFile = path2.join(PROJECT_DIR, ".claude", "commands", `${command}.md`);
324
+ if (!fs3.existsSync(commandFile)) {
325
+ return {
326
+ success: false,
327
+ output: `Slash command template not found: ${commandFile}. Run 'init' to scaffold commands.`
328
+ };
329
+ }
330
+ const template = fs3.readFileSync(commandFile, "utf-8");
331
+ const prompt = args2 ? `${template}
332
+
333
+ ---
334
+
335
+ $ARGUMENTS: ${args2}
336
+
337
+ Execute this command now.` : `${template}
338
+
339
+ ---
340
+
341
+ Execute this command now with no arguments (use defaults).`;
342
+ console.log(`[BusinessIntel] Executing: /${command} ${args2} (task: ${taskId})`);
343
+ try {
344
+ const result = (0, import_child_process2.spawnSync)("claude", [
345
+ "--print",
346
+ "--dangerously-skip-permissions",
347
+ "--allowedTools",
348
+ "Read Write Edit Bash Glob Grep WebSearch WebFetch"
349
+ ], {
350
+ cwd: PROJECT_DIR,
351
+ input: prompt,
352
+ encoding: "utf-8",
353
+ timeout: 6e5,
354
+ // 10 minute timeout for web research tasks
355
+ stdio: ["pipe", "pipe", "pipe"],
356
+ env: process.env
357
+ });
358
+ if (result.status !== 0) {
359
+ const errorOutput = result.stderr || result.stdout || "Unknown error";
360
+ return {
361
+ success: false,
362
+ output: `Claude Code exited with code ${result.status}: ${errorOutput.slice(-1e3)}`
363
+ };
364
+ }
365
+ return {
366
+ success: true,
367
+ output: (result.stdout || "").slice(-2e3)
368
+ // Last 2000 chars
369
+ };
370
+ } catch (error) {
371
+ const errMsg = error instanceof Error ? error.message : String(error);
372
+ return {
373
+ success: false,
374
+ output: `Business intelligence task failed: ${errMsg.slice(-1e3)}`
375
+ };
376
+ }
377
+ }
378
+ function readBusinessIntelFreshness() {
379
+ const result = {
380
+ competitors: { count: 0, lastUpdated: null, staleDays: null },
381
+ positioning: { exists: false, lastUpdated: null, staleDays: null },
382
+ pages: { count: 0, livePagesWithoutMetrics: 0 }
383
+ };
384
+ if (fs3.existsSync(COMPETITORS_FILE)) {
385
+ try {
386
+ const data = JSON.parse(fs3.readFileSync(COMPETITORS_FILE, "utf-8"));
387
+ result.competitors.count = data.competitors?.length || 0;
388
+ result.competitors.lastUpdated = data.last_updated || null;
389
+ if (data.last_updated) {
390
+ const daysSince2 = Math.floor((Date.now() - new Date(data.last_updated).getTime()) / 864e5);
391
+ result.competitors.staleDays = daysSince2;
392
+ }
393
+ } catch {
394
+ }
395
+ }
396
+ if (fs3.existsSync(POSITIONING_FILE)) {
397
+ try {
398
+ const data = JSON.parse(fs3.readFileSync(POSITIONING_FILE, "utf-8"));
399
+ result.positioning.exists = !!data.current;
400
+ result.positioning.lastUpdated = data.last_updated || null;
401
+ if (data.last_updated) {
402
+ const daysSince2 = Math.floor((Date.now() - new Date(data.last_updated).getTime()) / 864e5);
403
+ result.positioning.staleDays = daysSince2;
404
+ }
405
+ } catch {
406
+ }
407
+ }
408
+ if (fs3.existsSync(PAGES_FILE)) {
409
+ try {
410
+ const data = JSON.parse(fs3.readFileSync(PAGES_FILE, "utf-8"));
411
+ result.pages.count = data.pages?.length || 0;
412
+ result.pages.livePagesWithoutMetrics = (data.pages || []).filter(
413
+ (p) => p.status === "live" && p.metrics.conversion_rate === null
414
+ ).length;
415
+ } catch {
416
+ }
417
+ }
418
+ return result;
419
+ }
420
+
421
+ // scripts/lib/run.ts
422
+ var path3 = __toESM(require("path"));
423
+ function resolveScript(baseDir, scriptName) {
424
+ const isCompiled = path3.extname(__filename) === ".js";
425
+ const resolvedName = isCompiled ? scriptName.replace(/\.ts$/, ".js") : scriptName;
426
+ const scriptPath = path3.join(baseDir, resolvedName);
427
+ return isCompiled ? { command: "node", args: [scriptPath] } : { command: "npx", args: ["tsx", scriptPath] };
428
+ }
429
+
430
+ // scripts/lib/telemetry.ts
431
+ var fs4 = __toESM(require("fs"));
432
+ var path4 = __toESM(require("path"));
433
+ var CONFIG_DIR = path4.join(
434
+ process.env.HOME || process.env.USERPROFILE || "~",
435
+ ".vibebusiness"
436
+ );
437
+ var TELEMETRY_CONFIG_FILE = path4.join(CONFIG_DIR, "telemetry.json");
438
+ var EVENTS_FILE = path4.join(CONFIG_DIR, "events.jsonl");
439
+ function getVersion() {
440
+ try {
441
+ let dir = __dirname;
442
+ for (let i = 0; i < 4; i++) {
443
+ const pkgPath = path4.join(dir, "package.json");
444
+ if (fs4.existsSync(pkgPath)) {
445
+ const pkg = JSON.parse(fs4.readFileSync(pkgPath, "utf-8"));
446
+ return pkg.version || "0.0.0";
447
+ }
448
+ dir = path4.dirname(dir);
449
+ }
450
+ } catch {
451
+ }
452
+ return "0.0.0";
453
+ }
454
+ function getTelemetryConfig() {
455
+ try {
456
+ if (!fs4.existsSync(TELEMETRY_CONFIG_FILE)) return null;
457
+ return JSON.parse(fs4.readFileSync(TELEMETRY_CONFIG_FILE, "utf-8"));
458
+ } catch {
459
+ return null;
460
+ }
461
+ }
462
+ function isTelemetryEnabled() {
463
+ const config = getTelemetryConfig();
464
+ return config?.enabled === true;
465
+ }
466
+ function trackEvent(event, properties = {}) {
467
+ try {
468
+ if (!isTelemetryEnabled()) return;
469
+ const config = getTelemetryConfig();
470
+ if (!config) return;
471
+ const entry = {
472
+ event,
473
+ properties,
474
+ id: config.id,
475
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
476
+ version: getVersion()
477
+ };
478
+ fs4.mkdirSync(CONFIG_DIR, { recursive: true });
479
+ fs4.appendFileSync(EVENTS_FILE, JSON.stringify(entry) + "\n");
480
+ } catch {
481
+ }
482
+ }
483
+
484
+ // scripts/lib/scaffold.ts
485
+ var fs5 = __toESM(require("fs"));
486
+ var path5 = __toESM(require("path"));
487
+ function scaffoldSlashCommands(rootDir) {
488
+ let templatesDir = path5.join(__dirname, "..", "..", "templates", "commands");
489
+ if (!fs5.existsSync(templatesDir)) {
490
+ templatesDir = path5.join(__dirname, "..", "..", "..", "templates", "commands");
491
+ }
492
+ if (!fs5.existsSync(templatesDir)) return;
493
+ const targetDir = path5.join(rootDir, ".claude", "commands");
494
+ fs5.mkdirSync(targetDir, { recursive: true });
495
+ const templates = fs5.readdirSync(templatesDir).filter((f) => f.endsWith(".md"));
496
+ let copied = 0;
497
+ for (const file of templates) {
498
+ const src = path5.join(templatesDir, file);
499
+ const dest = path5.join(targetDir, file);
500
+ fs5.copyFileSync(src, dest);
501
+ copied++;
502
+ }
503
+ if (copied > 0) {
504
+ console.log(` \u2713 Scaffolded ${copied} slash commands into .claude/commands/`);
505
+ }
506
+ }
507
+
508
+ // scripts/heartbeat.ts
509
+ var ROOT_DIR = PROJECT_DIR;
510
+ var args = process.argv.slice(2);
511
+ var DRY_RUN = args.includes("--dry-run");
512
+ var SKIP_REASONING = args.includes("--skip-reasoning");
513
+ var SESSION_MODE = args.includes("--session");
514
+ var DURATION_MINUTES = parseInt(args.find((a) => a.startsWith("--duration="))?.split("=")[1] || "30");
515
+ var INTERVAL_MINUTES = parseInt(args.find((a) => a.startsWith("--interval="))?.split("=")[1] || "5");
516
+ var HEARTBEAT_COUNT = parseInt(args.find((a) => a.startsWith("--count="))?.split("=")[1] || "0");
517
+ var capturedLogs = [];
518
+ var isCapturingLogs = false;
519
+ function log(message) {
520
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
521
+ const logLine = `[${timestamp}] ${message}`;
522
+ console.log(logLine);
523
+ if (isCapturingLogs) {
524
+ capturedLogs.push(logLine);
525
+ }
526
+ }
527
+ function sleep(ms) {
528
+ return new Promise((resolve) => setTimeout(resolve, ms));
529
+ }
530
+ function loadJson(filePath, defaultValue) {
531
+ try {
532
+ const content = fs6.readFileSync(filePath, "utf-8");
533
+ return JSON.parse(content);
534
+ } catch {
535
+ return defaultValue;
536
+ }
537
+ }
538
+ function saveJson(filePath, data) {
539
+ fs6.writeFileSync(filePath, JSON.stringify(data, null, 2));
540
+ }
541
+ function parseTodoFile() {
542
+ try {
543
+ const content = fs6.readFileSync(TODO_FILE, "utf-8");
544
+ const tasks = [];
545
+ let currentSection = "high_priority";
546
+ const lines = content.split("\n");
547
+ for (const line of lines) {
548
+ if (line.includes("## High Priority")) {
549
+ currentSection = "high_priority";
550
+ } else if (line.includes("## Scheduled")) {
551
+ currentSection = "scheduled";
552
+ } else if (line.includes("## Blocked")) {
553
+ currentSection = "blocked";
554
+ } else if (line.includes("## Completed")) {
555
+ currentSection = "completed";
556
+ }
557
+ const taskMatch = line.match(/^- \[([ x])\] `([^`]+)` — (.+)$/);
558
+ if (taskMatch) {
559
+ tasks.push({
560
+ id: taskMatch[2],
561
+ description: taskMatch[3],
562
+ completed: taskMatch[1] === "x",
563
+ section: currentSection
564
+ });
565
+ }
566
+ }
567
+ return tasks;
568
+ } catch {
569
+ return [];
570
+ }
571
+ }
572
+ function loadState() {
573
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
574
+ const goalsData = loadJson(GOALS_FILE, { goals: [] });
575
+ const sessionsData = loadJson(SESSIONS_FILE, { sessions: [] });
576
+ const todos = parseTodoFile();
577
+ return {
578
+ ideas: ideasData.ideas || [],
579
+ goals: goalsData.goals || [],
580
+ sessions: sessionsData.sessions || [],
581
+ todos
582
+ };
583
+ }
584
+ var DEFAULT_BUSINESS_CONTEXT = {
585
+ last_manual_update: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
586
+ last_auto_update: null,
587
+ product: { name: process.env.NEXT_PUBLIC_PRODUCT_NAME || "My Product", summary: "" },
588
+ funnels: [],
589
+ monetization: {
590
+ current_mrr: 0,
591
+ paying_lawyers: 0,
592
+ immediate_opportunity: "",
593
+ revenue_streams: []
594
+ },
595
+ funnel_stages: { description: "", stages: {} },
596
+ key_constraints: []
597
+ };
598
+ function loadBusinessContext() {
599
+ return loadJson(BUSINESS_CONTEXT_FILE, DEFAULT_BUSINESS_CONTEXT);
600
+ }
601
+ function updateBusinessContext(ctx, kpis) {
602
+ const marketplace = ctx.funnels.find((f) => f.id === "marketplace");
603
+ if (marketplace) {
604
+ marketplace.metrics = {
605
+ leads_per_lawyer_per_week: kpis.leads_per_lawyer_per_week ?? 0,
606
+ total_active_lawyers: kpis.total_active_lawyers ?? 0
607
+ };
608
+ }
609
+ updateFunnelStageStatuses(ctx, kpis);
610
+ ctx.last_auto_update = (/* @__PURE__ */ new Date()).toISOString();
611
+ saveJson(BUSINESS_CONTEXT_FILE, ctx);
612
+ }
613
+ function checkThreshold(threshold, kpiValue) {
614
+ if (kpiValue === null || kpiValue === void 0) return false;
615
+ if (threshold.operator === "gte") return kpiValue >= threshold.value;
616
+ if (threshold.operator === "lte") return kpiValue <= threshold.value;
617
+ return false;
618
+ }
619
+ function getKpiValueById(kpiId, kpis) {
620
+ const mapping = {
621
+ "kpi-001": kpis.first_response_rate,
622
+ "kpi-002": kpis.avg_response_time_hours,
623
+ "kpi-003": kpis.conversation_rate,
624
+ "kpi-004": kpis.contract_rate,
625
+ "kpi-005": kpis.leads_per_lawyer_per_week
626
+ };
627
+ return mapping[kpiId] ?? null;
628
+ }
629
+ function updateFunnelStageStatuses(ctx, kpis) {
630
+ for (const [, stage] of Object.entries(ctx.funnel_stages.stages)) {
631
+ const thresholds = [];
632
+ if (stage.healthy_threshold) thresholds.push(stage.healthy_threshold);
633
+ if (stage.healthy_thresholds) thresholds.push(...stage.healthy_thresholds);
634
+ if (thresholds.length === 0) {
635
+ continue;
636
+ }
637
+ const allMet = thresholds.every((t) => {
638
+ const val = getKpiValueById(t.kpi_id, kpis);
639
+ return checkThreshold(t, val);
640
+ });
641
+ const anyHaveData = thresholds.some((t) => {
642
+ const val = getKpiValueById(t.kpi_id, kpis);
643
+ return val !== null && val !== void 0;
644
+ });
645
+ if (!anyHaveData) {
646
+ stage.current_status = "not_started";
647
+ } else {
648
+ stage.current_status = allMet ? "healthy" : "broken";
649
+ }
650
+ }
651
+ }
652
+ var FUNNEL_STAGE_ORDER = ["acquisition", "engagement", "conversion", "monetization"];
653
+ function computeFunnelHealth(ctx, goals) {
654
+ const stages = ctx.funnel_stages.stages;
655
+ let earliestBroken = null;
656
+ const health = {};
657
+ for (const stageName of FUNNEL_STAGE_ORDER) {
658
+ const stage = stages[stageName];
659
+ if (!stage) continue;
660
+ health[stageName] = {
661
+ status: stage.current_status,
662
+ question: stage.question
663
+ };
664
+ if (!earliestBroken && stage.current_status === "broken") {
665
+ earliestBroken = stageName;
666
+ }
667
+ }
668
+ return {
669
+ ...health,
670
+ earliest_broken_stage: earliestBroken
671
+ };
672
+ }
673
+ function evaluatePrerequisites(prerequisites, goals) {
674
+ const kpiValues = {};
675
+ for (const goal of goals) {
676
+ for (const kpi of goal.kpis) {
677
+ kpiValues[kpi.id] = kpi.current_value;
678
+ }
679
+ }
680
+ return prerequisites.conditions.every((condition) => {
681
+ const val = kpiValues[condition.kpi_id];
682
+ return checkThreshold(condition, val);
683
+ });
684
+ }
685
+ function daysSince(dateString) {
686
+ const date = new Date(dateString);
687
+ const now = /* @__PURE__ */ new Date();
688
+ const diffTime = Math.abs(now.getTime() - date.getTime());
689
+ return Math.floor(diffTime / (1e3 * 60 * 60 * 24));
690
+ }
691
+ function formatDate(date) {
692
+ return date.toISOString().split("T")[0];
693
+ }
694
+ function formatDateTime(date) {
695
+ return date.toISOString();
696
+ }
697
+ function captureGitDiffInfo(workspacePath) {
698
+ const result = {
699
+ files_changed: [],
700
+ lines_added: 0,
701
+ lines_removed: 0,
702
+ has_uncommitted_changes: false
703
+ };
704
+ try {
705
+ const status = (0, import_child_process3.execSync)("git status --porcelain", { cwd: workspacePath, encoding: "utf-8" });
706
+ result.has_uncommitted_changes = status.trim().length > 0;
707
+ try {
708
+ const diffStat = (0, import_child_process3.execSync)("git diff --stat HEAD~1 HEAD 2>/dev/null || git diff --stat --cached 2>/dev/null || git diff --stat 2>/dev/null", {
709
+ cwd: workspacePath,
710
+ encoding: "utf-8",
711
+ shell: "/bin/bash"
712
+ });
713
+ const lines = diffStat.trim().split("\n");
714
+ for (const line of lines) {
715
+ const fileMatch = line.match(/^\s*(.+?)\s+\|\s+\d+/);
716
+ if (fileMatch) {
717
+ result.files_changed.push(fileMatch[1].trim());
718
+ }
719
+ const summaryMatch = line.match(/(\d+) insertion[s]?\(\+\)/);
720
+ const deletionsMatch = line.match(/(\d+) deletion[s]?\(-\)/);
721
+ if (summaryMatch) {
722
+ result.lines_added = parseInt(summaryMatch[1], 10);
723
+ }
724
+ if (deletionsMatch) {
725
+ result.lines_removed = parseInt(deletionsMatch[1], 10);
726
+ }
727
+ }
728
+ } catch {
729
+ if (status.trim()) {
730
+ const statusLines = status.trim().split("\n");
731
+ for (const line of statusLines) {
732
+ const parts = line.trim().split(/\s+/);
733
+ if (parts.length >= 2) {
734
+ result.files_changed.push(parts.slice(1).join(" "));
735
+ }
736
+ }
737
+ }
738
+ }
739
+ } catch (error) {
740
+ log(`Failed to capture git diff info: ${error instanceof Error ? error.message : "Unknown"}`);
741
+ }
742
+ return result;
743
+ }
744
+ function checkAlerts(state) {
745
+ const alerts = [];
746
+ const inboxIdeas = state.ideas.filter((i) => i.stage === "inbox");
747
+ for (const idea of inboxIdeas) {
748
+ const days = daysSince(idea.created_at);
749
+ if (days > 7) {
750
+ alerts.push(`Idea "${idea.title}" has been in inbox for ${days} days`);
751
+ }
752
+ }
753
+ const inProgressIdeas = state.ideas.filter((i) => i.stage === "in_progress");
754
+ for (const idea of inProgressIdeas) {
755
+ const days = daysSince(idea.updated_at);
756
+ if (days > 14) {
757
+ alerts.push(`Idea "${idea.title}" has been in progress for ${days} days`);
758
+ }
759
+ }
760
+ for (const goal of state.goals) {
761
+ if (goal.status === "at_risk") {
762
+ alerts.push(`Goal "${goal.title}" is at risk`);
763
+ } else if (goal.status === "behind") {
764
+ alerts.push(`Goal "${goal.title}" is behind schedule`);
765
+ }
766
+ }
767
+ const shippedIdeas = state.ideas.filter((i) => i.stage === "shipped");
768
+ for (const idea of shippedIdeas) {
769
+ const daysShipped = daysSince(idea.implementation?.completed_at || idea.updated_at);
770
+ const v = idea.verification;
771
+ if (daysShipped > 7 && (!v || v.evaluation_count === 0)) {
772
+ alerts.push(`Shipped idea "${idea.title}" has never been evaluated (${daysShipped} days since ship)`);
773
+ }
774
+ if (v?.status === "needs_investigation") {
775
+ alerts.push(`Shipped idea "${idea.title}" needs investigation \u2014 metrics not met`);
776
+ }
777
+ if (v?.requires_human_review) {
778
+ alerts.push(`Shipped idea "${idea.title}" requires human review: ${v.human_review_reason || "unspecified reason"}`);
779
+ }
780
+ }
781
+ for (const goal of state.goals) {
782
+ for (const kpi of goal.kpis) {
783
+ if (kpi.history.length > 0) {
784
+ const lastEntry = kpi.history[kpi.history.length - 1];
785
+ const days = daysSince(lastEntry.date);
786
+ if (days > 7) {
787
+ alerts.push(`KPI "${kpi.name}" hasn't been updated in ${days} days`);
788
+ }
789
+ } else if (kpi.current_value === null) {
790
+ alerts.push(`KPI "${kpi.name}" has never been measured`);
791
+ }
792
+ }
793
+ }
794
+ return alerts;
795
+ }
796
+ async function fetchLiveKPIs() {
797
+ try {
798
+ if (!hasInternalApiKey()) {
799
+ log("No INTERNAL_API_KEY configured, skipping KPI fetch");
800
+ return null;
801
+ }
802
+ log("Fetching live KPIs from backend...");
803
+ const isHealthy = await checkBackendHealth();
804
+ if (!isHealthy) {
805
+ log("Backend not reachable, skipping KPI fetch");
806
+ return null;
807
+ }
808
+ const endDate = /* @__PURE__ */ new Date();
809
+ const startDate = /* @__PURE__ */ new Date();
810
+ startDate.setDate(startDate.getDate() - 30);
811
+ const kpis = await fetchLawyerSuccessKPIs(startDate, endDate);
812
+ log(`Fetched KPIs: first_response_rate=${kpis.first_response_rate}, contract_rate=${kpis.contract_rate}`);
813
+ return kpis;
814
+ } catch (error) {
815
+ log(`Failed to fetch KPIs: ${error instanceof Error ? error.message : "Unknown error"}`);
816
+ return null;
817
+ }
818
+ }
819
+ function updateGoalsWithKPIs(kpis) {
820
+ const goalsData = loadJson(GOALS_FILE, { goals: [] });
821
+ const today = formatDate(/* @__PURE__ */ new Date());
822
+ const lawyerSuccessGoal = goalsData.goals.find((g) => g.id === "goal-001");
823
+ if (!lawyerSuccessGoal) {
824
+ log("Lawyer Success goal (goal-001) not found");
825
+ return;
826
+ }
827
+ const kpiMapping = {
828
+ "kpi-001": "first_response_rate",
829
+ "kpi-002": "avg_response_time_hours",
830
+ "kpi-003": "conversation_rate",
831
+ "kpi-004": "contract_rate",
832
+ "kpi-005": "leads_per_lawyer_per_week"
833
+ };
834
+ for (const kpi of lawyerSuccessGoal.kpis) {
835
+ const apiKey = kpiMapping[kpi.id];
836
+ if (apiKey && kpis[apiKey] !== null && kpis[apiKey] !== void 0) {
837
+ let value = kpis[apiKey];
838
+ if (["first_response_rate", "conversation_rate", "contract_rate"].includes(apiKey)) {
839
+ value = value * 100;
840
+ }
841
+ value = Math.round(value * 100) / 100;
842
+ kpi.current_value = value;
843
+ const existingEntry = kpi.history.find((h) => h.date === today);
844
+ if (existingEntry) {
845
+ existingEntry.value = value;
846
+ } else {
847
+ kpi.history.push({ date: today, value });
848
+ if (kpi.history.length > 90) {
849
+ kpi.history = kpi.history.slice(-90);
850
+ }
851
+ }
852
+ log(`Updated KPI "${kpi.name}": ${value}${kpi.unit}`);
853
+ }
854
+ }
855
+ const contractRateKPI = lawyerSuccessGoal.kpis.find((k) => k.id === "kpi-004");
856
+ if (contractRateKPI && contractRateKPI.current_value !== null) {
857
+ lawyerSuccessGoal.current_value = contractRateKPI.current_value;
858
+ }
859
+ if (lawyerSuccessGoal.current_value !== null) {
860
+ const progress = lawyerSuccessGoal.current_value / lawyerSuccessGoal.target_value;
861
+ if (progress >= 0.9) {
862
+ lawyerSuccessGoal.status = "on_track";
863
+ } else if (progress >= 0.6) {
864
+ lawyerSuccessGoal.status = "at_risk";
865
+ } else {
866
+ lawyerSuccessGoal.status = "behind";
867
+ }
868
+ }
869
+ saveJson(GOALS_FILE, goalsData);
870
+ log("Updated goals.json with live KPIs");
871
+ }
872
+ function loadCodebaseSnapshot() {
873
+ const snapshotPath = path6.join(DATA_DIR, "codebase-snapshot.json");
874
+ try {
875
+ if (fs6.existsSync(snapshotPath)) {
876
+ return JSON.parse(fs6.readFileSync(snapshotPath, "utf-8"));
877
+ }
878
+ } catch {
879
+ }
880
+ return null;
881
+ }
882
+ function buildContextForClaude(state, alerts, businessContext) {
883
+ const codebaseSnapshot = loadCodebaseSnapshot();
884
+ return {
885
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
886
+ alerts,
887
+ codebase_context: codebaseSnapshot,
888
+ business_context: businessContext ? {
889
+ funnels: businessContext.funnels.map((f) => ({
890
+ id: f.id,
891
+ name: f.name,
892
+ status: f.status,
893
+ key_insight: f.key_insight,
894
+ metrics: f.metrics
895
+ })),
896
+ monetization: {
897
+ current_mrr: businessContext.monetization.current_mrr,
898
+ paying_lawyers: businessContext.monetization.paying_lawyers,
899
+ immediate_opportunity: businessContext.monetization.immediate_opportunity,
900
+ revenue_streams: businessContext.monetization.revenue_streams
901
+ },
902
+ key_constraints: businessContext.key_constraints
903
+ } : null,
904
+ funnel_health: businessContext ? computeFunnelHealth(businessContext, state.goals) : null,
905
+ hypotheses: (loadJson(HYPOTHESES_FILE, { hypotheses: [] }).hypotheses || []).map((h) => ({
906
+ id: h.id,
907
+ title: h.title,
908
+ statement: h.statement,
909
+ funnel_stage: h.funnel_stage,
910
+ priority: h.priority,
911
+ status: h.status,
912
+ validation_ideas: h.validation_ideas,
913
+ effort_to_test: h.effort_to_test
914
+ })),
915
+ goals: state.goals.map((g) => ({
916
+ id: g.id,
917
+ title: g.title,
918
+ status: g.status,
919
+ current_value: g.current_value,
920
+ target_value: g.target_value,
921
+ target_unit: g.target_unit,
922
+ kpis: g.kpis.map((k) => ({
923
+ name: k.name,
924
+ current_value: k.current_value,
925
+ target_value: k.target_value,
926
+ unit: k.unit,
927
+ direction: k.direction,
928
+ last_updated: k.history.length > 0 ? k.history[k.history.length - 1].date : null
929
+ }))
930
+ })),
931
+ ideas: {
932
+ inbox: state.ideas.filter((i) => i.stage === "inbox").map((i) => ({
933
+ id: i.id,
934
+ title: i.title,
935
+ days_in_inbox: daysSince(i.created_at),
936
+ prerequisites_met: i.prerequisites ? evaluatePrerequisites(i.prerequisites, state.goals) : null,
937
+ funnel_stage: i.prerequisites?.funnel_stage ?? null,
938
+ prerequisites_summary: i.prerequisites?.description ?? null
939
+ })),
940
+ approved: state.ideas.filter((i) => i.stage === "approved").map((i) => ({
941
+ id: i.id,
942
+ title: i.title,
943
+ category: i.category,
944
+ days_since_approval: daysSince(i.updated_at)
945
+ })),
946
+ in_progress: state.ideas.filter((i) => i.stage === "in_progress").map((i) => {
947
+ const subTasks = i.implementation.sub_tasks || [];
948
+ const completed = subTasks.filter((st) => st.status === "completed").length;
949
+ const failed = subTasks.filter((st) => st.status === "failed").length;
950
+ return {
951
+ id: i.id,
952
+ title: i.title,
953
+ days_in_progress: daysSince(i.updated_at),
954
+ branch: i.implementation.branch_name,
955
+ sub_task_progress: subTasks.length > 0 ? `${completed}/${subTasks.length} done${failed > 0 ? `, ${failed} failed` : ""}` : null
956
+ };
957
+ }),
958
+ shipped: state.ideas.filter((i) => i.stage === "shipped").map((i) => ({
959
+ id: i.id,
960
+ title: i.title,
961
+ days_since_shipped: daysSince(i.implementation?.completed_at || i.updated_at),
962
+ goal_id: i.goal_id || null,
963
+ success_metrics: i.success_metrics,
964
+ verification_status: i.verification?.status || "pending",
965
+ last_evaluated: i.verification?.last_evaluated_at || null,
966
+ ready_for_evaluation: !i.verification?.next_evaluation_after || new Date(i.verification.next_evaluation_after) <= /* @__PURE__ */ new Date()
967
+ })),
968
+ total_count: state.ideas.length
969
+ },
970
+ todos: {
971
+ high_priority: state.todos.filter((t) => t.section === "high_priority" && !t.completed),
972
+ scheduled: state.todos.filter((t) => t.section === "scheduled"),
973
+ blocked: state.todos.filter((t) => t.section === "blocked")
974
+ },
975
+ live_data: state.liveData ? {
976
+ backend_healthy: state.liveData.backendHealthy,
977
+ kpis: state.liveData.kpis ? {
978
+ first_response_rate: state.liveData.kpis.first_response_rate,
979
+ avg_response_time_hours: state.liveData.kpis.avg_response_time_hours,
980
+ conversation_rate: state.liveData.kpis.conversation_rate,
981
+ contract_rate: state.liveData.kpis.contract_rate,
982
+ leads_per_lawyer_per_week: state.liveData.kpis.leads_per_lawyer_per_week,
983
+ total_leads: state.liveData.kpis.total_leads,
984
+ total_active_lawyers: state.liveData.kpis.total_active_lawyers
985
+ } : null
986
+ } : null,
987
+ recent_sessions: state.sessions.slice(-5).map((s) => ({
988
+ type: s.type,
989
+ status: s.status,
990
+ date: s.completed_at || s.created_at,
991
+ ideas_generated: s.ideas_generated.length
992
+ })),
993
+ business_intelligence: readBusinessIntelFreshness()
994
+ };
995
+ }
996
+ function buildBusinessConstraints(businessContext) {
997
+ if (!businessContext) {
998
+ return `BUSINESS CONTEXT:
999
+ No business context configured yet. Focus on competitor research and foundational setup.`;
1000
+ }
1001
+ const lines = ["BUSINESS CONTEXT:"];
1002
+ const productName = businessContext.product?.name || "Unknown product";
1003
+ const productSummary = businessContext.product?.summary || "";
1004
+ lines.push(`Product: ${productName}${productSummary ? ` \u2014 ${productSummary}` : ""}`);
1005
+ if (businessContext.funnels?.length > 0) {
1006
+ const funnelSummaries = businessContext.funnels.map((f) => {
1007
+ const parts = [f.name];
1008
+ if (f.status) parts.push(`(${f.status})`);
1009
+ if (f.active_lawyers?.length) parts.push(`\u2014 ${f.active_lawyers.length} active lawyers`);
1010
+ return parts.join(" ");
1011
+ });
1012
+ lines.push(`Funnels: ${funnelSummaries.join("; ")}`);
1013
+ }
1014
+ if (businessContext.monetization) {
1015
+ const m = businessContext.monetization;
1016
+ const parts = [];
1017
+ if (m.current_mrr !== void 0) parts.push(`MRR: R$${m.current_mrr}`);
1018
+ if (m.paying_lawyers !== void 0) parts.push(`${m.paying_lawyers} paying lawyers`);
1019
+ if (m.revenue_streams?.length > 0) {
1020
+ const streams = m.revenue_streams.map((s) => `${s.name} (${s.status})`).join(", ");
1021
+ parts.push(`streams: ${streams}`);
1022
+ }
1023
+ if (m.immediate_opportunity) parts.push(`opportunity: ${m.immediate_opportunity}`);
1024
+ if (parts.length > 0) lines.push(`Monetization: ${parts.join(", ")}`);
1025
+ }
1026
+ if (businessContext.key_constraints?.length > 0) {
1027
+ lines.push("");
1028
+ lines.push("KEY CONSTRAINTS (from business-context.json):");
1029
+ for (const c of businessContext.key_constraints) {
1030
+ lines.push(`- ${c}`);
1031
+ }
1032
+ }
1033
+ if ((businessContext.regulatory?.length ?? 0) > 0) {
1034
+ lines.push("");
1035
+ lines.push("REGULATORY:");
1036
+ for (const r of businessContext.regulatory) {
1037
+ lines.push(`- ${r}`);
1038
+ }
1039
+ }
1040
+ return lines.join("\n");
1041
+ }
1042
+ async function runClaudeReasoning(state, alerts, businessContext) {
1043
+ const context = buildContextForClaude(state, alerts, businessContext);
1044
+ const TIMEOUT_MS = 12e4;
1045
+ const productName = businessContext?.product?.name || process.env.NEXT_PUBLIC_PRODUCT_NAME || "this product";
1046
+ const productSummary = businessContext?.product?.summary ? `, ${businessContext.product.summary}` : "";
1047
+ const prompt = `You are the AI Business Analyst for ${productName}${productSummary}.
1048
+
1049
+ CURRENT STATE:
1050
+ ${JSON.stringify(context, null, 2)}
1051
+
1052
+ Your job is to analyze this state and recommend the next action. Consider:
1053
+ 1. Are there critical alerts that need immediate attention?
1054
+ 2. Are KPIs trending in the right direction?
1055
+ 3. Are there ideas stuck that need to be moved forward?
1056
+ 4. What should be prioritized next?
1057
+ 5. Are there approved ideas ready for autonomous implementation? If so, recommend task_id "implement-{ideaId}" to trigger it.
1058
+ 6. Are there in_progress ideas with sub-tasks? Check their progress.
1059
+
1060
+ DATA FRESHNESS CHECK:
1061
+ Before acting on any TODO or idea description, verify its assumptions against live_data:
1062
+ - If a TODO references a specific KPI value (e.g., "-27.17h", "86.34h") that differs from the current live_data.kpis value, the TODO's assumption is STALE
1063
+ - If an idea's motivation is to "fix" a metric that live_data shows is already at a reasonable (non-negative, non-zero) value, deprioritize it
1064
+ - When you detect stale assumptions, recommend a meta-task to update the TODO/idea descriptions rather than implementing the stale fix
1065
+ - Learnings in MEMORY that reference specific numbers should be validated against live_data before acting on them
1066
+
1067
+ IMPLEMENTATION TASKS:
1068
+ - To trigger autonomous implementation of an approved idea, use task_id format: "implement-{ideaId}"
1069
+ Example: "implement-idea-abc123"
1070
+ - The system will decompose the idea into sub-tasks, execute them one at a time, run tests, and create a PR
1071
+ - Only recommend implementation for ideas in "approved" stage
1072
+
1073
+ META-TASKS:
1074
+ - You can recommend ANY task_id for operations on the analyst's own data files
1075
+ - The system will execute your task using Claude Code with access to: TODO.md, MEMORY.md, data/ideas.json, data/goals.json
1076
+ - Examples of valid meta-tasks:
1077
+ - "consolidate-todos" \u2014 Clean up duplicate/completed items in TODO.md
1078
+ - "create-idea-{slug}" \u2014 Create a new idea in data/ideas.json
1079
+ - "update-goal-{slug}" \u2014 Modify goal targets or KPIs in data/goals.json
1080
+ - "batch-cleanup" \u2014 Multiple cleanup operations in one pass
1081
+ - Use descriptive task_id names and detailed descriptions so the executor knows exactly what to do
1082
+ - The description field is critical \u2014 it's the full instruction set for the executor
1083
+
1084
+ EVALUATION TASKS:
1085
+ - To evaluate a shipped idea's success metrics, use task_id: "evaluate-shipped-{ideaId}"
1086
+ - Only evaluate ideas in "shipped" stage with ready_for_evaluation=true
1087
+ - Consider the timeline in success_metrics \u2014 don't evaluate too early
1088
+ - After evaluation, the system may generate follow-up ideas for unmet metrics
1089
+
1090
+ RESEARCH TASKS:
1091
+ There are TWO types of research tasks:
1092
+
1093
+ 1. TOPIC-BASED RESEARCH (for exploring new problems):
1094
+ - Task ID format: "research-{slug}" (e.g., "research-response-time-optimization")
1095
+ - Spawns a single Claude Code session with web search + codebase access
1096
+ - Generates a deeply-researched idea grounded in evidence
1097
+ - Use when you need to investigate a problem before creating an idea
1098
+
1099
+ 2. PARALLEL IDEA RESEARCH (for validating ideas before implementation):
1100
+ - Task ID format: "research-idea-{ideaId}" (e.g., "research-idea-emergency-001")
1101
+ - Triggers PARALLEL research agents that run simultaneously:
1102
+ * Competitor Analysis (how competitors solve the problem)
1103
+ * Codebase Verification (verify assumptions against actual code)
1104
+ * Risk Assessment (identify technical, business, security risks)
1105
+ * Alternative Approaches (explore different solutions)
1106
+ - Results are aggregated into a recommendation: proceed, revise, or reject
1107
+ - Use when an idea is in "under_review" stage before approving for implementation
1108
+ - RECOMMENDED before implementing any medium+ effort ideas
1109
+
1110
+ Best practice workflow:
1111
+ 1. Create idea \u2192 inbox
1112
+ 2. Move to under_review \u2192 trigger "research-idea-{id}" for parallel validation
1113
+ 3. Review research findings \u2192 approve or revise
1114
+ 4. Approved \u2192 trigger "implement-{id}" for autonomous implementation
1115
+
1116
+ GOAL-GAP RESEARCH:
1117
+ - To research ideas for an underperforming goal, use task_id: "goal-gap-research-{goalId}"
1118
+ - Use when a goal is "behind" or "at_risk" AND has few/no active ideas working toward it
1119
+ - The system will spawn a focused research session that generates goal-aligned ideas
1120
+ - Example: "goal-gap-research-goal-003" for the Increase Revenue goal
1121
+
1122
+ BUSINESS INTELLIGENCE TASKS:
1123
+ The "business_intelligence" field in CURRENT STATE shows freshness of competitor/positioning/page data.
1124
+ These tasks invoke slash commands via Claude Code for market research and page building.
1125
+
1126
+ Task prefixes:
1127
+ - "competitor-research" \u2192 Discover + research all competitors (zero-input, auto-discovers from product description)
1128
+ - "competitor-research-discover" \u2192 Only discover new competitors
1129
+ - "competitor-research-refresh" \u2192 Re-research all existing competitors
1130
+ - "competitor-research-{name}" \u2192 Deep-dive on a single competitor
1131
+ - "positioning-refresh" \u2192 Regenerate positioning from fresh competitor data
1132
+ - "positioning-copy-bank" \u2192 Regenerate copy variations using existing positioning
1133
+ - "build-page-{slug}" \u2192 Build a landing/pricing/comparison page (description should specify page type + audience)
1134
+ - "measure-page-{slug}" \u2192 Measure a live page's performance
1135
+ - "growth-audit" \u2192 Audit growth channels vs. competitors
1136
+ - "growth-audit-{channel}" \u2192 Deep-dive on specific channel (seo, paid, content, referral)
1137
+ - "pricing-analysis" \u2192 Analyze pricing strategy vs. competitors
1138
+ - "validate-idea-{slug}" \u2192 Pre-build validation of an idea (description should contain the idea)
1139
+
1140
+ When to recommend BI tasks:
1141
+ 1. If business_intelligence.competitors.count == 0 \u2192 suggest "competitor-research" (high priority for new projects)
1142
+ 2. If business_intelligence.competitors.staleDays > 14 \u2192 suggest "competitor-research-refresh"
1143
+ 3. If business_intelligence.positioning.exists == false AND competitors.count > 0 \u2192 suggest "positioning-refresh"
1144
+ 4. If business_intelligence.positioning.staleDays > 30 \u2192 suggest "positioning-refresh"
1145
+ 5. If business_intelligence.pages.livePagesWithoutMetrics > 0 \u2192 suggest "measure-page-{id}"
1146
+ 6. These form a natural chain: research competitors \u2192 develop positioning \u2192 generate copy \u2192 build pages \u2192 measure results
1147
+
1148
+ - Use codebase_context (if present) to understand what services/integrations actually exist before proposing solutions
1149
+
1150
+ ${buildBusinessConstraints(businessContext)}
1151
+
1152
+ The "business_context", "key_constraints", and "funnel_health" fields in CURRENT STATE describe the actual product, active funnels, constraints, and current business state. USE THIS for all decision-making. Do NOT assume facts not present in the data.
1153
+
1154
+ FUNNEL REASONING:
1155
+ The business funnel is: Acquisition \u2192 Engagement \u2192 Conversion \u2192 Monetization.
1156
+ See "funnel_health" for which stages are broken.
1157
+
1158
+ Rules:
1159
+ 1. Inbox ideas with prerequisites_met=false \u2192 recommend DEFERRING, not approving.
1160
+ 2. When recommending goal-gap research, prefer the EARLIEST broken funnel stage.
1161
+ 3. Monetization ideas are premature if acquisition or engagement is broken.
1162
+ 4. Focus energy on the "earliest_broken_stage".
1163
+ 5. Ideas without prerequisites (tech debt, infrastructure) can proceed normally.
1164
+ 6. For revenue ideas: "convert existing free users to paid" > "build new revenue streams" when the user base is tiny.
1165
+
1166
+ HYPOTHESIS VALIDATION:
1167
+ The "hypotheses" field contains business hypotheses that need validation through experiments.
1168
+ Rules:
1169
+ 1. When generating ideas or research tasks, PREFER ideas that validate an active hypothesis (status="stated" or "testing").
1170
+ 2. For each hypothesis, consider: What is the cheapest experiment to validate/invalidate it?
1171
+ 3. Prioritize hypotheses that address the earliest broken funnel stage.
1172
+ 4. When recommending research, reference the hypothesis ID (e.g., "research-validate-hyp-003").
1173
+ 5. Track which ideas map to which hypothesis \u2014 set "hypothesis_id" in the idea JSON (e.g., "hypothesis_id": "hyp-003"). This auto-links the idea to the hypothesis.
1174
+ 6. When hypotheses have "effort_to_test" data, prefer the lowest-effort hypothesis when tie-breaking.
1175
+
1176
+ Respond with JSON only (no markdown code blocks, just raw JSON):
1177
+ {
1178
+ "analysis": "Your 1-2 sentence analysis of the current situation",
1179
+ "critical_issue": "The most important problem to address (or null if none)",
1180
+ "next_action": {
1181
+ "task_id": "existing task ID to execute, or a new task ID",
1182
+ "description": "What specifically to do"
1183
+ },
1184
+ "new_todos": [
1185
+ {
1186
+ "id": "unique-task-id",
1187
+ "description": "Task description",
1188
+ "priority": "high_priority or scheduled"
1189
+ }
1190
+ ],
1191
+ "learnings": ["Any patterns or insights to remember for future heartbeats"]
1192
+ }
1193
+
1194
+ If there's nothing urgent, set next_action to null and new_todos to an empty array.
1195
+ Focus on actionable, specific recommendations. Be concise.`;
1196
+ return new Promise((resolve, reject) => {
1197
+ const startTime = Date.now();
1198
+ const promptSize = prompt.length;
1199
+ log(`Running Claude reasoning (prompt: ${promptSize} chars)...`);
1200
+ const claude = (0, import_child_process3.spawn)("claude", ["--print"], {
1201
+ cwd: ROOT_DIR,
1202
+ env: process.env,
1203
+ stdio: ["pipe", "pipe", "pipe"]
1204
+ });
1205
+ log(` Claude process started (PID: ${claude.pid})`);
1206
+ claude.stdin.write(prompt);
1207
+ claude.stdin.end();
1208
+ log(` Prompt sent via stdin`);
1209
+ let output = "";
1210
+ let errorOutput = "";
1211
+ let isResolved = false;
1212
+ const progressInterval = setInterval(() => {
1213
+ if (!isResolved) {
1214
+ const elapsed = Math.round((Date.now() - startTime) / 1e3);
1215
+ log(` ...Claude thinking (${elapsed}s elapsed)`);
1216
+ }
1217
+ }, 1e4);
1218
+ const timeout = setTimeout(() => {
1219
+ if (!isResolved) {
1220
+ isResolved = true;
1221
+ clearInterval(progressInterval);
1222
+ claude.kill("SIGTERM");
1223
+ const elapsed = Math.round((Date.now() - startTime) / 1e3);
1224
+ log(`Claude reasoning timed out after ${elapsed}s`);
1225
+ resolve(null);
1226
+ }
1227
+ }, TIMEOUT_MS);
1228
+ claude.stdout.on("data", (data) => {
1229
+ const chunk = data.toString();
1230
+ output += chunk;
1231
+ if (output.length === chunk.length) {
1232
+ log(` Claude is responding...`);
1233
+ }
1234
+ });
1235
+ claude.stderr.on("data", (data) => {
1236
+ const text = data.toString();
1237
+ errorOutput += text;
1238
+ if (text.trim()) {
1239
+ log(` [Claude stderr]: ${text.trim().substring(0, 200)}`);
1240
+ }
1241
+ });
1242
+ claude.on("close", (code) => {
1243
+ if (isResolved) return;
1244
+ isResolved = true;
1245
+ clearInterval(progressInterval);
1246
+ clearTimeout(timeout);
1247
+ const elapsed = Math.round((Date.now() - startTime) / 1e3);
1248
+ if (code === 0) {
1249
+ try {
1250
+ let jsonStr = output.trim();
1251
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
1252
+ if (jsonMatch) {
1253
+ jsonStr = jsonMatch[1].trim();
1254
+ }
1255
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
1256
+ if (objectMatch) {
1257
+ const result = JSON.parse(objectMatch[0]);
1258
+ log(`Claude completed in ${elapsed}s: ${result.analysis}`);
1259
+ resolve(result);
1260
+ } else {
1261
+ log(`Claude completed in ${elapsed}s but no valid JSON found`);
1262
+ resolve(null);
1263
+ }
1264
+ } catch (error) {
1265
+ log(`Claude completed in ${elapsed}s but failed to parse: ${error instanceof Error ? error.message : "Unknown error"}`);
1266
+ log(`Raw output: ${output.substring(0, 500)}`);
1267
+ resolve(null);
1268
+ }
1269
+ } else {
1270
+ log(`Claude exited with code ${code} after ${elapsed}s: ${errorOutput}`);
1271
+ resolve(null);
1272
+ }
1273
+ });
1274
+ claude.on("error", (error) => {
1275
+ if (isResolved) return;
1276
+ isResolved = true;
1277
+ clearInterval(progressInterval);
1278
+ clearTimeout(timeout);
1279
+ log(`Claude spawn error: ${error.message}`);
1280
+ resolve(null);
1281
+ });
1282
+ });
1283
+ }
1284
+ function addTasksToTodo(tasks) {
1285
+ if (tasks.length === 0) return;
1286
+ if (!fs6.existsSync(TODO_FILE)) return;
1287
+ try {
1288
+ let content = fs6.readFileSync(TODO_FILE, "utf-8");
1289
+ if (!content.includes("## High Priority (Do Now)")) {
1290
+ log('TODO.md missing "## High Priority (Do Now)" section \u2014 creating it');
1291
+ const scheduledIdx = content.indexOf("## Scheduled");
1292
+ if (scheduledIdx !== -1) {
1293
+ content = content.slice(0, scheduledIdx) + "## High Priority (Do Now)\n\n" + content.slice(scheduledIdx);
1294
+ } else {
1295
+ content += "\n## High Priority (Do Now)\n\n";
1296
+ }
1297
+ }
1298
+ if (!content.includes("## Scheduled")) {
1299
+ log('TODO.md missing "## Scheduled" section \u2014 creating it');
1300
+ content += "\n## Scheduled\n\n";
1301
+ }
1302
+ if (!content.includes("## Completed This Week")) {
1303
+ content += "\n## Completed This Week\n\n";
1304
+ }
1305
+ const existingTodoLines = content.split("\n").filter((l) => l.startsWith("- [ ]"));
1306
+ for (const task of tasks) {
1307
+ if (content.includes(`\`${task.id}\``)) {
1308
+ log(`Skipped duplicate TODO: ${task.id}`);
1309
+ continue;
1310
+ }
1311
+ const entityPattern = /(?:idea-[a-f0-9]{8}|idea-[a-z0-9-]+|PR #\d+|hyp-\d{3}|goal-\d{3})/gi;
1312
+ const newEntities = task.description.match(entityPattern) || [];
1313
+ if (newEntities.length > 0) {
1314
+ const coveredEntity = newEntities.find(
1315
+ (entity) => existingTodoLines.some((line) => line.toLowerCase().includes(entity.toLowerCase()))
1316
+ );
1317
+ if (coveredEntity) {
1318
+ log(`Skipped semantically duplicate TODO: ${task.id} (${coveredEntity} already in existing TODO)`);
1319
+ continue;
1320
+ }
1321
+ }
1322
+ if (task.priority === "high_priority") {
1323
+ const highPriorityCount = content.split("\n").filter(
1324
+ (l) => l.startsWith("- [ ]") && content.indexOf(l) > content.indexOf("## High Priority") && content.indexOf(l) < (content.indexOf("## Scheduled") || content.length)
1325
+ ).length;
1326
+ if (highPriorityCount >= 5) {
1327
+ log(`Downgraded TODO ${task.id} to scheduled (high_priority cap of 5 reached)`);
1328
+ task.priority = "scheduled";
1329
+ }
1330
+ }
1331
+ const taskLine = `- [ ] \`${task.id}\` \u2014 ${task.description}`;
1332
+ if (task.priority === "high_priority") {
1333
+ const marker = "## High Priority (Do Now)";
1334
+ const markerIndex = content.indexOf(marker);
1335
+ if (markerIndex !== -1) {
1336
+ const insertIndex = content.indexOf("\n", markerIndex) + 1;
1337
+ content = content.slice(0, insertIndex) + "\n" + taskLine + content.slice(insertIndex);
1338
+ }
1339
+ } else {
1340
+ const marker = "## Scheduled";
1341
+ const markerIndex = content.indexOf(marker);
1342
+ if (markerIndex !== -1) {
1343
+ const insertIndex = content.indexOf("\n", markerIndex) + 1;
1344
+ content = content.slice(0, insertIndex) + "\n" + taskLine + content.slice(insertIndex);
1345
+ }
1346
+ }
1347
+ log(`Added TODO: ${task.id} \u2014 ${task.description}`);
1348
+ }
1349
+ fs6.writeFileSync(TODO_FILE, content);
1350
+ } catch (error) {
1351
+ log(`Failed to add tasks to TODO.md: ${error instanceof Error ? error.message : "Unknown error"}`);
1352
+ }
1353
+ }
1354
+ function archiveCompletedTodos() {
1355
+ try {
1356
+ if (!fs6.existsSync(TODO_FILE)) return;
1357
+ let content = fs6.readFileSync(TODO_FILE, "utf-8");
1358
+ const lines = content.split("\n");
1359
+ const completedLines = [];
1360
+ const newLines = [];
1361
+ let currentSection = "";
1362
+ for (const line of lines) {
1363
+ if (line.includes("## High Priority")) currentSection = "high_priority";
1364
+ else if (line.includes("## Scheduled")) currentSection = "scheduled";
1365
+ else if (line.includes("## Blocked")) currentSection = "blocked";
1366
+ else if (line.includes("## Completed")) currentSection = "completed";
1367
+ const isCheckedTask = /^- \[x\] /.test(line);
1368
+ if (isCheckedTask && (currentSection === "high_priority" || currentSection === "scheduled")) {
1369
+ completedLines.push(line);
1370
+ } else {
1371
+ newLines.push(line);
1372
+ }
1373
+ }
1374
+ if (completedLines.length === 0) return;
1375
+ content = newLines.join("\n");
1376
+ const completedMarker = "## Completed This Week";
1377
+ const markerIndex = content.indexOf(completedMarker);
1378
+ if (markerIndex !== -1) {
1379
+ const insertIndex = content.indexOf("\n", markerIndex) + 1;
1380
+ const archiveBlock = completedLines.join("\n") + "\n";
1381
+ content = content.slice(0, insertIndex) + archiveBlock + content.slice(insertIndex);
1382
+ }
1383
+ fs6.writeFileSync(TODO_FILE, content);
1384
+ log(`Archived ${completedLines.length} completed TODO(s) to Completed This Week`);
1385
+ } catch (error) {
1386
+ log(`Failed to archive completed TODOs: ${error instanceof Error ? error.message : "Unknown error"}`);
1387
+ }
1388
+ }
1389
+ function pruneStaleScheduledTodos(state) {
1390
+ try {
1391
+ if (!fs6.existsSync(TODO_FILE)) return;
1392
+ const content = fs6.readFileSync(TODO_FILE, "utf-8");
1393
+ const lines = content.split("\n");
1394
+ const prunedIds = [];
1395
+ const terminalIdeaIds = new Set(
1396
+ state.ideas.filter((i) => ["shipped", "rejected", "rolled_back"].includes(i.stage)).map((i) => i.id)
1397
+ );
1398
+ if (terminalIdeaIds.size === 0) return;
1399
+ let currentSection = "";
1400
+ const newLines = lines.filter((line) => {
1401
+ if (line.includes("## High Priority")) currentSection = "high_priority";
1402
+ else if (line.includes("## Scheduled")) currentSection = "scheduled";
1403
+ else if (line.includes("## Blocked")) currentSection = "blocked";
1404
+ else if (line.includes("## Completed")) currentSection = "completed";
1405
+ if (currentSection !== "scheduled") return true;
1406
+ const taskMatch = line.match(/^- \[ \] `([^`]+)`/);
1407
+ if (!taskMatch) return true;
1408
+ const taskId = taskMatch[1];
1409
+ const ideaRefMatch = taskId.match(/(?:implement|research)-idea-(.+)/);
1410
+ if (!ideaRefMatch) return true;
1411
+ const ideaId = `idea-${ideaRefMatch[1]}`;
1412
+ if (terminalIdeaIds.has(ideaId)) {
1413
+ prunedIds.push(taskId);
1414
+ return false;
1415
+ }
1416
+ return true;
1417
+ });
1418
+ if (prunedIds.length === 0) return;
1419
+ fs6.writeFileSync(TODO_FILE, newLines.join("\n"));
1420
+ log(`Pruned ${prunedIds.length} stale TODO(s): ${prunedIds.join(", ")}`);
1421
+ } catch (error) {
1422
+ log(`Failed to prune stale TODOs: ${error instanceof Error ? error.message : "Unknown error"}`);
1423
+ }
1424
+ }
1425
+ function appendToMemory(learnings) {
1426
+ if (learnings.length === 0) return;
1427
+ if (!fs6.existsSync(MEMORY_FILE)) return;
1428
+ const MAX_LEARNINGS_PER_HEARTBEAT = 2;
1429
+ let filtered = learnings.slice(0, MAX_LEARNINGS_PER_HEARTBEAT);
1430
+ if (learnings.length > MAX_LEARNINGS_PER_HEARTBEAT) {
1431
+ log(`Capped learnings from ${learnings.length} to ${MAX_LEARNINGS_PER_HEARTBEAT}`);
1432
+ }
1433
+ try {
1434
+ let content = fs6.readFileSync(MEMORY_FILE, "utf-8");
1435
+ const existingLines = content.split("\n").filter((l) => l.match(/^- \*\*/));
1436
+ filtered = filtered.filter((learning) => {
1437
+ const words = learning.toLowerCase().split(/\s+/).filter((w) => w.length > 4);
1438
+ if (words.length === 0) return true;
1439
+ const isDuplicate = existingLines.some((existing) => {
1440
+ const existingLower = existing.toLowerCase();
1441
+ const overlapCount = words.filter((w) => existingLower.includes(w)).length;
1442
+ return overlapCount / words.length > 0.6;
1443
+ });
1444
+ if (isDuplicate) {
1445
+ log(`Skipped duplicate learning: "${learning.slice(0, 60)}..."`);
1446
+ }
1447
+ return !isDuplicate;
1448
+ });
1449
+ if (filtered.length === 0) {
1450
+ log(`All learnings deduplicated \u2014 nothing new to add`);
1451
+ return;
1452
+ }
1453
+ const section = "## Learned Patterns";
1454
+ let sectionIndex = content.indexOf(section);
1455
+ if (sectionIndex === -1) {
1456
+ log('MEMORY.md missing "## Learned Patterns" section \u2014 creating it');
1457
+ content += "\n" + section + "\n";
1458
+ sectionIndex = content.indexOf(section);
1459
+ }
1460
+ if (sectionIndex !== -1) {
1461
+ const nextSectionMatch = content.slice(sectionIndex + section.length).match(/\n## /);
1462
+ const insertPoint = nextSectionMatch ? sectionIndex + section.length + (nextSectionMatch.index || 0) : content.length;
1463
+ const today = formatDate(/* @__PURE__ */ new Date());
1464
+ const newEntries = filtered.map((l) => `- **${today}:** ${l}`).join("\n");
1465
+ const beforeSection = content.slice(0, insertPoint);
1466
+ const afterSection = content.slice(insertPoint);
1467
+ if (!beforeSection.includes("### Heartbeat Learnings")) {
1468
+ content = beforeSection + "\n\n### Heartbeat Learnings\n\n" + newEntries + "\n" + afterSection;
1469
+ } else {
1470
+ const subsectionIndex = content.indexOf("### Heartbeat Learnings");
1471
+ const subsectionEndMatch = content.slice(subsectionIndex + 22).match(/\n###/);
1472
+ const subsectionEnd = subsectionEndMatch ? subsectionIndex + 22 + (subsectionEndMatch.index || 0) : insertPoint;
1473
+ content = content.slice(0, subsectionEnd) + newEntries + "\n" + content.slice(subsectionEnd);
1474
+ }
1475
+ fs6.writeFileSync(MEMORY_FILE, content);
1476
+ log(`Added ${filtered.length} learning(s) to MEMORY.md`);
1477
+ }
1478
+ } catch (error) {
1479
+ log(`Failed to append to MEMORY.md: ${error instanceof Error ? error.message : "Unknown error"}`);
1480
+ }
1481
+ }
1482
+ function determineWork(state) {
1483
+ const highPriorityTasks = state.todos.filter(
1484
+ (t) => t.section === "high_priority" && !t.completed
1485
+ );
1486
+ if (highPriorityTasks.length > 0) {
1487
+ return highPriorityTasks[0];
1488
+ }
1489
+ const now = /* @__PURE__ */ new Date();
1490
+ const hour = now.getHours();
1491
+ const dayOfWeek = now.getDay();
1492
+ const dayOfMonth = now.getDate();
1493
+ const scheduledTasks = state.todos.filter(
1494
+ (t) => t.section === "scheduled" && !t.completed
1495
+ );
1496
+ for (const task of scheduledTasks) {
1497
+ if (task.id === "quick-analysis" && hour >= 6 && hour < 7) {
1498
+ return task;
1499
+ }
1500
+ if (task.id === "deep-analysis" && dayOfWeek === 0 && hour >= 3 && hour < 4) {
1501
+ return task;
1502
+ }
1503
+ if (task.id === "metrics-analysis" && dayOfWeek === 1 && hour >= 8 && hour < 9) {
1504
+ return task;
1505
+ }
1506
+ if (task.id === "seo-audit" && (dayOfMonth === 1 || dayOfMonth === 15) && hour >= 4 && hour < 5) {
1507
+ return task;
1508
+ }
1509
+ }
1510
+ const shippedIdeas = state.ideas.filter((i) => i.stage === "shipped");
1511
+ for (const idea of shippedIdeas) {
1512
+ const v = idea.verification;
1513
+ const ready = !v?.next_evaluation_after || new Date(v.next_evaluation_after) <= /* @__PURE__ */ new Date();
1514
+ const daysShipped = daysSince(idea.implementation?.completed_at || idea.updated_at);
1515
+ if (ready && daysShipped >= 7) {
1516
+ return {
1517
+ id: `evaluate-shipped-${idea.id}`,
1518
+ description: `Evaluate shipped idea: ${idea.title}`,
1519
+ completed: false,
1520
+ section: "scheduled"
1521
+ };
1522
+ }
1523
+ }
1524
+ for (const goal of state.goals) {
1525
+ if (goal.status !== "behind" && goal.status !== "at_risk") continue;
1526
+ const activeIdeasForGoal = state.ideas.filter(
1527
+ (i) => i.goal_id === goal.id && ["inbox", "under_review", "approved", "in_progress", "testing"].includes(i.stage)
1528
+ );
1529
+ if (activeIdeasForGoal.length === 0) {
1530
+ return {
1531
+ id: `goal-gap-research-${goal.id}`,
1532
+ description: `Research ideas for behind goal: ${goal.title}`,
1533
+ completed: false,
1534
+ section: "high_priority"
1535
+ };
1536
+ }
1537
+ }
1538
+ const config = loadConfig();
1539
+ if (config.autonomy?.enabled) {
1540
+ const inProgressIdeas = state.ideas.filter((i) => i.stage === "in_progress");
1541
+ for (const idea of inProgressIdeas) {
1542
+ const subTasks = idea.implementation.sub_tasks || [];
1543
+ const hasPending = subTasks.some((st) => st.status === "pending");
1544
+ const hasFailed = subTasks.some((st) => st.status === "failed");
1545
+ if (hasPending && !hasFailed) {
1546
+ return {
1547
+ id: `implement-${idea.id}`,
1548
+ description: `Continue autonomous implementation: ${idea.title}`,
1549
+ completed: false,
1550
+ section: "high_priority"
1551
+ };
1552
+ }
1553
+ }
1554
+ const approvedIdeas = state.ideas.filter((i) => i.stage === "approved");
1555
+ if (approvedIdeas.length > 0) {
1556
+ const idea = approvedIdeas[0];
1557
+ return {
1558
+ id: `implement-${idea.id}`,
1559
+ description: `Start autonomous implementation: ${idea.title}`,
1560
+ completed: false,
1561
+ section: "high_priority"
1562
+ };
1563
+ }
1564
+ }
1565
+ return null;
1566
+ }
1567
+ function loadConfig() {
1568
+ return loadJson(CONFIG_FILE, {
1569
+ repos: [],
1570
+ workspace_dir: "",
1571
+ schedules: {}
1572
+ });
1573
+ }
1574
+ function detectTargetRepo(idea, config) {
1575
+ const filesAnalyzed = idea.source.files_analyzed || [];
1576
+ for (const file of filesAnalyzed) {
1577
+ for (const repo of config.repos) {
1578
+ if (file.includes(repo.name) || file.includes(path6.basename(repo.path))) {
1579
+ return repo;
1580
+ }
1581
+ }
1582
+ }
1583
+ if (idea.category === "security" || idea.category === "performance") {
1584
+ return config.repos.find((r) => r.type === "fastapi") || config.repos[0];
1585
+ }
1586
+ if (idea.category === "ux_design") {
1587
+ return config.repos.find((r) => r.type === "nextjs") || config.repos[0];
1588
+ }
1589
+ return config.repos[0];
1590
+ }
1591
+ async function decomposeIdea(idea, config) {
1592
+ const maxSubTasks = config.autonomy?.max_sub_tasks_per_idea || 10;
1593
+ const prompt = `You are decomposing a feature into small, implementable sub-tasks for an AI coding agent.
1594
+
1595
+ ## Feature: ${idea.title}
1596
+
1597
+ ${idea.summary}
1598
+
1599
+ ## Implementation Plan
1600
+
1601
+ ${idea.implementation_plan}
1602
+
1603
+ ## Rules
1604
+
1605
+ 1. Each sub-task should modify 1-3 files maximum
1606
+ 2. Order by dependency: foundation first, integration last
1607
+ 3. Maximum ${maxSubTasks} sub-tasks
1608
+ 4. Each sub-task must have specific instructions: file paths, function names, what to add/change
1609
+ 5. Sub-tasks should be small enough to fit in a single Claude Code session
1610
+ 6. Include the exact file paths that need to be modified
1611
+ 7. **IMPORTANT: Each sub-task MUST include writing tests.** For every new function/service created, include instructions to write corresponding tests. Example: "Create lawyer_service.py with X function, AND write tests in tests/test_lawyer_service.py that verify Y behavior." Tests should cover: happy path, error cases, and edge cases.
1612
+ 8. **Monitoring/Observability**: Each sub-task that creates or modifies a service/endpoint MUST specify:
1613
+ - Logging: "Add structured logs at [points] using the project's logger"
1614
+ - Error handling: "Wrap [operation] in try/except, log error with [context variables]"
1615
+ - Metrics: "Track [metric_name] for [operation]" (if performance-critical)
1616
+ 9. **Final sub-task should be verification**: The last sub-task should verify the feature works end-to-end, including that logs/metrics are emitted correctly. Example: "Write integration test that verifies [endpoint] returns 200, logs [event], and handles [error case] gracefully."
1617
+ 10. **Error paths are first-class**: Don't just implement the happy path. Each sub-task description must mention how errors are handled and logged.
1618
+
1619
+ Respond with JSON only (no markdown code blocks, just raw JSON):
1620
+ {
1621
+ "sub_tasks": [
1622
+ {
1623
+ "id": "st-001",
1624
+ "title": "Short descriptive title",
1625
+ "description": "Detailed instructions for Claude Code: what files to modify, what functions to add/change, specific implementation details. MUST include: 'Also write tests in tests/test_X.py that verify [specific behaviors].'",
1626
+ "files_to_modify": ["src/path/to/file.ts", "tests/test_file.ts"],
1627
+ "observability": "Brief description of logging/metrics/error handling this sub-task adds"
1628
+ }
1629
+ ]
1630
+ }`;
1631
+ return new Promise((resolve) => {
1632
+ const TIMEOUT_MS = 3e5;
1633
+ log("Decomposing idea into sub-tasks via Claude reasoning...");
1634
+ const claude = (0, import_child_process3.spawn)("claude", ["--print"], {
1635
+ cwd: ROOT_DIR,
1636
+ env: process.env,
1637
+ stdio: ["pipe", "pipe", "pipe"]
1638
+ });
1639
+ claude.stdin.write(prompt);
1640
+ claude.stdin.end();
1641
+ let output = "";
1642
+ let isResolved = false;
1643
+ const timeout = setTimeout(() => {
1644
+ if (!isResolved) {
1645
+ isResolved = true;
1646
+ claude.kill("SIGTERM");
1647
+ log("Decomposition timed out");
1648
+ resolve([]);
1649
+ }
1650
+ }, TIMEOUT_MS);
1651
+ claude.stdout.on("data", (data) => {
1652
+ output += data.toString();
1653
+ });
1654
+ claude.on("close", (code) => {
1655
+ if (isResolved) return;
1656
+ isResolved = true;
1657
+ clearTimeout(timeout);
1658
+ if (code === 0) {
1659
+ try {
1660
+ let jsonStr = output.trim();
1661
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
1662
+ if (jsonMatch) jsonStr = jsonMatch[1].trim();
1663
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
1664
+ if (objectMatch) {
1665
+ const parsed = JSON.parse(objectMatch[0]);
1666
+ const subTasks = parsed.sub_tasks.slice(0, maxSubTasks).map((st, i) => ({
1667
+ id: st.id || `st-${String(i + 1).padStart(3, "0")}`,
1668
+ title: st.title,
1669
+ description: st.description,
1670
+ files_to_modify: st.files_to_modify || [],
1671
+ observability: st.observability || void 0,
1672
+ status: "pending",
1673
+ started_at: null,
1674
+ completed_at: null,
1675
+ error_message: null,
1676
+ commit_hash: null
1677
+ }));
1678
+ log(`Decomposed into ${subTasks.length} sub-tasks`);
1679
+ resolve(subTasks);
1680
+ return;
1681
+ }
1682
+ } catch (error) {
1683
+ log(`Failed to parse decomposition: ${error instanceof Error ? error.message : "Unknown"}`);
1684
+ }
1685
+ }
1686
+ resolve([]);
1687
+ });
1688
+ claude.on("error", () => {
1689
+ if (!isResolved) {
1690
+ isResolved = true;
1691
+ clearTimeout(timeout);
1692
+ resolve([]);
1693
+ }
1694
+ });
1695
+ });
1696
+ }
1697
+ function runTestsForRepo(workspacePath, testCommands, sourceRepoPath) {
1698
+ const allOutput = [];
1699
+ const env = { ...process.env };
1700
+ if (sourceRepoPath) {
1701
+ const venvBin = path6.join(sourceRepoPath, ".venv", "bin");
1702
+ if (fs6.existsSync(venvBin)) {
1703
+ env.PATH = `${venvBin}:${env.PATH}`;
1704
+ env.VIRTUAL_ENV = path6.join(sourceRepoPath, ".venv");
1705
+ log(`Using venv from ${sourceRepoPath}/.venv`);
1706
+ }
1707
+ }
1708
+ for (const cmd of testCommands) {
1709
+ log(`Running test: ${cmd}`);
1710
+ try {
1711
+ const result = (0, import_child_process3.execSync)(cmd, {
1712
+ cwd: workspacePath,
1713
+ encoding: "utf-8",
1714
+ env,
1715
+ stdio: ["pipe", "pipe", "pipe"],
1716
+ timeout: 12e4
1717
+ // 2 min per test command
1718
+ });
1719
+ allOutput.push(`[PASS] ${cmd}
1720
+ ${result}`);
1721
+ } catch (error) {
1722
+ const execError = error;
1723
+ const errorOutput = execError.stderr || execError.stdout || execError.message;
1724
+ allOutput.push(`[FAIL] ${cmd}
1725
+ ${errorOutput}`);
1726
+ log(`Test failed: ${cmd}`);
1727
+ return { passed: false, output: allOutput.join("\n\n") };
1728
+ }
1729
+ }
1730
+ log("All tests passed");
1731
+ return { passed: true, output: allOutput.join("\n\n") };
1732
+ }
1733
+ async function executeAutonomousImplementation(ideaId) {
1734
+ const config = loadConfig();
1735
+ const autonomy = config.autonomy;
1736
+ if (!autonomy?.enabled) {
1737
+ log(`Autonomy not enabled, skipping implementation for ${ideaId}`);
1738
+ return false;
1739
+ }
1740
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
1741
+ const idea = ideasData.ideas.find((i) => i.id === ideaId);
1742
+ if (!idea) {
1743
+ log(`Idea not found: ${ideaId}`);
1744
+ return false;
1745
+ }
1746
+ const subTasks = idea.implementation.sub_tasks || [];
1747
+ if (subTasks.length === 0) {
1748
+ log(`No sub-tasks for ${ideaId}, decomposing...`);
1749
+ const newSubTasks = await decomposeIdea(idea, config);
1750
+ if (newSubTasks.length === 0) {
1751
+ log(`Decomposition failed for ${ideaId}`);
1752
+ return false;
1753
+ }
1754
+ idea.implementation.sub_tasks = newSubTasks;
1755
+ const ideaIndex2 = ideasData.ideas.findIndex((i) => i.id === ideaId);
1756
+ ideasData.ideas[ideaIndex2] = idea;
1757
+ saveJson(IDEAS_FILE, ideasData);
1758
+ log(`Saved ${newSubTasks.length} sub-tasks for ${ideaId}`);
1759
+ return true;
1760
+ }
1761
+ const pendingTasks = subTasks.filter((st) => st.status === "pending");
1762
+ const completedTasks = subTasks.filter((st) => st.status === "completed");
1763
+ const failedTasks = subTasks.filter((st) => st.status === "failed");
1764
+ const inProgressTasks = subTasks.filter((st) => st.status === "in_progress");
1765
+ if (pendingTasks.length === 0 && inProgressTasks.length === 0 && failedTasks.length === 0) {
1766
+ log(`All ${completedTasks.length} sub-tasks completed for ${ideaId}, creating PR...`);
1767
+ const targetRepo2 = detectTargetRepo(idea, config);
1768
+ if (!targetRepo2) {
1769
+ log("Could not determine target repo");
1770
+ return false;
1771
+ }
1772
+ try {
1773
+ const { command, args: args2 } = resolveScript(__dirname, "implement.ts");
1774
+ (0, import_child_process3.execSync)(
1775
+ [command, ...args2, `--idea=${ideaId}`, `--repo=${targetRepo2.name}`, "--create-pr-only"].join(" "),
1776
+ { cwd: ROOT_DIR, encoding: "utf-8", stdio: "inherit", timeout: 12e4 }
1777
+ );
1778
+ log(`PR created for ${ideaId}`);
1779
+ const reloadedIdeas = loadJson(IDEAS_FILE, { ideas: [] });
1780
+ const reloadedIndex = reloadedIdeas.ideas.findIndex((i) => i.id === ideaId);
1781
+ if (reloadedIndex !== -1) {
1782
+ reloadedIdeas.ideas[reloadedIndex].stage = "testing";
1783
+ reloadedIdeas.ideas[reloadedIndex].updated_at = (/* @__PURE__ */ new Date()).toISOString();
1784
+ saveJson(IDEAS_FILE, reloadedIdeas);
1785
+ }
1786
+ return true;
1787
+ } catch (error) {
1788
+ log(`PR creation failed: ${error instanceof Error ? error.message : "Unknown"}`);
1789
+ return false;
1790
+ }
1791
+ }
1792
+ if (failedTasks.length > 0) {
1793
+ log(`${failedTasks.length} sub-task(s) failed for ${ideaId}, manual intervention needed`);
1794
+ for (const st of failedTasks) {
1795
+ log(` Failed: ${st.id} \u2014 ${st.title}: ${st.error_message || "Unknown error"}`);
1796
+ }
1797
+ return false;
1798
+ }
1799
+ const nextTask = pendingTasks[0];
1800
+ if (!nextTask) {
1801
+ log(`No pending sub-tasks for ${ideaId}`);
1802
+ return false;
1803
+ }
1804
+ log(`Executing sub-task ${nextTask.id}: ${nextTask.title}`);
1805
+ nextTask.status = "in_progress";
1806
+ nextTask.started_at = (/* @__PURE__ */ new Date()).toISOString();
1807
+ const ideaIndex = ideasData.ideas.findIndex((i) => i.id === ideaId);
1808
+ ideasData.ideas[ideaIndex] = idea;
1809
+ saveJson(IDEAS_FILE, ideasData);
1810
+ const targetRepo = detectTargetRepo(idea, config);
1811
+ if (!targetRepo) {
1812
+ log("Could not determine target repo");
1813
+ nextTask.status = "failed";
1814
+ nextTask.error_message = "Could not determine target repository";
1815
+ saveJson(IDEAS_FILE, ideasData);
1816
+ return false;
1817
+ }
1818
+ const scopePayload = JSON.stringify({
1819
+ description: nextTask.description,
1820
+ files_to_modify: nextTask.files_to_modify || [],
1821
+ observability: nextTask.observability || void 0
1822
+ });
1823
+ const scopeBase64 = Buffer.from(scopePayload).toString("base64");
1824
+ const timeoutMs = autonomy.max_sub_task_timeout_ms || 3e5;
1825
+ const workspacePath = path6.join(config.workspace_dir, targetRepo.name);
1826
+ const executionStartTime = Date.now();
1827
+ const updateSubTaskWithDetails = (status, options = {}) => {
1828
+ const endTime = Date.now();
1829
+ const durationMs = endTime - executionStartTime;
1830
+ const gitInfo = captureGitDiffInfo(workspacePath);
1831
+ const reloadedIdeas = loadJson(IDEAS_FILE, { ideas: [] });
1832
+ const reloadedIndex = reloadedIdeas.ideas.findIndex((i) => i.id === ideaId);
1833
+ if (reloadedIndex !== -1) {
1834
+ const reloadedSubTask = reloadedIdeas.ideas[reloadedIndex].implementation.sub_tasks.find(
1835
+ (st) => st.id === nextTask.id
1836
+ );
1837
+ if (reloadedSubTask) {
1838
+ reloadedSubTask.status = status;
1839
+ reloadedSubTask.completed_at = (/* @__PURE__ */ new Date()).toISOString();
1840
+ reloadedSubTask.duration_ms = durationMs;
1841
+ reloadedSubTask.files_changed = gitInfo.files_changed;
1842
+ reloadedSubTask.lines_added = gitInfo.lines_added;
1843
+ reloadedSubTask.lines_removed = gitInfo.lines_removed;
1844
+ reloadedSubTask.has_uncommitted_changes = gitInfo.has_uncommitted_changes;
1845
+ if (options.failureType !== void 0) {
1846
+ reloadedSubTask.failure_type = options.failureType;
1847
+ }
1848
+ if (options.errorMessage !== void 0) {
1849
+ reloadedSubTask.error_message = options.errorMessage?.substring(0, 2e3) || null;
1850
+ }
1851
+ if (options.outputSnippet !== void 0) {
1852
+ reloadedSubTask.output_snippet = options.outputSnippet?.substring(0, 2e3) || null;
1853
+ }
1854
+ if (options.commitHash !== void 0) {
1855
+ reloadedSubTask.commit_hash = options.commitHash;
1856
+ }
1857
+ saveJson(IDEAS_FILE, reloadedIdeas);
1858
+ }
1859
+ }
1860
+ };
1861
+ let outputBuffer = "";
1862
+ let timedOut = false;
1863
+ try {
1864
+ const { command: implCmd, args: implArgs } = resolveScript(__dirname, "implement.ts");
1865
+ try {
1866
+ outputBuffer = (0, import_child_process3.execSync)(
1867
+ [implCmd, ...implArgs, `--idea=${ideaId}`, `--repo=${targetRepo.name}`, `--scope=${scopeBase64}`, "--skip-pr", `--timeout=${timeoutMs}`, "--model=sonnet"].join(" "),
1868
+ { cwd: ROOT_DIR, encoding: "utf-8", timeout: timeoutMs + 3e4 }
1869
+ );
1870
+ } catch (execError) {
1871
+ if (execError instanceof Error && "killed" in execError) {
1872
+ const errWithSignal = execError;
1873
+ if (errWithSignal.signal === "SIGTERM") {
1874
+ timedOut = true;
1875
+ }
1876
+ }
1877
+ throw execError;
1878
+ }
1879
+ const testCommands = targetRepo.test_commands || [];
1880
+ if (testCommands.length > 0) {
1881
+ log(`Running tests for ${targetRepo.name}...`);
1882
+ const testResult = runTestsForRepo(workspacePath, testCommands, targetRepo.path);
1883
+ if (!testResult.passed) {
1884
+ log(`Tests failed after sub-task ${nextTask.id}`);
1885
+ updateSubTaskWithDetails("failed", {
1886
+ failureType: "tests_failed",
1887
+ errorMessage: `Tests failed: ${testResult.output}`,
1888
+ outputSnippet: outputBuffer.slice(-2e3)
1889
+ });
1890
+ return false;
1891
+ }
1892
+ }
1893
+ let commitHash = null;
1894
+ try {
1895
+ commitHash = (0, import_child_process3.execSync)("git rev-parse HEAD", { cwd: workspacePath, encoding: "utf-8" }).trim();
1896
+ } catch {
1897
+ }
1898
+ updateSubTaskWithDetails("completed", {
1899
+ failureType: null,
1900
+ commitHash,
1901
+ outputSnippet: outputBuffer.slice(-2e3)
1902
+ });
1903
+ log(`Sub-task ${nextTask.id} completed successfully`);
1904
+ return true;
1905
+ } catch (error) {
1906
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
1907
+ log(`Sub-task ${nextTask.id} failed: ${errorMessage}`);
1908
+ let failureType = "error";
1909
+ if (timedOut) {
1910
+ failureType = "timeout";
1911
+ }
1912
+ updateSubTaskWithDetails("failed", {
1913
+ failureType,
1914
+ errorMessage,
1915
+ outputSnippet: outputBuffer.slice(-2e3) || null
1916
+ });
1917
+ return false;
1918
+ }
1919
+ }
1920
+ async function executeMetaTask(taskId, description, businessContext) {
1921
+ log(`Executing meta-task via Claude Code: ${taskId}`);
1922
+ const allowedFiles = [
1923
+ "TODO.md",
1924
+ "MEMORY.md",
1925
+ "data/ideas.json",
1926
+ "data/goals.json"
1927
+ ];
1928
+ const metaProductName = businessContext?.product?.name || process.env.NEXT_PUBLIC_PRODUCT_NAME || "this product";
1929
+ const prompt = `You are the AI Business Analyst for ${metaProductName}.
1930
+
1931
+ ## Task: ${taskId}
1932
+
1933
+ ${description}
1934
+
1935
+ ## Allowed Files
1936
+
1937
+ You may ONLY read and modify these files:
1938
+ ${allowedFiles.map((f) => `- ${f}`).join("\n")}
1939
+
1940
+ ## Rules
1941
+
1942
+ 1. Make the changes described above \u2014 be precise and thorough
1943
+ 2. Do NOT modify any files outside the allowed list
1944
+ 3. Do NOT modify scripts/, src/, or any code files
1945
+ 4. Do NOT run any shell commands
1946
+ 5. When modifying JSON files, preserve valid JSON structure
1947
+ 6. When modifying TODO.md, preserve the markdown checkbox format: - [ ] or - [x]
1948
+ 7. Be direct \u2014 read the file, make the edit, done
1949
+ `;
1950
+ return new Promise((resolve) => {
1951
+ const claude = (0, import_child_process3.spawn)("claude", [
1952
+ "--print",
1953
+ "--dangerously-skip-permissions",
1954
+ "--model",
1955
+ "sonnet",
1956
+ "--allowedTools",
1957
+ "Read Edit Write",
1958
+ "-p",
1959
+ prompt
1960
+ ], {
1961
+ cwd: ROOT_DIR,
1962
+ env: { ...process.env },
1963
+ stdio: ["ignore", "pipe", "pipe"]
1964
+ });
1965
+ let output = "";
1966
+ let isResolved = false;
1967
+ const timeout = setTimeout(() => {
1968
+ if (!isResolved) {
1969
+ isResolved = true;
1970
+ log(`Meta-task timed out after 240s`);
1971
+ claude.kill("SIGTERM");
1972
+ setTimeout(() => {
1973
+ try {
1974
+ claude.kill("SIGKILL");
1975
+ } catch {
1976
+ }
1977
+ }, 5e3);
1978
+ resolve(false);
1979
+ }
1980
+ }, 24e4);
1981
+ claude.stdout.on("data", (data) => {
1982
+ output += data.toString();
1983
+ });
1984
+ claude.stderr.on("data", (data) => {
1985
+ process.stderr.write(data.toString());
1986
+ });
1987
+ claude.on("close", (code) => {
1988
+ if (isResolved) return;
1989
+ isResolved = true;
1990
+ clearTimeout(timeout);
1991
+ if (code === 0) {
1992
+ log(`Meta-task completed: ${output.substring(0, 200)}`);
1993
+ resolve(true);
1994
+ } else {
1995
+ log(`Meta-task failed (exit ${code})`);
1996
+ resolve(false);
1997
+ }
1998
+ });
1999
+ claude.on("error", (err) => {
2000
+ if (isResolved) return;
2001
+ isResolved = true;
2002
+ clearTimeout(timeout);
2003
+ log(`Meta-task error: ${err.message}`);
2004
+ resolve(false);
2005
+ });
2006
+ });
2007
+ }
2008
+ async function executeResearchTask(taskId, description) {
2009
+ const topicSlug = taskId.replace("research-", "").replace(/-/g, " ");
2010
+ const topic = description || topicSlug;
2011
+ log(`Executing research task: ${topic}`);
2012
+ const goalsData = loadJson(GOALS_FILE, { goals: [] });
2013
+ const goalsContext = goalsData.goals.map((g) => {
2014
+ const kpiLines = g.kpis.map(
2015
+ (k) => ` - ${k.name}: ${k.current_value ?? "N/A"} / ${k.target_value} ${k.unit}`
2016
+ ).join("\n");
2017
+ return `${g.id}: ${g.title} (${g.status}) \u2014 ${g.current_value ?? 0}/${g.target_value} ${g.target_unit}
2018
+ ${kpiLines}`;
2019
+ }).join("\n\n");
2020
+ const contextPayload = JSON.stringify({
2021
+ trigger: description,
2022
+ codebase_snapshot: loadCodebaseSnapshot(),
2023
+ goals: goalsContext
2024
+ });
2025
+ const contextBase64 = Buffer.from(contextPayload).toString("base64");
2026
+ return new Promise((resolve) => {
2027
+ const { command: analyzeCmd, args: analyzeArgs } = resolveScript(__dirname, "analyze.ts");
2028
+ const childProcess = (0, import_child_process3.spawn)(analyzeCmd, [
2029
+ ...analyzeArgs,
2030
+ `--type=research`,
2031
+ `--topic=${topic}`,
2032
+ `--context=${contextBase64}`
2033
+ ], {
2034
+ cwd: ROOT_DIR,
2035
+ stdio: "inherit"
2036
+ });
2037
+ const timeout = setTimeout(() => {
2038
+ childProcess.kill("SIGTERM");
2039
+ log("Research task timed out after 15 minutes");
2040
+ resolve(false);
2041
+ }, 9e5);
2042
+ childProcess.on("close", (code) => {
2043
+ clearTimeout(timeout);
2044
+ if (code === 0) {
2045
+ log("Research task completed successfully");
2046
+ resolve(true);
2047
+ } else {
2048
+ log(`Research task failed with code ${code}`);
2049
+ resolve(false);
2050
+ }
2051
+ });
2052
+ childProcess.on("error", (error) => {
2053
+ clearTimeout(timeout);
2054
+ log(`Research task error: ${error.message}`);
2055
+ resolve(false);
2056
+ });
2057
+ });
2058
+ }
2059
+ function buildGoalGapPrompt(goal, existingIdeas, liveKPIs, config, businessContext) {
2060
+ const repoList = config.repos.map((r) => `- ${r.name}: ${r.path} (${r.type})`).join("\n");
2061
+ const kpiLines = goal.kpis.map((k) => {
2062
+ const progress = k.target_value && k.current_value !== null ? `${Math.round(k.current_value / k.target_value * 100)}%` : "0%";
2063
+ const trend = k.history.length >= 2 ? k.history[k.history.length - 1].value > k.history[k.history.length - 2].value ? "UP" : "DOWN" : "N/A";
2064
+ return `- **${k.name}**: ${k.current_value ?? 0} / ${k.target_value} ${k.unit} (${progress} complete, trend: ${trend})`;
2065
+ }).join("\n");
2066
+ let existingIdeasContext = "No existing ideas for this goal.";
2067
+ if (existingIdeas.length > 0) {
2068
+ existingIdeasContext = existingIdeas.map(
2069
+ (i) => `- "${i.title}" \u2014 Stage: ${i.stage}, Created: ${i.created_at.split("T")[0]}`
2070
+ ).join("\n");
2071
+ }
2072
+ let liveKPIContext = "Backend KPIs not available.";
2073
+ if (liveKPIs) {
2074
+ liveKPIContext = `Live KPIs: first_response_rate=${liveKPIs.first_response_rate}, contract_rate=${liveKPIs.contract_rate}, active_lawyers=${liveKPIs.total_active_lawyers}, total_leads=${liveKPIs.total_leads}`;
2075
+ }
2076
+ let funnelContextSection = "";
2077
+ if (businessContext) {
2078
+ const funnelSummary = businessContext.funnels.map(
2079
+ (f) => `- **${f.name}** (${f.status}): ${f.key_insight}`
2080
+ ).join("\n");
2081
+ const goalsForHealth = loadJson(GOALS_FILE, { goals: [] }).goals;
2082
+ const health = computeFunnelHealth(businessContext, goalsForHealth);
2083
+ const earliestBroken = health.earliest_broken_stage || "unknown";
2084
+ const activeLawyers = businessContext.funnels.reduce((sum, f) => sum + (f.active_lawyers?.length || 0), 0);
2085
+ const payingLawyers = businessContext.monetization.paying_lawyers;
2086
+ funnelContextSection = `
2087
+ ### Business & Funnel Context
2088
+ ${funnelSummary}
2089
+
2090
+ The platform currently has ${activeLawyers} active lawyers, ${payingLawyers} paying. The earliest broken funnel stage is **${earliestBroken}**.
2091
+
2092
+ Key constraints:
2093
+ ${businessContext.key_constraints.map((c) => `- ${c}`).join("\n")}
2094
+
2095
+ Rules:
2096
+ 1. At least HALF of ideas must target the earliest broken stage, even if the goal is about a later stage.
2097
+ 2. For the Revenue goal: if only ${activeLawyers} lawyers are active and ${payingLawyers} are paying, prioritize "convert free \u2192 paid" over "build new revenue features".
2098
+ 3. Later-stage ideas MUST include a "prerequisites" object: { "description": "...", "funnel_stage": "...", "conditions": [{ "kpi_id": "...", "operator": "gte"|"lte", "value": N, "label": "..." }] }
2099
+ 4. Don't propose per-lead fees when lead volume is < 3/lawyer/week.
2100
+ `;
2101
+ }
2102
+ const baseContextStr = buildBaseContext(businessContext);
2103
+ const constraintsSection = businessContext?.key_constraints?.length ? businessContext.key_constraints.map((c) => `- ${c}`).join("\n") : "- Review business constraints before proposing changes";
2104
+ return `${baseContextStr}
2105
+
2106
+ ## GOAL-GAP RESEARCH
2107
+
2108
+ A business goal is **behind schedule** and needs ideas to close the gap.
2109
+
2110
+ ### Goal: ${goal.title}
2111
+ **ID:** ${goal.id}
2112
+ **Description:** ${goal.description || goal.title}
2113
+ **Status:** ${goal.status}
2114
+ **Progress:** ${goal.current_value ?? 0} / ${goal.target_value} ${goal.target_unit}
2115
+ **Deadline:** ${goal.deadline || "Not set"}
2116
+
2117
+ ### KPI Breakdown
2118
+ ${kpiLines}
2119
+
2120
+ ### What's Already Been Tried
2121
+ ${existingIdeasContext}
2122
+
2123
+ ### Live Backend Data
2124
+ ${liveKPIContext}
2125
+ ${funnelContextSection}
2126
+ ### Repositories Available
2127
+ ${repoList}
2128
+
2129
+ ## Business Model Constraints
2130
+ ${constraintsSection}
2131
+
2132
+ ## Your Task
2133
+
2134
+ Research and generate **2-5 actionable ideas** that directly move this goal's KPIs forward.
2135
+
2136
+ ### Requirements for Each Idea
2137
+ 1. **Codebase grounded**: Use Glob/Grep/Read to verify what exists before proposing changes
2138
+ 2. **Web researched**: Use WebSearch for best practices, competitor analysis, Brazil-specific context
2139
+ 3. **Goal-aligned**: Must have \`goal_id\` set to "${goal.id}"
2140
+ 4. **Measurable**: success_metrics must be in "baseline \u2192 target \u2192 timeline" format tied to goal KPIs
2141
+ 5. **Tagged**: Include tag "goal-gap-${goal.id}"
2142
+ 6. **Funnel-aware**: Growth/revenue ideas targeting later funnel stages must include a "prerequisites" object
2143
+
2144
+ ### Output Format
2145
+
2146
+ Return a JSON array of ideas:
2147
+ \`\`\`json
2148
+ [
2149
+ {
2150
+ "title": "string - Clear, actionable title (max 80 chars)",
2151
+ "summary": "string - One sentence describing the improvement",
2152
+ "category": "product | ux_design | growth | performance | tech_debt | security | infrastructure | content | analytics | integration",
2153
+ "priority": "critical | high | medium | low",
2154
+ "effort": "xs | s | m | l | xl",
2155
+ "impact": "xs | s | m | l | xl",
2156
+ "context": "string - What triggered this idea (observations, data)",
2157
+ "rationale": "string - Why this matters for the business",
2158
+ "implementation_plan": "string - Step-by-step implementation (markdown ok)",
2159
+ "success_metrics": ["array of measurable outcomes in baseline\u2192target\u2192timeline format"],
2160
+ "tags": ["array of relevant tags including goal-gap-${goal.id}"],
2161
+ "files_analyzed": ["array of relevant file paths"],
2162
+ "goal_id": "${goal.id}",
2163
+ "prerequisites": "optional - { description, funnel_stage, conditions: [{ kpi_id, operator, value, label }] }"
2164
+ }
2165
+ ]
2166
+ \`\`\`
2167
+
2168
+ Only output the JSON array, no other text.`;
2169
+ }
2170
+ async function executeGoalGapResearch(goalId) {
2171
+ log(`Executing goal-gap research for ${goalId}...`);
2172
+ const goalsData = loadJson(GOALS_FILE, { goals: [] });
2173
+ const goal = goalsData.goals.find((g) => g.id === goalId);
2174
+ if (!goal) {
2175
+ log(`Goal ${goalId} not found`);
2176
+ return false;
2177
+ }
2178
+ if (goal.status !== "behind" && goal.status !== "at_risk") {
2179
+ log(`Goal ${goalId} is not behind or at_risk (status: ${goal.status}), skipping`);
2180
+ return false;
2181
+ }
2182
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
2183
+ const existingIdeas = ideasData.ideas.filter((i) => i.goal_id === goalId);
2184
+ const liveKPIs = await fetchLiveKPIs();
2185
+ const config = loadConfig();
2186
+ const businessContext = loadBusinessContext();
2187
+ const prompt = buildGoalGapPrompt(goal, existingIdeas, liveKPIs, config, businessContext);
2188
+ log(`Goal-gap prompt built (${prompt.length} chars), spawning Claude Code...`);
2189
+ return new Promise((resolve) => {
2190
+ const TIMEOUT_MS = 9e5;
2191
+ const startTime = Date.now();
2192
+ const claude = (0, import_child_process3.spawn)("claude", [
2193
+ "--print",
2194
+ "--dangerously-skip-permissions"
2195
+ ], {
2196
+ cwd: config.repos[0]?.path || ROOT_DIR,
2197
+ env: process.env,
2198
+ stdio: ["pipe", "pipe", "pipe"]
2199
+ });
2200
+ claude.stdin.write(prompt);
2201
+ claude.stdin.end();
2202
+ let output = "";
2203
+ let isResolved = false;
2204
+ const progressInterval = setInterval(() => {
2205
+ if (!isResolved) {
2206
+ const elapsed = Math.round((Date.now() - startTime) / 1e3);
2207
+ log(` ...Goal-gap research working (${elapsed}s elapsed, ${output.length} chars)`);
2208
+ }
2209
+ }, 3e4);
2210
+ const timeout = setTimeout(() => {
2211
+ if (!isResolved) {
2212
+ isResolved = true;
2213
+ clearInterval(progressInterval);
2214
+ claude.kill("SIGTERM");
2215
+ log("Goal-gap research timed out after 15 minutes");
2216
+ resolve(false);
2217
+ }
2218
+ }, TIMEOUT_MS);
2219
+ claude.stdout.on("data", (data) => {
2220
+ output += data.toString();
2221
+ });
2222
+ claude.stderr.on("data", (data) => {
2223
+ const text = data.toString();
2224
+ if (text.trim()) {
2225
+ log(` [Goal-gap stderr]: ${text.trim().substring(0, 200)}`);
2226
+ }
2227
+ });
2228
+ claude.on("close", (code) => {
2229
+ if (isResolved) return;
2230
+ isResolved = true;
2231
+ clearInterval(progressInterval);
2232
+ clearTimeout(timeout);
2233
+ const elapsed = Math.round((Date.now() - startTime) / 1e3);
2234
+ if (code !== 0) {
2235
+ log(`Goal-gap research failed with code ${code} after ${elapsed}s`);
2236
+ resolve(false);
2237
+ return;
2238
+ }
2239
+ log(`Goal-gap research completed in ${elapsed}s, parsing ideas...`);
2240
+ const jsonMatch = output.match(/\[\s*\{[\s\S]*\}\s*\]/);
2241
+ if (!jsonMatch) {
2242
+ log("No JSON array found in goal-gap research response");
2243
+ resolve(false);
2244
+ return;
2245
+ }
2246
+ try {
2247
+ const rawIdeas = JSON.parse(jsonMatch[0]);
2248
+ const now = (/* @__PURE__ */ new Date()).toISOString();
2249
+ const newIdeas = rawIdeas.map((idea) => ({
2250
+ id: `idea-${Math.random().toString(36).substring(2, 10)}`,
2251
+ title: idea.title || "Untitled Idea",
2252
+ summary: idea.summary || "",
2253
+ context: idea.context || "",
2254
+ rationale: idea.rationale || "",
2255
+ stage: "inbox",
2256
+ category: idea.category || "product",
2257
+ effort: idea.effort || "m",
2258
+ created_at: now,
2259
+ updated_at: now,
2260
+ implementation_plan: idea.implementation_plan || "",
2261
+ success_metrics: idea.success_metrics || [],
2262
+ source: {
2263
+ type: "metrics_review",
2264
+ files_analyzed: idea.files_analyzed
2265
+ },
2266
+ implementation: {
2267
+ branch_name: null,
2268
+ sub_tasks: []
2269
+ },
2270
+ goal_id: goalId,
2271
+ tags: [...idea.tags || [], `goal-gap-${goalId}`],
2272
+ comments: [{
2273
+ id: `comment-${Math.random().toString(36).substring(2, 10)}`,
2274
+ created_at: now,
2275
+ author: "system",
2276
+ author_name: "Goal-Gap Research",
2277
+ content: `Auto-generated to address goal "${goal.title}" (${goal.status}). Current progress: ${goal.current_value ?? 0}/${goal.target_value} ${goal.target_unit}.`
2278
+ }],
2279
+ related_ideas: []
2280
+ }));
2281
+ if (newIdeas.length === 0) {
2282
+ log("No ideas parsed from goal-gap research");
2283
+ resolve(false);
2284
+ return;
2285
+ }
2286
+ const freshIdeasData = loadJson(IDEAS_FILE, { ideas: [] });
2287
+ freshIdeasData.ideas.push(...newIdeas);
2288
+ saveJson(IDEAS_FILE, freshIdeasData);
2289
+ const freshGoalsData = loadJson(GOALS_FILE, { goals: [] });
2290
+ const freshGoal = freshGoalsData.goals.find((g) => g.id === goalId);
2291
+ if (freshGoal) {
2292
+ if (!freshGoal.related_ideas) freshGoal.related_ideas = [];
2293
+ freshGoal.related_ideas.push(...newIdeas.map((i) => i.id));
2294
+ saveJson(GOALS_FILE, freshGoalsData);
2295
+ }
2296
+ log(`Goal-gap research generated ${newIdeas.length} ideas for ${goalId}:`);
2297
+ newIdeas.forEach((idea, i) => {
2298
+ log(` ${i + 1}. ${idea.title}`);
2299
+ });
2300
+ resolve(true);
2301
+ } catch (error) {
2302
+ log(`Failed to parse goal-gap research ideas: ${error instanceof Error ? error.message : "Unknown"}`);
2303
+ resolve(false);
2304
+ }
2305
+ });
2306
+ claude.on("error", (error) => {
2307
+ if (!isResolved) {
2308
+ isResolved = true;
2309
+ clearInterval(progressInterval);
2310
+ clearTimeout(timeout);
2311
+ log(`Goal-gap research error: ${error.message}`);
2312
+ resolve(false);
2313
+ }
2314
+ });
2315
+ });
2316
+ }
2317
+ function buildEvaluationPrompt(idea, goal, liveKPIs, daysShipped) {
2318
+ let kpiComparison = "No KPI snapshot available at ship time.";
2319
+ if (idea.verification?.kpi_snapshot_at_ship && idea.verification.kpi_snapshot_at_ship.length > 0) {
2320
+ const rows = idea.verification.kpi_snapshot_at_ship.map((snap) => {
2321
+ const currentKPI = goal?.kpis.find((k) => k.id === snap.kpi_id);
2322
+ const currentVal = currentKPI?.current_value ?? "N/A";
2323
+ const trend = currentKPI?.history && currentKPI.history.length >= 2 ? currentKPI.history[currentKPI.history.length - 1].value > currentKPI.history[currentKPI.history.length - 2].value ? "UP" : "DOWN" : "N/A";
2324
+ return `| ${snap.kpi_name} | ${snap.value ?? "N/A"} | ${currentVal} | ${trend} |`;
2325
+ }).join("\n");
2326
+ kpiComparison = `| KPI | At Ship | Current | Trend |
2327
+ |-----|---------|---------|-------|
2328
+ ${rows}`;
2329
+ }
2330
+ let goalContext = "No linked goal.";
2331
+ if (goal) {
2332
+ goalContext = `Goal: "${goal.title}" \u2014 Status: ${goal.status}, Current: ${goal.current_value ?? "N/A"} / Target: ${goal.target_value} ${goal.target_unit}`;
2333
+ }
2334
+ let liveKPIContext = "Backend KPIs not available.";
2335
+ if (liveKPIs) {
2336
+ liveKPIContext = `Live KPIs: first_response_rate=${liveKPIs.first_response_rate}, contract_rate=${liveKPIs.contract_rate}, conversation_rate=${liveKPIs.conversation_rate}, leads_per_lawyer_per_week=${liveKPIs.leads_per_lawyer_per_week}`;
2337
+ }
2338
+ return `You are evaluating whether a shipped product improvement achieved its intended results.
2339
+
2340
+ ## Shipped Idea
2341
+
2342
+ **Title:** ${idea.title}
2343
+ **Summary:** ${idea.summary}
2344
+ **Days Since Ship:** ${daysShipped}
2345
+
2346
+ ## Success Metrics (defined at creation)
2347
+
2348
+ ${idea.success_metrics.map((m, i) => `${i + 1}. ${m}`).join("\n")}
2349
+
2350
+ ## KPI Comparison (At Ship vs Current)
2351
+
2352
+ ${kpiComparison}
2353
+
2354
+ ## Goal Context
2355
+
2356
+ ${goalContext}
2357
+
2358
+ ## Live Backend KPIs
2359
+
2360
+ ${liveKPIContext}
2361
+
2362
+ ## Judgment Rules
2363
+
2364
+ For each success_metric:
2365
+ 1. Try to parse "baseline \u2192 target \u2192 timeline" format (e.g., "Increase X from 10% to 20% within 30 days")
2366
+ 2. If the timeline hasn't elapsed yet \u2192 status = "no_data"
2367
+ 3. If KPI data is stale (>7 days old) \u2192 note "low" confidence
2368
+ 4. Compare at-ship value to current value against the metric's target
2369
+
2370
+ Overall status mapping:
2371
+ - "validated" = majority of metrics are "met" or "partially_met" with positive trends
2372
+ - "needs_investigation" = majority of metrics are "not_met" despite sufficient time elapsed
2373
+ - "inconclusive" = not enough data, or timeline not yet elapsed for most metrics
2374
+ - "invalidated" = clear negative evidence (KPIs moved in wrong direction) \u2014 rare, requires strong proof
2375
+
2376
+ Set requires_human_review=true if:
2377
+ - Metrics show contradictory signals (some improving, some declining)
2378
+ - Confidence is "low" across the board
2379
+ - The idea may have caused a regression
2380
+
2381
+ ## Follow-Up Ideas
2382
+
2383
+ If metrics are "not_met" or "needs_investigation", propose 0-2 follow-up ideas to address the gap. Each should be actionable and specific.
2384
+
2385
+ ## Response Format
2386
+
2387
+ Respond with JSON only (no markdown code blocks):
2388
+ {
2389
+ "status": "validated|needs_investigation|inconclusive|invalidated",
2390
+ "summary": "2-3 sentence judgment of the evaluation results",
2391
+ "confidence": "high|medium|low",
2392
+ "metric_evaluations": [
2393
+ {
2394
+ "metric": "The original metric text",
2395
+ "status": "met|partially_met|not_met|no_data",
2396
+ "evidence": "What data supports this judgment"
2397
+ }
2398
+ ],
2399
+ "requires_human_review": false,
2400
+ "human_review_reason": null,
2401
+ "follow_up_ideas": [
2402
+ {
2403
+ "title": "Short title",
2404
+ "summary": "What to do and why",
2405
+ "category": "product|growth|performance|etc",
2406
+ "priority": "high|medium|low"
2407
+ }
2408
+ ]
2409
+ }`;
2410
+ }
2411
+ async function executeShippedEvaluation(ideaId) {
2412
+ log(`Starting post-ship evaluation for idea: ${ideaId}`);
2413
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
2414
+ const idea = ideasData.ideas.find((i) => i.id === ideaId);
2415
+ if (!idea) {
2416
+ log(`Idea not found: ${ideaId}`);
2417
+ return false;
2418
+ }
2419
+ if (idea.stage !== "shipped") {
2420
+ log(`Idea ${ideaId} is not in shipped stage (current: ${idea.stage})`);
2421
+ return false;
2422
+ }
2423
+ const daysShipped = daysSince(idea.implementation?.completed_at || idea.updated_at);
2424
+ let goal = null;
2425
+ if (idea.goal_id) {
2426
+ const goalsData = loadJson(GOALS_FILE, { goals: [] });
2427
+ goal = goalsData.goals.find((g) => g.id === idea.goal_id) || null;
2428
+ }
2429
+ const liveKPIs = await fetchLiveKPIs();
2430
+ const prompt = buildEvaluationPrompt(idea, goal, liveKPIs, daysShipped);
2431
+ const TIMEOUT_MS = 12e4;
2432
+ const result = await new Promise((resolve) => {
2433
+ const claude = (0, import_child_process3.spawn)("claude", ["--print"], {
2434
+ cwd: ROOT_DIR,
2435
+ env: process.env,
2436
+ stdio: ["pipe", "pipe", "pipe"]
2437
+ });
2438
+ claude.stdin.write(prompt);
2439
+ claude.stdin.end();
2440
+ let output = "";
2441
+ let isResolved = false;
2442
+ const timeout = setTimeout(() => {
2443
+ if (!isResolved) {
2444
+ isResolved = true;
2445
+ claude.kill("SIGTERM");
2446
+ log("Evaluation timed out");
2447
+ resolve(null);
2448
+ }
2449
+ }, TIMEOUT_MS);
2450
+ claude.stdout.on("data", (data) => {
2451
+ output += data.toString();
2452
+ });
2453
+ claude.on("close", (code) => {
2454
+ if (isResolved) return;
2455
+ isResolved = true;
2456
+ clearTimeout(timeout);
2457
+ if (code === 0 && output.trim()) {
2458
+ try {
2459
+ let jsonStr = output.trim();
2460
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
2461
+ if (jsonMatch) jsonStr = jsonMatch[1].trim();
2462
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
2463
+ if (objectMatch) {
2464
+ const parsed = JSON.parse(objectMatch[0]);
2465
+ log(`Evaluation complete: status=${parsed.status}, confidence=${parsed.confidence}`);
2466
+ resolve(parsed);
2467
+ return;
2468
+ }
2469
+ } catch (error) {
2470
+ log(`Failed to parse evaluation: ${error instanceof Error ? error.message : "Unknown"}`);
2471
+ }
2472
+ }
2473
+ resolve(null);
2474
+ });
2475
+ claude.on("error", () => {
2476
+ if (!isResolved) {
2477
+ isResolved = true;
2478
+ clearTimeout(timeout);
2479
+ resolve(null);
2480
+ }
2481
+ });
2482
+ });
2483
+ if (!result) {
2484
+ log(`Evaluation failed for ${ideaId}`);
2485
+ return false;
2486
+ }
2487
+ const now = (/* @__PURE__ */ new Date()).toISOString();
2488
+ const existingVerification = idea.verification || {
2489
+ status: "pending",
2490
+ first_evaluated_at: null,
2491
+ last_evaluated_at: null,
2492
+ evaluation_count: 0,
2493
+ next_evaluation_after: null,
2494
+ summary: null,
2495
+ metric_evaluations: [],
2496
+ confidence: null,
2497
+ follow_up_idea_ids: [],
2498
+ requires_human_review: false,
2499
+ human_review_reason: null,
2500
+ kpi_snapshot_at_ship: []
2501
+ };
2502
+ let nextEvaluationDays;
2503
+ switch (result.status) {
2504
+ case "validated":
2505
+ nextEvaluationDays = 30;
2506
+ break;
2507
+ case "needs_investigation":
2508
+ nextEvaluationDays = 14;
2509
+ break;
2510
+ case "inconclusive":
2511
+ nextEvaluationDays = 7;
2512
+ break;
2513
+ case "invalidated":
2514
+ nextEvaluationDays = 30;
2515
+ break;
2516
+ default:
2517
+ nextEvaluationDays = 14;
2518
+ }
2519
+ const nextEvalDate = /* @__PURE__ */ new Date();
2520
+ nextEvalDate.setDate(nextEvalDate.getDate() + nextEvaluationDays);
2521
+ const updatedVerification = {
2522
+ ...existingVerification,
2523
+ status: result.status,
2524
+ first_evaluated_at: existingVerification.first_evaluated_at || now,
2525
+ last_evaluated_at: now,
2526
+ evaluation_count: existingVerification.evaluation_count + 1,
2527
+ next_evaluation_after: nextEvalDate.toISOString(),
2528
+ summary: result.summary,
2529
+ metric_evaluations: result.metric_evaluations,
2530
+ confidence: result.confidence,
2531
+ requires_human_review: result.requires_human_review,
2532
+ human_review_reason: result.human_review_reason
2533
+ };
2534
+ const followUpIds = [];
2535
+ if (result.follow_up_ideas && result.follow_up_ideas.length > 0) {
2536
+ for (const followUp of result.follow_up_ideas) {
2537
+ const followUpId = `idea-eval-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 6)}`;
2538
+ const newIdea = {
2539
+ id: followUpId,
2540
+ title: followUp.title,
2541
+ summary: followUp.summary,
2542
+ context: `Follow-up from post-ship evaluation of "${idea.title}" (${ideaId})`,
2543
+ rationale: `Evaluation found metrics not met for shipped idea. This follow-up addresses the gap.`,
2544
+ stage: "inbox",
2545
+ category: followUp.category || "product",
2546
+ effort: "s",
2547
+ created_at: now,
2548
+ updated_at: now,
2549
+ implementation_plan: "",
2550
+ success_metrics: [],
2551
+ source: {
2552
+ type: "metrics_review",
2553
+ files_analyzed: []
2554
+ },
2555
+ implementation: {
2556
+ branch_name: null,
2557
+ completed_at: null,
2558
+ sub_tasks: []
2559
+ },
2560
+ goal_id: idea.goal_id || null,
2561
+ comments: [],
2562
+ tags: ["follow-up", `evaluation-${ideaId}`],
2563
+ related_ideas: [ideaId]
2564
+ };
2565
+ ideasData.ideas.push(newIdea);
2566
+ followUpIds.push(followUpId);
2567
+ log(`Created follow-up idea: ${followUpId} \u2014 "${followUp.title}"`);
2568
+ }
2569
+ }
2570
+ updatedVerification.follow_up_idea_ids = [
2571
+ ...existingVerification.follow_up_idea_ids,
2572
+ ...followUpIds
2573
+ ];
2574
+ const ideaIndex = ideasData.ideas.findIndex((i) => i.id === ideaId);
2575
+ if (ideaIndex !== -1) {
2576
+ ideasData.ideas[ideaIndex].verification = updatedVerification;
2577
+ ideasData.ideas[ideaIndex].updated_at = now;
2578
+ const comments = ideasData.ideas[ideaIndex].comments || [];
2579
+ comments.push({
2580
+ id: `comment-eval-${Date.now().toString(36)}`,
2581
+ created_at: now,
2582
+ author: "ai",
2583
+ author_name: "Evaluation Agent",
2584
+ content: `**Post-Ship Evaluation #${updatedVerification.evaluation_count}**
2585
+
2586
+ **Status:** ${result.status.toUpperCase()}
2587
+ **Confidence:** ${result.confidence}
2588
+
2589
+ ${result.summary}
2590
+
2591
+ **Metric Results:**
2592
+ ${result.metric_evaluations.map((m) => `- ${m.status.toUpperCase()}: ${m.metric} \u2014 ${m.evidence}`).join("\n")}${followUpIds.length > 0 ? `
2593
+
2594
+ **Follow-up ideas created:** ${followUpIds.join(", ")}` : ""}
2595
+
2596
+ **Next evaluation:** ${nextEvalDate.toISOString().split("T")[0]}`
2597
+ });
2598
+ ideasData.ideas[ideaIndex].comments = comments;
2599
+ }
2600
+ saveJson(IDEAS_FILE, ideasData);
2601
+ log(`Evaluation saved for ${ideaId}: status=${result.status}, next_eval=${nextEvalDate.toISOString().split("T")[0]}`);
2602
+ return true;
2603
+ }
2604
+ function generateResearchTasks(idea, config, businessContext) {
2605
+ const tasks = [];
2606
+ const ideaContext = `
2607
+ Title: ${idea.title}
2608
+ Summary: ${idea.summary}
2609
+ Category: ${idea.category}
2610
+ Context: ${idea.context || "N/A"}
2611
+ Rationale: ${idea.rationale || "N/A"}
2612
+ Implementation Plan: ${idea.implementation_plan}
2613
+ `;
2614
+ const competitors = businessContext?.competitors?.join(", ") || "industry competitors";
2615
+ const locale = businessContext?.product?.locale;
2616
+ const searchLang = locale?.startsWith("pt") ? "Search in both English and Portuguese for Brazil-specific approaches" : "Search for market-specific approaches";
2617
+ const repoList = config?.repos?.map((r) => `- ${r.path} (${r.name}, ${r.type})`).join("\n") || "- Check available codebases";
2618
+ const regulatory = businessContext?.regulatory;
2619
+ const regulatorySection = regulatory?.length ? regulatory.map((r) => `- ${r}`).join("\n") : "- Consider regulatory and compliance requirements for this domain";
2620
+ tasks.push({
2621
+ id: "rt-001",
2622
+ type: "competitor_analysis",
2623
+ topic: `How do competitors solve: ${idea.title}`,
2624
+ prompt: `You are researching competitor approaches to inform a product decision.
2625
+
2626
+ ## Idea Under Review
2627
+ ${ideaContext}
2628
+
2629
+ ## Your Task
2630
+ Use WebSearch to research:
2631
+ 1. How do competitors (${competitors}) solve this problem?
2632
+ 2. What are industry best practices for this type of feature?
2633
+ 3. ${searchLang}
2634
+
2635
+ Respond with JSON only:
2636
+ {
2637
+ "competitors_researched": ["name1", "name2"],
2638
+ "findings": "Detailed markdown summary of what you found",
2639
+ "best_practices": ["practice1", "practice2"],
2640
+ "confidence": "high|medium|low",
2641
+ "recommendation": "What we should learn from competitors"
2642
+ }`,
2643
+ status: "pending",
2644
+ started_at: null,
2645
+ completed_at: null,
2646
+ findings: null,
2647
+ confidence: null,
2648
+ error_message: null
2649
+ });
2650
+ tasks.push({
2651
+ id: "rt-002",
2652
+ type: "codebase_verification",
2653
+ topic: `Verify codebase state for: ${idea.title}`,
2654
+ prompt: `You are verifying assumptions about the codebase before implementing a feature.
2655
+
2656
+ ## Idea Under Review
2657
+ ${ideaContext}
2658
+
2659
+ ## Your Task
2660
+ Use Glob, Grep, and Read tools to verify:
2661
+ 1. Do the files/services mentioned in the implementation plan actually exist?
2662
+ 2. What is the current state of related functionality?
2663
+ 3. Are there any existing implementations we'd be duplicating?
2664
+ 4. What dependencies or patterns should we follow?
2665
+
2666
+ Check these codebases:
2667
+ ${repoList}
2668
+
2669
+ Respond with JSON only:
2670
+ {
2671
+ "files_verified": ["path1", "path2"],
2672
+ "existing_implementations": "What already exists",
2673
+ "gaps_identified": "What's missing that we need",
2674
+ "patterns_to_follow": ["pattern1", "pattern2"],
2675
+ "confidence": "high|medium|low",
2676
+ "recommendation": "Whether implementation plan is accurate"
2677
+ }`,
2678
+ status: "pending",
2679
+ started_at: null,
2680
+ completed_at: null,
2681
+ findings: null,
2682
+ confidence: null,
2683
+ error_message: null
2684
+ });
2685
+ tasks.push({
2686
+ id: "rt-003",
2687
+ type: "risk_assessment",
2688
+ topic: `Identify risks for: ${idea.title}`,
2689
+ prompt: `You are a risk analyst reviewing a product feature before implementation.
2690
+
2691
+ ## Idea Under Review
2692
+ ${ideaContext}
2693
+
2694
+ ## Your Task
2695
+ Analyze potential risks:
2696
+ 1. Technical risks (scalability, reliability, dependencies)
2697
+ 2. Business risks (user adoption, cost, regulatory compliance)
2698
+ 3. Security risks (data exposure, abuse potential)
2699
+ 4. Operational risks (maintenance burden, monitoring needs)
2700
+ 5. What could go wrong during implementation?
2701
+
2702
+ Regulatory & compliance considerations:
2703
+ ${regulatorySection}
2704
+
2705
+ Respond with JSON only:
2706
+ {
2707
+ "technical_risks": [{"risk": "...", "severity": "high|medium|low", "mitigation": "..."}],
2708
+ "business_risks": [{"risk": "...", "severity": "high|medium|low", "mitigation": "..."}],
2709
+ "security_risks": [{"risk": "...", "severity": "high|medium|low", "mitigation": "..."}],
2710
+ "confidence": "high|medium|low",
2711
+ "overall_risk_level": "high|medium|low",
2712
+ "recommendation": "proceed|revise|reject with reasoning"
2713
+ }`,
2714
+ status: "pending",
2715
+ started_at: null,
2716
+ completed_at: null,
2717
+ findings: null,
2718
+ confidence: null,
2719
+ error_message: null
2720
+ });
2721
+ if (idea.effort === "m" || idea.effort === "l" || idea.effort === "xl") {
2722
+ tasks.push({
2723
+ id: "rt-004",
2724
+ type: "alternative_approaches",
2725
+ topic: `Alternative solutions for: ${idea.title}`,
2726
+ prompt: `You are exploring alternative approaches to solve a problem.
2727
+
2728
+ ## Idea Under Review
2729
+ ${ideaContext}
2730
+
2731
+ ## Your Task
2732
+ Research and propose 2-3 alternative approaches:
2733
+ 1. What are different ways to solve this problem?
2734
+ 2. What are the trade-offs of each approach?
2735
+ 3. Is the proposed solution the best one, or is there a simpler/better way?
2736
+
2737
+ Consider:
2738
+ - Build vs Buy (existing services, APIs)
2739
+ - Simpler MVP versions
2740
+ - Different technical approaches
2741
+ - Quick wins vs comprehensive solutions
2742
+
2743
+ Respond with JSON only:
2744
+ {
2745
+ "current_approach_summary": "Brief summary of proposed solution",
2746
+ "alternatives": [
2747
+ {
2748
+ "name": "Alternative name",
2749
+ "description": "How it works",
2750
+ "pros": ["pro1", "pro2"],
2751
+ "cons": ["con1", "con2"],
2752
+ "effort_estimate": "xs|s|m|l|xl"
2753
+ }
2754
+ ],
2755
+ "confidence": "high|medium|low",
2756
+ "recommendation": "Which approach to pursue and why"
2757
+ }`,
2758
+ status: "pending",
2759
+ started_at: null,
2760
+ completed_at: null,
2761
+ findings: null,
2762
+ confidence: null,
2763
+ error_message: null
2764
+ });
2765
+ }
2766
+ const searchPaths = (config?.repos || []).map((r) => {
2767
+ if (r.type === "nextjs") return `Search in ${r.path}:
2768
+ - ${r.path}/src/app/**/*{keyword}*/**/*.tsx
2769
+ - ${r.path}/src/components/**/*{keyword}*.tsx
2770
+ - ${r.path}/src/lib/**/*{keyword}*.ts`;
2771
+ if (r.type === "fastapi") return `Search in ${r.path}:
2772
+ - ${r.path}/app/**/*{keyword}*.py
2773
+ - Grep for function names, route decorators, service classes`;
2774
+ return `Search in ${r.path}:
2775
+ - ${r.path}/**/*{keyword}*`;
2776
+ }).join("\n\n");
2777
+ tasks.push({
2778
+ id: "rt-005",
2779
+ type: "duplicate_detection",
2780
+ topic: `Check if already implemented: ${idea.title}`,
2781
+ prompt: `You are checking whether a proposed feature already exists in the codebase. This prevents wasting effort on duplicate implementations.
2782
+
2783
+ ## Idea Under Review
2784
+ ${ideaContext}
2785
+
2786
+ ## Your Task
2787
+
2788
+ ### Step 1: Extract Keywords
2789
+ Extract keywords from the title and summary. Generate search variations:
2790
+ - Singular/plural forms
2791
+ - With/without hyphens and case variations
2792
+ - Abbreviations
2793
+
2794
+ ### Step 2: Search Codebases
2795
+ ${searchPaths || "Search available codebases for matching files and patterns."}
2796
+
2797
+ ### Step 3: Functionality Search
2798
+ Use Grep to find related code patterns:
2799
+ - Hook names, function names, type definitions
2800
+ - API client methods
2801
+ - Check recent git log for commits that may have shipped this feature
2802
+
2803
+ ### Step 4: Verdict
2804
+ Assess overlap percentage (0-100%) and classify:
2805
+ - **PROCEED** (0-20% overlap): No duplicates found. Safe to implement.
2806
+ - **EXTEND** (20-70% overlap): Found existing code that partially does this. Recommend extending.
2807
+ - **INVESTIGATE** (70-90% overlap): Very similar implementation exists. Clarify scope first.
2808
+ - **STOP** (90-100% overlap): Feature already exists. Do not implement.
2809
+
2810
+ Respond with JSON only:
2811
+ {
2812
+ "keywords_searched": ["keyword1", "keyword2"],
2813
+ "existing_routes": [{"path": "/route", "file": "...", "purpose": "..."}],
2814
+ "existing_components": [{"name": "Component", "file": "...", "purpose": "..."}],
2815
+ "existing_functions": [{"name": "functionName", "file": "...", "purpose": "..."}],
2816
+ "backend_matches": [{"name": "service/endpoint", "file": "...", "purpose": "..."}],
2817
+ "overlap_percentage": 0,
2818
+ "verdict": "proceed|extend|investigate|stop",
2819
+ "confidence": "high|medium|low",
2820
+ "recommendation": "Detailed explanation of what exists and what's genuinely new"
2821
+ }`,
2822
+ status: "pending",
2823
+ started_at: null,
2824
+ completed_at: null,
2825
+ findings: null,
2826
+ confidence: null,
2827
+ error_message: null
2828
+ });
2829
+ return tasks;
2830
+ }
2831
+ async function executeSingleResearchTask(task) {
2832
+ const TIMEOUT_MS = 3e5;
2833
+ log(` Starting research task: ${task.type} - ${task.topic}`);
2834
+ task.status = "running";
2835
+ task.started_at = (/* @__PURE__ */ new Date()).toISOString();
2836
+ return new Promise((resolve) => {
2837
+ const claude = (0, import_child_process3.spawn)("claude", ["--print", "--dangerously-skip-permissions"], {
2838
+ cwd: ROOT_DIR,
2839
+ env: process.env,
2840
+ stdio: ["pipe", "pipe", "pipe"]
2841
+ });
2842
+ claude.stdin.write(task.prompt);
2843
+ claude.stdin.end();
2844
+ let output = "";
2845
+ let errorOutput = "";
2846
+ const timeout = setTimeout(() => {
2847
+ claude.kill("SIGTERM");
2848
+ task.status = "failed";
2849
+ task.completed_at = (/* @__PURE__ */ new Date()).toISOString();
2850
+ task.error_message = "Timed out after 5 minutes";
2851
+ log(` Research task timed out: ${task.type}`);
2852
+ resolve(task);
2853
+ }, TIMEOUT_MS);
2854
+ claude.stdout.on("data", (data) => {
2855
+ output += data.toString();
2856
+ });
2857
+ claude.stderr.on("data", (data) => {
2858
+ errorOutput += data.toString();
2859
+ });
2860
+ claude.on("close", (code) => {
2861
+ clearTimeout(timeout);
2862
+ task.completed_at = (/* @__PURE__ */ new Date()).toISOString();
2863
+ if (code === 0 && output.trim()) {
2864
+ try {
2865
+ let jsonStr = output.trim();
2866
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
2867
+ if (jsonMatch) jsonStr = jsonMatch[1].trim();
2868
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
2869
+ if (objectMatch) {
2870
+ const parsed = JSON.parse(objectMatch[0]);
2871
+ task.status = "completed";
2872
+ task.findings = JSON.stringify(parsed, null, 2);
2873
+ task.confidence = parsed.confidence || "medium";
2874
+ log(` Research task completed: ${task.type} (confidence: ${task.confidence})`);
2875
+ } else {
2876
+ task.status = "completed";
2877
+ task.findings = output.trim();
2878
+ task.confidence = "low";
2879
+ log(` Research task completed (raw output): ${task.type}`);
2880
+ }
2881
+ } catch {
2882
+ task.status = "completed";
2883
+ task.findings = output.trim();
2884
+ task.confidence = "low";
2885
+ log(` Research task completed (parse error): ${task.type}`);
2886
+ }
2887
+ } else {
2888
+ task.status = "failed";
2889
+ task.error_message = errorOutput || `Exited with code ${code}`;
2890
+ log(` Research task failed: ${task.type} - ${task.error_message}`);
2891
+ }
2892
+ resolve(task);
2893
+ });
2894
+ claude.on("error", (error) => {
2895
+ clearTimeout(timeout);
2896
+ task.status = "failed";
2897
+ task.completed_at = (/* @__PURE__ */ new Date()).toISOString();
2898
+ task.error_message = error.message;
2899
+ log(` Research task error: ${task.type} - ${error.message}`);
2900
+ resolve(task);
2901
+ });
2902
+ });
2903
+ }
2904
+ async function executeParallelResearch(idea, config, businessContext) {
2905
+ log(`Starting parallel research for idea: ${idea.id}`);
2906
+ const research = {
2907
+ started_at: (/* @__PURE__ */ new Date()).toISOString(),
2908
+ completed_at: null,
2909
+ tasks: generateResearchTasks(idea, config, businessContext),
2910
+ summary: null,
2911
+ recommendation: null
2912
+ };
2913
+ log(`Generated ${research.tasks.length} research tasks, executing in parallel...`);
2914
+ const completedTasks = await Promise.all(
2915
+ research.tasks.map((task) => executeSingleResearchTask(task))
2916
+ );
2917
+ research.tasks = completedTasks;
2918
+ research.completed_at = (/* @__PURE__ */ new Date()).toISOString();
2919
+ const successfulTasks = completedTasks.filter((t) => t.status === "completed");
2920
+ const failedTasks = completedTasks.filter((t) => t.status === "failed");
2921
+ log(`Research complete: ${successfulTasks.length}/${completedTasks.length} tasks succeeded`);
2922
+ if (successfulTasks.length > 0) {
2923
+ await aggregateResearchFindings(research);
2924
+ }
2925
+ if (failedTasks.length === completedTasks.length) {
2926
+ research.recommendation = "revise";
2927
+ research.summary = "All research tasks failed. Manual review required.";
2928
+ }
2929
+ return research;
2930
+ }
2931
+ async function aggregateResearchFindings(research) {
2932
+ const TIMEOUT_MS = 12e4;
2933
+ const findingsSummary = research.tasks.filter((t) => t.status === "completed" && t.findings).map((t) => `### ${t.type}
2934
+ ${t.findings}`).join("\n\n");
2935
+ const prompt = `You are synthesizing research findings to make a recommendation.
2936
+
2937
+ ## Research Findings
2938
+
2939
+ ${findingsSummary}
2940
+
2941
+ ## Your Task
2942
+
2943
+ Synthesize these findings into:
2944
+ 1. A brief executive summary (2-3 sentences)
2945
+ 2. Key insights from each research track
2946
+ 3. An overall recommendation: proceed, revise, or reject
2947
+
2948
+ IMPORTANT: If the duplicate_detection task found significant overlap (verdict: "stop" or "investigate"), you MUST recommend "reject" and explain what already exists. Only recommend "proceed" if duplicate detection confirms no significant overlap.
2949
+
2950
+ Respond with JSON only:
2951
+ {
2952
+ "executive_summary": "2-3 sentence summary",
2953
+ "key_insights": ["insight1", "insight2", "insight3"],
2954
+ "risks_identified": ["risk1", "risk2"],
2955
+ "recommendation": "proceed|revise|reject",
2956
+ "recommendation_reasoning": "Why this recommendation"
2957
+ }`;
2958
+ return new Promise((resolve) => {
2959
+ const claude = (0, import_child_process3.spawn)("claude", ["--print"], {
2960
+ cwd: ROOT_DIR,
2961
+ env: process.env,
2962
+ stdio: ["pipe", "pipe", "pipe"]
2963
+ });
2964
+ claude.stdin.write(prompt);
2965
+ claude.stdin.end();
2966
+ let output = "";
2967
+ const timeout = setTimeout(() => {
2968
+ claude.kill("SIGTERM");
2969
+ research.summary = findingsSummary;
2970
+ research.recommendation = "revise";
2971
+ resolve();
2972
+ }, TIMEOUT_MS);
2973
+ claude.stdout.on("data", (data) => {
2974
+ output += data.toString();
2975
+ });
2976
+ claude.on("close", (code) => {
2977
+ clearTimeout(timeout);
2978
+ if (code === 0 && output.trim()) {
2979
+ try {
2980
+ let jsonStr = output.trim();
2981
+ const jsonMatch = jsonStr.match(/```(?:json)?\s*([\s\S]*?)```/);
2982
+ if (jsonMatch) jsonStr = jsonMatch[1].trim();
2983
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
2984
+ if (objectMatch) {
2985
+ const parsed = JSON.parse(objectMatch[0]);
2986
+ research.summary = `**Executive Summary:** ${parsed.executive_summary}
2987
+
2988
+ **Key Insights:**
2989
+ ${parsed.key_insights.map((i) => `- ${i}`).join("\n")}
2990
+
2991
+ **Risks:**
2992
+ ${parsed.risks_identified?.map((r) => `- ${r}`).join("\n") || "None identified"}
2993
+
2994
+ **Reasoning:** ${parsed.recommendation_reasoning}`;
2995
+ research.recommendation = parsed.recommendation;
2996
+ log(`Research aggregation complete: ${research.recommendation}`);
2997
+ }
2998
+ } catch {
2999
+ research.summary = findingsSummary;
3000
+ research.recommendation = "revise";
3001
+ }
3002
+ } else {
3003
+ research.summary = findingsSummary;
3004
+ research.recommendation = "revise";
3005
+ }
3006
+ resolve();
3007
+ });
3008
+ claude.on("error", () => {
3009
+ clearTimeout(timeout);
3010
+ research.summary = findingsSummary;
3011
+ research.recommendation = "revise";
3012
+ resolve();
3013
+ });
3014
+ });
3015
+ }
3016
+ async function executeIdeaResearch(ideaId, config, businessContext) {
3017
+ log(`Executing parallel research for idea: ${ideaId}`);
3018
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
3019
+ const idea = ideasData.ideas.find((i) => i.id === ideaId);
3020
+ if (!idea) {
3021
+ log(`Idea not found: ${ideaId}`);
3022
+ return false;
3023
+ }
3024
+ if (idea.stage !== "under_review") {
3025
+ if (idea.stage === "inbox") {
3026
+ log(`Auto-transitioning idea ${ideaId} from inbox to under_review for research`);
3027
+ idea.stage = "under_review";
3028
+ idea.updated_at = (/* @__PURE__ */ new Date()).toISOString();
3029
+ saveJson(IDEAS_FILE, ideasData);
3030
+ } else {
3031
+ log(`Idea ${ideaId} is not in under_review stage (current: ${idea.stage})`);
3032
+ return false;
3033
+ }
3034
+ }
3035
+ if (idea.research?.completed_at) {
3036
+ log(`Research already completed for idea ${ideaId}`);
3037
+ return true;
3038
+ }
3039
+ const research = await executeParallelResearch(idea, config, businessContext);
3040
+ idea.research = research;
3041
+ idea.updated_at = (/* @__PURE__ */ new Date()).toISOString();
3042
+ const dupTask = research.tasks.find((t) => t.type === "duplicate_detection" && t.status === "completed" && t.findings);
3043
+ if (dupTask?.findings) {
3044
+ try {
3045
+ let jsonStr = dupTask.findings;
3046
+ const objectMatch = jsonStr.match(/\{[\s\S]*\}/);
3047
+ if (objectMatch) {
3048
+ const parsed = JSON.parse(objectMatch[0]);
3049
+ const verdict = parsed.verdict;
3050
+ if (["proceed", "extend", "investigate", "stop"].includes(verdict)) {
3051
+ idea.verification_status = verdict;
3052
+ log(`Duplicate detection verdict for ${ideaId}: ${verdict} (${parsed.overlap_percentage}% overlap)`);
3053
+ }
3054
+ }
3055
+ } catch {
3056
+ log(`Failed to parse duplicate detection findings for ${ideaId}`);
3057
+ }
3058
+ }
3059
+ if (research.summary) {
3060
+ const comments = idea.comments || [];
3061
+ comments.push({
3062
+ id: `comment-research-${Date.now().toString(36)}`,
3063
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
3064
+ author: "ai",
3065
+ author_name: "Research Agent",
3066
+ content: `**Parallel Research Complete**
3067
+
3068
+ ${research.summary}
3069
+
3070
+ **Recommendation:** ${research.recommendation?.toUpperCase() || "REVIEW NEEDED"}`
3071
+ });
3072
+ idea.comments = comments;
3073
+ }
3074
+ saveJson(IDEAS_FILE, ideasData);
3075
+ log(`Research saved for idea ${ideaId}: recommendation = ${research.recommendation}`);
3076
+ return true;
3077
+ }
3078
+ async function executeTask(task, config, businessContext) {
3079
+ const taskId = "task_id" in task ? task.task_id : task.id;
3080
+ const taskDesc = "task_id" in task ? task.description : task.description;
3081
+ log(`Executing task: ${taskId} \u2014 ${taskDesc}`);
3082
+ const taskTypePrefix = taskId.split("-").slice(0, 2).join("-");
3083
+ if (DRY_RUN) {
3084
+ log("[DRY RUN] Would execute task but skipping");
3085
+ return true;
3086
+ }
3087
+ try {
3088
+ switch (taskId) {
3089
+ case "review-inbox":
3090
+ await executeReviewInbox();
3091
+ return true;
3092
+ case "refresh-kpis":
3093
+ log("KPIs already refreshed in this heartbeat");
3094
+ return true;
3095
+ case "quick-analysis":
3096
+ await runAnalysis("quick");
3097
+ return true;
3098
+ case "deep-analysis":
3099
+ await runAnalysis("deep");
3100
+ return true;
3101
+ case "metrics-analysis":
3102
+ await runAnalysis("metrics");
3103
+ return true;
3104
+ case "seo-audit":
3105
+ await runAnalysis("seo");
3106
+ return true;
3107
+ default:
3108
+ if (taskId.startsWith("evaluate-shipped-")) {
3109
+ const ideaId = taskId.replace("evaluate-shipped-", "");
3110
+ return await executeShippedEvaluation(ideaId);
3111
+ }
3112
+ if (taskId.startsWith("implement-")) {
3113
+ const ideaId = taskId.replace("implement-", "");
3114
+ return await executeAutonomousImplementation(ideaId);
3115
+ }
3116
+ if (taskId.startsWith("goal-gap-research-")) {
3117
+ const goalId = taskId.replace("goal-gap-research-", "");
3118
+ return await executeGoalGapResearch(goalId);
3119
+ }
3120
+ if (taskId.startsWith("research-idea-")) {
3121
+ const ideaId = taskId.replace("research-idea-", "");
3122
+ return await executeIdeaResearch(ideaId, config, businessContext);
3123
+ }
3124
+ if (taskId.startsWith("research-")) {
3125
+ return await executeResearchTask(taskId, taskDesc);
3126
+ }
3127
+ if (isBusinessIntelTask(taskId)) {
3128
+ const result = await executeBusinessIntelTask(taskId, taskDesc, businessContext);
3129
+ log(`Business intel task result: ${result.success ? "SUCCESS" : "FAILED"} \u2014 ${result.output.slice(0, 200)}`);
3130
+ trackEvent("heartbeat_task", { taskType: taskTypePrefix, success: result.success });
3131
+ return result.success;
3132
+ }
3133
+ if (isContentTask(taskId)) {
3134
+ const contentflowConfig = businessContext?.contentflow;
3135
+ const result = await executeContentTask(taskId, taskDesc, contentflowConfig);
3136
+ log(`Content task result: ${result.success ? "SUCCESS" : "FAILED"} \u2014 ${result.output.slice(0, 200)}`);
3137
+ trackEvent("heartbeat_task", { taskType: taskTypePrefix, success: result.success });
3138
+ return result.success;
3139
+ }
3140
+ return await executeMetaTask(taskId, taskDesc, businessContext);
3141
+ }
3142
+ } catch (error) {
3143
+ log(`Task failed: ${error instanceof Error ? error.message : "Unknown error"}`);
3144
+ trackEvent("heartbeat_task", { taskType: taskTypePrefix, success: false, errorType: error instanceof Error ? error.constructor.name : "unknown" });
3145
+ return false;
3146
+ }
3147
+ }
3148
+ async function executeReviewInbox() {
3149
+ const ideasData = loadJson(IDEAS_FILE, { ideas: [] });
3150
+ const inboxIdeas = ideasData.ideas.filter((i) => i.stage === "inbox");
3151
+ if (inboxIdeas.length === 0) {
3152
+ log("No ideas in inbox to review");
3153
+ return;
3154
+ }
3155
+ log(`Reviewing ${inboxIdeas.length} ideas in inbox...`);
3156
+ for (const idea of inboxIdeas) {
3157
+ const days = daysSince(idea.created_at);
3158
+ log(` - ${idea.id}: "${idea.title}" (${days} days old)`);
3159
+ }
3160
+ log("Inbox review complete (manual prioritization needed)");
3161
+ }
3162
+ async function runAnalysis(type) {
3163
+ return new Promise((resolve, reject) => {
3164
+ log(`Running ${type} analysis...`);
3165
+ const { command: runCmd, args: runArgs } = resolveScript(__dirname, "analyze.ts");
3166
+ const childProcess = (0, import_child_process3.spawn)(runCmd, [...runArgs, `--type=${type}`], {
3167
+ cwd: ROOT_DIR,
3168
+ stdio: "inherit"
3169
+ });
3170
+ childProcess.on("close", (code) => {
3171
+ if (code === 0) {
3172
+ log(`${type} analysis completed successfully`);
3173
+ resolve();
3174
+ } else {
3175
+ reject(new Error(`Analysis exited with code ${code}`));
3176
+ }
3177
+ });
3178
+ childProcess.on("error", (error) => {
3179
+ reject(error);
3180
+ });
3181
+ });
3182
+ }
3183
+ function updateTodoFile(taskId, completed) {
3184
+ try {
3185
+ let content = fs6.readFileSync(TODO_FILE, "utf-8");
3186
+ const uncheckedPattern = new RegExp(`- \\[ \\] \`${taskId}\``, "g");
3187
+ const checkedPattern = new RegExp(`- \\[x\\] \`${taskId}\``, "g");
3188
+ if (completed) {
3189
+ content = content.replace(uncheckedPattern, `- [x] \`${taskId}\``);
3190
+ } else {
3191
+ content = content.replace(checkedPattern, `- [ ] \`${taskId}\``);
3192
+ }
3193
+ fs6.writeFileSync(TODO_FILE, content);
3194
+ log(`Updated TODO.md: ${taskId} marked as ${completed ? "completed" : "pending"}`);
3195
+ } catch (error) {
3196
+ log(`Failed to update TODO.md: ${error instanceof Error ? error.message : "Unknown error"}`);
3197
+ }
3198
+ }
3199
+ function generateStatusContent(state, alerts, nextTask, reasoning) {
3200
+ const now = /* @__PURE__ */ new Date();
3201
+ const currentGoal = state.goals[0];
3202
+ const goalSection = currentGoal ? `- **Goal:** ${currentGoal.title} (${currentGoal.target_value}${currentGoal.target_unit} by Q2 2026)
3203
+ - **Status:** ${currentGoal.status}
3204
+ - **Current Value:** ${currentGoal.current_value !== null ? `${currentGoal.current_value}${currentGoal.target_unit}` : "Not yet measured"}
3205
+ - **Progress:** ${currentGoal.current_value !== null ? `${Math.round(currentGoal.current_value / currentGoal.target_value * 100)}%` : "N/A"}` : "- No active goals";
3206
+ const kpiRows = currentGoal?.kpis.map((k) => {
3207
+ const status = k.current_value !== null && k.target_value !== null ? k.direction === "higher_is_better" ? k.current_value >= k.target_value ? "\u2705" : "\u26A0\uFE0F" : k.current_value <= k.target_value ? "\u2705" : "\u26A0\uFE0F" : "\u2014";
3208
+ return `| ${k.name} | ${k.current_value ?? "\u2014"} | ${k.target_value ?? "\u2014"} | ${k.unit} | ${status} |`;
3209
+ }).join("\n") || "| \u2014 | \u2014 | \u2014 | \u2014 | \u2014 |";
3210
+ const activeIdeas = state.ideas.filter((i) => i.stage === "in_progress");
3211
+ const activeWorkRows = activeIdeas.length > 0 ? activeIdeas.map((i) => `| ${i.id} | ${i.title} | in_progress | ${i.implementation.branch_name || "\u2014"} |`).join("\n") : "| \u2014 | No active work | \u2014 | \u2014 |";
3212
+ const inboxIdeas = state.ideas.filter((i) => i.stage === "inbox");
3213
+ const pendingRows = inboxIdeas.length > 0 ? inboxIdeas.map((i) => `| ${i.id} | ${i.title} | ${daysSince(i.created_at)} |`).join("\n") : "| \u2014 | No ideas pending review | \u2014 |";
3214
+ const alertsSection = alerts.length > 0 ? alerts.map((a) => `- ${a}`).join("\n") : "- None";
3215
+ const analysisSection = reasoning ? `**Analysis:** ${reasoning.analysis}
3216
+
3217
+ **Critical Issue:** ${reasoning.critical_issue || "None identified"}
3218
+
3219
+ **Recommended Action:** ${reasoning.next_action ? `${reasoning.next_action.task_id} \u2014 ${reasoning.next_action.description}` : "None"}` : "*Claude reasoning was skipped*";
3220
+ const recentSessions = state.sessions.filter((s) => s.status === "completed").slice(-5).reverse();
3221
+ const activityRows = [
3222
+ `| ${formatDate(now)} | Heartbeat check-in |`,
3223
+ ...recentSessions.map(
3224
+ (s) => `| ${formatDate(new Date(s.completed_at || s.created_at))} | ${s.type} analysis completed (${s.ideas_generated.length} ideas) |`
3225
+ )
3226
+ ].join("\n");
3227
+ const nextScheduled = nextTask ? `${nextTask.description}` : "No scheduled tasks pending";
3228
+ return `# Analyst Status
3229
+
3230
+ **Last Heartbeat:** ${formatDateTime(now)}
3231
+ **Next Scheduled:** ${nextScheduled}
3232
+
3233
+ ## Current Focus
3234
+
3235
+ ${goalSection}
3236
+
3237
+ ## KPI Dashboard
3238
+
3239
+ | KPI | Current | Target | Unit | Status |
3240
+ |-----|---------|--------|------|--------|
3241
+ ${kpiRows}
3242
+
3243
+ ## AI Analysis
3244
+
3245
+ ${analysisSection}
3246
+
3247
+ ## Active Work
3248
+
3249
+ | ID | Title | Stage | Branch |
3250
+ |----|-------|-------|--------|
3251
+ ${activeWorkRows}
3252
+
3253
+ ## Pending Review
3254
+
3255
+ | ID | Title | Days in Inbox |
3256
+ |----|-------|---------------|
3257
+ ${pendingRows}
3258
+
3259
+ ## Alerts
3260
+
3261
+ ${alertsSection}
3262
+
3263
+ ## Recent Activity
3264
+
3265
+ | Date | Event |
3266
+ |------|-------|
3267
+ ${activityRows}
3268
+
3269
+ ---
3270
+
3271
+ *This file is updated automatically by the heartbeat script.*
3272
+ `;
3273
+ }
3274
+ async function runSingleHeartbeat(beatNumber = 1) {
3275
+ const startTime = Date.now();
3276
+ const startedAt = (/* @__PURE__ */ new Date()).toISOString();
3277
+ capturedLogs = [];
3278
+ isCapturingLogs = true;
3279
+ try {
3280
+ log("=== Heartbeat Check-in Started ===");
3281
+ const commandsDir = path6.join(PROJECT_DIR, ".claude", "commands");
3282
+ if (!fs6.existsSync(commandsDir)) {
3283
+ log("Slash commands missing \u2014 auto-scaffolding...");
3284
+ scaffoldSlashCommands(PROJECT_DIR);
3285
+ }
3286
+ if (DRY_RUN) {
3287
+ log("Running in DRY RUN mode \u2014 no changes will be made");
3288
+ }
3289
+ if (SKIP_REASONING) {
3290
+ log("Skipping Claude reasoning step");
3291
+ }
3292
+ const state = loadState();
3293
+ const businessContext = loadBusinessContext();
3294
+ const heartbeatConfig = loadConfig();
3295
+ log(`Loaded state: ${state.ideas.length} ideas, ${state.goals.length} goals, ${state.sessions.length} sessions`);
3296
+ if (!DRY_RUN) {
3297
+ archiveCompletedTodos();
3298
+ pruneStaleScheduledTodos(state);
3299
+ }
3300
+ const alerts = checkAlerts(state);
3301
+ if (alerts.length > 0) {
3302
+ log(`Found ${alerts.length} alert(s):`);
3303
+ alerts.forEach((a) => log(` - ${a}`));
3304
+ } else {
3305
+ log("No alerts");
3306
+ }
3307
+ const backendHealthy = await checkBackendHealth();
3308
+ const liveKPIs = backendHealthy ? await fetchLiveKPIs() : null;
3309
+ state.liveData = {
3310
+ kpis: liveKPIs,
3311
+ backendHealthy
3312
+ };
3313
+ if (liveKPIs && !DRY_RUN) {
3314
+ updateGoalsWithKPIs(liveKPIs);
3315
+ const updatedGoals = loadJson(GOALS_FILE, { goals: [] });
3316
+ state.goals = updatedGoals.goals;
3317
+ updateBusinessContext(businessContext, liveKPIs);
3318
+ log("Updated business context with live KPIs");
3319
+ }
3320
+ let reasoning = null;
3321
+ if (!SKIP_REASONING) {
3322
+ reasoning = await runClaudeReasoning(state, alerts, businessContext);
3323
+ }
3324
+ let taskToDo = null;
3325
+ if (reasoning?.next_action) {
3326
+ log(`Claude recommends: ${reasoning.next_action.task_id} \u2014 ${reasoning.next_action.description}`);
3327
+ const existingTask = state.todos.find((t) => t.id === reasoning.next_action.task_id);
3328
+ if (existingTask) {
3329
+ taskToDo = existingTask;
3330
+ } else {
3331
+ const success = await executeTask(reasoning.next_action, heartbeatConfig, businessContext);
3332
+ if (!success) {
3333
+ taskToDo = determineWork(state);
3334
+ }
3335
+ }
3336
+ } else {
3337
+ taskToDo = determineWork(state);
3338
+ }
3339
+ if (taskToDo) {
3340
+ log(`Task to do: ${taskToDo.id} \u2014 ${taskToDo.description}`);
3341
+ const success = await executeTask(taskToDo, heartbeatConfig, businessContext);
3342
+ if (success && !DRY_RUN) {
3343
+ if (!["quick-analysis", "deep-analysis", "metrics-analysis", "seo-audit"].includes(taskToDo.id)) {
3344
+ updateTodoFile(taskToDo.id, true);
3345
+ }
3346
+ } else if (!success && !taskToDo.id.startsWith("implement-")) {
3347
+ const config = loadConfig();
3348
+ if (config.autonomy?.enabled) {
3349
+ const inProgressIdeas = state.ideas.filter((i) => i.stage === "in_progress");
3350
+ for (const idea of inProgressIdeas) {
3351
+ const subTasks = idea.implementation.sub_tasks || [];
3352
+ const hasPending = subTasks.some((st) => st.status === "pending");
3353
+ const hasFailed = subTasks.some((st) => st.status === "failed");
3354
+ if ((subTasks.length === 0 || hasPending) && !hasFailed) {
3355
+ log(`Falling through to autonomy: implement-${idea.id}`);
3356
+ await executeAutonomousImplementation(idea.id);
3357
+ break;
3358
+ }
3359
+ }
3360
+ if (!inProgressIdeas.some((i) => (i.implementation.sub_tasks || []).some((st) => st.status === "pending"))) {
3361
+ const approvedIdeas = state.ideas.filter((i) => i.stage === "approved");
3362
+ if (approvedIdeas.length > 0) {
3363
+ log(`Falling through to autonomy: implement-${approvedIdeas[0].id}`);
3364
+ await executeAutonomousImplementation(approvedIdeas[0].id);
3365
+ }
3366
+ }
3367
+ }
3368
+ }
3369
+ } else {
3370
+ log("No tasks to do right now");
3371
+ }
3372
+ if (reasoning?.new_todos && reasoning.new_todos.length > 0 && !DRY_RUN) {
3373
+ addTasksToTodo(reasoning.new_todos);
3374
+ }
3375
+ if (reasoning?.learnings && reasoning.learnings.length > 0 && !DRY_RUN) {
3376
+ appendToMemory(reasoning.learnings);
3377
+ }
3378
+ if (!DRY_RUN) {
3379
+ const statusContent = generateStatusContent(state, alerts, taskToDo, reasoning);
3380
+ fs6.writeFileSync(STATUS_FILE, statusContent);
3381
+ log("Updated STATUS.md");
3382
+ } else {
3383
+ log("[DRY RUN] Would update STATUS.md");
3384
+ }
3385
+ log("=== Heartbeat Check-in Complete ===");
3386
+ isCapturingLogs = false;
3387
+ return {
3388
+ heartbeat_number: beatNumber,
3389
+ started_at: startedAt,
3390
+ completed_at: (/* @__PURE__ */ new Date()).toISOString(),
3391
+ duration_ms: Date.now() - startTime,
3392
+ alerts_count: alerts.length,
3393
+ kpis_updated: !!liveKPIs,
3394
+ claude_analysis: reasoning?.analysis || null,
3395
+ task_executed: taskToDo?.id || null,
3396
+ todos_added: reasoning?.new_todos?.length || 0,
3397
+ learnings_added: reasoning?.learnings?.length || 0,
3398
+ success: true,
3399
+ error_message: null,
3400
+ logs: [...capturedLogs]
3401
+ };
3402
+ } catch (error) {
3403
+ isCapturingLogs = false;
3404
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
3405
+ log(`ERROR: Heartbeat failed \u2014 ${errorMessage}`);
3406
+ if (error instanceof Error && error.stack) {
3407
+ log(error.stack);
3408
+ }
3409
+ return {
3410
+ heartbeat_number: beatNumber,
3411
+ started_at: startedAt,
3412
+ completed_at: (/* @__PURE__ */ new Date()).toISOString(),
3413
+ duration_ms: Date.now() - startTime,
3414
+ alerts_count: 0,
3415
+ kpis_updated: false,
3416
+ claude_analysis: null,
3417
+ task_executed: null,
3418
+ todos_added: 0,
3419
+ learnings_added: 0,
3420
+ success: false,
3421
+ error_message: errorMessage,
3422
+ logs: [...capturedLogs]
3423
+ };
3424
+ }
3425
+ }
3426
+ function generateSessionSummary(sessionId, startedAt, heartbeats) {
3427
+ const completedAt = /* @__PURE__ */ new Date();
3428
+ const durations = heartbeats.map((h) => h.duration_ms);
3429
+ return {
3430
+ id: sessionId,
3431
+ started_at: startedAt.toISOString(),
3432
+ completed_at: completedAt.toISOString(),
3433
+ duration_seconds: Math.round((completedAt.getTime() - startedAt.getTime()) / 1e3),
3434
+ interval_minutes: INTERVAL_MINUTES,
3435
+ total_heartbeats: heartbeats.length,
3436
+ successful_heartbeats: heartbeats.filter((h) => h.success).length,
3437
+ failed_heartbeats: heartbeats.filter((h) => !h.success).length,
3438
+ total_alerts: heartbeats.reduce((sum, h) => sum + h.alerts_count, 0),
3439
+ total_kpi_updates: heartbeats.filter((h) => h.kpis_updated).length,
3440
+ total_todos_added: heartbeats.reduce((sum, h) => sum + h.todos_added, 0),
3441
+ total_learnings: heartbeats.reduce((sum, h) => sum + h.learnings_added, 0),
3442
+ tasks_executed: heartbeats.map((h) => h.task_executed).filter(Boolean),
3443
+ key_insights: heartbeats.map((h) => h.claude_analysis).filter(Boolean),
3444
+ avg_heartbeat_ms: durations.length > 0 ? Math.round(durations.reduce((a, b) => a + b, 0) / durations.length) : 0,
3445
+ min_heartbeat_ms: durations.length > 0 ? Math.min(...durations) : 0,
3446
+ max_heartbeat_ms: durations.length > 0 ? Math.max(...durations) : 0,
3447
+ heartbeats
3448
+ };
3449
+ }
3450
+ function printSessionSummary(summary) {
3451
+ console.log(`
3452
+ ${"=".repeat(60)}`);
3453
+ console.log(` SESSION COMPLETE: ${summary.id}`);
3454
+ console.log(`${"=".repeat(60)}`);
3455
+ console.log(`
3456
+ Duration: ${Math.round(summary.duration_seconds / 60)} minutes
3457
+ Heartbeats: ${summary.successful_heartbeats}/${summary.total_heartbeats} successful
3458
+
3459
+ ACTIVITY:
3460
+ - Alerts detected: ${summary.total_alerts}
3461
+ - KPI updates: ${summary.total_kpi_updates}
3462
+ - TODOs added: ${summary.total_todos_added}
3463
+ - Learnings recorded: ${summary.total_learnings}
3464
+ - Tasks executed: ${summary.tasks_executed.length}
3465
+
3466
+ TIMING:
3467
+ - Avg heartbeat: ${Math.round(summary.avg_heartbeat_ms / 1e3)}s
3468
+ - Min heartbeat: ${Math.round(summary.min_heartbeat_ms / 1e3)}s
3469
+ - Max heartbeat: ${Math.round(summary.max_heartbeat_ms / 1e3)}s`);
3470
+ if (summary.key_insights.length > 0) {
3471
+ console.log("\nKEY INSIGHTS:");
3472
+ summary.key_insights.forEach((insight, i) => {
3473
+ const truncated = insight.length > 100 ? insight.substring(0, 100) + "..." : insight;
3474
+ console.log(` ${i + 1}. ${truncated}`);
3475
+ });
3476
+ }
3477
+ if (summary.tasks_executed.length > 0) {
3478
+ console.log("\nTASKS EXECUTED:");
3479
+ summary.tasks_executed.forEach((task) => {
3480
+ console.log(` - ${task}`);
3481
+ });
3482
+ }
3483
+ const failedBeats = summary.heartbeats.filter((h) => !h.success);
3484
+ if (failedBeats.length > 0) {
3485
+ console.log("\nFAILED HEARTBEATS:");
3486
+ failedBeats.forEach((h) => {
3487
+ console.log(` - #${h.heartbeat_number}: ${h.error_message}`);
3488
+ });
3489
+ }
3490
+ console.log(`
3491
+ ${"=".repeat(60)}
3492
+ `);
3493
+ }
3494
+ function saveSessionToJson(summary) {
3495
+ const sessionsFile = path6.join(DATA_DIR, "heartbeat-sessions.json");
3496
+ const sessionsData = loadJson(sessionsFile, { sessions: [] });
3497
+ sessionsData.sessions.push(summary);
3498
+ if (sessionsData.sessions.length > 50) {
3499
+ sessionsData.sessions = sessionsData.sessions.slice(-50);
3500
+ }
3501
+ saveJson(sessionsFile, sessionsData);
3502
+ log(`Session saved to ${sessionsFile}`);
3503
+ }
3504
+ async function runContinuousSession() {
3505
+ const sessionId = `session-${(/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-")}`;
3506
+ const startedAt = /* @__PURE__ */ new Date();
3507
+ const durationMs = DURATION_MINUTES * 60 * 1e3;
3508
+ const intervalMs = INTERVAL_MINUTES * 60 * 1e3;
3509
+ const endTime = HEARTBEAT_COUNT > 0 ? Infinity : startedAt.getTime() + durationMs;
3510
+ const maxBeats = HEARTBEAT_COUNT > 0 ? HEARTBEAT_COUNT : Math.ceil(DURATION_MINUTES / INTERVAL_MINUTES);
3511
+ console.log(`
3512
+ ${"=".repeat(60)}`);
3513
+ console.log(` CONTINUOUS SESSION: ${sessionId}`);
3514
+ if (HEARTBEAT_COUNT > 0) {
3515
+ console.log(` Count: ${HEARTBEAT_COUNT} heartbeats | Interval: ${INTERVAL_MINUTES} minutes`);
3516
+ } else {
3517
+ console.log(` Duration: ${DURATION_MINUTES} minutes | Interval: ${INTERVAL_MINUTES} minutes`);
3518
+ }
3519
+ console.log(` Max heartbeats: ${maxBeats}`);
3520
+ console.log(`${"=".repeat(60)}
3521
+ `);
3522
+ const heartbeats = [];
3523
+ let beatNumber = 0;
3524
+ while (Date.now() < endTime && (HEARTBEAT_COUNT === 0 || beatNumber < HEARTBEAT_COUNT)) {
3525
+ beatNumber++;
3526
+ const beatStart = Date.now();
3527
+ console.log(`
3528
+ --- Heartbeat #${beatNumber} ---
3529
+ `);
3530
+ const result = await runSingleHeartbeat(beatNumber);
3531
+ heartbeats.push(result);
3532
+ if (!result.success) {
3533
+ log(`Heartbeat #${beatNumber} failed: ${result.error_message}`);
3534
+ }
3535
+ const isLastBeat = HEARTBEAT_COUNT > 0 ? beatNumber >= HEARTBEAT_COUNT : Date.now() + intervalMs > endTime;
3536
+ if (!isLastBeat) {
3537
+ const elapsed = Date.now() - beatStart;
3538
+ const waitTime = Math.max(0, intervalMs - elapsed);
3539
+ if (waitTime > 0) {
3540
+ const nextBeatAt = new Date(Date.now() + waitTime);
3541
+ console.log(`
3542
+ [SESSION] Next heartbeat in ${Math.round(waitTime / 1e3)}s (${nextBeatAt.toLocaleTimeString()})`);
3543
+ await sleep(waitTime);
3544
+ }
3545
+ }
3546
+ }
3547
+ const summary = generateSessionSummary(sessionId, startedAt, heartbeats);
3548
+ saveSessionToJson(summary);
3549
+ printSessionSummary(summary);
3550
+ return summary;
3551
+ }
3552
+ async function main() {
3553
+ if (SESSION_MODE) {
3554
+ await runContinuousSession();
3555
+ } else {
3556
+ await runSingleHeartbeat();
3557
+ }
3558
+ }
3559
+ main().catch((error) => {
3560
+ console.error("Heartbeat failed:", error);
3561
+ process.exit(1);
3562
+ });