kodi-dev 0.1.1 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1136) hide show
  1. package/README.md +13 -13
  2. package/board-dist/.next/BUILD_ID +1 -0
  3. package/board-dist/.next/app-path-routes-manifest.json +6 -0
  4. package/board-dist/.next/build-manifest.json +21 -0
  5. package/board-dist/.next/package.json +1 -0
  6. package/board-dist/.next/prerender-manifest.json +61 -0
  7. package/board-dist/.next/required-server-files.json +334 -0
  8. package/board-dist/.next/routes-manifest.json +69 -0
  9. package/board-dist/.next/server/app/_global-error/page/app-paths-manifest.json +3 -0
  10. package/board-dist/.next/server/app/_global-error/page/build-manifest.json +17 -0
  11. package/board-dist/.next/server/app/_global-error/page/next-font-manifest.json +6 -0
  12. package/board-dist/.next/server/app/_global-error/page/react-loadable-manifest.json +1 -0
  13. package/board-dist/.next/server/app/_global-error/page/server-reference-manifest.json +4 -0
  14. package/board-dist/.next/server/app/_global-error/page.js +9 -0
  15. package/board-dist/.next/server/app/_global-error/page.js.map +5 -0
  16. package/board-dist/.next/server/app/_global-error/page.js.nft.json +1 -0
  17. package/board-dist/.next/server/app/_global-error/page_client-reference-manifest.js +3 -0
  18. package/board-dist/.next/server/app/_global-error.html +1 -0
  19. package/board-dist/.next/server/app/_global-error.meta +15 -0
  20. package/board-dist/.next/server/app/_global-error.rsc +14 -0
  21. package/board-dist/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +5 -0
  22. package/board-dist/.next/server/app/_global-error.segments/_full.segment.rsc +14 -0
  23. package/board-dist/.next/server/app/_global-error.segments/_head.segment.rsc +5 -0
  24. package/board-dist/.next/server/app/_global-error.segments/_index.segment.rsc +5 -0
  25. package/board-dist/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -0
  26. package/board-dist/.next/server/app/_not-found/page/app-paths-manifest.json +3 -0
  27. package/board-dist/.next/server/app/_not-found/page/build-manifest.json +17 -0
  28. package/board-dist/.next/server/app/_not-found/page/next-font-manifest.json +6 -0
  29. package/board-dist/.next/server/app/_not-found/page/react-loadable-manifest.json +1 -0
  30. package/board-dist/.next/server/app/_not-found/page/server-reference-manifest.json +4 -0
  31. package/board-dist/.next/server/app/_not-found/page.js +14 -0
  32. package/board-dist/.next/server/app/_not-found/page.js.map +5 -0
  33. package/board-dist/.next/server/app/_not-found/page.js.nft.json +1 -0
  34. package/board-dist/.next/server/app/_not-found/page_client-reference-manifest.js +3 -0
  35. package/board-dist/.next/server/app/_not-found.html +1 -0
  36. package/board-dist/.next/server/app/_not-found.meta +16 -0
  37. package/board-dist/.next/server/app/_not-found.rsc +19 -0
  38. package/board-dist/.next/server/app/_not-found.segments/_full.segment.rsc +19 -0
  39. package/board-dist/.next/server/app/_not-found.segments/_head.segment.rsc +5 -0
  40. package/board-dist/.next/server/app/_not-found.segments/_index.segment.rsc +7 -0
  41. package/board-dist/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +5 -0
  42. package/board-dist/.next/server/app/_not-found.segments/_not-found.segment.rsc +5 -0
  43. package/board-dist/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -0
  44. package/board-dist/.next/server/app/events/route/app-paths-manifest.json +3 -0
  45. package/board-dist/.next/server/app/events/route/build-manifest.json +9 -0
  46. package/board-dist/.next/server/app/events/route/server-reference-manifest.json +4 -0
  47. package/board-dist/.next/server/app/events/route.js +6 -0
  48. package/board-dist/.next/server/app/events/route.js.map +5 -0
  49. package/board-dist/.next/server/app/events/route.js.nft.json +1 -0
  50. package/board-dist/.next/server/app/events/route_client-reference-manifest.js +3 -0
  51. package/board-dist/.next/server/app/page/app-paths-manifest.json +3 -0
  52. package/board-dist/.next/server/app/page/build-manifest.json +17 -0
  53. package/board-dist/.next/server/app/page/next-font-manifest.json +6 -0
  54. package/board-dist/.next/server/app/page/react-loadable-manifest.json +1 -0
  55. package/board-dist/.next/server/app/page/server-reference-manifest.json +17 -0
  56. package/board-dist/.next/server/app/page.js +16 -0
  57. package/board-dist/.next/server/app/page.js.map +5 -0
  58. package/board-dist/.next/server/app/page.js.nft.json +1 -0
  59. package/board-dist/.next/server/app/page_client-reference-manifest.js +3 -0
  60. package/board-dist/.next/server/app-paths-manifest.json +6 -0
  61. package/board-dist/.next/server/chunks/[externals]__1ss5vg_._.js +3 -0
  62. package/board-dist/.next/server/chunks/[root-of-the-server]__1ru180x._.js +7 -0
  63. package/board-dist/.next/server/chunks/[turbopack]_runtime.js +903 -0
  64. package/board-dist/.next/server/chunks/_next-internal_server_app_events_route_actions_0od5_fv.js +3 -0
  65. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__02c5_l-._.js +33 -0
  66. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__02l7d_r._.js +19 -0
  67. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__0_2b22l._.js +28 -0
  68. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__0eauvyk._.js +3 -0
  69. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__0ln09ua._.js +3 -0
  70. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__0z_68tr._.js +3 -0
  71. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__1dky4g0._.js +33 -0
  72. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__1hyno69._.js +3 -0
  73. package/board-dist/.next/server/chunks/ssr/[root-of-the-server]__1q4kwtw._.js +3 -0
  74. package/board-dist/.next/server/chunks/ssr/[turbopack]_runtime.js +903 -0
  75. package/board-dist/.next/server/chunks/ssr/_1wslo41._.js +3 -0
  76. package/board-dist/.next/server/chunks/ssr/_next-internal_server_app__global-error_page_actions_0zi5s8-.js +3 -0
  77. package/board-dist/.next/server/chunks/ssr/_next-internal_server_app__not-found_page_actions_0pt47yr.js +3 -0
  78. package/board-dist/.next/server/chunks/ssr/app_error_tsx_1zds1ns._.js +3 -0
  79. package/board-dist/.next/server/chunks/ssr/app_error_tsx_20-epnw._.js +3 -0
  80. package/board-dist/.next/server/chunks/ssr/app_layout_tsx_2144vk_._.js +3 -0
  81. package/board-dist/.next/server/chunks/ssr/app_loading_tsx_0a1flg9._.js +3 -0
  82. package/board-dist/.next/server/chunks/ssr/node_modules_0h91jdk._.js +33 -0
  83. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_03ioewi._.js +6 -0
  84. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_0wpq8j3._.js +3 -0
  85. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_forbidden_0symwr9.js +3 -0
  86. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_global-error_0-o-goa.js +3 -0
  87. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_client_components_builtin_unauthorized_0l_sp0x.js +3 -0
  88. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1-4fbk_.js +4 -0
  89. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_19--w_z.js +4 -0
  90. package/board-dist/.next/server/chunks/ssr/node_modules_next_dist_esm_build_templates_app-page_1hhqf9y.js +4 -0
  91. package/board-dist/.next/server/functions-config-manifest.json +6 -0
  92. package/board-dist/.next/server/middleware-build-manifest.js +21 -0
  93. package/board-dist/.next/server/middleware-manifest.json +6 -0
  94. package/board-dist/.next/server/next-font-manifest.js +1 -0
  95. package/board-dist/.next/server/next-font-manifest.json +6 -0
  96. package/board-dist/.next/server/pages/404.html +1 -0
  97. package/board-dist/.next/server/pages/500.html +1 -0
  98. package/board-dist/.next/server/pages-manifest.json +4 -0
  99. package/board-dist/.next/server/prefetch-hints.json +1 -0
  100. package/board-dist/.next/server/server-reference-manifest.js +1 -0
  101. package/board-dist/.next/server/server-reference-manifest.json +18 -0
  102. package/board-dist/.next/static/chunks/0245a4ypel7xx.js +1 -0
  103. package/board-dist/.next/static/chunks/0cz1d0mv5g_q7.js +1 -0
  104. package/board-dist/.next/static/chunks/0dw6y-0ffla71.js +5 -0
  105. package/board-dist/.next/static/chunks/158myu8e_yme3.js +1 -0
  106. package/board-dist/.next/static/chunks/1jq4o6yq14o4c.js +31 -0
  107. package/board-dist/.next/static/chunks/2b8wyk_yjz96q.js +1 -0
  108. package/board-dist/.next/static/chunks/2gkbk2qdsow-j.js +1 -0
  109. package/board-dist/.next/static/chunks/3rm_a_257myov.css +1 -0
  110. package/board-dist/.next/static/chunks/3rxl-jt3pdxgx.js +1 -0
  111. package/board-dist/.next/static/chunks/turbopack-3ec-4w_qyxb-d.js +1 -0
  112. package/board-dist/.next/static/jxv0GcmWplyzie2rdOiIo/_buildManifest.js +11 -0
  113. package/board-dist/.next/static/jxv0GcmWplyzie2rdOiIo/_clientMiddlewareManifest.js +1 -0
  114. package/board-dist/.next/static/jxv0GcmWplyzie2rdOiIo/_ssgManifest.js +1 -0
  115. package/board-dist/lib/tickets/board.ts +154 -0
  116. package/board-dist/lib/tickets/frontmatter.ts +114 -0
  117. package/board-dist/lib/tickets/status-index.ts +184 -0
  118. package/board-dist/lib/tickets/types.ts +69 -0
  119. package/board-dist/node_modules/@img/colour/color.cjs +1596 -0
  120. package/board-dist/node_modules/@img/colour/index.cjs +1 -0
  121. package/board-dist/node_modules/@img/colour/package.json +58 -0
  122. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/README.md +46 -0
  123. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/lib/glib-2.0/include/glibconfig.h +221 -0
  124. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/lib/index.js +1 -0
  125. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/lib/libvips-cpp.so.8.17.3 +0 -0
  126. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/package.json +42 -0
  127. package/board-dist/node_modules/@img/sharp-libvips-linux-x64/versions.json +30 -0
  128. package/board-dist/node_modules/@img/sharp-linux-x64/lib/sharp-linux-x64.node +0 -0
  129. package/board-dist/node_modules/@img/sharp-linux-x64/package.json +46 -0
  130. package/board-dist/node_modules/@next/env/dist/index.js +1 -0
  131. package/board-dist/node_modules/@next/env/package.json +35 -0
  132. package/board-dist/node_modules/@swc/helpers/cjs/_interop_require_default.cjs +6 -0
  133. package/board-dist/node_modules/@swc/helpers/cjs/_interop_require_wildcard.cjs +38 -0
  134. package/board-dist/node_modules/@swc/helpers/package.json +471 -0
  135. package/board-dist/node_modules/client-only/index.js +0 -0
  136. package/board-dist/node_modules/client-only/package.json +19 -0
  137. package/board-dist/node_modules/detect-libc/lib/detect-libc.js +313 -0
  138. package/board-dist/node_modules/detect-libc/lib/elf.js +39 -0
  139. package/board-dist/node_modules/detect-libc/lib/filesystem.js +51 -0
  140. package/board-dist/node_modules/detect-libc/lib/process.js +24 -0
  141. package/board-dist/node_modules/detect-libc/package.json +44 -0
  142. package/board-dist/node_modules/next/dist/build/adapter/setup-node-env.external.js +15 -0
  143. package/board-dist/node_modules/next/dist/build/define-env.js +255 -0
  144. package/board-dist/node_modules/next/dist/build/duration-to-string.js +99 -0
  145. package/board-dist/node_modules/next/dist/build/get-supported-browsers.js +38 -0
  146. package/board-dist/node_modules/next/dist/build/next-config-ts/require-hook.js +85 -0
  147. package/board-dist/node_modules/next/dist/build/next-config-ts/transpile-config.js +251 -0
  148. package/board-dist/node_modules/next/dist/build/output/format.js +84 -0
  149. package/board-dist/node_modules/next/dist/build/output/log.js +135 -0
  150. package/board-dist/node_modules/next/dist/build/segment-config/app/app-segment-config.js +162 -0
  151. package/board-dist/node_modules/next/dist/build/segment-config/app/app-segments.js +137 -0
  152. package/board-dist/node_modules/next/dist/build/segment-config/app/collect-root-param-keys.js +52 -0
  153. package/board-dist/node_modules/next/dist/build/static-paths/app/extract-pathname-route-param-segments-from-loader-tree.js +137 -0
  154. package/board-dist/node_modules/next/dist/build/static-paths/app.js +736 -0
  155. package/board-dist/node_modules/next/dist/build/static-paths/pages.js +169 -0
  156. package/board-dist/node_modules/next/dist/build/static-paths/utils.js +119 -0
  157. package/board-dist/node_modules/next/dist/build/swc/helpers.js +15 -0
  158. package/board-dist/node_modules/next/dist/build/swc/index.js +1348 -0
  159. package/board-dist/node_modules/next/dist/build/swc/install-bindings.js +30 -0
  160. package/board-dist/node_modules/next/dist/build/swc/jest-transformer.js +76 -0
  161. package/board-dist/node_modules/next/dist/build/swc/loaderWorkerPool.js +40 -0
  162. package/board-dist/node_modules/next/dist/build/swc/options.js +403 -0
  163. package/board-dist/node_modules/next/dist/build/swc/types.js +6 -0
  164. package/board-dist/node_modules/next/dist/build/utils.js +1216 -0
  165. package/board-dist/node_modules/next/dist/cli/next-test.js +170 -0
  166. package/board-dist/node_modules/next/dist/client/add-base-path.js +24 -0
  167. package/board-dist/node_modules/next/dist/client/app-call-server.js +34 -0
  168. package/board-dist/node_modules/next/dist/client/app-find-source-map-url.js +39 -0
  169. package/board-dist/node_modules/next/dist/client/assign-location.js +29 -0
  170. package/board-dist/node_modules/next/dist/client/components/app-router-announcer.js +78 -0
  171. package/board-dist/node_modules/next/dist/client/components/app-router-headers.js +138 -0
  172. package/board-dist/node_modules/next/dist/client/components/app-router-instance.js +397 -0
  173. package/board-dist/node_modules/next/dist/client/components/app-router-utils.js +62 -0
  174. package/board-dist/node_modules/next/dist/client/components/app-router.js +514 -0
  175. package/board-dist/node_modules/next/dist/client/components/builtin/default.js +35 -0
  176. package/board-dist/node_modules/next/dist/client/components/builtin/error-styles.js +165 -0
  177. package/board-dist/node_modules/next/dist/client/components/builtin/global-error.js +100 -0
  178. package/board-dist/node_modules/next/dist/client/components/dev-root-http-access-fallback-boundary.js +52 -0
  179. package/board-dist/node_modules/next/dist/client/components/error-boundary.js +144 -0
  180. package/board-dist/node_modules/next/dist/client/components/errors/graceful-degrade-boundary.js +86 -0
  181. package/board-dist/node_modules/next/dist/client/components/errors/root-error-boundary.js +41 -0
  182. package/board-dist/node_modules/next/dist/client/components/forbidden.js +48 -0
  183. package/board-dist/node_modules/next/dist/client/components/handle-isr-error.js +30 -0
  184. package/board-dist/node_modules/next/dist/client/components/hooks-server-context.js +42 -0
  185. package/board-dist/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js +125 -0
  186. package/board-dist/node_modules/next/dist/client/components/http-access-fallback/http-access-fallback.js +72 -0
  187. package/board-dist/node_modules/next/dist/client/components/is-next-router-error.js +23 -0
  188. package/board-dist/node_modules/next/dist/client/components/links.js +299 -0
  189. package/board-dist/node_modules/next/dist/client/components/match-segments.js +32 -0
  190. package/board-dist/node_modules/next/dist/client/components/nav-failure-handler.js +61 -0
  191. package/board-dist/node_modules/next/dist/client/components/navigation-devtools.js +126 -0
  192. package/board-dist/node_modules/next/dist/client/components/navigation-untracked.js +67 -0
  193. package/board-dist/node_modules/next/dist/client/components/navigation.js +225 -0
  194. package/board-dist/node_modules/next/dist/client/components/navigation.react-server.js +75 -0
  195. package/board-dist/node_modules/next/dist/client/components/not-found.js +42 -0
  196. package/board-dist/node_modules/next/dist/client/components/readonly-url-search-params.js +41 -0
  197. package/board-dist/node_modules/next/dist/client/components/redirect-boundary.js +107 -0
  198. package/board-dist/node_modules/next/dist/client/components/redirect-error.js +43 -0
  199. package/board-dist/node_modules/next/dist/client/components/redirect-status-code.js +24 -0
  200. package/board-dist/node_modules/next/dist/client/components/redirect.js +91 -0
  201. package/board-dist/node_modules/next/dist/client/components/router-reducer/compute-changed-path.js +201 -0
  202. package/board-dist/node_modules/next/dist/client/components/router-reducer/create-href-from-url.js +21 -0
  203. package/board-dist/node_modules/next/dist/client/components/router-reducer/create-initial-router-state.js +153 -0
  204. package/board-dist/node_modules/next/dist/client/components/router-reducer/create-router-cache-key.js +32 -0
  205. package/board-dist/node_modules/next/dist/client/components/router-reducer/fetch-server-response.js +457 -0
  206. package/board-dist/node_modules/next/dist/client/components/router-reducer/is-navigating-to-new-root-layout.js +59 -0
  207. package/board-dist/node_modules/next/dist/client/components/router-reducer/ppr-navigations.js +1341 -0
  208. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/committed-state.js +49 -0
  209. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/find-head-in-cache.js +63 -0
  210. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/has-interception-route-in-current-tree.js +38 -0
  211. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/hmr-refresh-reducer.js +23 -0
  212. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/navigate-reducer.js +56 -0
  213. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/refresh-reducer.js +83 -0
  214. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/restore-reducer.js +62 -0
  215. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/server-action-reducer.js +320 -0
  216. package/board-dist/node_modules/next/dist/client/components/router-reducer/reducers/server-patch-reducer.js +58 -0
  217. package/board-dist/node_modules/next/dist/client/components/router-reducer/router-reducer-types.js +70 -0
  218. package/board-dist/node_modules/next/dist/client/components/router-reducer/router-reducer.js +66 -0
  219. package/board-dist/node_modules/next/dist/client/components/router-reducer/set-cache-busting-search-param.js +66 -0
  220. package/board-dist/node_modules/next/dist/client/components/segment-cache/bfcache.js +128 -0
  221. package/board-dist/node_modules/next/dist/client/components/segment-cache/cache-key.js +28 -0
  222. package/board-dist/node_modules/next/dist/client/components/segment-cache/cache-map.js +305 -0
  223. package/board-dist/node_modules/next/dist/client/components/segment-cache/cache.js +1933 -0
  224. package/board-dist/node_modules/next/dist/client/components/segment-cache/lru.js +152 -0
  225. package/board-dist/node_modules/next/dist/client/components/segment-cache/navigation-testing-lock.js +194 -0
  226. package/board-dist/node_modules/next/dist/client/components/segment-cache/navigation.js +597 -0
  227. package/board-dist/node_modules/next/dist/client/components/segment-cache/optimistic-routes.js +543 -0
  228. package/board-dist/node_modules/next/dist/client/components/segment-cache/prefetch.js +31 -0
  229. package/board-dist/node_modules/next/dist/client/components/segment-cache/scheduler.js +1249 -0
  230. package/board-dist/node_modules/next/dist/client/components/segment-cache/types.js +69 -0
  231. package/board-dist/node_modules/next/dist/client/components/segment-cache/vary-path.js +278 -0
  232. package/board-dist/node_modules/next/dist/client/components/static-generation-bailout.js +42 -0
  233. package/board-dist/node_modules/next/dist/client/components/unauthorized.js +49 -0
  234. package/board-dist/node_modules/next/dist/client/components/unrecognized-action-error.js +39 -0
  235. package/board-dist/node_modules/next/dist/client/components/unresolved-thenable.js +23 -0
  236. package/board-dist/node_modules/next/dist/client/components/unstable-rethrow.browser.js +28 -0
  237. package/board-dist/node_modules/next/dist/client/components/unstable-rethrow.js +25 -0
  238. package/board-dist/node_modules/next/dist/client/components/unstable-rethrow.server.js +32 -0
  239. package/board-dist/node_modules/next/dist/client/components/use-action-queue.js +148 -0
  240. package/board-dist/node_modules/next/dist/client/dev/debug-channel.js +172 -0
  241. package/board-dist/node_modules/next/dist/client/flight-data-helpers.js +232 -0
  242. package/board-dist/node_modules/next/dist/client/has-base-path.js +23 -0
  243. package/board-dist/node_modules/next/dist/client/lib/console.js +177 -0
  244. package/board-dist/node_modules/next/dist/client/lib/javascript-url.js +32 -0
  245. package/board-dist/node_modules/next/dist/client/navigation-build-id.js +53 -0
  246. package/board-dist/node_modules/next/dist/client/normalize-trailing-slash.js +36 -0
  247. package/board-dist/node_modules/next/dist/client/remove-base-path.js +32 -0
  248. package/board-dist/node_modules/next/dist/client/route-params.js +247 -0
  249. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/cookies/index.js +339 -0
  250. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/cookies/package.json +1 -0
  251. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/ponyfill/index.js +46 -0
  252. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/ponyfill/package.json +1 -0
  253. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/abort-controller.js.text.js +1 -0
  254. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/console.js.text.js +1 -0
  255. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/events.js.text.js +1 -0
  256. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/index.js +5 -0
  257. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/load.js +18713 -0
  258. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/package.json +1 -0
  259. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/stream.js +44 -0
  260. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/timers.js.text.js +1 -0
  261. package/board-dist/node_modules/next/dist/compiled/@edge-runtime/primitives/url.js.text.js +1 -0
  262. package/board-dist/node_modules/next/dist/compiled/@hapi/accept/index.js +1 -0
  263. package/board-dist/node_modules/next/dist/compiled/@hapi/accept/package.json +1 -0
  264. package/board-dist/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/index.js +1 -0
  265. package/board-dist/node_modules/next/dist/compiled/@mswjs/interceptors/ClientRequest/package.json +1 -0
  266. package/board-dist/node_modules/next/dist/compiled/@napi-rs/triples/index.js +1 -0
  267. package/board-dist/node_modules/next/dist/compiled/@napi-rs/triples/package.json +1 -0
  268. package/board-dist/node_modules/next/dist/compiled/@opentelemetry/api/index.js +1 -0
  269. package/board-dist/node_modules/next/dist/compiled/@opentelemetry/api/package.json +1 -0
  270. package/board-dist/node_modules/next/dist/compiled/async-retry/index.js +1 -0
  271. package/board-dist/node_modules/next/dist/compiled/async-retry/package.json +1 -0
  272. package/board-dist/node_modules/next/dist/compiled/async-sema/index.js +1 -0
  273. package/board-dist/node_modules/next/dist/compiled/async-sema/package.json +1 -0
  274. package/board-dist/node_modules/next/dist/compiled/busboy/index.js +1 -0
  275. package/board-dist/node_modules/next/dist/compiled/busboy/package.json +1 -0
  276. package/board-dist/node_modules/next/dist/compiled/bytes/index.js +8 -0
  277. package/board-dist/node_modules/next/dist/compiled/bytes/package.json +1 -0
  278. package/board-dist/node_modules/next/dist/compiled/ci-info/index.js +1 -0
  279. package/board-dist/node_modules/next/dist/compiled/ci-info/package.json +1 -0
  280. package/board-dist/node_modules/next/dist/compiled/commander/index.js +1 -0
  281. package/board-dist/node_modules/next/dist/compiled/commander/package.json +1 -0
  282. package/board-dist/node_modules/next/dist/compiled/comment-json/index.js +7 -0
  283. package/board-dist/node_modules/next/dist/compiled/comment-json/package.json +1 -0
  284. package/board-dist/node_modules/next/dist/compiled/compression/index.js +58 -0
  285. package/board-dist/node_modules/next/dist/compiled/compression/package.json +1 -0
  286. package/board-dist/node_modules/next/dist/compiled/conf/index.js +15 -0
  287. package/board-dist/node_modules/next/dist/compiled/conf/package.json +1 -0
  288. package/board-dist/node_modules/next/dist/compiled/content-disposition/index.js +6 -0
  289. package/board-dist/node_modules/next/dist/compiled/content-disposition/package.json +1 -0
  290. package/board-dist/node_modules/next/dist/compiled/cookie/index.js +7 -0
  291. package/board-dist/node_modules/next/dist/compiled/cookie/package.json +1 -0
  292. package/board-dist/node_modules/next/dist/compiled/cross-spawn/index.js +1 -0
  293. package/board-dist/node_modules/next/dist/compiled/cross-spawn/package.json +1 -0
  294. package/board-dist/node_modules/next/dist/compiled/debug/index.js +1 -0
  295. package/board-dist/node_modules/next/dist/compiled/debug/package.json +1 -0
  296. package/board-dist/node_modules/next/dist/compiled/edge-runtime/index.js +1 -0
  297. package/board-dist/node_modules/next/dist/compiled/edge-runtime/package.json +1 -0
  298. package/board-dist/node_modules/next/dist/compiled/find-up/index.js +1 -0
  299. package/board-dist/node_modules/next/dist/compiled/find-up/package.json +1 -0
  300. package/board-dist/node_modules/next/dist/compiled/fresh/index.js +8 -0
  301. package/board-dist/node_modules/next/dist/compiled/fresh/package.json +1 -0
  302. package/board-dist/node_modules/next/dist/compiled/http-proxy/index.js +34 -0
  303. package/board-dist/node_modules/next/dist/compiled/http-proxy/package.json +1 -0
  304. package/board-dist/node_modules/next/dist/compiled/image-detector/detector.js +1 -0
  305. package/board-dist/node_modules/next/dist/compiled/image-size/index.js +1 -0
  306. package/board-dist/node_modules/next/dist/compiled/image-size/package.json +1 -0
  307. package/board-dist/node_modules/next/dist/compiled/ipaddr.js/ipaddr.js +1 -0
  308. package/board-dist/node_modules/next/dist/compiled/ipaddr.js/package.json +1 -0
  309. package/board-dist/node_modules/next/dist/compiled/is-animated/index.js +1 -0
  310. package/board-dist/node_modules/next/dist/compiled/is-animated/package.json +1 -0
  311. package/board-dist/node_modules/next/dist/compiled/is-docker/index.js +1 -0
  312. package/board-dist/node_modules/next/dist/compiled/is-docker/package.json +1 -0
  313. package/board-dist/node_modules/next/dist/compiled/is-wsl/index.js +1 -0
  314. package/board-dist/node_modules/next/dist/compiled/is-wsl/package.json +1 -0
  315. package/board-dist/node_modules/next/dist/compiled/jsonwebtoken/index.js +11 -0
  316. package/board-dist/node_modules/next/dist/compiled/jsonwebtoken/package.json +1 -0
  317. package/board-dist/node_modules/next/dist/compiled/nanoid/index.cjs +1 -0
  318. package/board-dist/node_modules/next/dist/compiled/nanoid/package.json +1 -0
  319. package/board-dist/node_modules/next/dist/compiled/next-server/app-page-turbo-experimental.runtime.prod.js +54 -0
  320. package/board-dist/node_modules/next/dist/compiled/next-server/app-page-turbo.runtime.prod.js +54 -0
  321. package/board-dist/node_modules/next/dist/compiled/next-server/app-route-turbo.runtime.prod.js +6 -0
  322. package/board-dist/node_modules/next/dist/compiled/next-server/pages-turbo.runtime.prod.js +20 -0
  323. package/board-dist/node_modules/next/dist/compiled/p-limit/index.js +1 -0
  324. package/board-dist/node_modules/next/dist/compiled/p-limit/package.json +1 -0
  325. package/board-dist/node_modules/next/dist/compiled/p-queue/index.js +1 -0
  326. package/board-dist/node_modules/next/dist/compiled/p-queue/package.json +1 -0
  327. package/board-dist/node_modules/next/dist/compiled/path-browserify/index.js +1 -0
  328. package/board-dist/node_modules/next/dist/compiled/path-browserify/package.json +1 -0
  329. package/board-dist/node_modules/next/dist/compiled/path-to-regexp/index.js +1 -0
  330. package/board-dist/node_modules/next/dist/compiled/path-to-regexp/package.json +1 -0
  331. package/board-dist/node_modules/next/dist/compiled/picomatch/index.js +1 -0
  332. package/board-dist/node_modules/next/dist/compiled/picomatch/package.json +1 -0
  333. package/board-dist/node_modules/next/dist/compiled/react-is/cjs/react-is.development.js +133 -0
  334. package/board-dist/node_modules/next/dist/compiled/react-is/cjs/react-is.production.js +130 -0
  335. package/board-dist/node_modules/next/dist/compiled/react-is/index.js +7 -0
  336. package/board-dist/node_modules/next/dist/compiled/react-is/package.json +26 -0
  337. package/board-dist/node_modules/next/dist/compiled/regenerator-runtime/package.json +19 -0
  338. package/board-dist/node_modules/next/dist/compiled/regenerator-runtime/runtime.js +729 -0
  339. package/board-dist/node_modules/next/dist/compiled/semver/index.js +1 -0
  340. package/board-dist/node_modules/next/dist/compiled/semver/package.json +1 -0
  341. package/board-dist/node_modules/next/dist/compiled/send/index.js +70 -0
  342. package/board-dist/node_modules/next/dist/compiled/send/package.json +1 -0
  343. package/board-dist/node_modules/next/dist/compiled/source-map/package.json +1 -0
  344. package/board-dist/node_modules/next/dist/compiled/source-map/source-map.js +1 -0
  345. package/board-dist/node_modules/next/dist/compiled/stacktrace-parser/package.json +1 -0
  346. package/board-dist/node_modules/next/dist/compiled/stacktrace-parser/stack-trace-parser.cjs.js +1 -0
  347. package/board-dist/node_modules/next/dist/compiled/string-hash/index.js +1 -0
  348. package/board-dist/node_modules/next/dist/compiled/string-hash/package.json +1 -0
  349. package/board-dist/node_modules/next/dist/compiled/strip-ansi/index.js +1 -0
  350. package/board-dist/node_modules/next/dist/compiled/strip-ansi/package.json +1 -0
  351. package/board-dist/node_modules/next/dist/compiled/superstruct/index.cjs +1 -0
  352. package/board-dist/node_modules/next/dist/compiled/superstruct/package.json +1 -0
  353. package/board-dist/node_modules/next/dist/compiled/tar/index.min.js +1 -0
  354. package/board-dist/node_modules/next/dist/compiled/tar/package.json +1 -0
  355. package/board-dist/node_modules/next/dist/compiled/text-table/index.js +1 -0
  356. package/board-dist/node_modules/next/dist/compiled/text-table/package.json +1 -0
  357. package/board-dist/node_modules/next/dist/compiled/watchpack/package.json +1 -0
  358. package/board-dist/node_modules/next/dist/compiled/watchpack/watchpack.js +1 -0
  359. package/board-dist/node_modules/next/dist/compiled/ws/index.js +1 -0
  360. package/board-dist/node_modules/next/dist/compiled/ws/package.json +1 -0
  361. package/board-dist/node_modules/next/dist/compiled/zod/index.cjs +1 -0
  362. package/board-dist/node_modules/next/dist/compiled/zod/package.json +1 -0
  363. package/board-dist/node_modules/next/dist/compiled/zod-validation-error/index.js +1 -0
  364. package/board-dist/node_modules/next/dist/compiled/zod-validation-error/package.json +1 -0
  365. package/board-dist/node_modules/next/dist/experimental/testmode/context.js +57 -0
  366. package/board-dist/node_modules/next/dist/experimental/testmode/fetch.js +142 -0
  367. package/board-dist/node_modules/next/dist/experimental/testmode/httpget.js +26 -0
  368. package/board-dist/node_modules/next/dist/experimental/testmode/server-edge.js +32 -0
  369. package/board-dist/node_modules/next/dist/experimental/testmode/server.js +62 -0
  370. package/board-dist/node_modules/next/dist/export/helpers/create-incremental-cache.js +61 -0
  371. package/board-dist/node_modules/next/dist/lib/batcher.js +65 -0
  372. package/board-dist/node_modules/next/dist/lib/build-custom-route.js +46 -0
  373. package/board-dist/node_modules/next/dist/lib/bundler.js +97 -0
  374. package/board-dist/node_modules/next/dist/lib/client-and-server-references.js +54 -0
  375. package/board-dist/node_modules/next/dist/lib/coalesced-function.js +39 -0
  376. package/board-dist/node_modules/next/dist/lib/compile-error.js +14 -0
  377. package/board-dist/node_modules/next/dist/lib/constants.js +420 -0
  378. package/board-dist/node_modules/next/dist/lib/create-client-router-filter.js +67 -0
  379. package/board-dist/node_modules/next/dist/lib/default-transpiled-packages.json +1 -0
  380. package/board-dist/node_modules/next/dist/lib/detached-promise.js +32 -0
  381. package/board-dist/node_modules/next/dist/lib/detect-typo.js +51 -0
  382. package/board-dist/node_modules/next/dist/lib/download-swc.js +183 -0
  383. package/board-dist/node_modules/next/dist/lib/error-telemetry-utils.js +42 -0
  384. package/board-dist/node_modules/next/dist/lib/fallback.js +100 -0
  385. package/board-dist/node_modules/next/dist/lib/fatal-error.js +14 -0
  386. package/board-dist/node_modules/next/dist/lib/file-exists.js +53 -0
  387. package/board-dist/node_modules/next/dist/lib/find-config.js +102 -0
  388. package/board-dist/node_modules/next/dist/lib/find-pages-dir.js +65 -0
  389. package/board-dist/node_modules/next/dist/lib/find-root.js +126 -0
  390. package/board-dist/node_modules/next/dist/lib/format-cli-help-output.js +84 -0
  391. package/board-dist/node_modules/next/dist/lib/format-dynamic-import-path.js +24 -0
  392. package/board-dist/node_modules/next/dist/lib/format-server-error.js +75 -0
  393. package/board-dist/node_modules/next/dist/lib/framework/boundary-components.js +62 -0
  394. package/board-dist/node_modules/next/dist/lib/framework/boundary-constants.js +36 -0
  395. package/board-dist/node_modules/next/dist/lib/fs/rename.js +87 -0
  396. package/board-dist/node_modules/next/dist/lib/fs/write-atomic.js +28 -0
  397. package/board-dist/node_modules/next/dist/lib/generate-interception-routes-rewrites.js +52 -0
  398. package/board-dist/node_modules/next/dist/lib/get-files-in-dir.js +33 -0
  399. package/board-dist/node_modules/next/dist/lib/get-network-host.js +44 -0
  400. package/board-dist/node_modules/next/dist/lib/get-package-version.js +118 -0
  401. package/board-dist/node_modules/next/dist/lib/get-project-dir.js +51 -0
  402. package/board-dist/node_modules/next/dist/lib/has-necessary-dependencies.js +49 -0
  403. package/board-dist/node_modules/next/dist/lib/helpers/get-cache-directory.js +66 -0
  404. package/board-dist/node_modules/next/dist/lib/helpers/get-npx-command.js +29 -0
  405. package/board-dist/node_modules/next/dist/lib/helpers/get-online.js +50 -0
  406. package/board-dist/node_modules/next/dist/lib/helpers/get-pkg-manager.js +63 -0
  407. package/board-dist/node_modules/next/dist/lib/helpers/get-registry.js +45 -0
  408. package/board-dist/node_modules/next/dist/lib/helpers/get-reserved-port.js +116 -0
  409. package/board-dist/node_modules/next/dist/lib/helpers/install.js +83 -0
  410. package/board-dist/node_modules/next/dist/lib/import-next-warning.js +50 -0
  411. package/board-dist/node_modules/next/dist/lib/inline-static-env.js +112 -0
  412. package/board-dist/node_modules/next/dist/lib/install-dependencies.js +40 -0
  413. package/board-dist/node_modules/next/dist/lib/interop-default.js +16 -0
  414. package/board-dist/node_modules/next/dist/lib/is-api-route.js +15 -0
  415. package/board-dist/node_modules/next/dist/lib/is-app-page-route.js +15 -0
  416. package/board-dist/node_modules/next/dist/lib/is-app-route-route.js +15 -0
  417. package/board-dist/node_modules/next/dist/lib/is-edge-runtime.js +16 -0
  418. package/board-dist/node_modules/next/dist/lib/is-error.js +78 -0
  419. package/board-dist/node_modules/next/dist/lib/is-interception-route-rewrite.js +18 -0
  420. package/board-dist/node_modules/next/dist/lib/is-internal-component.js +36 -0
  421. package/board-dist/node_modules/next/dist/lib/is-serializable-props.js +106 -0
  422. package/board-dist/node_modules/next/dist/lib/known-edge-safe-packages.json +1 -0
  423. package/board-dist/node_modules/next/dist/lib/load-custom-routes.js +594 -0
  424. package/board-dist/node_modules/next/dist/lib/memory/gc-observer.js +53 -0
  425. package/board-dist/node_modules/next/dist/lib/memory/shutdown.js +29 -0
  426. package/board-dist/node_modules/next/dist/lib/memory/startup.js +47 -0
  427. package/board-dist/node_modules/next/dist/lib/memory/trace.js +109 -0
  428. package/board-dist/node_modules/next/dist/lib/metadata/constants.js +40 -0
  429. package/board-dist/node_modules/next/dist/lib/metadata/default-metadata.js +82 -0
  430. package/board-dist/node_modules/next/dist/lib/metadata/generate/icon-mark.js +22 -0
  431. package/board-dist/node_modules/next/dist/lib/metadata/generate/utils.js +52 -0
  432. package/board-dist/node_modules/next/dist/lib/metadata/get-metadata-route.js +123 -0
  433. package/board-dist/node_modules/next/dist/lib/metadata/is-metadata-route.js +221 -0
  434. package/board-dist/node_modules/next/dist/lib/metadata/metadata-context.js +18 -0
  435. package/board-dist/node_modules/next/dist/lib/metadata/metadata.js +1686 -0
  436. package/board-dist/node_modules/next/dist/lib/metadata/resolve-metadata.js +884 -0
  437. package/board-dist/node_modules/next/dist/lib/metadata/resolvers/resolve-basics.js +232 -0
  438. package/board-dist/node_modules/next/dist/lib/metadata/resolvers/resolve-icons.js +56 -0
  439. package/board-dist/node_modules/next/dist/lib/metadata/resolvers/resolve-opengraph.js +199 -0
  440. package/board-dist/node_modules/next/dist/lib/metadata/resolvers/resolve-title.js +40 -0
  441. package/board-dist/node_modules/next/dist/lib/metadata/resolvers/resolve-url.js +135 -0
  442. package/board-dist/node_modules/next/dist/lib/metadata/types/alternative-urls-types.js +7 -0
  443. package/board-dist/node_modules/next/dist/lib/metadata/types/extra-types.js +9 -0
  444. package/board-dist/node_modules/next/dist/lib/metadata/types/icons.js +6 -0
  445. package/board-dist/node_modules/next/dist/lib/metadata/types/manifest-types.js +6 -0
  446. package/board-dist/node_modules/next/dist/lib/metadata/types/metadata-interface.js +18 -0
  447. package/board-dist/node_modules/next/dist/lib/metadata/types/metadata-types.js +10 -0
  448. package/board-dist/node_modules/next/dist/lib/metadata/types/opengraph-types.js +6 -0
  449. package/board-dist/node_modules/next/dist/lib/metadata/types/resolvers.js +6 -0
  450. package/board-dist/node_modules/next/dist/lib/metadata/types/twitter-types.js +7 -0
  451. package/board-dist/node_modules/next/dist/lib/mime-type.js +20 -0
  452. package/board-dist/node_modules/next/dist/lib/mkcert.js +204 -0
  453. package/board-dist/node_modules/next/dist/lib/multi-file-writer.js +75 -0
  454. package/board-dist/node_modules/next/dist/lib/needs-experimental-react.js +16 -0
  455. package/board-dist/node_modules/next/dist/lib/non-nullable.js +15 -0
  456. package/board-dist/node_modules/next/dist/lib/normalize-path.js +21 -0
  457. package/board-dist/node_modules/next/dist/lib/oxford-comma-list.js +15 -0
  458. package/board-dist/node_modules/next/dist/lib/page-types.js +18 -0
  459. package/board-dist/node_modules/next/dist/lib/patch-incorrect-lockfile.js +185 -0
  460. package/board-dist/node_modules/next/dist/lib/pick.js +19 -0
  461. package/board-dist/node_modules/next/dist/lib/picocolors.js +177 -0
  462. package/board-dist/node_modules/next/dist/lib/pretty-bytes.js +74 -0
  463. package/board-dist/node_modules/next/dist/lib/realpath.js +20 -0
  464. package/board-dist/node_modules/next/dist/lib/recursive-copy.js +76 -0
  465. package/board-dist/node_modules/next/dist/lib/recursive-delete.js +137 -0
  466. package/board-dist/node_modules/next/dist/lib/recursive-readdir.js +124 -0
  467. package/board-dist/node_modules/next/dist/lib/redirect-status.js +46 -0
  468. package/board-dist/node_modules/next/dist/lib/require-instrumentation-client.js +26 -0
  469. package/board-dist/node_modules/next/dist/lib/resolve-build-paths.js +154 -0
  470. package/board-dist/node_modules/next/dist/lib/resolve-from.js +65 -0
  471. package/board-dist/node_modules/next/dist/lib/route-pattern-normalizer.js +107 -0
  472. package/board-dist/node_modules/next/dist/lib/scheduler.js +64 -0
  473. package/board-dist/node_modules/next/dist/lib/semver-noop.js +18 -0
  474. package/board-dist/node_modules/next/dist/lib/server-external-packages.jsonc +103 -0
  475. package/board-dist/node_modules/next/dist/lib/setup-exception-listeners.js +11 -0
  476. package/board-dist/node_modules/next/dist/lib/static-env.js +92 -0
  477. package/board-dist/node_modules/next/dist/lib/try-to-parse-path.js +67 -0
  478. package/board-dist/node_modules/next/dist/lib/turbopack-warning.js +185 -0
  479. package/board-dist/node_modules/next/dist/lib/typescript/diagnosticFormatter.js +243 -0
  480. package/board-dist/node_modules/next/dist/lib/typescript/getTypeScriptConfiguration.js +153 -0
  481. package/board-dist/node_modules/next/dist/lib/typescript/getTypeScriptIntent.js +52 -0
  482. package/board-dist/node_modules/next/dist/lib/typescript/missingDependencyError.js +27 -0
  483. package/board-dist/node_modules/next/dist/lib/typescript/runTypeCheck.js +149 -0
  484. package/board-dist/node_modules/next/dist/lib/typescript/type-paths.js +51 -0
  485. package/board-dist/node_modules/next/dist/lib/typescript/writeAppTypeDeclarations.js +75 -0
  486. package/board-dist/node_modules/next/dist/lib/typescript/writeConfigurationDefaults.js +395 -0
  487. package/board-dist/node_modules/next/dist/lib/url.js +75 -0
  488. package/board-dist/node_modules/next/dist/lib/verify-partytown-setup.js +115 -0
  489. package/board-dist/node_modules/next/dist/lib/verify-root-layout.js +165 -0
  490. package/board-dist/node_modules/next/dist/lib/verify-typescript-setup.js +228 -0
  491. package/board-dist/node_modules/next/dist/lib/wait.js +19 -0
  492. package/board-dist/node_modules/next/dist/lib/with-promise-cache.js +24 -0
  493. package/board-dist/node_modules/next/dist/lib/worker.js +234 -0
  494. package/board-dist/node_modules/next/dist/server/ReactDOMServerPages.js +16 -0
  495. package/board-dist/node_modules/next/dist/server/accept-header.js +132 -0
  496. package/board-dist/node_modules/next/dist/server/after/after-context.js +140 -0
  497. package/board-dist/node_modules/next/dist/server/after/after.js +26 -0
  498. package/board-dist/node_modules/next/dist/server/after/awaiter.js +74 -0
  499. package/board-dist/node_modules/next/dist/server/after/builtin-request-context.js +38 -0
  500. package/board-dist/node_modules/next/dist/server/after/index.js +21 -0
  501. package/board-dist/node_modules/next/dist/server/after/run-with-after.js +35 -0
  502. package/board-dist/node_modules/next/dist/server/api-utils/get-cookie-parser.js +22 -0
  503. package/board-dist/node_modules/next/dist/server/api-utils/index.js +201 -0
  504. package/board-dist/node_modules/next/dist/server/api-utils/node/api-resolver.js +395 -0
  505. package/board-dist/node_modules/next/dist/server/api-utils/node/parse-body.js +79 -0
  506. package/board-dist/node_modules/next/dist/server/api-utils/node/try-get-preview-data.js +86 -0
  507. package/board-dist/node_modules/next/dist/server/api-utils/web.js +17 -0
  508. package/board-dist/node_modules/next/dist/server/app-render/action-async-storage-instance.js +14 -0
  509. package/board-dist/node_modules/next/dist/server/app-render/action-async-storage.external.js +13 -0
  510. package/board-dist/node_modules/next/dist/server/app-render/action-handler.js +1027 -0
  511. package/board-dist/node_modules/next/dist/server/app-render/after-task-async-storage-instance.js +14 -0
  512. package/board-dist/node_modules/next/dist/server/app-render/after-task-async-storage.external.js +13 -0
  513. package/board-dist/node_modules/next/dist/server/app-render/app-render-prerender-utils.js +167 -0
  514. package/board-dist/node_modules/next/dist/server/app-render/app-render-render-utils.js +76 -0
  515. package/board-dist/node_modules/next/dist/server/app-render/app-render-scheduling.js +188 -0
  516. package/board-dist/node_modules/next/dist/server/app-render/app-render.js +4522 -0
  517. package/board-dist/node_modules/next/dist/server/app-render/async-local-storage.js +76 -0
  518. package/board-dist/node_modules/next/dist/server/app-render/cache-signal.js +181 -0
  519. package/board-dist/node_modules/next/dist/server/app-render/collect-segment-data.js +616 -0
  520. package/board-dist/node_modules/next/dist/server/app-render/console-async-storage-instance.js +14 -0
  521. package/board-dist/node_modules/next/dist/server/app-render/console-async-storage.external.js +13 -0
  522. package/board-dist/node_modules/next/dist/server/app-render/create-component-styles-and-scripts.js +33 -0
  523. package/board-dist/node_modules/next/dist/server/app-render/create-component-tree.js +870 -0
  524. package/board-dist/node_modules/next/dist/server/app-render/create-error-handler.js +189 -0
  525. package/board-dist/node_modules/next/dist/server/app-render/create-flight-router-state-from-loader-tree.js +102 -0
  526. package/board-dist/node_modules/next/dist/server/app-render/csrf-protection.js +86 -0
  527. package/board-dist/node_modules/next/dist/server/app-render/debug-channel-server.js +30 -0
  528. package/board-dist/node_modules/next/dist/server/app-render/debug-channel-server.web.js +71 -0
  529. package/board-dist/node_modules/next/dist/server/app-render/dynamic-access-async-storage-instance.js +14 -0
  530. package/board-dist/node_modules/next/dist/server/app-render/dynamic-access-async-storage.external.js +13 -0
  531. package/board-dist/node_modules/next/dist/server/app-render/dynamic-rendering.js +1144 -0
  532. package/board-dist/node_modules/next/dist/server/app-render/encryption-utils-server.js +114 -0
  533. package/board-dist/node_modules/next/dist/server/app-render/encryption-utils.js +93 -0
  534. package/board-dist/node_modules/next/dist/server/app-render/encryption.js +259 -0
  535. package/board-dist/node_modules/next/dist/server/app-render/entry-base.js +256 -0
  536. package/board-dist/node_modules/next/dist/server/app-render/flight-render-result.js +28 -0
  537. package/board-dist/node_modules/next/dist/server/app-render/get-asset-query-string.js +29 -0
  538. package/board-dist/node_modules/next/dist/server/app-render/get-css-inlined-link-tags.js +49 -0
  539. package/board-dist/node_modules/next/dist/server/app-render/get-layer-assets.js +65 -0
  540. package/board-dist/node_modules/next/dist/server/app-render/get-preloadable-fonts.js +39 -0
  541. package/board-dist/node_modules/next/dist/server/app-render/get-script-nonce-from-header.js +32 -0
  542. package/board-dist/node_modules/next/dist/server/app-render/get-short-dynamic-param-type.js +25 -0
  543. package/board-dist/node_modules/next/dist/server/app-render/has-loading-component-in-tree.js +19 -0
  544. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/boundary-constants.js +13 -0
  545. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/boundary-impl.js +103 -0
  546. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.js +18 -0
  547. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/instant-config.js +181 -0
  548. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/instant-samples-client.js +128 -0
  549. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/instant-samples.js +432 -0
  550. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.js +33 -0
  551. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/instant-validation.js +713 -0
  552. package/board-dist/node_modules/next/dist/server/app-render/instant-validation/stream-utils.js +96 -0
  553. package/board-dist/node_modules/next/dist/server/app-render/interop-default.js +17 -0
  554. package/board-dist/node_modules/next/dist/server/app-render/make-get-server-inserted-html.js +92 -0
  555. package/board-dist/node_modules/next/dist/server/app-render/manifests-singleton.js +264 -0
  556. package/board-dist/node_modules/next/dist/server/app-render/metadata-insertion/create-server-inserted-metadata.js +29 -0
  557. package/board-dist/node_modules/next/dist/server/app-render/module-loading/track-dynamic-import.js +57 -0
  558. package/board-dist/node_modules/next/dist/server/app-render/module-loading/track-module-loading.external.js +32 -0
  559. package/board-dist/node_modules/next/dist/server/app-render/module-loading/track-module-loading.instance.js +66 -0
  560. package/board-dist/node_modules/next/dist/server/app-render/parse-and-validate-flight-router-state.js +49 -0
  561. package/board-dist/node_modules/next/dist/server/app-render/postponed-state.js +157 -0
  562. package/board-dist/node_modules/next/dist/server/app-render/prospective-render-utils.js +74 -0
  563. package/board-dist/node_modules/next/dist/server/app-render/react-large-shell-error.js +17 -0
  564. package/board-dist/node_modules/next/dist/server/app-render/react-server.node.js +39 -0
  565. package/board-dist/node_modules/next/dist/server/app-render/render-css-resource.js +52 -0
  566. package/board-dist/node_modules/next/dist/server/app-render/required-scripts.js +76 -0
  567. package/board-dist/node_modules/next/dist/server/app-render/rsc/postpone.js +18 -0
  568. package/board-dist/node_modules/next/dist/server/app-render/rsc/preloads.js +74 -0
  569. package/board-dist/node_modules/next/dist/server/app-render/rsc/taint.js +79 -0
  570. package/board-dist/node_modules/next/dist/server/app-render/segment-explorer-path.js +128 -0
  571. package/board-dist/node_modules/next/dist/server/app-render/server-inserted-html.js +77 -0
  572. package/board-dist/node_modules/next/dist/server/app-render/staged-rendering.js +343 -0
  573. package/board-dist/node_modules/next/dist/server/app-render/stale-time.js +111 -0
  574. package/board-dist/node_modules/next/dist/server/app-render/stream-ops.js +106 -0
  575. package/board-dist/node_modules/next/dist/server/app-render/stream-ops.web.js +163 -0
  576. package/board-dist/node_modules/next/dist/server/app-render/strip-flight-headers.js +18 -0
  577. package/board-dist/node_modules/next/dist/server/app-render/types.js +65 -0
  578. package/board-dist/node_modules/next/dist/server/app-render/use-flight-response.js +214 -0
  579. package/board-dist/node_modules/next/dist/server/app-render/vary-params.js +336 -0
  580. package/board-dist/node_modules/next/dist/server/app-render/walk-tree-with-flight-router-state.js +232 -0
  581. package/board-dist/node_modules/next/dist/server/app-render/work-async-storage-instance.js +14 -0
  582. package/board-dist/node_modules/next/dist/server/app-render/work-async-storage.external.js +13 -0
  583. package/board-dist/node_modules/next/dist/server/app-render/work-unit-async-storage-instance.js +14 -0
  584. package/board-dist/node_modules/next/dist/server/app-render/work-unit-async-storage.external.js +280 -0
  585. package/board-dist/node_modules/next/dist/server/async-storage/draft-mode-provider.js +62 -0
  586. package/board-dist/node_modules/next/dist/server/async-storage/request-store.js +144 -0
  587. package/board-dist/node_modules/next/dist/server/async-storage/with-store.js +6 -0
  588. package/board-dist/node_modules/next/dist/server/async-storage/work-store.js +92 -0
  589. package/board-dist/node_modules/next/dist/server/base-http/helpers.js +36 -0
  590. package/board-dist/node_modules/next/dist/server/base-http/index.js +54 -0
  591. package/board-dist/node_modules/next/dist/server/base-http/node.js +147 -0
  592. package/board-dist/node_modules/next/dist/server/base-http/web.js +124 -0
  593. package/board-dist/node_modules/next/dist/server/base-server.js +1882 -0
  594. package/board-dist/node_modules/next/dist/server/body-streams.js +114 -0
  595. package/board-dist/node_modules/next/dist/server/cache-dir.js +26 -0
  596. package/board-dist/node_modules/next/dist/server/capsize-font-metrics.json +181516 -0
  597. package/board-dist/node_modules/next/dist/server/ci-info.js +41 -0
  598. package/board-dist/node_modules/next/dist/server/client-component-renderer-logger.js +70 -0
  599. package/board-dist/node_modules/next/dist/server/config-schema.js +727 -0
  600. package/board-dist/node_modules/next/dist/server/config-shared.js +369 -0
  601. package/board-dist/node_modules/next/dist/server/config-utils.js +185 -0
  602. package/board-dist/node_modules/next/dist/server/config.js +1545 -0
  603. package/board-dist/node_modules/next/dist/server/create-deduped-by-callsite-server-error-logger.js +96 -0
  604. package/board-dist/node_modules/next/dist/server/crypto-utils.js +70 -0
  605. package/board-dist/node_modules/next/dist/server/dev/browser-logs/file-logger.js +186 -0
  606. package/board-dist/node_modules/next/dist/server/dev/browser-logs/receive-logs.js +558 -0
  607. package/board-dist/node_modules/next/dist/server/dev/browser-logs/source-map.js +222 -0
  608. package/board-dist/node_modules/next/dist/server/dev/debug-channel.js +87 -0
  609. package/board-dist/node_modules/next/dist/server/dev/dev-indicator-server-state.js +15 -0
  610. package/board-dist/node_modules/next/dist/server/dev/get-source-map-from-file.js +100 -0
  611. package/board-dist/node_modules/next/dist/server/dev/hot-middleware.js +274 -0
  612. package/board-dist/node_modules/next/dist/server/dev/hot-reloader-rspack.js +171 -0
  613. package/board-dist/node_modules/next/dist/server/dev/hot-reloader-shared-utils.js +56 -0
  614. package/board-dist/node_modules/next/dist/server/dev/hot-reloader-turbopack.js +1480 -0
  615. package/board-dist/node_modules/next/dist/server/dev/hot-reloader-types.js +58 -0
  616. package/board-dist/node_modules/next/dist/server/dev/hot-reloader-webpack.js +1386 -0
  617. package/board-dist/node_modules/next/dist/server/dev/log-requests.js +149 -0
  618. package/board-dist/node_modules/next/dist/server/dev/messages.js +74 -0
  619. package/board-dist/node_modules/next/dist/server/dev/middleware-turbopack.js +403 -0
  620. package/board-dist/node_modules/next/dist/server/dev/middleware-webpack.js +483 -0
  621. package/board-dist/node_modules/next/dist/server/dev/node-stack-frames.js +72 -0
  622. package/board-dist/node_modules/next/dist/server/dev/on-demand-entry-handler.js +773 -0
  623. package/board-dist/node_modules/next/dist/server/dev/parse-version-info.js +108 -0
  624. package/board-dist/node_modules/next/dist/server/dev/require-cache.js +79 -0
  625. package/board-dist/node_modules/next/dist/server/dev/serialized-errors.js +67 -0
  626. package/board-dist/node_modules/next/dist/server/dev/server-action-logger.js +37 -0
  627. package/board-dist/node_modules/next/dist/server/dev/static-paths-worker.js +105 -0
  628. package/board-dist/node_modules/next/dist/server/dev/turbopack-utils.js +687 -0
  629. package/board-dist/node_modules/next/dist/server/dynamic-rendering-utils.js +108 -0
  630. package/board-dist/node_modules/next/dist/server/font-utils.js +43 -0
  631. package/board-dist/node_modules/next/dist/server/get-app-route-from-entrypoint.js +30 -0
  632. package/board-dist/node_modules/next/dist/server/get-page-files.js +23 -0
  633. package/board-dist/node_modules/next/dist/server/get-route-from-entrypoint.js +35 -0
  634. package/board-dist/node_modules/next/dist/server/image-optimizer.js +1240 -0
  635. package/board-dist/node_modules/next/dist/server/instrumentation/types.js +6 -0
  636. package/board-dist/node_modules/next/dist/server/instrumentation/utils.js +21 -0
  637. package/board-dist/node_modules/next/dist/server/internal-utils.js +39 -0
  638. package/board-dist/node_modules/next/dist/server/is-private-ip.js +36 -0
  639. package/board-dist/node_modules/next/dist/server/lib/app-dir-module.js +59 -0
  640. package/board-dist/node_modules/next/dist/server/lib/app-info-log.js +132 -0
  641. package/board-dist/node_modules/next/dist/server/lib/async-callback-set.js +29 -0
  642. package/board-dist/node_modules/next/dist/server/lib/cache-control.js +22 -0
  643. package/board-dist/node_modules/next/dist/server/lib/cache-handlers/default.external.js +18 -0
  644. package/board-dist/node_modules/next/dist/server/lib/cache-handlers/default.js +160 -0
  645. package/board-dist/node_modules/next/dist/server/lib/cache-handlers/types.js +8 -0
  646. package/board-dist/node_modules/next/dist/server/lib/chrome-devtools-workspace.js +116 -0
  647. package/board-dist/node_modules/next/dist/server/lib/clone-response.js +77 -0
  648. package/board-dist/node_modules/next/dist/server/lib/cpu-profile.js +59 -0
  649. package/board-dist/node_modules/next/dist/server/lib/decode-query-path-parameter.js +26 -0
  650. package/board-dist/node_modules/next/dist/server/lib/dedupe-fetch.js +163 -0
  651. package/board-dist/node_modules/next/dist/server/lib/dev-bundler-service.js +95 -0
  652. package/board-dist/node_modules/next/dist/server/lib/disk-lru-cache.external.js +57 -0
  653. package/board-dist/node_modules/next/dist/server/lib/encode-cache-tag.js +45 -0
  654. package/board-dist/node_modules/next/dist/server/lib/etag.js +56 -0
  655. package/board-dist/node_modules/next/dist/server/lib/experimental/create-env-definitions.js +48 -0
  656. package/board-dist/node_modules/next/dist/server/lib/experimental/ppr.js +47 -0
  657. package/board-dist/node_modules/next/dist/server/lib/find-page-file.js +147 -0
  658. package/board-dist/node_modules/next/dist/server/lib/fix-mojibake.js +25 -0
  659. package/board-dist/node_modules/next/dist/server/lib/format-hostname.js +16 -0
  660. package/board-dist/node_modules/next/dist/server/lib/i18n-provider.js +129 -0
  661. package/board-dist/node_modules/next/dist/server/lib/implicit-tags.js +80 -0
  662. package/board-dist/node_modules/next/dist/server/lib/incremental-cache/file-system-cache.js +335 -0
  663. package/board-dist/node_modules/next/dist/server/lib/incremental-cache/index.js +501 -0
  664. package/board-dist/node_modules/next/dist/server/lib/incremental-cache/memory-cache.external.js +57 -0
  665. package/board-dist/node_modules/next/dist/server/lib/incremental-cache/shared-cache-controls.external.js +73 -0
  666. package/board-dist/node_modules/next/dist/server/lib/incremental-cache/tags-manifest.external.js +55 -0
  667. package/board-dist/node_modules/next/dist/server/lib/install-code-frame.js +22 -0
  668. package/board-dist/node_modules/next/dist/server/lib/is-ipv6.js +41 -0
  669. package/board-dist/node_modules/next/dist/server/lib/is-rsc-request.js +18 -0
  670. package/board-dist/node_modules/next/dist/server/lib/lazy-result.js +46 -0
  671. package/board-dist/node_modules/next/dist/server/lib/lru-cache.js +191 -0
  672. package/board-dist/node_modules/next/dist/server/lib/match-next-data-pathname.js +18 -0
  673. package/board-dist/node_modules/next/dist/server/lib/mock-request.js +441 -0
  674. package/board-dist/node_modules/next/dist/server/lib/module-loader/module-loader.js +8 -0
  675. package/board-dist/node_modules/next/dist/server/lib/module-loader/node-module-loader.js +25 -0
  676. package/board-dist/node_modules/next/dist/server/lib/module-loader/route-module-loader.js +26 -0
  677. package/board-dist/node_modules/next/dist/server/lib/node-fs-methods.js +28 -0
  678. package/board-dist/node_modules/next/dist/server/lib/parse-stack.js +46 -0
  679. package/board-dist/node_modules/next/dist/server/lib/patch-fetch.js +982 -0
  680. package/board-dist/node_modules/next/dist/server/lib/patch-set-header.js +45 -0
  681. package/board-dist/node_modules/next/dist/server/lib/postponed-request-body.js +64 -0
  682. package/board-dist/node_modules/next/dist/server/lib/render-server.js +155 -0
  683. package/board-dist/node_modules/next/dist/server/lib/router-server.js +699 -0
  684. package/board-dist/node_modules/next/dist/server/lib/router-utils/block-cross-site-dev.js +110 -0
  685. package/board-dist/node_modules/next/dist/server/lib/router-utils/build-data-route.js +48 -0
  686. package/board-dist/node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.js +50 -0
  687. package/board-dist/node_modules/next/dist/server/lib/router-utils/cache-life-type-utils.js +211 -0
  688. package/board-dist/node_modules/next/dist/server/lib/router-utils/decode-path-params.js +42 -0
  689. package/board-dist/node_modules/next/dist/server/lib/router-utils/filesystem.js +591 -0
  690. package/board-dist/node_modules/next/dist/server/lib/router-utils/instrumentation-globals.external.js +89 -0
  691. package/board-dist/node_modules/next/dist/server/lib/router-utils/instrumentation-node-extensions.js +96 -0
  692. package/board-dist/node_modules/next/dist/server/lib/router-utils/is-postpone.js +16 -0
  693. package/board-dist/node_modules/next/dist/server/lib/router-utils/proxy-request.js +118 -0
  694. package/board-dist/node_modules/next/dist/server/lib/router-utils/resolve-routes.js +643 -0
  695. package/board-dist/node_modules/next/dist/server/lib/router-utils/route-types-utils.js +286 -0
  696. package/board-dist/node_modules/next/dist/server/lib/router-utils/router-server-context.js +26 -0
  697. package/board-dist/node_modules/next/dist/server/lib/router-utils/typegen.js +858 -0
  698. package/board-dist/node_modules/next/dist/server/lib/router-utils/types.js +6 -0
  699. package/board-dist/node_modules/next/dist/server/lib/server-action-request-meta.js +53 -0
  700. package/board-dist/node_modules/next/dist/server/lib/server-ipc/utils.js +83 -0
  701. package/board-dist/node_modules/next/dist/server/lib/source-maps.js +196 -0
  702. package/board-dist/node_modules/next/dist/server/lib/start-server.js +494 -0
  703. package/board-dist/node_modules/next/dist/server/lib/streaming-metadata.js +38 -0
  704. package/board-dist/node_modules/next/dist/server/lib/to-route.js +37 -0
  705. package/board-dist/node_modules/next/dist/server/lib/trace/constants.js +203 -0
  706. package/board-dist/node_modules/next/dist/server/lib/trace/tracer.js +280 -0
  707. package/board-dist/node_modules/next/dist/server/lib/trace/utils.js +16 -0
  708. package/board-dist/node_modules/next/dist/server/lib/types.js +6 -0
  709. package/board-dist/node_modules/next/dist/server/lib/utils.js +278 -0
  710. package/board-dist/node_modules/next/dist/server/lib/worker-utils.js +36 -0
  711. package/board-dist/node_modules/next/dist/server/load-components.js +179 -0
  712. package/board-dist/node_modules/next/dist/server/load-default-error-components.js +41 -0
  713. package/board-dist/node_modules/next/dist/server/load-manifest.external.js +117 -0
  714. package/board-dist/node_modules/next/dist/server/match-bundle.js +25 -0
  715. package/board-dist/node_modules/next/dist/server/mcp/get-mcp-middleware.js +49 -0
  716. package/board-dist/node_modules/next/dist/server/mcp/get-or-create-mcp-server.js +41 -0
  717. package/board-dist/node_modules/next/dist/server/mcp/mcp-telemetry-tracker.js +82 -0
  718. package/board-dist/node_modules/next/dist/server/mcp/tools/get-errors.js +114 -0
  719. package/board-dist/node_modules/next/dist/server/mcp/tools/get-logs.js +67 -0
  720. package/board-dist/node_modules/next/dist/server/mcp/tools/get-page-metadata.js +188 -0
  721. package/board-dist/node_modules/next/dist/server/mcp/tools/get-project-metadata.js +59 -0
  722. package/board-dist/node_modules/next/dist/server/mcp/tools/get-routes.js +136 -0
  723. package/board-dist/node_modules/next/dist/server/mcp/tools/get-server-action-by-id.js +121 -0
  724. package/board-dist/node_modules/next/dist/server/mcp/tools/next-instance-error-state.js +31 -0
  725. package/board-dist/node_modules/next/dist/server/mcp/tools/utils/browser-communication.js +90 -0
  726. package/board-dist/node_modules/next/dist/server/mcp/tools/utils/format-errors.js +137 -0
  727. package/board-dist/node_modules/next/dist/server/next-server.js +1429 -0
  728. package/board-dist/node_modules/next/dist/server/next-typescript.js +13 -0
  729. package/board-dist/node_modules/next/dist/server/next.js +455 -0
  730. package/board-dist/node_modules/next/dist/server/node-environment-baseline.js +25 -0
  731. package/board-dist/node_modules/next/dist/server/node-environment-extensions/console-dim.external.js +301 -0
  732. package/board-dist/node_modules/next/dist/server/node-environment-extensions/console-exit.js +49 -0
  733. package/board-dist/node_modules/next/dist/server/node-environment-extensions/console-file.js +56 -0
  734. package/board-dist/node_modules/next/dist/server/node-environment-extensions/date.js +52 -0
  735. package/board-dist/node_modules/next/dist/server/node-environment-extensions/error-inspect.js +8 -0
  736. package/board-dist/node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.js +577 -0
  737. package/board-dist/node_modules/next/dist/server/node-environment-extensions/global-behaviors.js +33 -0
  738. package/board-dist/node_modules/next/dist/server/node-environment-extensions/io-utils.js +195 -0
  739. package/board-dist/node_modules/next/dist/server/node-environment-extensions/node-crypto.js +103 -0
  740. package/board-dist/node_modules/next/dist/server/node-environment-extensions/process-error-handlers.js +91 -0
  741. package/board-dist/node_modules/next/dist/server/node-environment-extensions/random.js +28 -0
  742. package/board-dist/node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.js +508 -0
  743. package/board-dist/node_modules/next/dist/server/node-environment-extensions/web-crypto.js +45 -0
  744. package/board-dist/node_modules/next/dist/server/node-environment.js +19 -0
  745. package/board-dist/node_modules/next/dist/server/node-polyfill-crypto.js +21 -0
  746. package/board-dist/node_modules/next/dist/server/normalizers/absolute-filename-normalizer.js +33 -0
  747. package/board-dist/node_modules/next/dist/server/normalizers/built/app/app-bundle-path-normalizer.js +54 -0
  748. package/board-dist/node_modules/next/dist/server/normalizers/built/app/app-filename-normalizer.js +22 -0
  749. package/board-dist/node_modules/next/dist/server/normalizers/built/app/app-page-normalizer.js +40 -0
  750. package/board-dist/node_modules/next/dist/server/normalizers/built/app/app-pathname-normalizer.js +55 -0
  751. package/board-dist/node_modules/next/dist/server/normalizers/built/app/index.js +42 -0
  752. package/board-dist/node_modules/next/dist/server/normalizers/built/pages/index.js +44 -0
  753. package/board-dist/node_modules/next/dist/server/normalizers/built/pages/pages-bundle-path-normalizer.js +55 -0
  754. package/board-dist/node_modules/next/dist/server/normalizers/built/pages/pages-filename-normalizer.js +22 -0
  755. package/board-dist/node_modules/next/dist/server/normalizers/built/pages/pages-page-normalizer.js +19 -0
  756. package/board-dist/node_modules/next/dist/server/normalizers/built/pages/pages-pathname-normalizer.js +19 -0
  757. package/board-dist/node_modules/next/dist/server/normalizers/locale-route-normalizer.js +26 -0
  758. package/board-dist/node_modules/next/dist/server/normalizers/normalizer.js +6 -0
  759. package/board-dist/node_modules/next/dist/server/normalizers/normalizers.js +23 -0
  760. package/board-dist/node_modules/next/dist/server/normalizers/prefixing-normalizer.js +26 -0
  761. package/board-dist/node_modules/next/dist/server/normalizers/request/base-path.js +25 -0
  762. package/board-dist/node_modules/next/dist/server/normalizers/request/next-data.js +38 -0
  763. package/board-dist/node_modules/next/dist/server/normalizers/request/pathname-normalizer.js +6 -0
  764. package/board-dist/node_modules/next/dist/server/normalizers/request/prefix.js +39 -0
  765. package/board-dist/node_modules/next/dist/server/normalizers/request/rsc.js +19 -0
  766. package/board-dist/node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.js +33 -0
  767. package/board-dist/node_modules/next/dist/server/normalizers/request/suffix.js +27 -0
  768. package/board-dist/node_modules/next/dist/server/normalizers/underscore-normalizer.js +17 -0
  769. package/board-dist/node_modules/next/dist/server/normalizers/wrap-normalizer-fn.js +17 -0
  770. package/board-dist/node_modules/next/dist/server/og/image-response.js +53 -0
  771. package/board-dist/node_modules/next/dist/server/patch-error-inspect.js +453 -0
  772. package/board-dist/node_modules/next/dist/server/pipe-readable.js +140 -0
  773. package/board-dist/node_modules/next/dist/server/post-process.js +39 -0
  774. package/board-dist/node_modules/next/dist/server/render-result.js +204 -0
  775. package/board-dist/node_modules/next/dist/server/render.js +1148 -0
  776. package/board-dist/node_modules/next/dist/server/request/connection.js +133 -0
  777. package/board-dist/node_modules/next/dist/server/request/cookies.js +235 -0
  778. package/board-dist/node_modules/next/dist/server/request/draft-mode.js +230 -0
  779. package/board-dist/node_modules/next/dist/server/request/fallback-params.js +95 -0
  780. package/board-dist/node_modules/next/dist/server/request/headers.js +229 -0
  781. package/board-dist/node_modules/next/dist/server/request/params.js +527 -0
  782. package/board-dist/node_modules/next/dist/server/request/pathname.js +119 -0
  783. package/board-dist/node_modules/next/dist/server/request/root-params.js +194 -0
  784. package/board-dist/node_modules/next/dist/server/request/search-params.js +526 -0
  785. package/board-dist/node_modules/next/dist/server/request/utils.js +51 -0
  786. package/board-dist/node_modules/next/dist/server/request-meta.js +55 -0
  787. package/board-dist/node_modules/next/dist/server/require-hook.js +82 -0
  788. package/board-dist/node_modules/next/dist/server/require.js +109 -0
  789. package/board-dist/node_modules/next/dist/server/response-cache/index.js +311 -0
  790. package/board-dist/node_modules/next/dist/server/response-cache/types.js +41 -0
  791. package/board-dist/node_modules/next/dist/server/response-cache/utils.js +104 -0
  792. package/board-dist/node_modules/next/dist/server/response-cache/web.js +101 -0
  793. package/board-dist/node_modules/next/dist/server/resume-data-cache/cache-store.js +96 -0
  794. package/board-dist/node_modules/next/dist/server/resume-data-cache/resume-data-cache.js +124 -0
  795. package/board-dist/node_modules/next/dist/server/revalidation-utils.js +157 -0
  796. package/board-dist/node_modules/next/dist/server/route-definitions/app-page-route-definition.js +16 -0
  797. package/board-dist/node_modules/next/dist/server/route-definitions/app-route-route-definition.js +6 -0
  798. package/board-dist/node_modules/next/dist/server/route-definitions/locale-route-definition.js +6 -0
  799. package/board-dist/node_modules/next/dist/server/route-definitions/pages-api-route-definition.js +6 -0
  800. package/board-dist/node_modules/next/dist/server/route-definitions/pages-route-definition.js +6 -0
  801. package/board-dist/node_modules/next/dist/server/route-definitions/route-definition.js +6 -0
  802. package/board-dist/node_modules/next/dist/server/route-kind.js +32 -0
  803. package/board-dist/node_modules/next/dist/server/route-matcher-managers/default-route-matcher-manager.js +239 -0
  804. package/board-dist/node_modules/next/dist/server/route-matcher-managers/dev-route-matcher-manager.js +120 -0
  805. package/board-dist/node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.js +6 -0
  806. package/board-dist/node_modules/next/dist/server/route-matcher-providers/app-page-route-matcher-provider.js +55 -0
  807. package/board-dist/node_modules/next/dist/server/route-matcher-providers/app-route-route-matcher-provider.js +43 -0
  808. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-page-route-matcher-provider.js +91 -0
  809. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-app-route-route-matcher-provider.js +112 -0
  810. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-api-route-matcher-provider.js +77 -0
  811. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/dev-pages-route-matcher-provider.js +77 -0
  812. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/file-cache-route-matcher-provider.js +28 -0
  813. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/batched-file-reader.js +106 -0
  814. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/default-file-reader.js +42 -0
  815. package/board-dist/node_modules/next/dist/server/route-matcher-providers/dev/helpers/file-reader/file-reader.js +6 -0
  816. package/board-dist/node_modules/next/dist/server/route-matcher-providers/helpers/cached-route-matcher-provider.js +30 -0
  817. package/board-dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/manifest-loader.js +6 -0
  818. package/board-dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.js +34 -0
  819. package/board-dist/node_modules/next/dist/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.js +20 -0
  820. package/board-dist/node_modules/next/dist/server/route-matcher-providers/manifest-route-matcher-provider.js +21 -0
  821. package/board-dist/node_modules/next/dist/server/route-matcher-providers/pages-api-route-matcher-provider.js +55 -0
  822. package/board-dist/node_modules/next/dist/server/route-matcher-providers/pages-route-matcher-provider.js +64 -0
  823. package/board-dist/node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.js +6 -0
  824. package/board-dist/node_modules/next/dist/server/route-matchers/app-page-route-matcher.js +18 -0
  825. package/board-dist/node_modules/next/dist/server/route-matchers/app-route-route-matcher.js +15 -0
  826. package/board-dist/node_modules/next/dist/server/route-matchers/locale-route-matcher.js +68 -0
  827. package/board-dist/node_modules/next/dist/server/route-matchers/pages-api-route-matcher.js +30 -0
  828. package/board-dist/node_modules/next/dist/server/route-matchers/pages-route-matcher.js +30 -0
  829. package/board-dist/node_modules/next/dist/server/route-matchers/route-matcher.js +54 -0
  830. package/board-dist/node_modules/next/dist/server/route-matches/app-page-route-match.js +6 -0
  831. package/board-dist/node_modules/next/dist/server/route-matches/app-route-route-match.js +6 -0
  832. package/board-dist/node_modules/next/dist/server/route-matches/locale-route-match.js +6 -0
  833. package/board-dist/node_modules/next/dist/server/route-matches/pages-api-route-match.js +16 -0
  834. package/board-dist/node_modules/next/dist/server/route-matches/pages-route-match.js +6 -0
  835. package/board-dist/node_modules/next/dist/server/route-matches/route-match.js +6 -0
  836. package/board-dist/node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.js +51 -0
  837. package/board-dist/node_modules/next/dist/server/route-modules/app-page/module.compiled.js +36 -0
  838. package/board-dist/node_modules/next/dist/server/route-modules/app-page/module.js +162 -0
  839. package/board-dist/node_modules/next/dist/server/route-modules/app-page/module.render.js +24 -0
  840. package/board-dist/node_modules/next/dist/server/route-modules/app-page/normalize-request-url.js +25 -0
  841. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/app-router-context.js +4 -0
  842. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.js +87 -0
  843. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/head-manager-context.js +4 -0
  844. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/hooks-client-context.js +4 -0
  845. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/image-config-context.js +4 -0
  846. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/router-context.js +4 -0
  847. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/contexts/server-inserted-html.js +4 -0
  848. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.js +140 -0
  849. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-compiler-runtime.js +4 -0
  850. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-dom.js +4 -0
  851. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-dev-runtime.js +4 -0
  852. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-jsx-runtime.js +4 -0
  853. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-server.js +4 -0
  854. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-turbopack-static.js +4 -0
  855. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-server.js +4 -0
  856. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react-server-dom-webpack-static.js +4 -0
  857. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/rsc/react.js +4 -0
  858. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.js +125 -0
  859. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-compiler-runtime.js +4 -0
  860. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom-server.js +4 -0
  861. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-dom.js +4 -0
  862. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-dev-runtime.js +4 -0
  863. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-jsx-runtime.js +4 -0
  864. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-turbopack-client.js +4 -0
  865. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react-server-dom-webpack-client.js +4 -0
  866. package/board-dist/node_modules/next/dist/server/route-modules/app-page/vendored/ssr/react.js +4 -0
  867. package/board-dist/node_modules/next/dist/server/route-modules/app-route/helpers/auto-implement-methods.js +85 -0
  868. package/board-dist/node_modules/next/dist/server/route-modules/app-route/helpers/clean-url.js +24 -0
  869. package/board-dist/node_modules/next/dist/server/route-modules/app-route/helpers/get-pathname-from-absolute-path.js +29 -0
  870. package/board-dist/node_modules/next/dist/server/route-modules/app-route/helpers/is-static-gen-enabled.js +15 -0
  871. package/board-dist/node_modules/next/dist/server/route-modules/app-route/helpers/parsed-url-query-to-params.js +20 -0
  872. package/board-dist/node_modules/next/dist/server/route-modules/app-route/module.compiled.js +36 -0
  873. package/board-dist/node_modules/next/dist/server/route-modules/app-route/module.js +915 -0
  874. package/board-dist/node_modules/next/dist/server/route-modules/app-route/shared-modules.js +56 -0
  875. package/board-dist/node_modules/next/dist/server/route-modules/checks.js +45 -0
  876. package/board-dist/node_modules/next/dist/server/route-modules/pages/builtin/_error.js +100 -0
  877. package/board-dist/node_modules/next/dist/server/route-modules/pages/module.compiled.js +20 -0
  878. package/board-dist/node_modules/next/dist/server/route-modules/pages/module.js +92 -0
  879. package/board-dist/node_modules/next/dist/server/route-modules/pages/module.render.js +24 -0
  880. package/board-dist/node_modules/next/dist/server/route-modules/pages/pages-handler.js +545 -0
  881. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/app-router-context.js +4 -0
  882. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.js +102 -0
  883. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/head-manager-context.js +4 -0
  884. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/hooks-client-context.js +4 -0
  885. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/html-context.js +4 -0
  886. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/image-config-context.js +4 -0
  887. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable-context.js +4 -0
  888. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/loadable.js +4 -0
  889. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/router-context.js +4 -0
  890. package/board-dist/node_modules/next/dist/server/route-modules/pages/vendored/contexts/server-inserted-html.js +4 -0
  891. package/board-dist/node_modules/next/dist/server/route-modules/pages-api/module.compiled.js +20 -0
  892. package/board-dist/node_modules/next/dist/server/route-modules/pages-api/module.js +58 -0
  893. package/board-dist/node_modules/next/dist/server/route-modules/route-module.js +660 -0
  894. package/board-dist/node_modules/next/dist/server/runtime-reacts.external.js +46 -0
  895. package/board-dist/node_modules/next/dist/server/send-payload.js +88 -0
  896. package/board-dist/node_modules/next/dist/server/send-response.js +70 -0
  897. package/board-dist/node_modules/next/dist/server/serve-static.js +66 -0
  898. package/board-dist/node_modules/next/dist/server/server-route-utils.js +30 -0
  899. package/board-dist/node_modules/next/dist/server/server-utils.js +340 -0
  900. package/board-dist/node_modules/next/dist/server/setup-http-agent-env.js +31 -0
  901. package/board-dist/node_modules/next/dist/server/stream-utils/encoded-tags.js +122 -0
  902. package/board-dist/node_modules/next/dist/server/stream-utils/node-web-streams-helper.js +918 -0
  903. package/board-dist/node_modules/next/dist/server/stream-utils/uint8array-helpers.js +74 -0
  904. package/board-dist/node_modules/next/dist/server/typescript/constant.js +98 -0
  905. package/board-dist/node_modules/next/dist/server/typescript/index.js +199 -0
  906. package/board-dist/node_modules/next/dist/server/typescript/rules/client-boundary.js +97 -0
  907. package/board-dist/node_modules/next/dist/server/typescript/rules/config.js +512 -0
  908. package/board-dist/node_modules/next/dist/server/typescript/rules/entry.js +149 -0
  909. package/board-dist/node_modules/next/dist/server/typescript/rules/error.js +38 -0
  910. package/board-dist/node_modules/next/dist/server/typescript/rules/metadata.js +234 -0
  911. package/board-dist/node_modules/next/dist/server/typescript/rules/server-boundary.js +115 -0
  912. package/board-dist/node_modules/next/dist/server/typescript/rules/server.js +79 -0
  913. package/board-dist/node_modules/next/dist/server/typescript/utils.js +212 -0
  914. package/board-dist/node_modules/next/dist/server/use-cache/cache-life.js +163 -0
  915. package/board-dist/node_modules/next/dist/server/use-cache/cache-tag.js +52 -0
  916. package/board-dist/node_modules/next/dist/server/use-cache/constants.js +28 -0
  917. package/board-dist/node_modules/next/dist/server/use-cache/handlers.js +121 -0
  918. package/board-dist/node_modules/next/dist/server/use-cache/use-cache-errors.js +36 -0
  919. package/board-dist/node_modules/next/dist/server/use-cache/use-cache-wrapper.js +1588 -0
  920. package/board-dist/node_modules/next/dist/server/utils.js +73 -0
  921. package/board-dist/node_modules/next/dist/server/web/adapter.js +395 -0
  922. package/board-dist/node_modules/next/dist/server/web/edge-route-module-wrapper.js +124 -0
  923. package/board-dist/node_modules/next/dist/server/web/error.js +54 -0
  924. package/board-dist/node_modules/next/dist/server/web/exports/index.js +56 -0
  925. package/board-dist/node_modules/next/dist/server/web/get-edge-preview-props.js +23 -0
  926. package/board-dist/node_modules/next/dist/server/web/globals.js +128 -0
  927. package/board-dist/node_modules/next/dist/server/web/http.js +39 -0
  928. package/board-dist/node_modules/next/dist/server/web/internal-edge-wait-until.js +64 -0
  929. package/board-dist/node_modules/next/dist/server/web/next-url.js +199 -0
  930. package/board-dist/node_modules/next/dist/server/web/sandbox/context.js +462 -0
  931. package/board-dist/node_modules/next/dist/server/web/sandbox/fetch-inline-assets.js +35 -0
  932. package/board-dist/node_modules/next/dist/server/web/sandbox/index.js +28 -0
  933. package/board-dist/node_modules/next/dist/server/web/sandbox/resource-managers.js +88 -0
  934. package/board-dist/node_modules/next/dist/server/web/sandbox/sandbox.js +137 -0
  935. package/board-dist/node_modules/next/dist/server/web/spec-extension/adapters/headers.js +192 -0
  936. package/board-dist/node_modules/next/dist/server/web/spec-extension/adapters/next-request.js +142 -0
  937. package/board-dist/node_modules/next/dist/server/web/spec-extension/adapters/reflect.js +30 -0
  938. package/board-dist/node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.js +211 -0
  939. package/board-dist/node_modules/next/dist/server/web/spec-extension/cookies.js +29 -0
  940. package/board-dist/node_modules/next/dist/server/web/spec-extension/fetch-event.js +98 -0
  941. package/board-dist/node_modules/next/dist/server/web/spec-extension/image-response.js +22 -0
  942. package/board-dist/node_modules/next/dist/server/web/spec-extension/request.js +99 -0
  943. package/board-dist/node_modules/next/dist/server/web/spec-extension/response.js +136 -0
  944. package/board-dist/node_modules/next/dist/server/web/spec-extension/revalidate.js +215 -0
  945. package/board-dist/node_modules/next/dist/server/web/spec-extension/unstable-cache.js +293 -0
  946. package/board-dist/node_modules/next/dist/server/web/spec-extension/unstable-no-store.js +51 -0
  947. package/board-dist/node_modules/next/dist/server/web/spec-extension/url-pattern.js +14 -0
  948. package/board-dist/node_modules/next/dist/server/web/spec-extension/user-agent.js +46 -0
  949. package/board-dist/node_modules/next/dist/server/web/types.js +6 -0
  950. package/board-dist/node_modules/next/dist/server/web/utils.js +151 -0
  951. package/board-dist/node_modules/next/dist/server/web/web-on-close.js +87 -0
  952. package/board-dist/node_modules/next/dist/shared/lib/action-revalidation-kind.js +31 -0
  953. package/board-dist/node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js +50 -0
  954. package/board-dist/node_modules/next/dist/shared/lib/app-router-types.js +46 -0
  955. package/board-dist/node_modules/next/dist/shared/lib/constants.js +448 -0
  956. package/board-dist/node_modules/next/dist/shared/lib/deep-freeze.js +30 -0
  957. package/board-dist/node_modules/next/dist/shared/lib/deployment-id.js +63 -0
  958. package/board-dist/node_modules/next/dist/shared/lib/dset.js +34 -0
  959. package/board-dist/node_modules/next/dist/shared/lib/encode-uri-path.js +15 -0
  960. package/board-dist/node_modules/next/dist/shared/lib/entry-constants.js +36 -0
  961. package/board-dist/node_modules/next/dist/shared/lib/error-source.js +36 -0
  962. package/board-dist/node_modules/next/dist/shared/lib/errors/canary-only-config-error.js +39 -0
  963. package/board-dist/node_modules/next/dist/shared/lib/errors/code-frame.js +20 -0
  964. package/board-dist/node_modules/next/dist/shared/lib/errors/constants.js +19 -0
  965. package/board-dist/node_modules/next/dist/shared/lib/errors/empty-generate-static-params-error.js +24 -0
  966. package/board-dist/node_modules/next/dist/shared/lib/errors/hard-deprecated-config-error.js +20 -0
  967. package/board-dist/node_modules/next/dist/shared/lib/escape-regexp.js +22 -0
  968. package/board-dist/node_modules/next/dist/shared/lib/get-hostname.js +23 -0
  969. package/board-dist/node_modules/next/dist/shared/lib/hash.js +42 -0
  970. package/board-dist/node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js +18 -0
  971. package/board-dist/node_modules/next/dist/shared/lib/head.js +163 -0
  972. package/board-dist/node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.js +60 -0
  973. package/board-dist/node_modules/next/dist/shared/lib/html-context.shared-runtime.js +40 -0
  974. package/board-dist/node_modules/next/dist/shared/lib/htmlescape.js +52 -0
  975. package/board-dist/node_modules/next/dist/shared/lib/i18n/detect-domain-locale.js +25 -0
  976. package/board-dist/node_modules/next/dist/shared/lib/i18n/get-locale-redirect.js +59 -0
  977. package/board-dist/node_modules/next/dist/shared/lib/i18n/normalize-locale-path.js +54 -0
  978. package/board-dist/node_modules/next/dist/shared/lib/image-blur-svg.js +22 -0
  979. package/board-dist/node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js +19 -0
  980. package/board-dist/node_modules/next/dist/shared/lib/image-config.js +77 -0
  981. package/board-dist/node_modules/next/dist/shared/lib/invariant-error.js +18 -0
  982. package/board-dist/node_modules/next/dist/shared/lib/is-plain-object.js +42 -0
  983. package/board-dist/node_modules/next/dist/shared/lib/is-thenable.js +20 -0
  984. package/board-dist/node_modules/next/dist/shared/lib/isomorphic/path.js +14 -0
  985. package/board-dist/node_modules/next/dist/shared/lib/lazy-dynamic/bailout-to-csr.js +37 -0
  986. package/board-dist/node_modules/next/dist/shared/lib/loadable-context.shared-runtime.js +19 -0
  987. package/board-dist/node_modules/next/dist/shared/lib/loadable.shared-runtime.js +246 -0
  988. package/board-dist/node_modules/next/dist/shared/lib/match-local-pattern.js +46 -0
  989. package/board-dist/node_modules/next/dist/shared/lib/match-remote-pattern.js +63 -0
  990. package/board-dist/node_modules/next/dist/shared/lib/modern-browserslist-target.js +15 -0
  991. package/board-dist/node_modules/next/dist/shared/lib/no-fallback-error.external.js +18 -0
  992. package/board-dist/node_modules/next/dist/shared/lib/normalized-asset-prefix.js +28 -0
  993. package/board-dist/node_modules/next/dist/shared/lib/page-path/absolute-path-to-page.js +26 -0
  994. package/board-dist/node_modules/next/dist/shared/lib/page-path/denormalize-page-path.js +18 -0
  995. package/board-dist/node_modules/next/dist/shared/lib/page-path/ensure-leading-slash.js +18 -0
  996. package/board-dist/node_modules/next/dist/shared/lib/page-path/get-page-paths.js +40 -0
  997. package/board-dist/node_modules/next/dist/shared/lib/page-path/normalize-data-path.js +23 -0
  998. package/board-dist/node_modules/next/dist/shared/lib/page-path/normalize-page-path.js +26 -0
  999. package/board-dist/node_modules/next/dist/shared/lib/page-path/normalize-path-sep.js +19 -0
  1000. package/board-dist/node_modules/next/dist/shared/lib/page-path/remove-page-path-tail.js +20 -0
  1001. package/board-dist/node_modules/next/dist/shared/lib/promise-with-resolvers.js +26 -0
  1002. package/board-dist/node_modules/next/dist/shared/lib/router/adapters.js +136 -0
  1003. package/board-dist/node_modules/next/dist/shared/lib/router/routes/app.js +134 -0
  1004. package/board-dist/node_modules/next/dist/shared/lib/router/utils/add-locale.js +28 -0
  1005. package/board-dist/node_modules/next/dist/shared/lib/router/utils/add-path-prefix.js +20 -0
  1006. package/board-dist/node_modules/next/dist/shared/lib/router/utils/add-path-suffix.js +20 -0
  1007. package/board-dist/node_modules/next/dist/shared/lib/router/utils/app-paths.js +62 -0
  1008. package/board-dist/node_modules/next/dist/shared/lib/router/utils/as-path-to-search-params.js +17 -0
  1009. package/board-dist/node_modules/next/dist/shared/lib/router/utils/cache-busting-search-param.js +70 -0
  1010. package/board-dist/node_modules/next/dist/shared/lib/router/utils/escape-path-delimiters.js +16 -0
  1011. package/board-dist/node_modules/next/dist/shared/lib/router/utils/format-next-pathname-info.js +27 -0
  1012. package/board-dist/node_modules/next/dist/shared/lib/router/utils/format-url.js +111 -0
  1013. package/board-dist/node_modules/next/dist/shared/lib/router/utils/get-dynamic-param.js +174 -0
  1014. package/board-dist/node_modules/next/dist/shared/lib/router/utils/get-next-pathname-info.js +52 -0
  1015. package/board-dist/node_modules/next/dist/shared/lib/router/utils/get-route-from-asset-path.js +25 -0
  1016. package/board-dist/node_modules/next/dist/shared/lib/router/utils/get-segment-param.js +90 -0
  1017. package/board-dist/node_modules/next/dist/shared/lib/router/utils/html-bots.js +17 -0
  1018. package/board-dist/node_modules/next/dist/shared/lib/router/utils/index.js +30 -0
  1019. package/board-dist/node_modules/next/dist/shared/lib/router/utils/interception-prefix-from-param-type.js +33 -0
  1020. package/board-dist/node_modules/next/dist/shared/lib/router/utils/interception-routes.js +108 -0
  1021. package/board-dist/node_modules/next/dist/shared/lib/router/utils/is-bot.js +57 -0
  1022. package/board-dist/node_modules/next/dist/shared/lib/router/utils/is-dynamic.js +26 -0
  1023. package/board-dist/node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.js +31 -0
  1024. package/board-dist/node_modules/next/dist/shared/lib/router/utils/parse-loader-tree.js +30 -0
  1025. package/board-dist/node_modules/next/dist/shared/lib/router/utils/parse-path.js +33 -0
  1026. package/board-dist/node_modules/next/dist/shared/lib/router/utils/parse-relative-url.js +43 -0
  1027. package/board-dist/node_modules/next/dist/shared/lib/router/utils/parse-url.js +38 -0
  1028. package/board-dist/node_modules/next/dist/shared/lib/router/utils/path-has-prefix.js +20 -0
  1029. package/board-dist/node_modules/next/dist/shared/lib/router/utils/path-match.js +49 -0
  1030. package/board-dist/node_modules/next/dist/shared/lib/router/utils/prepare-destination.js +292 -0
  1031. package/board-dist/node_modules/next/dist/shared/lib/router/utils/querystring.js +79 -0
  1032. package/board-dist/node_modules/next/dist/shared/lib/router/utils/relativize-url.js +40 -0
  1033. package/board-dist/node_modules/next/dist/shared/lib/router/utils/remove-path-prefix.js +39 -0
  1034. package/board-dist/node_modules/next/dist/shared/lib/router/utils/remove-trailing-slash.js +21 -0
  1035. package/board-dist/node_modules/next/dist/shared/lib/router/utils/resolve-param-value.js +116 -0
  1036. package/board-dist/node_modules/next/dist/shared/lib/router/utils/route-match-utils.js +113 -0
  1037. package/board-dist/node_modules/next/dist/shared/lib/router/utils/route-matcher.js +45 -0
  1038. package/board-dist/node_modules/next/dist/shared/lib/router/utils/route-regex.js +256 -0
  1039. package/board-dist/node_modules/next/dist/shared/lib/router/utils/sorted-routes.js +244 -0
  1040. package/board-dist/node_modules/next/dist/shared/lib/router-context.shared-runtime.js +18 -0
  1041. package/board-dist/node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.js +99 -0
  1042. package/board-dist/node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.js +32 -0
  1043. package/board-dist/node_modules/next/dist/shared/lib/segment.js +102 -0
  1044. package/board-dist/node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.js +35 -0
  1045. package/board-dist/node_modules/next/dist/shared/lib/server-reference-info.js +56 -0
  1046. package/board-dist/node_modules/next/dist/shared/lib/side-effect.js +63 -0
  1047. package/board-dist/node_modules/next/dist/shared/lib/size-limit.js +40 -0
  1048. package/board-dist/node_modules/next/dist/shared/lib/turbopack/internal-error.js +53 -0
  1049. package/board-dist/node_modules/next/dist/shared/lib/utils/reflect-utils.js +69 -0
  1050. package/board-dist/node_modules/next/dist/shared/lib/utils/warn-once.js +22 -0
  1051. package/board-dist/node_modules/next/dist/shared/lib/utils.js +207 -0
  1052. package/board-dist/node_modules/next/dist/shared/lib/zod.js +101 -0
  1053. package/board-dist/node_modules/next/dist/telemetry/anonymous-meta.js +89 -0
  1054. package/board-dist/node_modules/next/dist/telemetry/detached-flush.js +56 -0
  1055. package/board-dist/node_modules/next/dist/telemetry/events/build.js +174 -0
  1056. package/board-dist/node_modules/next/dist/telemetry/events/index.js +41 -0
  1057. package/board-dist/node_modules/next/dist/telemetry/events/plugins.js +51 -0
  1058. package/board-dist/node_modules/next/dist/telemetry/events/swc-load-failure.js +55 -0
  1059. package/board-dist/node_modules/next/dist/telemetry/events/version.js +66 -0
  1060. package/board-dist/node_modules/next/dist/telemetry/flush-telemetry.js +19 -0
  1061. package/board-dist/node_modules/next/dist/telemetry/post-telemetry-payload.js +48 -0
  1062. package/board-dist/node_modules/next/dist/telemetry/project-id.js +48 -0
  1063. package/board-dist/node_modules/next/dist/telemetry/storage.js +301 -0
  1064. package/board-dist/node_modules/next/dist/trace/index.js +58 -0
  1065. package/board-dist/node_modules/next/dist/trace/report/index.js +37 -0
  1066. package/board-dist/node_modules/next/dist/trace/report/to-json-build.js +40 -0
  1067. package/board-dist/node_modules/next/dist/trace/report/to-json.js +165 -0
  1068. package/board-dist/node_modules/next/dist/trace/report/to-telemetry.js +36 -0
  1069. package/board-dist/node_modules/next/dist/trace/shared.js +39 -0
  1070. package/board-dist/node_modules/next/dist/trace/trace.js +211 -0
  1071. package/board-dist/node_modules/next/package.json +136 -0
  1072. package/board-dist/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
  1073. package/board-dist/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
  1074. package/board-dist/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
  1075. package/board-dist/node_modules/react/cjs/react.development.js +1284 -0
  1076. package/board-dist/node_modules/react/cjs/react.production.js +542 -0
  1077. package/board-dist/node_modules/react/compiler-runtime.js +14 -0
  1078. package/board-dist/node_modules/react/index.js +7 -0
  1079. package/board-dist/node_modules/react/jsx-dev-runtime.js +7 -0
  1080. package/board-dist/node_modules/react/jsx-runtime.js +7 -0
  1081. package/board-dist/node_modules/react/package.json +51 -0
  1082. package/board-dist/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +6603 -0
  1083. package/board-dist/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +6692 -0
  1084. package/board-dist/node_modules/react-dom/cjs/react-dom-server.browser.production.js +7410 -0
  1085. package/board-dist/node_modules/react-dom/cjs/react-dom-server.edge.production.js +7512 -0
  1086. package/board-dist/node_modules/react-dom/cjs/react-dom-server.node.production.js +7707 -0
  1087. package/board-dist/node_modules/react-dom/cjs/react-dom.production.js +210 -0
  1088. package/board-dist/node_modules/react-dom/index.js +38 -0
  1089. package/board-dist/node_modules/react-dom/package.json +117 -0
  1090. package/board-dist/node_modules/react-dom/server.browser.js +16 -0
  1091. package/board-dist/node_modules/react-dom/server.edge.js +17 -0
  1092. package/board-dist/node_modules/react-dom/server.node.js +18 -0
  1093. package/board-dist/node_modules/react-dom/static.node.js +14 -0
  1094. package/board-dist/node_modules/sharp/lib/channel.js +177 -0
  1095. package/board-dist/node_modules/sharp/lib/colour.js +195 -0
  1096. package/board-dist/node_modules/sharp/lib/composite.js +212 -0
  1097. package/board-dist/node_modules/sharp/lib/constructor.js +499 -0
  1098. package/board-dist/node_modules/sharp/lib/index.js +16 -0
  1099. package/board-dist/node_modules/sharp/lib/input.js +809 -0
  1100. package/board-dist/node_modules/sharp/lib/is.js +143 -0
  1101. package/board-dist/node_modules/sharp/lib/libvips.js +207 -0
  1102. package/board-dist/node_modules/sharp/lib/operation.js +1016 -0
  1103. package/board-dist/node_modules/sharp/lib/output.js +1666 -0
  1104. package/board-dist/node_modules/sharp/lib/resize.js +595 -0
  1105. package/board-dist/node_modules/sharp/lib/sharp.js +121 -0
  1106. package/board-dist/node_modules/sharp/lib/utility.js +291 -0
  1107. package/board-dist/node_modules/sharp/node_modules/semver/classes/comparator.js +143 -0
  1108. package/board-dist/node_modules/sharp/node_modules/semver/classes/range.js +577 -0
  1109. package/board-dist/node_modules/sharp/node_modules/semver/classes/semver.js +350 -0
  1110. package/board-dist/node_modules/sharp/node_modules/semver/functions/cmp.js +54 -0
  1111. package/board-dist/node_modules/sharp/node_modules/semver/functions/coerce.js +62 -0
  1112. package/board-dist/node_modules/sharp/node_modules/semver/functions/compare.js +7 -0
  1113. package/board-dist/node_modules/sharp/node_modules/semver/functions/eq.js +5 -0
  1114. package/board-dist/node_modules/sharp/node_modules/semver/functions/gt.js +5 -0
  1115. package/board-dist/node_modules/sharp/node_modules/semver/functions/gte.js +5 -0
  1116. package/board-dist/node_modules/sharp/node_modules/semver/functions/lt.js +5 -0
  1117. package/board-dist/node_modules/sharp/node_modules/semver/functions/lte.js +5 -0
  1118. package/board-dist/node_modules/sharp/node_modules/semver/functions/neq.js +5 -0
  1119. package/board-dist/node_modules/sharp/node_modules/semver/functions/parse.js +18 -0
  1120. package/board-dist/node_modules/sharp/node_modules/semver/functions/satisfies.js +12 -0
  1121. package/board-dist/node_modules/sharp/node_modules/semver/internal/constants.js +37 -0
  1122. package/board-dist/node_modules/sharp/node_modules/semver/internal/debug.js +11 -0
  1123. package/board-dist/node_modules/sharp/node_modules/semver/internal/identifiers.js +29 -0
  1124. package/board-dist/node_modules/sharp/node_modules/semver/internal/lrucache.js +42 -0
  1125. package/board-dist/node_modules/sharp/node_modules/semver/internal/parse-options.js +17 -0
  1126. package/board-dist/node_modules/sharp/node_modules/semver/internal/re.js +223 -0
  1127. package/board-dist/node_modules/sharp/node_modules/semver/package.json +78 -0
  1128. package/board-dist/node_modules/sharp/package.json +202 -0
  1129. package/board-dist/node_modules/styled-jsx/dist/index/index.js +499 -0
  1130. package/board-dist/node_modules/styled-jsx/index.js +1 -0
  1131. package/board-dist/node_modules/styled-jsx/package.json +132 -0
  1132. package/board-dist/node_modules/styled-jsx/style.js +1 -0
  1133. package/board-dist/package.json +40 -0
  1134. package/board-dist/server.js +44 -0
  1135. package/dist/index.js +1039 -342
  1136. package/package.json +17 -5
package/dist/index.js CHANGED
@@ -66,7 +66,9 @@ ${close}`;
66
66
  return (base ? base + "\n\n" : "") + block + "\n";
67
67
  }
68
68
  function installPack(root, packDir, force = false) {
69
- const manifest = PackManifestSchema.parse(parseYaml(readFileSync(join(packDir, "manifest.yaml"), "utf-8")));
69
+ const manifest = PackManifestSchema.parse(
70
+ parseYaml(readFileSync(join(packDir, "manifest.yaml"), "utf-8"))
71
+ );
70
72
  const skills = copyTree(join(packDir, "skills"), join(root, ".claude", "skills"), force);
71
73
  let claudeMdMerged = false;
72
74
  if (manifest.claude_md) {
@@ -158,21 +160,252 @@ function registerHookCommand(program2) {
158
160
  // src/commands/init.ts
159
161
  import {
160
162
  copyFileSync as copyFileSync2,
161
- existsSync as existsSync3,
162
- mkdirSync as mkdirSync2,
163
+ existsSync as existsSync4,
164
+ mkdirSync as mkdirSync3,
163
165
  readdirSync as readdirSync2,
164
- readFileSync as readFileSync3,
166
+ readFileSync as readFileSync4,
165
167
  statSync as statSync2,
166
- writeFileSync as writeFileSync2
168
+ writeFileSync as writeFileSync3
167
169
  } from "fs";
168
- import { dirname as dirname3, join as join3, relative } from "path";
170
+ import { dirname as dirname4, join as join3, relative as relative2 } from "path";
169
171
  import { fileURLToPath as fileURLToPath2 } from "url";
170
- import { stringify as stringifyYaml } from "yaml";
172
+ import { stringify as stringifyYaml2 } from "yaml";
173
+
174
+ // src/config.ts
175
+ import { existsSync as existsSync3, readFileSync as readFileSync3 } from "fs";
176
+ import { dirname as dirname3, join as join2 } from "path";
177
+ import { parse as parseYaml3 } from "yaml";
178
+
179
+ // src/providers/status-index.ts
180
+ import {
181
+ existsSync as existsSync2,
182
+ mkdirSync as mkdirSync2,
183
+ readFileSync as readFileSync2,
184
+ renameSync,
185
+ unlinkSync,
186
+ writeFileSync as writeFileSync2
187
+ } from "fs";
188
+ import { randomBytes } from "crypto";
189
+ import { dirname as dirname2, isAbsolute, relative, resolve, sep } from "path";
190
+ import { parse as parseYaml2, stringify as stringifyYaml } from "yaml";
191
+
192
+ // src/templates/ticket.ts
193
+ import { z as z2 } from "zod";
194
+ var TICKET_STATUSES = ["Pending", "In progress", "To review", "Done"];
195
+ var TicketStatusSchema = z2.enum(TICKET_STATUSES);
196
+ var TicketDriversSchema = z2.object({
197
+ /** PRD this ticket advances, e.g. "docs/prd/0001". */
198
+ prd: z2.string().optional(),
199
+ /** Governing ADR(s), e.g. ["docs/adr/0003"]. */
200
+ adr: z2.array(z2.string()).default([]),
201
+ /** Security finding remediated, e.g. "docs/security/AUTH-014". */
202
+ security: z2.string().optional()
203
+ });
204
+ var TicketSchema = z2.object({
205
+ key: z2.string().regex(/^[A-Z][A-Z0-9]*-\d+$/, "key must look like PREFIX-123").optional(),
206
+ title: z2.string().min(3, "title must be at least 3 characters"),
207
+ slug: z2.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "slug must be kebab-case").optional(),
208
+ status: TicketStatusSchema.default("Pending"),
209
+ summary: z2.string().min(1, "summary is required"),
210
+ acceptanceCriteria: z2.array(z2.string().min(1)).min(1, "at least one acceptance criterion is required"),
211
+ nonGoals: z2.array(z2.string().min(1)).default([]),
212
+ /** Ticket keys that must reach Done before this one can start. */
213
+ dependencies: z2.array(z2.string()).default([]),
214
+ drivers: TicketDriversSchema.default({}),
215
+ /** Linked pull request (branch, URL, or id) — set by `link-pr` / `hand-off`. */
216
+ prUrl: z2.string().optional(),
217
+ notes: z2.string().optional()
218
+ });
219
+ function slugify(title) {
220
+ return title.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 60).replace(/-+$/g, "");
221
+ }
222
+ function renderTicketMarkdown(t) {
223
+ const lines = [];
224
+ lines.push(`# ${t.key} \u2014 ${t.title}`, "");
225
+ lines.push(`**Status:** ${t.status}`);
226
+ if (t.dependencies.length) {
227
+ lines.push(`**Depends on:** ${t.dependencies.join(", ")}`);
228
+ }
229
+ const drivers = [];
230
+ if (t.drivers.prd) drivers.push(`PRD ${t.drivers.prd}`);
231
+ if (t.drivers.adr.length) drivers.push(`ADR ${t.drivers.adr.join(", ")}`);
232
+ if (t.drivers.security) drivers.push(`Security ${t.drivers.security}`);
233
+ if (drivers.length) lines.push(`**Drivers:** ${drivers.join(" \xB7 ")}`);
234
+ if (t.prUrl) lines.push(`**PR:** ${t.prUrl}`);
235
+ lines.push("", "## Summary", "", t.summary, "");
236
+ lines.push("## Acceptance criteria", "");
237
+ for (const ac of t.acceptanceCriteria) lines.push(`- [ ] ${ac}`);
238
+ lines.push("");
239
+ if (t.nonGoals.length) {
240
+ lines.push("## Non-goals", "");
241
+ for (const ng of t.nonGoals) lines.push(`- ${ng}`);
242
+ lines.push("");
243
+ }
244
+ if (t.notes) lines.push("## Notes", "", t.notes, "");
245
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
246
+ }
247
+
248
+ // src/providers/status-index.ts
249
+ var SCHEMA_VERSION = 1;
250
+ var STATUS_TO_SLUG = {
251
+ Pending: "pending",
252
+ "In progress": "in-progress",
253
+ "To review": "to-review",
254
+ Done: "done"
255
+ };
256
+ var SLUG_TO_STATUS = new Map(
257
+ TICKET_STATUSES.map((status) => [STATUS_TO_SLUG[status], status])
258
+ );
259
+ var KEY_RE = /^[A-Z][A-Z0-9]*-\d+$/;
260
+ var SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
261
+ var FILE_RE = /^([A-Z][A-Z0-9]*-\d+)-([a-z0-9]+(?:-[a-z0-9]+)*)\.md$/;
262
+ function slugForStatus(status) {
263
+ const slug = STATUS_TO_SLUG[status];
264
+ if (slug === void 0) {
265
+ throw new Error(`unknown ticket status: ${String(status)}`);
266
+ }
267
+ return slug;
268
+ }
269
+ function assertKey(key) {
270
+ if (!KEY_RE.test(key)) {
271
+ throw new Error(`invalid ticket key ${JSON.stringify(key)}: must match ${KEY_RE.source}`);
272
+ }
273
+ }
274
+ function assertSlug(slug) {
275
+ if (!SLUG_RE.test(slug)) {
276
+ throw new Error(
277
+ `invalid slug ${JSON.stringify(slug)}: must be strict kebab-case (${SLUG_RE.source})`
278
+ );
279
+ }
280
+ }
281
+ function isTicketStatus(value) {
282
+ return TICKET_STATUSES.includes(value);
283
+ }
284
+ function freshTickets() {
285
+ return /* @__PURE__ */ Object.create(null);
286
+ }
287
+ function composeFile(status, key, slug) {
288
+ assertKey(key);
289
+ assertSlug(slug);
290
+ return `${slugForStatus(status)}/${key}-${slug}.md`;
291
+ }
292
+ function emptyDocument() {
293
+ return {
294
+ version: SCHEMA_VERSION,
295
+ columns: [...TICKET_STATUSES],
296
+ tickets: freshTickets()
297
+ };
298
+ }
299
+ function serialize(doc) {
300
+ const tickets = {};
301
+ for (const key of Object.keys(doc.tickets).sort()) {
302
+ const entry = doc.tickets[key];
303
+ tickets[key] = { column: entry.column, file: entry.file };
304
+ }
305
+ const out2 = {
306
+ version: doc.version,
307
+ columns: [...TICKET_STATUSES],
308
+ tickets
309
+ };
310
+ const text = stringifyYaml(out2, { lineWidth: 0 });
311
+ return text.endsWith("\n") ? text : `${text}
312
+ `;
313
+ }
314
+ function parse(text) {
315
+ const raw = parseYaml2(text);
316
+ const tickets = freshTickets();
317
+ if (raw === null || typeof raw !== "object") {
318
+ return { version: SCHEMA_VERSION, columns: [...TICKET_STATUSES], tickets };
319
+ }
320
+ const obj = raw;
321
+ const version2 = typeof obj.version === "number" ? obj.version : SCHEMA_VERSION;
322
+ const rawTickets = obj.tickets;
323
+ if (rawTickets !== null && typeof rawTickets === "object") {
324
+ for (const [key, value] of Object.entries(rawTickets)) {
325
+ if (!KEY_RE.test(key)) continue;
326
+ if (value === null || typeof value !== "object") continue;
327
+ const entry = value;
328
+ const { column, file } = entry;
329
+ if (typeof column !== "string" || typeof file !== "string") continue;
330
+ if (!isTicketStatus(column)) continue;
331
+ tickets[key] = { column, file };
332
+ }
333
+ }
334
+ return { version: version2, columns: [...TICKET_STATUSES], tickets };
335
+ }
336
+ function load(statusYamlPath) {
337
+ if (!existsSync2(statusYamlPath)) return emptyDocument();
338
+ return parse(readFileSync2(statusYamlPath, "utf-8"));
339
+ }
340
+ function save(statusYamlPath, doc) {
341
+ const dir = dirname2(statusYamlPath);
342
+ mkdirSync2(dir, { recursive: true });
343
+ const tmp = `${statusYamlPath}.${randomBytes(6).toString("hex")}.tmp`;
344
+ try {
345
+ writeFileSync2(tmp, serialize(doc), { encoding: "utf-8", flag: "wx", mode: 384 });
346
+ renameSync(tmp, statusYamlPath);
347
+ } catch (err) {
348
+ try {
349
+ if (existsSync2(tmp)) unlinkSync(tmp);
350
+ } catch {
351
+ }
352
+ throw err;
353
+ }
354
+ }
355
+ function assertMutableVersion(doc) {
356
+ if (doc.version !== SCHEMA_VERSION) {
357
+ throw new Error(
358
+ `status.yaml schema version ${doc.version} is unsupported (expected ${SCHEMA_VERSION}); refusing to mutate`
359
+ );
360
+ }
361
+ }
362
+ function upsert(doc, input) {
363
+ assertMutableVersion(doc);
364
+ const file = composeFile(input.column, input.key, input.slug);
365
+ doc.tickets[input.key] = { column: input.column, file };
366
+ }
367
+ function remove(doc, key) {
368
+ assertMutableVersion(doc);
369
+ delete doc.tickets[key];
370
+ }
371
+ function resolveFile(statusYamlPath, key, entry) {
372
+ assertKey(key);
373
+ const file = entry.file;
374
+ if (file.length === 0 || isAbsolute(file) || file.includes("\\") || // backslash / UNC
375
+ /^[A-Za-z]:/.test(file)) {
376
+ throw new Error(`unsafe index file pointer ${JSON.stringify(file)}`);
377
+ }
378
+ const segments = file.split("/");
379
+ if (segments.some((segment) => segment === ".." || segment === "")) {
380
+ throw new Error(`unsafe index file pointer ${JSON.stringify(file)}`);
381
+ }
382
+ if (segments.length !== 2) {
383
+ throw new Error(`malformed index file pointer ${JSON.stringify(file)}: expected <slug>/<file>`);
384
+ }
385
+ const [folder, filename] = segments;
386
+ const expectedSlug = slugForStatus(entry.column);
387
+ if (folder !== expectedSlug) {
388
+ throw new Error(
389
+ `index/folder disagreement for ${key}: file folder ${JSON.stringify(folder)} != slug(${entry.column})=${JSON.stringify(expectedSlug)}`
390
+ );
391
+ }
392
+ const match = FILE_RE.exec(filename);
393
+ if (!match || match[1] !== key) {
394
+ throw new Error(
395
+ `index key mismatch: file ${JSON.stringify(filename)} does not belong to key ${JSON.stringify(key)}`
396
+ );
397
+ }
398
+ const root = dirname2(statusYamlPath);
399
+ const resolved = resolve(root, file);
400
+ const rel = relative(root, resolved);
401
+ const contained = resolved === root || rel !== "" && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
402
+ if (!contained || !(resolved === root || resolved.startsWith(root + sep))) {
403
+ throw new Error(`index file pointer escapes tickets root: ${JSON.stringify(file)}`);
404
+ }
405
+ return resolved;
406
+ }
171
407
 
172
408
  // src/config.ts
173
- import { existsSync as existsSync2, readFileSync as readFileSync2 } from "fs";
174
- import { dirname as dirname2, join as join2 } from "path";
175
- import { parse as parseYaml2 } from "yaml";
176
409
  var DEFAULTS = { provider: "local", prefix: "KODI" };
177
410
  var STATE_FILE = "kodi-dev.yaml";
178
411
  function stateFilePath(root) {
@@ -181,17 +414,17 @@ function stateFilePath(root) {
181
414
  function findProjectRoot(cwd = process.cwd()) {
182
415
  let dir = cwd;
183
416
  while (true) {
184
- if (existsSync2(stateFilePath(dir))) return dir;
185
- const parent = dirname2(dir);
417
+ if (existsSync3(stateFilePath(dir))) return dir;
418
+ const parent = dirname3(dir);
186
419
  if (parent === dir) return cwd;
187
420
  dir = parent;
188
421
  }
189
422
  }
190
423
  function loadBoardConfig(cwd = process.cwd()) {
191
424
  const path = stateFilePath(findProjectRoot(cwd));
192
- if (!existsSync2(path)) return { ...DEFAULTS };
425
+ if (!existsSync3(path)) return { ...DEFAULTS };
193
426
  try {
194
- const raw = parseYaml2(readFileSync2(path, "utf-8")) ?? {};
427
+ const raw = parseYaml3(readFileSync3(path, "utf-8")) ?? {};
195
428
  return { ...DEFAULTS, ...raw };
196
429
  } catch {
197
430
  return { ...DEFAULTS };
@@ -201,9 +434,12 @@ function localPaths(cwd = process.cwd()) {
201
434
  const root = join2(findProjectRoot(cwd), "docs", "tickets");
202
435
  return {
203
436
  root,
204
- backlog: join2(root, "backlog"),
205
- done: join2(root, "done"),
206
- index: join2(root, "tickets.md")
437
+ /** Absolute path to the authoritative `status.yaml` index (data-model §2). */
438
+ statusYaml: join2(root, "status.yaml"),
439
+ /** Absolute on-disk folder a ticket in `status` is filed under (data-model §3). */
440
+ folderFor(status) {
441
+ return join2(root, slugForStatus(status));
442
+ }
207
443
  };
208
444
  }
209
445
 
@@ -233,7 +469,13 @@ function execMutate(args, dryRun) {
233
469
  if (r.status !== 0) {
234
470
  throw new Error(`\`${command}\` failed (exit ${r.status}): ${r.stderr?.trim() || ""}`);
235
471
  }
236
- return { command, ran: true, stdout: r.stdout ?? "", stderr: r.stderr ?? "", code: r.status ?? 0 };
472
+ return {
473
+ command,
474
+ ran: true,
475
+ stdout: r.stdout ?? "",
476
+ stderr: r.stderr ?? "",
477
+ code: r.status ?? 0
478
+ };
237
479
  }
238
480
 
239
481
  // src/html.ts
@@ -286,68 +528,6 @@ function mdToHtml(md) {
286
528
  return out2.join("\n");
287
529
  }
288
530
 
289
- // src/templates/ticket.ts
290
- import { z as z2 } from "zod";
291
- var TICKET_STATUSES = [
292
- "Pending",
293
- "In progress",
294
- "To review",
295
- "Done",
296
- "Blocked"
297
- ];
298
- var TicketStatusSchema = z2.enum(TICKET_STATUSES);
299
- var TicketDriversSchema = z2.object({
300
- /** PRD this ticket advances, e.g. "docs/prd/0001". */
301
- prd: z2.string().optional(),
302
- /** Governing ADR(s), e.g. ["docs/adr/0003"]. */
303
- adr: z2.array(z2.string()).default([]),
304
- /** Security finding remediated, e.g. "docs/security/AUTH-014". */
305
- security: z2.string().optional()
306
- });
307
- var TicketSchema = z2.object({
308
- key: z2.string().regex(/^[A-Z][A-Z0-9]*-\d+$/, "key must look like PREFIX-123").optional(),
309
- title: z2.string().min(3, "title must be at least 3 characters"),
310
- slug: z2.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, "slug must be kebab-case").optional(),
311
- status: TicketStatusSchema.default("Pending"),
312
- summary: z2.string().min(1, "summary is required"),
313
- acceptanceCriteria: z2.array(z2.string().min(1)).min(1, "at least one acceptance criterion is required"),
314
- nonGoals: z2.array(z2.string().min(1)).default([]),
315
- /** Ticket keys that must reach Done before this one can start. */
316
- dependencies: z2.array(z2.string()).default([]),
317
- drivers: TicketDriversSchema.default({}),
318
- /** Linked pull request (branch, URL, or id) — set by `link-pr` / `hand-off`. */
319
- prUrl: z2.string().optional(),
320
- notes: z2.string().optional()
321
- });
322
- function slugify(title) {
323
- return title.toLowerCase().normalize("NFD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 60).replace(/-+$/g, "");
324
- }
325
- function renderTicketMarkdown(t) {
326
- const lines = [];
327
- lines.push(`# ${t.key} \u2014 ${t.title}`, "");
328
- lines.push(`**Status:** ${t.status}`);
329
- if (t.dependencies.length) {
330
- lines.push(`**Depends on:** ${t.dependencies.join(", ")}`);
331
- }
332
- const drivers = [];
333
- if (t.drivers.prd) drivers.push(`PRD ${t.drivers.prd}`);
334
- if (t.drivers.adr.length) drivers.push(`ADR ${t.drivers.adr.join(", ")}`);
335
- if (t.drivers.security) drivers.push(`Security ${t.drivers.security}`);
336
- if (drivers.length) lines.push(`**Drivers:** ${drivers.join(" \xB7 ")}`);
337
- if (t.prUrl) lines.push(`**PR:** ${t.prUrl}`);
338
- lines.push("", "## Summary", "", t.summary, "");
339
- lines.push("## Acceptance criteria", "");
340
- for (const ac of t.acceptanceCriteria) lines.push(`- [ ] ${ac}`);
341
- lines.push("");
342
- if (t.nonGoals.length) {
343
- lines.push("## Non-goals", "");
344
- for (const ng of t.nonGoals) lines.push(`- ${ng}`);
345
- lines.push("");
346
- }
347
- if (t.notes) lines.push("## Notes", "", t.notes, "");
348
- return lines.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd() + "\n";
349
- }
350
-
351
531
  // src/providers/azure.ts
352
532
  var MARKER_RE = /kodi:ticket:([A-Za-z0-9+/=]+)/;
353
533
  var DEFAULT_COLUMNS = {
@@ -394,7 +574,12 @@ function parseWorkItem(fields, id, cols = DEFAULT_COLUMNS) {
394
574
  if (!parsed.success) return null;
395
575
  const column = fields["System.State"] ?? fields["System.BoardColumn"] ?? "";
396
576
  const status = statusFromColumn(column, cols) ?? parsed.data.status;
397
- return { ...parsed.data, key: String(id), slug: parsed.data.slug ?? slugify(parsed.data.title), status };
577
+ return {
578
+ ...parsed.data,
579
+ key: String(id),
580
+ slug: parsed.data.slug ?? slugify(parsed.data.title),
581
+ status
582
+ };
398
583
  }
399
584
  function createArgs(coords, title, html, column) {
400
585
  const args = [
@@ -454,13 +639,32 @@ var AzureTicketProvider = class {
454
639
  return { ...draft, key: String(id) };
455
640
  }
456
641
  async get(key) {
457
- const out2 = execRead(["az", "boards", "work-item", "show", "--id", key, "--output", "json", ...this.orgArgs()]);
642
+ const out2 = execRead([
643
+ "az",
644
+ "boards",
645
+ "work-item",
646
+ "show",
647
+ "--id",
648
+ key,
649
+ "--output",
650
+ "json",
651
+ ...this.orgArgs()
652
+ ]);
458
653
  const wi = JSON.parse(out2);
459
654
  return parseWorkItem(wi.fields ?? {}, wi.id, this.columns);
460
655
  }
461
656
  async list() {
462
657
  const wiql = "SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Issue' ORDER BY [System.Id]";
463
- const out2 = execRead(["az", "boards", "query", "--wiql", wiql, "--output", "json", ...this.scopeArgs()]);
658
+ const out2 = execRead([
659
+ "az",
660
+ "boards",
661
+ "query",
662
+ "--wiql",
663
+ wiql,
664
+ "--output",
665
+ "json",
666
+ ...this.scopeArgs()
667
+ ]);
464
668
  const rows = JSON.parse(out2);
465
669
  const refs = [];
466
670
  for (const row of rows) {
@@ -488,7 +692,17 @@ var AzureTicketProvider = class {
488
692
  const current = await this.get(key);
489
693
  if (!current) throw new Error(`work-item ${key} not found`);
490
694
  execMutate(
491
- ["az", "boards", "work-item", "update", "--id", key, "--fields", `System.State=${columnForStatus(status, this.columns)}`, ...this.orgArgs()],
695
+ [
696
+ "az",
697
+ "boards",
698
+ "work-item",
699
+ "update",
700
+ "--id",
701
+ key,
702
+ "--fields",
703
+ `System.State=${columnForStatus(status, this.columns)}`,
704
+ ...this.orgArgs()
705
+ ],
492
706
  this.opts.dryRun
493
707
  );
494
708
  return { ...current, status };
@@ -508,11 +722,20 @@ var AzureTicketProvider = class {
508
722
  return merged;
509
723
  }
510
724
  async delete(key) {
511
- execMutate(["az", "boards", "work-item", "delete", "--id", key, "--yes", ...this.scopeArgs()], this.opts.dryRun);
725
+ execMutate(
726
+ ["az", "boards", "work-item", "delete", "--id", key, "--yes", ...this.scopeArgs()],
727
+ this.opts.dryRun
728
+ );
512
729
  }
513
730
  };
514
731
  function toRef(t) {
515
- return { key: t.key, title: t.title, status: t.status, slug: t.slug, dependencies: t.dependencies };
732
+ return {
733
+ key: t.key,
734
+ title: t.title,
735
+ status: t.status,
736
+ slug: t.slug,
737
+ dependencies: t.dependencies
738
+ };
516
739
  }
517
740
 
518
741
  // src/providers/azure-discovery.ts
@@ -540,7 +763,18 @@ function parseProjectInfo(json) {
540
763
  function getProjectInfo(org, project, run = defaultRunner) {
541
764
  try {
542
765
  return parseProjectInfo(
543
- run(["az", "devops", "project", "show", "--project", project, "--org", org, "--output", "json"])
766
+ run([
767
+ "az",
768
+ "devops",
769
+ "project",
770
+ "show",
771
+ "--project",
772
+ project,
773
+ "--org",
774
+ org,
775
+ "--output",
776
+ "json"
777
+ ])
544
778
  );
545
779
  } catch {
546
780
  return null;
@@ -587,7 +821,17 @@ function parseProjects2(json) {
587
821
  return items.map((p) => ({ number: p?.number, title: p?.title ?? "", id: p?.id ?? "" })).filter((p) => typeof p.number === "number");
588
822
  }
589
823
  function listProjects2(owner, run = defaultRunner2) {
590
- const out2 = run(["gh", "project", "list", "--owner", owner, "--format", "json", "--limit", "100"]);
824
+ const out2 = run([
825
+ "gh",
826
+ "project",
827
+ "list",
828
+ "--owner",
829
+ owner,
830
+ "--format",
831
+ "json",
832
+ "--limit",
833
+ "100"
834
+ ]);
591
835
  return parseProjects2(out2);
592
836
  }
593
837
  function resolveViewerLogin(run = defaultRunner2) {
@@ -628,7 +872,9 @@ function parseStatusField(json) {
628
872
  (f) => typeof f?.name === "string" && f.name.toLowerCase() === "status" && Array.isArray(f?.options)
629
873
  );
630
874
  if (!status) return null;
631
- const options = status.options.map((o) => ({ id: o?.id, name: o?.name })).filter((o) => typeof o.id === "string" && typeof o.name === "string");
875
+ const options = status.options.map((o) => ({ id: o?.id, name: o?.name })).filter(
876
+ (o) => typeof o.id === "string" && typeof o.name === "string"
877
+ );
632
878
  return { id: status.id, options };
633
879
  }
634
880
  function listStatusField(owner, number, run = defaultRunner2) {
@@ -670,7 +916,9 @@ function readlinePrompter() {
670
916
  async select(message, choices) {
671
917
  if (choices.length === 0) throw new Error(`${message}: no choices available`);
672
918
  if (!process.stdin.isTTY) {
673
- throw new Error(`cannot prompt "${message}" in non-interactive mode \u2014 pass the corresponding flag`);
919
+ throw new Error(
920
+ `cannot prompt "${message}" in non-interactive mode \u2014 pass the corresponding flag`
921
+ );
674
922
  }
675
923
  return inqSelect({
676
924
  message,
@@ -707,17 +955,17 @@ function defaultAssetsDir() {
707
955
  }
708
956
  function copyTree2(srcRoot, destRoot, force, reportBase) {
709
957
  const written = [];
710
- if (!existsSync3(srcRoot)) return written;
958
+ if (!existsSync4(srcRoot)) return written;
711
959
  const walk = (src, dest) => {
712
960
  for (const entry of readdirSync2(src)) {
713
961
  const s = join3(src, entry);
714
962
  const d = join3(dest, entry);
715
963
  if (statSync2(s).isDirectory()) walk(s, d);
716
964
  else {
717
- if (existsSync3(d) && !force) continue;
718
- mkdirSync2(dirname3(d), { recursive: true });
965
+ if (existsSync4(d) && !force) continue;
966
+ mkdirSync3(dirname4(d), { recursive: true });
719
967
  copyFileSync2(s, d);
720
- written.push(join3(reportBase, relative(destRoot, d)));
968
+ written.push(join3(reportBase, relative2(destRoot, d)));
721
969
  }
722
970
  }
723
971
  };
@@ -726,15 +974,15 @@ function copyTree2(srcRoot, destRoot, force, reportBase) {
726
974
  }
727
975
  function copyMarkdownFlat(srcRoot, destDir, force, reportBase) {
728
976
  const written = [];
729
- if (!existsSync3(srcRoot)) return written;
977
+ if (!existsSync4(srcRoot)) return written;
730
978
  const walk = (dir) => {
731
979
  for (const entry of readdirSync2(dir)) {
732
980
  const s = join3(dir, entry);
733
981
  if (statSync2(s).isDirectory()) walk(s);
734
982
  else if (entry.endsWith(".md") && entry !== "README.md") {
735
983
  const d = join3(destDir, entry);
736
- if (existsSync3(d) && !force) continue;
737
- mkdirSync2(destDir, { recursive: true });
984
+ if (existsSync4(d) && !force) continue;
985
+ mkdirSync3(destDir, { recursive: true });
738
986
  copyFileSync2(s, d);
739
987
  written.push(join3(reportBase, entry));
740
988
  }
@@ -748,11 +996,11 @@ function installHarness(root, opts = {}) {
748
996
  const assetsDir = opts.assetsDir ?? defaultAssetsDir();
749
997
  const claude = join3(root, ".claude");
750
998
  const changed = [];
751
- mkdirSync2(claude, { recursive: true });
999
+ mkdirSync3(claude, { recursive: true });
752
1000
  const settingsPath = join3(claude, "settings.json");
753
- const settings = existsSync3(settingsPath) ? JSON.parse(readFileSync3(settingsPath, "utf-8")) : {};
1001
+ const settings = existsSync4(settingsPath) ? JSON.parse(readFileSync4(settingsPath, "utf-8")) : {};
754
1002
  if (mergeSessionStartHook(settings)) {
755
- writeFileSync2(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
1003
+ writeFileSync3(settingsPath, JSON.stringify(settings, null, 2) + "\n", "utf-8");
756
1004
  changed.push(".claude/settings.json (SessionStart hook)");
757
1005
  }
758
1006
  changed.push(
@@ -760,8 +1008,11 @@ function installHarness(root, opts = {}) {
760
1008
  ...copyMarkdownFlat(join3(assetsDir, "agents"), join3(claude, "agents"), force, ".claude/agents"),
761
1009
  ...copyTree2(join3(assetsDir, "rules"), join3(claude, "rules"), force, ".claude/rules")
762
1010
  );
763
- for (const sub of ["prd", "adr", "diagrams", "plan", "tickets", "security"]) {
764
- mkdirSync2(join3(root, "docs", sub), { recursive: true });
1011
+ const provider = opts.provider ?? "local";
1012
+ const docsSubs = ["prd", "adr", "diagrams", "plan", "security"];
1013
+ if (provider === "local") docsSubs.push("tickets");
1014
+ for (const sub of docsSubs) {
1015
+ mkdirSync3(join3(root, "docs", sub), { recursive: true });
765
1016
  }
766
1017
  return changed;
767
1018
  }
@@ -791,7 +1042,9 @@ async function configureBoard(prompter, opts = {}) {
791
1042
  let project = opts.project;
792
1043
  if (project) {
793
1044
  if (!projects.includes(project)) {
794
- throw new InitAbort(`project "${project}" not found in ${org} (found: ${projects.join(", ")}).`);
1045
+ throw new InitAbort(
1046
+ `project "${project}" not found in ${org} (found: ${projects.join(", ")}).`
1047
+ );
795
1048
  }
796
1049
  } else {
797
1050
  project = await prompter.select("Select a project", projects);
@@ -827,13 +1080,26 @@ async function configureBoard(prompter, opts = {}) {
827
1080
  } else if (proposed.length > 0) {
828
1081
  todo = proposed.length === 1 ? proposed[0] : await prompter.select("To Do column (where new issues are created)", proposed);
829
1082
  } else {
830
- todo = await prompter.input("To Do column (where new issues are created)", DEFAULT_COLUMNS.todo);
1083
+ todo = await prompter.input(
1084
+ "To Do column (where new issues are created)",
1085
+ DEFAULT_COLUMNS.todo
1086
+ );
831
1087
  if (!todo) throw new InitAbort("missing: the To Do column.");
832
1088
  }
833
1089
  const columns = {
834
1090
  todo,
835
- inProgress: await pick(opts.inProgressColumn, "In Progress column", inProg, DEFAULT_COLUMNS.inProgress),
836
- toReview: await pick(opts.toReviewColumn, "To Review column", inProg, DEFAULT_COLUMNS.toReview),
1091
+ inProgress: await pick(
1092
+ opts.inProgressColumn,
1093
+ "In Progress column",
1094
+ inProg,
1095
+ DEFAULT_COLUMNS.inProgress
1096
+ ),
1097
+ toReview: await pick(
1098
+ opts.toReviewColumn,
1099
+ "To Review column",
1100
+ inProg,
1101
+ DEFAULT_COLUMNS.toReview
1102
+ ),
837
1103
  done: await pick(opts.doneColumn, "Done column", completed, DEFAULT_COLUMNS.done)
838
1104
  };
839
1105
  const repository = opts.repository ?? (await prompter.input("Repository name for pull requests", project) || project);
@@ -847,7 +1113,10 @@ async function configureGithub(prompter, opts) {
847
1113
  }
848
1114
  let owner = opts.projectOwner;
849
1115
  if (!owner) {
850
- const ownerType = opts.ownerType ?? await prompter.select("Is the board owned by an organization or a user?", ["organization", "user"]);
1116
+ const ownerType = opts.ownerType ?? await prompter.select("Is the board owned by an organization or a user?", [
1117
+ "organization",
1118
+ "user"
1119
+ ]);
851
1120
  if (ownerType === "user") {
852
1121
  let login = "";
853
1122
  try {
@@ -890,7 +1159,8 @@ async function configureGithub(prompter, opts) {
890
1159
  );
891
1160
  }
892
1161
  const options = statusField.options.map((o) => o.name);
893
- if (options.length === 0) throw new InitAbort(`the Status field on project #${number} has no options.`);
1162
+ if (options.length === 0)
1163
+ throw new InitAbort(`the Status field on project #${number} has no options.`);
894
1164
  const pick = async (flag, message) => {
895
1165
  if (flag) return flag;
896
1166
  return options.length === 1 ? options[0] : prompter.select(message, options);
@@ -914,19 +1184,27 @@ async function configureGithub(prompter, opts) {
914
1184
  } catch {
915
1185
  }
916
1186
  if (repos.length > 0) {
917
- if (detected && repos.includes(detected)) repos = [detected, ...repos.filter((r) => r !== detected)];
1187
+ if (detected && repos.includes(detected))
1188
+ repos = [detected, ...repos.filter((r) => r !== detected)];
918
1189
  repository = await prompter.select("Repository for issues", repos);
919
1190
  } else {
920
1191
  repository = await prompter.input("Repository for issues (owner/repo)", detected) || detected;
921
1192
  }
922
1193
  }
923
1194
  if (!repository) throw new InitAbort("missing: repository (owner/repo).");
924
- return { provider: "github", prefix: "KODI", repository, projectOwner: owner, projectNumber: number, columns };
1195
+ return {
1196
+ provider: "github",
1197
+ prefix: "KODI",
1198
+ repository,
1199
+ projectOwner: owner,
1200
+ projectNumber: number,
1201
+ columns
1202
+ };
925
1203
  }
926
1204
  function writeState(root, config) {
927
1205
  const path = stateFilePath(root);
928
- mkdirSync2(dirname3(path), { recursive: true });
929
- writeFileSync2(path, stringifyYaml(config), "utf-8");
1206
+ mkdirSync3(dirname4(path), { recursive: true });
1207
+ writeFileSync3(path, stringifyYaml2(config), "utf-8");
930
1208
  return path;
931
1209
  }
932
1210
  function registerInitCommand(program2) {
@@ -963,13 +1241,13 @@ kodi init aborted \u2014 ${e.message}
963
1241
  } finally {
964
1242
  prompter.close();
965
1243
  }
966
- const changed = installHarness(root, { force: o.force });
1244
+ const changed = installHarness(root, { force: o.force, provider: config.provider });
967
1245
  const statePath = writeState(root, config);
968
1246
  process.stdout.write(
969
1247
  `
970
1248
  kodi init: installed
971
1249
  ${changed.map((c) => ` + ${c}`).join("\n")}
972
- + ${relative(root, statePath)} (provider: ${config.provider})
1250
+ + ${relative2(root, statePath)} (provider: ${config.provider})
973
1251
 
974
1252
  SessionStart wired to \`${HOOK_COMMAND}\` (matchers: ${SESSION_MATCHER}).
975
1253
  `
@@ -978,7 +1256,7 @@ SessionStart wired to \`${HOOK_COMMAND}\` (matchers: ${SESSION_MATCHER}).
978
1256
  }
979
1257
 
980
1258
  // src/commands/pr.ts
981
- import { mkdtempSync, readFileSync as readFileSync4, writeFileSync as writeFileSync3 } from "fs";
1259
+ import { mkdtempSync, readFileSync as readFileSync5, writeFileSync as writeFileSync4 } from "fs";
982
1260
  import { tmpdir } from "os";
983
1261
  import { join as join4 } from "path";
984
1262
 
@@ -1023,7 +1301,7 @@ function resolveTarget(explicit) {
1023
1301
  );
1024
1302
  }
1025
1303
  function draftFromOptions(o) {
1026
- if (o.file) return PrSchema.parse(JSON.parse(readFileSync4(String(o.file), "utf-8")));
1304
+ if (o.file) return PrSchema.parse(JSON.parse(readFileSync5(String(o.file), "utf-8")));
1027
1305
  return PrSchema.parse({
1028
1306
  title: o.title,
1029
1307
  summary: o.summary,
@@ -1037,7 +1315,19 @@ function draftFromOptions(o) {
1037
1315
  });
1038
1316
  }
1039
1317
  function githubCreateArgs(pr, bodyFile, source, target, repo) {
1040
- const args = ["gh", "pr", "create", "--title", pr.title, "--body-file", bodyFile, "--base", target, "--head", source];
1318
+ const args = [
1319
+ "gh",
1320
+ "pr",
1321
+ "create",
1322
+ "--title",
1323
+ pr.title,
1324
+ "--body-file",
1325
+ bodyFile,
1326
+ "--base",
1327
+ target,
1328
+ "--head",
1329
+ source
1330
+ ];
1041
1331
  for (const r of pr.reviewers) args.push("--reviewer", r);
1042
1332
  if (repo) args.push("--repo", repo);
1043
1333
  return args;
@@ -1069,7 +1359,7 @@ function registerPrCommand(program2) {
1069
1359
  let args;
1070
1360
  if (target === "github") {
1071
1361
  const bodyFile = join4(mkdtempSync(join4(tmpdir(), "kodi-pr-")), "body.md");
1072
- writeFileSync3(bodyFile, renderPrMarkdown(draft), "utf-8");
1362
+ writeFileSync4(bodyFile, renderPrMarkdown(draft), "utf-8");
1073
1363
  args = githubCreateArgs(draft, bodyFile, o.source, o.target, repo);
1074
1364
  } else {
1075
1365
  args = azureCreateArgs(draft, renderPrHtml(draft), o.source, o.target, repo);
@@ -1095,47 +1385,561 @@ function collect(value, previous) {
1095
1385
  return previous.concat([value]);
1096
1386
  }
1097
1387
 
1098
- // src/commands/tickets.ts
1099
- import { readFileSync as readFileSync6 } from "fs";
1100
-
1101
- // src/providers/github.ts
1102
- import { mkdtempSync as mkdtempSync2, writeFileSync as writeFileSync4 } from "fs";
1103
- import { tmpdir as tmpdir2 } from "os";
1104
- import { join as join5 } from "path";
1105
- var MARKER_RE2 = /<!--\s*kodi:ticket\s+(\{[\s\S]*?\})\s*-->/;
1106
- var DEFAULT_COLUMNS2 = {
1107
- todo: "Todo",
1108
- inProgress: "In Progress",
1109
- toReview: "In Progress",
1110
- done: "Done"
1111
- };
1112
- function columnForStatus2(status, cols) {
1113
- switch (status) {
1114
- case "In progress":
1115
- return cols.inProgress ?? DEFAULT_COLUMNS2.inProgress;
1116
- case "To review":
1117
- return cols.toReview ?? DEFAULT_COLUMNS2.toReview;
1118
- case "Done":
1119
- return cols.done ?? DEFAULT_COLUMNS2.done;
1120
- default:
1121
- return cols.todo;
1122
- }
1388
+ // src/commands/serve.ts
1389
+ import { spawn } from "child_process";
1390
+ import { existsSync as existsSync5 } from "fs";
1391
+ import net from "net";
1392
+ import { dirname as dirname5, resolve as resolve2 } from "path";
1393
+ import { fileURLToPath as fileURLToPath3 } from "url";
1394
+ var LISTEN_TIMEOUT_MS = 15e3;
1395
+ var PROBE_INTERVAL_MS = 200;
1396
+ var KILL_GRACE_MS = 2500;
1397
+ function resolveBoardServer() {
1398
+ const moduleDir = dirname5(fileURLToPath3(import.meta.url));
1399
+ const candidates = [
1400
+ resolve2(moduleDir, "..", "board-dist", "server.js"),
1401
+ resolve2(moduleDir, "..", "..", "board-dist", "server.js")
1402
+ ];
1403
+ for (const candidate of candidates) {
1404
+ if (existsSync5(candidate)) return candidate;
1405
+ }
1406
+ throw new Error("board not built \u2014 run `pnpm build` before `kodi tickets serve`");
1407
+ }
1408
+ function pickFreePort() {
1409
+ return new Promise((resolvePort, reject) => {
1410
+ const probe = net.createServer();
1411
+ probe.unref();
1412
+ probe.once("error", reject);
1413
+ probe.listen(0, "127.0.0.1", () => {
1414
+ const addr = probe.address();
1415
+ if (addr && typeof addr === "object") {
1416
+ const { port } = addr;
1417
+ probe.close(() => resolvePort(port));
1418
+ } else {
1419
+ probe.close(() => reject(new Error("could not determine a free port")));
1420
+ }
1421
+ });
1422
+ });
1123
1423
  }
1124
- function statusFromColumn2(column, cols) {
1125
- if (column === cols.todo) return "Pending";
1126
- if (column === (cols.inProgress ?? DEFAULT_COLUMNS2.inProgress)) return "In progress";
1127
- if (column === (cols.toReview ?? DEFAULT_COLUMNS2.toReview)) return "To review";
1128
- if (column === (cols.done ?? DEFAULT_COLUMNS2.done)) return "Done";
1129
- return void 0;
1424
+ function waitForListen(port, timeoutMs, shouldStop) {
1425
+ const deadline = Date.now() + timeoutMs;
1426
+ return new Promise((resolveReady, reject) => {
1427
+ const attempt = () => {
1428
+ if (shouldStop()) {
1429
+ reject(new Error("aborted: board exited before it started listening"));
1430
+ return;
1431
+ }
1432
+ const socket = net.connect({ host: "127.0.0.1", port });
1433
+ socket.once("connect", () => {
1434
+ socket.destroy();
1435
+ resolveReady();
1436
+ });
1437
+ socket.once("error", () => {
1438
+ socket.destroy();
1439
+ if (Date.now() >= deadline) {
1440
+ reject(new Error("board server did not start listening within timeout"));
1441
+ return;
1442
+ }
1443
+ const timer = setTimeout(attempt, PROBE_INTERVAL_MS);
1444
+ timer.unref();
1445
+ });
1446
+ };
1447
+ attempt();
1448
+ });
1130
1449
  }
1131
- function serializeBody(t) {
1132
- const canonical = JSON.stringify({ ...t, key: void 0 });
1133
- return `${renderTicketMarkdown(t)}
1134
- <!-- kodi:ticket ${canonical} -->
1135
- `;
1450
+ function openBrowser(url) {
1451
+ let child;
1452
+ try {
1453
+ if (process.platform === "darwin") {
1454
+ child = spawn("open", [url], { stdio: "ignore" });
1455
+ } else if (process.platform === "win32") {
1456
+ child = spawn("cmd", ["/c", "start", "", url], { stdio: "ignore" });
1457
+ } else {
1458
+ child = spawn("xdg-open", [url], { stdio: "ignore" });
1459
+ }
1460
+ child.once("error", () => {
1461
+ });
1462
+ child.unref();
1463
+ } catch {
1464
+ }
1136
1465
  }
1137
- function parseMarker(body) {
1138
- const m = body ? MARKER_RE2.exec(body) : null;
1466
+ function buildBoardEnv(port, ticketsDir) {
1467
+ const env = {
1468
+ // Minimal base so node can locate itself and its user dirs.
1469
+ PATH: process.env.PATH,
1470
+ HOME: process.env.HOME,
1471
+ // Loopback ONLY. The standalone server binds HOSTNAME (default 0.0.0.0), so
1472
+ // this literal is what actually keeps the board off the network. HOST is set
1473
+ // too for good measure — HOSTNAME alone is what Next standalone honors.
1474
+ HOSTNAME: "127.0.0.1",
1475
+ HOST: "127.0.0.1",
1476
+ PORT: String(port),
1477
+ KODI_TICKETS_DIR: ticketsDir,
1478
+ NODE_ENV: "production"
1479
+ };
1480
+ if (process.platform === "win32") {
1481
+ if (process.env.SystemRoot) env.SystemRoot = process.env.SystemRoot;
1482
+ if (process.env.APPDATA) env.APPDATA = process.env.APPDATA;
1483
+ }
1484
+ return env;
1485
+ }
1486
+ function parsePortOption(raw) {
1487
+ const n = Number(raw);
1488
+ if (!Number.isInteger(n) || n < 1 || n > 65535) {
1489
+ throw new Error(`invalid --port "${raw}" (expected an integer 1..65535)`);
1490
+ }
1491
+ return n;
1492
+ }
1493
+ function registerServeCommand(program2) {
1494
+ const tickets = program2.commands.find((c) => c.name() === "tickets");
1495
+ if (!tickets) {
1496
+ throw new Error("internal: `tickets` command must be registered before `serve`");
1497
+ }
1498
+ tickets.command("serve").alias("open").description("Launch the local board UI in the browser (read-only view of docs/tickets)").option("--port <n>", "bind the board to a specific port (default: an OS-picked free port)").action(async (o) => {
1499
+ const ticketsDir = resolve2(localPaths(process.cwd()).root);
1500
+ let serverJs;
1501
+ try {
1502
+ serverJs = resolveBoardServer();
1503
+ } catch (err) {
1504
+ process.stderr.write(`${err instanceof Error ? err.message : String(err)}
1505
+ `);
1506
+ process.exitCode = 1;
1507
+ return;
1508
+ }
1509
+ const port = o.port !== void 0 ? parsePortOption(String(o.port)) : await pickFreePort();
1510
+ const env = buildBoardEnv(port, ticketsDir);
1511
+ const child = spawn(process.execPath, [serverJs], {
1512
+ env,
1513
+ stdio: ["ignore", "ignore", "inherit"]
1514
+ });
1515
+ await new Promise((resolveAction) => {
1516
+ let settled = false;
1517
+ let shuttingDown = false;
1518
+ let overrideCode = null;
1519
+ let forceTimer;
1520
+ const detachSignals = () => {
1521
+ process.off("SIGINT", onSignal);
1522
+ process.off("SIGTERM", onSignal);
1523
+ process.off("exit", onProcessExit);
1524
+ };
1525
+ const finish = (code) => {
1526
+ if (settled) return;
1527
+ settled = true;
1528
+ if (forceTimer) clearTimeout(forceTimer);
1529
+ detachSignals();
1530
+ process.exitCode = code;
1531
+ resolveAction();
1532
+ };
1533
+ const shutdown = (code) => {
1534
+ if (code !== void 0) overrideCode = code;
1535
+ if (shuttingDown) return;
1536
+ shuttingDown = true;
1537
+ if (child.exitCode === null && child.signalCode === null) {
1538
+ child.kill("SIGTERM");
1539
+ forceTimer = setTimeout(() => {
1540
+ child.kill("SIGKILL");
1541
+ }, KILL_GRACE_MS);
1542
+ forceTimer.unref();
1543
+ } else {
1544
+ finish(overrideCode ?? 0);
1545
+ }
1546
+ };
1547
+ const onSignal = () => shutdown();
1548
+ const onProcessExit = () => {
1549
+ if (child.exitCode === null && child.signalCode === null) child.kill("SIGKILL");
1550
+ };
1551
+ process.on("SIGINT", onSignal);
1552
+ process.on("SIGTERM", onSignal);
1553
+ process.on("exit", onProcessExit);
1554
+ child.on("error", (err) => {
1555
+ process.stderr.write(`failed to start board server: ${err.message}
1556
+ `);
1557
+ finish(1);
1558
+ });
1559
+ child.on("exit", (code, signal) => {
1560
+ const resolved = overrideCode ?? (code == null ? signal ? 0 : 1 : code);
1561
+ finish(resolved);
1562
+ });
1563
+ waitForListen(port, LISTEN_TIMEOUT_MS, () => settled).then(() => {
1564
+ if (settled) return;
1565
+ const url = `http://127.0.0.1:${port}`;
1566
+ process.stdout.write(`Board running at ${url}. To stop the server, press Ctrl+C.
1567
+ `);
1568
+ if (process.env.KODI_NO_OPEN) {
1569
+ process.stdout.write("KODI_NO_OPEN set \u2014 not opening a browser.\n");
1570
+ return;
1571
+ }
1572
+ openBrowser(url);
1573
+ }).catch(() => {
1574
+ if (settled) return;
1575
+ process.stderr.write("board server did not become ready \u2014 shutting down.\n");
1576
+ shutdown(1);
1577
+ });
1578
+ });
1579
+ });
1580
+ }
1581
+
1582
+ // src/commands/tickets.ts
1583
+ import { readFileSync as readFileSync7 } from "fs";
1584
+
1585
+ // src/providers/local.ts
1586
+ import { randomBytes as randomBytes2 } from "crypto";
1587
+ import {
1588
+ existsSync as existsSync6,
1589
+ lstatSync,
1590
+ mkdirSync as mkdirSync4,
1591
+ readdirSync as readdirSync3,
1592
+ readFileSync as readFileSync6,
1593
+ renameSync as renameSync2,
1594
+ unlinkSync as unlinkSync2,
1595
+ writeFileSync as writeFileSync5
1596
+ } from "fs";
1597
+ import { basename as basename2, join as join5 } from "path";
1598
+ import { parse as parseYaml4, stringify as stringifyYaml3 } from "yaml";
1599
+ var FRONTMATTER = /^---\n([\s\S]*?)\n---\n?/;
1600
+ var LEGACY_FOLDERS = ["backlog", "done"];
1601
+ var LEGACY_FILENAME_RE = /^[A-Z][A-Z0-9]*-\d+-.*\.md$/;
1602
+ var LegacyDataError = class extends Error {
1603
+ report;
1604
+ constructor(folders, ticketCount) {
1605
+ super(
1606
+ `legacy ticket data present under docs/tickets/{${folders.join(", ")}} (${ticketCount} ticket-shaped file(s)); clean-start refuses to migrate`
1607
+ );
1608
+ this.name = "LegacyDataError";
1609
+ this.report = { ok: false, reason: "legacy-data-present", folders: [...folders], ticketCount };
1610
+ }
1611
+ };
1612
+ var LocalTicketProvider = class {
1613
+ name = "local";
1614
+ prefix;
1615
+ paths;
1616
+ constructor(prefix, cwd = process.cwd()) {
1617
+ this.prefix = prefix;
1618
+ this.paths = localPaths(cwd);
1619
+ }
1620
+ /**
1621
+ * Lazy idempotent scaffold (R-003, ADR-0001 §2.3): ensure `status.yaml` and
1622
+ * the four status folders exist. A valid pre-existing `status.yaml`
1623
+ * short-circuits the fresh-index write, so re-running never duplicates or
1624
+ * corrupts an existing index. `mkdirSync({recursive:true})` is itself
1625
+ * idempotent for the folders.
1626
+ */
1627
+ scaffold() {
1628
+ this.detectLegacyData();
1629
+ if (!existsSync6(this.paths.statusYaml)) {
1630
+ save(this.paths.statusYaml, emptyDocument());
1631
+ }
1632
+ for (const status of TICKET_STATUSES) {
1633
+ mkdirSync4(this.paths.folderFor(status), { recursive: true });
1634
+ }
1635
+ }
1636
+ /**
1637
+ * Evaluate the data-model §5 legacy predicate and throw {@link LegacyDataError}
1638
+ * when it holds — non-destructively, before any scaffold write:
1639
+ *
1640
+ * legacyPresent := !exists(status.yaml)
1641
+ * AND (exists(backlog/) OR exists(done/))
1642
+ * AND countTicketShapedMd(backlog/, done/) >= 1
1643
+ *
1644
+ * Security posture (guidance pass): zero writes on this path (SR-A); FAILS SAFE
1645
+ * — any error while *determining* presence aborts-and-reports rather than
1646
+ * falling through to scaffold writes (SR-B); a per-file parse/read failure is a
1647
+ * legitimate "not ticket-shaped" and never crashes (SR-C). It short-circuits at
1648
+ * the first confirmed ticket-shaped file (SR-H).
1649
+ */
1650
+ detectLegacyData() {
1651
+ if (existsSync6(this.paths.statusYaml)) return;
1652
+ const states = LEGACY_FOLDERS.map((name2) => ({ name: name2, state: this.legacyDirState(name2) }));
1653
+ const present = states.filter((s) => s.state !== "absent");
1654
+ if (present.length === 0) return;
1655
+ const folders = present.map((s) => s.name);
1656
+ if (present.some((s) => s.state === "unsafe")) {
1657
+ throw new LegacyDataError(folders, 1);
1658
+ }
1659
+ for (const { name: name2, state } of states) {
1660
+ if (state !== "dir") continue;
1661
+ const dir = join5(this.paths.root, name2);
1662
+ let entries;
1663
+ try {
1664
+ entries = readdirSync3(dir, { withFileTypes: true });
1665
+ } catch {
1666
+ throw new LegacyDataError(folders, 1);
1667
+ }
1668
+ for (const dirent of entries) {
1669
+ if (!dirent.isFile()) continue;
1670
+ if (!LEGACY_FILENAME_RE.test(dirent.name)) continue;
1671
+ if (legacyFileHasKey(join5(dir, dirent.name))) {
1672
+ throw new LegacyDataError(folders, 1);
1673
+ }
1674
+ }
1675
+ }
1676
+ }
1677
+ /**
1678
+ * Classify a candidate legacy folder without following symlinks (SR-E). Uses
1679
+ * `lstat` so a symlinked `backlog/`/`done/` is flagged `unsafe` (never followed
1680
+ * out of tree); a missing folder is `absent`; a stat/permission failure is
1681
+ * `unsafe` (SR-B fail-safe); a real directory is `dir`.
1682
+ */
1683
+ legacyDirState(name2) {
1684
+ const dir = join5(this.paths.root, name2);
1685
+ let st;
1686
+ try {
1687
+ st = lstatSync(dir);
1688
+ } catch (err) {
1689
+ if (err.code === "ENOENT") return "absent";
1690
+ return "unsafe";
1691
+ }
1692
+ if (st.isSymbolicLink()) return "unsafe";
1693
+ if (!st.isDirectory()) return "absent";
1694
+ return "dir";
1695
+ }
1696
+ parseFile(path) {
1697
+ let raw;
1698
+ try {
1699
+ raw = readFileSync6(path, "utf-8");
1700
+ } catch {
1701
+ return null;
1702
+ }
1703
+ const m = FRONTMATTER.exec(raw);
1704
+ if (!m) return null;
1705
+ const meta = parseYaml4(m[1]) ?? {};
1706
+ const parsed = TicketSchema.safeParse(meta);
1707
+ if (!parsed.success || !parsed.data.key || !parsed.data.slug) return null;
1708
+ return parsed.data;
1709
+ }
1710
+ /**
1711
+ * Resolve a ticket through the index (index-wins). Returns the absolute file
1712
+ * path, the index entry (authoritative column), and the parsed ticket, or
1713
+ * null when the key is not indexed / the pointer does not resolve.
1714
+ */
1715
+ locate(key) {
1716
+ const doc = load(this.paths.statusYaml);
1717
+ const entry = doc.tickets[key];
1718
+ if (!entry) return null;
1719
+ let path;
1720
+ try {
1721
+ path = resolveFile(this.paths.statusYaml, key, entry);
1722
+ } catch {
1723
+ return null;
1724
+ }
1725
+ const ticket = this.parseFile(path);
1726
+ if (!ticket) return null;
1727
+ return { path, entry, ticket };
1728
+ }
1729
+ /**
1730
+ * Write a ticket markdown file for its `ticket.status` column: render the body
1731
+ * (frontmatter `status` mirrors the column) and land it via a random-suffixed,
1732
+ * exclusively-opened temp file IN THE SAME target folder, then an intra-folder
1733
+ * atomic rename over the final `<KEY>-<slug>.md` (ADR-0001 §2.4; SR-4/SR-5).
1734
+ * Returns the final absolute path. `sortTicket()` output is byte-identical to
1735
+ * the previous model (R-005).
1736
+ */
1737
+ writeTicketFile(ticket) {
1738
+ const dir = this.paths.folderFor(ticket.status);
1739
+ mkdirSync4(dir, { recursive: true });
1740
+ const finalName = basename2(composeFile(ticket.status, ticket.key, ticket.slug));
1741
+ const finalPath = join5(dir, finalName);
1742
+ const body = `---
1743
+ ${stringifyYaml3(sortTicket(ticket)).trimEnd()}
1744
+ ---
1745
+
1746
+ ` + renderTicketMarkdown(ticket);
1747
+ const tmp = join5(dir, `.${finalName}.${randomBytes2(6).toString("hex")}.tmp`);
1748
+ try {
1749
+ writeFileSync5(tmp, body, { encoding: "utf-8", flag: "wx", mode: 384 });
1750
+ renameSync2(tmp, finalPath);
1751
+ } catch (err) {
1752
+ try {
1753
+ if (existsSync6(tmp)) unlinkSync2(tmp);
1754
+ } catch {
1755
+ }
1756
+ throw err;
1757
+ }
1758
+ return finalPath;
1759
+ }
1760
+ /** Index-driven enumeration: one ref per `status.yaml` entry, column-authoritative. */
1761
+ collectRefs() {
1762
+ const doc = load(this.paths.statusYaml);
1763
+ const refs = [];
1764
+ for (const [key, entry] of Object.entries(doc.tickets)) {
1765
+ let path;
1766
+ try {
1767
+ path = resolveFile(this.paths.statusYaml, key, entry);
1768
+ } catch {
1769
+ continue;
1770
+ }
1771
+ const t = this.parseFile(path);
1772
+ if (t) refs.push(toRef2({ ...t, status: entry.column }));
1773
+ }
1774
+ return refs.sort((a, b) => a.key.localeCompare(b.key, void 0, { numeric: true }));
1775
+ }
1776
+ async nextId(prefix = this.prefix) {
1777
+ const doc = load(this.paths.statusYaml);
1778
+ let max = 0;
1779
+ for (const key of Object.keys(doc.tickets)) {
1780
+ const m = /^([A-Z][A-Z0-9]*)-(\d+)$/.exec(key);
1781
+ if (m && m[1] === prefix) max = Math.max(max, Number(m[2]));
1782
+ }
1783
+ return `${prefix}-${String(max + 1).padStart(3, "0")}`;
1784
+ }
1785
+ async create(input) {
1786
+ this.scaffold();
1787
+ const key = input.key ?? await this.nextId(this.prefix);
1788
+ if (load(this.paths.statusYaml).tickets[key]) {
1789
+ throw new Error(`ticket ${key} already exists`);
1790
+ }
1791
+ const slug = input.slug ?? slugify(input.title);
1792
+ const ticket = { ...input, key, slug };
1793
+ this.writeTicketFile(ticket);
1794
+ const doc = load(this.paths.statusYaml);
1795
+ upsert(doc, { key, column: ticket.status, slug });
1796
+ save(this.paths.statusYaml, doc);
1797
+ return ticket;
1798
+ }
1799
+ async get(key) {
1800
+ const found = this.locate(key);
1801
+ if (!found) return null;
1802
+ return { ...found.ticket, status: found.entry.column };
1803
+ }
1804
+ async list() {
1805
+ return this.collectRefs();
1806
+ }
1807
+ async listReady() {
1808
+ const all = await this.list();
1809
+ const doneKeys = new Set(all.filter((t) => t.status === "Done").map((t) => t.key));
1810
+ const ready = [];
1811
+ const blocked = [];
1812
+ for (const t of all) {
1813
+ if (t.status !== "Pending") continue;
1814
+ const unmet = t.dependencies.filter((d) => !doneKeys.has(d));
1815
+ if (unmet.length === 0) ready.push(t);
1816
+ else blocked.push({ ticket: t, blockedBy: unmet });
1817
+ }
1818
+ return { ready, blocked };
1819
+ }
1820
+ async setStatus(key, status) {
1821
+ const found = this.locate(key);
1822
+ if (!found) throw new Error(`ticket ${key} not found`);
1823
+ const oldPath = found.path;
1824
+ const ticket = { ...found.ticket, status };
1825
+ const newPath = this.writeTicketFile(ticket);
1826
+ const doc = load(this.paths.statusYaml);
1827
+ upsert(doc, { key, column: status, slug: ticket.slug });
1828
+ save(this.paths.statusYaml, doc);
1829
+ if (oldPath !== newPath) unlinkSync2(oldPath);
1830
+ return ticket;
1831
+ }
1832
+ async start(key, _provenance) {
1833
+ return this.setStatus(key, "In progress");
1834
+ }
1835
+ async amend(key, patch) {
1836
+ const found = this.locate(key);
1837
+ if (!found) throw new Error(`ticket ${key} not found`);
1838
+ const column = found.entry.column;
1839
+ const ticket = {
1840
+ ...found.ticket,
1841
+ ...patch,
1842
+ key,
1843
+ slug: found.ticket.slug,
1844
+ status: column
1845
+ };
1846
+ this.writeTicketFile(ticket);
1847
+ const doc = load(this.paths.statusYaml);
1848
+ upsert(doc, { key, column, slug: ticket.slug });
1849
+ save(this.paths.statusYaml, doc);
1850
+ return ticket;
1851
+ }
1852
+ async delete(key) {
1853
+ const found = this.locate(key);
1854
+ if (!found) throw new Error(`ticket ${key} not found`);
1855
+ const doc = load(this.paths.statusYaml);
1856
+ remove(doc, key);
1857
+ save(this.paths.statusYaml, doc);
1858
+ unlinkSync2(found.path);
1859
+ }
1860
+ };
1861
+ function legacyFileHasKey(path) {
1862
+ let raw;
1863
+ try {
1864
+ raw = readFileSync6(path, "utf-8");
1865
+ } catch {
1866
+ return false;
1867
+ }
1868
+ const m = FRONTMATTER.exec(raw);
1869
+ if (!m) return false;
1870
+ let meta;
1871
+ try {
1872
+ meta = parseYaml4(m[1]);
1873
+ } catch {
1874
+ return false;
1875
+ }
1876
+ if (meta === null || typeof meta !== "object") return false;
1877
+ const key = meta.key;
1878
+ return typeof key === "string" && KEY_RE.test(key);
1879
+ }
1880
+ function toRef2(t) {
1881
+ return {
1882
+ key: t.key,
1883
+ title: t.title,
1884
+ status: t.status,
1885
+ slug: t.slug,
1886
+ dependencies: t.dependencies
1887
+ };
1888
+ }
1889
+ function sortTicket(t) {
1890
+ return {
1891
+ key: t.key,
1892
+ title: t.title,
1893
+ slug: t.slug,
1894
+ status: t.status,
1895
+ dependencies: t.dependencies,
1896
+ drivers: t.drivers,
1897
+ summary: t.summary,
1898
+ acceptanceCriteria: t.acceptanceCriteria,
1899
+ nonGoals: t.nonGoals,
1900
+ ...t.prUrl ? { prUrl: t.prUrl } : {},
1901
+ ...t.notes ? { notes: t.notes } : {}
1902
+ };
1903
+ }
1904
+
1905
+ // src/providers/github.ts
1906
+ import { mkdtempSync as mkdtempSync2, writeFileSync as writeFileSync6 } from "fs";
1907
+ import { tmpdir as tmpdir2 } from "os";
1908
+ import { join as join6 } from "path";
1909
+ var MARKER_RE2 = /<!--\s*kodi:ticket\s+(\{[\s\S]*?\})\s*-->/;
1910
+ var DEFAULT_COLUMNS2 = {
1911
+ todo: "Todo",
1912
+ inProgress: "In Progress",
1913
+ toReview: "In Progress",
1914
+ done: "Done"
1915
+ };
1916
+ function columnForStatus2(status, cols) {
1917
+ switch (status) {
1918
+ case "In progress":
1919
+ return cols.inProgress ?? DEFAULT_COLUMNS2.inProgress;
1920
+ case "To review":
1921
+ return cols.toReview ?? DEFAULT_COLUMNS2.toReview;
1922
+ case "Done":
1923
+ return cols.done ?? DEFAULT_COLUMNS2.done;
1924
+ default:
1925
+ return cols.todo;
1926
+ }
1927
+ }
1928
+ function statusFromColumn2(column, cols) {
1929
+ if (column === cols.todo) return "Pending";
1930
+ if (column === (cols.inProgress ?? DEFAULT_COLUMNS2.inProgress)) return "In progress";
1931
+ if (column === (cols.toReview ?? DEFAULT_COLUMNS2.toReview)) return "To review";
1932
+ if (column === (cols.done ?? DEFAULT_COLUMNS2.done)) return "Done";
1933
+ return void 0;
1934
+ }
1935
+ function serializeBody(t) {
1936
+ const canonical = JSON.stringify({ ...t, key: void 0 });
1937
+ return `${renderTicketMarkdown(t)}
1938
+ <!-- kodi:ticket ${canonical} -->
1939
+ `;
1940
+ }
1941
+ function parseMarker(body) {
1942
+ const m = body ? MARKER_RE2.exec(body) : null;
1139
1943
  if (!m) return null;
1140
1944
  const parsed = TicketSchema.safeParse(JSON.parse(m[1]));
1141
1945
  return parsed.success ? parsed.data : null;
@@ -1146,7 +1950,8 @@ function parseItems(json) {
1146
1950
  const out2 = [];
1147
1951
  for (const it of items) {
1148
1952
  const content = it?.content ?? {};
1149
- if (content.type !== "Issue" || typeof content.number !== "number" || typeof it?.id !== "string") continue;
1953
+ if (content.type !== "Issue" || typeof content.number !== "number" || typeof it?.id !== "string")
1954
+ continue;
1150
1955
  out2.push({
1151
1956
  itemId: it.id,
1152
1957
  issueNumber: content.number,
@@ -1162,7 +1967,18 @@ function createIssueArgs(repo, title, bodyFile) {
1162
1967
  return args;
1163
1968
  }
1164
1969
  function itemAddArgs(owner, number, issueUrl) {
1165
- return ["gh", "project", "item-add", String(number), "--owner", owner, "--url", issueUrl, "--format", "json"];
1970
+ return [
1971
+ "gh",
1972
+ "project",
1973
+ "item-add",
1974
+ String(number),
1975
+ "--owner",
1976
+ owner,
1977
+ "--url",
1978
+ issueUrl,
1979
+ "--format",
1980
+ "json"
1981
+ ];
1166
1982
  }
1167
1983
  function itemEditArgs(projectId, itemId, fieldId, optionId) {
1168
1984
  return [
@@ -1216,7 +2032,17 @@ var GithubTicketProvider = class {
1216
2032
  /** Body for an item — from item-list when present, else a per-issue fallback fetch. */
1217
2033
  bodyFor(item) {
1218
2034
  if (item.body != null) return item.body;
1219
- return execRead(["gh", "issue", "view", String(item.issueNumber), "--json", "body", "-q", ".body", ...this.repoArgs()]);
2035
+ return execRead([
2036
+ "gh",
2037
+ "issue",
2038
+ "view",
2039
+ String(item.issueNumber),
2040
+ "--json",
2041
+ "body",
2042
+ "-q",
2043
+ ".body",
2044
+ ...this.repoArgs()
2045
+ ]);
1220
2046
  }
1221
2047
  toStored(item) {
1222
2048
  const t = parseMarker(this.bodyFor(item));
@@ -1235,7 +2061,10 @@ var GithubTicketProvider = class {
1235
2061
  const r1 = execMutate(createIssueArgs(this.opts.repo, input.title, bodyFile), this.opts.dryRun);
1236
2062
  if (!r1.ran) {
1237
2063
  execMutate(itemAddArgs(this.opts.owner, this.opts.number, "<issue-url>"), this.opts.dryRun);
1238
- execMutate(itemEditArgs("<project-id>", "<item-id>", "<status-field-id>", "<option-id>"), this.opts.dryRun);
2064
+ execMutate(
2065
+ itemEditArgs("<project-id>", "<item-id>", "<status-field-id>", "<option-id>"),
2066
+ this.opts.dryRun
2067
+ );
1239
2068
  return { ...draft, key: "(dry-run)" };
1240
2069
  }
1241
2070
  const url = r1.stdout.trim().split("\n").pop() ?? "";
@@ -1245,7 +2074,8 @@ var GithubTicketProvider = class {
1245
2074
  const itemId = JSON.parse(add.stdout).id;
1246
2075
  const meta = this.projectMeta();
1247
2076
  const optionId = optionIdFor(meta.statusField, columnForStatus2(input.status, this.columns));
1248
- if (optionId) execMutate(itemEditArgs(meta.projectId, itemId, meta.statusField.id, optionId), false);
2077
+ if (optionId)
2078
+ execMutate(itemEditArgs(meta.projectId, itemId, meta.statusField.id, optionId), false);
1249
2079
  } catch (e) {
1250
2080
  throw new Error(
1251
2081
  `issue #${num} was created (${url}) but could not be added to project #${this.opts.number}: ${e instanceof Error ? e.message : String(e)}
@@ -1260,7 +2090,7 @@ If your gh token lacks the \`project\` scope, run \`gh auth refresh -s project -
1260
2090
  return item ? this.toStored(item) : null;
1261
2091
  }
1262
2092
  async list() {
1263
- return this.items().map((i) => this.toStored(i)).filter((t) => t !== null).map(toRef2);
2093
+ return this.items().map((i) => this.toStored(i)).filter((t) => t !== null).map(toRef3);
1264
2094
  }
1265
2095
  async listReady() {
1266
2096
  const all = await this.list();
@@ -1282,8 +2112,12 @@ If your gh token lacks the \`project\` scope, run \`gh auth refresh -s project -
1282
2112
  if (!current) throw new Error(`issue ${key} has no kodi marker`);
1283
2113
  const meta = this.projectMeta();
1284
2114
  const optionId = optionIdFor(meta.statusField, columnForStatus2(status, this.columns));
1285
- if (!optionId) throw new Error(`no Status option maps to "${status}" on project #${this.opts.number}`);
1286
- execMutate(itemEditArgs(meta.projectId, item.itemId, meta.statusField.id, optionId), this.opts.dryRun);
2115
+ if (!optionId)
2116
+ throw new Error(`no Status option maps to "${status}" on project #${this.opts.number}`);
2117
+ execMutate(
2118
+ itemEditArgs(meta.projectId, item.itemId, meta.statusField.id, optionId),
2119
+ this.opts.dryRun
2120
+ );
1287
2121
  return { ...current, status };
1288
2122
  }
1289
2123
  async start(key, _p) {
@@ -1303,183 +2137,20 @@ If your gh token lacks the \`project\` scope, run \`gh auth refresh -s project -
1303
2137
  execMutate(["gh", "issue", "delete", key, "--yes", ...this.repoArgs()], this.opts.dryRun);
1304
2138
  }
1305
2139
  };
1306
- function toRef2(t) {
1307
- return { key: t.key, title: t.title, status: t.status, slug: t.slug, dependencies: t.dependencies };
1308
- }
1309
- function writeTempBody(body) {
1310
- const file = join5(mkdtempSync2(join5(tmpdir2(), "kodi-gh-")), "body.md");
1311
- writeFileSync4(file, body, "utf-8");
1312
- return file;
1313
- }
1314
-
1315
- // src/providers/local.ts
1316
- import {
1317
- existsSync as existsSync4,
1318
- mkdirSync as mkdirSync3,
1319
- readdirSync as readdirSync3,
1320
- readFileSync as readFileSync5,
1321
- rmSync,
1322
- writeFileSync as writeFileSync5
1323
- } from "fs";
1324
- import { join as join6 } from "path";
1325
- import { parse as parseYaml3, stringify as stringifyYaml2 } from "yaml";
1326
- var FRONTMATTER = /^---\n([\s\S]*?)\n---\n?/;
1327
- var LocalTicketProvider = class {
1328
- name = "local";
1329
- prefix;
1330
- paths;
1331
- constructor(prefix, cwd = process.cwd()) {
1332
- this.prefix = prefix;
1333
- this.paths = localPaths(cwd);
1334
- }
1335
- ensureDirs() {
1336
- mkdirSync3(this.paths.backlog, { recursive: true });
1337
- mkdirSync3(this.paths.done, { recursive: true });
1338
- }
1339
- fileName(t) {
1340
- return `${t.key}-${t.slug}.md`;
1341
- }
1342
- /** Directory a ticket file lives in for a given status. */
1343
- dirFor(status) {
1344
- return status === "Done" ? this.paths.done : this.paths.backlog;
1345
- }
1346
- allFiles() {
1347
- const out2 = [];
1348
- for (const dir of [this.paths.backlog, this.paths.done]) {
1349
- if (!existsSync4(dir)) continue;
1350
- for (const file of readdirSync3(dir)) {
1351
- if (file.endsWith(".md")) out2.push({ dir, file });
1352
- }
1353
- }
1354
- return out2;
1355
- }
1356
- parseFile(dir, file) {
1357
- const raw = readFileSync5(join6(dir, file), "utf-8");
1358
- const m = FRONTMATTER.exec(raw);
1359
- if (!m) return null;
1360
- const meta = parseYaml3(m[1]) ?? {};
1361
- const parsed = TicketSchema.safeParse(meta);
1362
- if (!parsed.success || !parsed.data.key || !parsed.data.slug) return null;
1363
- return parsed.data;
1364
- }
1365
- locate(key) {
1366
- for (const { dir, file } of this.allFiles()) {
1367
- const ticket = this.parseFile(dir, file);
1368
- if (ticket && ticket.key === key) return { dir, file, ticket };
1369
- }
1370
- return null;
1371
- }
1372
- persist(ticket) {
1373
- this.ensureDirs();
1374
- const existing = this.locate(ticket.key);
1375
- if (existing) rmSync(join6(existing.dir, existing.file));
1376
- const dir = this.dirFor(ticket.status);
1377
- const body = `---
1378
- ${stringifyYaml2(sortTicket(ticket)).trimEnd()}
1379
- ---
1380
-
1381
- ` + renderTicketMarkdown(ticket);
1382
- writeFileSync5(join6(dir, this.fileName(ticket)), body, "utf-8");
1383
- this.writeIndex();
1384
- }
1385
- async nextId(prefix = this.prefix) {
1386
- let max = 0;
1387
- for (const { dir, file } of this.allFiles()) {
1388
- const t = this.parseFile(dir, file);
1389
- if (!t) continue;
1390
- const m = /^([A-Z][A-Z0-9]*)-(\d+)$/.exec(t.key);
1391
- if (m && m[1] === prefix) max = Math.max(max, Number(m[2]));
1392
- }
1393
- return `${prefix}-${String(max + 1).padStart(3, "0")}`;
1394
- }
1395
- async create(input) {
1396
- const key = input.key ?? await this.nextId(this.prefix);
1397
- if (this.locate(key)) throw new Error(`ticket ${key} already exists`);
1398
- const slug = input.slug ?? slugify(input.title);
1399
- const ticket = { ...input, key, slug };
1400
- this.persist(ticket);
1401
- return ticket;
1402
- }
1403
- async get(key) {
1404
- return this.locate(key)?.ticket ?? null;
1405
- }
1406
- async list() {
1407
- const refs = [];
1408
- for (const { dir, file } of this.allFiles()) {
1409
- const t = this.parseFile(dir, file);
1410
- if (t) refs.push(toRef3(t));
1411
- }
1412
- return refs.sort((a, b) => a.key.localeCompare(b.key, void 0, { numeric: true }));
1413
- }
1414
- async listReady() {
1415
- const all = await this.list();
1416
- const doneKeys = new Set(all.filter((t) => t.status === "Done").map((t) => t.key));
1417
- const ready = [];
1418
- const blocked = [];
1419
- for (const t of all) {
1420
- if (t.status !== "Pending") continue;
1421
- const unmet = t.dependencies.filter((d) => !doneKeys.has(d));
1422
- if (unmet.length === 0) ready.push(t);
1423
- else blocked.push({ ticket: t, blockedBy: unmet });
1424
- }
1425
- return { ready, blocked };
1426
- }
1427
- async setStatus(key, status) {
1428
- const found = this.locate(key);
1429
- if (!found) throw new Error(`ticket ${key} not found`);
1430
- const ticket = { ...found.ticket, status };
1431
- this.persist(ticket);
1432
- return ticket;
1433
- }
1434
- async start(key, _provenance) {
1435
- return this.setStatus(key, "In progress");
1436
- }
1437
- async amend(key, patch) {
1438
- const found = this.locate(key);
1439
- if (!found) throw new Error(`ticket ${key} not found`);
1440
- const ticket = { ...found.ticket, ...patch, key, slug: found.ticket.slug };
1441
- this.persist(ticket);
1442
- return ticket;
1443
- }
1444
- async delete(key) {
1445
- const found = this.locate(key);
1446
- if (!found) throw new Error(`ticket ${key} not found`);
1447
- rmSync(join6(found.dir, found.file));
1448
- this.writeIndex();
1449
- }
1450
- writeIndex() {
1451
- const refs = [];
1452
- for (const { dir, file } of this.allFiles()) {
1453
- const t = this.parseFile(dir, file);
1454
- if (t) refs.push(toRef3(t));
1455
- }
1456
- refs.sort((a, b) => a.key.localeCompare(b.key, void 0, { numeric: true }));
1457
- const lines = ["# Tickets", "", "| Key | Title | Status | Depends on |", "|---|---|---|---|"];
1458
- for (const t of refs) {
1459
- lines.push(`| ${t.key} | ${t.title} | ${t.status} | ${t.dependencies.join(", ") || "\u2014"} |`);
1460
- }
1461
- lines.push("");
1462
- writeFileSync5(this.paths.index, lines.join("\n"), "utf-8");
1463
- }
1464
- };
1465
2140
  function toRef3(t) {
1466
- return { key: t.key, title: t.title, status: t.status, slug: t.slug, dependencies: t.dependencies };
1467
- }
1468
- function sortTicket(t) {
1469
2141
  return {
1470
2142
  key: t.key,
1471
2143
  title: t.title,
1472
- slug: t.slug,
1473
2144
  status: t.status,
1474
- dependencies: t.dependencies,
1475
- drivers: t.drivers,
1476
- summary: t.summary,
1477
- acceptanceCriteria: t.acceptanceCriteria,
1478
- nonGoals: t.nonGoals,
1479
- ...t.prUrl ? { prUrl: t.prUrl } : {},
1480
- ...t.notes ? { notes: t.notes } : {}
2145
+ slug: t.slug,
2146
+ dependencies: t.dependencies
1481
2147
  };
1482
2148
  }
2149
+ function writeTempBody(body) {
2150
+ const file = join6(mkdtempSync2(join6(tmpdir2(), "kodi-gh-")), "body.md");
2151
+ writeFileSync6(file, body, "utf-8");
2152
+ return file;
2153
+ }
1483
2154
 
1484
2155
  // src/providers/index.ts
1485
2156
  function resolveProvider(cwd = process.cwd(), opts = {}) {
@@ -1516,7 +2187,7 @@ function out(data, json, human) {
1516
2187
  }
1517
2188
  function draftFromOptions2(o) {
1518
2189
  if (o.file) {
1519
- const raw = JSON.parse(readFileSync6(String(o.file), "utf-8"));
2190
+ const raw = JSON.parse(readFileSync7(String(o.file), "utf-8"));
1520
2191
  return TicketSchema.parse(raw);
1521
2192
  }
1522
2193
  return TicketSchema.parse({
@@ -1537,8 +2208,17 @@ function registerTicketsCommand(program2) {
1537
2208
  const tickets = program2.command("tickets").description("Manage tickets across the active provider (local / github / azure)");
1538
2209
  tickets.command("create").description("Create a ticket (validates the template)").option("-f, --file <path>", "JSON draft file (validated against the ticket template)").option("-t, --title <title>").option("-s, --summary <summary>").option("--ac <criterion>", "acceptance criterion (repeatable)", collect2, []).option("--non-goal <text>", "non-goal (repeatable)", collect2, []).option("--dep <key>", "dependency ticket key (repeatable)", collect2, []).option("--prd <ref>", "PRD driver").option("--adr <ref>", "ADR driver (repeatable)", collect2, []).option("--security <ref>", "security driver").option("--notes <text>").option("--yes", "execute remote mutations (default: dry-run)", false).option("--json", "machine-readable output", false).action(async (o) => {
1539
2210
  const draft = draftFromOptions2(o);
1540
- const created = await resolveProvider(process.cwd(), { yes: o.yes }).create(draft);
1541
- out(created, o.json, () => `Created ${created.key} (${created.status}) \u2014 ${created.title}`);
2211
+ try {
2212
+ const created = await resolveProvider(process.cwd(), { yes: o.yes }).create(draft);
2213
+ out(created, o.json, () => `Created ${created.key} (${created.status}) \u2014 ${created.title}`);
2214
+ } catch (err) {
2215
+ if (err instanceof LegacyDataError) {
2216
+ out(err.report, o.json, () => renderLegacyRefusal(err.report));
2217
+ process.exitCode = 1;
2218
+ return;
2219
+ }
2220
+ throw err;
2221
+ }
1542
2222
  });
1543
2223
  tickets.command("list").description("List all tickets").option("--json", "machine-readable output", false).action(async (o) => {
1544
2224
  const refs = await resolveProvider().list();
@@ -1577,11 +2257,16 @@ ${blocked}`;
1577
2257
  process.exitCode = 1;
1578
2258
  return;
1579
2259
  }
1580
- const t = await resolveProvider(process.cwd(), { yes: o.yes }).setStatus(key, status);
2260
+ const t = await resolveProvider(process.cwd(), { yes: o.yes }).setStatus(
2261
+ key,
2262
+ status
2263
+ );
1581
2264
  out(t, o.json, () => `${t.key} \u2192 ${t.status}`);
1582
2265
  });
1583
2266
  tickets.command("start <key>").description("Mark a ticket started (In progress)").option("--branch <name>").option("--yes", "execute remote mutations (default: dry-run)", false).option("--json", "machine-readable output", false).action(async (key, o) => {
1584
- const t = await resolveProvider(process.cwd(), { yes: o.yes }).start(key, { branch: o.branch });
2267
+ const t = await resolveProvider(process.cwd(), { yes: o.yes }).start(key, {
2268
+ branch: o.branch
2269
+ });
1585
2270
  out(t, o.json, () => `${t.key} \u2192 ${t.status}`);
1586
2271
  });
1587
2272
  tickets.command("delete <key>").description("Delete a ticket").option("--yes", "execute remote mutations (default: dry-run)", false).option("--json", "machine-readable output", false).action(async (key, o) => {
@@ -1593,7 +2278,7 @@ ${blocked}`;
1593
2278
  out({ nextId: id }, o.json, () => id);
1594
2279
  });
1595
2280
  tickets.command("amend <key>").description("Edit a ticket (from --file patch or flags)").option("-f, --file <path>", "JSON patch (validated against the template)").option("-s, --summary <text>").option("--notes <text>").option("--ac <criterion>", "replace acceptance criteria (repeatable)", collect2, []).option("--dep <key>", "replace dependencies (repeatable)", collect2, []).option("--pr <ref>", "link a PR").option("--yes", "execute remote mutations (default: dry-run)", false).option("--json", "machine-readable output", false).action(async (key, o) => {
1596
- const patch = o.file ? TicketSchema.partial().parse(JSON.parse(readFileSync6(String(o.file), "utf-8"))) : buildPatch(o);
2281
+ const patch = o.file ? TicketSchema.partial().parse(JSON.parse(readFileSync7(String(o.file), "utf-8"))) : buildPatch(o);
1597
2282
  const t = await resolveProvider(process.cwd(), { yes: o.yes }).amend(key, patch);
1598
2283
  out(t, o.json, () => `Amended ${t.key}`);
1599
2284
  });
@@ -1615,7 +2300,11 @@ ${blocked}`;
1615
2300
  const t = await provider.amend(key, { dependencies: deps });
1616
2301
  out(t.dependencies, o.json, () => `${key} deps: ${t.dependencies.join(", ") || "(none)"}`);
1617
2302
  } else {
1618
- out(current.dependencies, o.json, () => `${key} deps: ${current.dependencies.join(", ") || "(none)"}`);
2303
+ out(
2304
+ current.dependencies,
2305
+ o.json,
2306
+ () => `${key} deps: ${current.dependencies.join(", ") || "(none)"}`
2307
+ );
1619
2308
  }
1620
2309
  });
1621
2310
  tickets.command("hand-off <key>").description("End of slice: move to To review and optionally link the PR").option("--pr <ref>", "link the PR at hand-off").option("--yes", "execute remote mutations (default: dry-run)", false).option("--json", "machine-readable output", false).action(async (key, o) => {
@@ -1629,6 +2318,13 @@ ${blocked}`;
1629
2318
  function collect2(value, previous) {
1630
2319
  return previous.concat([value]);
1631
2320
  }
2321
+ function renderLegacyRefusal(report) {
2322
+ const list = report.folders.map((f) => `docs/tickets/${f}`).join(" and ");
2323
+ const files = `${report.ticketCount} ticket file${report.ticketCount === 1 ? "" : "s"}`;
2324
+ return `Refusing to create: legacy ticket data detected under ${list} (at least ${files}).
2325
+ kodi uses a clean-start model and will not migrate, move, or modify legacy tickets.
2326
+ Move or remove the legacy tickets under ${list}, then re-run.`;
2327
+ }
1632
2328
  function buildPatch(o) {
1633
2329
  const patch = {};
1634
2330
  if (o.summary !== void 0) patch.summary = o.summary;
@@ -1641,13 +2337,14 @@ function buildPatch(o) {
1641
2337
 
1642
2338
  // package.json
1643
2339
  var name = "kodi-dev";
1644
- var version = "0.1.1";
2340
+ var version = "1.0.1";
1645
2341
  var description = "kodi.dev \u2014 Claude Code-native agent orchestrator CLI";
1646
2342
 
1647
2343
  // src/index.ts
1648
2344
  var program = new Command();
1649
2345
  program.name(name).description(description).version(version, "-v, --version", "output the current version");
1650
2346
  registerTicketsCommand(program);
2347
+ registerServeCommand(program);
1651
2348
  registerPrCommand(program);
1652
2349
  registerHookCommand(program);
1653
2350
  registerInitCommand(program);